前言
由RSA(一) 背后的数学原理可知,RSA 既公钥加密技术主要是通过私钥加密信息,然后由公钥来解密信息;但是,从 RSA 的数学原理中我们可以知道,其实私钥加密信息,然后用公钥来解密也是可以的;而因为公钥是公开的,私钥加密的东西谁都可以进行解密,那这样做有什么意义呢?本章节就是来探讨这样做的意义何在?一句话概括,它的意义就在于签名( sign );
备注,本文是作者的原创作品,转载请注明出处。
场景
来看这样一个场景,Bob 给股票经纪人 Alice 发送了一封邮件,让 Alice 帮他大量购买某支股票;可是刚买不久,股票就大跌,于是 Bob 转而否认发过那封邮件,声称那封邮件是伪造的;那么作为法官的你,如何来验证之前发送的那封邮件到底是不是 Bob 发送的呢?
要解决上述场景的问题,就需要使用到 RSA 签名技术了;
签名 Signature
为保证邮件是 Bob 发送的,在邮件收发协议上做了如下的操作约定,
首先双方通过邮件协议约定好签名的算法,比如都是用 MD5 或者是其它签名算法。
Bob 在发送邮件的同时,邮件系统将做如下的操作
- 通过签名算法 MD5 将邮件内容
c
进行 hash,得到邮件内容的签名(Sign),记为 $S_1$; - 通过 Bob 的私钥 $P$ 对 $S_1$ 进行加密,得到加密后邮件内容的签名(Encrypted Sign),记为 $S_{1e}$;
- 最后,Bob 通过邮箱系统将签名 $S_{1e}$,邮件内容
c
,以及 Bob 的公钥 $P$ 三部分内容发送给 Alice;
如何保证公钥的安全性和可靠性,不在本文涉及;
- 通过签名算法 MD5 将邮件内容
Alice 收到 Bob 的邮件以后,邮箱系统会做如下的操作
- 使用 Bob 的公钥对 $S_{1e}$ 进行解密,得到 $S_1$;
- 使用双方事先约定好的签名算法 MD5 对
c
进行 hash 得到签名 $S_2$; - 比较签名 $S_1$ 和签名 $S_2$ 是否相等
如果相等,则表示邮件内容没有被篡改;
如果不相等,则表示邮件内容被他人篡改;
不过,要保证信息的确没有被篡改,还有一条基本原则,就是 Bob 的公钥 $P$ 不能被篡改,如果公钥 $P$ 在 Bob 发送给 Alice 的过程被人篡改了,那么 Attacker 就可以自己杜撰一封邮件,并通过自己的私钥签名邮件,并将自己篡改后的公钥 $P_c$ 一同发送给 Alice,那么这个时候,Alice 是没有办法确认邮件是否是被篡改过的;所以,用 RSA 签名的方式来保证信息没有被篡改过,一个基本的前提就是 Bob 的公钥 $P$ 不能被第三方篡改;而要保证公钥不能被第三方篡改,就需要 PKI (Public Key Infrasture) 公钥基础设施来保证公钥的合法性,涉及到 CA,Root Certificate 根证书相关知识;这部分知识不打算在本文进行描述;相关内容参考 RSA(五) PKI (Public Key Infrastructure) 公钥基础设施;
备注:Root Certificate 根证书就是 CA 证书认证机构用来签名验证公钥 $P$ 的;
总结
签名 sign 小节中详细的描述了 RSA 通过私钥签名的过程和作用;但是也知道,签名若要能起作用,必须借助 PKI 公钥基础设施来保证公钥的合法性;所以,可见,PKI 对于基于 RSA 的加密通讯协议起到至关重要的作用,没有它,一切基于 RSA 的加密通讯理论都白搭;后续章节,让我们来看看 PKI 是什么东西;