2

是否有在 Merkle-Damgård 构造中使用 Blowfish 的库,用于构造加密哈希?我对密码散列不感兴趣,但对通用加密散列不感兴趣。(在我们已经在使用 Blowfish 的应用程序中。)

4

2 回答 2

3

滚动你自己的加密货币是一个非常非常糟糕的主意。读一遍,大声重复一遍,再做一遍。

特别是对于哈希函数。世界各地的密码学家目前正在通过SHA-3 竞赛设计新的哈希函数。它始于 2007 年,据说将在 2012 年结束,数十名(可能是数百名)专门从事密码设计的聪明人(阅读:博士等)努力工作。假设你可以在几周内独自一人,在五年内比所有这些人做得更好,那简直是荒谬的。事实证明,构建一个安全的散列函数是一个难题(从理论上讲,我们甚至不知道一个安全的散列函数是否真的存在)。构建安全的分组密码要容易得多。

Blowfish 的设计者(Bruce Schneier)是Skein的设计者之一,是 SHA-3 的候选者之一。请注意,没有为此重复使用 Blowfish。请注意,他还在 1998 年发表了Twofish分组密码,它是 AES 选择过程的候选者,作为 Blowfish 的更先进的继任者;Twofish 比 Blowfish 受到更多审查,因此即使对于对称加密,您也不应该使用 Blowfish,而是使用 Twofish(或者更好的是,使用 AES,又名“Rijndael”,它比 Twofish 更受欢迎)。

于 2011-02-21T13:04:31.403 回答
1

Blowfish 用作哈希压缩函数是有问题的,原因如下:

首先,许多将块密码转换为散列函数的完整方案产生的散列长度与块密码的块长度相同。对于只有 64 位块大小的 Blowfish,这是不够的 - 64 位散列长度仅提供 32 位安全性,这是微不足道的。

其次,所有安全方案都会更改输入消息的每个块上的块密码密钥。众所周知,Blowfish 的密钥设置过程很慢,因此基于它的散列也必然很慢。

如果您仍然没有被吓倒,请查找双块长度的哈希结构,例如Tandem Davies-MeyerAbreast Davies-Meyer。但是,我强烈建议您改用 SHA-2 系列中的函数实现 - 这些也很容易找到,速度很快并且被认为是安全的。重新使用 Blowfish 作为散列函数不会有任何收获。

于 2011-02-21T05:07:59.563 回答