...
Installation
L'installation est documentée documeopensc.confntée ici :
- Pour Linux (dans le cadre de la signature cachet d'établissement) : https://github.com/OpenSC/OpenSC/wiki/Compiling-and-Installing-on-Unix-flavors
- Pour Windows : https://github.com/OpenSC/OpenSC/wiki/Windows-Quick-Start
- Pour MacOS : https://github.com/OpenSC/OpenSC/wiki/macOS-Quick-Start
...
| Bloc de code | ||
|---|---|---|
| ||
opensc-tool -a |
Driver correctement détecté
Exemple de résultat avec les "anciennes" carte certinomis "Gemalto IDPrime" :
...
L'ATR est présent dans le fichier card-idprime.c . On voit que cette carte est reconnue comme "Gemalto IDPrime 940". Cela correspond à l'information que l'on peut obtenir via le pilote Safenet sous windows :
Driver non correctement détecté
Maintenant, lorsque l'on prend les dernières carte SIM livrées par Certinomis, l'ATR à changé :
...
On ne trouve pas de référence précise à cet ATR dans OpenSC, mais si on ouvre le token dans Safenet on voit ceci :
...
La référence est IDPrime 940c
...
Pour résumer, OpenSC ne gère pas forcément tous les matériels mais il permet d'obtenir suffisamment d'informations pour permettre son identification.
En regardant dans les logs on s'aperçoit alors qu'avec le jeu des masques, la 940c est vu comme une Gemalto IDPrime (generic), le souci est qu'avec ce driver+type, la 940c ne fonctionne pas correctement : l'authentification nous renvoie l'erreur suivante :
| Bloc de code | ||
|---|---|---|
| ||
error: PKCS11 function C_SignFinal failed: rv = CKR_FUNCTION_NOT_SUPPORTED (0x54) |
L'IDPrime 940c est en fait 'simplement' un nouveau modèle de la série des IDPrime 940, pour qu'il soit pris en compte par OpenSC, nous avons ici du modifier le code d'OpenSC pour ajouter l'ATR manquant et faire en sorte qu'il soit
...
reconnu comme "Gemalto IDPrime 940" (et non comme "Gemalto IDPrime (generic)"). Après compilation en local, la signature fonctionne correctement.
À la suite de cela, nous avons proposé cette modification à l'équipe d'OpenSC : https://github.com/OpenSC/OpenSC/pull/2941
Comme proposé plus haut pour les lecteurs USB, n'hésitez pas à recenser ci-dessous la liste des matériels et des ATR qui fonctionnent ou non avec OpenSC.
Dans la mesure du possible, il est préférable de demander un matériel pleinement opérationnel et supporté par OpenSC.
...
Driver non détecté
Il arrive enfin que l'ATR ne corresponde à aucun ATR de référencé dans OpenSC : aucun driver n'est proposé / détecté par opensc et une authentification (via pkcs11-tool --login --test -p ******) nous renvoie alors l'erreur suivante :
| Bloc de code | ||
|---|---|---|
| ||
Using slot 0 with a present token (0x0)
error: PKCS11 function C_GetTokenInfo failed: rv = CKR_TOKEN_NOT_RECOGNIZED (0xe1)
Aborting. |
Si l'ATR n'est pas reconnu, il peut cependant correspondre à un driver connu de OpenSC.
OpenSC propose en effet de forcer la reconnaissance d'ATR (non reconnu) via le fichier de configuration opensc.conf ( /etc/opensc/opensc.conf sous linux ; /Library/OpenSC/etc/opensc.conf sous MAC)
Pour reprendre l'exemple ci-dessus, et si (et seulement si) l'ATR de notre "IDPrime 940c" n'avait pas du tout était reconnu, la configuration suivante aurait permis de la faire reconnaître (et fonctionner) en tant que Gemalto IDPrime 940
| Bloc de code | ||
|---|---|---|
| ||
app default {
card_atr 3b:7f:96:00:00:80:31:80:65:b0:85:05:00:39:12:0f:fe:82:90:00 {
name = "Gemalto IDPrime 940C";
driver = "idprime";
type = "37004";
}
} |
le idprime est le nom du driver, on retrouve par convention ce nom à la fois dans le nom du fichier card-idprime.c mais surtout dans la déclaration du sc_card_driver
Cf https://github.com/OpenSC/OpenSC/blob/master/src/libopensc/card-idprime.c
Pour 37004, cela correspond à l'enum SC_CARD_TYPE_IDPRIME_940 donné dans cards.h : https://github.com/OpenSC/OpenSC/blob/master/src/libopensc/cards.h
(SC_CARD_TYPE_IDPRIME_940 est défini implicitement à 37004 : il est à la 4ème place après SC_CARD_TYPE_IDPRIME_BASE qui est défini explicitement à 37000).
Conclusion
| Info |
|---|
Pour résumer, OpenSC ne gère pas forcément tous les matériels mais il permet d'obtenir suffisamment d'informations pour permettre son identification. Comme proposé plus haut pour les lecteurs USB, n'hésitez pas à recenser ci-dessous la liste des matériels et des ATR qui fonctionnent ou non avec OpenSC. Dans la mesure du possible, il est préférable de demander un matériel pleinement opérationnel et supporté par OpenSC. |
| OpenSC | 0.23.0 | 0.24.0 |
|---|---|---|
| Gemalto IDPrime 940 (3b:7f:96:00:00:80:31:80:65:b0:85:59:56:fb:12:0f:fe:82:90:00) | OK | OK |
| Gemalto IDPrime 940c (3b:7f:96:00:00:80:31:80:65:b0:85:05:00:39:12:0f:fe:82:90:00) | KO | ? |
| Remarque |
|---|
Il est possible de vérifier le référencement de l'ATR via ce site : Exemple pour Gemalto IDPrime 940 https://smartcard-atr.apdu.fr/parse?ATR=3b:7f:96:00:00:80:31:80:65:b0:85:59:56:fb:12:0f:fe:82:90:00 Exemple pour Gemalto IDPrime 940c |
| Remarque |
Il est possible de vérifier le référencement de l'ATR via ce site : Exemple pour Gemalto IDPrime 940 https://smartcard-atr.apdu.fr/parse?ATR=3b:7f:96:00:00:80:31:80:65:b0:85:59:56:fb:12:0f:fe:82:90:00 Exemple pour Gemalto IDPrime 940c https://smartcard-atr.apdu.fr/parse?ATR=3b:7f:96:00:00:80:31:80:65:b0:85:05:00:39:12:0f:fe:82:90:00 L'ATR doit à minima y être présent pour pouvoir être pris en charge par OpenSC |
...
OpenSC |
Vérification du fonctionnement du token / carte et de la signature
Pour vérifier l'authentification sur votre matériel, vous pouvez lancer la commande suivante :
...
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
C_SeedRandom() and C_GenerateRandom():
seeding (C_SeedRandom) not supported
seems to be OK
Digests:
all 4 digest functions seem to work
MD5: OK
RIPEMD160: OK
SHA-1: OK
SHA256: OK
Ciphers: not implemented
Signatures (currently only for RSA)
testing key 0 (Private key 1)
all 4 signature functions seem to work
testing signature mechanisms:
RSA-PKCS: OK
SHA256-RSA-PKCS: OK
Verify (currently only for RSA)
testing key 0 (Private key 1)
RSA-PKCS: OK
Unwrap: not implemented
Decryption (currently only for RSA)
testing key 0 (Private key 1) -- can't be used to decrypt, skipping
No errors |
Logs debug
Si vous être confrontés à un dispositif matériel inopérant avec opensc, vous pouvez facilement récupérer des informations de debuggage en positionnant une variable d'environnement OPENSC_DEBUG à 9
...
| language | bash |
|---|---|
| theme | RDark |
...
RSA-PKCS: OK
Unwrap: not implemented
Decryption (currently only for RSA)
testing key 0 (Private key 1) -- can't be used to decrypt, skipping
No errors |
Logs debug
Si vous souhaitez récupérer des informations de debuggage, vous avez 2 possibilités :
Variable d'environnement OPENSC_DEBUG
en positionnant une variable d'environnement OPENSC_DEBUG à 9
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
export OPENSC_DEBUG=9 |
Fichier de configuration opensc.conf
Vous pouvez renvoyer des logs dans un fichier en configurant rapidement opensc.conf
| Bloc de code | ||
|---|---|---|
| ||
app default {
debug = 3;
debug_file = opensc-debug.txt;
} |
Le fichier opensc.conf est chargé à chaque lancement d'opensc, pkcs11-tool, ...
Logs disponibles
Suite à cela, un simple
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
opensc-tool -a |
...
