archilles scriptworld Forum

» Startseite
  » Support-Foren
      » Häufig gestellte Fragen (FAQ)
          · FAQ: Talkboard Forum "Public-Key Autorisierung"

Seite: 1

FAQ: Talkboard Forum "Public-Key Autorisierung" Archilles
Version 2 - 15. Oktober 2002 21:10:00 CET

Im folgenden wird die "Public-Key Autorisierung" auch mit "PKA" abgekürzt. Wie im Quellcode beschrieben, befindet sich hier nun eine Anleitung zu diesem Thema. Bitte lese diese sorgfältig durch. Zur Not auch mehrmals :-)

Ab welcher Version ist dieses verfügbar?

Man benötigt mindestens Version 1.7.5. 2.x wird eine bessere Implementierung mitbringen, welches die Sicherheit, durch Speicherung in der Datenbank selber, erhöht.

Das PKA-Modul ist in Version 1.x noch als Beta-Code anzusehen und keinesfalls als "sicher" zu betrachten. Ich rate dringenst davon ab es in "wichtigen Produktionsforen" einzusetzen, solange du nicht genug Verständnis für deinen Server hast! Bitte informiere dich oder frage deinen Provider, ob er dir da weiterhelfen kann. Diesbezügliche Fragen werde ich nicht beantworten, weil mir das breite Wissen dazu fehlt. Ausgenommen zu meinem PKA-System selber, wenn Du den Quellcode selber nicht verstehst.


Was ist PKA?

Normalerweise muß sich ein Benutzer über seinen Benutzernamen und ein Passwort authentifizieren und dies beim Login eingeben. Dies ist der traditionelle Weg und wird von sehr vielen Diensten genutzt, wie bei der Interneteinwahl, bei Foren, bei E-Mail Diensten und so weiter. Nun gibt es aber noch einen zweiten Weg, welcher beides durch einen "Schlüssel" ersetzt. Beispielsweise kann dieses Verfahren bei SSH-Verbindungen - das sind gesicherte Verbindungen, um auf entfernte Rechner so zu zugreifen, als säße man direkt davor - eingesetzt. Anstatt Benutzername und Passwort einzugeben, muß man nur noch seinen Usernamen eingeben und diesen Schlüssel übermitteln. Passen beide, ist man authentifiziert.

Wie funktioniert PKA?

Erst wollte ich es ja mittels der OpenSSL-Bibliothek lösen, welche sich an PHP anbinden läßt. Jedoch gibt es viele Server, die diese Möglichkeit gar nicht bieten. Für "echte" Zertifikate, selbst mit einer Demo-CA, ist der Aufwand zu hoch. Daher habe ich eine eigene Schnittstelle dafür entwickelt, die der "richtigen" Public-Key Autorisierung ähnelt.

Das System erstellt einen Schlüssel, der den Benutzernamen, das Passwort und einen "Key" enthält. Dieser bleibt auf dem Server und eine Kopie erhält das Mitglied. Normalerweise gibt es zwei Schlüssel: einen "privaten" und einen "öffentlichen". Aber so kompliziert wollte ich es nicht machen. Wenn das Mitglied bei seinem Login diesen Schlüssel übergibt wird der eingebettete Benutzername und Passwort mit der Kopie auf dem Server verglichen. Passen beide, dann wird der Zugriff gewährt. Wenn sich das Passwort ändert, benötigt man natürlich einen neuen Schlüssel.

Wie sicher ist PKA?

Nun stellt sich schon die nächste Frage: Kann man einen solchen Schlüssel nicht fälschen? Schließlich liegt das Forum für jedermann im Quellcode vor und man sieht dann das Format eines solchen Schlüssels. Dieser ließe sich dann fälschen. Ich persönlich halte da zwei Gegenargumente. Das erste ist, daß das Passwort mit MD5 verrechnet abgelegt wird. Ich plane aber als Update das ganze optional mittels der "mcrypt-lib" auf (bestenfalls) AES, aber mindestens (blow/two)fish aufzustocken. Beide Verfahren sind derzeit nicht, mit vertretbarem Aufwand, zu knacken. Mathematische Angriffe sind meines Wissens nicht bekannt. Der Fälscher muß also als erstes das Passwort wissen oder den Key stehlen und das verschlüsselte Passwort "zurückrechnen". Das zweite ist, daß der Key einen längeren String enthält, welcher diesen weiter sichern soll. Dadurch daß eine Kopie auf dem Server liegt, muß man auch diesen String erfolgreich fälschen. Und das ist eigentlich nur machbar, wenn man des Keys habhaft wird. Ich verwende zur Zeit acht Strings, welche mittels MD5 verschlüsselt werden, und zusammengefasst so einen 1024-bit Schlüssel ergeben. Davon sind vier der Ausgangsstrings zufällig (okay die wenigsten Plattformen liefern wirklich gute Zufallszahlen) - besser wäre natürlich alle acht. Dieser sollte sich schwer zurückrechnen lassen; wofür ich mich hier aber NICHT verbürge, da ich schließlich kein Kryptologe bin. Nur wenn beide dieser Sicherheitskeys passen, beim Client und beim Server, gilt der übermittelte Schlüssel als gültig.

Ein großer Schwachpunkt ist die Speicherung dieser Schlüssel. Auf Clientseite muß das Mitglied diesen geheim halten und sollte ihn nicht weitergeben. Beim Server ist es noch wichtiger, da dort die aller Mitglieder liegen.

Was muß ich als Administrator beachten?

Die Schlüssel auf dem Server liegen in einem Verzeichnis, den ich "Container" nenne. Dieser besteht aus acht Buchstaben, liegt im Forumhauptverzeichnis, und ist willkührlich gewählt. Dadurch soll vermeiden werden, daß man (mit einem Browser bewaffnet) es erraten kann. Zusätzlich wird es, sofern der Webserver Apache ist und .htaccess unterstützt, der Zugriff verweigert. Dadurch sollte der Container vor Zugriffe mit einem Browser sicher sein.

Ab 2.0.0 befinden sich diese Daten zum besseren Schutz direkt in der Datenbank bei den Benutzerdaten.


Eine andere Angriffsfläche ist natürlich die Übertragung des Schlüssels zum Server. Dies kann man nur schützen, indem man eine durch SSL geschützte Verbindung benutzt. Jedoch stufe ich das Risiko einer Abhörung als gering ein, da erstmal die Datenflut im Internet groß ist (wäre also ein Glückstreffer) und zum anderen dürfte es diese Personen kaum interessieren. Wer gezielt Netzwerke ausspioniert, dürfte mehr im Sinn haben :-)

Die dritte Möglichkeit, die ich mir denken kann, ist ein "Angriff" direkt über den Webserver oder einem shell-Zugriff. Es gibt diverse Skripte mit denen man einen Server durchforsten kann, auch auf PHP-Basis. Da der Container vom Server erstellt wurde, kann dieser auch darauf zugreifen und wenn PHP als Modul läuft, bsp. im Apache, dann hat theoretisch jeder Zugriff auf alle freigegebenen Verzeichnisse. Läuft es jedoch als CGI mit SuEXEC, so gehört dir dein Verzeichnis und PHP läuft unter deinem Benutzerkonto. Wenn du es richtig eingestellt hast (oder dein Provider), dann hast nur du darauf Zugriff. Um es klar zu machen: Das ist der "worst case". Jeder Server ist anders konfiguriert, daher kann ich keine Aussage über deinen konkreten Fall machen. (HINWEIS: Ab 2.0.0 nicht mehr möglich)


Ich würde mich freuen, wenn einige mir Ihre Meinungen mitteilen und es ausprobieren würden. Bisher habe ich das in keinem anderen Forum gesehen und dachte, es wäre vielleicht mal eine kleine Innovation. Verbesserungsvorschläge sind natürlich auch willkommen. Bei Fragen oder Problemen kannst du mir gerne mailen oder sie im Forum stellen.

Seite: 1

Copyright (c) by "archilles scriptworld Forum", 2009. All rights reserved.
This archive has no free license, but any copyright laws applicable by your local country.