SSL加密,SHA-1和SHA-2

Hel*_*nar 8 encryption ssl sha1 hash-function sha2

我正在尝试实现SHA-2加密而不是SHA-1.

为此,我知道这两个哈希算法之间的位数不同,这让我很困惑.

如何实现这一目标以及我需要在哪些部分进行必要的更改?

我可以使用Java,Python和任何其他主要编程语言的任何开源库.

Tho*_*nin 31

首先,SHA-1和SHA-2相关的任何东西都不是"加密"算法.它们是哈希函数.在SSL中,哈希函数主要用于通过HMAC构造的完整性而非机密性.散列函数接受任意长度的输入,并产生具有固定长度的输出,这是输入数据的一种"摘要"; 该操作意味着不可逆转.

哈希函数是"公共的":没有机密数据,没有密钥; 每个人都可以计算任何给定输入的哈希函数输出."消息认证码"(MAC)是一种"键控散列":在该过程中还输入一个秘密密钥(即任意一串位),因此密钥的知识对于(重新)计算是必要的. MAC输出.这用于完整性检查(发送方使用密钥计算MAC,接收方使用密钥重新计算MAC;如果MAC匹配,则数据是正确的,因为攻击者不知道密钥,不能有改变了数据并在改变的数据上计算了有效的MAC).

HMAC是一种将哈希函数(例如SHA-1)转换为MAC的构造.TLS(这是SSL的当前标准名称)使用HMAC.HMAC的输出,与给定的散列函数中使用时ħ,具有比的输出大小相同ħ.该输出可以按常规截断:HMAC/SHA-1名义上产生160位输出,但在某些协议中,通常只保留前96位.SSL中不会发生此类截断.

FIPS 180-3标准定义了五种散列函数,命名为SHA-1,SHA-224,SHA-256,SHA-384和SHA-512,分别为160,224,256,384和512位输出的长度.SHA-224,SHA-256,SHA-384和SHA-512函数通俗地称为"SHA-2",因此"SHA-2"不是一个函数,而是一系列四个散列函数.

所述TLS规范定义的密码套件.密码套件是一组加密算法,客户端和服务器在连接的初始阶段("握手")达成一致.算法中包括用于确保数据完整性的MAC.一些标准密码套件规定MAC应为"HMAC with SHA-256",即使用SHA-2功能之一的东西.

因此,您的问题的答案是:"只需将客户端和服务器配置为使用其中一个密码套件和HMAC/SHA-256".如果您的SSL实现不支持这样的密码套件,那么您将不得不对其进行修改,这将需要非常全面地了解SSL的工作原理; 阅读和理解完整的RFC 5246将是必要的.

  • 我对RFC 5246感到有点不适.我不认为这是一个简单而有趣的阅读之夜? (3认同)