本篇将介绍TLS/SSL密码套件中常用的哈希算法,包括Poly1305、SHA384、SHA256、SHA、MD5
- 以上的哈希算法将作为 MAC 使用
- MAC - Message Authentication Code
- 通常得到更大的摘要大小 - 意味着更安全
- 使哈希碰撞(Collision)更罕见
- MD5 - Message Digest algorithm #5
- 128-bit Digest(摘要)
- 1991年由Ron Rivest所创建
- Ron Rivest还创建了RSA、RC4、MD2、MD4、RC6
- 已经发表了产生碰撞(collision)的实际攻击
- 自2010年起不再安全(作为直接散列(哈希)算法)
- 在 HMAC 中使用MD5没有被认为是不安全的
- 过程:在常规哈希中,我们对一段信息进行哈希,然后得到摘要(因而使用MD5是不安全的);HMAC多了一层,我们将信息与padding1和密钥相结合,然后计算出3者的结果得到摘要1,然后摘要1与padding2和同样的密钥相结合,得出结果摘要2。右下图灰色框都包含在HMAC中,因而HMAC的结果就是摘要2。
- 为什么说md5不安全,因为我们能知道信息还有生成的摘要;而在HMAC中,我们不知道密钥是什么,也永远不知道摘要1是什么(隐藏在HMAC进程中),这意味着我们不是直接从信息→摘要,我们从看不到的信息,然后结合看不到的密钥和padding,得到看不见的摘要1,再然后将看不见的摘要1和看不见的padding、密钥结合,得到最终的摘要2;能够拿到信息并得到摘要2的人是那个拥有密钥的。因此,HMAC还是足够安全的
- 如果可能,还是要避开MD5(使用MAC进行MD5将来会不安全,只是时间问题)
- SHA或SHA1 - Secure Hash Algorithm 1
- SHA256和SHA384(TLS/SSL使用这两者)
- SHA2家族成员:
- SHA-256产生256位的摘要
- SHA-512产生512位的摘要
- SHA-224产生256位的摘要,截断为224位
- SHA-384产生512位的摘要,截断为384位
- 由NSA(U.S. National Security Agency)所创建
- 两者都被认为是安全的(对于哈希、签名、HMAC)
- 未来某天会被SHA-3家族所取代
- 通过公共竞赛创建(一般大家优先选择由公共竞赛创建的算法,而不是NSA)
- SHA2家族成员:
- Poly1305
参考文献
1、网站:Practical Networking.net:Practical TLS