1、单向散列函数
概念:单向散列函数有一个输入和一个输出,其中输入称为消息,输出称为散列值。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以被用来检查消息的完整性;
单向散列函数输出的散列值也称为消息摘要或指纹。
1.1、MD4、MD5
MD4:1990年Rivest设计的单向散列函数,能够产生128位的散列值。不过现在已经不安全了。
MD5:Rivest1991年设计的,同样产生128位的散列值,也不安全了。
1.2、SHA-1、SHA-256、SHA-384、SHA-512
这些都是美国国家标准技术研究所设计的,SHA-1能产生160位长度的散列值,其中SHA-256、SHA-384、SHA-512能分别产生长度为256、384、512比特的散列值,但是消息长度也有上限,SHA-256是2^64比特,SHA-384和SHA-512消息长度上限是2^128比特。
1.3、单向散列函数无法解决的问题
单向散列函数能够辨别出篡改,但无法辨别伪装,因为有可能你得到的散列值,是另有其人通过一样的单向散列函数计算后给你的。想解决这个问题还要用到认证;用于认证的技术包括消息验证码和数字签名。
2、消息认证码
概念:消息认证码是一种确认完整性并进行认证的技术,取三个单词的首字母大写,简称MAC。
可以勉强理解为,消息认证码是密钥加密过的散列值。
2.1、密钥配送问题
这个问题和对称密码中密钥配送问题很像,解决办法也有:密钥分配中心、公钥密码等。
2.2、无法防止否认
假如A收到了包含MAC的消息,然后密钥只有A和B共享的,所以作为A一定能确定消息是B发送的,但是A无法像第三个人证明消息是B发送的。因为在第三个人看来,密钥只有A和B有,B能说“我没有给A发消息,A可能是自己编的消息”。结论:A和B虽然都明白是谁发的,但是第三者无法确定,这叫做否认,消息认证码无法解决否认。
3、数字签名
3.1概念:
数字签名技术中有两种行为:
- 生成消息签名:由消息发送者来生成签名,即由消息内容计算数字签名的值。
- 验证消息签名:一般有消息接收者验证,也可由需要验证消息第三方来完成。
注意:
数字签名相当于现实世界中的盖章签字,使用数字签名能识别篡改和伪装,因为数字签名技术中消息发送者和接收者使用了不同的密钥;数字签名对签名密钥和验证密钥进行了区分,使用验证密钥是无法生成签名的,此外,签名密钥只能由签名的人持有,而验证密钥可以由任何需要验证签名的人持有。
这里发现没,它和公钥密码十分类似,公钥密码中是,加密密钥无法进行解密,解密密钥只有需要解密的人持有,而加密密钥可以是任何需要加密的人持有。没错,数字签名就是将公钥密码“反过来使用”
3.2具体实现方法
- 直接对消息进行签名
- 对消息的散列值进行签名
3.2.1直接对消息进行签名
前提是发送消息者事先生成密钥对,将验签密钥(公钥)交给消息接收者。
3.2.2对消息的散列值签名
上面方法是对消息进行签名,若是消息长度太大,那么加密的过程会非常耗时,所以可以通过对消息的散列值进行签名,即消息的发送者和接收者都多了一步计算单向散列函数的步骤:
3.3作用
- 识别篡改:就是验签过程,若是比对失败那就是篡改了;
- 防止否认:因为签名密钥只有一个人有,就是发送者,它无法抵赖;
- 不保证机密性:因为连消息原文都直接发送过去了,肯定不存在机密性。
4、证书——为公钥加上数字签名
4.1、证书简介
公钥证书:和驾照很类似,里面有本人的各种个人信息和相关部门的公章,证书也有所有者的个人信息以及相关认证机构施加的数字签名,只要看到公钥证书我们就知道认证机构认定此证书属于本人,公钥证书简称证书。
证书的应用场景:
简单理解,证书就是由第三方保证公钥的合法性。
证书标准规范X.509:大致包括三部分内容
- 签名前的证书:签名对象的信息
- 数字签名算法:对证书签名时所使用的算法
- 数字签名:对证书施加的数字签名
4.2 公钥基础设施PKI
公钥基础设施:为了更有效地运用公钥而制定的一系列规范和规格的总称。
组成要素:
- 用户——使用PKI的人
- 认证机构——颁发证书的人
- 仓库——保存证书的数据库