Ein Hash führt nicht zurück
Verschlüsselung gibt Ihnen den Text zurück, sobald Sie den Schlüssel haben. Ein Hash hat keinen solchen Schlüssel: Er presst jede noch so lange Eingabe in einen einzigen Wert fester Länge, und nichts darin führt zum Original zurück.
Hashes beantworten deshalb nur eine Frage: Sind diese beiden Dinge gleich? Stimmt die heruntergeladene Datei mit dem veröffentlichten Wert überein, stimmt das eben eingetippte Passwort mit dem gespeicherten. Wer etwas verbergen und später wieder lesen muss, braucht Verschlüsselung, keinen Hash.
Welcher Algorithmus
- MD5 — ein Entwurf von 1991. Zwei verschiedene Eingaben mit demselben Hash zu erzeugen dauert auf einem Notebook Sekunden. Er überlebt nur, weil Anbieter weiterhin MD5-Prüfsummen veröffentlichen und man dagegen prüfen können muss.
- SHA-1 — 2017 wurden zwei kollidierende PDFs veröffentlicht. Für Neues gibt es keinen Grund dafür.
- SHA-256 — der heutige Standard: Zertifikate, Signaturen und Blockchains sitzen hier.
- SHA-384 und SHA-512 — sie beruhen auf 64-Bit-Operationen und können auf einer 64-Bit-Maschine sogar schneller sein als SHA-256. Wählen Sie sie, wenn Sie einen längeren Wert brauchen.
Für eine Integritätsprüfung reicht SHA-256. Hat der Anbieter nur eine MD5-Summe veröffentlicht, vergleichen Sie damit, beurteilen Sie aber getrennt, ob der Download aus vertrauenswürdiger Quelle stammt.
Für Passwörter reicht das nicht
Ein Passwort als SHA-256 zu speichern ist besser als Klartext und trotzdem eine schlechte Idee. Hashfunktionen sind auf Geschwindigkeit gebaut, ein Angreifer probiert also Milliarden pro Sekunde, und jedes verbreitete Passwort steht längst in einer Tabelle.
Nehmen Sie eine bewusst langsame Funktion: bcrypt, scrypt oder Argon2. Sie lassen den Rechenaufwand hochdrehen und salzen jeden Nutzer automatisch verschieden. Schreiben Sie keine eigene, sondern greifen Sie zu dem, was Ihre Sprache mitbringt.
Gleiche Datei, anderer Wert
Dieses Werkzeug hasht die UTF-8-Bytes Ihrer Eingabe. Weicht das Ergebnis von einem Kommandozeilenwerkzeug ab, liegt der Unterschied fast immer im Unsichtbaren.
- Zeilenenden — das
\r\nvon Windows und das\nvon Unix sind verschiedene Bytes. - Ein abschließender Zeilenumbruch —
echohängt standardmäßig einen an. Versuchen Sieecho -noderprintf. - Eine BOM — manche Editoren setzen drei Bytes an den Dateianfang.