Curve25519xsalsa20poly1305 derivación de clave

1

Estoy trabajando en el cifrado por lotes de archivos, para un pequeño proyecto mío. Los archivos se almacenan cifrados en una unidad extraíble y las claves se almacenan en un servidor confiable. Para mayor seguridad, me gustaría usar UNA tecla para UNA archivo. Los archivos se cifran utilizando la "caja sellada" de NaCl / libsodium (Curve25519xsalsa20poly1305).

Cada vez que el cliente agrega un archivo a la unidad, se cifra mediante una clave pública, generada con fun1(masterPublicKey, seed) . El seed se genera de manera determinista a partir de un conjunto de atributos de archivo no variables, y el masterPublicKey es, bueno, una clave pública que pertenece al cliente y se reutiliza para todos los archivos que pertenecen a este cliente.

Cada vez que el cliente solicita el descifrado de un archivo, el seed se envía al servidor. Luego recopila la clave privada del cliente y llama a fun2(privateKey, seed) para obtener una clave privada derivada. Esta clave se envía al cliente, que ahora puede descifrar el archivo que quería, pero NINGUNO de los otros archivos.

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

Si conoces bitcoin, piensa en BIP32 pero para el cifrado.

¿Cómo lograr tal cosa? ¿Hay incluso una manera de hacer esto?

    
pregunta Perceval 17.10.2015 - 08:32
fuente

0 respuestas

Lea otras preguntas en las etiquetas