Applications Terminales pour Cartes puce BERNARDET William PHAMTRONG
Applications Terminales pour Cartes à puce BERNARDET William PHAM-TRONG Toàn Étude d’approfondissement RICM 3 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Plan de la présentation n Introduction : Contexte d’utilisation des cartes à puces n Protocoles T 0 et T 1 n La technologie PC/SC - MUSCLE n La technologie OCF n Comparaison entre les deux standards n Conclusion 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 2
Le contexte industriel n Les enjeux économiques n Facilité de développement n Déploiement n Carte multi-services 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 3
Contexte d’utilisation des cartes à puces n Pourquoi une interface? ? ? ? 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 4
Contexte d’utilisation des cartes à puces n Pourquoi une interface? API • PCSC • OCF 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 5
La carte à puce • Alimentation électrique • Initialisation • Communication 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 6
Protocole T 0 n Définie dans ISO 7816. n Orienté caractères. n Asynchrone half-duplex. n Gestion d’erreur rudimentaire (basée sur le hardware). 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 7
Protocole T 0 – Entête Nom Taille Description CLA 1 octet Classe de la commande INS 1 octet Code de l’instruction P 1 1 octet Paramètre 1 P 2 1 octet Paramètre 2 P 3 1 octet Taille des données envoyé, ou quantité de données attendu en réponse 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 8
Protocole T 0 – Retour Nom Caractère ACK INS Acquittement ___ INS Le transfert peu continuer. 0 x 60 La carte est occupée. 0 x 6 x or 0 x 9 x Le lecteur va recevoir une autre information sur l ’état de la carte NULL SW 1 22/10/2021 Description Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 9
Protocole T 1 n Définie dans ISO 7816 n Orienté blocs. n Asynchrone half-duplex. n Constitué d’un prologue et d’un épilogue. n Gestion d’erreurs plus évoluée. 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 10
Protocole T 1 - Trame Prologue Informations Epilogue Adresse du noeud (NAD) Protocol Control Byte (PCB) Taille (LEN) APDU or Control Information (INF) Error Detection Code (EDC) 1 octet 0 to 254 octets 1 or 2 octets 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 11
La technologie PC/SC – MUSCLE n Partenariat entre plusieurs entreprises n Originellement sur plate-forme Windows n Porté sur Unix et OS X grâce à MUSCLE n Langage d’implantation non défini 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 12
Architecture PC/SC 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 13
1. Architecture générale n Interfaces de communication terminal/carte à puce. n Interface du pilote de lecteur de carte à puce. n API : – du gestionnaire de ressources. – d’accès à la carte à puce. – de certains services. 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 14
Architecture PC/SC 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 15
2. Communication au niveau physique n Reprise de la norme ISO. – Format de la carte – Spécifications électriques n Définition des protocoles de communication T 0 et T 1. 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 16
Architecture PC/SC 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 17
Pilote du lecteur n Énumération des fonctionnalités supportées. n Gestion de la communication(T 0 & T 1). n Gestion mécanique de la carte à puce. 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 18
3. API du pilote du lecteur // fonctionalité RESPONSECODE IFD_Get_Capabilities(); RESPONSECODE IFD_Set_Capabilities( ); // Gestion T 0 & T 1 RESPONSECODE IFD_Set_Protocol_Parameters(); // Gestion de l’energie RESPONSECODE IFD_Power_ICC(); // gestion de la mecanique RESPONSECODE IFD_Swallow_ICC(); RESPONSECODE IFD_Eject_ICC(); RESPONSECODE IFD_Confiscate_ICC(); // Communication RESPONSECODE IFD_Transmit_to_ICC(); // etat du lecteur RESPONSECODE IFD_Is_ICC_Present(); RESPONSECODE IFD_Is_ICC_Absent(); 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 19
Architecture PC/SC 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 20
4. Connexion des IFD USB 22/10/2021 PS 2 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE RS 232 21
Architecture PC/SC 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 22
5. Interface IFD / Ressource Manager(1/5) n Définition de l’interface du gestionnaire de ressource. (class RESOURCEMANAGER) n De l’accès à la carte à puce. (class SCARDCOMM) 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 23
5. Interface IFD / Ressource Manager(2/5) Class RESOURCEMANAGER{ HANDLE h. Context; RESOURCEMANAGER(); ~RESOURCEMANAGER(); RESPONSECODE Establish. Context(…); RESPONSECODE Release. Context(); } 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 24
5. Interface IFD / Ressource Manager(3/5) Class RESOURCEDB extends RESOURCEDBQUERY private RESOURCEMANAGER resmgr; RESOURCEDB(IN RESOURCEMANAGER resmgr); ~RESOURCEDB(); RESPONSECODE RESPONSECODE Introduce. Reader(…); Forget. Reader(…); Introduce. Reader. Group(…); Forget. Reader. Group(…); Add. Reader. To. Group(…); Remove. Reader. From. Group(); Introduce. Card. Type(); Forget. Card. Type(); } 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 25
5. Interface IFD / Ressource Manager(4/5) Class SCARDTRACK{ private RESOURCEMANAGER resmgr; SCARDTRACK(IN RESOURCEMANAGER resmgr); ~SCARDTRACK(); RESPONSECODE Locate. Cards( IN STR[] Cards. Type, IN OUT SCARD_READERSTATE[] Reader. States); RESPONSECODE Get. Status. Change(…); RESPONSECODE Cancel(); ) 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 26
5. Interface IFD / Ressource Manager(5/5) Class SCARDCOMM{ private RESOURCEMANAGER resmgr; private HANDLE h. Card; SCARDCOMM(RESOURCEMANAGER resmgr) ~SCARDCOMM() RESPONSECODE Connect(…); RESPONSECODE Reconnect(…); RESPONSECODE Disconnect(…); RESPONSECODE Status() ; RESPONSECODE Begin. Transaction() ; RESPONSECODE End. Transaction(…); RESPONSECODE Cancel(); RESPONSECODE Transmit(…); RESPONSECODE Control(…); RESPONSECODE Get. Reader. Capabilities (…); RESPONSECODE Set. Reader. Capabilities (…); } 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 27
Architecture PC/SC 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 28
6. Les services (1/2) n Abstraction de la carte à puce. n Système de fichier. n Authentification. n Cryptage…. 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 29
6. Les services (2/2) Class SCARD{ HANDLE h. Context; SCARD(); ~SCARD(); RESPONSECODE Create. File. Access(OUT File. Access); RESPONSECODE Create. CHVerification(OUT CHVerification); RESPONSECODE Create. Card. Auth(OUT Card. Auth); RESPONSECODE Create. Crypt. Prov(OUT Crypt. Prov); RESPONSECODE Attach. By. Handle(IN HANDLE); Attach. By. IFD(IN STR, IN FLAGS); Detach(); Reconnect(IN FLAGS); RESPONSECODE Lock(); RESPONSECODE Unlock(); } 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 30
Architecture PC/SC 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 31
7. Applications n Liste de conseils de programmation. n Études de cas. n Décrit un service de cryptographie minimal. (sur l’ICC) 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 32
Exemple try { Pcsc. RM prm = new Pcsc. RM(Pcsc. RM. SCARD_SCOPE_USER); String readers[] = prm. list. Readers(null); Pcsc. Reader. State[] prs = {new Pcsc. Reader. State()}; prs[0]. Current. State = Pcsc. Reader. State. SCARD_STATE_EMPTY; prs[0]. Event. State = Pcsc. Reader. State. SCARD_STATE_PRESENT; prs[0]. Reader = "Bull Smart TLP 0"; // lecteur // Attente d’une insertion pendant 10 s prm. get. Status. Change(10000, prs); //connexion Pcsc. Card. Reader pcr = prm. card. Connect(prs[0]. Reader, prm. SCARD_SHARE_EXCLUSIVE, ( Pcsc. IOHeader. SCARD_PROTOCOL_T 0 | Pcsc. IOHeader. SCARD_PROTOCOL_T 1)); byte cmd. Buf[] = {0 x 02, (byte)0 x 3 F, 0 x 00}; Command. APDU cmd. APDU=new Command. APDU((byte)0 x. A 4, (byte)0 x 00, cmd. Buf); Response. APDUrsp. APDU=pcr. transmit(cmd. APDU); }catch (Exception ne) { System. out. println(‘Error : } 22/10/2021 ’+ ne); Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 33
La technologie OCF(Open. Card Framework) n Partenariat entre plusieurs entreprises n Orienté objet n Basé sur système Java 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 34
L’architecture d’OCF 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 35
Exemple de code n Initialisation Smart. Card. start (); n Insertion de la carte public void card. Inserted(Card. Terminal. Event ct. Event) try { file. Service = (File. Access. Card. Service) card. get. Card. Service(File. Access. Card. Service. class, true); signature. Service = (Signature. Card. Service) card. get. Card. Service(Signature. Card. Service. class, true); SBCHVDialog dialog = new SBCHVDialog(); file. Service. set. CHVDialog(dialog); signature. Service. set. CHVDialog(dialog); } catch(Exception e) { e. print. Stack. Trace(); } } 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 36
Exemple de code n Génération d ’une signature électronique // specification de la clé qu ’on va utiliser Private. Key. File kf = new Private. Key. File (new Card. File. Path(": C 110"), key. Number); // Appel de la méthode de la carte qui va générer la signature = signature. Service. sign. Data(kf, JCAStandard. Names. SHA 1_RSA, JCAStandard. Names. ZERO_PADDING, data); n Lecture d ’un fichier // montage de la racine du système de fichier Card. File root = new Card. File(file. Service); // Instanciation de « file » dont le contenu est celui de « : C 009 » Card. File file = new Card. File(root, ": C 009"); // Création d ’un Data. Input. Stream via un Card. File. Input. Stream Data. Input. Stream dis = new Data. Input. Stream(new Card. File. Input. Stream(file)); // Création d ’un fichier de même longueur que « file » byte[] card. Holder. Data = new byte[file. get. Length()]; // lecture du contenu du fichier dis. read(card. Holder. Data); // fermeture dis. close(); 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 37
Comparaison entre les deux standards n Environnement d’exécution. C++ MUSCLE Java PCSC Environement de prog. Other Windows UNIX & OS X OCF Other Hardware et OS 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 38
Comparaison entre les deux standards Avantages Inconvénients PC/SC MUSCLE Multi-langages. Portable grâce à MUSCLE. Orienté lecteur. Securité. Au départ, dédié à un environnement OCF Portable, (systèmes embarqués) Simple a mettre en œuvre. Orienté internet. Accès aux cartes. Lenteur de Java. Nécessité de ressources importantes. 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 39
Comparaison entre les deux standards 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 40
Conclusion n Les cartes à puces une technologie d’avenir. n Perspectives… 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 41
Questions? ? ? ? ? 22/10/2021 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 42
- Slides: 42