通信安全:哈希、加密、证书、签名、密钥协商、ECDH、TLS、DTLS( 二 )


本质上,数字签名也是利用了非对称加密 。
前面讲了,非对称加密有公钥和私钥,如果发生方用私钥加密,然后接收方用发送方的公钥可以解密,那便可以证明是从某发送方发送的,因为别人拿不到你的私钥,也便无法用你的私钥加密,你不能抵赖 。
数字签名通常先对内容算哈希,产生内容摘要,再用私钥加密,得到签名 。
密钥协商下面举一个例子来说明这几个问题:
张三有2把钥匙,一把公钥,公告天下,一把私钥,妥善保管,只有自己知道,很明显,非对称加密 。
李四给张三写信,写完之后,用张三的公钥加密,通过邮局寄给张三,即使邮递员拆开信封看,他也看不懂,因为内容是密文,只有张三的密钥才能解密 。
张三收到信后,用私钥解密,可以正常阅读 。
现在张三要给李四回信,写完后,用hash函数生成摘要digest 。
然后张三,再用私钥对摘要加密,生成数字签名signature 。
然后把签名附在信的下面,一起发给李四 。
过程是:信明文 -> hash -> digist -> 私钥加密 -> signature 。
李四收到回信后,用张三的公钥对数字签名解密,得到摘要,由此证明,信确实是张三发出的,为什么?因为如果不是张三发的,那写信的人就没有张三私钥,用别的私钥加密得到的签名,是无法用张三的公钥解开的 。
李四,再对信的内容做hash,得到摘要,与上一步得到的摘要对比,如果一致,则证明信的内容没有被修改过,信的内容是完整的 。
复杂的情况出现了 。
王五,用自己的公钥替换李四保存的张三的公钥,也就是王五欺骗了李四,李四误把王五的公钥当张三的公钥,这样一来,王五就能冒充张三给李四写信(王五用自己的私钥加密) 。
问题是什么?问题是李四不能确信自己保存的公钥真的是张三的公钥 。如果客户端电脑上存的工商银行官网的公钥,实际上是骗子公司的公钥,那就麻烦大了 。
怎么破?让张三去认证中心CA(Certificate Authority),为公钥做认证,怎么做呢?CA中心用自己的私钥,对张三的公钥和其他相关信息一起加密,生成数字证书(Digital Certificate) 。
张三拿到数字证书后,以后给李四回信,在签名的同时,附带上数字证书 。
李四收到信之后,从CA的公钥解开数字证书,取出张三的公钥(一定是真的),然后就能放心的愉快的按之前的流程解开签名了 。
数字证书加入后,核心区别就是张三的公钥不再保存在李四处,而是通过数字证书下发 。
为什么数字证书里的张三的公钥一定是真的呢?因为CA是权威机构,假设全世界就一家(其实不止,但也不多),它的公钥天下尽知,就是固定的串,所以能用CA公钥解开的证书,一定是CA颁布的,因为CA用它的私钥加密产生的证书 。很明显,非对称加密能用于证明我是我 。
密钥交换算法
著名的DH密钥交换算法,这个算法很有意思,也很巧妙,简而言之,就是通信双方交换一点信息(不怕被偷看到),然后就在两端,分布产生出一个相同的密钥,神奇啊 。
有一个很有意思的例子 。

通信安全:哈希、加密、证书、签名、密钥协商、ECDH、TLS、DTLS

文章插图
Alice和Bob要协商出一个公共的颜色,他们可以交换信息,但交换的信息,可以被偷看到,怎么办?既能协商出公共颜色,又不能让别人知道呢 。
  1. 首先,他们有公共的颜色,都是1毫升黄色 。
  2. 然后Alice挑选一个私密的红色,Bob选绿色,都是1毫升 。只有自己知道,不会告诉别人 。
  3. 然后Alice把黄色和红色混合在一起,Bob把黄色和绿色混合在一起,各为2毫升 。
  4. 然后,他们把自己混合后的2毫升颜色液体,发给对方 。
  5. 然后,用自己的一毫升私密颜色液体,跟从对方那里收到的2毫升液体,混合,下面就是见证奇迹的颜色的时刻,他们得到了相同的颜色,而第三方并不能通过偷看他们传递的数据知道他们最终得到的颜色(基于一个假设,图里有说明) 。
密钥交换算法的原理跟这个差不多,网上有大量的资料讲述这个问题,我觉得理解了上面的例子,再看ECDH便也不难了 。
众所周知http是互联网协议,但是它不够安全,所以后面有改进版的https,其实就是多了一个TLS,这个是传输层加密,本质上,就是通过handshake,协商出一个会话密钥,后面的数据传递,都用这个密钥做对称加解密 。
我们经常讲安全通道,其实也就是协商出一个会话密钥,他并不神秘 。胡乱放几张图片吧 。


推荐阅读