密码学及公钥基础设施入门( 三 )


如果我们同时发送消息及其摘要,接收者可以使用相同的哈希函数独立计算摘要 。如果两个摘要相同,可以认为消息没有被篡改 。考虑到 SHA-1 已经变得有些过时,目前最流行的密码散列函数是 SHA-256 。
散列函数看起来不错,但如果有人可以同时篡改消息及其摘要,那么消息发送仍然是不安全的 。我们需要将哈希与加密算法结合起来 。在对称加密算法领域,我们有消息认证码message authentication codes(mac)技术 。MAC 有多种形式,但哈希消息认证码hash message authentication codes(HMAC) 这类是基于哈希的 。HMAC 使用哈希函数 H 处理密钥 K、消息 M,公式为 H(K + H(K + M)),其中 + 代表连接concatenation 。公式的独特之处并不在本文讨论范围内,大致来说与保护 HMAC 自身的完整性有关 。发送加密消息的同时也发送 MAC 。Eve 可以任意篡改消息,但一旦 Bob 独立计算 MAC 并与接收到的 MAC 做比较,就会发现消息已经被篡改 。
在非对称加密算法领域,我们有数字签名digital signatures技术 。如果使用 RSA,使用公钥加密的内容只能通过私钥解密,反过来也是如此;这种机制可用于创建一种签名 。如果只有我持有私钥并用其加密文档,那么只有我的公钥可以用于解密,那么大家潜在的承认文档是我写的:这是一种身份验证 。事实上,我们无需加密整个文档 。如果生成文档的摘要,只要对这个指纹加密即可 。对摘要签名比对整个文档签名要快得多,而且可以解决非对称加密存在的消息长度限制问题 。接收者解密出摘要信息,独立计算消息的摘要并进行比对,可以确保消息的完整性 。对于不同的非对称加密算法,数字签名的方法也各不相同;但核心都是使用公钥来检验已有签名 。
汇总
现在,我们已经有了全部的主体组件,可以用其实现一个我们期待的、具有全部三个特性的体系system 。Alice 选取一个保密的对称加密密钥并使用 Bob 的公钥进行加密 。接着,她对得到的密文进行哈希并使用其私钥对摘要进行签名 。Bob 接收到密文和签名,一方面独立计算密文的摘要,另一方面使用 Alice 的公钥解密签名中的摘要;如果两个摘要相同,他可以确信对称加密密钥没有被篡改且通过了身份验证 。Bob 使用私钥解密密文得到对称加密密钥,接着使用该密钥及 HMAC 与 Alice 进行保密通信,这样每一条消息的完整性都得到保障 。但该体系没有办法抵御消息重放攻击(我们在 Eve 造成的冰淇淋灾难中见过这种攻击) 。要解决重放攻击,我们需要使用某种类型的“握手handshake”建立随机、短期的会话标识符session identifier 。
密码学的世界博大精深,我希望这篇文章能让你对密码学的核心目标及其组件有一个大致的了解 。这些概念为你打下坚实的基础,让你可以继续深入学习 。
【密码学及公钥基础设施入门】感谢 Hubert Kario、Florian Weimer 和 Mike Bursell 在本文写作过程中提供的帮助 。


推荐阅读