Curve25519xsalsa20poly1305 derivazione chiave

1

Sto lavorando sulla crittografia batch di file, per un mio piccolo progetto. I file vengono archiviati crittografati su un'unità rimovibile e le chiavi vengono archiviate su un server affidabile. Per una maggiore sicurezza, mi piacerebbe usare UN tasto per UN file. I file sono criptati usando NaCl / libsodium's "sealed_box" (Curve25519xsalsa20poly1305).

Ogni volta che il client aggiunge un file all'unità, viene crittografato utilizzando una chiave pubblica, generata con fun1(masterPublicKey, seed) . Il seed è esso stesso generato deterministicamente da un insieme di attributi di file non variabili, e masterPublicKey è, beh, una chiave pubblica che appartiene al client e viene riutilizzata per tutti i file appartenenti a questo client.

Ogni volta che il client richiede la decrittografia per un file, il seed viene inviato al server. Raccoglie quindi la chiave privata del client e chiama fun2(privateKey, seed) per ottenere una chiave privata derivata. Questa chiave viene inviata al client, che ora può decifrare il file che desiderava, ma NONE degli altri file.

On the server (decryption): [master private key] \ \ / seed from client \ / \ fun(privateKey, seed) -> derived private key On the client (encryption): [master public key] \ \ / getSeed(attributes) \ / \ fun(publicKey, seed) -> derived public key

Se sei esperto di bitcoin, pensa BIP32 ma per la crittografia.

Come ottenere una cosa del genere? C'è anche un modo per farlo?

    
posta Perceval 17.10.2015 - 08:32
fonte

0 risposte

Leggi altre domande sui tag