Soy un principiante en criptografía. Diseñé un algoritmo de cifrado-descifrado basado en contraseña, que utiliza una sal aleatoria y una contraseña para cifrar un mensaje. Estoy usando SHA-512 para hash, operaciones matriciales para mezclar, XOR bit a bit para mezclar datos y recuperar. La longitud de la sal y el texto cifrado es de 256 letras.
Que yo sepa, el efecto de avalancha significa que un ligero cambio en cualquiera de los siguientes:
- cifrado
- contraseña
- salt
debe cambiar la salida drásticamente.
En mi implementación, si cambio la sal o el cifrado, no veo grandes cambios en mi producción. Sin embargo, cuando hay un pequeño cambio en la contraseña, la salida cambia drásticamente.
Entonces, mis preguntas:
- ¿Mi comprensión del efecto de avalancha en general es correcta? Si no es así, ¿qué debería ser?
- ¿Qué puedo hacer para producir mejor el efecto de avalancha en mi (o cualquier otro) cifrado? ¿Debo reducir menos la longitud de la sal y generar un texto cifrado más pequeño para crear un efecto de avalancha? Si no es así, ¿cómo puedo lograrlo?
Comentarios
- Por curiosidad, ¿para qué estás usando el hash?
- Bienvenido a Cryptography Stack Exchange. @Avinash, su pregunta se migró aquí porque está más relacionada con el tema aquí que en Stack Overflow. Registre su cuenta aquí para poder comentar y aceptar una respuesta.
- Si desea alguna respuesta constructiva, debe mostrar cómo funciona su cifrado actualmente (en fórmulas matemáticas, preferiblemente). Entonces podemos echar un vistazo para ver cómo mejorarlo.
- He ‘ he eliminado comentarios del tipo » don ‘ t diseñe su propio cifrado » – aquí en crypto it ‘ s perfectamente aceptable para intentarlo, aunque debe comprender que todo es bajo su propio riesgo, por supuesto 🙂 Yo ‘ también he editado un poco la pregunta para centrarme más en el efecto de avalancha en ausencia de las construcciones de cifrado relevantes. Si alguien siente que eso es innecesario, no dude en retroceder o mejorar lo que ‘ he hecho.
Responder
No se moleste en cambiar el algoritmo de cifrado real. Lea acerca del principio de Kerckhoffs : debe solo cambie cosas como la clave y el IV, no el algoritmo real.
Para probar su avalancha, gire un bit en su clave. Eso debería cambiar aproximadamente la mitad de los bits en su salida.
Para el diseño de cifrado, ya se ha sugerido Criptografía aplicada . Además de eso, debe considerar la introducción de Difusión y Confusión en su algoritmo. También vale la pena estudiar los algoritmos existentes para ver cómo funcionan. Comencé diseñando mi propio cifrado Feistel simple, de esa manera gran parte de la estructura circundante ya está hecha para ti. También simplifica el diseño, ya que la función F no tiene que ser invertible. Eso le permite mucha más flexibilidad en esa área.
La advertencia sobre no usar su propio diseño para otra cosa que no sea un ejercicio de aprendizaje es buena.
Comentarios
- Muchas gracias ….
- El cifrado / cifrado es algo del Reino Unido / EE. UU.
Respuesta
Creo que es fantástico que esté creando su propio algoritmo de cifrado y descifrado. De esa forma, aprenderá mucho sobre criptografía. Hasta ahora, todos los que crean un El algoritmo de cifrado-descifrado criptográfico crea algo horriblemente defectuoso de una forma u otra, muy educativo, la primera vez.
Terminología
Si entiendo tu pregunta correctamente, tienes un pregunta razonable sobre el efecto de avalancha, pero la mayoría de las personas en este sitio están tan confundidas acerca de su terminología no estándar que ni siquiera pueden entender lo que está preguntando.
Si comprendo correctamente su pregunta, está construyendo un sistema de cifrado y descifrado que toma texto plano como entrada, almacena datos como archivos cifrados y luego permite que alguien con la contraseña correcta descifre esos archivos almacenados y recupere texto plano descifrado bit a bit idéntico a la entrada de texto plano original.
Como usted probablemente ya lo sepa, un programa de cifrado típico crea archivos cifrados que comienzan con un vector de inicialización (IV) que fue generado recientemente por un generador de números aleatorios criptográficamente seguro cuando se creó el archivo cifrado.A continuación, el programa de cifrado divide el archivo de entrada en bloques de texto sin formato de un tamaño de bloque fijo, utiliza algún modo de cifrado de bloque de operación en «modo de cifrado» para procesar cada bloque (y la clave de cifrado) a través de un cifrado de bloque para eventualmente terminar con un bloque cifrado de el mismo tamaño de bloque, que se adjunta al archivo cifrado. A menudo hay algunos bits complicados al final relacionados con el «relleno» y la «autenticación de mensajes».
Más tarde, el programa de descifrado corta el archivo cifrado en bloques cifrados del mismo tamaño de bloque fijo, alimenta cada bloque ( y la clave de cifrado) a través del cifrado de bloque utilizando el mismo modo de operación de cifrado de bloque en el «modo de descifrado» para recuperar el bloque de texto plano, y concatena todos los bloques de texto plano juntos para recuperar un archivo bit a bit idéntico al archivo de texto plano original .
Estoy usando SHA-512 para hash
De acuerdo, SHA-512 es un excelente algoritmo de hash. Si está usando esto como parte de la función de ronda interna, o para generar subclaves a partir de la clave de cifrado principal, funcionaría; simplemente parece innecesariamente complicado.
Si está usando SHA-512 como una función de derivación de claves (KDF) para generar la clave de cifrado principal a partir de la contraseña, mucha gente diría que no es lo suficientemente complicada.
operaciones matriciales para barajar
Eso es algo inusual, pero podría funcionar.
XOR bit a bit para mezclar y recuperar datos.
Prácticamente todos los algoritmos de cifrado modernos utilizan muchas operaciones XOR bit a bit. Muchos algoritmos de cifrado modernos están diseñados para usar solo adiciones modulares, rotación con cantidades de rotación fijas y XOR (ARX) en el bucle interno (iteración redonda).
Me parece bonito que una función de ronda interna que usa solo XOR, o solo rotación, o solo adición modular, será fatalmente inseguro sin importar cuántas iteraciones redondas se utilicen.
(No sé lo suficiente para decir nada acerca de la seguridad de su combinación particular de operaciones de matriz y XOR).
La longitud de la salt y el texto cifrado tiene 256 letras.
Supongo que quiso decir «La longitud del vector de inicialización (IV) y cada bloque de texto cifrado es de 256 letras . «
Se utiliza una» sal «en el hash criptográfico unidireccional; consulte ¿Puede ayudarme a comprender qué es un » salt » es? . Un «IV» se utiliza en la criptografía bidireccional, tanto encriptación como en desencriptación. Tanto «salt» como «IV» son valores aleatorios recién generados que se supone que son de conocimiento público, pero la terminología da a entender que se utilizarán en diferentes tipos de sistemas.
Prácticamente todo el mundo establece la longitud de el IV es igual al tamaño del bloque, así que es genial.
Tengo entendido que prácticamente todos los cifrados desarrollados antes del anuncio del concurso AES de 1997 usaban un tamaño de bloque de 64 bits (8 bytes) o menos. Algunos criptógrafos aparentemente pensé que eso no era suficiente, pero hasta donde yo sé, ahora todos parecen pensar que un tamaño de bloque de 128 bits (16 bytes) es adecuado.
Un tamaño de bloque de 256 bytes funcionaría; simplemente parece innecesariamente grande.
el efecto de avalancha
Cuando se ejecuta cada bloque de texto plano a través del cifrado de bloque (en algún modo de cifrado), el efecto de avalancha significa que un solo bit cambia en cualquiera de los siguientes:
- datos en el bloque de texto sin formato
- contraseña
- IV
debe cambiar el generar un bloque de texto cifrado drásticamente (aproximadamente la mitad de los bits).
Cuando se ejecuta cada bloque de texto cifrado a través del cifrado de bloque (en algún modo de descifrado), el efecto de avalancha significa que un solo bit cambia en cualquiera de los siguientes casos:
- bloque de texto cifrado
- contraseña
- IV
debe cambiar drásticamente el bloque de «texto plano» de salida (aproximadamente la mitad de los bits).
En mi implementación, si cambio la sal o el cifrado, no veo grandes cambios en mi salida.
Supongo que quisiste decir una de dos cosas:
- «si cambio un solo bit cerca del comienzo o f el archivo cifrado (es decir, en el IV o en algún bloque de texto cifrado temprano), no veo grandes cambios hacia el final de mi archivo de texto sin formato de salida.
Esta falta de el cambio siempre ocurre cuando se utiliza el encadenamiento de bloques de cifrado (seguro) (CBC) o algunos otros modos de operación. Así que no es necesariamente un problema.
Sin embargo, esto puede ser un problema si pensaba que estaba usando el modo (seguro) Propagating Cipher Block Chaining (PCBC), donde esta falta de cambio indica un error en la implementación.
Además, esta falta de cambio es el resultado esperado cuando se usa el modo (inseguro) Libro de códigos electrónico (ECB).
Independientemente del modo de operación que seleccione, el programa de descifrado debería imprimir grandes advertencias aterradoras de que el archivo falló en la verificación de autenticación MAC cada vez que un solo bit del archivo cifrado está dañado.
- «si cambio un solo bit en un único bloque de texto cifrado en un archivo cifrado, «no veo grandes cambios en el bloque de texto sin formato correspondiente en mi archivo de texto sin formato de salida».
Sí, esto indica una falla seria – el El algoritmo de cifrado de bloques no tiene un buen efecto de avalancha. Esta es una señal de que el algoritmo no tiene suficiente mezcla. Esto generalmente significa que el sistema es vulnerable a ataque de texto cifrado elegido y ataques similares.
¿Qué puedo hacer para producir mejor el efecto de avalancha en mi (o cualquier otro) cifrado? ¿Debo reducir menos la longitud de la sal y generar un texto cifrado más pequeño para crear un efecto de avalancha?
Supongo que querías preguntar «¿debo reducir el tamaño de el IV y el tamaño del bloque para crear un efecto de avalancha? «
Eso generalmente no es necesario.
Los enfoques más comunes para producir el efecto de avalancha se enumeran en Wikipedia cifrado en bloque artículo:
No conozco ningún cifrado en bloque que produzca una avalancha completa después de una sola ronda. Las personas que diseñan cifrados de bloque intentan elegir una cantidad suficiente de rondas para que el cifrado de bloque resista todos los ataques criptográficos estándar , que es más que suficiente para producir una avalancha completa .
Las personas que diseñan un cifrado de bloques normalmente eligen un esquema general de diseño de cifrado de bloques y hacen que el programa de cifrado de bloques lo repita una y otra vez el número de rondas seleccionado. Algunos de los esquemas de diseño de cifrado de bloques generales más populares son:
- red de sustitución-permutación
- Cifrado de Feistel
- Cifrado de Lai-Massey
Cada uno de estos requiere alguna función interna no lineal. Los primeros cifrados de bloque a menudo usan alguna función interna complicada en cada ronda que casi logra una avalancha en una sola ronda. Los cifrados modernos a menudo usan una función interna muy simple y rápida en cada ronda (algunas funciones ARX) con la no linealidad suficiente para eventualmente lograr una avalancha después de una gran cantidad de rondas.
Comentarios
- Nota al margen: El cifrado khazad tiene una difusión completa después de una sola ronda. Yo ‘ hice juguetes que también lo hacen, ‘ s ciertamente posible, y descubrir formas de hacerlo es divertido.