Hash seguro de una carga útil muy corta, ¿es posible?

5

Estoy buscando verificar la integridad de una carga útil muy pequeña, aproximadamente 64 bytes, que se almacenará en un código QR. Necesito verificar que la carga no haya sido generada o alterada por un atacante. Agregar un hash seguro al final de la carga útil consumirá una gran cantidad de mi espacio de carga útil. Esperaba cifrar toda la carga útil con una clave privada asimétrica y luego intentar descifrarla con la clave pública. Si el descifrado se realiza correctamente, se asume que la carga útil es válida y se pueden leer los datos.

Preguntas:

  1. Dada una carga útil tan pequeña, ¿una clave asimétrica sería demasiado corta y, por lo tanto, se hackearía fácilmente a través de un ataque de fuerza bruta?

  2. ¿Una implementación segura de hash o relleno aleatorio, me dejaría con casi ninguna carga útil utilizable para los datos reales?

  3. Si 64 bytes son demasiado pequeños, ¿cuál es el tamaño de carga útil más pequeño que puedo usar? (Quiero mantener el tamaño físico del código QR lo más pequeño posible)

pregunta user3091170 11.05.2015 - 12:58
fuente

3 respuestas

3

Las claves asimétricas solo son realmente valiosas si una de ellas debe hacerse pública (aunque "pública" puede significar cosas diferentes en contextos diferentes).

Si ambos generan y verifican códigos en privado, entonces puede usar un secreto privado como parte de un HMAC con un algoritmo de hashing razonable.

Si el espacio es una prima, incluso puede utilizar los primeros X bytes de la salida HMAC resultante, con el entendimiento de que cada byte que elimine disminuye su protección ligeramente.

Si los códigos deben verificarse o generarse en público, en primer lugar, reconozca que incluso un resultado válido puede ser subvertido por algún otro aspecto de la cadena de software, pero lo ideal es que haga la parte pública (generación de validación). ) utilizando una clave pública y la parte privada utilizando la clave privada.

    
respondido por el tylerl 11.05.2015 - 17:05
fuente
2

El uso de cifrado simétrico o asimétrico en este caso realmente depende del caso de uso y no de los aspectos de seguridad. ¿Cómo se genera el código? ¿Puede el solicitante de código tener un secreto común entre él y el generador de códigos? Si lo hacen, puedes usar HMAC para verificar el remitente y la integridad. De lo contrario, puede usar el cifrado asimétrico para utilizar firma del mensaje. No puede utilizar el cifrado asimétrico de la forma en que lo describió porque funciona de la manera opuesta.

  

Esperaba cifrar toda la carga útil con una clave privada asimétrica y luego intentar descifrar con la clave pública

Todo lo contrario ... En el cifrado asimétrico, la clave pública se utiliza para cifrar, la clave privada para descifrar. Pero en su caso, la encriptación no es la necesidad, necesita una firma digital para verificar el remitente y la integridad del mensaje. Esto se hace firmando con la clave privada del remitente y verificando el mensaje con la clave pública.

  

Agregar un hash seguro al final de la carga útil consumirá una gran cantidad de mi espacio de carga útil

Puedes truncar el hash. Por ejemplo, use solo los primeros 32 bits de la salida SHA-1. Esto aumentará la posibilidad de una colisión y facilitará la fuerza bruta, pero debe considerar qué tan crítico es para su caso de uso. De cualquier forma, también con cifrado asimétrico, deberá enviar la firma junto con el mensaje.

  

Dada una carga útil tan pequeña, ¿sería una clave asimétrica demasiado corta y, por lo tanto, hackearse fácilmente a través de un ataque de fuerza bruta?

No veo la relación. Lo único que puedo pensar es en los ataques de repetición. Una vez que alguien ve su código QR, puede usarlo tal como está. Para mitigar los ataques de repetición, debe agregar un nonce aleatorio a la solicitud de código e incluirlo en la salida. Por ejemplo, HMAC la carga útil concatenada con el nonce.

    
respondido por el aviv 11.05.2015 - 14:50
fuente
1

Voy a responder en orden:

  1. es casi seguro que sí, las firmas asimétricas en general ocupan más espacio que las contrapartes simétricas - RSA requiere una cierta cantidad de relleno y un tamaño de clave mínimo para estar seguro;
  2. Si usa un HMAC, los requisitos mínimos para un HMAC seguro (un código de autenticación de mensaje basado en hash o un hash con clave) serían de aproximadamente 64 bits / 8 bytes. Cualquier otra cosa lo pondrá en una zona de peligro. Depende del resto. del sistema si este riesgo se puede mitigar (cuanto mayor sea el tamaño de la etiqueta de autenticación, mejor);
  3. que le deja con 64 - 8 = 56 bytes para una carga útil con un MAC seguro: puede aumentar su código QR si necesita más.

Para firmas, la mejor opción es ISO / IEC 9796-2, que define firmas RSA que proporcionan recuperación de mensajes, pero tenga en cuenta que hay debilidades conocidas . 64 * 8 = 512 bits de RSA es sin embargo demasiado corto.

Para un MAC, es común usar los bytes más a la izquierda, es decir, los bytes con el índice menos significativo en la mayoría de los entornos de programación, como valor de etiqueta de autenticación. En muchas API, puede especificar el tamaño de la etiqueta de autenticación.

Tenga en cuenta que necesita un hash con clave, de lo contrario, un atacante simplemente puede reemplazar el valor de hash y juntos. Debido a la forma en que se mezcla la clave en una salida más pequeña y se puede usar un método hash menos seguro.

    
respondido por el Maarten Bodewes 11.05.2015 - 17:28
fuente

Lea otras preguntas en las etiquetas