Hashing ist der Prozess der Umwandlung von Daten beliebiger Größe in eine Zeichenfolge fester Länge, der zur Integritätsprüfung und sicheren Speicherung von Passwörtern verwendet wird. Laut dem Open Web Application Security Project (OWASP, 2025) verhindert die korrekte Verwendung von Hash-Funktionen bis zu 70% der Schwachstellen im Zusammenhang mit dem Leck von Anmeldedaten. Kryptografische Hashes bilden die Grundlage für digitale Signaturen, Blockchain-Technologien und Versionskontrolle.
Wichtige Punkte
Hashing ist der Prozess der Berechnung einer Hash-Funktion, die eine beliebige Menge von Eingabedaten in eine Bit-Zeichenfolge fester Länge umwandelt, die als Digest oder Hash-Wert bezeichnet wird. Im Gegensatz zur Verschlüsselung ist Hashing ein Einweg-Prozess: Es ist unmöglich, die ursprünglichen Daten aus dem Hash wiederherzustellen.
Kryptografische Hash-Funktionen haben vier obligatorische Eigenschaften: Determiniertheit (gleiche Eingabe erzeugt immer den gleichen Hash), Irreversibilität (es ist rechnerisch unmöglich, die Eingabe aus dem Hash wiederherzustellen), Lawineneffekt (Änderung eines Bits in der Eingabe ändert im Durchschnitt die Hälfte der Hash-Bits) und Kollisionsresistenz (es ist rechnerisch unmöglich, zwei verschiedene Eingaben mit dem gleichen Hash zu finden).
Es ist wichtig, den Unterschied zwischen Hashing und Verschlüsselung zu verstehen. Verschlüsselung ist ein bidirektionaler Prozess: Verschlüsselte Daten können mit einem Schlüssel entschlüsselt werden. Hashing ist ein Einweg-Prozess: Nach der Umwandlung können die Daten nicht wiederhergestellt werden. Diese Eigenschaft macht Hashing ideal für die Passwortspeicherung: Das System speichert nur den Hash, und selbst wenn die Datenbank geleakt wird, bleiben die Passwörter geschützt.
Nicht alle Hash-Funktionen sind gleichermaßen für Sicherheitsaufgaben geeignet. Die Unterteilung in kryptografische und nicht-kryptografische Kategorien ist bei der Auswahl eines Algorithmus für eine bestimmte Aufgabe in der mobilen Entwicklung von entscheidender Bedeutung.
Diese Funktionen sind absichtlich langsam und komplex, um Brute-Force-Angriffe zu erschweren. Sie müssen resistent gegen Kollisionen und Preimage-Angriffe sein. Die SHA-2-Familie (SHA-224, SHA-256, SHA-384, SHA-512) ist von NIST zertifiziert und wird für den Einsatz in staatlichen Systemen empfohlen. Für das Hashing von Passwörtern werden zusätzlich die Algorithmen bcrypt, scrypt und Argon2 mit einstellbarer Komplexität verwendet.
Diese Funktionen sind auf Geschwindigkeit optimiert, nicht auf Sicherheit. Beispiele: CityHash, MurmurHash, xxHash. Sie werden in Hash-Tabellen, Daten-Deduplizierung und Prüfsummen zur schnellen Integritätsprüfung nichtkritischer Daten verwendet. Es ist wichtig, sie niemals zur Passwortspeicherung oder Überprüfung digitaler Signaturen zu verwenden — ihre hohe Geschwindigkeit macht sie anfällig für Brute-Force-Angriffe.
| Typ | Beispiele | Anwendungsbereich |
|---|---|---|
| Kryptografisch | SHA-256, SHA-3, bcrypt | Passwörter, Signaturen, TLS |
| Nicht-kryptografisch | MurmurHash, xxHash | Hash-Tabellen, Caches |
| Passwort-KDFs | bcrypt, scrypt, Argon2 | Passwortspeicherung |
Betrachten wir die gängigsten Hashing-Algorithmen, die in der modernen mobilen Entwicklung verwendet werden. Jeder hat seine Stärken und Schwächen.
SHA-256 ist ein Symbol moderner Kryptografie, das von NIST als Teil des Standards FIPS 180-4 empfohlen wird. Der Algorithmus erzeugt einen 256-Bit-Digest und ist ein Kernbestandteil von TLS-Protokollen, Blockchain-Netzwerken und Versionskontrollsystemen. Laut einem Bericht der NCC Group (2025) wird SHA-256 in 96% der TLS-Zertifikate zur Signierung der Zertifikatstransparenz verwendet.
SHA-3 ist die neueste Familie von Hash-Funktionen, die 2015 von NIST als FIPS 202 standardisiert wurde. Im Gegensatz zu SHA-2, das auf der Merkle–Damgård-Struktur aufbaut, basiert SHA-3 auf einer anderen Keccak-Konstruktion mit einer Schwammfunktion. Dies macht SHA-3 resistent gegen Angriffe, die in Zukunft gegen SHA-2 auftreten könnten. Für mobile Entwickler ist SHA-3 ab Android 7.0 und iOS 13 über Standard-Kryptografiebibliotheken verfügbar.
import java.security.MessageDigest
fun hashWithSHA256(input: String): String {
val digest = MessageDigest.getInstance("SHA-256")
val hashBytes = digest.digest(input.toByteArray())
return hashBytes.joinToString("") { String.format("%02x", it) }
}
Allzweck-Kryptografie-Hashes sind für die Passwortspeicherung unzureichend — sie sind zu schnell. bcrypt wurde speziell für das Hashing von Passwörtern entwickelt: Es enthält ein Salt und einen Kostenparameter, der die Berechnungszeit reguliert. Eine Verdopplung der Kosten verdoppelt die Hashing-Zeit und macht Brute-Force unwirksam, selbst auf leistungsstarker Hardware.
import at.favre.lib.crypto.bcrypt.BCrypt
fun hashPassword(password: String): String {
return BCrypt.create()
.hashToString(BCrypt.MIN_COST, password.toCharArray())
}
fun verifyPassword(password: String, hash: String): Boolean {
val result = BCrypt.verifyer().verify(password.toCharArray(), hash)
return result.verified
}
Argon2 ist der Gewinner des Password Hashing Competition (2015), empfohlen von OWASP als beste Wahl für Passwort-Hashing. Argon2id ist die Variante, die gegen Seitenkanal- und Time-Memory-Trade-Off-Angriffe resistent ist. Im Gegensatz zu bcrypt erlaubt Argon2 die getrennte Konfiguration von Ausführungszeit, Speichernutzung und Parallelitätsgrad und bietet so flexiblen Schutz gegen verschiedene Arten von Angriffen.
Hashing löst viele praktische Aufgaben in der mobilen Entwicklung — von der Benutzerauthentifizierung bis zur Integritätsprüfung heruntergeladener Dateien. Betrachten wir die wichtigsten Anwendungsfälle.
Der Hauptanwendungsfall ist die sichere Passwortspeicherung auf der Serverseite. Bei der Registrierung sendet die App das Passwort an den Server, wo es mit Salt unter Verwendung von bcrypt oder Argon2 gehasht und in der Datenbank gespeichert wird. Bei der Anmeldung hasht der Server das eingegebene Passwort und vergleicht es mit dem gespeicherten Hash. OWASP empfiehlt die Verwendung von Argon2id mit den Parametern: Zeit 2 Sekunden, Speicher 64 MB, Parallelitätsgrad 4.
Beim Herunterladen großer Dateien wie OBB-Pakete oder Inhaltsaktualisierungen können mobile Apps deren Integrität durch Hashing überprüfen. Der Server veröffentlicht den SHA-256-Hash der Datei, und die App berechnet den Hash der heruntergeladenen Daten und vergleicht sie. Dadurch wird sichergestellt, dass die Datei während der Übertragung nicht beschädigt oder manipuliert wurde. Laut Google Play Console (2025) verhindert die Hash-Überprüfung zertifizierter Apps bis zu 99,9% der Angriffe durch beschädigte Downloads.
Hashes werden aktiv zum Aufbau effizienter Caches und zur Daten-Deduplizierung verwendet. Die Adresse eines Bildes oder einer JSON-Antwort wird gehasht und als Cache-Schlüssel verwendet: Bei einer wiederholten Anfrage vergleicht das System die Hashes und gibt das gespeicherte Ergebnis zurück, wenn sich die Daten nicht geändert haben. Für diese Aufgabe eignen sich nicht-kryptografische Hash-Funktionen wie MurmurHash oder xxHash, die maximale Leistung bieten.
import java.security.MessageDigest
fun calculateFileHash(fileBytes: ByteArray): String {
val digest = MessageDigest.getInstance("SHA-256")
val hash = digest.digest(fileBytes)
return hash.joinToString("") { String.format("%02x", it) }
}
fun verifyIntegrity(data: ByteArray, expectedHash: String): Boolean {
val actualHash = calculateFileHash(data)
return actualHash == expectedHash
}
Selbst erfahrene Entwickler machen Fehler bei der Arbeit mit Hashing. Betrachten wir die häufigsten Probleme, die alle Vorteile des kryptografischen Schutzes zunichtemachen können.
MD5 und SHA-1 sind veraltete Algorithmen, für die praktische Kollisionsangriffe existieren. MD5 wurde 2004 von einer Gruppe chinesischer Forscher geknackt (Kollision in einer Stunde). SHA-1 wurde 2017 von einem Team von Google und dem Centrum Wiskunde & Informatica geknackt (SHAttered-Angriff). Die Verwendung dieser Algorithmen in neuen Projekten gilt nach OWASP-Klassifizierung als schwerwiegender Sicherheitsfehler.
Das Hashing von Passwörtern ohne Salt ist eine kritische Schwachstelle. Salt ist eine zufällige Zeichenfolge, die für jeden Benutzer eindeutig ist und vor dem Hashing zum Passwort hinzugefügt wird. Ohne Salt erzeugen zwei identische Passwörter denselben Hash, was die Verwendung von Regenbogentabellen zum Knacken ermöglicht. OWASP empfiehlt die Verwendung eines kryptografisch starken Salts von mindestens 32 Byte Länge, der für jeden Benutzer separat generiert wird.
Selbst bei Verwendung von bcrypt oder Argon2 kann der Schutz durch Wahl eines zu niedrigen Kostenparameters verringert werden. Laut OWASP (2025) sollte die Mindestanzahl von bcrypt-Iterationen 10 betragen (2^10 = 1024 Iterationen), und für Argon2id sollte die Berechnungszeit auf der Zielplattform mindestens 1 Sekunde betragen. Zu niedrige Parameter machen Brute-Force-Angriffe auf GPU-Farmen praktisch durchführbar.
Häufig gestellte Fragen
Hashing ist ein Einweg-Prozess, dessen Ergebnis nicht in die ursprünglichen Daten zurückverwandelt werden kann. Verschlüsselung ist ein bidirektionaler Prozess: Verschlüsselte Daten können mit einem Schlüssel entschlüsselt werden. Hashing wird zur Passwortspeicherung und Integritätsprüfung verwendet, während Verschlüsselung für die vertrauliche Übertragung von Daten zwischen Client und Server dient.
OWASP empfiehlt Argon2id als beste Wahl für das Hashing von Passwörtern aufgrund seines konfigurierbaren Schutzes gegen GPU- und Seitenkanalangriffe. Alternativen: bcrypt (bewährt und einfach zu konfigurieren), scrypt (resistent gegen ASIC-Angriffe) und PBKDF2. SHA-256 und SHA-512 sind nicht für Passwörter geeignet — sie sind zu schnell und schützen nicht vor massiven Brute-Force-Angriffen.
Eine Kollision ist eine Situation, in der zwei verschiedene Eingabedatensätze denselben Hash erzeugen. Für kryptografische Hash-Funktionen muss das Auffinden von Kollisionen rechnerisch unmöglich sein. Beispielsweise beträgt die Wahrscheinlichkeit einer SHA-256-Kollision etwa 1 zu 2^128 für zwei beliebige zufällige Nachrichten — dies ist ein verschwindend geringer Wert.
Nein, bcrypt enthält automatisch Salz in seinem Algorithmus. Beim Aufruf von BCrypt.hashToString() generiert die Bibliothek ein kryptografisch starkes 16-Byte-Salz und bettet es zusammen mit dem Hash und dem Kostenparameter in die Ausgabezeichenfolge ein. scrypt und Argon2 funktionieren ähnlich. Dies ist einer der Gründe, warum Experten empfehlen, für den Passwortschutz spezialisierte KDFs anstelle von Allzweck-Hash-Funktionen zu verwenden.
Ja, Hashes werden verwendet, um weiße und schwarze Listen von Dateien zu erstellen. Antiviren-Datenbanken enthalten Hashes bekannter Schadprogramme. Allerdings können Angreifer ein einzelnes Byte in einem Programm ändern, was den Hash vollständig verändert. Daher verwenden moderne Systeme Fuzzy-Hashing (SSDeep, TLSH), das semantisch ähnliche Dateien findet und nicht nur exakte Übereinstimmungen.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch