Foros de consultas y discusión

Firmar datos | comandos APDU

thumbnail
gustavo javier azambuja bonilla, modificado hace 6 años.

Firmar datos | comandos APDU

Youngling Mensajes: 4 Fecha de incorporación: 29/01/18 Mensajes recientes
Estimados, estoy siguiendo el "Ejemplo de firma digital" de la documentación para obtener la firma de un HASH, encontre dos errores (que corregí), pero necesito ayuda con la respuesta:


Primero, en el paso 2: PSO_HASH, devuelve un error en los datos... y según entiendo, falta agregar un "90 19" antes del hash, para indicarle el tamaño del mismo. Una vez haces eso, el comando:
>> 00 2A 90 A0 20 90 19 A3D00CBE708B435D6E7B898770378FD54319B2FD7571C769DB414094E7008624
regresa un:
<< 61 19
que según veo significa "Command successfully executed; \XX\ bytes of data are available and can be requested using GET RESPONSE."

Ahora, en la documentación no figura algo evidente, antes de ejecutar el último comando (PSO-CDS) hay que enviar el PIN de la eCI, ejemplo:
>> 00 20 00 11 0C 31 32 33 34 00 00 00 00 00 00 00 00

En definitiva, el ciclo completo es algo como:

00 A4 04 00 0c A0 00 00 00 18 40 00 00 01 63 42 00 00

00 22 41 B6 06 84 01 01 80 01 02

00 2A 90 A0 20 90 19 A3D00CBE708B435D6E7B898770378FD54319B2FD7571C769DB414094E7008624 #Envio el HASH

00 20 00 11 0C 31 32 33 34 00 00 00 00 00 00 00 00 # Ingreso el PIN: 1234

00 2A 9E 9A 00 # Obtengo como respuesta:

   63 AD 64 C6 5D 0D E0 60  50 01 23 77 6F B7 2F 47  AB 47 DC 40 69 36 F1 1E  85 88 B6 C5 ED A0 24 DB
   07 22 81 B0 0B 9C 0A 61  59 E2 CE F0 54 F6 94 88  06 7B 28 F9 84 E9 DD 44  96 7D D2 DB B5 BC E7 0A
   8D 0F 3C 81 8F C2 90 85  4B 1D 25 52 AB 6B 99 09  2E 36 32 84 62 E5 58 F4  89 40 61 D0 0E 06 1C 84
   80 44 2E 48 96 71 D1 78  71 A3 41 21 D3 B5 CB 47  8A 32 B6 9E A3 36 2B 65  39 76 20 B1 21 A2 01 21
   2C A7 AB 88 3E CF DD 14  59 D3 B6 F0 94 F8 CC AC  A1 03 99 AC C4 BF D1 D7  0D B8 33 9D 21 8F 02 BD
   2A 37 BD 2C BF 7D 79 C3  5C 92 B9 A4 05 5C 22 BD  31 E7 CA F9 1F E3 D3 E8  A8 6D A6 89 D5 12 40 3E
   38 8B 0F 3A 62 1D DD 70  DC 25 BB EA 22 6F 01 68  B7 30 58 F6 0E CA 5A AD  E4 0E 38 A1 62 F7 E5 83
   2E 13 DF 06 E5 F3 ED FF  3F 0A E8 48 50 66 0A 1B  5F 2F 0D D2 8F 61 F2 15  65 F7 FC 8C D9 03 27 BF
Ahora, mi pregunta es, en que formato está esta respuesta? como obtengo el hash?

Gracias.
2.5.0.0
thumbnail
Nicolas Piquerez, modificado hace 6 años.

RE: Firmar datos | comandos APDU

Padawan Mensajes: 62 Fecha de incorporación: 3/10/16 Mensajes recientes
Como andas Gustavo?

Es correcto la observación sobre los parametros 90 19 faltantes, corregimos el instructivo a la brevedad.

Con respecto a la operación de validar el PIN también es correcto que hay que realizarlo antes de hacer la firma, yo lo realizaria antes de enviar el hash, de esta manera el comando PSO_HASH retorna 90 00 . Me parece que si no se ingresa el PIN antes de enviar el hash la smartcard se encuentra en un estado de error.
Luego la respuesta del comando PSO-CDS son 256 bytes, que corresponde a la firma SHA256 con RSA. Estos bytes son el hash cifrado con la clave privada de la cedula, deberias de poder volver a obtener el hash desencriptando el mismo con la clave pública. De esta manera si el hash es el mismo que el original podemos afirmar que se realizo una firma del mismo con la cedula.

Cualquier otra duda a las ordenes y gracias por las oservaciones.

Saludos
thumbnail
gustavo javier azambuja bonilla, modificado hace 6 años.

RE: Firmar datos | comandos APDU

Youngling Mensajes: 4 Fecha de incorporación: 29/01/18 Mensajes recientes
Gracias Nicolas!

Tengo unas preguntas mas:

Nicolas PiquerezComo andas Gustavo?

Es correcto la observación sobre los parametros 90 19 faltantes, corregimos el instructivo a la brevedad.
Estoy haciendo pruebas y responde igualmente (pero con un RSA diferente) si haces un 90 20, hasta 90 24... cual es el número correcto? 19?



Con respecto a la operación de validar el PIN también es correcto que hay que realizarlo antes de hacer la firma, yo lo realizaria antes de enviar el hash, de esta manera el comando PSO_HASH retorna 90 00 . Me parece que si no se ingresa el PIN antes de enviar el hash la smartcard se encuentra en un estado de error.
Según mis pruebas solo da error (6A 80) al ejecutar el PSO-CDS... el PSO_HASH podes enviarlo sin el pin que te responde con un 90 19.

Luego la respuesta del comando PSO-CDS son 256 bytes, que corresponde a la firma SHA256 con RSA. Estos bytes son el hash cifrado con la clave privada de la cedula, deberias de poder volver a obtener el hash desencriptando el mismo con la clave pública. De esta manera si el hash es el mismo que el original podemos afirmar que se realizo una firma del mismo con la cedula.

Cualquier otra duda a las ordenes y gracias por las oservaciones.

Saludos
Cuál sería el comando para obtener la clave pública?


Gracias!


2.5.0.0
José Rodriguez, modificado hace 5 años.

RE: Firmar datos | comandos APDU

Youngling Mensaje: 1 Fecha de incorporación: 19/06/18 Mensajes recientes
Buenas tambien me interesa saber el comando  para obtener la clave pública? Y si se puede algun ejemplo.
Muchas Gracias!
​​​​​​​Saludos
thumbnail
Francisco Perdomo, modificado hace 5 años.

RE: Firmar datos | comandos APDU

Padawan Mensajes: 36 Fecha de incorporación: 27/03/17 Mensajes recientes
Lo cierto es que no tenemos una implementación hecha que saque la clave pública o el certificado, pero ahí te comparto lo que encontramos en el manual respecto a esto:

​​​​​​​

Si tienes mas consultas sigue preguntando! Te agradecemos si luego nos cuentas como resolviste, así queda la informacion para todos!

​​​​​​​Saludos!