SHA256 vs SHA1
SHA1 und SHA256 sind beides kryptografische Hash-Funktionen aus der SHA-Familie (Secure Hash Algorithm), unterscheiden sich jedoch erheblich in Sicherheit und Ausgabegröße. Die Wahl der falschen Hash-Funktion für Ihre Anwendung kann schwerwiegende Sicherheitsfolgen haben, von geschwächten digitalen Signaturen bis hin zur vollständigen Kompromittierung von Passwortverifizierungssystemen. Dieser Leitfaden bietet einen gründlichen Vergleich, um Ihnen eine fundierte Entscheidung zu ermöglichen.
Eine kryptografische Hash-Funktion nimmt eine Eingabe beliebiger Größe und erzeugt eine Ausgabe fester Größe, die als Digest oder Hash-Wert bezeichnet wird. Die kritischen Eigenschaften einer sicheren Hash-Funktion umfassen Urbildresistenz (bei gegebenem Hash sollte es unpraktikabel sein, eine Eingabe zu finden, die ihn erzeugt), Zweiturbildresistenz (bei gegebener Eingabe sollte es unpraktikabel sein, eine andere Eingabe mit demselben Hash zu finden) und Kollisionsresistenz (es sollte unpraktikabel sein, zwei verschiedene Eingaben zu finden, die denselben Hash erzeugen). Sowohl SHA1 als auch SHA256 wurden entwickelt, um diese Eigenschaften zu bieten, aber SHA1s Kollisionsresistenz wurde in der Praxis gebrochen.
Wie Hash-Funktionen arbeiten
Sowohl SHA1 als auch SHA256 gehören zur Merkle-Damgard-Konstruktionsfamilie. Sie verarbeiten Eingabedaten in Blöcken fester Größe von 512 Bit. Die Eingabe wird zunächst aufgefüllt, um sicherzustellen, dass ihre Länge ein Vielfaches der Blockgröße ist. Die Auffüllung enthält die ursprüngliche Nachrichtenlänge, was bestimmte Arten von Angriffen verhindert. Jeder Block wird dann durch eine Kompressionsfunktion verarbeitet, die einen internen Zustand aktualisiert. Der endgültige Zustand nach der Verarbeitung aller Blöcke wird zur Hash-Ausgabe.
SHA1 verwendet 80 Kompressionsrunden mit 32-Bit-Wörtern und erzeugt eine 160-Bit-Ausgabe. Der Algorithmus verwendet vier Rundenkonstanten und zwanzig Rundenfunktionen, wobei jede Runde mit fünf 32-Bit-Arbeitsvariablen arbeitet. SHA256 verwendet 64 Kompressionsrunden, ebenfalls mit 32-Bit-Wörtern, erzeugt jedoch eine 256-Bit-Ausgabe unter Verwendung von acht Arbeitsvariablen und sechs logischen Funktionen. Die erhöhte Anzahl von Arbeitsvariablen und komplexeren Rundenfunktionen machen SHA256 wesentlich widerstandsfähiger gegen kryptanalytische Angriffe.
Hauptunterschiede
| Merkmal | SHA1 | SHA256 |
|---|---|---|
| Ausgabegröße | 160 Bit (40 Zeichen) | 256 Bit (64 Zeichen) |
| Sicherheit | Gebrochen (SHAttered-Angriff) | Sicher |
| Geschwindigkeit | Schneller | Langsamer |
| Runden | 80 | 64 |
| Blockgröße | 512 Bit | 512 Bit |
| Wortgröße | 32 Bit | 32 Bit |
| Empfohlen? | Nein | Ja |
Der kritischste Unterschied ist die Sicherheit. SHA1 gilt als kryptografisch gebrochen, da Forscher praktische Kollisionsangriffe demonstriert haben. SHA256 bleibt Stand 2026 sicher, ohne bekannte praktische Angriffe, die seine effektive Sicherheit unter sein 128-Bit-Sicherheitsniveau reduzieren. Ein Sicherheitsniveau von n Bit bedeutet, dass der beste bekannte Angriff etwa 2^n Operationen erfordert, um die Hash-Funktion zu brechen. Für SHA256 bedeutet dies 2^128 Operationen, was mit aktueller und absehbarer Technologie undurchführbar ist.
Der Unterschied in der Ausgabegröße ist ebenfalls praktisch bedeutsam. Eine 160-Bit-Ausgabe bedeutet, dass es nur 2^160 mögliche Hash-Werte gibt. Durch das Geburtstagsparadoxon kann eine Kollision in etwa 2^80 Operationen gefunden werden. Während 2^80 einst als undurchführbar galt, haben Fortschritte in der GPU-Berechnung und spezialisierter Hardware diesen Angriffsvektor für gut finanzierte Angreifer praktikabel gemacht. SHA256s 2^128 Kollisionsresistenz bleibt unerreichbar.
Vollständiger SHA-Familienvergleich
Die SHA-Familie hat sich über drei Jahrzehnte entwickelt, wobei jede Generation die Schwächen ihrer Vorgänger verbesserte.
| Algorithmus | Ausgabe | Sicherheitsniveau | Jahr | Status |
|---|---|---|---|---|
| SHA0 | 160 Bit | 80 Bit | 1993 | Gebrochen |
| SHA1 | 160 Bit | 80 Bit | 1995 | Veraltet |
| SHA224 | 224 Bit | 112 Bit | 2004 | Sicher |
| SHA256 | 256 Bit | 128 Bit | 2004 | Sicher |
| SHA384 | 384 Bit | 192 Bit | 2004 | Sicher |
| SHA512 | 512 Bit | 256 Bit | 2004 | Sicher |
| SHA3-256 | 256 Bit | 128 Bit | 2015 | Sicher |
SHA0 wurde kurz nach der Veröffentlichung aufgrund eines nicht offengelegten Fehlers zurückgezogen. SHA1 wurde als Korrektur für SHA0 entwickelt und diente fast zwei Jahrzehnte lang als Industriestandard. SHA224, SHA256, SHA384 und SHA512 sind gemeinsam als SHA-2 bekannt und wurden 2001 von NIST veröffentlicht (2004 standardisiert). SHA-3, veröffentlicht 2015, basiert auf der Keccak-Schwammkonstruktion und bietet eine Alternative zu SHA-2 mit grundlegend anderen Designprinzipien.
Bei der Wahl einer Hash-Funktion sollten Sie für die meisten Anwendungen standardmäßig SHA256 verwenden. SHA384 und SHA512 bieten höhere Sicherheitsniveaus, jedoch auf Kosten größerer Ausgaben und langsamerer Leistung. SHA3-256 ist eine ausgezeichnete Wahl, wenn Sie Ihre kryptografischen Abhängigkeiten von der SHA-2-Familie diversifizieren möchten.
Warum SHA1 ausgemustert wurde
Die Ausmusterung von SHA1 geschah nicht über Nacht. Kryptoanalytiker warnten bereits seit 2005 vor Schwächen in SHA1, als Forscher zeigten, dass die theoretische Kollisionsresistenz nur 2^69 Operationen betrug, statt der erwarteten 2^80. Im folgenden Jahrzehnt wurden diese Schätzungen mit Verbesserungen der kryptoanalytischen Techniken schrittweise reduziert.
Im Jahr 2017 demonstrierte Google den ersten praktischen SHA1-Kollisionsangriff (SHAttered). Sie erstellten zwei verschiedene PDF-Dateien mit demselben SHA1-Hash unter Verwendung von etwa 9 Trillionen (9.223.372.036.854.775.808) SHA1-Berechnungen. Dies erforderte etwa 6.500 Jahre CPU-Zeit, aber nur 110 GPU-Jahre. Der Angriff wurde mit Googles Cloud-Infrastruktur durchgeführt und kostete etwa 110.000 US-Dollar an Rechenzeit, was zeigt, dass SHA1-Kollisionen für gut finanzierte Organisationen erreichbar waren.
Der SHAttered-Angriff erzeugt speziell zwei kollidierende PDF-Dateien, indem PDF-Strukturen sorgfältig konstruiert werden, die große identische Blöcke ermöglichen, während sie sich in einer kleinen Anzahl von Bits unterscheiden, die denselben SHA1-Hash erzeugen. Die praktische Auswirkung dieses Angriffs umfasst die Möglichkeit, zwei Softwarepakete oder Dokumente mit unterschiedlichem Inhalt, aber identischen SHA1-Hashes zu erstellen. Eine Signatur auf dem einen könnte betrügerischerweise als für das andere geltend beansprucht werden.
Große Browser und Zertifizierungsstellen haben SHA1 seitdem als veraltet eingestuft. Ab 2017 zeigt Chrome eine Sicherheitswarnung für SHA1-Zertifikate an. Bis 2020 hatten alle großen Browser das Vertrauen in SHA1-basierte Zertifikate entzogen, wodurch die Verwendung von SHA1 im Web-PKI-Ökosystem effektiv beendet wurde.
Leistungsvergleich
SHA1 ist aus mehreren Gründen schneller als SHA256. Erstens verarbeitet SHA1 die Eingabe in 80 Runden pro Block, aber jede Runde ist einfacher als SHA256s 64 Runden. SHA256 verwendet komplexere logische Funktionen und einen größeren internen Zustand, was mehr Berechnung pro Runde erfordert. Zweitens passt SHA1s 160-Bit-interner Zustand in weniger Register als SHA256s 256-Bit-Zustand, was eine effizientere Implementierung auf 32-Bit-Prozessoren ermöglicht.
In der Praxis ist SHA256 in Softwareimplementierungen etwa 25 bis 40 Prozent langsamer als SHA1. Auf moderner Hardware mit Hardwarebeschleunigung (SHA-Erweiterungen in x86-Prozessoren) ist die SHA256-Leistung deutlich besser. Intel- und AMD-Prozessoren mit SHA-NI-Erweiterungen können SHA256 mit Geschwindigkeiten von über 2 GB/s berechnen, wodurch der Abstand zu SHA1 verringert wird.
Für die meisten Anwendungen ist der Leistungsunterschied zwischen SHA1 und SHA256 vernachlässigbar. Die für Menschen wahrnehmbare Verzögerung beim Hashen einer Datei oder Verifizieren einer Signatur wird von E/A-Operationen dominiert, nicht von der Hash-Berechnung. Das einzige Szenario, in dem SHA1s Geschwindigkeitsvorteil zählt, sind Hochdurchsatzsysteme, die Milliarden von Hashes berechnen, wie Blockchain-Mining oder massives Passwort-Cracking, beides keine legitimen Anwendungsfälle für SHA1 in neuen Entwicklungen.
Wann SHA256 verwendet werden sollte
| Anwendungsfall | Empfohlener Hash |
|---|---|
| SSL/TLS-Zertifikate | SHA256 |
| Datei-Integritätsprüfung | SHA256 oder SHA512 |
| Passwort-Hashing (mit Salt) | bcrypt oder argon2 |
| Digitale Signaturen | SHA256 |
| Blockchain | SHA256 (Bitcoin) |
| Codesignierung | SHA256 |
Für SSL/TLS-Zertifikate ist SHA256 die Mindestanforderung, seitdem große Browser SHA1 im Jahr 2017 als veraltet eingestuft haben. Zertifizierungsstellen dürfen keine SHA1-signierten Zertifikate mehr für das öffentliche Vertrauen ausstellen. Die Datei-Integritätsprüfung, wie Prüfsummendateien, die mit Softwaredownloads verteilt werden, sollte SHA256 verwenden. Viele Softwarevertriebsplattformen sind von SHA1- auf SHA256-Prüfsummen migriert, obwohl Sie bei älteren Paketen möglicherweise noch SHA1-Prüfsummen antreffen.
Passwort-Hashing erfordert besondere Aufmerksamkeit. Obwohl SHA256 eine sichere kryptografische Hash-Funktion ist, ist es nicht für die Passwortspeicherung allein geeignet. SHA256 ist darauf ausgelegt, schnell zu sein, was genau das ist, was Angreifer wollen, wenn sie gestohlene Passwort-Hashes knacken wollen. Für die Passwortspeicherung verwenden Sie eine spezielle Passwort-Hash-Funktion wie bcrypt, scrypt oder argon2. Diese Funktionen integrieren Salting und sind absichtlich langsam und speicherintensiv, um Brute-Force-Angriffen zu widerstehen.
Beispiele aus der Praxis für Migrationen
Git, das weit verbreitete Versionskontrollsystem, migrierte im Rahmen seines Übergangs zur SHA256-basierten Objektspeicherung von SHA1 zu SHA256. Ab Git 2.29 unterstützt Git SHA256-Repositorys neben traditionellen SHA1-Repositorys. Der Übergang erforderte erheblichen Aufwand, da Gits Datenmodell stark auf Hash-Werte angewiesen ist, um Objekte zu identifizieren und die Repository-Integrität zu überprüfen.
Die Linux-Kernel-Community begann 2011 damit, SHA256-Prüfsummen für Kernel-Release-Tarballs zu akzeptieren, um die vorhandenen SHA1-Prüfsummen zu ergänzen. Bis 2017 stellte kernel.org die Erzeugung von SHA1-Prüfsummen für neue Veröffentlichungen vollständig ein und verwendet ausschließlich SHA256 und SHA512.
Verwenden Sie das Tool SHA256 Generator, um SHA256-Hashes online zu generieren.