PasswordManager

Aus rü5
Wechseln zu:Navigation, Suche


Passwort-Manager gibt es eigentlich wie Sand am Meer, aber bisher habe ich keinen gefunden, der Passwörter auch zwischen Benutzergruppen managen kann, wobei jede Person sein eigenes Master-PW besitzt.

Idee

einen PasswortManager der auch Passwörter gruppieren und personenübergreifend verwalten kann.

mustHave

  • man kann sich bei dem System selbstständig registrieren/anmelden, dabei werden folgende Daten eingetragen:
    • (Nick-)Name (initial ~> EMail-Adresse, wenn nicht leer)
    • Erinnerungs-String (für das Master-Passwort)
    • diverse Kontaktadressen (für Passwortnachfragen anderer)
  • man registriert seine Passwörter mit folgenden Daten:
    • (Passwort-)Name
    • Beschreibung
    • das Passwort (wird mittels interner Funktion und dem MasterPasswort verschlüsselt abgelegt)
  • das System speichert keine Passwörter im Klartext (sie sind alle mittels des Master-Passworts verschlüsselt)
  • das MasterPasswort darf auf keinen Fall in irgendeiner Form im System gespeichert werden
    • hierauf ist besonders bei WebFrontends (Sessions) zu achten

couldHave

  • persönliche Gruppen von Passwörtern
  • Gruppen von bekannten Personen (wer kennt wen ~ unidirectionale Verbindung)
  • Anfordern eines Passworts bzw. einer Gruppe von PW von einer Person (pull)
  • Übertragen eines Passworts bzw. einer Gruppe an eine andere Person (push ~ evtl. mit lese/schreib Berechtigung)
  • bei Änderung von Passwörtern werden die entsprechenden Personen benachrichtigt

nice2have

  • schreibberechtigte Personen können das Passwort ändern und somit die anderen Benutzer benachrichtigen
  • leseberechtigte Personen können eine Änderung des Passwortes anfordern

Realisierungsvorschläge

php+mySQL

die mySQL-DB bietet eine AES-Verschlüsselungs-Funktion, mit der die Passwörter durch das Master-Passwort verschlüsselt werden können.

DB-Design

Erklärung Übersicht
USER
enthält die nötigen Benutzerdaten
GROUP
enthält die definierten Gruppen
CONTACT
enthält die definierten Kontakte
DATA
enthält die definierten zu verschlüsselnden Datensätze
CRYPT
enthält die für jeden User verschlüsselten Daten eines definierten Datensatzes
MAP
enthält Verknüpfungen von einem Datensatz einer Tabelle zu einem anderen Datensatz einer anderen Tabelle

<graphviz> digraph G {

       graph [rankdir = "LR"];
       edge [];
       node [ style="rounded" ];
       USER    [ shape="record" label="<tablename> USER | <id> id | <name> name | <description> description | <session> session | <lastVisit> lastVisit" ];
       CONTACT [ shape="record" label="<tablename> CONTACT | <id> id | <name> name | <description> description" ];
       GROUP   [ shape="record" label="<tablename> GROUP | <id> id | <name> name | <description> description" ];
       DATA    [ shape="record" label="<tablename> DATA | <id> id | <name> name | <description> description" ];
       CRYPT   [ shape="record" label="<tablename> CRYPT | <uid> uid | <did> did |  data | <changeable> changeable"];
       MAP     [ shape="record" label="<tablename> MAP | <srcId> srcId | <srcTable> srcTable | <dstId> dstId | <dstTable> dstTable" ];


       CRYPT:uid       -> USER:id ;
       CRYPT:did       -> DATA:id ;
       MAP:srcTable    -> USER:tablename       [ color="yellow" ];
       MAP:dstTable    -> DATA:tablename       [ color="yellow" fontcolor="yellow" label="userData"];
       MAP:srcTable    -> USER:tablename       [ color="gray" ];
       MAP:dstTable    -> CONTACT:tablename    [ color="gray" fontcolor="gray" label="userContacts"];
       MAP:srcTable    -> USER:tablename       [ color="blue" ];
       MAP:dstTable    -> GROUP:tablename      [ color="blue" fontcolor="blue" label="userGroups"];
       MAP:srcTable    -> GROUP:tablename      [ color="yellow" ];
       MAP:dstTable    -> DATA:tablename       [ color="yellow" fontcolor="yellow" label="groupData"];
       MAP:srcTable    -> GROUP:tablename      [ color="gray" ];
       MAP:dstTable    -> CONTACT:tablename    [ color="gray" fontcolor="gray" label="groupContacts"];
       MAP:srcTable    -> DATA:tablenam        [ color="gray" ];
       MAP:dstTable    -> CONTACT:tablename    [ color="gray" fontcolor="gray" label="dataContacts"];

} </graphiz>