解决方案
数字指纹,又称为信息摘要,它是指发送方通过 HASH 算法对明文信息计算后得出的数据。
数字签名,是指发送方用自己的私钥对数字指纹进行加密后所得的数据(最关键的是引入甲的私钥,配合数字信封,此时双发都持有对方的公钥)。
数字签名技术不但证明了信息未被自改,还证明了发送方的身份。
当该技术时:
1)发送方会将数字签名和明文一起发送给接收方,
2)接收方用同样的 HASH 算法对明文计算生成的数据指纹,并与 从数字签名中解密得到的数字指纹 进行匹配,如果一致,便可确定明文信息没有被篡改。
3)如果中间被截获,中间人必须具有甲的私钥才能计算出正确的数字签名,否则乙使用甲的公钥解析将得到错误的数据证书,而发现信息被篡改;
甲事先获得乙的公钥,具体加解密过程如下:
1)甲使用乙的公钥对明文进行加密,生成密文信息。
2)甲使用HASH算法对明文进行HASH运算,生成数字指纹。
3)甲使用自己的私钥对数字指纹进行加密,生成数字签名。
4)甲将密文信息和数字签名一起发送给乙。
5)乙使用甲的公钥对数字签名进行解密,得到数字指纹。
6)乙接收到甲的加密信息后,使用自己的私钥对密文信息进行解密,得到最初的明文。
7)乙使用HASH算法对明文进行HASH运算,生成数字指纹。
8)乙将生成的数字指纹与得到的数字指纹进行比较,如果一致,乙接受明文;如果不一致,乙丢弃明文。
从加解密过程中,可以看出,数字签名技术不但证明了信息未被篡改,还证明了发送方的身份。数字签名和数字信封技术也可以组合使用。
PublicKey 与 PrivateKey 的使用,能够验证数据发送者的身份。如果发送者没有使用正确的密钥进行加密,则当接收者解密后将得到错误的数据。
特性特征
对于接收方,要持有发送方的公钥。
采用数字签名时,接收方需要使用发送方的公钥才能解开数字签名得到数字指纹。
已知问题
数字签名技术存在问题
身份伪造,即甲无法确定是乙在使用甲的公钥:如果攻击者更改乙的公钥以使甲获得的是攻击者的公钥,攻击者拦截乙发送给甲的信息,用自己的私钥对伪造的信息进行数字签名,然后与使用甲的公钥的加密伪造的信息一起发送给甲。甲收到加密信息后,解密得到的明文,并验证明文没有被篡改,则甲始终认为是乙发送的信息。此时,需要一种方法确保一个特定的公钥属于一个特定的拥有者。
此外,如果攻击者伪造接收方的公钥,那么发送方发送的信息将被攻击者用私钥解密而窥探,因而接收方公钥的真实性将直接决定数据传输的机密性。