Zum Inhalt springen
Open Beta Hansestack ist in der aktuellen Phase komplett kostenlos. 🐙 Feedback auf GitHub einreichen

Quickstart: Der Leak-Check im Terminal

Um die Hansestack API in deine Applikation einzubauen, musst du das k-Anonymity-Verfahren verstehen. Du sendest niemals das Passwort und niemals den kompletten Hash über das Netzwerk.

Der Flow:

  1. Hashen: Passwort lokal mit SHA-1 hashen.
  2. Splitten: Die ersten 5 Zeichen (Präfix) extrahieren.
  3. Abfragen: Das Präfix an die API senden.
  4. Prüfen: Lokal checken, ob der Rest des Hashes (Suffix) in der Antwort der API enthalten ist.

Hands-on: Bash & cURL

Wir testen den Flow mit dem Passwort Passwort123!.
Damit das Passwort beim Eintippen im Terminal nicht sichtbar ist, nutzen wir read -s. Anschließend berechnen wir den Hash, isolieren das Präfix und fragen die API ab.

Für das Filtern der JSON-Antwort nutzen wir das Tool jq (ggf. über apt install jq oder brew install jq installieren).

Kopiere folgendes Skript in dein Terminal:

#!/bin/bash

# Deinen API-Key hier eintragen
API_KEY="DEIN_API_KEY_HIER"
API_URL="https://api.hansestack.de/leakcheck/v1/prefixes"

# 1. Passwort verdeckt einlesen
echo "Bitte Passwort eingeben (wird nicht angezeigt):"
read -s PASSWORD

# 2. SHA-1 Hash berechnen und in Großbuchstaben umwandeln
# Der Hash für "Passwort123!" ist 004C74BE1F2B4EE8D79BFBEFC3690E3CC53D00FA
HASH=$(echo -n "$PASSWORD" | sha1sum | awk '{print $1}' | tr 'a-z' 'A-Z')

# 3. Präfix (erste 5 Zeichen) und Suffix (Rest) extrahieren
PREFIX=${HASH:0:5}
SUFFIX=${HASH:5}

echo -e "\nHash-Präfix gesendet an API: $PREFIX"
echo "Lokal gesuchtes Suffix:      $SUFFIX"

# 4. API anfragen
RESPONSE=$(curl -s -w "\n%{http_code}" -H "X-API-Key: $API_KEY" -H "Accept: application/json" "$API_URL/$PREFIX")
HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
BODY=$(echo "$RESPONSE" | sed '$d')

if [ "$HTTP_CODE" -ne 200 ]; then
    echo "API Fehler! HTTP Code: $HTTP_CODE"
    # FAIL-OPEN: Hier würde deine Applikation den Login trotzdem erlauben!
    exit 1
fi

# 5. Lokaler Abgleich mit jq
MATCH=$(echo "$BODY" | jq -r ".suffixes[\"$SUFFIX\"]")

if [ "$MATCH" != "null" ]; then
    echo -e "\n⚠️ WARNUNG: Dieses Passwort wurde $MATCH mal in bekannten Datenleaks gefunden!"
else
    echo -e "\n✅ SICHER: Das Passwort ist in keiner Leak-Datenbank aufgetaucht."
fi

Was passiert hier im Hintergrund?

Die API antwortet auf das Präfix 004C7 (von Passwort123!) mit einem JSON-Objekt, das hunderte von Hash-Endungen enthält, die alle mit 004C7 beginnen.

Da dein Terminal weiß, dass der Rest deines Hashes 4BE1F2B4EE8D79BFBEFC3690E3CC53D00FA lautet, schaut jq lokal nach, ob exakt dieser String im JSON existiert. So prüfst du sicher gegen Milliarden von Hashes, ohne dein Passwort preiszugeben.