Hashfunktionen

6 Kernkonzepte
Die wichtigsten Hashfunktionen und ihre Anwendungen: SHA-1 · SHA-2 · SHA-3 · MD5 · HMAC · Password Hashing Hashfunktionen erzeugen aus beliebigen Daten einen eindeutigen Fingerabdruck fester Länge. Sie sind unverzichtbar für Integritätsprüfungen, digitale Signaturen und Passwortspeicherung.

SHA-1 – Secure Hash Algorithm 1

SHA-1 · 160 Bit
// SHA-1 Hash (160 Bit / 40 Hex-Zeichen) da39a3ee5e6b4b0d3255bfef95601890afd80709 // Leerer String

SHA-1 erzeugt einen 160-Bit-Hash. Er galt lange als sicher, wurde aber seit 2017 praktisch gebrochen (SHAttered-Angriff). Heute sollte SHA-1 nicht mehr verwendet werden.

Eigenschaften

Merkmal Wert
Hash-Länge 160 Bit (40 Hex-Zeichen)
Blockgröße 512 Bit
Status ❌ Unsicher (gebrochen)
Anwendung Veraltet, nicht mehr empfehlenswert
Beispiele (OpenSSL)
# SHA-1 Hash einer Datei
openssl dgst -sha1 datei.txt
# SHA-1 eines Strings
echo -n "Hallo Welt" | openssl dgst -sha1
# Linux: sha1sum
sha1sum datei.txt
⚠️ Warnung: SHA-1 ist unsicher und sollte nicht mehr für sicherheitskritische Anwendungen verwendet werden. Verwenden Sie stattdessen SHA-256 oder SHA-3.

SHA-2 – Secure Hash Algorithm 2

SHA-224 · SHA-256 · SHA-384 · SHA-512
// SHA-256 Hash (256 Bit / 64 Hex-Zeichen) e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

SHA-2 ist die aktuelle Standard-Hashfamilie von NIST. Sie umfasst mehrere Varianten mit unterschiedlicher Hash-Länge. SHA-256 und SHA-512 sind die am häufigsten verwendeten.

SHA-2 Varianten

Variante Hash-Länge Anwendung
SHA-224 224 Bit Selten, kompatibel mit SHA-1
SHA-256 256 Bit Standard, weit verbreitet
SHA-384 384 Bit Für höhere Sicherheitsanforderungen
SHA-512 512 Bit Höchste Sicherheit, langsam aber sicher
Beispiele (OpenSSL)
# SHA-256 Hash
openssl dgst -sha256 datei.txt
# SHA-512 Hash
openssl dgst -sha512 datei.txt
# Linux: sha256sum / sha512sum
sha256sum datei.txt
sha512sum datei.txt
# Python (hashlib)
import hashlib
hashlib.sha256(b"Hallo Welt").hexdigest()
Tipp: SHA-256 ist der empfohlene Standard für die meisten Anwendungen. Für höchste Sicherheitsanforderungen verwenden Sie SHA-512.

SHA-3 – Keccak-basierte Hashfunktion

SHA3-224 · SHA3-256 · SHA3-384 · SHA3-512
// SHA-3 basiert auf Keccak (Sponge-Konstruktion) SHA3-256 // Alternative zu SHA-256

SHA-3 (Keccak) ist der neueste NIST-Standard. Er basiert auf einer völlig anderen Konstruktion als SHA-2 und bietet zusätzliche Sicherheit gegen bestimmte Angriffe.

SHA-3 Varianten

Variante Hash-Länge Besonderheit
SHA3-224 224 Bit Entspricht SHA-224
SHA3-256 256 Bit Alternative zu SHA-256
SHA3-384 384 Bit Entspricht SHA-384
SHA3-512 512 Bit Alternative zu SHA-512
Beispiele (OpenSSL)
# SHA3-256 Hash (OpenSSL 1.1.1+)
openssl dgst -sha3-256 datei.txt
# SHA3-512 Hash
openssl dgst -sha3-512 datei.txt
# Python (hashlib)
import hashlib
hashlib.sha3_256(b"Hallo Welt").hexdigest()
Tipp: SHA-3 ist eine gute Wahl für neue Projekte, da er auf einer anderen mathematischen Basis als SHA-2 basiert. SHA-256 und SHA-512 bleiben aber ebenfalls sicher.

MD5 – Message Digest Algorithm 5

MD5 · 128 Bit
// MD5 Hash (128 Bit / 32 Hex-Zeichen) d41d8cd98f00b204e9800998ecf8427e // Leerer String

MD5 erzeugt einen 128-Bit-Hash. Er ist kryptografisch gebrochen (Kollisionen sind praktisch möglich) und sollte nicht für Sicherheitsanwendungen verwendet werden.

Eigenschaften

Merkmal Wert
Hash-Länge 128 Bit (32 Hex-Zeichen)
Blockgröße 512 Bit
Status ❌ Unsicher (gebrochen)
Anwendung Nur für nicht-sicherheitskritische Checksummen
Beispiele
# OpenSSL MD5
openssl dgst -md5 datei.txt
# Linux md5sum
md5sum datei.txt
# Python (hashlib)
import hashlib
hashlib.md5(b"Hallo Welt").hexdigest()
⚠️ Warnung: MD5 ist unsicher und sollte für kryptografische Anwendungen nicht mehr verwendet werden. Verwenden Sie SHA-256 oder SHA-3.

HMAC – Hash-based Message Authentication Code

HMAC-SHA256 · HMAC-SHA512
// HMAC mit SHA-256 HMAC-SHA256(key, message)

HMAC (Hash-based Message Authentication Code) verwendet eine Hashfunktion in Kombination mit einem geheimen Schlüssel zur Authentifizierung von Nachrichten. Er gewährleistet Integrität und Authentizität.

HMAC-Varianten

Variante Hash-Basis Anwendung
HMAC-SHA256 SHA-256 Standard, weit verbreitet
HMAC-SHA512 SHA-512 Für höhere Sicherheitsanforderungen
HMAC-SHA1 SHA-1 Veraltet, nicht mehr empfehlenswert
Beispiele (OpenSSL)
# HMAC-SHA256 mit Schlüssel (Hex)
echo -n "Nachricht" | openssl dgst -sha256 -hmac "meinSchlüssel" -hex
# HMAC-SHA512 mit Schlüssel
echo -n "Nachricht" | openssl dgst -sha512 -hmac "meinSchlüssel" -hex
# Python (hmac)
import hmac, hashlib
hmac.new(b"key", b"message", hashlib.sha256).hexdigest()
Tipp: HMAC wird häufig in API-Authentifizierung, JWT und sicheren Nachrichtenprotokollen verwendet. Verwenden Sie HMAC-SHA256 als Standard.

Password Hashing – Passwörter sicher speichern

bcrypt · Argon2 · PBKDF2 · scrypt
// Spezielle Hashfunktionen für Passwörter bcrypt // Mit Salt und Cost-Faktor Argon2 // Gewinner des Password Hashing Competition PBKDF2 // Iterationsbasierter Schlüsselableitungsalgorithmus

Password Hashing ist die sichere Speicherung von Passwörtern. Normale Hashfunktionen (wie SHA-256) sind dafür ungeeignet, da sie zu schnell sind. Spezielle Algorithmen sind iterativ und verwenden Salts.

Password Hashing im Vergleich

Algorithmus Besonderheit Empfehlung
Argon2 Speicherhart, Sieger der PHC Best Choice (modern)
bcrypt Cost-Faktor, weit verbreitet Sehr gut, etabliert
PBKDF2 Iterationsbasiert Akzeptabel, aber nicht speicherhart
scrypt Speicherhart, komplex Gut, aber weniger verbreitet
Beispiele
# bcrypt (Python)
import bcrypt
hashed = bcrypt.hashpw(b"password", bcrypt.gensalt(12))
# Argon2 (Python - argon2-cffi)
from argon2 import PasswordHasher
ph = PasswordHasher()
hash = ph.hash("meinPasswort")
# PBKDF2 (Python - hashlib)
import hashlib
hashlib.pbkdf2_hmac("sha256", b"password", b"salt", 100000)
# OpenSSL PBKDF2
openssl kdf -keylen 32 -kdfopt digest:sha256 -kdfopt iter:100000 -kdfopt salt:salt PBKDF2 "password"
Tipp: Verwenden Sie Argon2 für neue Projekte (Sieger der Password Hashing Competition) oder bcrypt für etablierte Systeme. Niemals MD5 oder SHA-* für Passwörter ohne Salt und Iterationen.

Hashfunktionen im Überblick

SHA-1 160 Bit
❌ Unsicher (gebrochen)
SHA-256 256 Bit
✅ Standard, sicher
SHA-3 256-512 Bit
✅ Modern, alternative Basis
MD5 128 Bit
❌ Unsicher (gebrochen)
HMAC Authentisierungscode
Mit Schlüssel
bcrypt Password Hashing
Mit Salt & Cost

Quick Summary

SHA-1
❌ Unsicher
SHA-256
✅ Standard
SHA-3
✅ Modern
MD5
❌ Unsicher
HMAC
Authentisierung
bcrypt
Passwörter
openssl dgst -sha256 datei.txt · echo -n "msg" | openssl dgst -sha256 -hmac "key" -hex