Cifrado XOR con clave

0

EDITAR: por favor pase a crypto (me he dado cuenta de que es la incorrecta y "Solo puede publicar una vez cada 40 minutos")

Supongamos que le doy una clave suficientemente larga de manera segura (en persona) a Alice.

Le envié un archivo que está XORed con la clave que inicialmente le di. En el archivo, contiene el mensaje y una clave nueva, lo suficientemente larga.

Luego, Alice crea un archivo y XOR con la clave que se encuentra en mi mensaje. (El archivo de Alice contiene su mensaje y una nueva clave)

¿Qué debilidades hay con este enfoque? (Supongamos también que rellenamos todos los mensajes con bytes aleatorios de modo que el archivo tenga un tamaño de 100 KiB)

    
pregunta stewpid 10.11.2017 - 03:15
fuente

1 respuesta

6

Lo que estás describiendo es la versión de movimiento perpetuo de una almohadilla de una sola vez. No funciona El espacio que tiene para compartir el siguiente pad se acorta con cada mensaje. Cualquier bit dado en un pad de una sola vez solo se puede usar para cifrar un bit de mensaje.

Digamos que le dio una almohadilla de 100KB ("clave") a Alice. Entonces le envías un archivo de 50KB; Esto requiere 50KB de tu pad. Puede, si lo desea, utilizar los últimos 50 KB para enviar un nuevo pad. *

Alice ahora tiene solo 50KB de pad que nunca se han utilizado (los 50KB que se enviaron bajo el cifrado del pad original, después del archivo). Ella quiere enviarle un mensaje de 30 KB, por lo que lo cifra con el teclado que nunca usó y luego usa el resto de ese teclado (otro valor de 20 KB) para enviarle un nuevo teclado aleatorio. El resto del mensaje se completa con bytes aleatorios para que tengan la misma longitud que el primer mensaje.

Si Alicia intentara usar esos 50 KB para algo real (como más material clave), tendría que reutilizar parte de una almohadilla que ya se había usado, violando la naturaleza "única" de la almohadilla. y pasarlo de "teóricamente irrompible" a "asignación de tareas de pregrado en la primera semana de la clase" (suponiendo que el nuevo material clave se haya utilizado alguna vez como una libreta de "una sola vez").

Ahora solo tienes 20KB de pad que nunca se han utilizado. Esto es después de intercambiar 80KB de mensajes reales. No es una coincidencia que estos números sumen los 100 KB originales de la almohadilla que intercambió inicialmente. No puede agregar entropía adicional (aleatoriedad / números impredecibles) en el sistema, excepto mediante el intercambio de otras claves.

* Como puede haber notado, no hay razón para quemar 50KB, 20KB, o lo que sea de una sola vez, enviando una nueva almohadilla de una sola vez. La cantidad de material clave nuevo transportado es la misma que la cantidad de material clave antiguo inutilizado. También puede no usar la parte restante del teclado original hasta que lo necesite para el contenido del mensaje real.

Los algoritmos criptográficos modernos, que son mucho más complicados que XOR (aunque pueden usar XOR como parte del esquema criptográfico completo), tienen formas de "estirar" una clave para poder cifrar los datos por más tiempo que ellos mismos, sin exponer la clave (incluso indirectamente) como lo hace XOR. Esto es, por ejemplo, cómo funcionan todos los cifrados de flujo; toman una clave, y desde esa clave pueden producir un flujo casi infinitamente largo de valores pseudoaleatorios (es decir, parecen aleatorios si no saben de qué se generan) que pueden usarse para el cifrado y descifrado (vía XOR). El hecho de que nunca puedas reutilizar ninguna parte de ese flujo no es un gran problema; es posible que sea súper largo, y potencialmente puedes enviar otra clave, que se estirará a una larga secuencia, si te acercas al final. La seguridad total de este esquema solo es (en el mejor de los casos) tan buena como la clave original; si la clave original solo tenía 40 bits de longitud, por ejemplo, solo tomará un poco más de un trillones intenta descubrir cómo descifrar el mensaje completo, incluida la clave utilizada para el siguiente bit, pero con claves suficientemente largas (más de 128 bits) eso es generalmente aceptable.

Vale la pena señalar que incluso los sistemas de cifrado modernos no son necesariamente tan fuertes como su longitud de clave implica. Por ejemplo, recientemente se encontró que el cifrado de flujo RC4 (que utiliza claves de 128 bits) es rompible (al menos para la primera parte del mensaje) si puede capturar algunos millones o miles de millones de bytes de mensajes (más algunas conjeturas) y, compruebe, con más conjeturas necesarias para menos datos capturados). Esto se debe a que se encontró que la "secuencia de claves" (los datos tipo pseudoaleatorios de una sola vez que se generan a partir de una clave dada) no son lo suficientemente aleatorios; tiene sesgos (un bit dado no es igualmente probable que sea cero o uno) que podría descubrirse al examinar suficiente texto cifrado donde se conoce el texto sin formato correspondiente, y usar el conocimiento de esos sesgos para romper el cifrado en el texto cifrado cuyo texto en claro es < em> no conocido.

    
respondido por el CBHacking 10.11.2017 - 05:15
fuente

Lea otras preguntas en las etiquetas