恋爱通信史之身份验证和不可抵赖性
在前文保密性中讲到:私钥就是一种身份的象征。那么,使用公钥能解密采用私钥加密的数据,就是表明该条信息就是私钥持有者发送的。那接下来就阐述一下,采用私钥加密公钥解密方式的数字签名和数字证书。
数字签名——不可抵赖性
抵赖出现的根本原因就是,通信双方无法确认对方的身份。借鉴生活中签名和按指纹的方式,出现了数字签名。
- 签名:计算数据的Hash值,私钥对该Hash值进行加密生成Hash值密文,这个Hash值密文就称为签名值,亦称指纹;
- 验签:公钥解密Hash值密文,计算原数据的Hash值,解密后的Hash值与原数据的Hash比较,相同即验证成功,不同则验证失败。
因为私钥是一种身份的象征,而数字签名过程中,是采用私钥对Hash值进行的加密。因此,只有私钥持有者才能签署这条消息,消息发送者就不可否认签署的消息不是他发的。这就达到了不可抵赖性的目的。
数字证书——身份验证
在前面的章节中,非对称加密协议中,公钥加密-私钥解密的过程中,需要将公钥发送给对方,对方才能使用公钥进行加密。
直接传递公钥,中间人劫持
那么,公钥如何传递给对方,就是一个待解决的问题。如果直接传递,将会存在中间人问题,如下图所示:
小明,在将自己的公钥,传递给小芳的过程中,小明的公钥被中间人保存下来,然后中间人将自己的公钥传递给小芳,小芳将误以为是小明的公钥,就错误的使用中间人的公钥对待发送的消息进行加密。中间人用自己的私钥解密后,就可以随意篡改小芳的消息,然后再用小明的公钥对篡改后的消息进行加密,再传递给小明。小明收到消息后,以为就是小芳发送的,使用自己的私钥也能正确的解密。殊不知,这中间的传递过程中,已经被中间人劫持并篡改了。
MAC算法保证公钥的传递
在前面的章节中,我们了解到MAC(Message Authentication Code, 消息验证码)的特点是,可以确保消息的完整性和秘钥的拥有者发送的。因此,我们尝试使用MAC消息验证码进行公钥的传递,如下图所示:
如上图所示,确实在传递过程中,中间人就算替换了小明的公钥,但中间人没有小明和小芳达成共识的秘钥,因此即便中间人替换了,在小芳接收到中间人的公钥后,在进行MAC运算验证时,能证明时不匹配的,不是来自小明的公钥。但是,问题来了:
- 小明和小芳在没见面时,如何获得这个共识的秘钥呢?
- 这个达成共识的秘钥也不能长期使用,一旦被中间人从社会工程学的角度获得此秘钥后,以后的通信就不再安全,中间人就可以随意替换小明和小芳传递的公钥。如何频繁的更新这个秘钥呢?
数字签名方式保证公钥的传递
既然传递的是公钥,也可以考虑前文中提到的签名方式,使用私钥对公钥进行签名,接收方也可以使用公钥对签名进行解密,然后再来比较Hash值。看起来是一个不错的idea!
所谓,“君子无畏,小人亦不惧,所惧者唯小人而有才也”。中间人也了解了小明和小芳之间的算法逻辑,中间人也劫持小明的公钥,也采用数字签名方式,生成相应的签名值,传递给小芳。
基于公钥基础设施(Public Key Infrastructur, PKI)的数字签名方式保证公钥的传递
从上面的各类传递方式可以看出,只要通信的双方没有一个达成共识的信息基础,都无法保证双方的消息是否被劫持篡改。因此,可以考虑基于一个第三方可信任的机构,来提供大家能达成共识的信任基础。
- 小明先填写一个证书签名请求信息表,其中包含小明的公钥,然后将这签名请求信息表告知小明的爸爸(证书颁发机构);
- 让小明爸爸根据证书请求信息,为小明签发一个身份证书,这个证书中包含小明爸爸使用私钥对证书请求信息进行签名的签名值;
- 小明在通信前,将自己的身份证书发给小芳,通过这个身份证书就能表明是小明本人。
- 小芳在与小明通信前,就已经获得小明爸爸的公钥,并且小明爸爸的公钥不在此处通信过程中传递,即已经提前获悉小明爸爸的公钥了。
- 小芳在收到小明的身份证书时,小芳先根据身份证书中描述的Hash计算算法,将除签名值外的其他内容进行一次Hash计算;使用小明爸爸的公钥,对身份证书中的签名值进行解密,获得身份信息的Hash值;将这两个Hash值进行比较,若相同,说明这个身份证书是没有被篡改过的,且是来自小明的。这就完成了身份验证的过程。
注:
- 信任的证书颁发机构的公钥,一般是提前预置在设备侧,比如浏览器内。因此,客户在使用时,需要使用安全可信的浏览器,避免浏览器预置的公钥不可信。
- 身份证书中的签名值,是由证书颁发机构的私钥进行签名的。证书颁发机构是一个可信任的机构。
总结
从前面的几个小节中,抛砖引玉的介绍了密码学的四个目标的达成方式:
- 保密性
- 对称加密
- 流密码算法:ChaCha20
- 块密码算法:ECB模式,CBC模式,CTR模式等
- 非对称加密
- 公钥加密,私钥解密:秘钥交换
- 私钥加密,公钥加密:数字签名,身份证书
- 对称加密
- 完整性
- 单向散列算法:SHA-256, SHA-224, SHA-384, SHA-512等
- 消息验证码算法:HMAC
- 不可抵赖性
- 数字签名:私钥对内容Hash值的加密得到的Hash值密文;
- 身份验证
- 身份证书:身份信息 + 对身份信息的数字签名