security - vernam - xor criptografia
¿Qué pasa con el cifrado XOR? (12)
Escribí un programa corto en C ++ para hacer el cifrado XOR en un archivo, que puedo usar para algunos archivos personales (si se resquebraja no es gran cosa, solo estoy protegiéndome contra los espectadores casuales). Básicamente, tomo una contraseña ASCII y repetidamente XOR la contraseña con los datos en el archivo.
Ahora tengo curiosidad: si alguien quisiera descifrar esto, ¿cómo lo harían? ¿Llevaría mucho tiempo? ¿Depende de la longitud de la contraseña (es decir, cuál es la gran O)?
Solo estoy protegiendo contra los espectadores casuales
Mientras suceda esta suposición, su esquema de cifrado está bien. Las personas que piensan que Internet Explorer es "los internets" no son capaces de romperlo.
Si no, solo usa alguna biblioteca de cifrado. Ya hay muchos buenos algoritmos como Blowfish o AES para crypto simétrico.
¡RC4 es esencialmente un cifrado XOR! Al igual que muchos cifrados de flujo: la clave es la clave (¡sin juego de palabras!) NUNCA debe reutilizar la llave. ¡NUNCA!
Además de los puntos ya mencionados, el cifrado XOR es completamente vulnerable a los ataques conocidos de texto plano:
cryptotext = plaintext XOR key
key = cryptotext XOR plaintext = plaintext XOR key XOR plaintext
donde XORring los textos planos se anulan mutuamente, dejando solo la clave.
No ser vulnerable a ataques conocidos de texto plano es una propiedad requerida pero no suficiente para cualquier método de cifrado "seguro" donde la misma clave se usa para más de un bloque de texto sin formato (es decir, un bloc de un solo uso sigue siendo seguro).
El antivirus de Norton solía usar una técnica de uso de la letra no encriptada anterior como clave para la siguiente letra. Eso me tomó una media hora más para averiguarlo, si no recuerdo mal.
Si solo quieres detener al espectador casual, es suficiente; Solía ocultar cadenas dentro de ejecutables. Sin embargo, no resistirá 10 minutos a cualquiera que lo intente.
Dicho todo esto, en estos días hay métodos de encriptación mucho mejores disponibles, entonces ¿por qué no aprovechar algo mejor? Si está tratando de esconderse del usuario "casual", incluso algo como gzip haría mejor ese trabajo.
El cifrado XOR puede ser razonablemente * fuerte si se cumplen las siguientes condiciones:
- El texto sin formato y la contraseña tienen aproximadamente la misma longitud.
- La contraseña no se reutiliza para encriptar más de un mensaje.
- La contraseña no puede ser adivinada, IE por diccionario u otro medio matemático. En la práctica, esto significa que los bits están asignados al azar.
* Razonablemente fuerte significa que no se puede romper por medios triviales y matemáticos, como en la publicación de GeneQ. Todavía no es más fuerte que tu contraseña.
El objetivo de una buena encriptación es hacer matemáticamente difícil descifrar sin la clave.
Esto incluye el deseo de proteger la clave en sí.
La técnica XOR es básicamente una cifra muy simple que se rompe fácilmente como se describe aquí.
Es importante tener en cuenta que XOR se usa dentro de algoritmos criptográficos .
Estos algoritmos trabajan en la introducción de la dificultad matemática a su alrededor.
El problema con el cifrado XOR es que para tiradas largas de los mismos caracteres, es muy fácil ver la contraseña. Esas ejecuciones largas suelen ser espacios en archivos de texto. Digamos que su contraseña es de 8 caracteres, y el archivo de texto tiene 16 espacios en alguna línea (por ejemplo, en el medio de la tabla de gráficos ASCII). Si solo usa XOR con su contraseña, verá que la salida tendrá secuencias repetitivas de caracteres. El atacante simplemente buscaría algo así, trataría de adivinar el carácter en el archivo original (el espacio sería el primer candidato para intentarlo) y derivaría la longitud de la contraseña de la longitud de los grupos que se repiten.
Los archivos binarios pueden ser aún peores ya que a menudo contienen secuencias repetidas de 0x00
bytes. Obviamente, XORing con esos es no-op, por lo que su contraseña será visible en texto plano en la salida. Un ejemplo de un formato binario muy común que tiene largas secuencias de nulos es .doc
.
Ese "> 6%" menciona GeneQ es el índice de coincidencia para el texto telegráfico en inglés: 26 letras, con puntuacion y numerales detallados. El valor real para textos largos es 0.0665.
El <4% es el índice de coincidencia para texto aleatorio en un alfabeto de 26 caracteres, que es 1/26 o 0.385.
Si usa un idioma diferente o un alfabeto diferente, los valores específicos serán diferentes. Si está utilizando el conjunto de caracteres ASCII, Unicode o bytes binarios, los valores específicos serán muy diferentes. Pero la diferencia entre el IC de texto plano y el texto aleatorio generalmente estará presente. (Los binarios comprimidos pueden tener IC muy cercanos a los de aleatorio, y cualquier archivo cifrado con cualquier cifrado de computadora moderno tendrá un IC que es exactamente eso de texto aleatorio).
Una vez que ha XORed el texto en contra de sí mismo, lo que le queda es equivalente a un cifrado autokey. Wikipedia tiene un buen ejemplo de romper ese cifrado
Estoy de acuerdo con explanation de las debilidades de XOR. Para aquellos que estén interesados, aquí hay una descripción general básica del algoritmo estándar utilizado para romper el cifrado XOR trivial en pocos minutos:
Determine por cuánto tiempo es la clave. Esto se hace mediante el uso de XORing de los datos cifrados consigo mismo, se desplazan varios números de lugares y se examinan cuántos bytes son iguales.
Si los bytes que son iguales son mayores que un cierto porcentaje (6% de acuerdo con la segunda edición de Bruce Schneier Applied Cryptography ), entonces ha cambiado los datos por un múltiplo de la longitud de la clave. Al encontrar la cantidad más pequeña de desplazamiento que da como resultado una gran cantidad de bytes iguales, se encuentra la longitud de la clave.
Cambie el texto de cifrado por la longitud de la clave, y XOR contra sí mismo. Esto elimina la clave y te deja con el texto plano XORed con el texto claro cambiado la longitud de la clave. Debe haber suficiente texto sin formato para determinar el contenido del mensaje.
Obtenga más información en Encryption Matters, Part 1
Formas de hacer que XOR funcione:
Use múltiples claves con cada longitud de clave igual a un número primo pero nunca la misma longitud para las claves. Use el nombre del archivo original como otra clave, pero recuerde crear un mecanismo para recuperar el nombre del archivo. A continuación, cree un nuevo nombre de archivo con una extensión que le permitirá saber que se trata de un archivo cifrado. El motivo por el que se utilizan varias claves de la longitud del número primo es porque hacen que la clave XOR resultante sea la clave A veces clave B de la longitud antes de que se repita. Comprima cualquier patrón de repetición fuera del archivo antes de cifrarlo. Genere un número aleatorio y XOR este número cada X Desplazamiento (Recuerde, este número también debe poderse recrear. Podría usar una SEMANA ALEATORIA de la Longitud de archivo.
Después de hacer todo esto, si usa 5 claves de longitud 31 y superior, ¡terminaría con una longitud de clave de aproximadamente Cien Megas!
Para claves, Filename es uno (incluyendo la ruta completa), STR (Tamaño de archivo) + STR (Fecha de archivo) + STR (Fecha) + STR (Hora), Clave de generación aleatoria, Su nombre completo, Una clave privada creada una vez.
Una base de datos para almacenar las claves utilizadas para cada archivo cifrado, pero mantenga el archivo DAT en una memoria USB y NO en la computadora.
Esto debería evitar el patrón repetitivo en archivos como Imágenes y Música, pero las películas, con cuatro conciertos de duración o más, aún pueden ser vulnerables, por lo que pueden necesitar una sexta clave.
Personalmente, tengo el archivo dat encriptado en la tarjeta de memoria (archivo Dat para su uso con Microsoft Access). Utilicé un método de 3 teclas para encriptarlo porque nunca será TAN grande, ya que es un directorio de los archivos con las claves asociadas.
El motivo de las claves múltiples en lugar de generar aleatoriamente una clave muy grande es que las primos multiplicadas por los tiempos aumentan rápidamente y tengo cierto control sobre la creación de la clave y SABES que realmente no existe un número verdaderamente aleatorio. Si creé un número aleatorio grande, alguien más puede generar ese mismo número.
Método para usar las teclas: Cifre el archivo con una clave, luego la siguiente, luego la siguiente hasta que se utilicen todas las claves. Cada clave se usa una y otra vez hasta que todo el archivo se cifra con esa clave.
Debido a que las claves son de diferente longitud, la superposición de la repetición es diferente para cada tecla y, por lo tanto, crea una clave derivada de la longitud de la clave una vez, clave dos. Esta lógica se repite para el resto de las teclas. La razón para los números primos es que la repetición ocurriría en una división de la longitud de la clave por lo que desea que la división sea 1 o la longitud de la clave, hense, prime.
OK, concedido, esto es más que un simple XOR en el archivo, pero el concepto es el mismo.
Lanza
Llego un poco tarde para responder, pero como nadie lo ha mencionado aún, esto se llama cifrado Vigenère.
Wikipedia da una serie de ataques de criptoanálisis para romperlo; Aún más simple, sin embargo, dado que la mayoría de los formatos de archivos tienen un encabezado fijo, sería para XOR el encabezado de texto sin formato con el encabezado encriptado, que le da la clave.
Otro truco es generar un hash md5 () para su contraseña. Puede hacerlo aún más único utilizando la longitud del texto protegido como un desplazamiento o combinándolo con su contraseña para proporcionar una mejor distribución de frases cortas. Y para frases largas, desarrolle su hash md5 () combinando cada bloque de 16 bytes con el hash anterior, haciendo que toda la clave XOR sea "aleatoria" y no repetitiva.