Warum einen bcrypt-Hash online erzeugen?
Die HTTP-Basic-Authentifizierung bleibt der schnellste Weg, einen Administrationsbereich, eine Vorproduktion oder ein internes Dashboard zu schließen. Sie stützt sich auf eine .htpasswd-Datei, in der jede Zeile einen Benutzernamen mit einem gehashten Passwort verbindet - niemals im Klartext.
Seit Apache 2.4 erzeugt htpasswd -B bcrypt, und genau dieses Format empfiehlt die offizielle Dokumentation. Der Haken: Der Befehl setzt voraus, dass apache2-utils unter Debian oder httpd-tools unter RHEL installiert ist. Auf einem Windows-Rechner, bei Shared Hosting oder in einer Weboberfläche fehlt er häufig.
Drei Situationen, in denen dieser Generator hilft:
- Eine Vorproduktion schützen → Den Zugang zu einer Testumgebung sperren, bevor Google sie indexiert
- Ein Konto ohne SSH-Zugang anlegen → Die Zeile im Browser erstellen und über den Dateimanager des Hosters einfügen
- Eine bestehende Datei modernisieren → Nach und nach
$apr1$-Einträge durch$2y$-Einträge ersetzen
Der Generator in 3 Schritten
Schritt 1: Benutzername und Passwort eingeben
Tragen Sie den Kontonamen und das Passwort ein. Das Feld ist standardmäßig verdeckt; klicken Sie auf das Auge, um Ihre Eingabe vor dem Absenden zu prüfen. Die Schaltfläche "Passwort erzeugen" zieht eine zufällige Zeichenkette aus 16 Zeichen, falls Sie noch keine haben.
Schritt 2: Kostenfaktor einstellen
Der Regler startet bei 10, dem Wert von htpasswd -B. Gehen Sie für sensible Zugänge auf 12. Jede Stufe verdoppelt die Rechenzeit: bei der Erzeugung ebenso wie bei jeder Prüfung durch den Server.
Schritt 3: Die Zeile kopieren
Es werden zwei Ergebnisse angezeigt: der Hash allein und die vollständige .htpasswd-Zeile. Kopieren Sie letztere in Ihre Datei und laden Sie die Serverkonfiguration neu.
Aufbau eines bcrypt-Hashs
Eine .htpasswd-Zeile besteht aus zwei durch einen Doppelpunkt getrennten Feldern:
admin:$2y$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
Das zweite Feld gliedert sich so:
| Teil | Beispiel | Rolle |
|---|---|---|
| Algorithmuskennung | 2y | Zeigt dem Server, dass es sich um bcrypt handelt |
| Kostenfaktor | 10 | Exponent: Die Berechnung durchläuft 2^10 = 1.024 Runden |
| Salt + Digest | N9qo8uLOickgx2ZMRZoMye... | 53 Zeichen: 22 für das 128-Bit-Salt, 31 für die Prüfsumme |
Anders als bei APR1-MD5 belegt das Salt kein eigenes Feld: Es klebt im letzten Block am Digest. Es bleibt im Klartext lesbar, was normal ist - seine Aufgabe ist nicht Geheimhaltung, sondern zu verhindern, dass eine vorberechnete Tabelle das Passwort zurückgewinnt.
Den Kostenfaktor verstehen
Der Kostenfaktor ist ein Exponent, kein Multiplikator. Ein Faktor N durchläuft 2^N Runden der Schlüsselableitung:
| Kosten | Runden | Richtwert Zeit | Einsatz |
|---|---|---|---|
| 8 | 256 | ~15 ms | Heute zu schwach |
| 10 | 1.024 | ~60 ms | Standard von htpasswd -B, in Ordnung |
| 12 | 4.096 | ~250 ms | Für sensible Zugänge empfohlen |
| 14 | 16.384 | ~1 s | Spürbare Verzögerung bei jeder Anmeldung |
Zwei Dinge sind zu bedenken. Erstens fällt diese Zeit bei jeder Prüfung an, also bei jeder HTTP-Basic-Anfrage: Ein Faktor von 14 auf einer Seite, deren Browser die Authentifizierung für jede Ressource wiederholt, macht sich sofort bemerkbar. Zweitens hängt die richtige Einstellung von Ihrer Hardware ab: Messen Sie, statt einen Wert abzuschreiben; üblich sind 100 bis 250 ms auf dem Server, der die Prüfung durchführt.
Ein Verzeichnis mit Apache schützen
1. Die Datei anlegen
Legen Sie Ihre .htpasswd-Datei außerhalb des Webverzeichnisses ab, damit sie nie über HTTP ausgeliefert wird:
/var/www/secrets/.htpasswd
2. Den Schutz deklarieren
In der .htaccess des zu schützenden Verzeichnisses oder im <Directory>-Block Ihres VirtualHosts:
AuthType Basic
AuthName "Geschuetzter Bereich"
AuthUserFile /var/www/secrets/.htpasswd
Require valid-user
3. Die Konfiguration neu laden
sudo apachectl configtest && sudo systemctl reload apache2
Für nginx wird dasselbe Dateipaar so deklariert:
location /admin/ {
auth_basic "Geschuetzter Bereich";
auth_basic_user_file /var/www/secrets/.htpasswd;
}
nginx liest bcrypt ab Version 1.0.3 auf Systemen, deren crypt_r() es unterstützt - das trifft auf alle gängigen Linux-Distributionen zu.
bcrypt im Vergleich zu den anderen .htpasswd-Formaten
| Format | Präfix | Rechenaufwand | Urteil |
|---|---|---|---|
| bcrypt | $2y$ | Einstellbar, 2^Kosten Runden | Für jedes neue Projekt empfohlen |
| APR1-MD5 | $apr1$ | 1.000 MD5-Iterationen | Vertretbar, maximale Kompatibilität |
| SHA-1 | {SHA} | 1 Iteration, ohne Salt | Meiden: kein Salt, per Tabelle knackbar |
| crypt() DES | keines | 25 Iterationen, auf 8 Zeichen gekürzt | Veraltet, nicht mehr verwenden |
Kurz gesagt: bcrypt ist das einzige .htpasswd-Format, dessen Aufwand sich an die Hardware der jeweiligen Zeit anpassen lässt. Die anderen drei haben feste Kosten aus den 1990er- oder 2000er-Jahren, die der Fortschritt der GPUs lächerlich gemacht hat. Behalten Sie APR1-MD5 nur, wenn Ihr Server $2y$ nicht lesen kann.
Den Hash auf der Kommandozeile prüfen
Dieses Werkzeug liefert einen standardkonformen bcrypt-Hash, den Systemwerkzeuge prüfen können:
# Das Gegenstück mit htpasswd erzeugen (Paket apache2-utils / httpd-tools)
htpasswd -nbB admin meinPasswort
# Einen Kostenfaktor von 12 erzwingen
htpasswd -nbB -C 12 admin meinPasswort
Die beiden Zeichenketten sind nicht identisch - das Salt unterscheidet sich bei jeder Ziehung -, doch beide bestätigen dasselbe Passwort. Zur Kontrolle:
# Die Prüfung mit dem Salt eines vorhandenen Hashs wiederholen
python3 -c "import bcrypt,sys; print(bcrypt.checkpw(b'meinPasswort', sys.argv[1].encode()))" '$2y$10$...'
FAQ - Häufige Fragen
F: Was ist das Format $2y$?
A: Es ist die bcrypt-Kennung in einer .htpasswd-Datei. Ein vollständiger Hash folgt dem Muster $2y$<Kosten>$<Salt><Digest>: eine Algorithmuskennung, ein zweistelliger Kostenfaktor und 53 Zeichen mit dem 128-Bit-Salt und der Prüfsumme. Genau das schreibt htpasswd -B.
F: Worin unterscheiden sich $2a$, $2b$ und $2y$?
A: Im Kern gar nicht, es sind drei Kennungen desselben Algorithmus. $2y$ wurde 2011 von PHP eingeführt, um eine korrigierte Implementierung eines Fehlers bei Nicht-ASCII-Zeichen zu markieren; die hier verwendete Bibliothek war nie betroffen. Apache und nginx akzeptieren alle drei.
F: Welchen Kostenfaktor sollte ich wählen?
A: 10 als Standard, 12 für sensible Zugänge. Der richtige Reflex ist, auf dem prüfenden Server zu messen und 100 bis 250 ms anzupeilen: langsam genug, um einen Wörterbuchangriff zu behindern, schnell genug, um im Alltag nicht aufzufallen.
F: Warum komme ich nicht über 15 hinaus?
A: Da der Kostenfaktor ein Exponent ist, verlangt 16 bereits mehrere Sekunden Rechenzeit und würde das Zeitbudget einer HTTP-Anfrage überschreiten. Für höhere Werte erzeugen Sie den Hash lokal mit htpasswd -B -C 18.
F: Ist bcrypt besser als APR1-MD5?
A: Ja, deutlich. APR1-MD5 reiht 1.000 MD5-Iterationen aneinander, die spezialisierte Hardware milliardenfach pro Sekunde berechnet. bcrypt verlangt Speicher und nicht sequenzielle Zugriffe, was die Parallelisierung einer GPU stark begrenzt. Für eine neue .htpasswd-Datei ohne Zögern bcrypt.
F: Kann ich ein Passwort mit mehr als 72 Zeichen verwenden?
A: Nein, und das ist keine Grenze dieses Werkzeugs: bcrypt ignoriert schlicht alles jenseits von 72 Bytes. Ein Passwort mit 80 Zeichen entspräche daher seinen ersten 72. Achtung, ein Zeichen mit Umlaut zählt in UTF-8 als zwei Bytes.
F: Wird das Passwort irgendwo gespeichert?
A: Nein. Es wandert für die Dauer der Berechnung über HTTPS zur CaptainDNS-API und wird danach verworfen. Keine Datenbank, kein Protokoll mit dem Passwort im Klartext.
F: Wohin gehört die .htpasswd-Datei?
A: Außerhalb des Webverzeichnisses, etwa nach /var/www/secrets/. Liegt sie in einem über HTTP ausgelieferten Verzeichnis, könnte ein Besucher sie herunterladen und die Hashes offline angreifen - genau das macht der Kostenfaktor teuer, aber nicht unmöglich.
Ergänzende Werkzeuge
| Werkzeug | Nutzen |
|---|---|
| APR1-MD5-Generator | Eine .htpasswd-Zeile im historischen Apache-Format erzeugen |
| Passwortgenerator | Ein starkes Passwort ziehen, bevor Sie es hashen |
| Hash-Generator | MD5, SHA-1, SHA-256 und SHA-512 eines Textes berechnen |
| Base64-Encoder | Den Authorization-Header einer Basic-Anfrage kodieren |
| HTTP-Header-Analyse | Die Header eines geschützten Bereichs prüfen |
Nützliche Ressourcen
- Apache-Dokumentation - htpasswd (Optionen des Befehls, darunter -B und -C)
- Apache-Dokumentation - Authentifizierung (Einrichtung der Basic-Authentifizierung)
- A Future-Adaptable Password Scheme (Grundlagenarbeit zu bcrypt, Provos und Mazieres, 1999)
- RFC 7617 - The Basic HTTP Authentication Scheme (Spezifikation des Basic-Schemas)
Datenschutzversprechen
Ihr Passwort wird ausschließlich zur Berechnung des Hashs über eine verschlüsselte Verbindung an die CaptainDNS-API übertragen. Es wird weder gespeichert noch protokolliert. Nur anonyme technische Kennzahlen werden aufbewahrt (Verarbeitungsdauer, Antwortcode).