文章结构
文章结构.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
- 全新标准
- MD4、MD5
-
应用
-
防止数据被篡改
单向散列函数-3.png -
口令加密 (存储在平台上的密码平台也是无法知道的)
单向散列函数-4.png
-
数字签名
-
问题引出
数字签名-1.png
- Alice发的内容有可能是被篡改的,或者有人伪装成Alice发消息,或者就是Alice发的,但她可以否认
- 问题就是Bob如何确定这段消息的真实性?如何识别篡改、伪装、否认?
- 解决方案:数字签名
-
基本概念
- 在数字签名技术中,有以下2种行为
-
生成签名
:由消息的发送者完成,通过“签名密钥”生成 -
验证签名
:由消息的接收者完成,通过“验证密钥”验证
-
- 如何能保证这个签名是消息发送者自己签的?
- 用消息发送者的私钥进行签名
- 在数字签名技术中,有以下2种行为
-
过程
- 将明文消息和签名一起发给对方。对方利用公钥解密 签名得到明文消息,再和自己收到的明文消息进行比较 数字签名-2.png
-
这种方式存在的问题就是:发送的数据有可能过多过大。有可能明文消息有多大,生成的签名就有多大。
-
解决方式:利用单向散列函数
-
改进
- 数字签名-3.png
-
总过程
- 消息发送者Alice生成密钥对:Alice公钥,Alice私钥;
- Alice将公钥发给消息接收者Bob;
- Alice利用单向散列函数对要发送的消息进行处理,形成固定长度的散列值;
- Alice利用私钥对散列值进行签名;
- Alice将消息和签名发送给Bob;
- Bob在得到消息和签名后,首先利用Alice的公钥验证签名,得到消息的散列值;
- Bob再将收到消息进行哈希处理,同样得到消息的散列值;
- 将第6步和第7步得到的散列值进行比较,看是否相同。如果不同,说明消息已经被篡改。
- 整体流程,如下图 数字签名4.png
-
数字签名和公钥密码的比较
- 数字签名就是将公钥密码反过来
- 区别如下图 数字签名-5.png
-
作用
- 确认消息的完整性
- 识别消息是否被篡改
- 防止消息发送人否认(至少消息是用发送人的私钥发的,至于私钥有没有被偷或者是否是强迫使用私钥发的就另讨论了)
-
无法解决的问题
- 中间人攻击问题(下图是利用公钥密码解释的“中间人攻击”) 数字签名-6.png
- 利用
证书
验证公钥的合法性
证书
-
概念
- 证书,类似于驾驶证、毕业证、英语四六级证等等,都是由权威机构认证的
- 密码学中的证书,全称叫公钥证书(Public-keyCertificate,PKC),跟驾驶证类似
- 里面有姓名、邮箱等个人信息,以及此人的公钥
- 并由认证机构(CertificateAuthority,CA)施加数字签名
- 流程:CA首先将此人的姓名邮箱等信息和此人的公钥进行哈希,得出散列值,然后再用CA自己的私钥加密散列值,从而得到数字签名
- 一个证书包括三部分:此人的姓名、邮箱等个人信息,此人的公钥和数字签名
- CA就是能够认定“公钥确实属于此人”并能够生成数字签名的个人或者组织
- 有国际性组织、政府设立的组织
- 有通过提供认证服务来盈利的企业
- 个人也可以成立认证机构
-
使用 (如下图)
证书-1.png
-
注册和下载
证书-2.png
总结
至此,我们已经对对称加密、公钥加密、单向散列函数、数字签名和证书有了详细了解,在下篇文章中,我们将在此基础上详细介绍iOS的签名机制。
网友评论