¿Qué se gana al escribir el último bloque en el dispositivo?

16

Recientemente encontré la noción de "hashing del último bloque en el dispositivo".

Significa que cuando se calcula una firma digital, el hash que sirve como entrada para el cálculo de la firma real no debe calcularse completamente en el software sino tampoco en el hardware; de hecho, los primeros n-1 bloques del cálculo de resumen son computado en el software por razones de rendimiento y el bloque final se computa en el dispositivo (generalmente una tarjeta inteligente) antes de que se utilice el hash final para el cálculo de la firma, que se realiza nuevamente en el dispositivo.

Me dijeron que el controlador de la tarjeta inteligente de la tarjeta que usamos en ese momento hizo exactamente eso cuando se le solicitó que produjera una firma completamente en el dispositivo (hashing + el cálculo de la firma): el controlador computaría los primeros n-1 bloques. localmente y luego inicialice la tarjeta inteligente con el estado actual del resumen, luego envíe los datos restantes para la finalización de hash y el cálculo de la firma.

Me dijeron que esto aumentaría la seguridad y al principio asumí que estaba pensado como una contramedida inteligente contra los atacantes que podrían interceptar el hash computado en el software, reemplazarlo por un hash de su propia elección, obteniendo así un Firma válida en los datos de su elección.

Pero cuanto más lo pensaba, más me confundía. Nada impide a los atacantes prefabricar sus hash de la misma manera, es decir, calcular n-1 pasos del cálculo de resumen en los datos de su elección y enviarlos al dispositivo para su finalización, lo que nuevamente produce una firma falsificada perfectamente fina.

Los únicos argumentos en los que puedo pensar por qué esto podría preferirse a la computación del hash completamente en software son de naturaleza legal. Si el dispositivo y sus algoritmos están certificados, entonces existe la garantía de que los datos de entrada para el cálculo de la firma han sido proporcionados por una implementación certificada, mientras que no existe tal garantía si el hash se hubiera computado completamente fuera del dispositivo por un no certificado. software de terceros. Podría imaginar que esto afectaría las discusiones legales en caso de una disputa sobre una firma en particular.

¿Hay avances reales en seguridad que pasé por alto?

    
pregunta emboss 06.07.2011 - 22:57
fuente

3 respuestas

11

Citas de Manual de tarjetas inteligentes Por Wolfgang Rankl, Wolfgang Effing

  

La opción HASH del comando PERFORM SECURITY OPERATION se puede usar para calcular un valor de hash. El comando puede transferir los datos que se van a hash o un valor hash ya calculado fuera de la tarjeta inteligente junto con los datos necesarios para el paso final del cálculo. En este último caso, el cálculo de hash para el bloque final se realiza en la tarjeta. La ventaja de este último método es que el valor de hash se puede generar significativamente más rápido fuera de la tarjeta, pero el paso final todavía ocurre dentro de la tarjeta. Desde una perspectiva puramente criptológica, esto proporciona solo una pequeña cantidad de seguridad adicional, pero limita algo las posibilidades de manipular el valor de hash . Por esta razón, es ampliamente utilizado en la práctica.

El último bloque de hash generalmente contiene la longitud de los datos ("datos necesarios para el paso final").

Este blog describe todos los modos de REALIZAR FUNCIONAMIENTO DE SEGURIDAD: comando HASH. Ellos son: hashing todo en la tarjeta inteligente; hash última parte de los datos (no dice nada sobre la longitud de este pard); no hash nada, solo haz una firma.

Este artículo dice:

  

Señalamos que, por razones de rendimiento, la función hash es generalmente   Realizado fuera de la tarjeta. En particular, cuando la función de firma digital   es una función de MAC con clave, solo el último cálculo de bloque se realiza en el   tarjeta.

    
respondido por el osgx 07.07.2011 - 01:18
fuente
10

Como se dijo, esa política es extraña. Para una firma digital verdadera (como en RSA o ECDSA), el mensaje que se va a firmar primero tiene un hash, y el resto de la operación utiliza solo el valor hash resultante. El cálculo de hash usa solo elementos públicos; No hay clave en el hash. Por lo tanto, requerir que parte del cálculo de hash se realice en la tarjeta inteligente tiene sentido, desde el punto de vista de la seguridad, solo si la tarjeta inteligente puede abstenerse de completar la firma en función de los datos del mensaje que recibe: es decir, si la tarjeta inteligente podría rechazar el mensaje porque no termina con un byte de valor 0x5F, o cualquier otra regla de filtrado arbitrario similar. Tales reglas son bastante inusuales en los dispositivos de firma. Además, con una política de "último bloque en la tarjeta inteligente" y una función hash habitual como SHA-256, la tarjeta inteligente solo obtiene los bits del último mensaje (entre 0 y 447 bits, según la longitud del mensaje) y la longitud total del mensaje. . Eso no es mucho para las reglas de filtrado significativo. Sin tales filtros improbables, requerir que el último bloque del mensaje sea procesado en la tarjeta inteligente no agrega nada a la seguridad.

Posiblemente, tal política podría ser un cumplimiento tortuoso de estrictos requisitos legales. Por ejemplo, algunas regulaciones podrían exigir que el hash "aparezca en la tarjeta inteligente" y se sienta contento con el procesamiento del último bloque solamente. Como analogía, hubo un momento en que la Unión Europea aplicaba cuotas estrictas a las importaciones de automóviles; un constructor japonés luego imaginó enviar automóviles sin volantes, y también volantes, a una "fábrica" en Inglaterra, donde se ensamblaron los casi automóviles y los volantes. Esto fue suficiente, de acuerdo con las regulaciones europeas, para hacer que los autos se "fabriquen en Europa", por lo tanto no están sujetos a la cuota.

Sin embargo , hay un escenario alternativo donde la política de "marcar el último bloque" en la tarjeta inteligente tiene mucho más sentido. Esto es con HMAC . HMAC es para autenticación de mensajes ; no es una firma digital "verdadera", pero usar el término "firma" para designar un MAC es un uso generalizado (aunque incorrecto).

HMAC va así: de la clave secreta K se derivan dos valores de tamaño de bloque, K1 y K 2 (la derivación usa solo un XOR simple con secuencias convencionales, no es nada especial, lo importante es que K1 y K 2 tiene el tamaño de un bloque de función hash, es decir, 64 bytes si la función hash es SHA-1 o SHA-256). Luego, el MAC se calcula del mensaje m , usando la función de hash h , como: h (K 1 || h (K 2 || m)) .

Por lo tanto, la mayor parte del cálculo de HMAC es básicamente un hash del mensaje m ; pero debe comenzar con el hash de un bloque derivado de clave, y hay una operación de hash adicional (de nuevo con otro bloque derivado de clave) al final. No queremos que K1 o K2 salgan de la tarjeta inteligente (de lo contrario, no tiene mucho sentido usar una tarjeta inteligente en absoluto). Pero una tarjeta inteligente no es potente (ni en la CPU ni en el ancho de banda de E / S), por lo que preferiríamos realizar la mayor parte del trabajo en la computadora externa (en el controlador de la tarjeta inteligente). La computación HMAC luego iría así:

  1. El controlador informa a la tarjeta inteligente que debe realizarse un cálculo HMAC; la tarjeta inteligente procesa K2 a través de la función hash y devuelve al controlador el estado de la función hash alcanzado en ese punto (esto no contiene información útil sobre K porque K2 tiene el tamaño de un bloque). Dado que este paso no depende de m , aquí no se necesita un cálculo real: el estado dependiente de la clave podría haberse calculado de una vez por todas cuando la tarjeta inteligente obtuvo (generó) la clave K en primer lugar.

  2. El controlador hace clic en m , comenzando con el estado de la función de hash obtenido de la tarjeta inteligente. El controlador completa el cálculo de hash (con relleno) y envía el valor resultante (que es h (K 2 || m) ) a la tarjeta inteligente.

  3. La tarjeta inteligente calcula el segundo hash (el que usa K1 ). Una vez más, el estado de la función hash alcanzado después del procesamiento K1 podría haberse calculado previamente, por lo que el verdadero trabajo en línea consiste en procesar un solo bloque de funciones hash.

Este escenario permite un cálculo rápido y externalizado, a la velocidad de la computadora host, mientras mantiene la clave secreta en la tarjeta inteligente. Mi conjetura es que cuando se anuncia una política de "último bloque en la tarjeta inteligente", realmente significan un cálculo HMAC como acabo de describir. Esto conlleva una terminología descuidada (un MAC no es una firma) pero aún así es mejor que el absurdo burocrático similar a la UE.

    
respondido por el Thomas Pornin 07.07.2011 - 18:03
fuente
-1

Supongo que es la operación de firma de hash que se realiza en el dispositivo en el último paso, y luego el esquema tiene mucho sentido: la última operación de hash se realiza en el dispositivo y ese hash computado se firma de inmediato usando la clave privada que reside En el dispositivo (y que no es exportable). De lo contrario, si solo se realiza hashing en el dispositivo, el esquema realmente no suena razonable.

    
respondido por el Eugene Mayevski 'Allied Bits 07.07.2011 - 08:16
fuente

Lea otras preguntas en las etiquetas