[Mcrypt ] Für mehrere Benutzer + Rechte

Skat0r

Grünschnabel
Hallo,

aktuell verwende ich schon das Mcrypt Modul von PHP um verschiedene Datensätze zu verschlüsseln und das funktioniert soweit auch. Nun wollte ich das ganze etwas Dynamischer gestalten um zum Beispiel verschiedenen Benutzern den Zugang zu einem verschlüsselten Container geben zu können. Leider fehlt mir aktuell der richtige Ansatz um das umzusetzen und daher die Frage ob jemand von euch dort schon erfahrungen gesammelt hat und mir einen ungefähren Ansatz nennen kann wie ich das ganze umsetzen könnte. Nachfolgend noch ein kleines Beispiel um mein vorhaben zu verdeutlichen.

Beispiel
Es existieren verschiedene Benutzer die sich alle mit einem seperaten Passwort anmelden können. In der Zukunft soll es dann zum Beispiel so sein das User 1 + 2 beide auf einen Container zugreifen können aber User 3 dies nicht darf.

Danke!
 
Ist ein simples Problem: Erstelle ein Gruppen-System. Jede Gruppe ist administrierbar (von irgendjemandem) und hat ein gemeinsames Gruppen-Passwort, das niemandem bekannt ist (liegt nur in der DB rum). Mit diesem Gruppen-Passwort kann man den Gruppen-Container entschlüsseln.
 
Ja an etwas ähnliches habe ich auch schon gedacht den Gedanken aber wieder verworfen. Denn das problem an dieser Lösung ist ja das sofern jemand auf welchem wege (Eindringen in den Server über eine Sicherheitslücke z.B.) auch immer zugriff auf die Datenbank bekommt, er direkt alles entschlüsseln kann was ihn gerade interessiert. Und das soll ja vermieden werden.
 
Wenn jemand deine Seite über eine Sicherheitslücke an sich reißen kann, hast du ganz andere Probleme ;-) Denn dann hilft nur noch - System platt machen, neu aufsetzen.

Wenn du es so sicher bekommen willst, muss sich jeder Benutzer dann halt mehrere Passwörter merken. Das wird dann recht schnell unbequem für die Benutzer. Eine weitere Möglichkeit wäre, das Gruppenpasswort verschlüsselt abzulegen, und zwar für jeden Benutzer mit seinem Passwort verschlüsselt. Dann kann ein Benutzer A das Gruppen-Passwort mit seinem Passwort entschlüsseln und Benutzer B dann eben mit seinem. Dafür müsstest du dann eben eine Passwort-Tabelle anlegen, die mind. 3 Spalten hat: Benutzer-ID, Gruppen-ID, Verschl. Passwort der Gruppe.
 
Wenn jemand deine Seite über eine Sicherheitslücke an sich reißen kann, hast du ganz andere Probleme ;-) Denn dann hilft nur noch - System platt machen, neu aufsetzen.
Das ist klar aber es gibt ja auch "häufig" Sicherheitslücken in der Serverarchitektur selber. Sprich FTP Server, Webserver etc. pp. Man kann einen Server/Webserver zwar sehr sicher konfigurieren aber wenn dann in einer Komponente davon ein Zero-Day Exploit möglich ist hilft ja die beste Konfiguration nichts wenn man darüber die kontrolle über den Server erlangen kann. Und daher soll es ebend, sofern überhaupt möglich, vermieden werden irgendwo ein Passwort im Klartext vorzuhalten.

Eine weitere Möglichkeit wäre, das Gruppenpasswort verschlüsselt abzulegen, und zwar für jeden Benutzer mit seinem Passwort verschlüsselt. Dann kann ein Benutzer A das Gruppen-Passwort mit seinem Passwort entschlüsseln und Benutzer B dann eben mit seinem. Dafür müsstest du dann eben eine Passwort-Tabelle anlegen, die mind. 3 Spalten hat: Benutzer-ID, Gruppen-ID, Verschl. Passwort der Gruppe.
Das setzt aber vorraus das der Benutzer mindestens einmal das Gruppenpasswort kennt oder hab ich das falsch verstanden? Was natürlich wie Du schon geschrieben hast recht umständlich für den Benutzer ist.

Ich befürchte fast das ein System so wie ich es gerne hätte nicht umsetzbar ist :/
 
Nein, ich meinte das so:

Benutzer A hat sein Konto mit Passwort in der User-Tabelle. Benutzer B hat auch ein Konto in der User-Tabelle mit einem ganz anderen Passwort - ganz normales Benutzer-System.

Zusätzlich zur Benutzer-Tabelle gibt es die Gruppen-Tabelle, sowie eine Kreuz-Tabelle, die Benutzer und Gruppe verbinden, wegen dritter Normalform. Wir haben jetzt also 3 Tabellen

Code:
Users <====> Users2Groups <=====> Groups
- id              - id             - id
- name            - userid         - name
- passwd          - groupid        - container
                  - enc_pw

- Benutzer A loggt sich mit seinem Passwort ein
- Passwort wird geprüft (Session liegt auf dem Server, geht verloren, sobald Benutzer sich ausloggt oder Browser-Fenster schließt)
- Passwort wird verwendet, um das verschlüsselte Passwort aus der User2Groups zu entschlüsseln
- Entschlüsseltest Passwort wird verwendet um Container zu entschlüsseln

Somit hat jeder Benutzer der Gruppe das gleiche Passwort, aber jeder hat in enc_pw was anderes drin stehen, weil das Gruppen-Passwort mit seinem eigenen Passwort entschlüsselt wird.

Das wäre dann so eine Art Keyring für jeden Benutzer.
 
Zuletzt bearbeitet:
Ja dein Vorschlag ist im grunde das was ich vorhabe. Was mich mir aber noch nicht ganz erschließt ist folgendes:

Wo kommt das ursprüngliche Passwort des Containers her? Also das was dann individuell mit dem Passwort des jeweiligen Benutzers verschlüsselt wird. Den möchte ich später zum Beispiel einen neuen Benutzer zu einem Container hinzufügen muss ich ja zwangsläufig das ursprungs Passwort kennen oder nicht?

Grüße und danke für die mühe die Du Dir machst!
 
Das kann irgend ein Hash sein. Z.B. eine MD5-Summe des Datums+Uhrzeit an dem die Gruppe erstellt wurde. Der Administrator ist zwangsläufig immer Mitglied der Gruppe (über Flags könnte man die Sichtbarkeit steuern) und "kennt" das Passwort im Klartext. Über eine E-Mail kommt der MD5-Schlüssel bei Beitritt zur Gruppe zum eigentlichen Benutzer, der dann über Link (z.B. auch über https um die Sicherheit zu gewährleisten) diesem MD5-Schlüssel nach dem Einloggen in seinem Gruppen-Eintrag die verschlüsselte Version hineinschreibt.
 

Neue Beiträge

Zurück