2012-09-11 10 views
9

¿Existe alguna implementación de encriptación javascript que incluya una negación plausible?implementación de javascript de cifrado, incluida la denegación plausible

quiero algo que exhiben las características descritas aquí: http://en.wikipedia.org/wiki/Deniable_encryption

cifrado negable permite al remitente de un mensaje cifrado a denegar el envío de ese mensaje. Esto requiere un tercero confiable. Un posible escenario funciona así:

  1. Alice es la esposa de Bob, quien sospecha que su esposa está involucrada en adulterio. Ella quiere comunicarse con su amante secreto Carl. Ella crea dos llaves, una destinada a mantenerse en secreto, la otra destinada a ser sacrificada. Ella le pasa la llave secreta (o ambas) a Carl.
  2. Alice crea un mensaje inocua M1 para Carl (destinado a ser revelado a Bob en caso de descubrimiento) y una incriminatoria carta de amor M2 para Carl. Ella construye un C de texto de cifrado de ambos mensajes M1, M2 y se lo envía por correo electrónico a Carl.
  3. Carl usa su clave para descifrar M2 (y posiblemente M1, para leer el mensaje falso también).
  4. Bob descubre el correo electrónico a Carl, sospecha y obliga a Alicia a descifrar el mensaje.
  5. Alice usa la tecla sacrificial y revela el mensaje inocuo M1 a Bob. Como Bob no conoce la otra clave, debe asumir que no hay otro mensaje M2.
+0

Esto probablemente pertenece a: http://programmers.stackexchange.com/ –

+0

@Diodeus, [o tal vez no] (http://meta.programmers.stackexchange.com/questions/1624/are-im-looking- for-x-questions-on-topic). –

+0

¿Cuál es exactamente tu caso de uso? – Philipp

Respuesta

-1

Interesante pregunta. Hay bibliotecas criptográficas Javascript por ahí here y here pero su caso de uso no requiere que implemente esto en Javascript, y probablemente sea mejor que use otro idioma.

¿Por qué? El cifrado denegable es una forma de seguridad que requiere de seguridad por oscuridad, por definición, por lo que implementarlo usando un lenguaje de script probablemente no sea la mejor manera de hacerlo (cualquiera puede ver los detalles de su implementación). Escríbelo en un lenguaje poderoso, computacionalmente poderoso y enciérrelo en un servidor en alguna parte.

+3

La encriptación denegable no debería requerir un algoritmo oscuro, con los datos y el algoritmo, el atacante aún no debería saber si hay un segundo/tercer/cuarto mensaje supersecreto escondido allí. –

+0

No me refiero a algoritmo oscuro, me refiero a arquitectura oscura. –

0

Hay muchas bibliotecas de Javascript que proporcionan primitivas criptográficas, pero nunca he oído hablar de ninguna que incluya una negación plausible.

Puede implementar un esquema de cifrado similar al utilizado por TrueCrypt. Está limitado a solo 2 conjuntos de datos encriptados: los datos señuelo y los datos verdaderamente secretos. Pero su diseño es bastante simple, así que si no necesitas más de 2 conjuntos de datos, ve por ello. Puede modificarlo para permitir más de 2 conjuntos, pero no puede ser "dinámico".

Se explica en detalle en TrueCrypt documentation page, pero el principio básico es que los datos cifrados contienen encabezados de ancho fijo para cada conjunto de datos. El encabezado incluye información sobre su conjunto de datos. En la mayoría de los escenarios básicos, solo se compensaría el inicio del conjunto de datos en todo el bloque cifrado, la longitud de ese conjunto de datos y algún valor canario utilizado para verificar si el encabezado se descifró satisfactoriamente. Cuando el usuario proporciona una contraseña, el sistema intenta descifrar el 1er encabezado, si falla lo intenta con el siguiente encabezado, hasta que tenga éxito o no queden encabezados. Si tiene éxito, descifra los bytes especificados en el encabezado.

Este esquema fue diseñado para el cifrado del sistema de archivos, por lo que tendría un gran defecto cuando se usa en su sistema: cuando el adversario lo obliga a revelar la clave de los datos señuelo, preguntará por qué su tamaño es más pequeño que el tamaño bloque encriptado completo

Cuestiones relacionadas