Applications Terminales pour Cartes à puce BERNARDET William PHAM-TRONG Toàn Étude d’approfondissement RICM3
Plan de la présentation Introduction : Contexte d’utilisation des cartes à puces Protocoles T0 et T1 La technologie PC/SC - MUSCLE La technologie OCF Comparaison entre les deux standards Conclusion 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Le contexte industriel Les enjeux économiques Facilité de développement Déploiement Carte multi-services 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Contexte d’utilisation des cartes à puces Pourquoi une interface? ??? 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Contexte d’utilisation des cartes à puces Pourquoi une interface? API PCSC OCF 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE La carte à puce Alimentation électrique Initialisation Communication 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Protocole T0 Définie dans ISO 7816. Orienté caractères. Asynchrone half-duplex. Gestion d’erreur rudimentaire (basée sur le hardware). 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Protocole T0 – Entête Nom Taille Description CLA 1octet Classe de la commande INS Code de l’instruction P1 Paramètre 1 P2 Paramètre 2 P3 Taille des données envoyé, ou quantité de données attendu en réponse 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Protocole T0 – Retour Nom Caractère Description ACK INS Acquittement ___ Le transfert peu continuer. NULL 0x60 La carte est occupée. SW1 0x6x or 0x9x Le lecteur va recevoir une autre information sur l ’état de la carte 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Protocole T1 Définie dans ISO 7816 Orienté blocs. Asynchrone half-duplex. Constitué d’un prologue et d’un épilogue. Gestion d’erreurs plus évoluée. 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Protocole T1 - 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 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
La technologie PC/SC – MUSCLE Partenariat entre plusieurs entreprises Originellement sur plate-forme Windows Porté sur Unix et OS X grâce à MUSCLE Langage d’implantation non défini 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Architecture PC/SC 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
1. Architecture générale Interfaces de communication terminal/carte à puce. Interface du pilote de lecteur de carte à puce. API : du gestionnaire de ressources. d’accès à la carte à puce. de certains services. 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Architecture PC/SC 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
2. Communication au niveau physique Reprise de la norme ISO. Format de la carte Spécifications électriques Définition des protocoles de communication T0 et T1. 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Architecture PC/SC 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Pilote du lecteur Énumération des fonctionnalités supportées. Gestion de la communication(T0 & T1). Gestion mécanique de la carte à puce. 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
3. API du pilote du lecteur // fonctionalité RESPONSECODE IFD_Get_Capabilities(); RESPONSECODE IFD_Set_Capabilities( ); // Gestion T0 & T1 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(); 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Architecture PC/SC 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 4. Connexion des IFD RS232 USB PS2 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Architecture PC/SC 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
5. Interface IFD / Ressource Manager(1/5) Définition de l’interface du gestionnaire de ressource.(class RESOURCEMANAGER) De l’accès à la carte à puce. (class SCARDCOMM) 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
5. Interface IFD / Ressource Manager(2/5) Class RESOURCEMANAGER{ HANDLE hContext; RESOURCEMANAGER(); ~RESOURCEMANAGER(); RESPONSECODE EstablishContext(…); RESPONSECODE ReleaseContext(); } 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
5. Interface IFD / Ressource Manager(3/5) Class RESOURCEDB extends RESOURCEDBQUERY private RESOURCEMANAGER resmgr; RESOURCEDB(IN RESOURCEMANAGER resmgr); ~RESOURCEDB(); RESPONSECODE IntroduceReader(…); RESPONSECODE ForgetReader(…); RESPONSECODE IntroduceReaderGroup(…); RESPONSECODE ForgetReaderGroup(…); RESPONSECODE AddReaderToGroup(…); RESPONSECODE RemoveReaderFromGroup(); RESPONSECODE IntroduceCardType(); RESPONSECODE ForgetCardType(); } 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
5. Interface IFD / Ressource Manager(4/5) Class SCARDTRACK{ private RESOURCEMANAGER resmgr; SCARDTRACK(IN RESOURCEMANAGER resmgr); ~SCARDTRACK(); RESPONSECODE LocateCards( IN STR[] CardsType, IN OUT SCARD_READERSTATE[] ReaderStates); RESPONSECODE GetStatusChange(…); RESPONSECODE Cancel(); ) 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
5. Interface IFD / Ressource Manager(5/5) Class SCARDCOMM{ private RESOURCEMANAGER resmgr; private HANDLE hCard; SCARDCOMM(RESOURCEMANAGER resmgr) ~SCARDCOMM() RESPONSECODE Connect(…); RESPONSECODE Reconnect(…); RESPONSECODE Disconnect(…); RESPONSECODE Status() ; RESPONSECODE BeginTransaction() ; RESPONSECODE EndTransaction(…); RESPONSECODE Cancel(); RESPONSECODE Transmit(…); RESPONSECODE Control(…); RESPONSECODE GetReaderCapabilities (…); RESPONSECODE SetReaderCapabilities (…); } 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Architecture PC/SC 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 6. Les services (1/2) Abstraction de la carte à puce. Système de fichier. Authentification. Cryptage…. 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 6. Les services (2/2) Class SCARD{ HANDLE hContext; SCARD(); ~SCARD(); RESPONSECODE CreateFileAccess(OUT FileAccess); RESPONSECODE CreateCHVerification(OUT CHVerification); RESPONSECODE CreateCardAuth(OUT CardAuth); RESPONSECODE CreateCryptProv(OUT CryptProv); RESPONSECODE AttachByHandle(IN HANDLE); RESPONSECODE AttachByIFD(IN STR,IN FLAGS); RESPONSECODE Detach(); RESPONSECODE Reconnect(IN FLAGS); RESPONSECODE Lock(); RESPONSECODE Unlock(); } 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Architecture PC/SC 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE 7. Applications Liste de conseils de programmation. Études de cas. Décrit un service de cryptographie minimal.(sur l’ICC) 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Exemple try { PcscRM prm = new PcscRM(PcscRM.SCARD_SCOPE_USER); String readers[] = prm.listReaders(null); PcscReaderState[] prs = {new PcscReaderState()}; prs[0].CurrentState = PcscReaderState.SCARD_STATE_EMPTY; prs[0].EventState = PcscReaderState.SCARD_STATE_PRESENT; prs[0].Reader = "Bull Smart TLP 0"; // lecteur // Attente d’une insertion pendant 10s prm.getStatusChange(10000, prs); //connexion PcscCardReader pcr = prm.cardConnect(prs[0].Reader, prm.SCARD_SHARE_EXCLUSIVE, (PcscIOHeader.SCARD_PROTOCOL_T0 | PcscIOHeader.SCARD_PROTOCOL_T1)); byte cmdBuf[] = {0x02,(byte)0x3F,0x00}; CommandAPDU cmdAPDU=new CommandAPDU((byte)0xA4,(byte)0xA4,(byte)0x00,(byte)0x00,cmdBuf); ResponseAPDUrspAPDU=pcr.transmit(cmdAPDU); }catch (Exception ne) { System.out.println(‘Error : ’+ ne); } 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
La technologie OCF(OpenCard Framework) Partenariat entre plusieurs entreprises Orienté objet Basé sur système Java 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE L’architecture d’OCF 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Exemple de code Initialisation SmartCard.start (); Insertion de la carte public void cardInserted(CardTerminalEvent ctEvent) try { fileService = (FileAccessCardService) card.getCardService(FileAccessCardService.class, true); signatureService = (SignatureCardService) card.getCardService(SignatureCardService.class, true); SBCHVDialog dialog = new SBCHVDialog(); fileService.setCHVDialog(dialog); signatureService.setCHVDialog(dialog); } catch(Exception e) { e.printStackTrace(); } 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Exemple de code Génération d ’une signature électronique // specification de la clé qu ’on va utiliser PrivateKeyFile kf = new PrivateKeyFile (new CardFilePath(":C110"), keyNumber); // Appel de la méthode de la carte qui va générer la signature signature = signatureService.signData(kf, JCAStandardNames.SHA1_RSA, JCAStandardNames.ZERO_PADDING, data); Lecture d ’un fichier // montage de la racine du système de fichier CardFile root = new CardFile(fileService); // Instanciation de « file » dont le contenu est celui de « :C009 » CardFile file = new CardFile(root, ":C009"); // Création d ’un DataInputStream via un CardFileInputStream DataInputStream dis = new DataInputStream(new CardFileInputStream(file)); // Création d ’un fichier de même longueur que « file » byte[] cardHolderData = new byte[file.getLength()]; // lecture du contenu du fichier dis.read(cardHolderData); // fermeture dis.close(); 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Comparaison entre les deux standards Environnement d’exécution. Environement de prog. Other Java C++ Windows UNIX & OS X PCSC MUSCLE OCF Hardware et OS 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
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. 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Comparaison entre les deux standards 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Conclusion Les cartes à puces une technologie d’avenir. Perspectives… 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE
Bernardet - Pham-Trong - PCSC, OCF, MUSCLE Questions?????????? 13/11/2018 Bernardet - Pham-Trong - PCSC, OCF, MUSCLE