美文网首页
iOS签名机制03- 单向散列函数,数字签名和证书

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

作者: 6ed2651eb5b0 | 来源:发表于2019-01-24 22:47 被阅读15次

    文章结构


    文章结构.png

    单向散列函数

    • 基本概念

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


        单向散列函数-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
        • 全新标准
    • 应用

      • 防止数据被篡改


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


        单向散列函数-4.png

    数字签名

    • 问题引出

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

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

      • 将明文消息和签名一起发给对方。对方利用公钥解密 签名得到明文消息,再和自己收到的明文消息进行比较 数字签名-2.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. 整体流程,如下图 数字签名4.png
    • 数字签名和公钥密码的比较

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

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

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

    证书

    • 概念

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

      证书-1.png
    • 注册和下载

      证书-2.png

    总结

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

    相关文章

      网友评论

          本文标题:iOS签名机制03- 单向散列函数,数字签名和证书

          本文链接:https://www.haomeiwen.com/subject/nmkpjqtx.html