iOS签名机制03- 单向散列函数,数字签名和证书

文章结构


2061885-70af08aeb59e9817.png
文章结构.png

单向散列函数

  • 基本概念

    • 单向散列函数,又称为消息摘要函数(message digest function)、哈希函数
    • 可以根据消息内容计算出散列值
      2061885-6e4b48bfcfabc800.png
      单向散列函数-1.png
    • 输出的散列值,也称为消息摘要(message digest)、指纹(fingerprint)
    • 散列值的长度和消息的长度无关,无论消息是1bit、10M、100G,单向散列函数都会计算出固定长度的散列值


      2061885-d0b2b72e05330863.png
      单向散列函数-2.png
  • 特点

    • 根据任意长度的消息,计算出固定长度的散列值
    • 计算速度快,能快速计算出散列值
    • 消息不同,散列值也不同
    • 具备单向性(不可逆)
  • 常见的单向散列函数

    • MD4、MD5
      • 产生128bit的散列值,MD就是Message Digest的缩写,目前已经不安全
      • Mac终端上默认可以使用md5命令
    • SHA-1
      • 产生160bit的散列值,目前已经不安全
    • SHA-2
      • SHA-256、SHA-384、SHA-512,散列值长度分别是256bit、384bit、512bit
    • SHA-3
      • 全新标准
  • 应用

    • 防止数据被篡改


      2061885-f3b319c12587e5ec.png
      单向散列函数-3.png
    • 口令加密 (存储在平台上的密码平台也是无法知道的)


      2061885-a66395fe78de79d0.png
      单向散列函数-4.png

数字签名

  • 问题引出

    2061885-c840c89982b9c1aa.png
    数字签名-1.png

    • Alice发的内容有可能是被篡改的,或者有人伪装成Alice发消息,或者就是Alice发的,但她可以否认
    • 问题就是Bob如何确定这段消息的真实性?如何识别篡改、伪装、否认?
    • 解决方案:数字签名
  • 基本概念

    • 在数字签名技术中,有以下2种行为
      • 生成签名:由消息的发送者完成,通过“签名密钥”生成
      • 验证签名:由消息的接收者完成,通过“验证密钥”验证
    • 如何能保证这个签名是消息发送者自己签的?
      • 用消息发送者的私钥进行签名
  • 过程

    • 将明文消息和签名一起发给对方。对方利用公钥解密 签名得到明文消息,再和自己收到的明文消息进行比较
      2061885-304b2d02f7987dbf.png
      数字签名-2.png
    • 这种方式存在的问题就是:发送的数据有可能过多过大。有可能明文消息有多大,生成的签名就有多大。

    • 解决方式:利用单向散列函数

  • 改进

    • 2061885-ef25d37636f5f753.png
      数字签名-3.png
  • 总过程

    1. 消息发送者Alice生成密钥对:Alice公钥,Alice私钥;
    2. Alice将公钥发给消息接收者Bob;
    3. Alice利用单向散列函数对要发送的消息进行处理,形成固定长度的散列值;
    4. Alice利用私钥对散列值进行签名;
    5. Alice将消息和签名发送给Bob;
    6. Bob在得到消息和签名后,首先利用Alice的公钥验证签名,得到消息的散列值;
    7. Bob再将收到消息进行哈希处理,同样得到消息的散列值;
    8. 将第6步和第7步得到的散列值进行比较,看是否相同。如果不同,说明消息已经被篡改。
    9. 整体流程,如下图
      2061885-20ddee2c2378ef60.png
      数字签名4.png
  • 数字签名和公钥密码的比较

    • 数字签名就是将公钥密码反过来
    • 区别如下图
      2061885-9189fee4d78d61cb.png
      数字签名-5.png
  • 作用

    • 确认消息的完整性
    • 识别消息是否被篡改
    • 防止消息发送人否认(至少消息是用发送人的私钥发的,至于私钥有没有被偷或者是否是强迫使用私钥发的就另讨论了)
  • 无法解决的问题

    • 中间人攻击问题(下图是利用公钥密码解释的“中间人攻击”)
      2061885-188a534b9f78ee19.png
      数字签名-6.png
    • 利用证书验证公钥的合法性

证书

  • 概念

    • 证书,类似于驾驶证、毕业证、英语四六级证等等,都是由权威机构认证的
    • 密码学中的证书,全称叫公钥证书(Public-keyCertificate,PKC),跟驾驶证类似
      • 里面有姓名、邮箱等个人信息,以及此人的公钥
      • 并由认证机构(CertificateAuthority,CA)施加数字签名
      • 流程:CA首先将此人的姓名邮箱等信息和此人的公钥进行哈希,得出散列值,然后再用CA自己的私钥加密散列值,从而得到数字签名
      • 一个证书包括三部分:此人的姓名、邮箱等个人信息,此人的公钥和数字签名
    • CA就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织
      • 有国际性组织、政府设立的组织
      • 有通过提供认证服务来盈利的企业
      • 个人也可以成立认证机构
  • 使用 (如下图)

    2061885-f9f51a217387c186.png
    证书-1.png

  • 注册和下载

    2061885-3bf6f3c32dbaaa25.png
    证书-2.png

总结

至此,我们已经对对称加密、公钥加密、单向散列函数、数字签名和证书有了详细了解,在下篇文章中,我们将在此基础上详细介绍iOS的签名机制。

猜你喜欢

转载自blog.csdn.net/weixin_33769207/article/details/86990999
今日推荐