¿Es seguro exponer un hash SHA1 de una clave de cifrado?

4

Suponga que la parte 1 y la parte 2 poseen cada una una clave utilizada para el cifrado de datos AES. Supongamos que la clave se generó correctamente de forma aleatoria y se pasó de forma segura entre ellos.

Ahora necesito una forma para que la parte 1 le diga a la parte 2 cuál clave almacenada usar. Estaba pensando simplemente en crear un hash SHA1 de la clave y enviarlo con el mensaje. Mi razonamiento es que la parte 2 puede comparar fácilmente el hash con los hashes de todas sus claves almacenadas, pero no hay forma de que un atacado recupere la clave solo con el hash.

Mis requisitos son la protección contra espionaje casual, no la protección de personas con supercomputadoras que intentan descifrar este mensaje individual. Lo ideal es que la única información que compartan la parte 1 y la parte 2 sea el valor de la clave de cifrado secreta.

¿Es este plan defectuoso de alguna manera, y si es así, hay una mejor manera?

    
pregunta JohnB 18.09.2013 - 11:57
fuente

2 respuestas

6

Revelar el hash de la clave puede o no ser seguro, dependiendo de lo que hagas con ella. En su caso, tiene una clave K , muestra h (K) para alguna función hash (por ejemplo, SHA-1), y también muestra e ( K, M) para algunos algoritmos de cifrado e (por ejemplo, AES) y el mensaje M . Esto es seguro solo en la medida en que e es "diferente" de h , que es una propiedad mal definida.

Por ejemplo, imagine un algoritmo de cifrado definido de la siguiente manera: para el mensaje M y la clave K , hash K con SHA-1, luego use los primeros 128 bits de la salida SHA-1 con AES para procesar el mensaje M . En lo que respecta a los sistemas de encriptación, este es bastante bueno; Es tan bueno como "AES en bruto", pero también acepta claves de longitud arbitraria. Sin embargo, , si revela SHA-1 ( K ), entonces es trivial romperlo, aunque no reveló K en sí.

Para lo que quiere hacer, necesita un nivel de aislamiento entre lo que muestra para la indexación de claves y el sistema de cifrado. Una función hash no proporciona tal capa de aislamiento "genéricamente" entre su entrada y su salida porque la salida se puede calcular de manera eficiente a partir de la entrada (de eso se trata la función hash). Por otro lado, para una "buena" función hash, no se conoce una forma de calcular la mitad de la salida conociendo solo la otra mitad; De lo contrario, los ataques rápidos contra la resistencia de preimagen funcionarían. Esto produce el siguiente esquema : desde su clave K , calcule SHA-256 ( K ). Divide la salida de 256 bits en dos mitades de 128 bits. Utilice la primera mitad para la indexación (usted lo muestra) y la segunda mitad para el cifrado real.

    
respondido por el Tom Leek 18.09.2013 - 13:29
fuente
3

¿Por qué no afecta una identificación de clave aleatoria a las claves cuando se comparten? luego identifique las claves basándose en eso, guardando todas las preocupaciones ...

Si resulta que su proceso de generación de claves no fue tan aleatorio, una preocupación real en estos días con toda la información sobre hardware y software de puerta trasera, su esquema se rompería aún más fácilmente. IDs aleatorios añaden una capa barata de seguridad. A menos que esté ridículamente limitado en el espacio de almacenamiento, ir con su esquema suena como un riesgo innecesario.

    
respondido por el Bruno Rohée 18.09.2013 - 15:30
fuente

Lea otras preguntas en las etiquetas