Hash 哈希长度减少?

Hash 哈希长度减少?,hash,Hash,我知道,假设给定md5/sha1值,将其从X位(即128位)减少到Y位(即64位)会增加生日攻击的可能性,因为信息已经丢失。是否有任何易于使用的工具/公式/表格可以说明当长度减少时(与原始猜测概率相比),“正确”猜测的概率是多少?好吧,因为散列中的每一个额外位都会提供两倍的可能散列数,每次将散列缩短一位,可能的散列数只有原来的一半,因此猜测随机数的几率增加了一倍 128 bits = 2^128 possibilities 因此 所以把它切成两半,你就可以 2^64 / 2^128 perce

我知道,假设给定md5/sha1值,将其从X位(即128位)减少到Y位(即64位)会增加生日攻击的可能性,因为信息已经丢失。是否有任何易于使用的工具/公式/表格可以说明当长度减少时(与原始猜测概率相比),“正确”猜测的概率是多少?

好吧,因为散列中的每一个额外位都会提供两倍的可能散列数,每次将散列缩短一位,可能的散列数只有原来的一半,因此猜测随机数的几率增加了一倍

128 bits = 2^128 possibilities
因此

所以把它切成两半,你就可以

2^64 / 2^128 percent

可能性较小

加密很难。我建议不要做这种事。这就像烹调河豚鱼:最好留给专家


所以只需使用全长散列。由于和,您不应该在新的应用程序中使用这两个选项。SHA-2可能是您目前最好的选择。

我绝对不建议减少哈希的位计数。这里牵涉到太多的问题。首先,您如何决定要丢弃哪些位

其次,很难预测这些比特的丢失将如何影响新的“缩短”哈希函数中的输出分布。一个(设计良好的)散列函数意味着将输入均匀地分布在整个输出空间,而不是其中的一个子集


通过删除一半的位,您实际上获得了原始散列函数的子集,这可能与正确设计的散列函数的期望属性不符,并可能导致进一步的弱点。

我认为md5或sha1不能保证散列的任何子集都具有相同的熵(随机性)。如果是这种情况,统一的概率分布将不适用。我必须同意,但为了避免人们进行这种切割,似乎应该有一个大脑死亡表,说明当你尝试(使用各种算法)更新时它会变得多么糟糕:在重新检查md5时,很明显每个32位部分都是单独计算的。如果您真的想减少128位MD5哈希,最好每2或4位进行一次。当然,如果你需要安全,最好不要这样做。我同意这很难,但如果不让“正常”人容易理解这样做的后果,那么这种情况将继续发生。我知道这是有后果的,但要说服别人,你真的不能只削减一半,期望原作的一半“质量”。但如果不量化效果,就很难说服人们不应该这样做。
2^64 / 2^128 percent