đŸŽČ Passwörter, die man am Telefon vorlesen kann

Im Januar habe ich beschrieben, wie ich von Vaultwarden zu KeePass + KeeWeb gewechselt bin. KundenzugĂ€nge gehen seitdem als Link raus – sauber, verschlĂŒsselt, kein Account nötig. Nur: Manchmal hilft der schönste Link nichts, weil der Kunde gerade am Telefon ist und das Passwort jetzt braucht.

Und genau da fangen die Probleme an.

đŸ”€ „Großes B wie Berta, dann Klammeraffe, dann eine Eins 
“

Ein normal generiertes Passwort sieht aus wie 7kQ$vL2!mZp9@rTx. Kryptografisch tadellos – am Telefon eine Katastrophe. Jedes zweite Zeichen braucht eine RĂŒckfrage:

  • 🔍 I, l und 1 – großes i, kleines L oder Eins?
  • ⭕ O und 0 – Buchstabe oder Ziffer?
  • 🔠 Groß oder klein? – bei jedem einzelnen Buchstaben
  • ⌚ Sonderzeichen – auf jeder Tastatur woanders
  • đŸ˜” Umlaute und ß – spĂ€testens beim auslĂ€ndischen Kunden vorbei

Ein 16-stelliges Zufallspasswort durchzugeben dauert so gut und gerne fĂŒnf Minuten, und am Ende hat man es trotzdem zweimal falsch. Das musste anders gehen.

đŸŽČ Diceware statt Zeichensalat

Die Idee dahinter ist alt und gut: Diceware. Statt zufĂ€lliger Zeichen wĂŒrfelt man zufĂ€llige Wörter aus einer festen Liste. Die Sicherheit kommt nicht aus dem Zeichensalat, sondern aus der Anzahl der Möglichkeiten – und die ist bei ausreichend vielen Wörtern locker so groß wie bei einem Zeichenpasswort.

Der Unterschied merkt man am Telefon: Ein Wort sagt man einmal, und es ist angekommen. Kein Buchstabieren, kein „war das jetzt groß oder klein“.

đŸ§© Das Plugin: KeePassDiceware

KeePass bringt von Haus aus keinen Diceware-Generator mit – aber es gibt ein Plugin dafĂŒr: KeePassDiceware. Es klinkt sich direkt in den Passwortgenerator ein, und man bekommt ein eigenes Profil mit den ĂŒblichen Schaltern:

  • 🔱 Anzahl der Wörter
  • ➖ Trennzeichen zwischen den Wörtern
  • 🔡 Groß-/Kleinschreibung
  • 🧂 Salt und L33t-Speak – beides bei mir aus, siehe oben
  • 📚 Wortlisten – mitgeliefert oder eigene

Damit war die halbe Miete drin. Die andere HĂ€lfte war die Wortliste.

📖 Eine eigene Wortliste – 4.000 Wörter, alle gleich lang

Die mitgelieferten Listen sind englisch, und die deutschen, die man im Netz findet, sind fĂŒr meinen Zweck unbrauchbar: Umlaute drin, WortlĂ€ngen von drei bis fĂŒnfzehn Buchstaben, und viel zu viele Wörter, die am Telefon gleich klingen.

Also habe ich mir eine eigene gebaut. 4.000 deutsche Wörter nach harten Kriterien:

  • 📏 Genau sechs Buchstaben – jeder Block ist gleich lang, die GesamtlĂ€nge damit vorhersagbar
  • đŸ”€ Nur ASCII – keine Umlaute, kein ß
  • đŸ—Łïž Leicht auszusprechen – höchstens zwei Silben, klare Konsonanten
  • 👂 Am Telefon eindeutig – nichts, was sich mit einem anderen Wort der Liste reimt oder verwechseln lĂ€sst
  • đŸ§č Ausgemistet – missverstĂ€ndliche und unpassende Begriffe sind raus

Dazu kommt ein Kniff: Vor jedes Wort kommt eine Ziffer. Aus 4.000 Wörtern und zehn Ziffern werden so 40.000 verschiedene Blöcke – und gleichzeitig ist die Ziffernpflicht erfĂŒllt, die einem manche Systeme aufzwingen. So sieht das aus:

7garten-3wasser-1kerzen-  


Man liest es einmal vor, der Kunde tippt mit, fertig. Keine RĂŒckfrage.

🔱 Moment – 40.000, ist das nicht viel zu wenig?

Die Zahl klingt harmlos, und genau da liegt das MissverstÀndnis: Es sind 40.000 Möglichkeiten pro Block. Ein Passwort besteht aber aus mehreren, und die Zahlen werden nicht addiert, sondern multipliziert. Jeder zusÀtzliche Block nimmt das Bisherige mal 40.000.

In der WĂ€hrung, in der man so etwas misst, bringt ein Block rund 15 Bit Zufall mit. Bevor die Zahlen kommen, kurz der Fall, fĂŒr den sie gelten – und dafĂŒr muss ich ein Wort erklĂ€ren.

Ein ordentlicher Anbieter speichert dein Passwort gar nicht. Er speichert eine Art Fingerabdruck davon: eine feste Zeichenfolge, die sich aus dem Passwort ausrechnen lĂ€sst – aber nicht zurĂŒck. Das ist ein Hash. Meldest du dich an, rechnet er den Fingerabdruck erneut aus und vergleicht ihn mit dem gespeicherten. Dein Passwort selbst bekommt er nie zu sehen, und deshalb kann er es dir auch nicht zumailen, wenn du es vergisst.

Wenn jetzt ein Dieb im unangenehmsten Fall den Hash erbeutet hat… „Erbeutet“ heißt dann: Bei diesem Anbieter wurde eingebrochen und die Nutzerdatenbank kopiert – so etwas steht regelmĂ€ĂŸig in den Nachrichten. Der Dieb hat damit nicht die Passwörter, sondern die FingerabdrĂŒcke. Was er tun kann: auf seinem eigenen Rechner massenhaft Passwörter raten, fĂŒr jedes den Fingerabdruck ausrechnen und schauen, ob einer davon passt.

Genau das ist der unangenehme Fall, und zwar aus einem Grund: Am Anmeldeformular wĂ€re er nach drei Fehlversuchen gesperrt. Zu Hause hindert ihn niemand – er darf raten, so schnell seine Hardware es hergibt. Angenommen sind hier 100 Milliarden Versuche pro Sekunde, eine realistische GrĂ¶ĂŸenordnung fĂŒr ein Gestell voller Grafikkarten und ein schnelles Rechenverfahren.

  • 4ïžâƒŁ Vier Blöcke – 2,6 Trillionen Möglichkeiten, gut 61 Bit: gut neun Monate Durchprobieren
  • 5ïžâƒŁ FĂŒnf Blöcke – 76 Bit: rund 32.000 Jahre
  • 6ïžâƒŁ Sechs Blöcke – 92 Bit: rund 1,3 Milliarden Jahre
  • 7ïžâƒŁ Sieben Blöcke – 107 Bit: rund 52 Billionen Jahre

Aus Monaten werden Jahrtausende, aus Jahrtausenden Erdzeitalter – und das nur, weil jeweils ein weiteres Wort dazukommt, das man am Telefon in einer Sekunde vorliest. Und das 16-stellige Zeichenpasswort vom Anfang, 7kQ$vL2!mZp9@rTx? Das liegt bei etwa 105 Bit. Ab sieben Blöcken ist die vorlesbare Variante die stĂ€rkere – bei einem Bruchteil des Ärgers.

Drei Ehrlichkeiten gehören dazu. Erstens sind das Höchstwerte; im Mittel ist ein Angreifer nach der HĂ€lfte der Zeit fertig. Zweitens gilt die Rechnung fĂŒr ein schnelles Hash-Verfahren – setzt der Dienst ein modernes, absichtlich langsames ein, wird daraus noch einmal ein Vielfaches. Drittens hilft gegen ein abgefischtes Passwort oder einen Anbieter, der Passwörter im Klartext ablegt, keine Entropie der Welt.

Was die Zahlen ausdrĂŒcklich nicht voraussetzen: dass der Angreifer ahnungslos ist. Sie gelten fĂŒr jemanden, der das Verfahren kennt – Wortliste, BlocklĂ€nge, Ziffer davor. So gehört es gerechnet. Sicherheit, die auf Nichtwissen beruht, ist keine.

🔧 Eine Zeile Quellcode

Ein Detail wollte ich noch: einen festen Anhang am Ende, immer gleich, damit ich meine eigenen Passwörter auf einen Blick erkenne. Das kann das Plugin nicht – es gibt keine Einstellung fĂŒr einen festen Suffix.

Also habe ich mir den Quellcode geschnappt. Die Stelle in DicewarePwGenerator.cs ist genau eine Zeile:

string result = Diceware.Generate(_options, profile, random);

result += "-xy";

return new ProtectedString(false, result);

Danach den KeePass-Pfad in der KeePass.props eintragen, einmal bauen – und die fertige DLL in den Plugin-Ordner kopieren:

dotnet build KeePassDiceware.sln -c Release

Das automatische Kopieren nach dem Build habe ich bewusst deaktiviert: Der Plugin-Ordner liegt unter C:\Program Files\ und ist schreibgeschĂŒtzt – der Build wĂ€re sonst bei jedem Durchlauf an den fehlenden Rechten gescheitert. Einmal von Hand rĂŒberziehen ist ehrlicher als ein Build, der stĂ€ndig rot wird.

Ein Wermutstropfen bleibt: Wenn das Originalprojekt aktualisiert wird, muss die eine Zeile wieder rein. Schöner wĂ€re eine richtige Option „Fixed suffix“ in den Einstellungen – vielleicht baue ich die irgendwann und schicke sie upstream zurĂŒck.

đŸ€« Was ich nicht verrate

Wie viele Blöcke ich tatsĂ€chlich verwende und was bei mir hinten dranhĂ€ngt, behalte ich fĂŒr mich. Wer die Blockzahl kennt, muss weniger durchprobieren. Die Rechnung oben trĂ€gt zwar auch ohne dieses Versteck – sie geht ja davon aus, dass das Verfahren bekannt ist. Aber geschenkt wird trotzdem nichts.

Und noch etwas gehört zur Ehrlichkeit dazu: Ein fester Anhang macht ein Passwort nicht sicherer. Er ist immer gleich, trĂ€gt also nichts zur ZufĂ€lligkeit bei. Die Sicherheit steckt ausschließlich in den gewĂŒrfelten Blöcken davor – der Anhang ist reine Bequemlichkeit. Wer so etwas einbaut, sollte es wissen und nicht als zusĂ€tzliche Stelle mitzĂ€hlen.

Fazit

Aus einem AlltagsĂ€rgernis – „kannst du mir das eben durchgeben?“ – ist ein Generator geworden, der Passwörter erzeugt, die man vorlesen kann, ohne zu buchstabieren. Gleiche LĂ€nge, keine Umlaute, keine Verwechslungen, und trotzdem genug Zufall dahinter.

Das Beste daran: Es war keine große Sache. Ein bestehendes Open-Source-Plugin, eine sorgfĂ€ltig zusammengestellte Wortliste und eine einzige Zeile C#. đŸŽČ

Fragen dazu, oder eine Wortliste fĂŒr eine andere Sprache im Kopf? Melde dich gerne – einfach Kontakt aufnehmen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert