Asegurar hashes de cadenas cortas

1

Entiendo que si le digo que un hash dado es el valor de hash de un solo carácter alfanumérico, entonces puede identificar de forma trivial cuál es la cadena de origen, mediante la fuerza bruta que verifica los hashes.

Sin embargo, si le digo que el hash se basa de nuevo en un solo a / n char, pero esta vez con una sal desconocida durante mucho tiempo, entonces estará seguro: ya no podrá identificar al char.

Ahora, supongamos que te ofrezco una colección de 62 hashes y te digo que, colectivamente, esos hashes representan los hashes de los 62 caracteres a / n distintos (az, AZ, 0-9) todos hash de la misma manera, con el mismo sal desconocida desde hace mucho tiempo.

¿Eso es seguro? ¿O esa información sería suficiente para aplicar ingeniería inversa a algunos o todos los datos?

    
pregunta Brondahl 11.03.2017 - 11:21
fuente

3 respuestas

1

Creo que sí, todavía es seguro, dependiendo de cómo funciona el "hashing".

Realmente no estás hablando de un valor de sal, ya que es desconocido. El escenario que usted describe se ajusta mejor a una MAC de IMO. Los MAC requieren los datos de entrada (su único carácter) y un secreto (su "sal" desconocida) y están diseñados para ser seguros a pesar de que se conocen los datos de entrada de texto sin formato (ya que generalmente se usan para autenticar mensajes, donde tanto el MAC como el texto sin formato el mensaje es conocido).

Para estar seguro contra los ataques, no puede simplemente usar un hash simple, como

value = sha256(character || secret)

Esto no sería seguro. Pero si usa un primitivo como HMAC, debería ser:

mac = hmac_sha256(character, secret)

Sus requisitos, si entendí correctamente, son que debería ser imposible para alguien sin el secreto para determinar, dado

mac1 = hmac_sha256('0', secret)
mac2 = hmac_sha256('1', secret)
...
mac62 = hmac_sha256('z', secret)

qué mac va con qué carácter de entrada y cuál es el secreto.

El MAC garantiza que con una entrada determinada, como '0' y mac1, no hay mejor ataque al secreto que la fuerza bruta, incluso si el secreto se reutiliza muchas veces. Así que tu secreto está a salvo.

La pregunta que queda es si puedes determinar qué carácter de entrada pertenece a mac1, mac2, etc. si no estás en posesión del secreto.

Yo creo que es igualmente imposible, pero no puedo ver cómo probar la equivalencia de eso con la integridad del mensaje que las MAC hacen, así que aunque no creo que lo esté, podría estar equivocado.

Tengo algunas razones para mis creencias:

Idealmente, para funciones hash, si cambia un solo bit en el mensaje, eso debería influir en todos los bits del valor hash. Si entiendo la forma en que se calculan correctamente los hmacs, entonces eso también se aplica al secreto, por ejemplo. El secreto influye en cada bit en la salida de mac. Entonces, si hubiera una manera de determinar qué mac pertenecía a qué entrada sin el secreto, creo que eso significaría que hmac está filtrando información sobre el secreto y, por lo tanto, debería existir un método mejor que el de fuerza bruta para atacar el secreto. p>

Pero realmente debería preguntarle a un criptógrafo, por lo que crypto.stackexchange.com podría ser un mejor lugar para obtener una buena respuesta.

    
respondido por el Pascal 11.03.2017 - 12:07
fuente
1

Si entiendo sus requisitos correctamente,

  • Debería ser imposible para un atacante (sin la clave secreta) que ve los 62 mensajes para adivinar mejor qué personaje escribió Alice para un mensaje en particular que la probabilidad 1/62 de un atacante que no haya visto ninguno de los mensajes.
  • Debería ser imposible para un atacante (sin la clave secreta) que ve los 62 mensajes adivinar la clave secreta.
  • Debería ser imposible para un atacante sin la clave secreta, que ha visto hasta 60 de los mensajes, calcular activamente el MAC correcto para cualquiera de las 2 letras restantes para las cuales el atacante aún no ha visto el MAC.

Si entiendo su algoritmo propuesto correctamente,

  • La máquina de Alicia tiene una sola clave secreta que asumimos que el atacante no no tener.
  • Cada vez que Alice escribe algún carácter alfanumérico (a-z, A-Z, 0-9), la máquina utiliza una función hash criptográficamente segura para codificar la concatenación de ese personaje con esa clave secreta, y envía el código de autenticación del mensaje resultante a Bob.
  • Alicia nunca repite un carácter (envía como máximo 62 mensajes con esta clave secreta en particular).
  • Bob descarta todas las repeticiones.
  • Alice no envía el siguiente mensaje hasta que se entera de que Bob recibió el último mensaje. (Está bien que la computadora de Alice siga reenviando el paquete que contiene ese mensaje hasta que escuche el acuse de recibo de la computadora de Bob).

Este algoritmo me parece seguro.

(No usaría el término "sal" en este algoritmo para describir esa clave secreta. Una sal criptográfica es, por definición, algo que suponemos que el atacante sabe, y por lo general se genera de forma aleatoria para cada elemento. Ninguno de los dos es cierto para este algoritmo. ).

Debido a que la cadena que está en hash (un solo carácter concatenado con la clave secreta) es una longitud fija, parece que cualquier hash criptográficamente seguro será suficiente en este algoritmo; no es vulnerable a la ataque de extensión de longitud que HMAC defiende contra.

Si modificamos el algoritmo para que Bob no descarte las repeticiones, hace que el sistema modificado sea vulnerable a un atacante activo que utiliza un ataque de repetición .

Si modificamos el algoritmo para permitir que Alice repita un carácter, Debido a que el proceso es determinista, Eve puede detectar fácilmente cuando Alice repite un carácter, porque en ambas ocasiones Alice escribe ese carácter, produce exactamente el mismo MAC. (Esto hace que el sistema modificado sea vulnerable a ataque de texto sin formato conocido ). Una sal real, recién generada y aleatoriamente para cada mensaje, incluida en la entrada de la función hash, y también transmitida en texto sin formato con ese mensaje, podría usarse para hacer que el proceso sea lo suficientemente no determinista como para defenderse de este ataque.

Si modificamos el algoritmo para que Alice envíe varios mensajes antes de que Bob confirme la recepción, el sistema modificado es vulnerable a un hombre en el medio activo que reordena los mensajes pendientes.

    
respondido por el David Cary 18.03.2017 - 18:05
fuente
1

Usted tiene efectivamente un cifrado de sustitución y el algoritmo no es más seguro al sustituir un solo carácter con un hash en lugar de otro personaje único. Si alguien tiene que descifrar un solo carácter o hash de forma aislada, entonces podría considerarlo seguro , sin embargo, los usos repetidos probablemente permitirán el análisis de frecuencia y otros ataques para recuperar el texto sin formato.

    
respondido por el adamant 18.03.2017 - 19:31
fuente

Lea otras preguntas en las etiquetas