PasswordManager: Unterschied zwischen den Versionen

Aus rü5
Wechseln zu:Navigation, Suche
imported>Meap
imported>Meap
Keine Bearbeitungszusammenfassung
 
(3 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Category:dhd]]
[[Category:dhd]]
[[Category:rueckertstrasse5]]


Passwort-Manager gibt es eigentlich wie Sand am Meer, aber bisher habe ich keinen gefunden, der
Passwort-Manager gibt es eigentlich wie Sand am Meer, aber bisher habe ich keinen gefunden, der
Zeile 6: Zeile 5:


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


=== mustHave ===
=== mustHave ===
* man kann sich bei dem System selbstständig registrieren/anmelden, dabei werden folgende Daten eingetragen:
* man kann sich bei dem System selbstständig registrieren/anmelden, dabei werden folgende Daten eingetragen:
** EMail-Adresse ''(eindeutig und validiert)''
** (Nick-)Name ''(initial ~> EMail-Adresse, wenn nicht leer)''
** Erinnerungs-String ''(für das Master-Passwort)''
** Erinnerungs-String ''(für das Master-Passwort)''
** (Nick-)Name ''(initial ~> EMail-Adresse, wenn nicht leer)''
** diverse Kontaktadressen ''(für Passwortnachfragen anderer)''
* man registriert seine Passwörter mit folgenden Daten:
* man registriert seine Passwörter mit folgenden Daten:
** (Passwort-)Name
** (Passwort-)Name
** Beschreibung
** Beschreibung
** das Passwort ''(wird mittels interner Funktion und dem MasterPasswort verschlüsselt abgelegt)''
** 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 ===
=== couldHave ===
Zeile 29: Zeile 31:
* leseberechtigte Personen können eine Änderung des Passwortes anfordern
* 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
|-
| valign="top" width="40%" |
;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
| valign="top" width="60%" |
<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> 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"];


* TOSORT
        MAP:srcTable    -> DATA:tablenam        [ color="gray" ];
** die Kommunikation zwischen den einzelnen Benutzern findet per EMail statt
        MAP:dstTable    -> CONTACT:tablename    [ color="gray" fontcolor="gray" label="dataContacts"];
** es werden keine Passwörter/Hashes o.ä. per EMail verschickt
}
** durch Ändern des Master-Passworts werden alle gespeicherten Daten neu verschlüsselt
</graphiz>
** zur Passwort-Kontrolle und Gedächnisstütze wird ein vom Benutzer definierter Text sowohl im klartext als auch verschlüsselt hinterlegt
|-
*: ''(dies scheint die einzige Methode zu sein, um an das Master-Passwort zu kommen)''
|}
** registrierte Benutzer besitzen entweder schreib- oder leserechte auf ein Passwort

Aktuelle Version vom 4. Februar 2012, 13:08 Uhr


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>