PasswordManager: Unterschied zwischen den Versionen
Aus rü5
imported>Meap |
imported>Meap |
||
Zeile 6: | Zeile 6: | ||
== 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: | ||
** | ** (Nick-)Name ''(initial ~> EMail-Adresse, wenn nicht leer)'' | ||
** Erinnerungs-String ''(für das Master-Passwort)'' | ** Erinnerungs-String ''(für das Master-Passwort)'' | ||
** | ** 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 32: | ||
* 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 ==== | |||
<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"]; | |||
MAP:srcTable -> DATA:tablenam [ color="gray" ]; | |||
MAP:dstTable -> CONTACT:tablename [ color="gray" fontcolor="gray" label="dataContacts"]; | |||
} | |||
</graphiz> | |||
Version vom 13. Mai 2007, 09:56 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
<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>