Kann eine Datei böswillig so geändert werden, dass ihr ursprünglicher SHA-1-Hash erhalten bleibt?

Kann eine Datei böswillig so geändert werden, dass ihr ursprünglicher SHA-1-Hash erhalten bleibt?

EntsprechendDasArtikel und viele andere: SHA-1 ist nicht sicher.

In meinem Fall mache ich mir keine Sorgen um Passwörter oder digitale Zertifikate. Mir geht es um die Dateiintegrität.

Ist es durchaus möglich, dass eine Datei (z. B. ein ISO-Image oder eine ausführbare Datei) böswillig auf eine Weise verändert wird, die:

  • Behält den SHA-1-Hash der Originaldatei bei und
  • Behält den Gesamtinhalt und die Funktion der Datei bei (enthält jetzt aber natürlich schädliche Inhalte, die ursprünglich nicht vorhanden waren)

So wie ich das sehe, würde eine Datei, die eine SHA-1-Kollision verursacht, völlig unbrauchbar werden. Das ISO wäre völlig beschädigt oder die ausführbare Datei wäre so durcheinander, dass sie nicht einmal mehr ausführbar wäre.

Aber meine Sichtweise könnte auch falsch sein. Bisher habe ich bei Google-Suchen nichts darüber gefunden, ob SHA-1 weiterhin für die Dateiüberprüfung geeignet ist. Irgendwelche Erkenntnisse?

Antwort1

Für SHA-1 ist dies bisher noch niemandem gelungen. Theoretisch ist es möglich, aber praktisch noch nicht. Die Berichte über Sicherheitslücken bei SHA-1 bedeuten lediglich, dass das Sicherheitsniveau nicht so hoch ist, wie wir es gerne hätten, und das bedeutet, dass wir nicht mehr so ​​viele Jahre Zeit haben, bevor wir uns darüber Sorgen machen müssen, wie wir dachten.

Es ist schwieriger, eine Datei mit demselben SHA-1-Hash wie eine vorhandene Datei zu erstellen, als selbst zwei Dateien mit demselben SHA-1-Hash zu erstellen. Und soweit wir wissen, hat noch niemand auf der Welt diese einfachere Aufgabe bewältigt. Das heißt aber nicht, dass es morgen nicht möglich sein kann.

Antwort2

Theoretisch wäre es möglich, aber bisher wurde es noch nicht umgesetzt.

Was Sie suchen, nennt sich „Hash-Kollision“: zwei Dateien mit demselben Hash. Kryptografische Hash-Codes wie SHA-1 sind im Allgemeinen so konzipiert, dass dies schwierig ist. Da SHA-1 ein 160-Bit-Code ist, sind im Durchschnitt 2^159 Brute-Force-Versuche erforderlich, um ein Duplikat zu finden. Wenn ein Algorithmus gefunden wird, der bei einem kryptografischen Hash zuverlässig besser abschneidet, gilt der Hash als „gebrochen“.

MD-5 ist ein Beispiel für einen sehr fehlerhaften Hash. Er sollte eine Stärke von 128 Bit haben und im Durchschnitt 2^127 Versuche erfordern. Wenn bekannte Schwachstellen ausgenutzt werden, kann die tatsächliche Anzahl der erforderlichen Versuche jedoch nur 2^47 betragen. Das ist VIEL weniger als 2^127. Tatsächlich wurde dies auf einem modernen Computercluster in weniger als einem Tag erledigt.

Ich gebe dieses Beispiel, weil es Ihrer Vorstellung von SHA-1 am nächsten kommt. Dies ist jedoch nicht der gängigste Ansatz der Kryptoanalyse, um sicherzustellen, dass Hashes nicht geknackt werden. Normalerweise lassen sie eine Kollision zwischen zwei Dateien zu, die der Angreifer auswählt, anstatt dass Sie eine Datei auswählen und der Angreifer versucht, sie zu vergleichen. Diese Art von Angriff hat den Vorteil, dass er leichter zu vergleichen ist. Wenn ich feststelle, dass es „schwer“ ist, Ihre Datei zu knacken, bedeutet das dann, dass eine andere Datei ähnlich stark ist? Dieser Angriff, bei dem der Angreifer beide Dateien auswählen kann, stellt sicher, dass wir das Schlimmste vom Schlimmsten abfangen.

Diese Art von Angriff ermöglicht einen interessanten Trick, bekannt als "Geburtstagsangriff." Kurz gesagt: Durch die Verwendung des Geburtstagsangriffs wird die Stärke des Algorithmus halbiert, sodass SHA-1 (im Durchschnitt) 2^80 Versuche und MD5 (im Durchschnitt) 2^64 Versuche erfordert. Dies ist die Hälfte von 160 bzw. 128.

SHA-1 hat bekannte Angriffe, die seine Stärke von 2^80 auf 2^69 verringern. Das wird Ihnen nicht viel ausmachen. 2^69 Versuche sind einlangZeit.

Aus der Vergangenheit wissen wir jedoch, dass Hash-Algorithmen nicht spontan, sondern mit der Zeit kaputt gehen. Niemand knackt einen Algorithmus wie MD-5 und bringt ihn über Nacht von 2^64 auf 2^47. Das passiert mit der Zeit, wenn viele Leute Artikel über die Mathematik veröffentlichen, die sie gegen den Algorithmus verwenden. Normalerweise kann man beobachten, wie die Komplexität der Angriffe von Beginn des Algorithmus an langsam abnimmt (wobei der beste Angriff normalerweise der Birthday-Angriff ist).

Die Tatsache, dass wir einige Änderungen bei den Kollisionen beobachten, deutet darauf hin, dass SHA-1 das Licht am Ende des Tunnels sieht. Es ist immer noch stark, aber es besteht möglicherweise der Wunsch, auf das neueste SHA-3 umzusteigen, das derzeit viel sicherer ist.

Sie sollten solche Entscheidungen wirklich aus der Perspektive eines Bedrohungsmodells treffen. Wie viel Schaden kann ein Angreifer anrichten, wenn er eine dieser Kollisionen erlebt? Sind Ihre Angreifer Script-Kiddies mit Zugriff auf ein paar Laptops oder Regierungen mit ganzen Supercomputer-Clustern? Wie groß ist das Zeitfenster, das einem Angreifer zur Verfügung steht, um den Hash zu knacken, bevor er nutzlos wird (viele Anwendungen der Kryptografie beinhalten einen „Wachwechsel“, wie z. B. eine Passwortrotation). All diese Faktoren beeinflussen, wie ernst Sie Kollisionen nehmen müssen.

Antwort3

Die in diesem Artikel diskutierten Fehler in SHA-1 sind sehr spezifisch: Sie ermöglichen es Angreifern, zwei Dinge zu erstellen, die den gleichen Hashwert ergeben (dies wird als „Kollisionsangriff“ bezeichnet). Ein Kollisionsangriff erfordert jedoch, dass der Angreifer die Kontrolle überbeideDateien. Wenn der Angreifer die Originaldatei nicht kontrolliert, kann er bei einem Kollisionsangriff keine andere Datei mit demselben Hashwert finden.

Der Grund, warum dies für TLS/SSL (und Signaturen im Allgemeinen) wichtig ist, ist, dass ein Angreifer bei diesen häufigdürfenbeide Dateien kontrollieren. Ein TLS-Zertifikat wird meistens von der Person erstellt, die es anfordert (die Teile, die sie nicht kontrolliert, sind oft vorhersehbar), sodass Kollisionen es ihr ermöglichen, ein legitimes und ein illegitimes Zertifikat zu erstellen, das legitime signieren zu lassen und die Signatur zu übertragen.

Bei Dateien trifft dies nicht immer zu. Wenn Sie befürchten, dass die Person, die die Datei erstellt, der Angreifer ist (z. B. lässt sie eine Sache unabhängig als gut verifizieren und sendet Ihnen dann die bösartige Nutzlast mit demselben Hash), ist der SHA-1-Angriff anwendbar und Sie sollten versuchen, ihn schrittweise abzuschaffen (obwohl er, wie David Schwartz erwähnte, noch nicht kritisch ist). Wenn die Originaldatei vertrauenswürdig ist, kann ein Angreifer die derzeit bekannten SHA-1-Angriffe nicht anwenden, obwohl Sie dennoch darüber nachdenken sollten, ihn schrittweise abzuschaffen, wenn Sie können (wenn Sie die Wahl haben, verwenden Sie einen Hash ohne bekannte Angriffe wie SHA-2).


Als Antwort auf "die Kollision wird nicht nützlich sein" -- Während ein Angriff nicht erfordert, dass ein Angreifer in der Lage ist,nützlichKollision, es ist im Allgemeinen nicht allzu schwer, aus „Kollision“ eine „nützliche Kollision“ zu machen. Viele Dateiformate bieten viel Spielraum, in dem Sie alles haben können, was Sie wollen, ohne die Funktionalität der Datei zu beeinträchtigen. Ein Angreifer kann dies normalerweise ändern, um eine Kollision zu erzielen (wenn Kollisionen praktisch auffindbar sind), während der funktionale Teil so bleibt, wie er ihn haben möchte. Die Lücke zwischen „akademischem Angriff“ und „praktischem Angriff“ kann groß sein; die Lücke zwischen „jeder Kollision“ und „nützlicher Kollision“ ist im Allgemeinen viel kleiner.


Das schwerwiegendere Problem, das nichts mit der Wahl des Algorithmus zu tun hat, ist die Frage, wie Sie den Hash erhalten. Ein Hash verlagert lediglich das Problem von „Holen Sie sich die echte Datei“ auf „Holen Sie sich den echten Hash-Wert“. Ein Hash-Wert, der vom selben Server und über denselben Verbindungstyp wie die Datei gesendet wird, ist gegen böswillige Änderungen absolut wertlos (jeder Angreifer, der die Datei manipulieren kann, kann auch den Hash manipulieren). Hashes sind hierfür nur dann nützlich, wenn Sie dem Hash mehr vertrauen können als der Datei. Das ist zwar manchmal der Fall (Torrents, Spiegel), aber sie werden oft verwendet, wenn dies nicht der Fall ist. Sie sollten also sehr vorsichtig sein, wenn Sie Hashes zur Integritätsüberprüfung verwenden.

Antwort4

DerallgemeinDer Kernpunkt des in der Frage erwähnten Artikels ist: SHA1 ist veraltet und sollte auslaufen, solange noch Zeit für einen reibungslosen Ablauf bleibt. In manchen Bereichen läuft die Zeit davon, da Google und Microsoft Fristen durchsetzen.

Faustregel fürveraltetTechnologie:

  • Wenn Sie ein neues Design erstellen oder Funktionen hinzufügen, verwenden Sie es nicht (SHA1).
  • Wenn Sie etwas Altes warten, machen Sie einen Plan, wann Sie es ersetzen (SHA1).

Zusammenfassendes Zitat aus dem Blogbeitrag von Bruce Schneier aus dem Jahr 2012: „Der Punkt ist, dass wir in der Community jetzt mit der Migration von SHA-1 zu SHA-2/SHA-3 beginnen müssen.“

verwandte Informationen