Cómo generar una superclave para descifrar cadenas

1

Estoy trabajando en una aplicación donde los usuarios tienen una clave o contraseña generada por mí que se utiliza para cifrar una cadena. Cada usuario tiene su clave personal, y ningún usuario debe poder descifrar la cadena de otro usuario.

¿Cómo generar una "superclave", que podría descifrar las cadenas cifradas por la clave de todos los usuarios? Soy nuevo en criptografía, así que si pudiera tener un poco de ayuda.

EDITAR: Para ser más claro:

  • Alice encripta una cadena con su Clave: Ka
  • Bob cifra una cadena con su clave: Kb
  • Alicia debería poder descifrar su cadena
  • Bob debería poder descifrar su cadena
  • John, el superusuario, debería poder descifrar la cadena de Alice y Bob
pregunta Stéphane GROSSMANN 25.07.2014 - 11:36
fuente

2 respuestas

4

Ya que genera las claves específicas del usuario, también puede guardar una copia de estas claves en algún lugar (en algún lugar seguro , preferiblemente) y usarlas cuando sea necesario.

Alternativamente, puede generar las claves con un sistema de derivación criptográfica que usa una "superclave" y la identidad del usuario. Por ejemplo, considere lo siguiente:

  • La superclave es K .
  • Un usuario se identifica por su nombre / inicio de sesión / correo electrónico u .
  • La clave para el usuario u se calcula como: Ku = HMAC K ( u )

I.e. utiliza HMAC , usando K como clave, para calcular la clave específica del usuario. Dado que HMAC es determinista, siempre puede hacer el mismo cálculo nuevamente, siempre que conozca la "superclave".

Por supuesto , la "superclave" es sensible; nunca debe ser conocido por nadie más que el superadmin. En particular, NO DEBE "ocultar" la superclave dentro de algún código de aplicación que vaya a la máquina del usuario. Esto puede ser un problema si se supone que la generación de la clave de usuario suceda en la máquina del usuario (es decir, lo hace "usted" en el sentido de que es "su aplicación", pero aún en la computadora o teléfono inteligente del usuario, por lo tanto dentro del rango de ingeniería inversa ).

Este mecanismo basado en HMAC es, en realidad, un tipo de método de compresión eficiente para el mismo modelo inicial, es decir, se guarda una copia de las claves de los usuarios. (Si esa frase te parece poco clara, entonces no sabes lo suficiente (aún) para tratar con seguridad la criptografía).

    
respondido por el Tom Leek 25.07.2014 - 14:29
fuente
-1

La única forma en que puedo pensar es usar claves asimétricas.

  1. Genere un par de claves asimétricas K S en el servidor. Conserve la clave privada de este par y entregue la clave pública a cada usuario.
  2. Genere un par de claves asimétricas K C para cada usuario. Permita que el usuario retenga las claves privadas de sus pares y envíe las claves públicas al servidor.
  3. Cada vez que el servidor tiene que enviar algo a un usuario específico, primero lo cifra utilizando su clave privada y luego la clave pública del usuario. Luego, el usuario descifra los datos primero con su clave privada y luego con la clave pública del servidor.
  4. Cada vez que un usuario tiene que enviar algo al servidor, lo cifra con su clave privada primero y luego con la clave pública del servidor. Luego, el servidor descifra los datos con su clave privada, seguido de la clave pública del usuario.

Deberá asegurarse de que las claves públicas de los usuarios estén bien protegidas en el servidor. Si hay una falla en el servidor y las claves (la clave privada del servidor y las claves públicas de los usuarios) se filtran, cualquiera podrá leer los datos de cualquiera.

Si desea cambiar el par de claves de su servidor, puede generar un nuevo par de claves y distribuir su clave pública a los usuarios. Tendrá que manejar las versiones clave (los datos se cifraron con qué clave). De manera similar, los usuarios pueden cambiar su par de claves y enviar claves públicas actualizadas al servidor.

    
respondido por el manish 25.07.2014 - 12:14
fuente

Lea otras preguntas en las etiquetas