security - tipos - topol m
¿Cuál es el mejor sistema criptográfico de misiles nucleares? (6)
Estás en un submarino y hay un mensaje encriptado que quieres leer. Dos personas deben usar sus claves al mismo tiempo para obtener el texto sin formato. ¿Cuál es la mejor primitiva criptográfica para usar? ¿Son adecuadas las siguientes dos implementaciones?
plain_text=decrypt(Key1 XOR key2,ciper_text,IV)
plain_text=decrypt(Key1,decrypt(key2,ciper_text,IV2),IV1)
(Suponga que AES-256-CBC con un bloque CMAC si le importa).
Al hacer XOR en las teclas, garantiza que cada bit de Key1 puede modificarse potencialmente con cada bit de Key2 (y viceversa). Significa que el titular de Key1 no tiene forma de calcular Key2 o el resultado de XORing Key1 / Key2.
Otra forma de decir esto es que el titular de Key1 tendría que aplicar fuerza bruta a cada combinación posible de bits para agotar el espacio de teclado disponible. El hecho de que ya tenga una de las llaves no lo ayuda en absoluto.
Hay otras maneras de combinar dos claves, pero un simple XOR es todo lo que se necesita cuando las teclas tienen la misma longitud.
Antes de pensar en soluciones, es probable que desee pensar en los requisitos. En el escenario dado, donde tiene dos personas que son necesarias para descifrar el mensaje, es razonable exigir que
- cada persona nunca ve la llave de la otra persona.
Después de todo lo que quiere evitar es que una persona simplemente elija un texto cifrado aleatorio, simule que esto acaba de entrar, ve la clave de la otra persona y luego nota que el texto cifrado debe haber sido un engaño. Este requisito hace que el descifrado con la opción 1 sea difícil. Dado que está utilizando un MAC, probablemente también desee que
- ambas personas están convencidas de que el mensaje descifrado es legítimo.
Esto parece descartar la opción 2. Después de todo, ¿cómo puede el titular de Key2 saber que el titular de Key1 descifró correctamente y no simplemente reemplazó el texto llano legítimo con uno de su elección.
Debo admitir que no conozco una buena solución para el escenario que describes. Un posible esquema podría verse así: El texto cifrado es tupla c1, c2, d1, d2, donde
c1 = EncryptAndMAC (Key1, Share1)
d1 = MAC (Key2, hash (Share1))
c2 = EncryptAndMAC (Key2, Share2)
d2 = MAC (Key1, Share2)
mensaje = Compartir1 XOR Compartir2
Ahora ambas claves son necesarias para encontrar el mensaje, ambas partes pueden descifrar sus acciones de forma independiente sin tener que compartir sus claves, y ambas partes pueden verificar que la otra parte lo haya descifrado correctamente. Por supuesto, este es un protocolo ad-hoc, por lo que es probable que me haya perdido algo.
Con esto, no veo cómo podría implementar el requisito de que dos personas de rango suficiente, juntas, puedan leer el mensaje ...
Aparte de eso: dependiendo del algoritmo de encriptación subyacente, tener la mitad de la clave XOR puede permitir que uno obtenga partes de la clave completa, lo que debilita significativamente la protección.
Por otra parte, IANAC :)
La segunda opción:
plain_text=decrypt(Key1,decrypt(key2,ciper_text,IV2),IV1)
no sigue el requisito de que ambas partes deben usar sus claves al mismo tiempo. Key2 debe usarse antes de Key1, pero una vez que eso sucede, la primera parte (el poseedor de Key1) puede esperar a descifrar hasta el momento de su elección, dejando a la segunda parte fuera del circuito. Esto puede o no ser un problema para la aplicación.
Como sugiere la cita de Schneier de Cocowalla, XOR funciona, a menos que una de las partes pueda obtener la clave combinada (el descifrador puede mantener este secreto) y la otra clave tiene otros usos. Si las claves no son estadísticamente independientes, la velocidad de XOR significa que el paso de combinación de teclas es vulnerable a la fuerza bruta guiada (el decrypt
sigue siendo un cuello de botella). Si las claves son independientes, entonces no hay necesidad de descifrar ninguna clave parcial, ni conocer una clave parcial ayuda a descubrir la clave combinada, por lo que un ataque de fuerza bruta también puede apuntar a la tecla combinada e ignorar las partes. Como caf menciona, calcular la otra clave parcial es discutible porque requiere la clave combinada; Además, solo puedes disparar las armas nucleares una vez. Si una clave solo se usa en combinación con la otra (y no reutilizamos las contraseñas para diferentes sistemas, ¿no?), XOR es seguro.
Hay un par de sistemas criptográficos que permiten que k-de-n claves descifren un mensaje cuando se usan simultáneamente, pero no recuerdo el término para ellos en mi cabeza, y mi copia de Applied Cryptography
isn '' t a la mano.
Editar: gracias a Cocowalla, el nombre del esquema es "esquema de umbral (m, n)". Para un ejemplo visual, lea " Segmentación visual y segmentación de complejidad de plano de bits " por Daniel Stoleru, publicado en Dr. Dobbs. La criptografía visual fue creada por Naor y Shamir, y presentada en EUROCRYPT ''94 (según Doug Stinson ).
Wikipedia enumera aún más ejemplos de intercambio secreto de k-out-of-n : el uso de n puntos, donde el secreto es un polinomio de grado k-1; utilizando k k-hiperplanes, donde el secreto es el punto de intersección.
XOR''ing the keys, mientras que el método simplista, puede no ser el mejor. No creo que la clave resultante sea lo suficientemente aleatoria: si alguien con la clave 1 pudo obtener la clave resultante, es posible que pueda obtener la clave 2.
Para agregar más complejidad a la mezcla, tal vez algún tipo de almohadilla de una sola vez sería un buen plan. Probablemente no sea una buena idea reutilizar claves para este tipo de sistema :)
Aquí hay un ejemplo de cuando reutilizar claves causaba problemas:
http://en.wikipedia.org/wiki/Venona_project
ACTUALIZAR
Acabo de quitarle el polvo a mi copia de la excelente criptografía aplicada de Bruce Schneier, y eché un vistazo a la sección 3.6 Secret Splitting. Es un escenario diferente, pero sugiere que simplemente las claves XOR con un mensaje son seguras:
Aquí hay un protocolo en el que Trent puede dividir un mensaje entre Alice y Bob:
(1) Trent genera una cadena de bits aleatorios, R, la misma longitud que el mensaje, M.
(2) Trent XORs M con R para generar S.
M ⊕ R = S
(3) Trent le da R a Alice y S a Bob.
Tenga en cuenta que no dice nada sobre si esto podría ser adecuado para proteger un sistema de lanzamiento de misiles;)
XORing dos claves generadas al azar juntas para obtener el secreto final es seguro. La forma general de esto se conoce como " intercambio secreto ", y existen algoritmos seguros que le permiten generar esquemas "m of n", donde genera n recursos compartidos, y cualquier m es suficiente para deducir la clave original.
El esquema más conocido es Shamir''s Secret Sharing , y consiste en generar un polinomio de grado aleatorio m-1 con la clave como constante, luego muestrearlo en n ubicaciones y dárselo a los individuos como partes clave.