单向散列函数&数字签名&数字证书

写于前

iOS中常在哪些场景应用到
  • 支付密码、验证码相关的业务场景
  • 之前个人维护的一个数字证书模块,与密码学相关知识也紧密相关,同时数字证书在我们的业务场景中,是作为指纹支付的基础
  • iOS的签名机制。常常跟着网上的教程一顿操作,然而却不知道原理是什么。个人觉得,知道原理后续遇到问题也更能快速定位哪个环节的问题,也能学习优秀的技术方案是如何设计的
写一个系列
本文概要
  • 白话厘清概念,分析优缺点(不累述算法实现)
  • 看完,能对平常接触的md5,SHA,数字签名及其应用场景,证书等问题有个清晰的脉络

单项散列函数(One-way Hash Function

为什么存在?
  • 解决发送的数据是否被篡改。无法解决伪装性!(是否是某人发的)
基本概念:
  • 又称哈希函数/消息摘要函数/杂凑函数
  • 输出的散列值又称消息摘要(Message Diges,MD)/指纹(Fingerprint)
  • 输入的消息又称原像(pre-image)
特点:
  • 计算速度快
  • 任意消息长度,计算所得固定长度的散列值
  • 消息不同,散列值也不同
  • 具有单向性,无法通过散列值反推出消息的性质
常见的单项散列函数
  • 补充一个概念

    • 抗碰撞性:无法随机找到两条不同的消息,使得他们的散列值相同
      • 弱抗碰撞性:给定某个散列值,找到具有相同散列值的另一条消息非常困难
      • 强抗碰撞性:找到散列值相同的两条的不同消息非常困难
      • 单项散列函数必须同时具备这两者特征
    • 常用来表示这个单项散列函数目前是否安全
  • MD4,MD5

    • 产生128bit的散列值
    • 目前强抗碰撞性已被攻破,不安全
  • SHA(Secure Hash Algorithm)-安全散列算法

    • SHA-1

      • 产生160bit的散列值
      • 目前强抗碰撞性已被攻破,不安全
    • SHA-2

      • 存在6个版本,是指上是SHA-256和SHA-512的衍生,后面的数字即散列值长度
      • 目前尚未被攻破
    • SHA-3

      • 区别于SHA-1,SHA-2的全新标准

    补充:

    • SHA-1,SHA-2有不同,但还是共享相同的基本算法,SHA-2更安全主要通过增加散列长度实现
    • 随着时间推移,旧版本算法被攻破只是时间问题
    • SHA-2在2001年成为推荐标准,但软件/硬件设备供应商对SHA-1到SHA-2的迁移大部分工作在2016年和2017年后期才完成。最先吃螃蟹的人总要进行大量的工作,后来者则有更多的经验可借鉴。
    • http://www.sohu.com/a/224156626_750628
  • RIPEMD-160

    • RIPEMD-160是欧盟所设计的RIPEMD的修订版,散列值为160比特。
    • RIPEMD已经被攻破,RIPEMD-160还未被攻破。
主要应用场景
  • 检测软件/数据是否被篡改:软件发布可以将散列值发布到网站上,使用者可判断是否被篡改
  • 口令加密:最简单的场景就是服务器存储口令的散列值(口令可以理解为日常用的密码),只有用户输入的时候是密文,后面全部以散列值处理存储

    PBE(Password Based Encryption)将口令与salt(随机数)混合计算散列值,作为加密的密钥,来抵御针对口令的字典攻击。

  • 伪随机数生成器:伪随机数需要具备"事实上不可能根据过去的随机数列预测未来的随机数列"这样的性质。为了保证不可预测性,可以利用单向散列函数的单向性。
  • 数字签名:下文会提到

数字签名

为什么存在?
  • 单项散列函数解决发送的数据是否被篡改。
  • 数字签名解决不可伪装性(签名不是别人写的),也不可抵赖(否认签名是自己的签名)。(白话:是你自己签名的,签的也是你自己签名)
How
  • 用私钥来签名(私钥只有一个人有,确保这是我发的消息,只有我能发布这个签名),别人可以用公钥来验证(验签)。
  • 还记得这篇文章里提到的到底公钥私钥哪个用来加密的讨论吗。这里给出解释了
优化
  • 可优化点:直接对要发送的消息用私钥加密,如果文件较大,那么加密过程会很耗时,且(密文+消息)发送内容也较大

  • 结合单项散列函数的特性,先获得要发送的消息的散列值,再进行加密

  • 流程图如下:

数字签名存在的问题
  • 在数字证书的流程中,有一个前提,发送者和接受者的私钥公钥必须是配对的。如果在公私钥共享过程中,遭受中间人攻击或公钥被替换等情况如下图

  • 总结就是需要验证公钥的合法性

  • 解决方案:数字证书

数字证书

  • 数字证书保证公钥合法性
基本概念
  • CA(Certificate Authority):证书的签发、认证、管理
  • 又称公钥证书(Public-key Certificate,PKC)
简单流程
  • 注册者A,生成密钥对,并将公钥以及个人信息发给CA
  • CA生成CA的密钥对,公钥公开下载。CA公钥对A的公钥进行数字签名,并包含一系列信息,生成数字证书
  • 为了保证数字证书不被篡改,CA对数字证书进行Hash计算生成Hash值(指纹),并利用CA私钥加密,并放入数字证书(这一点上面的流程图没有画出)
  • 使用者B向CA申请,获得数字证书,下载CA公钥
  • CA公钥解密证书中的指纹获得Hash值,与自己对数字证书进行Hash计算获得Hash值,两者比较,判断证书是否被篡改
  • CA公钥验证数字签名,获得合法公钥
证书示例

总结

  • 单项散列函数解决不被篡改
  • 数字签名私钥签名,公钥验签。保证消息不可伪装,不可否认
  • 数字证书保证公钥合法性

参考文献

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值