¿Es AES factible para archivos de hashing seguro? [cerrado]

0

Ya existía un tema similar "¿Por qué AES no se usa para el hashing seguro, en lugar de SHA-x?", pero no se trataba de archivos específicamente, y personalmente no estoy convencido de las respuestas. "AES no está diseñado para este trabajo" no es una respuesta.

Lo que me molesta con esas respuestas es que ellos teorizan sobre cómo AES es un tipo diferente de algoritmo y no es adecuado para el trabajo, pero nadie expuso casos reales, como en "la implementación sugerida se rompería con < fuerte> este procedimiento ". Espero que hayan estado hablando en general, y que el hash de archivos sea una historia diferente.

Se debe tener en cuenta un hecho importante: todos los algoritmos hash criptográficamente seguros actuales son lentos. Las mejores implementaciones de SHA-256 están alcanzando un par de cientos de megabytes por segundo como máximo. Tienen una propiedad de paralización inherente, que no se pueden calcular en paralelo, la secuencia de datos de entrada no se puede dividir.

Los sistemas de IO de hoy ya son más rápidos que el hardware de consumo de un solo hilo más rápido en el que pueden calcular estos hashes. Esto significa que estos algoritmos se han convertido en un cuello de botella, y solo baja desde aquí, porque el rendimiento de un solo hilo ya no muestra ningún progreso serio (para varias generaciones de CPU), mientras que IO se está volviendo más rápido rápidamente (gracias a las unidades SSD y los discos RAM , que finalmente comenzó a empujar hacia adelante las velocidades de la unidad de disco de largo estancamiento).

La mayor ventaja del hash de AES es que tenemos implementaciones de hardware para él y que el hash de AES se puede diseñar para habilitar el paralelismo.

Echemos un vistazo a un esquema simple: AES256 (DATA_BLOCK_0 XOR COUNTER_0) XOR AES256 (DATA_BLOCK_1 XOR COUNTER_1) XOR ...

El último bloque de datos se rellena con ceros. La clave AES es conocida y preestablecida. Otra opción es usar el bloque de datos como clave cada vez y cifrar solo el contador. No sé ahora si esto puede tener un impacto negativo en la velocidad, ya que la clave debe cambiar en cada bloque. Si no hay un impacto serio, puede ser la mejor opción.

De todos modos, el esquema dado es masivamente paralelizable y puede empujar 2.5 gigabytes por segundo en un moderno quad-core con aceleración de hardware AES. También se escalará perfectamente en el futuro, que es cada vez más núcleos de CPU.

El hash AES se debe usar debido a la velocidad, y su propósito principal es hacer hash de los archivos, y no inicializar las claves privadas y cosas por el estilo. Es mejor dejarlo para algoritmos hash "reales", estoy de acuerdo.

Ahora para un análisis.

En cuanto a la detección de errores aleatorios, no veo ningún problema con el esquema anterior. Debería mezclarse bien y reaccionar al azar para cualquier cambio.

No debemos preocuparnos por que alguien calcule a la inversa los datos originales del hash. Los hashes de archivos siempre se distribuyen con sus archivos, y su propósito no es ocultar los datos originales. Su propósito es garantizar (con una probabilidad razonable) que los datos no hayan cambiado, que se trata de un archivo sin modificar. Los hash de archivos privados no deben hacerse públicos en ningún caso, incluso con algoritmos como SHA-256.

La parte problemática solo puede ser un ataque inteligente que intenta modificar el archivo de tal manera que el hash no cambie. En el escenario más simple, creo que un atacante modifica una parte de un bloque para lograr algún objetivo. Después de eso, necesita modificar cualquier bloque (o más), lo que se considera poco importante, de tal manera que produzca un hash conocido, uno que será XOR con el primer hash del bloque modificado para que la diferencia se elimine. y el hash final seguirá siendo el mismo.

Dejemos de lado el caso de que el atacante agregue datos a un archivo, ya que puede detectarse fácilmente y probablemente no sea más fácil de calcular de todos modos.

Estoy mirando el esquema simple de arriba, y para mí, parece que el atacante tiene que buscar un espacio de 2 ^ 256 para encontrar la entrada apropiada, que es casi lo mismo que descifrar AES. Y ese espacio es simplemente demasiado grande.

Ahora, ¿alguien puede explicar qué procedimiento permitiría el ataque descrito?

Gracias.

    
pregunta user37442 17.01.2014 - 10:03
fuente

2 respuestas

7

Aquí está el archivo que describe nuestros registros en el First Bank of Craptology. Es un formato simple con registros de ancho fijo: un nombre de usuario de 16 bytes y un saldo de 16 bytes.

user37442_______0000000099999999
Gilles__________0000000000000042

Según su propuesta (si lo he leído correctamente, su declaración no es muy precisa), su hash es AES [K] (su_nombre ⊗ (C + 0)) ⊗ AES [K] (your_balance ⊗ (C + 1)) ⊗ AES [K] (my_name ⊗ (C + 2)) ⊗ AES [K] (my_balance ⊗ (C + 3)) donde C es el valor del contador inicial y K es una tecla. Aquí hay otro archivo con el mismo hash, asumiendo que C es un múltiplo de 4:

user37442_______0000000000000040
Gilles__________0000000099999997

¿Así que tienes un esquema criptográfico que no puedes romper? Gran cosa. Su tarea es crear un esquema que nadie puede romper.

Estoy seguro de que puedes encontrar una simple modificación de tu esquema que haga que mi contra-ejemplo falle. Posiblemente, si te lo propones, podrás encontrar un esquema que I no pueda romper. Pero no soy criptógrafo.

Si quieres que te tomen en serio, entonces:

  1. Entiende de lo que estás hablando. Lea lo que define un hash criptográfico . Lo que está buscando aquí es más débil que un hash: un hash criptográfico debe tener resistencia previa a la imagen. Ok, puede haber un punto en una primitiva más débil, pero debe ser más claro sobre lo que está tratando de hacer. Defina su problema de seguridad correctamente.
  2. Trabaja seriamente en atacar tu propio esquema. No se limite simplemente a que "se mezcle bien y reaccione al azar". Lea cómo se han roto los esquemas de otras personas y pruebe las mismas técnicas con su propuesta.
  3. Una vez que tienes algo que no puedes romper, y que en serio has tratado de romper, publícalo.
  4. Espere hasta que hayan pasado años y muchos criptógrafos profesionales hayan intentado atacar su esquema y todos hayan fallado. En ese momento, se puede considerar seriamente su esquema para su uso en aplicaciones.

Sobre el tema específico del uso de algoritmos basados en AES para el hashing, aquí hay un poco de lectura:

Tener una CPU que pueda mantenerse al día con un sistema IO no es tan importante en la mayoría de las aplicaciones. Por lo general, el sistema IO se usa en varias instancias en paralelo de todos modos.

    
respondido por el Gilles 17.01.2014 - 12:11
fuente
4

Rechazar los argumentos generales e insistir en que se rompa la "propuesta" específica de su de manera que lo convenza es una falacia conocida. Es la táctica principal de la mayoría de los crackpots, que intentan atraer a algunos expertos a un ciclo interminable de "se rompe de esta manera, sí, pero ¿qué pasa si cambio este bit? - luego se rompe de esa manera, está bien, pero ¿qué hay de XORing ese bit allí? - ... ". Cuando el experto finalmente se aburre de hablar con la red equivalente a un loro, o tiene trabajo que hacer, y se aleja, el chiflado reclama la victoria.

Una propuesta criptográfica decente viene con argumentos positivos que no pueden romperse, no argumentos sobre cómo usted no sabe cómo romperla. De lo contrario, es inútil y nadie lo verá.

Aunque en tu caso, las preimágenes son triviales. Si se conoce K , entonces descifrado por K es tan fácil como el cifrado por K ; correspondientemente, dado el AES K (datos XOR contador0), obtener "datos XOR contador0" es una cuestión de 28 ciclos de reloj, no más. Tu "hash" no puede ser llamado "débil"; No ofrece ninguna resistencia a los ataques. Incluso es pobre contra los no ataques, e incurrirá en más colisiones falsas cuando se usa en "datos normales" que en CRC32 o MD4.

De hecho, recuerdo que este mismo ejemplo (con otro cifrado de bloque) se usó en un curso introductorio sobre criptografía para demostrar cómo estas cosas no se improvisan. Se espera que los estudiantes primerizos encuentren trivialmente rompible

    
respondido por el Thomas Pornin 17.01.2014 - 13:38
fuente

Lea otras preguntas en las etiquetas