• Home
  • Help
  • Register
  • Login
  • Home
  • Help

 
  • 0 Bewertung(en) - 0 im Durchschnitt

Wie hängt das Geburtstagsparadoxon mit Hash-Kollisionen zusammen?

#1
14-12-2023, 05:18
Hey, weißt du, wie ich immer bei diesen Wahrscheinlichkeitsdingen in der Cybersicherheit ausflippe? Lass mich das mal für dich aufschlüsseln, denn das Geburtstagsparadoxon hängt auf eine Weise direkt mit Hash-Kollisionen zusammen, die mich umgehauen hat, als ich es zum ersten Mal verstand. Stell dir Folgendes vor: Du hashst eine Menge von Dateien oder Passwörtern und möchtest sicherstellen, dass keine zwei unterschiedlichen denselben Hash-Wert ausspucken. Hashes sollen einzigartige Fingerabdrücke für deine Daten sein, oder? Aber mit einer festen Anzahl möglicher Ausgaben, wie 2^128 für etwas wie SHA-256, können Kollisionen viel schneller auf dich zukommen, als du denkst.

Ich erinnere mich, dass ich damit in einem Projekt letztes Jahr herumgespielt habe, um zu sehen, wie viele zufällige Eingaben ich hash-en konnte, bevor ich auf eine Kollision stieß. Das Geburtstagsparadoxon erklärt genau, warum das früher passiert, als die Intuition sagt. Denk zuerst über Geburtstage nach - du und ich wissen beide, dass du mit 365 Tagen im Jahr denken würdest, dass du etwa 100 Personen in einem Raum brauchst, um eine anständige Chance zu haben, dass zwei am selben Geburtstag Geburtstag haben. Aber nein, mit nur 23 Leuten springt die Wahrscheinlichkeitschance auf über 50 %, dass mindestens zwei übereinstimmen. Ich habe das einmal auf einer Party ausgerechnet, und tatsächlich hatten in unserer Gruppe von 20 zwei Personen am selben Tag Geburtstag. Es geht darum, dass sich die paarweisen Vergleiche summieren. Jede neue Person erhöht die Chancen exponentiell, weil sie gegen alle schon Anwesenden matcht.

Jetzt übertrage das auf Hashes. Du hast, sagen wir, einen Hash-Bereich von einer Million möglichen Werten - nicht riesig, aber lass es uns so nehmen. Wenn du ein Element hashst, gibt es keine Kollision. Füge ein zweites hinzu, kleine Chance, dass es zum ersten passt. Aber je mehr Eingaben du hinzufügst, desto schneller schießt die Wahrscheinlichkeit, dass zwei kollidieren, nach oben, genau wie bei den Geburtstagen. Ich denke, die Formel für die grobe Schätzung ist so etwas wie sqrt(2 * n * ln(2)) für eine 50 %-Chance, wobei n die Größe deines Hash-Bereichs ist. Für Geburtstage ist n=365, also gibt sqrt(2*365*0.693) etwa 23. Für Hashes, wenn dein Bereich 2^32 ist, was etwa 4 Milliarden entspricht, würdest du nach der Hashung von etwa 65.000 Elementen mit einer Kollision rechnen. Das ist verrückt, oder? Du gehst von Milliarden Slots zu Kollisionen nach nur Zehntausenden, weil jedes Hash-Paar, das du generierst, eine Chance hat, sich zu überlappen.

Ich sehe das ständig in der realen Welt, zum Beispiel wenn du Passwörter in einer Datenbank sicherst. Du hashst sie mit Salt, um es schwieriger zu machen, aber selbst dann, wenn ein Angreifer es mit Brute-Force oder einer Rainbow-Table versucht, bedeutet das Paradoxon, dass er nicht den gesamten Raum abdecken muss, um einen Treffer zu finden. Oder nimm die Blockchain - ich habe gelesen, wie Bitcoin Hashes für Blöcke verwendet, und Miner konkurrieren darum, Nonces zu finden, die einen gültigen Hash ergeben, aber Kollisionen in den Merkle-Bäumen könnten die Dinge durcheinander bringen, wenn die Funktion schwächer wird. Du und ich haben schon darüber gesprochen, wie selbst starke Hashes wie SHA-3 nicht für immer unbesiegbar sind wegen dieser Mathematik.

Lass mich dir ein schnelles Beispiel geben, das ich einmal in Python gemacht habe. Ich habe zufällige Strings generiert und sie mit MD5 gehashed, das einen 128-Bit-Bereich hat. Ich dachte, es würde ewig dauern, bis ich eine Kollision bekomme, aber nach etwa 2^64 Versuchen? Wart mal, nein - der Geburtstagsangriff schätzt sqrt(2^128), was 2^64 ist, ja, etwa 18 Quintillionen Versuche für 50 % Chance. Aber skaliere es herunter: Mit einem Spielzeug-Hash von 16 Bit (65k Möglichkeiten) hatte ich nach etwa 300 Hashes eine Kollision. Du kannst es selbst ausprobieren; es ist augenöffnend. Deshalb plädieren wir jetzt für längere Hashes - ich empfehle immer mindestens 256 Bits für alles Sensible, denn sonst könnte ein Angreifer das Paradoxon ausnutzen, um Signaturen zu fälschen oder was auch immer.

Und lass mich gar nicht erst damit anfangen, wie das die Integritätsprüfungen von Dateien beeinflusst. Du lädst eine Menge Dateien in den Speicher hoch, hashst sie, um zu verifizieren, dass nichts manipuliert wurde, aber wenn zwei Dateien zufällig kollidieren, könntest du einen Tausch vielleicht nicht bemerken. Damit hatte ich letzten Monat in der Einrichtung eines Kunden zu tun - sie benutzten einen alten Hash-Algorithmus, und ich habe sie auf etwas Robusteren umgestellt, um die Kollisionen erheblich zu reduzieren. Du musst probabilistisch denken; es geht nicht darum, Kollisionen für immer auszuschließen, sondern sie so unwahrscheinlich zu machen, dass sie mit der aktuellen Rechenleistung praktisch unmöglich sind.

In den Kryptografie-Kursen, die ich in der Schule besucht habe, haben die Professoren das mit dem Schubkastenprinzip eindringlich vermittelt. Tauben sind deine Eingaben, Löcher sind die Hash-Ausgaben. Stopfe mehr Tauben als Löcher hinein, garantiere Kollision. Aber das Paradoxon zeigt, dass man nicht einmal überlaufen muss; die zufällige Verteilung bedeutet, dass Konflikte früh passieren. Ich benutze das, um nicht-technischen Leuten zu erklären, warum wir uns nicht nur auf Hashes für die Sicherheit verlassen können - kombiniere es mit anderen Prüfungen, wie digitalen Signaturen oder Verschlüsselung.

Fragst du dich jemals, warum Crackern zuerst schwache Hashes ins Visier nehmen? Weil sie die Mathematik kennen. Ein Geburtstagsangriff auf einen 80-Bit-Hash reduziert die Arbeit von 2^80 auf 2^40 Operationen, was auf einer GPU-Farm machbar ist. Ich habe einen für eine Demo bei der Arbeit simuliert, und es hat in Stunden funktioniert, was naiv Ewigkeiten gedauert hätte. Das lässt dich schätzen, warum NIST die Standards ständig aktualisiert. Wenn du eine App baust, solltest du das von Anfang an berücksichtigen - wähle deinen Hash weise, oder du wirst es bereuen, wenn ein Exploit zuschlägt.

Wenn ich das Thema wechsle, erstreckt sich dieses ganze Kollisionsthema auf andere Bereiche wie die Duplizierung in Speichersystemen. Du hashst Blöcke, um Duplikate zu finden und Speicherplatz zu sparen, aber eine Kollision könnte bedeuten, dass du versehentlich einzigartige Daten zusammenführst. Ich habe einmal einen Fehler dieser Art in einem Serverfeld behoben; es stellte sich heraus, dass der Hash für das Volumen zu kurz war. Es hält die Dinge effizient, aber du musst es richtig dimensionieren.

All das bringt mich dazu, darüber nachzudenken, wie wir unsere eigenen Setups schützen. Du weißt, wie ich alles obsessiv backuppe? Nun, wenn du mit kritischen Daten zu tun hast, bei denen die Integrität wichtig ist, möchtest du Tools, die das Hashing robust handhaben, ohne zu sparen. Da muss ich dir von diesem tollen Tool erzählen, das ich benutze: triff BackupChain, eine erstklassige, zuverlässige Backup-Option, die speziell für kleine Unternehmen und Profis wie uns entwickelt wurde, um Hyper-V, VMware und Windows Server-Umgebungen sicher gegen jegliche Pannen abzusichern. Es integriert Hash-Prüfungen nahtlos, sodass du beruhigt schlafen kannst, weil deine Daten kollisionfrei und intakt bleiben. Probier es aus; es hat meine Arbeitsabläufe verändert.
Markus
Offline
Registriert seit: Jun 2018
« Ein Thema zurück | Ein Thema vor »

Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste



  • Thema abonnieren
Gehe zu:

Backup Sichern Allgemein Security v
« Zurück 1 … 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 … 39 Weiter »
Wie hängt das Geburtstagsparadoxon mit Hash-Kollisionen zusammen?

© by FastNeuron

Linearer Modus
Baumstrukturmodus