Firmar datos | comandos APDUFirmar datos | comandos APDUhttps://centroderecursos.agesic.gub.uy/c/message_boards/find_thread?p_l_id=33353&threadId=1517912024-03-29T00:55:26Z2024-03-29T00:55:26ZRE: Firmar datos | comandos APDUFrancisco Perdomohttps://centroderecursos.agesic.gub.uy/c/message_boards/find_message?p_l_id=33353&messageId=2462302018-06-20T17:39:56Z2018-06-20T17:38:29ZLo 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:<br /><br /><img src="https://centroderecursos.agesic.gub.uy/documents/31564/0/Screen+Shot+2018-06-20+at+2.37.07+PM.png/9d0a5579-be7d-2916-61f1-17acbec5f7e9?t=1529516287933" /><img src="https://centroderecursos.agesic.gub.uy/documents/31564/0/Screen+Shot+2018-06-20+at+2.37.48+PM.png/16a6326f-613e-aa0a-60cb-af37dc375053?t=1529516300830" /><br /><br />Si tienes mas consultas sigue preguntando! Te agradecemos si luego nos cuentas como resolviste, así queda la informacion para todos!<br /><br />Saludos!Francisco Perdomo2018-06-20T17:38:29ZRE: Firmar datos | comandos APDUJosé Rodriguezhttps://centroderecursos.agesic.gub.uy/c/message_boards/find_message?p_l_id=33353&messageId=2444552018-06-19T01:31:15Z2018-06-19T01:31:15ZBuenas tambien me interesa saber el comando para obtener la clave pública? Y si se puede algun ejemplo.<br />Muchas Gracias!<br />SaludosJosé Rodriguez2018-06-19T01:31:15ZRE: Firmar datos | comandos APDUGustavo Azambujahttps://centroderecursos.agesic.gub.uy/c/message_boards/find_message?p_l_id=33353&messageId=1519132018-01-30T12:51:00Z2018-01-30T12:51:00ZGracias Nicolas!<br /><br />Tengo unas preguntas mas:<br /><br /><div class="quote"><div class="quote-content">Nicolas PiquerezComo andas Gustavo?<br /><br />Es correcto la observación sobre los parametros 90 19 faltantes, corregimos el instructivo a la brevedad.<br /></div></div>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?<br /><br /><br /><div class="quote"><div class="quote-content"><br />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.</div></div>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.<br /><br /><div class="quote"><div class="quote-content">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.<br /><br />Cualquier otra duda a las ordenes y gracias por las oservaciones.<br /><br />Saludos<br /></div></div>Cuál sería el comando para obtener la clave pública?<br /><br /><br />Gracias!<br /><br /><br />2.5.0.0Gustavo Azambuja2018-01-30T12:51:00ZRE: Firmar datos | comandos APDUNicolas Piquerezhttps://centroderecursos.agesic.gub.uy/c/message_boards/find_message?p_l_id=33353&messageId=1518882018-01-29T20:22:45Z2018-01-29T20:22:45ZComo andas Gustavo?<br /><br />Es correcto la observación sobre los parametros 90 19 faltantes, corregimos el instructivo a la brevedad.<br /><br />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.<br />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.<br /><br />Cualquier otra duda a las ordenes y gracias por las oservaciones.<br /><br />SaludosNicolas Piquerez2018-01-29T20:22:45ZFirmar datos | comandos APDUGustavo Azambujahttps://centroderecursos.agesic.gub.uy/c/message_boards/find_message?p_l_id=33353&messageId=1517902018-01-29T17:34:17Z2018-01-29T17:33:40ZEstimados, estoy siguiendo el "Ejemplo de firma digital" de la <a href="https://centroderecursos.agesic.gub.uy/web/seguridad/wiki/-/wiki/Main/Gu%C3%ADa+de+uso+de+CI+electr%C3%B3nica+a+trav%C3%A9s+de+APDU#section-Gu%C3%ADa+de+uso+de+CI+electr%C3%B3nica+a+trav%C3%A9s+de+APDU-Firma+Digital">documentación</a> para obtener la firma de un HASH, encontre dos errores (que corregí), pero necesito ayuda con la respuesta:<br /><br /><br />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:<br /><div class="lfr-code"><table><tbody><tr><td class="line-numbers" data-line-number="1"></td><td class="lines"><div class="line">>> 00 2A 90 A0 20 90 19 A3D00CBE708B435D6E7B898770378FD54319B2FD7571C769DB414094E7008624</div></td></tr></tbody></table></div>regresa un:<br /><div class="lfr-code"><table><tbody><tr><td class="line-numbers" data-line-number="1"></td><td class="lines"><div class="line"><< 61 19</div></td></tr></tbody></table></div>que según veo significa "Command successfully executed; \XX\ bytes of data are available and can be requested using GET RESPONSE."<br /><br />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:<br /><div class="lfr-code"><table><tbody><tr><td class="line-numbers" data-line-number="1"></td><td class="lines"><div class="line">>> 00 20 00 11 0C 31 32 33 34 00 00 00 00 00 00 00 00</div></td></tr></tbody></table></div><br />En definitiva, el ciclo completo es algo como:<br /><br /><div class="lfr-code"><table><tbody><tr><td class="line-numbers" data-line-number="1"></td><td class="lines"><div class="line">00 A4 04 00 0c A0 00 00 00 18 40 00 00 01 63 42 00 00</div></td></tr><tr><td class="line-numbers" data-line-number="2"></td><td class="lines"><div class="line"><br /></div></td></tr><tr><td class="line-numbers" data-line-number="3"></td><td class="lines"><div class="line">00 22 41 B6 06 84 01 01 80 01 02</div></td></tr><tr><td class="line-numbers" data-line-number="4"></td><td class="lines"><div class="line"><br /></div></td></tr><tr><td class="line-numbers" data-line-number="5"></td><td class="lines"><div class="line">00 2A 90 A0 20 90 19 A3D00CBE708B435D6E7B898770378FD54319B2FD7571C769DB414094E7008624 #Envio el HASH</div></td></tr><tr><td class="line-numbers" data-line-number="6"></td><td class="lines"><div class="line"><br /></div></td></tr><tr><td class="line-numbers" data-line-number="7"></td><td class="lines"><div class="line">00 20 00 11 0C 31 32 33 34 00 00 00 00 00 00 00 00 # Ingreso el PIN: 1234</div></td></tr><tr><td class="line-numbers" data-line-number="8"></td><td class="lines"><div class="line"><br /></div></td></tr><tr><td class="line-numbers" data-line-number="9"></td><td class="lines"><div class="line">00 2A 9E 9A 00 # Obtengo como respuesta:</div></td></tr><tr><td class="line-numbers" data-line-number="10"></td><td class="lines"><div class="line"><br /></div></td></tr><tr><td class="line-numbers" data-line-number="11"></td><td class="lines"><div class="line"> 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</div></td></tr><tr><td class="line-numbers" data-line-number="12"></td><td class="lines"><div class="line"> 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</div></td></tr><tr><td class="line-numbers" data-line-number="13"></td><td class="lines"><div class="line"> 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</div></td></tr><tr><td class="line-numbers" data-line-number="14"></td><td class="lines"><div class="line"> 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</div></td></tr><tr><td class="line-numbers" data-line-number="15"></td><td class="lines"><div class="line"> 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</div></td></tr><tr><td class="line-numbers" data-line-number="16"></td><td class="lines"><div class="line"> 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</div></td></tr><tr><td class="line-numbers" data-line-number="17"></td><td class="lines"><div class="line"> 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</div></td></tr><tr><td class="line-numbers" data-line-number="18"></td><td class="lines"><div class="line"> 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</div></td></tr></tbody></table></div>Ahora, mi pregunta es, en que formato está esta respuesta? como obtengo el hash?<br /><br />Gracias.<br />2.5.0.0Gustavo Azambuja2018-01-29T17:33:40Z