Support kontaktieren

Wir melden uns per E-Mail. Meist innerhalb von zwei Tagen.

Zum Schutz vor Missbrauch prüft Google reCAPTCHA diese Einsendung. Dabei werden Daten an Google übertragen. Das Skript wird erst geladen, wenn Sie dieses Formular öffnen.

← Alle Beiträge

Was ein Passwort auf einem Raspberry Pi kostet

Statistikseiten lassen sich hier mit einem Passwort schützen. Dieses Passwort zu hashen ist der eine Vorgang in diesem Dienst, der langsam sein soll — genau das macht einen gestohlenen Hash teuer im Angriff. Die Frage ist, wie langsam, auf dieser Hardware.

Gemessen auf der Maschine, die diese Seite betreibt, PHP 8.4.21 auf aarch64:

PASSWORD_DEFAULT560 ms(ergibt cost 12)
cost 12595 ms
cost 11277 ms
cost 10138 ms

Der Kostenwert von bcrypt ist ein Exponent: jede Stufe verdoppelt die Arbeit. Die Messungen zeigen genau diese Verdopplung, was ein gutes Zeichen dafür ist, dass nichts anderes dazwischenfunkt.

Warum die Voreinstellung hier die falsche Wahl ist

PHP hat den Vorgabewert für bcrypt von 10 auf 12 angehoben. Auf einem Server im Rechenzentrum ist das eine vernünftige Anhebung — ein paar Dutzend Millisekunden. Auf einer kleinen ARM-Platine ist es über eine halbe Sekunde reine Rechenzeit, auf einer Maschine, die gleichzeitig für alle anderen Zählerbilder zeichnet.

Eine halbe Sekunde je Anmeldung ist für sich genommen schlecht. Schlimmer ist sie als Einladung: den Anmeldepunkt kann jeder aufrufen, und jeder Aufruf verbraucht 560 ms des einen Prozessors, der die ganze Seite bedient. Damit wird die Passwortprüfung zur billigsten Überlastungsmöglichkeit, die es hier gibt.

Der Kostenwert steht deshalb fest auf 10 statt auf der Voreinstellung. Das ist absichtlich schwächer als das, was PHP heute wählt, und das gehört klar gesagt statt vergraben: ein Hash mit cost 10 ist viermal billiger anzugreifen als einer mit cost 12. Was das aufwiegt, ist das, was das Passwort tatsächlich schützt — die Sichtbarkeit einer Seite mit Besuchszahlen, kein Konto, kein Geld, keine Identität. Dahinter steht nichts, was man übernehmen könnte.

Der Teil, den man leicht übersieht

PASSWORD_DEFAULT ist absichtlich ein beweglicher Wert. Alter Code, der ihn benutzt, wird mit jeder PHP-Aktualisierung stillschweigend langsamer — derselbe Quelltext, dieselbe Eingabe, ein Vielfaches der Laufzeit. Das ist so gewollt, und für die meiste Software ist es richtig.

Falsch ist es nur, wenn die Maschine es nicht wegsteckt, und nichts warnt einen, wenn sie es nicht tut. Die Aktualisierung läuft durch, die Tests bestehen, die Seite tut es weiterhin. Sie braucht nur eine halbe Sekunde länger, und diese Zahl sieht sich niemand an, der nicht hingeht und misst.

Anzeige