Tarjeta inteligente PIV - AUTENTICACIÓN GENERAL - Firme una vez

Esperaba que alguien pudiera ayudarme con el Estándar de tarjeta inteligente PIV.

Me gustaría autenticar la tarjeta inteligente haciéndola firmar un nonce con relleno PKCS#1 con la clave de firma digital 1024x0C del módulo RSA de 9 bits generada anteriormente. Así es como se ve el resultado de mi aplicación de prueba:

Requesting Signature
Sending: 0087069C867C84820081800001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00CB441C4A656E071F1FB9F31BC6AB1824324FB42780
Error: (6A80) Incorrect parameters in command data

Y aquí está el desglose:

00 - Not chained (chaining not required because message does not exceed max length)
87 - GENERAL AUTHENTICATE
06 - RSA 1024 Algorithm
9C - Digital Signature Key
86 - Length of data field
  7C - Dynamic Authentication template identifier
  84 - Length of dynamic authentication template
    82 - Response
    00 - Response length 0 (Response requested)
    81 - Challenge
    80 - Challenge length 128
      0001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00CB441C4A656E071F1FB9F31BC6AB1824324FB427 - PKCS #1 padded 20-byte Nonce (Padded with OpenSSL RSA_padding_add_PKCS1_type_1)
80 - Expected response length (128 bytes)

También he realizado pruebas usando todas las claves diferentes (habiéndolas generado todas con éxito) y usando mensajes encadenados frente a mensajes de una sola parte. Ver más datos de prueba.

preguntado el 03 de mayo de 12 a las 16:05

Realiza el relleno PCKS # 1 alrededor del NONCE, pero ¿está seguro de que la estructura hash interna no es necesaria? Tal vez simplemente realice H(NONCE) y use las estructuras definidas en el estándar PKCS#1, simplemente puede comparar H(NONCE) con H'(NONCE) en lugar de NONCE con NONCE' después del descifrado para verificar la autenticación. -

No entiendo completamente. ¿Está diciendo que debería aplicar la codificación DER "DigestInfo" alrededor de mi Nonce/Hash antes de rellenar? Si es así, esto tampoco funciona. ¿Estás diciendo que debería hacer un hash de mi nonce antes de rellenarlo? Dado que mi nonce y un hash sha1 son ambos de 20 bytes pseudoaleatorios, esto no hace ninguna diferencia. -

"El comando AUTENTICACIÓN GENERAL se utilizará con las claves de autenticación PIV ('9A', '9B', '9E') para autenticar la tarjeta o una aplicación de tarjeta en la aplicación del cliente (AUTENTICACIÓN INTERNA)" Me parece que está utilizando ambas la llave equivocada y la APDU incorrecta. ¿Por qué necesita la clave 0x9C ya que la especificación indica claramente las otras claves? -

Del estándar NIST: "El comando GENERAL AUTHENTICATE se puede usar para generar firmas. El hash previo a la firma y el relleno (si corresponde) se calculan fuera de la tarjeta. La aplicación de tarjeta PIV recibe el valor hash del mensaje original, aplica la firma privada key (referencia de clave '9C'), y devuelve la firma resultante a la aplicación cliente" - Probé con fuerza bruta todas las claves. ¿Qué crees que está mal con mi APDU? -

1 Respuestas

Hubo un error con el subprograma de la tarjeta PIV cargado en mi tarjeta inteligente. No firmará ningún dato que comience con 0x00. Si cambia el 0x00 a cualquier otra cosa (siempre que los datos como un número entero sean menores que el módulo como un número entero según el requisito del algoritmo RSA), se firmará correctamente. Por supuesto, esto significa que estas tarjetas no pueden firmar ningún dato estándar PKCS1 :(

Gracias por la ayuda

Respondido 05 Jul 12, 14:07

Debería poder aceptar su respuesta ahora. Lástima que era este tipo de error. - Maarten Bodewes

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.