das ist von logik her schon falsch - da aus einem text (egal wie lang der ist) - ein 256 bit hash errechnet wird - somit sind kollisionen vorprogrammiert - jedoch ist SHA darauf optimiert möglichst wenige kollisionen zu produzieren...
Klar sind Kollisionen möglich. Was die dort meinen ist, dass keine einzige bekannt ist. D.h. niemand kennt bisher irgendwelche 2 Worte, die auf denselben Hashwert abgebildet werden. Das klingt doch erstmal vielversprechend
Ansonsten zur Wahrscheinlichkeit:
Nehmen wir mal an, dass die Hashfunktion
echt zufällig in ihren Wertebereich der Größe N = 2^256 hasht (wenngleich das etwas optimistisch ist).
Dann können wir einfach die klassische Wahrscheinlichkeit nutzen.
Dann ist die Wahrscheinlichkeit für eine Kollision beim Hinzufügen der ersten Mail: 0 / N
beim Hinzufügen der zweiten: 1 / N
beim Hinzufügen der dritten: <= 2 / N
beim Hinzufügen der vierten: <= 3 / N
...
Das <-Zeichen stammt daher, dass die Wahrscheinlichkeit - sollte es bereits eine Kollision gegeben haben - im Folgenden für eine weitere geringer wird, da ja dann nach z.B. 3 Email-Adressen mit 1 Kollision nur 2 verschiedene enthalten sind. D.h. diese Abschätzung ist hier schon der worst-case.
Also erhalten wir 0/N + 1/N + .... + 50.000.000/N = 1/N * (0 + 1 + 2 + ... + 50.000.000) = 1/N * (50.000.000^2 + 50.000.000)/2 = 1/N * 1.250.000.025.000.000 =~ 1.0795 * 10^-62
Dafür, dass bei 50.000.000 Emails eine Kollision auftritt ist die Wahrscheinlichkeit mit 1 zu 10^62 also außerordentlich gering. (entspricht etwa 1 zu 2^202)
Problem dabei: E-Mail Adressen sind in der Regel zwischen 9 und etwa 50 Zeichen lang und bestehen nur aus einem eingeschränkten Zeichensatz (zB nur Kleinbuchstaben, wenige Sonderzeichen etc). Somit ist auch die Chance auf Kollisionen im SHA256 höher, oder?
Ein Hauptanliegen von Hashfunktionen ist, Ähnlichkeiten zwischen Ausgangsworten zu zerstören. Es wird daher sogar eher im Gegenteil sein, dass durch ähnliche Worte Kollisionen noch unwahrscheinlicher werden.
Meine Einschätzung ist, dass du ohne Sorgen einfach SHA-2 nutzen kannst. Um noch eine paranoide Stufe sicherer zu gehen (was nie schaden kann), kannst du ja noch einen zweiten SHA-2 zusätzlich speichern, der z.B. erzeugt wird, wenn du die Email-Adresse rückwärts einliest. Damit sollte wirklich jeder letzte Zweifel behoben sein. Dass zwei verschiedene Email-Adressen vorwärts und rückwärts auf jeweils denselben Hashwert gehasht werden ist absolut derbst unwahrscheinlich.
(Man ist versucht zu glauben, dass da kein großer Unterschied ist, aber da die Wahrscheinlichkeit schon für ein einmaliges Auftreten derart gering ist, ist es ganz im Gegenteil eine sehr krasse weitere Sicherheitsmaßnahme.)
Außerdem könntest du so im Falle des Falles, dass einer der Hashwerte übereinstimmt, dieses Ereignis abfangen, die entsprechenden Emailadressen raussuchen und Ruhm dafür ernten, die erste Kollision gefunden zu haben.
Aber warte da nicht drauf. Bei einer Wahrscheinlichkeit von 1 zu 1^62 (hundert Decillionen) würde ich locker auch mal mein Leben aufs Spiel setzen. Selbst die Gefahr, in seinem Leben von einem vom Himmel fallenden Klavier erschlagen zu werden ist unglaublich viel größer:
Wieviele Menschen hat es bisher auf der Erde gegeben ? Worst-Case: 20000 Jahre, wobei alle 20 Jahre 5.000.000.000 neue Menschen da sind, macht 1000*5 Mrd = 5*10^12 Menschen bisher. Von all denen sind vielleicht erst sieben von einem Klavier erschlagen worden. Damit ist die Wkt von einem Klavier erschlagen zu werden 7 zu 5*10^12, und somit ca. 10^50-fach, also etwa hundert Oktillionen-fach größer, als eine Kollision in deiner Email-Liste. Also immer schön nach oben gucken!
Noch mehr Rechenspaß: Um mit Wahrscheinlichkeit 0.000004 Prozent eine Kollision zu haben musst du etwa 10^36 Emails - also eine Quinquilliarde Emails - einsortieren.
Aber dies alles gilt nur für eine echt zufällige Hashfunktion. Da SHA-2 aber nicht echt zufällig sein kann ist sie vielleicht 10-mal oder sogar ein paar hundertausendmal schlechter als echt zufällig - was immernoch völlig egal wäre.