我也问过类似的Q 这里:
为了创建
我只想知道,MD5的属性会受到什么影响。
我想使用变体作为一个好的哈希函数。我不使用Md5's变体进行认证。
虽然,我已经使用上面的想法创建了四种变体,并使用10到20分钟的时间输入来检查它,并且它工作得很好。我做得对吗?
发布于 2012-10-08 22:12:39
简短答覆:
很可能,您的RNG看起来是随机的,但没有通过最简单的测试(范围测试、平均测试、方差测试、桶测试)。为什么要问我们?统计博士有大量简单的代码测试专门为RNGs设计,去测试您的算法。
较长的答覆:
永远不要,永远,永远不要使用自己的密码算法。几乎可以肯定的是,你没有必要的技能来安全地做它。相反,调查可用的算法,确定哪一个满足您的需求,然后确保正确地使用IT。
在这种情况下,如果您不喜欢您可以使用的密码库中的选项,请搜索密码PRNG (伪随机数生成器),并找到一种方法获得一些相当好的种子(不,当前时间不是一个好种子,至少如果它是唯一的种子)。
像MD5、SHA-1和Keccak (SHA-3)这样的哈希函数不是很好的随机数生成器.它们不是为此目的而设计的,并且没有通过最基本的RNG测试。如果您想了解更多关于RNG测试的信息,搜索RNG测试将提供更多信息。大多数安全RNG都是在安全PRNG之上实现的,并且提供了良好的种子。种子可以被哈希化,但是散列不会增加种子或PRNG的安全性。种子是用熵测量的,熵等于不可猜测的比特(信息).然而,比特的总数并没有增加熵。这就是为什么现在的时间不是一个非常安全的种子。是的,它是独特的(大部分时间),但如果外人可以用良好的猜测来预测种子时间,那么他们也可以预测你的PRNG的产量!
“重复应该很少见”--我不知道这是什么意思,但是您可以使用来自RNG的非常长的输出(512 - 1024位),或者您正在尝试实现其他一些算法(比如从一张牌中选择卡片)。
发布于 2012-10-08 23:30:38
MD5不是随机数生成器。不仅它(或者您可能创建的任何变体)不会通过基本的随机性测试,而且它仍然需要一个随机的输入,并且输出只会和您提供的输入一样随机。
发布于 2012-09-15 14:02:45
如果您需要一个唯一的哈希函数,最常见的做法是使用标准算法使用自己的唯一盐类--这样就不会因为混淆其内部数学而意外地使哈希变得更弱。
您可以将该盐类附加到您的明文中:
hashSHA256('thing to hash' + 'my secret salt UYT23gje6t21313d72')https://security.stackexchange.com/questions/21277
复制相似问题