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í:
-
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.
-
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.
-
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.