0

これは理論的な質問ですが、私はそれについて興味があります。これを行うとどうなりますか (PHP のコードですが、この場合、言語は実際には問題ではありません):

$value  = ''; //starting value
$repeat = false;

while(true)
{

     $value = md5($value);

     /*Save values in database, one row per value*/

     /*Check for repeated hash value in db, and set $repeat flag true if there is one*/

     if($repeat)break;    
}

ご覧のとおり、ハッシュ値が繰り返されると思われます。すべての既存のテキストに独自の値があるということは、すべてのハッシュ値に独自の値があり、それは意味をなさないことを意味するはずなので、方法はないと思います。

私の質問は次のとおりです。この「問題」に関する記事はありますか? たとえば、ファイルが有効かどうかを確認するためにファイルをハッシュすると、あるシステムで同じ値が得られることがありますか? これにより、システムのどこかで問題が発生する可能性はありますか?

4

2 に答える 2

3

複数のテキストが同じ値にハッシュされることに関心がある場合は、MD5 を使用しないでください。MD5 には高速な衝突攻撃があり、必要なプロパティに違反しています。代わりに SHA-2 を使用してください。

安全なハッシュ関数を使用する場合、128 個のハッシュの衝突を見つけるのは非常に困難です。つまり、衝突が発生したケースを私は知りません。しかし、その可能性を避けたい場合は、単純に 256 ビット ハッシュを使用してください。その場合、ブルート フォースを使用して衝突を見つけることは、現時点では全人類の計算能力を超えています。特に、SHA-256(m1) == SHA-256(m2)m1 != m2.

ハッシュ化されたものを一意にすることはできませんが ( Pidgeonhole の原則を参照)、実際にそのようなケースを見つける可能性は非常に低いです。そのため、そのケースの処理を気にしないでください。

私は通常、128 ビットのセキュリティ レベルを目指しているため、衝突のないハッシュ関数が必要な場合は、SHA-256 などの 256 ビットのハッシュ関数を使用します。


ハッシュ チェーンを使用すると、長時間待機しない限り、衝突を見つけることができません。md5 などの 128 ビット ハッシュの場合は 2^64 である約 2^(n/2) 回になると、衝突が発生する可能性が高くなります。私は、128 ビット ハッシュに対するブルート フォース コリジョンがないことを知っています。私が知っている唯一の衝突は、使用するハッシュ スキームの弱点を悪用する慎重に作成されたメッセージです (これらは md5 に対して存在します)。

于 2012-08-22T07:21:33.380 に答える
-3

同じ方法または別の方法で複数回ハッシュ化します. そうすると, それ自体を繰り返すことはほぼ不可能になります. また, 繰り返されるかどうかをチェックしてから, 値が異なるまでハッシュ関数を繰り返します. 次に, データベースに保存するか, 好きな場所でそれを使用します. ..

于 2012-08-22T07:28:31.387 に答える