我正在用Python写一个椭圆曲线密码学的程序(为了上学和出于兴趣)。我目前正在研究数字签名算法。
我目前正在寻找一个好的和安全的散列函数,它要么是Python中的标准,要么可以很容易地下载和导入。我想到了SHA-256,因为这是我所知道的唯一一个还没有被打破的(据我所知)。然而,我也读到SHA不应该用于密码学。
SHA-256是否适用于数字签名算法?或者应该使用不同的哈希函数?如果是这样,哪一个会是一个好的选择?
我正在用Python写一个椭圆曲线密码学的程序(为了上学和出于兴趣)。我目前正在研究数字签名算法。
我目前正在寻找一个好的和安全的散列函数,它要么是Python中的标准,要么可以很容易地下载和导入。我想到了SHA-256,因为这是我所知道的唯一一个还没有被打破的(据我所知)。然而,我也读到SHA不应该用于密码学。
SHA-256是否适用于数字签名算法?或者应该使用不同的哈希函数?如果是这样,哪一个会是一个好的选择?
2条答案
按热度按时间wz3gfoph1#
我使用SHA-512用于类似的目的,我认为你很难得到比这更安全的。SHA-512在python的hashlib中可用,可以这样使用:
qrjkbowd2#
目前最好的标准化算法仍然是SHA-2。SHA-2现在由6个哈希函数组成:SHA-256、SHA-384和SHA-512是最早定义的。后来添加了SHA-224,以允许更小的输出大小。在此之后,引入了不太好用的SHA-512/224和SHA-512/256。
SHA-2主要由32位SHA-256变体(SHA-256和SHA-224)和64位SHA-512变体(其他)组成。SHA-512变体在64位机器上的性能实际上可能更高,因此引入了SHA-512/224和SHA-512/256。基本上,SHA-256 / SHA-512的变体仅在它们内部使用的常量和用作输出大小的位数方面有所不同。一些较新的Intel和AMD处理器SHA扩展只加速SHA-256,而不是SHA-512,可能会在速度方面再次转向SHA-256。
在SHA-3竞争中,人们发现SHA-2仍然很强大,即使SHA-1受到攻击。如果SHA-2受到攻击,或者更好的哈希算法得到标准化 * 和使用 *,我建议只看其他哈希。
维基百科:
2005年,SHA-1算法被发现存在安全缺陷,即可能存在数学上的弱点,这表明需要一个更强的哈希函数。[6]尽管SHA-2算法与SHA-1算法有一些相似之处,但这些攻击并没有成功地扩展到SHA-2。
请注意,SHA-2使用比SHA-1复杂得多的舍入函数。因此,尽管SHA-2具有类似的结构(两者都是所谓的Merkle-Damgard散列),但SHA-2可能比SHA-1更能抵抗攻击。