cifrado de dos pasos

4

Considere el siguiente caso de usuario:

  1. Tengo algunos datos confidenciales (por ejemplo: número de tarjeta de crédito)
  2. Encripto estos datos y los almaceno en la base de datos
  3. Ahora quiero enviar estos datos a un usuario X, pero no quiero:

    1. Descifra estos datos antes de enviarlos
    2. Proporcione al usuario X mi clave utilizada para descifrar los datos almacenados

Me gustaría darle al usuario X su propia clave privada y usar una ronda de cifrado más en los datos encriptados antes de que se la envíe.

¿Existe un algoritmo de cifrado que cambie la clave de descifrado con cada ronda de cifrado subsiguiente? Algo que se parece a esto:

Ct = Encrypt(KeyA, Pt)   # I store Ct in the database

CtB = Encrypt(KeyB, Ct)  # I now encrypt it with different key and 
                         # send CtB along with a private key KeyC to the user
                         # KeyC is derived from KeyB

Pt = Decrypt(KeyC, CtB)  # the user can now use this KeyC to get the original data

Con esto, puedo crear diferentes textos cifrados para cada usuario, impidiéndoles compartir claves. Esto también significa que los datos nunca estarían en formato de texto simple en el servidor.

El caso de uso es solo teórico y sé que hay diferentes soluciones apropiadas para tal situación.

    
pregunta onlineapplab.com 03.12.2012 - 23:02
fuente

3 respuestas

1

Parece que lo que estás preguntando es probablemente matemáticamente posible, pero probablemente sería difícil (y tal vez imposible) encontrar una manera de hacerlo de tal manera que sea matemáticamente cierto y difícil de adivinar. Sospecho que es poco probable que encuentre un sistema existente que cumpla con sus especificaciones exactas, ya que no se me ocurre ningún caso de uso que no pueda manejarse de manera más efectiva utilizando aplicaciones mucho más simples de algoritmos criptográficos comunes.

Si tiene un caso particular en el que puede pensar que piensa que esto se manejaría y que de otra manera no podría manejarse, entonces tal vez publicar ese escenario de caso de uso (incluso si es teórico) ayudaría a responder mejor su pregunta. También podría valer la pena plantear la idea en Criptografía o incluso en Matemáticas, ya que tienden a tratar más con el lado matemático teórico de las cosas, si es allí donde residen tus intereses.

    
respondido por el AJ Henderson 04.12.2012 - 19:18
fuente
2

@AJ Henderson incluye una respuesta razonable; Voy a tratar de explicar con más claridad.

1) Su pregunta combina lo que desea hacer (almacenamiento seguro y transmisión) con la forma en que desea hacerlo (encriptación de dos pasos).

2) Si desea almacenar la información de forma segura, cifrada con una clave simétrica (elija una nueva clave simétrica para cada "cosa" que desea almacenar). Ahora cifre la clave simétrica con una clave pública y almacénela.

3) si quieres compartir la información: 3a) Descifre la clave simétrica y cifrada con la clave pública del destinatario. 3b) Envíe los datos cifrados junto con la clave simétrica cifrada por la clave pública del destinatario.

El destinatario (y solo el destinatario) puede usar su clave privada para descifrar la información. En ningún momento los datos se transmiten de forma clara.

Pienso que responde a lo que quieres que se haga, aunque cómo es diferente.

    
respondido por el Mark C. Wallace 04.12.2012 - 14:26
fuente
0

Primero, nunca debe almacenar datos cifrados con un sistema de clave pública / privada. La criptografía de clave pública / privada es mucho más costosa de usar y, en general, proporciona mucha menos seguridad para la longitud de la clave que se está utilizando y es mucho más intensiva en procesadores. Su mejor opción es cifrar una clave de almacenamiento de datos utilizando un sistema de clave pública / privada y usar la clave de almacenamiento de datos simétrica para su almacenamiento cifrado. Entonces es posible hacer lo que está buscando.

Encriptación, el servidor genera una nueva clave de almacenamiento de datos y cifra el número CC. La clave de almacenamiento de datos se cifra con la clave pública del servidor y se almacena. Cuando desea enviar los datos al usuario X, utiliza la clave privada del servidor para descifrar la clave de almacenamiento de datos y volver a cifrar la clave de almacenamiento de datos con la clave pública del usuario X. El usuario X ahora puede acceder a la clave de almacenamiento de datos simétricos en un estado cifrado y luego puede descifrarlos localmente para poder descifrar los datos cifrados simétricamente.

    
respondido por el AJ Henderson 03.12.2012 - 23:36
fuente

Lea otras preguntas en las etiquetas