On Sunday 21. October 2012 17:24:41 you wrote:
> Hello,
>
> Le 19/10/2012 15:02, Mathias Tausig a écrit :
> > I am writing a PKCS#15 application for a (cardos v4.4) smartcard which
> > references an external signature application. The RSA key and the PIN are
> > stored in that external application, the PIN needs to be verified upon
> > every key usage.
> >
> > To accomplish this, I have set the userConsent value in the
> > PrivateKeyDictionaryFile to 1.
> >
> > Here is the content of the PrkDF (output from openssl):
> >
> > 0:d=0 hl=2 l= 67 cons: SEQUENCE
> >
> > 2:d=1 hl=2 l= 30 cons: SEQUENCE
> > 4:d=2 hl=2 l= 18 prim: UTF8STRING :Signaturschlüssel
> >
> > 24:d=2 hl=2 l= 2 prim: BIT STRING
> >
> > 0000 - 07 80 ..
> >
> > 28:d=2 hl=2 l= 1 prim: OCTET STRING
> >
> > 0000 - 11 .
> >
> > 31:d=2 hl=2 l= 1 prim: INTEGER :01
> > 34:d=1 hl=2 l= 14 cons: SEQUENCE
> > 36:d=2 hl=2 l= 1 prim: OCTET STRING :B
> > 39:d=2 hl=2 l= 2 prim: BIT STRING
> >
> > 0000 - 05 .
> > 0002 - <SPACES/NULS>
> >
> > 43:d=2 hl=2 l= 2 prim: BIT STRING
> >
> > 0000 - 03 b8 ..
> >
> > 47:d=2 hl=2 l= 1 prim: INTEGER :02
> > 50:d=1 hl=2 l= 17 cons: cont [ 1 ]
> > 52:d=2 hl=2 l= 15 cons: SEQUENCE
> > 54:d=3 hl=2 l= 6 cons: SEQUENCE
> > 56:d=4 hl=2 l= 4 prim: OCTET STRING
> >
> > 0000 - 3f 00 1f ff ?...
> >
> > 62:d=3 hl=2 l= 2 prim: INTEGER :0400
> > 66:d=3 hl=2 l= 1 prim: INTEGER :14
> > 69:d=0 hl=2 l= 0 prim: EOC
> >
> > The problem is, that when I try to use the card with pkcs11-tool (either
> > with the --test option or with a --sign command), it doesn't verify the
> > pin before signing. Here is the relevant part of the APDU output:
> >
> > Oct 19 14:40:20 off17 pcscd[4590]: 00006755 APDU: 00 A4 08 00 02 1F FF
> > Oct 19 14:40:20 off17 pcscd[4590]: 00024106 SW: 90 00
> > Oct 19 14:40:20 off17 pcscd[4590]: 00001410 APDU: 00 20 00 81 06 31 32 33
> > 34 35 36
> > Oct 19 14:40:20 off17 pcscd[4590]: 00048516 SW: 90 00
> > Oct 19 14:40:20 off17 pcscd[4590]: 00005039 APDU: 00 A4 08 00 02 50 15
> > Oct 19 14:40:20 off17 pcscd[4590]: 00024963 SW: 90 00
> > Oct 19 14:40:20 off17 pcscd[4590]: 00001737 APDU: 00 A4 08 00 02 1F FF
> > Oct 19 14:40:20 off17 pcscd[4590]: 00028271 SW: 90 00
> > Oct 19 14:40:20 off17 pcscd[4590]: 00000164 APDU: 00 22 01 B6 03 83 01 02
> > Oct 19 14:40:20 off17 pcscd[4590]: 00019795 SW: 90 00
> > Oct 19 14:40:20 off17 pcscd[4590]: 00000185 APDU: 00 2A 9E 9A 80 00 01 FF
> > FF FF FF FF FF FF FF FF F
> > F FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
> > FF FF FF FF FF FF FF FF F
> > F FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
> > FF FF FF FF FF FF FF FF F
> > F FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 30 21 30 09 06 05 2B 0E 03
> > 02 1A 05 00 04 14 04 75 9
> > 5 D0 FA E9 72 FB ED 0C 51 B4 A4 1C 7A 34 9E 0C 47 BB 80
> > Oct 19 14:40:20 off17 pcscd[4590]: 00039821 SW: 69 82
> >
> > In the first two commands the signature DF (1fff) is entered and the PIN
> > verified, thant it switches back to the PKCS#15 DF without doing anything
> > there (APDU#3). Than the signature DF is reentered and a signing command
> > is tried without prior authentication.
> >
> > Is this a bug, is the userConsent field not heeded, or am I missing
> > something?
> Please confirm (or not) -- in your test you are not using the current OpenSC
> pkcs#11 module but only using the pkcs11-tool.
>
> According to your logs, the application DF is selected between the PIN
> verifying and 'sign' operation. That's the behavior of the previous
> versions of OpenSC.
>
> Could you tell us more about the application that generates the APDUs?
> If it based on the older OpenSC version, try to change the 'lock_login'
> configuration option.
I am using opensc-12.2, the version shipped with openSuse 12.2 (32 bit), which
is the most current stable version (according to the opensc homepage).
Here is the p11spy output produced by
pkcs11-tool --module pkcs11-spy.so --sign --login --input-file /tmp/csr --
output-file /tmp/csr.sig -m SHA1-RSA-PKCS --verbose --pin "123456"
*************** OpenSC PKCS#11 spy *****************
Loaded: "/usr/lib/pkcs11/opensc-pkcs11.so"
0: C_GetFunctionList
Returned: 0 CKR_OK
1: C_Initialize
[in] pInitArgs = (nil)
Returned: 0 CKR_OK
2: C_GetSlotList
[in] tokenPresent = 0x0
[out] pSlotList:
Count is 4
[out] *pulCount = 0x4
Returned: 0 CKR_OK
3: C_GetSlotList
[in] tokenPresent = 0x0
[out] pSlotList:
Slot -1
Slot 1
Slot 5
Slot 9
[out] *pulCount = 0x4
Returned: 0 CKR_OK
4: C_GetSlotInfo
[in] slotID = 0xffffffff
[out] pInfo:
slotDescription: 'Virtual hotplug slot '
' '
manufacturerID: 'OpenSC (www.opensc-project.org) '
hardwareVersion: 0.0
firmwareVersion: 0.0
flags: 6
CKF_REMOVABLE_DEVICE
CKF_HW_SLOT
Returned: 0 CKR_OK
5: C_GetSlotInfo
[in] slotID = 0x1
[out] pInfo:
slotDescription: 'Cherry SmartBoard XX44 00 00 '
' '
manufacturerID: 'OpenSC (www.opensc-project.org) '
hardwareVersion: 0.0
firmwareVersion: 0.0
flags: 7
CKF_TOKEN_PRESENT
CKF_REMOVABLE_DEVICE
CKF_HW_SLOT
Returned: 0 CKR_OK
6: C_GetTokenInfo
[in] slotID = 0x1
[out] pInfo:
label: 'test card (Signatur '
manufacturerID: 'CardOS V4.4 (C) Siemens AG 1994-'
model: 'PKCS#15 '
serialNumber: '910E207A1616152D'
ulMaxSessionCount: 0
ulSessionCount: 0
ulMaxRwSessionCount: 0
ulRwSessionCount: 0
ulMaxPinLen: 8
ulMinPinLen: 6
ulTotalPublicMemory: -1
ulFreePublicMemory: -1
ulTotalPrivateMemory: -1
ulFreePrivateMemory: -1
hardwareVersion: 0.0
firmwareVersion: 0.0
time: ' '
flags: 50c
CKF_LOGIN_REQUIRED
CKF_USER_PIN_INITIALIZED
CKF_PROTECTED_AUTHENTICATION_PATH
CKF_TOKEN_INITIALIZED
Returned: 0 CKR_OK
7: C_OpenSession
[in] slotID = 0x1
[in] flags = 0x6
pApplication=(nil)
Notify=(nil)
[out] *phSession = 0x953bf10
Returned: 0 CKR_OK
8: C_GetTokenInfo
[in] slotID = 0x1
[out] pInfo:
label: 'test card (Signatur '
manufacturerID: 'CardOS V4.4 (C) Siemens AG 1994-'
model: 'PKCS#15 '
serialNumber: '910E207A1616152D'
ulMaxSessionCount: 0
ulSessionCount: 0
ulMaxRwSessionCount: 0
ulRwSessionCount: 0
ulMaxPinLen: 8
ulMinPinLen: 6
ulTotalPublicMemory: -1
ulFreePublicMemory: -1
ulTotalPrivateMemory: -1
ulFreePrivateMemory: -1
hardwareVersion: 0.0
firmwareVersion: 0.0
time: ' '
flags: 50c
CKF_LOGIN_REQUIRED
CKF_USER_PIN_INITIALIZED
CKF_PROTECTED_AUTHENTICATION_PATH
CKF_TOKEN_INITIALIZED
Returned: 0 CKR_OK
9: C_Login
[in] hSession = 0x953bf10
[in] userType = CKU_USER
[in] pPin[ulPinLen] bfcc30ce / 6
31323334 3536
Returned: 0 CKR_OK
10: C_FindObjectsInit
[in] hSession = 0x953bf10
[in] pTemplate[1]:
CKA_CLASS CKO_PRIVATE_KEY
Returned: 0 CKR_OK
11: C_FindObjects
[in] hSession = 0x953bf10
[in] ulMaxObjectCount = 0x1
[out] ulObjectCount = 0x1
Object 0x95369e8 matches
Returned: 0 CKR_OK
12: C_FindObjectsFinal
[in] hSession = 0x953bf10
Returned: 0 CKR_OK
13: C_SignInit
[in] hSession = 0x953bf10
pMechanism->type=CKM_SHA1_RSA_PKCS
[in] hKey = 0x95369e8
Returned: 0 CKR_OK
14: C_Sign
[in] hSession = 0x953bf10
[in] pData[ulDataLen] bfcc05eb / 4
626C610A
Returned: 257 CKR_USER_NOT_LOGGED_IN
15: C_SignInit
[in] hSession = 0x953bf10
pMechanism->type=CKM_SHA1_RSA_PKCS
[in] hKey = 0x95369e8
Returned: 0 CKR_OK
16: C_SignUpdate
[in] hSession = 0x953bf10
[in] pPart[ulPartLen] bfcc05eb / 4
626C610A
Returned: 0 CKR_OK
17: C_SignFinal
[in] hSession = 0x953bf10
Returned: 257 CKR_USER_NOT_LOGGED_IN
18: C_Finalize
Returned: 0 CKR_OK
Displaying the private key with pkcs11-tool shows, that
CKA_ALWAYS_AUTHENTICATE is set corrrectly:
Private Key Object; RSA
label: Signaturschlüssel
ID: 42
Usage: sign
Access: always authenticate
cheers
Mathias
>
> Kind regards,
> Viktor.
>
> > _______________________________________________
> > opensc-devel mailing list
> > [email protected]
> > http://www.opensc-project.org/mailman/listinfo/opensc-devel
_______________________________________________
opensc-devel mailing list
[email protected]
http://www.opensc-project.org/mailman/listinfo/opensc-devel