Es hängt davon ab, gegen was Sie sich verteidigen möchten.
Sicherheit ist niemals ein Spiel für alle. Wenn es so wäre, gäbe es nicht 12941 verschiedene Hash-Algorithmen. Stattdessen müssen Sie verstehen, dass jede Sicherheitsmaßnahme Sie gegen eine bestimmte Art von Angriff schützt. Sie geben ein Kennwort in Ihren Computer ein, um sich gegen zufällige Personen zu schützen, die darauf zugreifen. Dies liegt nicht daran, dass es so viel Spaß macht, bei jeder Anmeldung whereD1DweG0sowron6
einzugeben.
Bei Hash-Algorithmen können Sie dies grob tun klassifizieren Sie sie als "kryptografische Hashes" und "nicht kryptografische Hashes". Kryptografische Hash-Algorithmen sind so konzipiert, dass sie einer Reihe von Angriffen standhalten, während nicht-kryptografische Hashes so schnell wie möglich ausgeführt werden. 1 sup> MD5 wird beispielsweise als kryptografischer Hash betrachtet, ist jedoch so fehlerhaft, dass dies der Fall ist Nur als nicht kryptografischer Hash verwendbar.
Wann wird ein nicht kryptografischer Hash verwendet?
Wenn Sie beim Kopieren einer Datei von einem Speicherort an einen anderen Bit-Flips erkennen möchten ( B. ein USB-Stick an einen Laptop), dann ist MD5 absolut die richtige Wahl. Ich würde sogar sagen, dass jeder schnelle, nicht kryptografische Hash gut ist. Wenn Sie Dateien kopieren, müssen Sie realistisch gesehen keine Angst vor Angreifern haben. Wenn Sie paranoid sind, dass Hacker Ihren Kernel ändern können, können Sie Ihre Probleme durch Hinzufügen von Hashes nicht lösen.
Überprüfen der Dateiintegrität mit Eingriffen von Angreifern
Wenn Sie diese signieren und veröffentlichen möchten Dateien, dann kann ein Angreifer möglicherweise eine möglicherweise legitime Datei mit demselben Hash erstellen. Dies bedeutet, dass Ihre Signatur für die schädliche Datei genauso gültig ist.
Ein Beispiel
Lassen Sie uns Sagen Sie, Ihre ursprüngliche Nachricht m1
sieht folgendermaßen aus:
Hiermit erkläre ich, dass der Hase regiert!
Sie verwenden Ihre Hash-Funktion h (m1)
und erhalten Sie den Digest d1
. Anschließend signieren Sie den Digest d1
und erhalten eine Signatur s1
.
Anschließend veröffentlichen Sie Ihre Nachricht m1
, Ihre Signatur s1
und Ihre Hash-Funktion h()
.
I. Möglicherweise ist er der Angreifer im Szenario und erstellt eine Nachricht m2
, die genau den gleichen Hash in der von Ihnen gewählten Hash-Funktion enthält:
Es ist öffentlich bekannt, dass Hunde besser sind als Hasen in jeder Hinsicht ...
Da h (m1) = h (m2) = d1
, ist die Signatur s1
gültig Für Ihren ursprünglichen m1
und meinen böswilligen m2
.
Um sich gegen solche Angriffe zu verteidigen, ist es wichtig, einen starken Hash-Algorithmus mit zu wählen hohe Beständigkeit gegen Kollisionen. Dies bedeutet, dass es für mich sehr schwierig wird, einen m2
zu finden, wobei h (m2) = h (m1)
.
Gute Entscheidungen wären SHA256 und SHA512 sowie Tonnen anderer. Es scheint, dass jeder einige bevorzugte Nicht-Mainstream-Hash-Funktionen hat, aber SHA256 und SHA512 haben eine sehr breite Unterstützung und es wird schwierig für Sie sein, ein System zu finden, das diese Hashes nicht unterstützt. Und da Ihre Dateien sehr klein sind, sollte die Berechnung des Hashs fast sofort erfolgen.
Auf meinem 800-MHz-Computer dauerte die Berechnung des SHA512-Hash einer 16-KB-Zufallsdatei beispielsweise 3 ms, sodass dies auch bei einem Toaster der Fall sein sollte Seien Sie relativ schnell.
1 sup> Sie können dasselbe mit Zufallszahlengeneratoren sehen. Kryptografische PRNGs zielen darauf ab, Zufallszahlen zu liefern, die wirklich schwer zu erraten sind, während Nicht-Krypto-PRNGs darauf abzielen, nur Zahlen anzugeben, die auf den ersten Blick zufällig aussehen und dies schnell tun.