¿Cómo implemento el cifrado Multikey? [cerrado]

0

Estoy buscando un algoritmo, mediante el cual puedo cifrar un dato con n claves y para descifrar puedo usar cualquiera de ellos.

Creo que recuerdo que Bitcoin usó algo similar para los bloques, pero ahora no puedo encontrar algo para usar.

    
pregunta Esloop 17.01.2017 - 16:09
fuente

3 respuestas

2

Es bastante fácil:

  1. Genere una clave maestra con la que cifrar los datos.
  2. Genere una clave de usuario para cada usuario que desee poder descifrar los datos.
  3. Cifre la clave maestra con cada una de las claves de usuario y almacene todos los resultados cifrados.
  4. Cuando desee descifrar, use la clave del usuario para descifrar el registro de clave maestra cifrada y úselo para descifrar los datos.

Si está usando claves de 128 bits con AES, simplemente puede usar AES directamente sin un modo de bloqueo (ECB si se fuerza) para cifrar la clave maestra con cada clave de usuario, porque la clave encaja perfectamente en un solo bloque tamaño. Si está utilizando claves de 256 bits, debe usar un modo de bloqueo como CBC y almacenar el IV junto con cada registro para el descifrado.

Tenga en cuenta que este esquema no permite que se revoque de forma segura el acceso de un usuario sin volver a cifrar completamente los datos, ya que un usuario malintencionado podría conservar una copia de la clave maestra. Además, esto no se escalará muy bien para muchos y muchos usuarios (por ejemplo, miles), ya que su conjunto de claves termina siendo muy grande.

Para cifrar los archivos, recomiendo AES-CBC si la manipulación no es un problema. Puede almacenar el IV en el claro con los datos del archivo. Si la manipulación es una preocupación, debería considerar un modo AEAD que evite la manipulación significativa de los datos del archivo.

    
respondido por el Polynomial 17.01.2017 - 16:28
fuente
0

Quiero decir, TrueCrypt lo hace simplemente cifrando un mensaje corto que contiene una clave maestra debajo de N otras claves; entonces cualquiera de esas claves puede potencialmente descifrar la clave maestra que puede descifrar la carga útil. Si la clave maestra es de 128 bits, entonces también es el tamaño de bloque para una gran cantidad de cifrados de bloque y ni siquiera necesita un modo de cifrado, aunque probablemente desearía un modo de cifrado autenticado solo en los principios generales. (Incluso si utiliza un modo de encriptación automática para la carga útil, ¿realmente no desea perder N * 128 bits por adelantado a cambio de descifrar la carga útil potencialmente de muchos megabytes N veces para ver si su elección fue correcta? No, almacenamiento es barato: solo haga N encriptaciones automáticas de la clave maestra bajo claves diferentes, luego encripte automáticamente la carga útil para que sepa que no se desordenó en la transmisión.)

Si eso no funciona para usted, entonces tiene limitaciones de diseño que no ha comunicado y tendríamos que saberlas. Por ejemplo, si "entonces cualquiera de las partes puede hacer un cambio a la carga útil en vuelo, ¡eso no es lo que quería!" entonces podemos arreglar eso; en cada sección de clave maestra cifrada, también almacene un HMAC de la carga útil cifrada bajo su clave o la clave maestra.

    
respondido por el CR Drost 17.01.2017 - 16:17
fuente
0

Esto podría implementarse según la respuesta anterior o con Secret Sharing, como Shamir's Secret Sharing. Wikipedia tiene un buen artículo , pero desea que aparezca el 1 < t < n caso: donde t es el número de teclas necesarias para desbloquear y n es el número total de teclas. Haría el t = 2, n = 2 * número de "claves" que desea, y contaría cada "clave" como dos porciones clave de Shamir 's esquema.

La razón por la que cada "clave" que quieres son dos partes clave es porque los esquemas de intercambio secretos normalmente no manejan el caso t = 1 (porque normalmente si quieres que cualquiera de las claves de la gente pueda desencriptar, simplemente dar a todos la misma clave).

    
respondido por el crovers 17.01.2017 - 16:24
fuente

Lea otras preguntas en las etiquetas