Cartes puce et programmation Nicolas Droze JeanNoel Isnard

  • Slides: 55
Download presentation
Cartes à puce et programmation Nicolas Droze Jean-Noel Isnard

Cartes à puce et programmation Nicolas Droze Jean-Noel Isnard

SOMMAIRE • Historique • Technologie • Normes en vigueur • Javacard • Sécurité et

SOMMAIRE • Historique • Technologie • Normes en vigueur • Javacard • Sécurité et cartes bancaires • Open. Card Framework • Suppléments • Glossaire • Références

Historique • 1974 : Dépots de brevets par Roland Moreno • 1978 : M.

Historique • 1974 : Dépots de brevets par Roland Moreno • 1978 : M. Ugon (Bull CP 8) invente le M. A. M • 1981 : Début de la normalisation AFNOR • 1982 : Expérimentation baptisée «IPSO» • 1984 : Adoption de la Carte Bleue (Bull) Création du groupement des cartes bancaires

Historique • 1983 : Lancement de la «télécarte» par la D. G. T. Début

Historique • 1983 : Lancement de la «télécarte» par la D. G. T. Début de la normalisation ISO Décodeur Canal+ avec une carte mémoire • Depuis 1992 : Essor des applications – Toutes les CB en France ont une puce – Cartes santé (Vitale, Sesame) – Porte-monnaies électroniques (Proton) – Téléphonie mobile (GSM) avec carte SIM – Premières Javacard

Historique • 1997 : EMV, standard international de carte à puce Affaire Humpich :

Historique • 1997 : EMV, standard international de carte à puce Affaire Humpich : le secret des CB tombe • 1999 : Lancement de moneo • 2002 : 400 Millions de cartes bancaires Carte à puce sonore

Technologie 2 types de cartes • Carte à mémoire : Simple mémoire (lecture /

Technologie 2 types de cartes • Carte à mémoire : Simple mémoire (lecture / écriture) (EPROM / EEPROM) Non standardisé • Carte à microprocesseur : Mémoire + processeur programmable (algo sécurité : DES, RSA) Normes ISO 7816 Carte à contacts et sans contacts

Technologie Mémoire et processeur CPU : 8 / 16 / 32 bits, architecture RISC

Technologie Mémoire et processeur CPU : 8 / 16 / 32 bits, architecture RISC (souvent) ROM : 8 – 32 Ko (Card Operating System) RAM : < 1 Ko mémoire temporaire EEPROM / Flash. RAM / Fe. RAM : 8 – 64 Ko mémoire persistante Bus de données EEPROM Bus d’adresses Microcontact Microchip Micromodule RAM

Cycle de vie • FABRICATION : Inscription dans la ROM des fonctionnalités de base

Cycle de vie • FABRICATION : Inscription dans la ROM des fonctionnalités de base • INITIALISATION : Inscription dans l’EEPROM des données de l’application • PERSONNALISATION : Inscription dans l’EEPROM des données utilisateur • UTILISATION : Envoi de commandes à la carte • MORT : Invalidation logique, destruction, …

NORMES EN VIGUEUR ISO 7816 -1 à 7816 -10

NORMES EN VIGUEUR ISO 7816 -1 à 7816 -10

ISO 7816 -1 • Caractéristiques physiques, dimensions 85 mm 54 mm Epaisseur 0, 76

ISO 7816 -1 • Caractéristiques physiques, dimensions 85 mm 54 mm Epaisseur 0, 76 mm

ISO 7816 -2 • Emplacement des contacts et aspects électriques 3 4 2 1

ISO 7816 -2 • Emplacement des contacts et aspects électriques 3 4 2 1 8 7 5 6 1 - 2 : Alimentation 3 à 5 V 3 : Horloge 4 : Remise à Zéro 5 : Optionnel 6 : Optionnel 7 : I/O asynchrone 8 : Ecriture EEPROM

ISO 7816 -3 • Caractéristiques électriques : Fréquence d’horloge 1 - 5 Mhz Vitesse

ISO 7816 -3 • Caractéristiques électriques : Fréquence d’horloge 1 - 5 Mhz Vitesse des communications < 115200 bauds • Protocole de transmission : TPDU (Transmission Protocol Data Unit) T=0 Protocole orienté octet T=1 Protocole orienté paquet • Sélection du type de protocole : PTS (Protocol Type Selection) • Réponse au reset : ATR (Answer To Reset)

ISO 7816 -4 APDU (Application Programming Data Units) CLA : 1 octet pour identifier

ISO 7816 -4 APDU (Application Programming Data Units) CLA : 1 octet pour identifier l’application INS : 1 octet pour le code de l’instruction P 1 - P 2 : Paramètres de l’instruction Lc : Longueur du champ de données Le : Longueur maxi du champ de données de la réponse SW 1 - SW 2 : Code d’exécution 90 00 OK

ISO 7816 -4

ISO 7816 -4

ISO 7816 -4 • Le système de fichiers des cartes à puce. Système de

ISO 7816 -4 • Le système de fichiers des cartes à puce. Système de fichiers hiérarchique qui peut contenir 3 types de fichiers : "Master File" (Fichier racine) "Dedicated File" (Répertoire + qq infos) "Elementary File" (Fichier de données)

ISO 7816 -4 • 4 structures de données :

ISO 7816 -4 • 4 structures de données :

ISO 7816 -5 • Spécifie des identifiants d’applications (Application IDentifier) Un AID = identication

ISO 7816 -5 • Spécifie des identifiants d’applications (Application IDentifier) Un AID = identication unique d'une application de la carte et de certains types de fichiers.

ISO 7816 -6 • Spécifie les éléments de données inter-industrie : Nom du porteur

ISO 7816 -6 • Spécifie les éléments de données inter-industrie : Nom du porteur de la carte Date d’expiration … Etiquette Longueur valeur

ISO 7816 -7 • Données organisées en tables, avec des colonnes, lignes, … (Similarité

ISO 7816 -7 • Données organisées en tables, avec des colonnes, lignes, … (Similarité aux bases de données) • Langage spécifique de requêtes : SCQL (Smart Card Query Language) 2000 Pico. DBMS : Un SGBD sur carte à puce

ISO 7816 -8 à 10 • ISO 7816 -8 : Sécurité de l'architecture et

ISO 7816 -8 à 10 • ISO 7816 -8 : Sécurité de l'architecture et des commandes inter-industrie. • ISO 7816 -9 : Commandes inter-industries améliorées • ISO 7816 -10 : Spécifiques aux cartes synchrones

Java. Card Présentation • Langage à objet simplifié pour carte à puce • 1996

Java. Card Présentation • Langage à objet simplifié pour carte à puce • 1996 : Sun adopte le Java. Card (Schlumberger). • 1997 : Java Card Forum (Bull, Gemplus et Schlumberger) • 2000: 40 entreprises ont une licence d'exploitation

Java. Card Architecture • Peu de memoire – 1 Ko de RAM, 16 Ko

Java. Card Architecture • Peu de memoire – 1 Ko de RAM, 16 Ko d'EEPROM et de 24 Ko de ROM – Supporte un sous-ensemble du langage Java – Machine virtuelle en 2 étapes (On-card et Off-card) • Java Card Runtime Environment – Machine virtuelle Javacard – APIs – Méthodes natives

Java. Card APIs • java. io – IOException • java. lang – Object (has

Java. Card APIs • java. io – IOException • java. lang – Object (has default constructor and method equals()) – Throwable (10 Exception classes) • java. rmi, javacardx. rmi (support for limited RMI)

Java. Card APIs • javacard. framework • javacard. security, javacardx. crypto – algorithmes (RSA,

Java. Card APIs • javacard. framework • javacard. security, javacardx. crypto – algorithmes (RSA, DES, …), security management – Security. Manager doit être construit dans VM

Java. Card • • Applet Java. Card application Seulement une instance de chaque Hérite

Java. Card • • Applet Java. Card application Seulement une instance de chaque Hérite de javacard. framework. Applet Doit comporter les méthodes : – Install : créé une instance – Select : Active l’applet – Process : exécute APDU – Deselect : Suspend l’applet

Java. Card Fonctions Java non supportées • Type simple de donnée de grosse taille

Java. Card Fonctions Java non supportées • Type simple de donnée de grosse taille : long, double, float • Tableau plusieurs dimensions • Caractères et chaînes • Chargement dynamique des classes • Security Manager • Ramasse-miettes et finalisation • Threads • Serialisation d'objet • Clonage d'objet

Java. Card Fonctions Java supportées • Type simple de donnée de petite taille :

Java. Card Fonctions Java supportées • Type simple de donnée de petite taille : boolean, byte, short • Tableau à 1 dimension • Paquetage Java, classes, interfaces et exceptions • Caractéristique orientée objet : héritage, surcharge • Le mot clé int et le support des entiers sur 32 bits sont optionnels

Java. Card Avantages • Facilité de développement (Java) • Sécurité • Portabilité • Stockage

Java. Card Avantages • Facilité de développement (Java) • Sécurité • Portabilité • Stockage et gestion de multiples applications • Compatibilité

Java. Card Exemple public class Porte. Monnaie extends Applet { final static byte Porte.

Java. Card Exemple public class Porte. Monnaie extends Applet { final static byte Porte. Monnaie_CLA = (byte) 0 x. D 0; final static byte VERIFIE_PIN = (byte) 0 x 20; final static byte CREDIT = (byte) 0 x 30; final static byte DEBIT = (byte) 0 x 40; final static byte SOLDE = (byte) 0 x 50; final static short SOLDE_MAX = 0 x 01 F 4; final static byte TRANSACTION_MAX = 0 x 64; final static byte NB_ESSAIS = (byte) 0 x 05; final static byte TAILLE_MAX_PIN = (byte) 0 x 08; final static short SW_CODE_ERRONE = (short) 0 x 9110; final static short SW_VERIFICATION_PIN_REQUISE = (short) 0 x 9120; final static short SW_MONTANT_TRANSACTION_INVALIDE = (short) 0 x 9130; final static short SW_MONTANT_TRANSACTION_DEPASSE = (short) 0 x 9140; final static short SW_SOLDE_NEGATIF = (short) 0 x 9150; Owner. PIN Code. Pin; short Solde;

Java. Card Exemple public static void install ( byte[] b. Array, short b. Offset,

Java. Card Exemple public static void install ( byte[] b. Array, short b. Offset, byte b. Length) { new Porte. Monnaie ( b. Array, b. Offset, b. Length ); } private Porte. Monnaie ( byte[] b. Array, short b. Offset, byte b. Length) { … byte Taille. Code. Pin = b. Array[b. Offset++]; Code. Pin = new Owner. PIN ( NB_ESSAIS, TAILLE_MAX_PIN ); try { Code. Pin. update ( b. Array , b. Offset, Taille. Code. Pin ); } catch (PINException exc ) { ISOException. throw. It ((short) 0 x 9500 + Taille. Code. Pin)); } Solde = 0; register (); } public boolean select () { Code. Pin. reset (); return(true); } public void deselect () { Code. Pin. reset (); }

Java. Card Exemple public void process (javacard. framework. APDU apdu) throws javacard. framework. ISOException

Java. Card Exemple public void process (javacard. framework. APDU apdu) throws javacard. framework. ISOException { byte[] buffer = apdu. get. Buffer (); if ( selecting. Applet () && buffer[ISO 7816. OFFSET_CLA]== ISO 7816. CLA_ISO 7816 && buffer[ISO 7816. OFFSET_INS] == ISO 7816. INS_SELECT ) {…} else { if (buffer[ISO 7816. OFFSET_CLA] != Porte. Monnaie_CLA) ISOException. throw. It (ISO 7816. SW_CLA_NOT_SUPPORTED); switch ( buffer[ISO 7816. OFFSET_INS] ) { case SOLDE : get. Balance (apdu); return; case DEBIT : debit (apdu); return; case CREDIT : credit (apdu); return; case VERIFIE_PIN : verify (apdu); return; default

Java. Card Exemple private void credit (APDU apdu) { if ( !Code. Pin. is.

Java. Card Exemple private void credit (APDU apdu) { if ( !Code. Pin. is. Validated () ) ISOException. throw. It (SW_VERIFICATION_PIN_REQUISE); byte[] buffer = apdu. get. Buffer (); byte num. Bytes = buffer[ISO 7816. OFFSET_LC]; byte. Read = (byte) (apdu. set. Incoming. And. Receive ()); if ( byte. Read != 1 ) ISOException. throw. It (ISO 7816. SW_WRONG_LENGTH); byte Montant. Credit = buffer[ISO 7816. OFFSET_CDATA]; if ( (Montant. Credit > TRANSACTION_MAX) || (Montant. Credit < 0) ) ISOException. throw. It (SW_MONTANT_TRANSACTION_INVALIDE); if ( (short) (Solde + Montant. Credit) > SOLDE_MAX) ISOException. throw. It (SW_MONTANT_TRANSACTION_DEPASSE); Solde = (short)(Solde + Montant. Credit); }

Java. Card Exemple private void debit (APDU apdu) { if ( !Code. Pin. is.

Java. Card Exemple private void debit (APDU apdu) { if ( !Code. Pin. is. Validated () ) ISOException. throw. It (SW_VERIFICATION_PIN_REQUISE); byte[] buffer = apdu. get. Buffer (); byte num. Bytes = buffer[ISO 7816. OFFSET_LC]; byte. Read = (byte) (apdu. set. Incoming. And. Receive ()); if ( byte. Read != 1 ) ISOException. throw. It (ISO 7816. SW_WRONG_LENGTH); byte Montant. Debit = buffer[ISO 7816. OFFSET_CDATA]; if ( (Montant. Debit > TRANSACTION_MAX) || (Montant. Debit < 0) ) ISOException. throw. It (SW_MONTANT_TRANSACTION_INVALIDE); if ( (short) (Solde - Montant. Debit) < 0) ISOException. throw. It (SW_SOLDE_NEGATIF); Solde = (short)(Solde - Montant. Debit); }

Java. Card Exemple private void get. Balance (APDU apdu) { byte[] buffer = apdu.

Java. Card Exemple private void get. Balance (APDU apdu) { byte[] buffer = apdu. get. Buffer (); short le = apdu. set. Outgoing (); apdu. set. Outgoing. Length ( (byte) 2); Util. set. Short (buffer, (short)0, Solde); apdu. send. Bytes ( (short)0, (short)2 ); } private void verify (APDU apdu) { byte[] buffer = apdu. get. Buffer (); byte. Read = (byte) (apdu. set. Incoming. And. Receive ()); if( Code. Pin. check (buffer, ISO 7816. OFFSET_CDATA, byte. Read) == false ) ISOException. throw. It ( (short) (SW_CODE_ERRONE + Code. Pin. get. Tries. Remaining ()) ); } }

Sécurité Les algorithmes 2 principaux algorithmes : • RSA (Rivest Shamir Adleman) 1977 :

Sécurité Les algorithmes 2 principaux algorithmes : • RSA (Rivest Shamir Adleman) 1977 : 320 bits, nombres premier, algorithme d’Euclide (clé publique) • DES (Data Encryption Standard) 1974 : clé de 56 bits (clé privée) • TDES (Triple Data Encryption Standard) 1998 : 3 applications de DES avec 2 clés de 56 bits • AES (Advanced Encryption Standard) 1998 : clé de 128, 192 ou 256 bits

Sécurité Mécanisme de paiement par carte bleue • Authentification de la carte : Algo

Sécurité Mécanisme de paiement par carte bleue • Authentification de la carte : Algo RSA, fonctions de tests, identifie la carte de manière unique.

Sécurité Mécanisme de paiement par carte bleue • Code confidentiel : Terminal de paiement

Sécurité Mécanisme de paiement par carte bleue • Code confidentiel : Terminal de paiement envoie requête à la carte, carte calcule puis envoi réponse au terminal. • Authentification de la transaction : Algo DES et TDES, fonctions de tests, code les informations de la transaction.

Sécurité Le standard EMV (Europay Mastercard Visa) • Transaction cryptée par TDES avec une

Sécurité Le standard EMV (Europay Mastercard Visa) • Transaction cryptée par TDES avec une clé de 90 bits • Signature RSA doit passer à 1024 bits pour être tranquille 10 ans. • Protocole d’authentification statique : 1 contrôle de certificats • Protocole d’authentification dynamique : 3 contrôles de certificats en cascade Nécessite des cartes puissantes et des ressources

Open. Card 3 raisons : • Les terminaux des cartes, n’ont pas d’interfaces standardisées

Open. Card 3 raisons : • Les terminaux des cartes, n’ont pas d’interfaces standardisées différents protocoles • Card Operating System divers différentes commandes et codes de réponse • Les émetteurs des cartes décident de l’emplacement des applications sur la carte But : Rendre le développement d’applications indépendant des fabricants, technologies, …

Open. Card Framework • Card. Terminal layer permet de faire abstraction des terminaux. Fournit

Open. Card Framework • Card. Terminal layer permet de faire abstraction des terminaux. Fournit des accès au lecteur et à la carte insérée. • Card. Service layer permet de faire abstraction des Card Operating System. Ex : File. Access. Card. Service, Signature. Card. Service, Application. Management. Card. Service, Purse. Card. Service

Open. Card Exemple de programmation

Open. Card Exemple de programmation

Open. Card Exemple de programmation Phase d’initialisation : // Initialize the framework Smart. Card.

Open. Card Exemple de programmation Phase d’initialisation : // Initialize the framework Smart. Card. start (); // register the new Signature. Card as a Card Terminal Event Listener Card. Terminal. Registry. get. Registry(). add. CTListener(this); Phase de récupération des paramètres : 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(); } }

Open. Card Exemple de programmation Phase de lecture dans le fichier : . .

Open. Card Exemple de programmation Phase de lecture dans le fichier : . . . // mount file system to get access to the root directory Card. File root = new Card. File(file. Service); // This is the file holding card holder name and e-Mail address Card. File file = new Card. File(root, ": C 009"); // Create a Card. File. Input. Stream for file Data. Input. Stream dis = new Data. Input. Stream(new Card. File. Input. Stream(file)); // Read in the owner’s name byte[] card. Holder. Data = new byte[file. get. Length()]; dis. read(card. Holder. Data); // Explicitly close the Input. Stream to yield the smart card to other applications dis. close(); . . .

Open. Card Exemple de programmation Génération de la signature numérique : // specify the

Open. Card Exemple de programmation Génération de la signature numérique : // specify the key used for signing Private. Key. File kf = new Private. Key. File (new Card. File. Path(": C 110"), key. Number); // Let the card generate a signature = signature. Service. sign. Data(kf, JCAStandard. Names. SHA 1_RSA, JCAStandard. Names. ZERO_PADDING, data); Terminaison : Smart. Card. shutdown ();

Open. Card Schéma

Open. Card Schéma

Suppléments -Sécurité : Les fraudes cartes bancaires -Applications générales : Par secteur -Application :

Suppléments -Sécurité : Les fraudes cartes bancaires -Applications générales : Par secteur -Application : La carte MONEO -Conférences : Le salon Cartes 2002 à Paris -Technologies : FINREAD pour sécuriser l’e-business -Glossaire -Références

Suppléments Fraudes cartes bancaires L’affaire Humpich : En 1998 un informaticien a réussi à

Suppléments Fraudes cartes bancaires L’affaire Humpich : En 1998 un informaticien a réussi à falsifier les cartes à puces en contournant 2 sécurités sur 3. • Découvre la clé RSA pour l’authentification de la carte • Carte répond « code bon » lorsque n’importe quel code est entré Fraude sur Internet : • 16 chiffres de la carte bancaire, vérifiés par un simple algorithme

Suppléments MONEO • Porte Monnaie Electronique Idée de Société Européenne de la Monnaie Electronique

Suppléments MONEO • Porte Monnaie Electronique Idée de Société Européenne de la Monnaie Electronique (SEME) • Technologie allemande « Geldkarte » de la banque allemande ZKA. • Sécurité : Algorithme DES 56 bits seulement ! • Pas de paiement sur Internet

Suppléments Applications générales • Télécommunications – L’un des plus gros secteurs – GSM –

Suppléments Applications générales • Télécommunications – L’un des plus gros secteurs – GSM – Télécarte (Cabines, Publiphones) • Les transports – Système Transcarte (SEMURVAL, SNCF) – STO (Réseau d’autobus , sans contact)

Suppléments Applications générales • La santé : – carte Sesam. E-Vitale – HC-Forum (identification

Suppléments Applications générales • La santé : – carte Sesam. E-Vitale – HC-Forum (identification et milieu familial) • Les banques : – CB – Porte-monnaie électronique

Suppléments Applications générales • Le marketing : – Télécarte – La carte téléphonique publicitaire

Suppléments Applications générales • Le marketing : – Télécarte – La carte téléphonique publicitaire – Carte à puce sérigraphiée – Carte de fidélité • Contrôle d’accès – Logique – Physique

Suppléments Salon Cartes 2002 5 – 7 novembre 2002 à Paris • Oberthur :

Suppléments Salon Cartes 2002 5 – 7 novembre 2002 à Paris • Oberthur : Gestion de la carte SIM sur Internet ajout de services et prestations. • Schlumberger : SIM to SIM copie l’intégralité d’une puce vers une autre pour les évolutions vers de nouvelles technologies. • 2007 : Carte d’identité électronique : Identification par empreinte digitale intégrée ?

Suppléments FINREAD : Pour sécuriser l’ebusiness • Définition de normes et de spécifications techniques

Suppléments FINREAD : Pour sécuriser l’ebusiness • Définition de normes et de spécifications techniques d'un nouveau standard européen. • Lecteur avec une sécurité maximale pour les transactions à distance, idéal pour les paiements multi supports.

Glossaire AES : Advanced Encryption Standard AFNOR : Association Française de Normalisation AID :

Glossaire AES : Advanced Encryption Standard AFNOR : Association Française de Normalisation AID : Application Identifier APDU : Application Programming Data Units ATR : Answer To Reset COS : Card Operating System DES : Data Encryption Standard EEPROM : Electrical Erasable Programmable Read Only Memory EPROM : Erasable Programmable Read Only Memory EMV : Europay Mastercard Visa Fe. RAM : Ferroelectric Random Access Memory MAM : Microprocesseur Autoprogrammable Monolithique PTS : Protocol Type Selection RAM : Random Access Memory RSA : Rivest Shamir Adelman SCQL : Smart Card Query Language TDES : Triple Data Encryption Standard TPDU : Transmission Protocol Data Unit

Références http: //www. opencard. org http: //www. xcard 3. com http: //www. dell. com

Références http: //www. opencard. org http: //www. xcard 3. com http: //www. dell. com http: //www. gemplus. com http: //www. smartcards. net http: //www. smartcardalliance. org http: //www. cartes. com http: //www. cartes-bancaires. com