...
| Info |
|---|
Le projet OpenSC fournit un ensemble de bibliothèques et d'outils pour travailler avec des cartes à puce (Token). Son principal objectif est de prendre en charge les cartes cryptographiques et de faciliter leur utilisation dans des applications de sécurité telles que l'authentification, le chiffrement des e-mails et les signatures numériques. OpenSC met en œuvre les interfaces standard pour les cartes à puce, telles que l'API PKCS#11, le pilote de carte à puce de Windows et CryptoTokenKit sur macOS. Dans le cadre d'esup-signature, OpenSC permet l'accès aux supports cryptographiques pour la signature avec des certificats eIDas (RGS**) pour les signature signatures cachet d'etablissement établissement (Utilisation d'un certificat cachet d'établissement à l'université de Rouen ou encore Instance Esup-Signature dédiée au consortium ESUP-Portail) ou pour les signature avec Esup-DSS-Client (Esup-DSS-Client). |
...
| Remarque |
|---|
En général les supports cartographique cartographiques (token) se présentent sous la forme d'un lecteur de carte a puce USB (un une clé) accompagné d'une carte SIM. Il faut donc qu'OpenSC supporte à la fois le lecteur et à la fois la carte SIM. La liste est materiels des matériels supportés est ici : https://github.com/OpenSC/OpenSC/wiki/Supported-hardware-%28smart-cards-and-USB-tokens%29 |
...
- 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
...
...
Il est possible de faire l'installation sous linux directement à partir du dépot OpenSC ce qui permet, éventuellement, de modifier le code source
Compatibilité matérielle
Si l'on ne parvient pas à signer directement avec le couple clé/carte SIM que vous possédez, vous pouvez contrôler votre matériel avec les commandes suivantes :
...
| Info |
|---|
A cette étape, il est important de vérifier que votre lecteur USB est bien compatible avec OpenSC, voir : https://github.com/OpenSC/OpenSC/wiki/Supported-hardware-%28smart-cards-and-USB-tokens%29 Même s'il n'est pas listé, il nous a été possible de signer en insérant la carte sim (avec la carte complète style carte de crédit) dans un vieux lecteur Identiv 4700F. La liste d'OpenSC n'est donc pas exhaustive. N'hésitez par pas à modifier le tableau ci-dessous pour y insérer les références des lecteurs fonctionnels chez vous |
...
| Avertissement |
|---|
Ce point est plus problématique. OpenSC permet une abstration materielle abstraction matérielle mais la compatibilité est limitée. Par exemple, les derrières carte SIM obtenues auprès de Certinomis (septembre 2023 ?) ne sont pas reconnes reconnues pas OpenSC 0.23.0 |
Pour obtenir la liste des drivers supportés :
...
Pour lister les périphériques présents sur votre machine et obtenite obtenir le code ATR de votre carte SIM:
...
Exemple de résultat avec les anciènnes "anciennes" carte certinomis "Gemalto IDPrime" :
...
Maintenant, lorsque l'on prend les dernières carte SIM livrées par Certinomis, Ll'ATR à changé :
| Bloc de code | ||
|---|---|---|
| ||
Using reader with a card: Feitian SCR301 (FFFFFFFFFFFFF) 00 00 3b:7f:96:00:00:80:31:80:65:b0:85:05:00:39:12:0f:fe:82:90:00 |
On ne trouve pas de référence à cet ATR dans OpenSC, mais si on ouvre le token dans Safenet on voit ceci :
...
| Info |
|---|
Pour résumer, OpenSC ne gère pas forcément tous les matériels mais il permet d'obtenir suffisament suffisamment d'informations pour permettre son identification. Dans notre cas, nous avons modifier 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 modifié 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 transmit la proposé cette modification à l'équipe d'OpenSC : https://github.com/OpenSC/OpenSC/commitpull/3ea23d71277db75ba6c609804bb8affec2e8bcae2941 Comme proposé plus haut pour les lecteurs USB, l'idée est de recenser, n'hésitez pas à recenser ci-dessous , la liste des matériels et des ATR qui fonctionnent ou non pas 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 reférencement 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:05:00:39: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:59:56:fb:12:0f:fe:82:90:00 L'ATR doit à minima y être présent pour pouvoir être pris en charge par OpenSC |
Fonctionnement de la signature
Pour vérifier l'authetification authentification sur votre matériel, vous pouvez lancer la commande suivante :
...
On doit alors entrer le code PIN. Le resultat résultat doit ressembler à ça :
| 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
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
export OPENSC_DEBUG=9 |
Suite à cela, un simple
| Bloc de code | ||||
|---|---|---|---|---|
| ||||
opensc-tool -a |
vous renverra des logs de manière très verbeuse, dont l'APDU permettant d'identifier la carte sim FFFFFFFFFFFFF (apdu qui parlera aux personnes s'étant frottés aux technologies PC/SC NFC au travers peut-être d'esup-nfc-tag )
Attention, si vous envoyez des commandes nécessitant le code PIN de votre carte, celui-ci sera très certainement écrit dans ces logs.
En faisant un test d'authentification (login) avec ces messages en debug, vous pourrez par exemple voir le nom du driver utilisé, c'est à dire le driver sélectionné fonction de l'ATR présenté par votre carte SIM :
| Bloc de code | ||
|---|---|---|
| ||
... sc_connect_card: card info name:'Gemalto IDPrime 940' ... |