SHA - Secure Hash Algorithm (SHA-1 / SHA-2 / SHA-3)

Der Secure Hash Algorithm, kurz SHA, und alle seine Versionen, sind kryptografische Hash-Funktionen. Entwickelt wurde SHA vom US-Geheimdienst NSA im Auftrag der US-Standardisierungsbehöre NIST.
SHA wurde zusammen mit dem Signaturverfahren DSA im Jahr 1991 der Öffentlichkeit vorgestellt. Obwohl Entwicklungen der NSA immer mit Misstrauen gesehen werden, stellte sich SHA als gute kryptografische Hash-Funktion heraus.

SHA kommt in allen gängigen Webanwendungen und Netzwerk-Protokollen zum Einsatz. PGP, SSL, IPsec und S/MIME. Und natürlich bei verschiedenen Signaturverfahren. Zum Beispiel zum Signieren von Zertifikaten.

Das ursprüngliche SHA wird als SHA-1 bezeichnet, um es von seinen Nachfolgern SHA-2 und SHA-3 unterscheiden zu können. SHA-3 soll SHA-2 nicht ersetzen, sondern ist eine Alternative. Sollte SHA-2 irgendwann einmal gebrochen werden, kann man zu SHA-3 übergehen.

MD4 - Message Digest 4

MD4 wurde von RSA-Miterfinder Ron Rivest entwickelt. Die meisten kryptografischen Hash-Funktionen sind Weiterentwicklungen von MD4. Es hat einige Schwächen, weshalb es nicht allzu sicher ist und für kryptografische Anwendungen nicht mehr verwendet werden sollte.

MD5 - Message Digest 5

Aufgrund der Schwächen von MD4 hat Ron Rivest eine überarbeitete Version mit der Bezeichnung MD5 im Jahr 1991 veröffentlicht, wodurch es vorübergehend zur meistverwendeten kryptografischen Hash-Funktion wurde. Allerdings sollte man MD5 nicht mehr verwenden, weil es auch mit einem normalen PC möglich ist, Kollisionen innerhalb weniger Stunden zu berechnen. Aber, für nicht-kryptografische Anwendungen ist MD5 immer noch akzeptabel.

SHA-1 - Secure Hash Algorithm Version 1

SHA-1 ist eine Weiterentwicklung von MD4 und war in den 1990er Jahren die wichtigste kryptografische Hash-Funktion. Aus diesem Grund ist sie heute immer noch weit verbreitet. Obwohl SHA-1 seit 2004 nicht mehr als sicher gilt, ist es bei vielen verschlüsselten Verbindungen und Zertifikaten immer noch im Einsatz.
SHA-1 ist anfällig für Kollisionsangriffe. Das haben chinesische Kryptografen herausgefunden. Praktikabel sind diese Angriffe seit 2009, wenn auch sehr aufwendig und damit teuer, dass eigentlich nur staatlich finanzierte Angriffe durch Geheimdienste zu befürchten sind. Trotzdem oder gerade deshalb sollte man SHA-1 in Neuentwicklungen vermeiden.

Der Grund, warum die meisten Webseiten immer noch SHA-1 für die Signatur von SSL/TLS-Zertifikaten verwenden, liegt daran, dass die Webseiten-Betreiber ihre Zertifikaten nicht selbst erstellen, sondern von Zertifizierungsstellen, sogenannten Certificate Authorities (CAs), beziehen müssen. Nur deren Zertifikate sind in den gängigen Web-Browsern vorinstalliert und werden als vertrauenswürdig akzeptiert. Leider stellen diese CAs zum Großteil ihre Zertifikate immer noch mit Hilfe von SHA-1 aus.
Ein Webseiten-Betreiber könnte sich auch ein eigenes Zertifikat ausstellen, dass mit Hilfe einer anderen kryptografischen Hash-Funktion signiert wurde. Nur dann löst dieses Zertifikat eine Warnung im Browser der Besucher aus, das er vom kontaktierten Server geliefert bekommt. Um das zu vermeiden nutzen Webseiten-Betreiber Zertifikate von CAs, die mit Hilfe einer unsicheren kryptografischen Funktion signiert und dafür auch noch als vertrauenswürdig akzeptiert werden.

SHA-1 ist bei SSL-Zertifikaten besonders kritisch. Ein Angreifer könnte theoretisch falsche Serverzertifikate erstellen, die von den Browsern als gültig angesehen werden. Das erfordert aktuell zwar noch einen erheblichen Rechenaufwand, den bestenfalls Geheimdienste leisten können. Es ist allerdings nicht auszuschließen, dass nicht irgendwann auch Kriminelle diese Fähigkeit erlangen können.
Der Wechsel auf ein moderneres Hash-Verfahren wie SHA-2 und SHA-3 ist angebracht.

SHA-2 - Secure Hash Algorithm Version 2

Schon vor Bekanntwerden der Schwächen von SHA-1 hat die NIST im Jahr 2000 vier neue SHA-Versionen standardisiert: SHA-224, SHA-256, SHA-384 und SHA-512. Wobei die Zahl im Namen die Länge des Hash-Werts ausdrückt.
Die neuen Hash-Funktionen unterscheiden sich jedoch nicht nur in ihrer Länge von SHA-1, sondern auch durch eine Reihe funktionaler Unterschiede.
Die Algorithmen des SHA-2-Standards werden auf allen gängigen Betriebssystemen unterstützt und können deshalb SHA-1 ablösen.
Oftmals ist nur von SHA-256 und SHA-512 die Rede. Es gibt aber auch noch SHA-224 und SHA-384. Das liegt daran, weil es sich bei SHA-224 um den selben Ablauf, wie bei SHA-256 handelt, bei dessen Ausgabe am Ende 32 Bit abgeschnitten werden. Genauso bei SHA-384. Hierbei handelt es sich funktional um SHA-512, bei dessen Ausgabe am Ende 128 Bit abgeschnitten werden.

SHA-3 - Secure Hash Algorithm Version 3

SHA-3 basiert auf dem Hashing-Algorithmus Keccak und wurde von der NIST im Jahr 2012 als Nachfolger von SHA-2 bekanntgegeben. Allerdings hatten Krypto-Experten der NIST vorgeworfen, den Algorithmus im Rahmen von Performance-Optimierungen absichtlich geschwächt zu haben.
SHA-3 gibt es mit 224, 256, 384 und 512 Bit.
SHA-3 soll SHA-2 nicht ersetzen, sondern ist eine Alternative. Sollte SHA-2 irgendwann einmal gebrochen werden, kann man zu SHA-3 übergehen.