Hi, Sylvain. First of all, thank you for the analysis of the log!
Answering to your question about PIN verification, I verified the two PINs (PIN #0 and PIN #1) before the sequence that I sent to this list. How can I know what is wrong: applet or muscle-tool? I will try to test this with another card, in order to see if is the card module that is wrong... Amanda 2008/3/27, Sylvain Ferey <[EMAIL PROTECTED]>: > > At 12:57 21/03/2008 -0300, Amanda Ortega wrote: > >The sequence of APDUS obtained through pcscd -fda to the same sequence of > >encrypt/decrypt is: > > > hereafter is the analysis of your log: > > > * List Keys, reset sequence & get first entry > > > B0 3A 00 00 0B > < 00 03 FF 04 00 00 00 00 00 00 00 > < 90 00 > > key Id: 00 > key type: 03 : RSA CRT Private key > key partner: FF > key size: 0400 : 1024 bits > key ACL: 0000 0000 0000 > > * List Keys, get next entry > > > > B0 3A 01 00 0B > < 01 03 FF 04 00 FF FF 00 02 00 02 > < 90 00 > > * List Keys, get next entry > > key Id: 01 > key type: 03 : RSA CRT Private key > key partner: FF > key size: 0400 : 1024 bits > key ACL: FFFF 0002 0002 > > * List Keys, get next entry > > > B0 3A 01 00 0B > < 02 01 FF 04 00 00 00 00 00 00 00 > < 90 00 > > key Id: 02 > key type: 01 : RSA Public key > key partner: FF > key size: 0400 : 1024 bits > key ACL: 0000 0000 0000 > > * List Keys, get next entry > > > B0 3A 01 00 0B > < 03 01 FF 04 00 00 02 00 02 00 00 > < 90 00 > > key Id: 03 > key type: 01 : RSA Public key > key partner: FF > key size: 0400 : 1024 bits > key ACL: FFFF 0002 0002 > > note: "key partner" would be set since generation was certainly performed > on card, but it is undefined. > we can assume that: > - keys '00' & '02' are the first unprotected key-pair > - keys '01' & '03' are the 2nd PIN-protected key-pair > > > * ComputeCrypt, init cipher > > > B0 36 03 01 05 00 03 01 00 00 > < 90 00 > > uses Public Key '03' (P1 = 03') > > cipher_mode: 00 the value '01' is documented for RSA_X509, > according > the source code, the value '00' shall indeed be > used. > > cipher_dir.: 03 "data encrypt" (fine) > data_location: 01 optional init data are in the APDU > data_length: 0000 no init data > > > > Enter text : > 30303030303030303030303030303030 > 30303030303030303030303030303030 > 30303030303030303030303030303030 > 30303030303030303030303030303030 > 30303030303030303030303030303030 > 30303030303030303030303030303030 > 30303030303030303030303030303030 > 30303030303030303030303030303030 > > * ComputeCrypt, process cipher > > > B0 36 03 03 83 > > uses Public Key '03' (P1 = 03') > > data field: > > data_location: 01 data are in the APDU > data_length: 0080 length of data (to be encrypted) > data: > 01 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 > 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 > 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 > 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 > 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 > 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 > 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 > 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 > > here the first byte is invalid. > the muscle-tool is buggy and does not transmit the right data. > > < 61 82 (response is 130 bytes long) > > * Get Response > > > 00 C0 00 00 82 > < > response_length: 0080 (useless field, the terminal does know > the length of data it's just receiving) > response_data_field: (the wrapped text) > 50 E1 01 65 72 3A DF 21 48 5A C8 0E 09 24 59 0C > FB 13 A5 79 9D BF 60 32 9B 1E D7 DD F3 DA B4 DF > F0 02 BB 9A B4 B7 09 B0 64 62 9E 67 9E D1 65 A8 > 9D 61 B2 CD 8F 81 25 CF AC 88 4F 73 66 22 0F 5C > 92 AF E4 42 80 4F 39 D3 9E A5 97 06 A4 45 D6 8B > 97 37 65 3C 2E 2E 5C E2 B0 BC F6 1B 75 F6 D1 AF > 0D 9A 44 C3 A2 61 27 D8 9F 96 F8 60 43 D0 8E 79 > B4 5D FA F8 00 C9 6D FB F6 55 F7 68 63 EA 31 E1 > < 90 00 > > > * List Keys, reset sequence & get first entry > > > B0 3A 00 00 0B > < 00 03 FF 04 00 00 00 00 00 00 00 > < 90 00 > > key Id: 00 > key type: 03 : RSA CRT Private key > key partner: FF > key size: 0400 : 1024 bits > key ACL: 0000 0000 0000 > > * List Keys, get next entry > > > B0 3A 01 00 0B > < 01 03 FF 04 00 FF FF 00 02 00 02 > < 90 00 > > key Id: 01 > key type: 03 : RSA CRT Private key > key partner: FF > key size: 0400 : 1024 bits > key ACL: FFFF 0002 0002 > > > * ComputeCrypt, init cipher > > > B0 36 01 01 05 00 04 01 00 00 > < 90 00 > > uses RSA CRT Private Key '01' (P1 = 01') > > cipher_mode: 00 the value '01' is documented for RSA_X509, > according > the source code, the value '00' shall indeed be > used. > > cipher_dir.: 04 "data decrypt" (fine) > data_location: 01 optional init data are in the APDU > data_length: 0000 no init data > > the USE ACL of key '01' is '0002' so PIN #2 (1 based), no Verify PIN was > performed in this part of script but a Verify may have been issued some > (long?) time ago and no card reset has been issued - to be confirmed. > > Enter text : > 50E10165723ADF21485AC80E0924590C > FB13A5799DBF60329B1ED7DDF3DAB4DF > F002BB9AB4B709B064629E679ED165A8 > 9D61B2CD8F8125CFAC884F7366220F5C > 92AFE442804F39D39EA59706A445D68B > 9737653C2E2E5CE2B0BCF61B75F6D1AF > 0D9A44C3A26127D89F96F86043D08E79 > B45DFAF800C96DFBF655F76863EA31E1 > > * ComputeCrypt, process cipher > > > B0 36 01 03 83 > > uses Private Key '01' (P1 = 01') > > data field: > > data_location: 01 data are in the APDU > data_length: 0080 length of data (to be encrypted) > data: > 01 > 50 E1 01 65 72 3A DF 21 48 5A C8 0E 09 24 59 0C > FB 13 A5 79 9D BF 60 32 9B 1E D7 DD F3 DA B4 DF > F0 02 BB 9A B4 B7 09 B0 64 62 9E 67 9E D1 65 A8 > 9D 61 B2 CD 8F 81 25 CF AC 88 4F 73 66 22 0F 5C > 92 AF E4 42 80 4F 39 D3 9E A5 97 06 A4 45 D6 8B > 97 37 65 3C 2E 2E 5C E2 B0 BC F6 1B 75 F6 D1 AF > 0D 9A 44 C3 A2 61 27 D8 9F 96 F8 60 43 D0 8E 79 > B4 5D FA F8 00 C9 6D FB F6 55 F7 68 63 EA 31 > < 61 82 > > only the first 127 bytes of the given data are transmitted. > a leading byte '01' is inserted and replace the last byte > of the ciphertext - same bug of muscle-tool that does not > transmit the right data. > > * Get Response > > > 00 C0 00 00 82 > < 00 80 > 37 03 01 22 C1 35 C7 BD F9 B4 3D A9 16 B8 B5 99 > 33 E5 74 1D 38 FE 9E 9C 87 84 16 C2 6A 14 B3 81 > 1D 8A 54 42 12 8F AB 0D 4D 1D 31 72 56 0B 52 1A > F0 95 C8 D7 31 FA FA 8F 7E 02 D7 4A 35 C9 F6 9F > 57 90 94 2A E8 BE BA 4E 46 17 40 02 79 24 A8 F8 > D6 C4 97 8A C3 94 C9 5A E6 91 77 1D 92 28 83 A7 > F6 F6 A9 F3 91 3F 7F 4E 32 99 73 F9 7D B2 9A 74 > B9 1D B2 F2 44 FB 2A 03 78 F9 2C 22 FC 18 92 BF > < 90 00 > > that's a signature of 01 50 E1 ... EA 31, not the unwrapping > of the first given plain text. > > conclusions: > - either you did transmit the PIN in a previously (not provided) > sequence or the applet is buggy and fail to verify ACL. > > - the muscle-tool (itself or the card module you used) is buggy. > > the '01' inserted at the beginning of msg may let one thinks that > the tool performs a PKCS#1 padding of the data but if so it shall > insert a '02' for public key encryption, it can also be an echo of > the menu choice figure, but if so why it is not present at the > beginning of the data field (instead of beginning of the plain / cipher > text). I did not check the muscle-tool source files to learn more. > > > Sylvain. > > >
_______________________________________________ Muscle mailing list Muscle@lists.musclecard.com http://lists.drizzle.com/mailman/listinfo/muscle