Datei-Hashes: MD5, SHA-1 und SHA-256 zum Prüfen von Downloads
Ein Datei-Hash ist ein Wert fester Länge, der aus dem Inhalt einer Datei berechnet wird und häufig verwendet wird, um eine heruntergeladene Datei mit einer Referenzkopie zu vergleichen. Dieselben Bytes und derselbe Algorithmus erzeugen dasselbe Ergebnis, aber theoretisch können verschiedene Dateien denselben Hash teilen. Für die routinemäßige Dateiverifizierung wird SHA-256 bevorzugt, wenn der Herausgeber ihn bereitstellt, und es sollte überprüft werden, woher der Referenzwert stammt.
Was stellt ein Datei-Hash dar?
Eine Hashfunktion berechnet eine Zusammenfassung, die als Hashwert oder Digest bezeichnet wird. MD5, SHA-1 und SHA-256 haben jeweils eine feste Ausgabelänge: Ein kleines Dokument und ein großes Installationsprogramm erzeugen bei Verwendung desselben Algorithmus gleich lange Digests. Ein Digest ist keine komprimierte Kopie, aus der Sie die Datei rekonstruieren können. NISTs Übersicht über Hashfunktionen erklärt diese Eigenschaften und die relevanten Sicherheitsanforderungen.
Gewöhnliche Dateihash-Programme lesen die Bytes innerhalb einer Datei, anstatt ihren Namen oder Speicherort zu berücksichtigen. Wenn man eine Datei umbenennt, ohne ihren Inhalt zu ändern, bleibt der Hash unverändert. Umgekehrt können zwei Dokumente, die denselben Text anzeigen, unterschiedliche Bytes enthalten, aufgrund von Zeilenenden, Zeichencodierung oder Metadaten, die in der Datei gespeichert sind.
Ein Hash kann als Fingerabdruck beschrieben werden, aber er ist kein absolut eindeutiger Bezeichner. Eine Kollision tritt auf, wenn unterschiedliche Eingaben denselben Digest erzeugen. Ein sicherer kryptografischer Hash ist darauf ausgelegt, das Auffinden solcher Eingaben mit realistischen Rechenmitteln unpraktikabel zu machen. MD5 und SHA-1 erfüllen nicht mehr die Sicherheitsanforderungen für kollisionsresistente Anwendungen.
MD5 vs SHA-1 vs SHA-256
MD5 steht für Message-Digest Algorithm 5; SHA steht für Secure Hash Algorithm. SHA-256 gehört zur SHA-2 Familie und erzeugt 256 Bits. Werkzeuge zeigen das Ergebnis üblicherweise als hexadezimale Zeichenkette an. Jedes hexadezimale Zeichen repräsentiert vier Bits, was zu folgenden Längen führt:
| Algorithmus | Digest-Größe | Hexadezimale Länge | Auswahl zur Dateiverifizierung |
|---|---|---|---|
| MD5 | 128 Bits · 16 Bytes | 32 Zeichen | Kann benötigt werden, um eine alte Prüfsumme zu vergleichen, sollte aber nicht zum Schutz gegen böswillige Manipulationen verwendet werden. |
| SHA-1 | 160 Bit · 20 Bytes | 40 Zeichen | Kann mit älteren Referenzen verglichen werden; sollte für neue Sicherheitsanwendungen vermieden werden. |
| SHA-256 | 256 Bit · 32 Bytes | 64 Zeichen | Eine praktische Wahl für routinemäßige Integritätsprüfungen beim Herunterladen, wenn der Herausgeber einen SHA-256-Wert bereitstellt. |
Die MD5-Größe und Grenzen der Kollisionsresistenz werden in RFC 6151s MD5-Sicherheitsüberlegungen diskutiert. Die SHA-Spezifikationen erscheinen in NISTs Secure Hash Standard. Die Erkennung eines versehentlichen Übertragungsfehlers und die Verteidigung gegen einen Angreifer, der eine Datei ändern kann, sind unterschiedliche Anforderungen.
Vergleichen Sie immer Hashes vom gleichen Algorithmus. Ein lokal berechneter SHA-256-Wert kann nicht gegen einen veröffentlichten MD5-Wert überprüft werden. Außerdem impliziert eine 256-Bit-Ausgabe keine 256-Bit-Stärke gegen jede Art von Angriff. Siehe NISTs Richtlinien zu Algorithmen und Sicherheitsstärke für SHA-1-Beschränkungen und die Unterschiede zwischen Angriffstypen.
Was passiert, wenn sich ein Zeichen ändert?
Dieses Python-Beispiel berechnet SHA-256 für die ASCII-Bytes abc und abC. Nur das letzte Zeichen ändert sich, und keine der Eingaben enthält ein abschließendes Newline-Zeichen. Die angezeigte Ausgabe wurde mit Python 3.12 überprüft; beide Digests enthalten 64 hexadezimale Zeichen.
import hashlib
for data in (b"abc", b"abC"):
print(data.decode("ascii") + ": " + hashlib.sha256(data).hexdigest())
Ausgabe:
abc: ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad
abC: 0a2432a1e349d8fdb9bfca91bba9e9f2836990fe937193d84deef26c6f3b8f76
Diese ähnlich aussehenden Eingaben erzeugen sehr unterschiedliche Digests. Das Beispiel beweist nicht, dass jedes Paar unterschiedlicher Eingaben unterschiedliche Hashes haben muss. Deterministische Ausgabe für die gleiche Eingabe, mögliche Kollisionen und Resistenz gegen gezielte Angriffe sind separate Eigenschaften.
Wie man eine heruntergeladene Datei überprüft
Die Integritätsprüfung überprüft, ob Daten von einer Referenz abweichen. Das Berechnen eines neuen Digests allein ist keine Verifizierung: Sie benötigen einen vertrauenswürdigen Referenz-Hash, um ihn zu vergleichen.
- Holen Sie sich den Referenz-Hash von der offiziellen Download-Seite des Herausgebers oder einem anderen vertrauenswürdigen Vertriebsweg.
- Bestätigen Sie, dass das Betriebssystem, die CPU-Architektur, die Version und der Dateiname mit dem Download übereinstimmen. Prüfen Sie, welchen Algorithmus die Referenz verwendet.
- Warten Sie, bis der Download abgeschlossen ist, und berechnen Sie dann dessen Hash mit demselben Algorithmus. Ändern oder überschreiben Sie die Datei nicht, während sie gelesen wird.
- Für SHA-256 vergleichen Sie alle 64 hexadezimalen Zeichen, anstatt nur den Anfang. Groß- und Kleinbuchstaben der Hexadezimalzahlen repräsentieren die gleichen Werte.
- Wenn die Werte unterschiedlich sind, führen Sie die Datei nicht aus und installieren Sie sie nicht. Überprüfen Sie das Vergleichsziel erneut, laden Sie es dann erneut aus dem offiziellen Kanal herunter und wiederholen Sie die Überprüfung.
Wenn ein Angreifer sowohl eine Datei als auch ihren Referenz-Hash ersetzen kann, bestätigt ein übereinstimmender Wert nicht, wer die Datei bereitgestellt hat. Eine Übereinstimmung ist ein Vergleich mit den Referenzdaten, kein Beweis dafür, dass eine Datei frei von Malware ist. Wenn signierte Prüfsummen oder digitale Signaturen bereitgestellt werden, befolgen Sie die Anweisungen des Herausgebers und überprüfen Sie diese mit einem vertrauenswürdigen öffentlichen Schlüssel.
SHA-256-Befehle für Windows, Linux und macOS
example.iso unten ist ein illustrativer Dateiname. Ersetzen Sie ihn und den Pfad durch Ihren tatsächlichen Download und setzen Sie Anführungszeichen um Pfade, die Leerzeichen enthalten. Diese Befehle lesen die Datei, um ihre Prüfsumme zu berechnen; sie ändern ihren Inhalt nicht.
Windows: Get-FileHash in PowerShell
Öffnen Sie PowerShell über das Startmenü und führen Sie den folgenden Befehl aus. -LiteralPath behandelt den Pfad wörtlich, anstatt Platzhalterzeichen zu interpretieren. -Algorithm SHA256 wählt den Algorithmus explizit aus.
Get-FileHash -LiteralPath 'C:\Downloads\example.iso' -Algorithm SHA256 | Format-List
Überprüfen Sie die Felder Algorithm, Hash und Path. SHA-256 ist der Standard, aber das Angeben macht den Vergleich klarer. Die Dokumentation von Microsoft zu Get-FileHash beschreibt die unterstützten Algorithmen und Ausgaben. Wenn die Datei nicht gefunden werden kann, überprüfen Sie ihren tatsächlichen Pfad und ihre Erweiterung im Datei-Explorer.
Linux: sha256sum
In einer Umgebung mit installierten GNU Coreutils sha256sum öffnen Sie ein Terminal und führen Sie diesen Befehl aus. Die übliche Ausgabe enthält die Prüfsumme gefolgt vom Dateinamen.
sha256sum "/home/user/Downloads/example.iso"
Wenn der Herausgeber eine SHA256SUMS-Datei im GNU-Format bereitstellt, legen Sie sie zusammen mit den zu überprüfenden Dateien ab, öffnen Sie ein Terminal in diesem Ordner und überprüfen Sie die Liste mit dem untenstehenden Befehl. Die in der Liste genannten Pfade müssen existieren. Eine vollständige Liste kann fehlende Dateien melden, wenn Sie nur einige ihrer Einträge heruntergeladen haben.
sha256sum --check SHA256SUMS
Übereinstimmende Einträge werden als OK gemeldet; Abweichungen werden als Fehler gemeldet. Die Prüfsummenliste selbst muss ebenfalls aus einer vertrauenswürdigen Quelle stammen. Konsultieren Sie das GNU SHA-2-Dienstprogramme-Handbuch für den Befehl und die Überprüfungsoptionen. Wenn der Befehl fehlt, prüfen Sie, ob Coreutils für Ihre Distribution installiert ist.
macOS: shasum
Wenn shasum in Ihrem Terminal verfügbar ist, wählen Sie explizit SHA-256 mit -a 256 aus. Ohne diese Option verwendet shasum standardmäßig SHA-1, was zu einer Algorithmusabweichung führen kann.
shasum -a 256 "/Users/user/Downloads/example.iso"
Für eine kompatible Prüfsummenliste verwenden Sie shasum -a 256 -c SHA256SUMS. Die shasum-Dokumentation des Maintainers erklärt die Auswahl des Algorithmus und -c. Diese macOS-Anweisungen basieren auf der Dokumentation des Werkzeugs und nicht auf einer Ausführung auf macOS; die untenstehende Python-Methode ist eine Alternative, wenn das Werkzeug nicht verfügbar ist.
SHA-256 einer großen Datei mit Python berechnen
Mit installiertem Python 3 können Sie das Standardbibliotheksmodul hashlib verwenden. Speichern Sie diesen Code als hash-file.py. Es öffnet die Datei im Binärmodus, rb, und liest jeweils ein Mebibyte (MiB), anstatt die gesamte Datei in den Speicher zu laden. Die Syntax für Zuweisungsausdrücke erfordert Python 3.8 oder höher.
import hashlib
import sys
if len(sys.argv) != 2:
raise SystemExit("Usage: python hash-file.py FILE")
digest = hashlib.sha256()
with open(sys.argv[1], "rb") as file:
while chunk := file.read(1024 * 1024):
digest.update(chunk)
print(digest.hexdigest())
Über den Ordner des Skripts übergeben Sie den Pfad Ihrer tatsächlichen Datei wie folgt. Wenn Ihr Python-3-Befehl python3 oder py ist, verwenden Sie diesen Befehl anstelle von python.
python hash-file.py "example.iso"
Die Ausgabe ist ein hexadezimaler SHA-256-Digest mit 64 Zeichen. Dieselben Bytes ergeben dasselbe Ergebnis wie in PowerShell und anderen Werkzeugen, auch wenn sich Groß- und Kleinschreibung unterscheiden können. Die offizielle Dokumentation zu Python hashlib erklärt update() und hexdigest(). Kleine, leere und über mehrere Leseblöcke verarbeitete Dateien wurden unter Windows mit Python 3.12.14 und PowerShell 7.6.5 geprüft; die Ergebnisse stimmten überein.
Was zu überprüfen ist, wenn Hashes nicht übereinstimmen
- Unterschiedliche Release-Dateien: Prüfen Sie auf x64 versus ARM64, Installer versus Archive oder unterschiedliche Versionen.
- Unterschiedliche Algorithmen: MD5, SHA-1 und SHA-256 erzeugen unterschiedliche Digests. Überprüfen Sie die Algorithmenamen erneut.
- Unvollständige Downloads: Stellen Sie sicher, dass der Download abgeschlossen ist und das Download-Tool keine Fehler gemeldet hat.
- Extraktion oder Konvertierung: Der Referenz-Hash eines Archivs gilt nicht für eine daraus extrahierte Datei. Das Speichern in einem Editor, Ändern von Zeilenenden und erneutes Komprimieren von Bildern können die Bytes verändern.
- Pfad- oder Kopierfehler: Überprüfen Sie, welche Datei tatsächlich vom Befehl gelesen wurde und den gesamten Referenzwert. Vermeiden Sie einen abgeschnittenen Digest oder einen, der von einer anderen Datei kopiert wurde.
Ersetzen Sie einen unerklärten Referenzwert nicht durch Ihren eigenen berechneten Wert, um eine Übereinstimmung zu erzwingen. Bestätigen Sie zuerst den Distributionskanal und das Ziel. Wenn ein frischer Download immer noch abweicht, prüfen Sie die Anweisungen des Herausgebers oder ob die Veröffentlichung korrigiert wurde.
Was Hashes können und nicht können
| Verwendung | Rolle des Hashings | Zusätzliche Anforderungen |
|---|---|---|
| Dateiintegrität | Vergleichen Sie aktuelle Datei-Inhalte mit einem Referenz-Digest. | Die Referenzquelle und der Algorithmus müssen geeignet sein. |
| Duplikaterkennung | Gruppieren Sie Dateien mit übereinstimmenden Hashes als Duplikatkandidaten. | Berücksichtigen Sie Kollisionen und vergleichen Sie Bytes, wenn exakte Gleichheit wesentlich ist. |
| Digitale Signaturen | Ein Signaturschema kann einen Digest der Daten verwenden. | Allein das Berechnen eines Hashs erzeugt keine Signatur und authentifiziert nicht den Autor. |
| Passwortspeicherung | Die Passwortüberprüfung verwendet ebenfalls hashbasierte Mechanismen. | Verwenden Sie eine dedizierte Passwortspeichermethode anstelle des einfachen Datei-Hashings mit SHA-256. |
Hashing ist keine Verschlüsselung. Verschlüsselung soll die Wiederherstellung des Klartexts mit dem entsprechenden Schlüssel ermöglichen; ein Hash ist kein Format zur Rekonstruktion seines Eingabewerts. Kurze oder vorhersehbare Eingaben können jedoch erraten und ihre Hashes verglichen werden, daher garantiert das bloße Hashen von etwas keine Geheimhaltung.
Für Passwörter wählen Sie eine vertrauenswürdige Implementierung eines speziellen Passwort-Hashing-Schemas wie Argon2id, mit angemessenen Kosten und einem einzigartigen Salt, anstelle von einfachem MD5, SHA-1 oder SHA-256. Ein Salt ist ein pro Passwort verwendeter Wert, der vorab berechnete Rateangriffe weniger nützlich macht. Das OWASP Password Storage Cheat Sheet erklärt, warum Passwortspeicherung und Datei-Hashing unterschiedliche Gestaltungen benötigen. Für Download-Checks sind die wesentlichen Schritte die Berechnung von SHA-256, das Einholen einer vertrauenswürdigen Referenz und der Vergleich des vollständigen Digests.




