SHA-256 oder MD5 für Dateiintegrität

77

Ich weiß, dass SHA-256 aus Sicherheitsgründen usw. gegenüber MD5 bevorzugt wird, aber wenn ich eine Methode verwenden möchte, um nur die Dateiintegrität zu überprüfen (dh nichts mit Kennwortverschlüsselung usw. zu tun hat), gibt es einen Vorteil von mit SHA-256?

Da MD5 128-Bit und SHA-256 256-Bit ist (daher doppelt so groß) ...

  1. Würde die Verschlüsselung bis zu doppelt so lange dauern?

  2. Wo Zeit nicht von entscheidender Bedeutung ist, wie in einem Sicherungsprogramm, und nur die Dateiintegrität erforderlich ist, würde jemand gegen MD5 für einen anderen Algorithmus argumentieren oder sogar eine andere Technik vorschlagen?

  3. Erzeugt die Verwendung von MD5 eine Prüfsumme?

Dave
quelle
39
Terminologie nitpick: Weder MD5 noch SHA- * verschlüsseln etwas. Sie sind Hash-Funktionen.
1
@delnan Eigentlich bin ich froh, dass du das aufgegriffen hast, danke. Aber ist eine Hash-Darstellung von etwas nicht eine Verschlüsselung?
Dave
14
Nein. Für den Anfang ist eine Verschlüsselung (per Definition) reversibel, während ein Hash nicht rückgängig gemacht werden kann (nach dem Pigeonhole-Prinzip).
1
Nun, die beiden sind grundlegend unterschiedlich und folglich machen die verschiedenen Arten von Angriffen auf einen der beiden nicht einmal Sinn für den anderen, so dass "sicherer" meiner Meinung nach nicht viel Sinn macht. Möchten Sie klarstellen, was Sie damit meinen?
1
Nun, das sind sie, aber das bedeutet nur, dass sie unterschiedlichen Zwecken dienen und folglich unterschiedlich angegriffen werden. Bei der Hash-Funktion führt der häufigste Angriff zu einer Kollision, da Sie auf diese Weise Hash-basierte Sicherheitsmessungen (z. B. Hashing-Passwörter oder Signieren von Zertifikaten) verhindern. Sie verstecken nichts, indem Sie nur den Hash speichern, denn dann ist er für alle "verloren" / unzugänglich , nicht nur für Angreifer.

Antworten:

76

Sowohl SHA256 als auch MDA5 sind Hashing-Algorithmen. Sie nehmen Ihre Eingabedaten, in diesem Fall Ihre Datei, und geben eine 256/128-Bit-Nummer aus. Diese Nummer ist eine Prüfsumme. Es findet keine Verschlüsselung statt, da eine unendliche Anzahl von Eingaben zu demselben Hashwert führen kann, obwohl Kollisionen in der Realität selten sind.

Laut dieser Antwort dauert die Berechnung von SHA256 etwas länger als von MD5 .

Auf Anhieb würde ich sagen, dass MD5 wahrscheinlich für das geeignet ist, was Sie brauchen.

dandan78
quelle
Vielen Dank, aber sagen Sie als Off-Topic-Frage, dass die Verschlüsselung einen eindeutigen 'Code' / 'ID' wie eine GUID erzeugen muss?
Dave
8
@ DaveRook Wie sonst würden Sie die Nachricht dann entschlüsseln?
Paul Manta
@PaulManta - Ich habe keine Ahnung, da ich dies nur aus Gründen der Integrität mache. Ich habe noch nie über eine solche Verschlüsselung nachgedacht, aber das ist großartig zu wissen. Vielen Dank.
Dave
5
@ Dave Ich denke, es gibt ein bisschen Verwirrung über das Thema, weil SHA als kryptografischer Hash bezeichnet wird. Das bedeutet (ich bin weit entfernt von einem Experten), dass Sie damit Passwörter hashen können. Auf diese Weise kann ein Angreifer, wenn er Ihre Benutzerkennwortdatei erhält, die Hashes nicht verwenden, um die ursprünglichen Kennwörter zu rekonstruieren. Die Verschlüsselung unterscheidet sich darin, dass sie reversibel sein soll.
dandan78
@ Dave, den Sie unten erwähnt haben, dass Sie nach einer Liste von Hash-Funktionen gesucht haben. Schauen Sie sich den Wikipedia-Artikel über Hash-Funktionen an: en.wikipedia.org/wiki/List_of_hash_functions
Rob
17

Zu 1): Ja, auf den meisten CPUs ist SHA-256 nur etwa 40% so schnell wie MD5.

Zu 2): Ich würde in einem solchen Fall für einen anderen Algorithmus als MD5 argumentieren. Ich würde definitiv einen Algorithmus bevorzugen, der als sicher gilt. Dies ist jedoch eher ein Gefühl. Fälle, in denen dies eher konstruiert als realistisch ist, z. B. wenn Ihr Sicherungssystem auf einen Beispielfall eines Angriffs auf ein MD5-basiertes Zertifikat stößt, haben Sie wahrscheinlich zwei Dateien in einem solchen Beispiel mit unterschiedlichen Daten, aber identischen MD5-Prüfsummen. Für den Rest der Fälle spielt es keine Rolle, da MD5-Prüfsummen praktisch nur dann eine Kollision aufweisen (= gleiche Prüfsummen für unterschiedliche Daten), wenn sie absichtlich provoziert werden. Ich bin kein Experte für die verschiedenen Hashing-Algorithmen (Prüfsummengenerierung), daher kann ich keinen anderen Algorithmus vorschlagen. Daher ist dieser Teil der Frage noch offen. Vorgeschlagene weitere Lektüre istKryptografische Hash-Funktion - Datei- oder Datenkennung auf Wikipedia. Weiter unten auf dieser Seite befindet sich eine Liste kryptografischer Hash-Algorithmen.

Zu 3): MD5 ist ein Algorithmus zur Berechnung von Prüfsummen. Eine mit diesem Algorithmus berechnete Prüfsumme wird dann als MD5-Prüfsumme bezeichnet.

Daniel S.
quelle
16

Jede Antwort scheint darauf hinzudeuten, dass Sie sichere Hashes verwenden müssen, um die Arbeit zu erledigen, aber alle sind so eingestellt, dass sie langsam sind, um einen Bruteforce-Angreifer zu zwingen, über viel Rechenleistung zu verfügen. Abhängig von Ihren Anforderungen ist dies möglicherweise nicht die beste Lösung.

Es gibt Algorithmen, die speziell dafür entwickelt wurden, Dateien so schnell wie möglich zu hashen, um die Integrität und den Vergleich zu überprüfen ( murmur, XXhash...). Offensichtlich sind diese nicht auf Sicherheit ausgelegt, da sie nicht den Anforderungen eines sicheren Hash-Algorithmus (dh Zufälligkeit) entsprechen, aber niedrige Kollisionsraten für große Nachrichten aufweisen . Diese Funktionen machen sie ideal, wenn Sie nicht nach Sicherheit, sondern nach Geschwindigkeit suchen.

Beispiele für diese Algorithmen und Vergleiche finden Sie in dieser hervorragenden Antwort: Welcher Hashing-Algorithmus eignet sich am besten für Eindeutigkeit und Geschwindigkeit? .

Als Beispiel verwenden wir auf unserer Q & A-Site murmur3das Hashing der von den Benutzern hochgeladenen Bilder, sodass wir sie nur einmal speichern, selbst wenn Benutzer dasselbe Bild in mehreren Antworten hochladen.

Marc Climent
quelle
10
  1. Nein, es ist weniger schnell, aber nicht so langsam
  2. Für ein Backup-Programm ist es möglicherweise erforderlich, etwas noch schneller als MD5 zu haben

Alles in allem würde ich sagen, dass MD5 zusätzlich zum Dateinamen absolut sicher ist. SHA-256 wäre aufgrund seiner Größe nur langsamer und schwieriger zu handhaben.

Sie können auch problemlos etwas verwenden, das weniger sicher als MD5 ist. Wenn niemand versucht, Ihre Dateiintegrität zu hacken, ist dies ebenfalls sicher.

Genesis Rock
quelle
Danke, aber das Problem ist, dass ich nicht weiß, was ich sonst noch gebrauchen könnte! Ich bitte nicht um eine Empfehlung und bin gerne bereit, andere Ansätze zu untersuchen. Können Sie jedoch etwas anderes als MD5 / SHA256 vorschlagen?
Dave
1
Abhängig von der Programmiersprache und der Laufzeitumgebung, die Sie verwenden.
Genesis Rock
9

Der zugrunde liegende MD5-Algorithmus wird nicht mehr als sicher eingestuft. Daher eignet sich md5sum zwar gut zum Identifizieren bekannter Dateien in Situationen, die nicht sicherheitsrelevant sind, sollte jedoch nicht verwendet werden, wenn die Möglichkeit besteht, dass Dateien absichtlich und böswillig manipuliert wurden. Im letzteren Fall wird die Verwendung eines neueren Hashing-Tools wie sha256sum dringend empfohlen.

Wenn Sie also nur nach Dateibeschädigungen oder Dateidifferenzen suchen und die Quelle der Datei als vertrauenswürdig eingestuft ist, sollte MD5 ausreichen. Wenn Sie die Integrität einer Datei überprüfen möchten, die von einer nicht vertrauenswürdigen Quelle oder von einer vertrauenswürdigen Quelle über eine unverschlüsselte Verbindung stammt, reicht MD5 nicht aus.

Ein anderer Kommentator bemerkte, dass Ubuntu und andere MD5-Prüfsummen verwenden. Ubuntu ist zusätzlich zu MD5 auf PGP und SHA256 umgestiegen, aber die Dokumentation der stärkeren Verifizierungsstrategien ist schwieriger zu finden. Weitere Informationen finden Sie auf der Seite HowToSHA256SUM .

jsears
quelle
1
Ich weiß, dass ich zu spät zur Party komme, aber danke, dass Sie diesen Punkt gemacht haben! Wenn Sie Prüfsummen verwenden, um zu überprüfen, ob ein Angreifer nicht mit Ihren Dateien schraubt, ist MD5 eine schreckliche Idee. Wenn der Angreifer weiß, was er tut, könnte er theoretisch die richtige Kollision finden, die es ihm ermöglicht, seinen Code auszuführen, ohne die Prüfsumme der Datei zu ändern, und sich so einer auf Prüfsummen basierenden Sicherheitsüberprüfung entziehen. SHA-Algen funktionieren auf modernen CPUs gut genug und skalieren viel besser (wenn die Dateigröße größer wird, müssen auch unsere Prüfsummen berücksichtigt werden). Wenn Sie mit großen HD-Videodateien arbeiten, würde ich SHA-512 verwenden.
Kris Craig
6

Es ist technisch anerkannt, dass MD5 schneller als SHA256 ist. Wenn Sie also nur die Dateiintegrität überprüfen, ist dies ausreichend und für die Leistung besser.

Sie können die folgenden Ressourcen auschecken:

SaidbakR
quelle
Ah, und der Link, den Sie bereitgestellt haben, zeigt auch andere Algorithmen. Ich denke, ich muss herausfinden, welche für .NET jetzt verfügbar sind, und die schnellsten finden. Vielen Dank
Dave
3
@ DaveRook Wenn Sie sich nach berühmten Websites wie Sun, Ubuntu und anderen umsehen, werden Sie möglicherweise feststellen, dass diese eine MD5-Prüfsumme für die Integrität von Dateien bereitstellen. Dies kann seinen Wert für solche Aufgaben unterstützen.
SaidbakR
3
  1. Ja, auf den meisten CPUs ist SHA-256 zwei- bis dreimal langsamer als MD5, allerdings nicht in erster Linie wegen seines längeren Hash. Weitere Antworten finden Sie hier und die Antworten auf diese Fragen zum Stapelüberlauf .
  2. Hier ist ein Backup-Szenario, in dem MD5 nicht geeignet wäre:
    • Ihr Sicherungsprogramm hascht jede zu sichernde Datei. Anschließend werden die Daten jeder Datei anhand ihres Hashs gespeichert. Wenn Sie also dieselbe Datei zweimal sichern, erhalten Sie nur eine Kopie davon.
    • Ein Angreifer kann das System veranlassen, von ihm kontrollierte Dateien zu sichern.
    • Der Angreifer kennt den MD5-Hash einer Datei, die er aus der Sicherung entfernen möchte.
    • Der Angreifer kann dann die bekannten Schwachstellen von MD5 verwenden, um eine neue Datei zu erstellen, die denselben Hash wie die zu entfernende Datei hat. Wenn diese Datei gesichert wird, ersetzt sie die zu entfernende Datei, und die gesicherten Daten dieser Datei gehen verloren.
    • Dieses Sicherungssystem könnte ein wenig gestärkt (und effizienter) werden, indem Dateien, deren Hash zuvor angetroffen wurde, nicht ersetzt werden. Ein Angreifer könnte jedoch verhindern, dass eine Zieldatei mit einem bekannten Hash gesichert wird, indem er präventiv einen speziell erstellten Schwindel sichert Datei mit dem gleichen Hash.
    • Offensichtlich erfüllen die meisten Systeme, Backup und andere, nicht die Bedingungen, die erforderlich sind, damit dieser Angriff praktisch ist, aber ich wollte nur ein Beispiel für eine Situation geben, in der SHA-256 MD5 vorzuziehen wäre. Ob dies für das von Ihnen erstellte System der Fall ist, hängt nicht nur von den Eigenschaften von MD5 und SHA-256 ab.
  3. Ja, kryptografische Hashes wie die von MD5 und SHA-256 generierten sind eine Art Prüfsumme.

Viel Spaß beim Hashing!

Dharcourt
quelle