Dag luitjes,
Zoals once again loop ik weer eens met een hersenspinsel rond in mijn hoofd voor een project. Een systeem waar data opgeslagen wordt.
Hierin zijn er projecten waarin de bestanden staan. Vergelijkbaar met mappen. Een project kan meerdere mensen hebben die hier toegang tot hebben (via uitnodiging).
Dit systeem heeft de volgende eisen:
Nu had ik het idee als volgt in mijn hoofd.
Encryptie
Elk bestand wat upgeload wordt ge-encrypt met een unieke key per project per lid. Deze key wordt dus per project gemaakt op het moment dat het project wordt aangemaakt. Deze key wordt ge-encrypt met het wachtwoord van de eigenaar. In dit geval hoef ik enkel de keys per file opnieuw te encrypten mocht de persoon zijn wachtwoord wijzigen.
Dit wachtwoord wordt uiteraard gehashed opgeslagen. Hierdoor kan ik dus niet bij de data van de gebruiker komen, immers weet ik het wachtwoord niet waarmee de key is ge-encrypted.
Wanneer de gebruiker inlogt wordt in zijn sessie elke key van zijn bestanden gedecrypt met zijn wachtwoord. Hierdoor kan hij dan de bestanden via deze key decrypten. Is de sessie verlopen worden deze keys weer uit het geheugen verwijderd.
Hierdoor kan ik theoretisch niet bij de data van de gebruiker, right? - Enkel op het moment dat de gebruiker in is gelogd zijn de keys immers beschikbaar -
Bestanden delen
In dit systeem kan je iemand anders uitnodigen voor het project, dit zal dan via een mail gaan alla: "Jantje nodigt je uit voor 'project-x'. Aangezien de gebruiker die op dat moment uitnodigt is de key voor het decrypten van dat project op dat moment bekend. Dit wordt dan in het mailtje verstuurd samen met het project-id. - Hier is dus ook de key dus ook tijdelijk bekend -
Wanneer iemand accepteerd wordt een voor deze persoon ook de key geencrypted met zijn wachtwoord en opgeslagen. Als er dus een project is met twee leden zijn de keys dus voor elke persoon encrypted opgeslagen met hun eigen wachtwoord.
Probleem
Volgens mij heb ik hiermee de punten 1,2 en 4 getackled, enkel op het moment dat iemand is ingelogd is voor het systeem de key bekend en wanneer iemand wordt uitgenodigd voor het project per e-mail. Volgens mij is daar weinig aan te doen? Of heeft iemand daar een geniale oplossing voor.
Dan zit ik nog met het dubbel opslaan om ruimte te besparen. Iets wat dropbox dus ook toepast, maar dan op een manier dat ze toegang hebben tot de un-encrypted data via een master-key. Maar volgens mij is dat ook niet anders mogelijk, en bijten de encryptie-eisen en het niet duplicaat opslaan elkaar.
Het zou bijvoorbeeld mogelijk zijn om een hash van het originele bestand op te slaan, dan zou ik kunnen herkennen dat een bestand dubbel is. Maar ik zou dat bestand niet kunnen gebruiken voor een andere user omdat ik niet de mogelijkheid heb om het bestand te decrypten. Dat lijkt me dus ook niet werken.
Ik vroeg me af, is dit eigenlijk wel mogelijk of zijn dit gewoon 4 punten die elkaar bijten. Misschien heeft iemand een geniale oplossing voor dit probleem.
Zoals once again loop ik weer eens met een hersenspinsel rond in mijn hoofd voor een project. Een systeem waar data opgeslagen wordt.
Hierin zijn er projecten waarin de bestanden staan. Vergelijkbaar met mappen. Een project kan meerdere mensen hebben die hier toegang tot hebben (via uitnodiging).
Dit systeem heeft de volgende eisen:
- Encrypted opslaan bestanden
- Duplicatie in data voorkomen (minder opslag ruimte, sneller uploaden van gelijke bestanden)
- Mogelijkheid om de data te delen met andere gebruikers van de service
- Ik / medewerkers moeten geen toegang hebben tot de un-encrypte data
Nu had ik het idee als volgt in mijn hoofd.
Encryptie
Elk bestand wat upgeload wordt ge-encrypt met een unieke key per project per lid. Deze key wordt dus per project gemaakt op het moment dat het project wordt aangemaakt. Deze key wordt ge-encrypt met het wachtwoord van de eigenaar. In dit geval hoef ik enkel de keys per file opnieuw te encrypten mocht de persoon zijn wachtwoord wijzigen.
Dit wachtwoord wordt uiteraard gehashed opgeslagen. Hierdoor kan ik dus niet bij de data van de gebruiker komen, immers weet ik het wachtwoord niet waarmee de key is ge-encrypted.
Wanneer de gebruiker inlogt wordt in zijn sessie elke key van zijn bestanden gedecrypt met zijn wachtwoord. Hierdoor kan hij dan de bestanden via deze key decrypten. Is de sessie verlopen worden deze keys weer uit het geheugen verwijderd.
Hierdoor kan ik theoretisch niet bij de data van de gebruiker, right? - Enkel op het moment dat de gebruiker in is gelogd zijn de keys immers beschikbaar -
Bestanden delen
In dit systeem kan je iemand anders uitnodigen voor het project, dit zal dan via een mail gaan alla: "Jantje nodigt je uit voor 'project-x'. Aangezien de gebruiker die op dat moment uitnodigt is de key voor het decrypten van dat project op dat moment bekend. Dit wordt dan in het mailtje verstuurd samen met het project-id. - Hier is dus ook de key dus ook tijdelijk bekend -
Wanneer iemand accepteerd wordt een voor deze persoon ook de key geencrypted met zijn wachtwoord en opgeslagen. Als er dus een project is met twee leden zijn de keys dus voor elke persoon encrypted opgeslagen met hun eigen wachtwoord.
Probleem
Volgens mij heb ik hiermee de punten 1,2 en 4 getackled, enkel op het moment dat iemand is ingelogd is voor het systeem de key bekend en wanneer iemand wordt uitgenodigd voor het project per e-mail. Volgens mij is daar weinig aan te doen? Of heeft iemand daar een geniale oplossing voor.
Dan zit ik nog met het dubbel opslaan om ruimte te besparen. Iets wat dropbox dus ook toepast, maar dan op een manier dat ze toegang hebben tot de un-encrypted data via een master-key. Maar volgens mij is dat ook niet anders mogelijk, en bijten de encryptie-eisen en het niet duplicaat opslaan elkaar.
Het zou bijvoorbeeld mogelijk zijn om een hash van het originele bestand op te slaan, dan zou ik kunnen herkennen dat een bestand dubbel is. Maar ik zou dat bestand niet kunnen gebruiken voor een andere user omdat ik niet de mogelijkheid heb om het bestand te decrypten. Dat lijkt me dus ook niet werken.
Ik vroeg me af, is dit eigenlijk wel mogelijk of zijn dit gewoon 4 punten die elkaar bijten. Misschien heeft iemand een geniale oplossing voor dit probleem.
Claude: "Domain patterns emerge from iteration, not generation." - Tweakers Time Machine Extension | Chrome : FF