你一定在日常工作中听过、或者用过 MD5(Message-Digest 5)、SHA-1(Secure Hash Algorithm 1),它们就是最常用的两个摘要算法,能够生成 16 字节和 20 字节长度的数字摘要 。但这两个算法的安全强度比较低,不够安全,在 TLS 里已经被禁止使用了 。
目前 TLS 推荐使用的是 SHA-1 的后继者:SHA-2 。
SHA-2 实际上是一系列摘要算法的统称,总共有 6 种,常用的有 SHA224、SHA256、SHA384,分别能够生成 28 字节、32 字节、48 字节的摘要 。
完整性摘要算法保证了“数字摘要”和原文是完全等价的 。所以,我们只要在原文后附上它的摘要,就能够保证数据的完整性 。
比如,你发了条消息:“转账 1000 元”,然后再加上一个 SHA-2 的摘要 。网站收到后也计算一下消息的摘要,把这两份“指纹”做个对比,如果一致,就说明消息是完整可信的,没有被修改 。
如果黑客在中间哪怕改动了一个标点符号,摘要也会完全不同,网站计算比对就会发现消息被窜改,是不可信的 。
不过摘要算法不具有机密性,如果明文传输,那么黑客可以修改消息后把摘要也一起改了,网站还是鉴别不出完整性 。
所以,真正的完整性必须要建立在机密性之上,在混合加密系统里用会话密钥加密消息和摘要,这样黑客无法得知明文,也就没有办法动手脚了 。
这有个术语,叫哈希消息认证码(Hmac) 。

文章插图
数字签名加密算法结合摘要算法,我们的通信过程可以说是比较安全了 。但这里还有漏洞,就是通信的两个端点(endpoint) 。
就像一开始所说的,黑客可以伪装成网站来窃取信息 。而反过来,他也可以伪装成你,向网站发送支付、转账等消息,网站没有办法确认你的身份,钱可能就这么被偷走了 。
现实生活中,解决身份认证的手段是签名和印章,只要在纸上写下签名或者盖个章,就能够证明这份文件确实是由本人而不是其他人发出的 。
在这里,使用非对称加密里的“私钥”再加上摘要算法,就能够实现“数字签名”,同时实现“身份认证”和“不可否认” 。
数字签名的原理其实很简单,就是把公钥私钥的用法反过来,之前是公钥加密、私钥解密,现在是私钥加密、公钥解密 。
但又因为非对称加密效率太低,所以私钥只加密原文的摘要,这样运算量就小的多,而且得到的数字签名也很小,方便保管和传输 。
签名和公钥一样完全公开,任何人都可以获取 。但这个签名只有用私钥对应的公钥才能解开,拿到摘要后,再比对原文验证完整性,就可以像签署文件一样证明消息确实是你发的 。

文章插图
刚才的这两个行为也有专用术语,叫做“签名”和“验签” 。
只要你和网站互相交换公钥,就可以用“签名”和“验签”来确认消息的真实性,因为私钥保密,黑客不能伪造签名,就能够保证通信双方的身份 。
比如,你用自己的私钥签名一个消息“我是小明” 。网站收到后用你的公钥验签,确认身份没问题,于是也用它的私钥签名消息“我是某宝” 。你收到后再用它的公钥验一下,也没问题,这样你和网站就都知道对方不是假冒的,后面就可以用混合加密进行安全通信了 。
数字证书和 CA
到现在,综合使用对称加密、非对称加密和摘要算法,是不是已经完美了呢?不是的,这里还有一个“公钥的信任”问题 。因为谁都可以发布公钥,我们还缺少防止黑客伪造公钥的手段,也就是说,怎么来判断这个公钥就是你或者某宝的公钥呢?
真是“按下葫芦又起了瓢”,安全还真是个麻烦事啊,“一环套一环”的 。
我们可以用类似密钥交换的方法来解决公钥认证问题,用别的私钥来给公钥签名,显然,这又会陷入“无穷递归” 。但这次实在是“没招”了,要终结这个“死循环”,就必须引入“外力”,找一个公认的可信第三方,让它作为“信任的起点,递归的终点”,构建起公钥的信任链 。
这个“第三方”就是我们常说的 CA(Certificate Authority,证书认证机构) 。它就像网络世界里的公安局、教育部、公证中心,具有极高的可信度,由它来给各个公钥签名,用自身的信誉来保证公钥无法伪造,是可信的 。CA 对公钥的签名认证也是有格式的,不是简单地把公钥绑定在持有者身份上就完事了,还要包含序列号、用途、颁发者、有效时间等等,把这些打成一个包再签名,完整地证明公钥关联的各种信息,形成“数字证书”(Certificate) 。
推荐阅读
- 详解 gcc 编译、链接原理—揭开应用程序运行背后的奥秘
- JAVA中常见的阻塞队列详解
- 支付宝app支付服务端的实现-Java版
- 白条体验版多久升级 京东白条体验版额度不会升了吗
- 有限状态机 多图详解TCP三次握手和四次挥手
- 玛卡泡茶有副作用吗,西双版纳有哪些茶区
- 华强北顶配airpods2与正品对比 华强北二代airpods和原版对比
- .NET 5.0 正式版发布:应用可在ARM64设备上原生运行
- 一文详解操作系统进程管理
- 谈恋爱的技巧的方法详解
