Wie können Sie bei einem Satz von 100 verschiedenen Zeichenfolgen gleicher Länge die Wahrscheinlichkeit quantifizieren, dass eine SHA1-Digest-Kollision für die Zeichenfolgen unwahrscheinlich ist ...?
Wie können Sie bei einem Satz von 100 verschiedenen Zeichenfolgen gleicher Länge die Wahrscheinlichkeit quantifizieren, dass eine SHA1-Digest-Kollision für die Zeichenfolgen unwahrscheinlich ist ...?
Antworten:
Sind die von SHA-1 generierten 160-Bit-Hashwerte groß genug, um sicherzustellen, dass der Fingerabdruck jedes Blocks eindeutig ist? Unter der Annahme zufälliger Hashwerte mit einer gleichmäßigen Verteilung, einer Sammlung von n verschiedenen Datenblöcken und einer Hash-Funktion, die b Bits erzeugt, ist die Wahrscheinlichkeit p, dass es zu einer oder mehreren Kollisionen kommt, durch die Anzahl der Blockpaare multipliziert mit der Wahrscheinlichkeit, dass Ein bestimmtes Paar kollidiert.
(Quelle: http://bitcache.org/faq/hash-collision-probabilities )
Nun, die Wahrscheinlichkeit einer Kollision wäre:
1 - ((2^160 - 1) / 2^160) * ((2^160 - 2) / 2^160) * ... * ((2^160 - 99) / 2^160)
Denken Sie an die Wahrscheinlichkeit einer Kollision von 2 Elementen in einem Raum von 10. Das erste Element ist mit einer Wahrscheinlichkeit von 100% eindeutig. Die zweite ist mit einer Wahrscheinlichkeit von 9/10 eindeutig. Die Wahrscheinlichkeit, dass beide eindeutig sind 100% * 90%
, ist also und die Wahrscheinlichkeit einer Kollision ist:
1 - (100% * 90%), or 1 - ((10 - 0) / 10) * ((10 - 1) / 10), or 1 - ((10 - 1) / 10)
Es ist ziemlich unwahrscheinlich. Sie müssten viel mehr Zeichenfolgen haben, um eine entfernte Möglichkeit zu sein.
Schauen Sie sich die Tabelle auf dieser Seite auf Wikipedia an . Interpolieren Sie einfach zwischen den Zeilen für 128 Bit und 256 Bit.
Das ist Geburtstagsproblem - der Artikel enthält nette Annäherungen, die es ziemlich einfach machen, die Wahrscheinlichkeit abzuschätzen. Die tatsächliche Wahrscheinlichkeit wird sehr, sehr gering sein - siehe diese Frage als Beispiel.