谈数字签名和数字加密,我们得先知道什么是Hash函数和信息摘要。Hash(哈希)函数提供了这样一种计算过程:输入一个长度不固定的字符串,返回一串固定长度的字符串,又称为Hash值。单向Hash函数用于产生信息摘要。信息摘要简要的描述了一份较长的信息或者文件。它可以被看作一份长文件的“数字指纹”。信息摘要用于创建数字签名,对于特定的文件而言,信息摘要是唯一的。信息摘要可以被公开,它不会透漏相应文件的任何内容。
了解了Hash函数和信息摘要,让我们来看下如何实现数字签名和数字加密。
数字签名
数字签名主要经过以下几个过程:
- 信息发送者使用一个单项散列函数(Hash函数)对信息生成信息摘要。
- 信息发送者使用自己的私钥签名信息摘要。
- 信息发送者把信息本身和已签名的信息摘要一起发送出去。
- 信息接收者通过使用与信息发送者使用的同一个单向散列函数(Hash函数)对接收的信息本身生成新的信息摘要,再使用信息发送者的公钥对信息进行验证,以确认信息发送者的身份和信息是否被修改过。
验证方式解析:信息接收者用信息发送者的公钥对第二步已签名的信息摘要进行解密,得到原本的信息摘要,然后跟新的信息摘要对比,如果一致则未被修改。因为这里私钥只有信息发送者有,所以就算有人拦截了该信息,用公钥解密了签名后的信息摘要,也不能进行任何修改,如果修改看了信息,则没有了私钥对新的摘要信息签名。
数字加密
数字签名保证了信息的身份不能被其他人修改,因为私钥只有发送者有,下面我们介绍下数字加密,看看如何保证信息的保密性。数字加密主要经过如下几个过程。
- 信息发送者需要发送信息时,首先生成一个对称秘钥,用该对称秘钥加密要发送的报文。
- 信息发送者用信息接受者的公钥加密上述对称秘钥。
- 信息发送者将第1步和第2步的结果结合在一起传给信息接受者,称为数字信封。
- 信息接受者使用自己的私钥解密被加密的对称秘钥,再用此对称秘钥解密被发送放加密的密文,得到真正的原文。
保密方式分析:因为信息被加密,加密的秘钥也被加密,而私钥只有接收者有,所以也就只有接收者才能够拿到真正的加密对称秘钥,所以绝对保密(只要接收者的私钥不被泄漏)。
总结
数字签名和数字加密的过程虽然都使用公开秘钥体系,但是实现的过程正好相反,使用的秘钥对也不同。数字签名使用的是发送方的秘钥对,发送方用自己的私钥进行加密,接收方用发送方的公开密钥进行解密,这是一个一对多的关系,任何拥有发送方公开秘钥的人都可以验证数字签名的正确性。数字加密则使用的是接收方的密钥对,这个是多对一的关系,任何知道接收方公开秘钥的人都可以向接收方发送加密信息,只有唯一拥有接收方私有秘钥的人才能对信息解密。另外,数字签名只采用了非对称秘钥加密算法,它能够保证发送信息的完整性、身份认证和不可否认性;而数字加密采用了对称秘钥加密算法和非对称秘钥加密算法相结合的方法,它能保证发送信息的保密性。