Jetzt verfügbar:  Berichte für DRACOONMehr Infos

Verschlüsselter Datenraum mit direktem Download (passwortgesichert)

Kommentare

7 Kommentare

  • Avatar
    Mathias Schreiner

    Hallo Florian,

    um einen Download Share für eine verschlüsselte Datei zu erstellen, kommt man um einige Crypto-Operationen nicht herum. Es muss der eigene Filekey der Datei entschlüsselt, ein neues Keypair erstellt und der Filekey mit dem Public Key des neuen Keypairs verschlüsselt werden. Nähere Informationen zur Crypto findest du hier.

    Der grobe Ablauf sieht wir folgt aus:

    1. Eigenes Keypair holen:
      GET /v4/user/account/keypair
    2. Private Key mit eigenem Entschlüsselungskennwort entschlüsseln
    3. Eigenen Filekey der Datei holen:
      GET /v4​/nodes​/files​/{file_id}​/user_file_key
    4. Filekey mit entschlüsseltem Private Key aus Schritt 2 entschlüsseln
    5. Verwendete Crypto-Algorithmen abfragen:
      GET /v4/config/info/policies/algorithms
    6. Neues RSA-Keypair mit in Schritt 5 ermitteltem Keypair-Algorithmus erstellen, dessen Private Key wird mittels PKDF2 mit dem gewünschten Share-Passwort verschlüsselt.
    7. Entschlüsselten Filekey mit dem Public Key des in Schritt 6 erzeugten Keypairs verschlüsseln
    8. DownloadShare erstellen:
      POST /v4/shares/downloads
      Im Request Body wird das neue Keypair aus Schritt 6 und der verschlüsselte Filekey aus Schritt 7 mitgegeben. Das Passwort (aus Schritt 6) wird bei encrypted shares NICHT mitgeschickt, sondern dem gewünschten Empfänger auf anderem Wege mitgeteilt.

    Ich kenne mich mit PHP nicht aus, daher kann ich bei der Implementierung leider nicht unterstützen.

    Viele Grüße
    Mathias

    2
    Aktionen für Kommentare Permalink
  • Avatar
    Mathias Schreiner

    Wenn es die entsprechende API auf der Umgebung nicht gibt, dann lautet der zu verwendende Algorithmus für das Keypair RSA mit einer Länge von 2048 Bits.

    Viele Grüße,

    Mathias

    1
    Aktionen für Kommentare Permalink
  • Avatar
    Florian Scheuer

    Hallo Florian,

    am besten speicherst du den Private Key nach PKCS#8 ab – das verwendet bereits unter der Haube üblicherweise PBKDF2. Wenn deine Crypto-Lib dir ermöglicht, einen verschlüsselten Private Key nach PKCS#8 geschützt mit einem Passwort zu erzeugen, dann sollte das vermutlich schon passen.

    Mit PBKDF2 (password-based key derivation function 2, https://datatracker.ietf.org/doc/html/rfc8018) kann aus einem Passwort ein symmetrischer Schlüssel (z.B. AES) erzeugt werden. Damit wird bei uns der Private Key verschlüsselt.

    Beispiele für diesen Schritt findest du z.B. in unseren SDKs:

    C#: https://github.com/dracoon/dracoon-csharp-crypto-sdk/blob/0153bbb3911cc37604c3abdeb036291b4f11e285/DracoonCryptoSdk/Crypto.cs#L163

    Java: https://github.com/dracoon/dracoon-java-crypto-sdk/blob/854bc1a81f57c82839e33e6c272a8f4df8455580/src/main/java/com/dracoon/sdk/crypto/Crypto.java#L169

    Viele Grüße
    Florian

    1
    Aktionen für Kommentare Permalink
  • Avatar
    Christoph Dengler

    Hallo Florian,

    was mir als erstes immer einfällt, ist, dass man den Workflow einmal in der WebApp komplett durchführt. In den Entwicklertools des Browsers kann man dann ja jeweils nachvollziehen, welche Requests abgegeben werden und welche Responses zurückkommen.

    Die Simulation in der Webapp stellt auch sicher, dass man nicht wegen ganz banalen Dingen scheitert wie

    - Clientseitige Verschlüsselung ist im System nicht aktiviert

    - Agierender User darf nicht in dem Datenraum schreiben

    Was uns auch sicher helfen würde ist, bei welchem Request ein Problem auftaucht und welche Fehlermeldung zurückkommt.

    Schöne Grüße, Christoph Dengler

    0
    Aktionen für Kommentare Permalink
  • Avatar
    Florian Hansmann

    Vielen Dank für die Antwort. Generell funktioniert es, ich sehe auch die Uploads im verschlüsselten Raum. Bekomme aber beim Erzeuge des Downloads:

    {"code":400,"message":"Bad Request","debugInfo":"Password for encrypted Download Shares not allowed","errorCode":-50003}
    0
    Aktionen für Kommentare Permalink
  • Avatar
    Florian Hansmann

    Hallo Mathias,

    vielen dank, das hilft schon eine Menge!
    allerdings bekomme ich beim Abruf der verwendet Crypto-Algorithmen folgenden Fehler:

    "{"code":404,"message":"Not Found","debugInfo":"No handler found for GET /api/v4/config/info/policies/algorithms","errorCode":null}"

    Hast Du eine Idee?

    Nochmals vielen Dank

    Florian

     

    0
    Aktionen für Kommentare Permalink
  • Avatar
    Florian Hansmann

    Hallo Mathias,

    den größten Teil des Workflows haben wir entsprechend Deiner Übersicht implementiert.

    Der Download am Ende klappt allerdings noch nicht: Je nach Varianten in der unseren Aufrufen
    der Verschlüsselung bekommen wir beim Download entweder eine Meldung, das Passwort stimme nicht,
    oder eine Meldung, die angeforderte Datei könne nicht heruntergeladen werden.

    Wir vermuten die Probleme rund um den "Punkt 6", da verstehen wir nicht, was genau gemeint ist.


    In Zeile 6. steht "..dessen Private Key wird mittels PKDF2 mit dem gewünschten Share-Passwort verschlüsselt."

    Nach unserem Verständnis ist PKDF2 eine Hash-Funktion, mittels PKDF2 können wir also ein Passwort oder einen Key
    hashen, aber nicht das eine mit dem anderen verschlüsseln.

    Worauf soll PKDF2 angewendet werden? Und mit welcher Methode und mit welchen Credentials soll der Private Key vom
    neu erzeugten Schlüsselpaar verschlüsselt werden?

    VG

    Florian 

    0
    Aktionen für Kommentare Permalink

Bitte melden Sie sich an, um einen Kommentar zu hinterlassen.