Passwort vs. digitale Signatur
Der Tragödie zweiter Teil.
von Dr. Tomás Silveira Salles
Lesedauer ca. 5 Minuten
Über den Autor
Dr. Tomás Silveira Salles
... ist nicht nur IT-Sicherheitsexperte sondern auch Nutzer zahlreicher Online-Accounts und ein Passwort-Hasser mit schlechtem Gedächtnis.
Die Geschichte geht weiter: Wir wollen unsere online Leben schützen und haben keine Lust darauf, dass ständig Passwörter von irgendeinem Server geklaut werden. Gibt es in 2019 keine bessere Alternative?!
Na ja, es gibt zumindest eine Sicherere. Ob diese besser ist, kommt darauf an, wie gut man sich ein paar Dutzend verschiedene Passwörter mit jeweils 40 (zufälligen) Zeichen merken kann.
Lasst und erstmal kurz festhalten, wie Online-Dienste unsere Passwörter grundsätzlich benutzen sollten:
Bei der Registrierung eines neuen Users bekommt der Service sein Passwort "john1234!". Der Service sollte es nun nicht direkt irgendwo speichern, sondern erstmal das Passwort hashen. Das heißt, ein Programm/eine Routine kriegt das Passwort "john1234!" als Eingabe und spuckt einen langen Text als Ausgabe aus, der wie zufällig aussieht, aber nicht zufällig ist:
58fa 1256 5ffb 8392 81c3 775b a5e0 8380
bae7 8609 671a 9950 2c53 7f2e e09f 4569
42cd 892f 9211 0b91 ea58 fcf7 d3cb bb6b
fe80 c517 ea69 9cab 4647 b229 768b 10b7
Wir sollten unsere Sicherheit möglichst von der Verlässlichkeit der Dienst-Anbieter entkoppeln.
Dieser Text nennt man den Hash des Passwortes. Ein Hash hat 2 wichtige Eigenschaften: Er ist sehr einfach zu berechnen (anhand des Passwortes) aber es ist nahezu unmöglich daraus wieder das Passwort zurück zu erhalten. Deswegen sollte der Online-Dienst eben auch nur den Hash speichern und nicht das Passwort selbst. Will der User sich später anmelden, so schickt er sein Passwort dem Service, der dann nochmal den Hash berechnet und mit dem gespeicherten vergleicht. Und wenn jemand es schafft den Server des Online-Dienstes zu hacken, findet er dort keine gespeicherte Passwörter sondern nur ganz viele Hashes, mit den er nichts anfangen kann.
So kompliziert ist es also eigentlich nicht, aber man muss das eben erstmal wissen, oder zumindest sich vorher beraten lassen, wenn man einen Online-Dienst anbieten möchte. Leider lassen sich viele aber nicht beraten, und wieder andere die wissen, dass sie solche Sicherheitsmaßnahmen implementieren sollten, unterschätzen wie wichtig diese sind oder wollen einfach kein Geld dafür ausgeben, Expert*innen zu rate zu ziehen. Die Konsequenzen eines Hacks werden unterschätzt, denn es wird zu selten bedacht, dass die Kunden oder Nutzer häufig ihre Passwörter auch anderswo verwenden, so dass die Daten bei anderen Online-Diensten dadurch auch gefährdet werden.
Die große Mehrheit der erfolgreichen Hacks gelingen bei Online-Diensten, bei denen das Management oder auch die Entwickler*innen nachlässig waren.
Nicht zuletzt das macht es schwierig allen Online-Diensten, die wir nutzen möchten zu vertrauen. Wir sollten unsere Sicherheit also möglichst von der Verlässlichkeit der Services entkoppeln.
Bei der digitalen Signatur hat der Anbieter überhaupt keine Daten vom Nutzer mehr die ihm gestohlen werden könnten
Wie wäre es nun, wenn wir den Online-Diensten unsere Passwörter gar nicht schicken würden? Wenn die Anbieter unsere Passwörter nicht hätten, könnten sie ihnen auch nicht geklaut werden.
Was wir tun müssten, ist unsere Identität gegenüber dem Anbieter anders nachzuweisen.
Willkommen im Reich der digitalen Signaturen. Bei einem digitalen Signatur-Verfahren, besitzen die Signierenden (also die Nutzer) sogenannte private Schlüssel die nur sie kennen und zu jedem privaten Schlüssel gibt es einen passenden öffentlichen Schlüssel, der für die ganze Welt zugänglich ist.
Wie funktioniert das nun? Beim Login würde uns der Anbieter eine zufällige Nachricht schicken (eine lange zufällige Zeichenfolge). Wir würden dann unseren private Schlüssel benutzen um diese Nachricht in eine zu verschlüsseln und diese verschlüsselte Nachricht zurück schicken. Der Anbieter würde dann unseren öffentliche Schlüssel benutzen um damit zu verifizieren, dass wirklich wir die Nachricht "signiert" haben.
Wie das mathematisch genau funktioniert ist relativ kompliziert aber zum Verständnis der Verfahrens nicht relevant. Wichtig ist nur, dass man seinen private Schlüssel dafür niemals dem Anbieter schicken muss (nichtmal bei der Registrierung). Das heißt, die Anbieter hätten gar keine Möglichkeit unsere private Schlüssel zu verlieren, weil sie sie ja garnicht haben.
Ein weiterer Vorteil dieses Ansatzes wäre, dass die Online-Dienste die Listen aller bei ihnen registrierten öffentlichen Schlüssel sogar veröffentlichen könnten (ohne die zugehörigen Usernamen). Wenn man sich zum Beispiel bei Twitter registrieren will, mit dem selben öffentlichen Schlüssel den man bereits bei GMail benutzt hat, könnte Twitter dies sehen und sagen ,,vergiss es, wir erlauben es nicht, dass man Schlüsselpaare wiederverwendet". Aktuell kann Twitter nicht wissen ob dein Passwort schon mal irgendwo anders benutzt wurde, und beim aktuellen Ansatz sollte das auch so bleiben!
Da wäre dann noch die Sache mit der Schlüssellänge: Niemand will sich 39 Zeichen merken.
Nein, der Fall ist noch nicht gelöst und der Haken an der Sache ist riesig. Der Grund warum digitale Signaturverfahren sicher sind, ist weil man weder aus dem öffentlichen Schlüssel noch aus einer Signatur den privaten Schlüssel herausfinden kann, wenn... beide Schlüssel lang genug sind. Eine sehr heiße Art dieses Verfahrens ist aktuell die Signierung mit sogenannten elliptischen Kurven, das ist der Name für ein bestimmtes Mathematisches Verfahren. Dieses Verfahren ist sehr robust und braucht die kürzesten Schlüssel. Bei Ed25519 zum Beispiel, ist der private Schlüssel immer 32 Zeichen (256 Bits) lang. Um diese Sicherheit nur mit Buchstaben und Zahlen zu erreichen, brächte man ca. 39 Zeichen. Aber nicht vergessen: Diese Zeichen müssten dann wirklich zufällig gewählt sein (also gar keinen Sinn ergeben) und man müsste für jeden Service ein neues Schlüsselpaar generieren. Das kann sich natürlich kein Mensch merken.
Offensichtlich bräuchten wir dafür wieder Hilfe. Entweder von so etwas wie ein Passwordmanager, d.h. ein Privatschlüsselmanager, oder von einem Zettel, der an der Kühlschranktür hängt (und sehr lang ist).
Hätte der Ansatz also gar keine Vorteile? Doch, sehr große sogar. Obwohl wir von einem Privatschlüssel-Manager abhängig wären (und diesem absolut vertrauen müssten, wie heute mit unseren Passwort-Managern), hätten wir den Vorteil, dass die Dienste-Anbieter das System auf korrekte und sichere Weise implementieren müssten. Sie hätten nicht mehr die Option, sowas wie die Billig-Version mit im Klartext gespeicherten Passwörtern zu wählen, weil sie niemals irgendeine geheime Information von uns bekommen würden.
Zudem würden manche, bessere Online-Dienste tatsächlich anfangen sicherzustellen, dass die Schlüsselpaare nicht wiederverwendet werden, wie oben beschrieben.
Der größte Fehler, den diese Systeme machen könnten, wäre die zu signierende Nachricht zu wiederholen, was man nicht sollte. Aber dann könnte unser Privatschlüssel-Manager uns davor warnen und wir könnten uns beschweren, oder aufhören den Dienst zu nutzen. Aktuell haben wir keinen Weg um zu wissen, ob unsere Dienste-Anbieter ihre IT-Sicherheit vernünftig implementiert haben oder nicht.
Passwörter mit 8 Zeichen könn(t)en sicher sein
Nein, nicht wenn das System vernünftig implementiert wird. Der Grund warum Passwörter mit 8 Zeichen sicher sein können, während digitale Signaturverfahren mit Passwörtern mindestens 39 Zeichen brauchen würden, ist weil die Verifizierung der Korrektheit des Passwortes nur vom Service selbst durchgeführt werden kann.
Wenn ein (schlechter) Hacker versucht, sich bei Twitter anzumelden, auf dem Account eines anderen Users, hat Twitter die Möglichkeit ihm zu sagen ,,du hast in dieser Minute schon 10 Mal versucht, jetzt darfst du 10 Minuten nicht mehr", oder ,,du hast heute schon 100 Mal versucht, jetzt ist dein Account gesperrt und du musst anrufen". Der Service hat die totale Kontrolle über die Anmeldungsversuche.
Bei digitalen Signaturverfahren ist der öffentliche Schlüssel, nun ja, öffentlich. Der Hacker kann auf seinem Laptop, lokal, sehr schnell, Millionen von Privatschlüsselkandidaten ausprobieren. Deswegen muss die Anzahl möglicher privater Schlüssel so gigantisch sein, dass selbst ein paar Millionen Versuche noch lange nicht ausreichen.
Ruhig, ganz ruhig. Ja, wir nähern uns einer guten Idee, aber fertig ist sie nicht. Mit diesem Ansatz müssten wir trotzdem noch unsere extrem geheimen privaten Schlüssel auf den Server des Schlüssel-Managers laden. Wir müssten dem Manager absolut vertrauen, und würden alles verlieren wenn er gehackt wird. Außerdem bräuchten wir noch immer ein Passwort um uns beim Schlüssel-Manager einzuloggen.
Aber keine Sorge: Aufgegeben haben wir noch immer nicht. Es gibt einen Teil 3...