SSL加密,SHA-1和SHA-2

时间:2010-05-13 13:28:26

标签: encryption ssl sha1 hash-function sha2

我正在尝试实施SHA-2加密,而不是SHA-1

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

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

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

5 个答案:

答案 0 :(得分:31)

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

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

HMAC是一种将哈希函数(例如SHA-1)转换为MAC的构造。 TLS(这是SSL的当前标准名称)使用HMAC。当与给定的散列函数 h 一起使用时,HMAC的输出具有与 h 的输出相同的大小。该输出可以按常规截断: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将是必要的。

答案 1 :(得分:1)

hashlib moduleMessageDigest支持所有SHA-2算法。

答案 2 :(得分:1)

据我所见,RFC 5246涵盖了在SSL中实施SHA256所需了解的所有内容。

但我怀疑你无法理解足够的密码学来做到这一点...... SHA 2不存在,你正在寻找SHA256,SHA384或SHA512,它不是加密算法,而是加密算法哈希函数。

那么,你究竟想做什么?

答案 3 :(得分:1)

我相信你会看到越来越多这个问题。 GoDaddy现在在提交证书签名请求时有一个选项,用于指定您是否将使用SHA1或SHA2。

这是一个有趣的读物。我基本上知道它在询问什么以及如何强制我的服务器使用使用其中一个的密码。我不确定我究竟知道差异是什么,或者为什么使用其中一种更好。

答案 4 :(得分:0)

试试这个,它适用于weblogic SQL Authenticator

 public static void main(String args[]) throws NoSuchAlgorithmException {
 String password="abcdef"; 
 System.out.println("{SHA-1}" + new sun.misc.BASE64Encoder().encode(java.security.MessageDigest.getInstance("SHA1").digest(password.getBytes())));
 }