1 / 55

Cartes à puce et programmation

Cartes à puce et programmation. Nicolas Droze Jean-Noel Isnard. SOMMAIRE. Historique Technologie Normes en vigueur Javacard Sécurité et cartes bancaires OpenCard Framework Suppléments Glossaire Références. Historique. 1974 : Dépots de brevets par Roland Moreno

meli
Télécharger la présentation

Cartes à puce et programmation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Cartes à puce et programmation Nicolas Droze Jean-Noel Isnard

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

  3. Historique • 1974 : Dépots de brevets par Roland Moreno • 1978 : M. Ugon (Bull CP8) 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

  4. 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

  5. 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

  6. 2 types de cartes Technologie • 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

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

  8. 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, …

  9. NORMES EN VIGUEUR ISO 7816-1 à 7816-10

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

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

  12. 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)

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

  14. ISO 7816-4

  15. 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)

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

  17. 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.

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

  19. 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 PicoDBMS : Un SGBD sur carte à puce

  20. 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

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

  22. JavaCard Architecture • Peu de memoire • 1Ko de RAM, 16Ko d'EEPROM et de 24Ko 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

  23. JavaCard 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)

  24. JavaCard APIs • javacard.framework • javacard.security, javacardx.crypto • algorithmes (RSA, DSA, DES, …), security management • SecurityManager doit être construit dans VM

  25. JavaCard Applet • JavaCard 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

  26. JavaCard 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

  27. JavaCard 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

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

  29. Exemple JavaCard public class PorteMonnaie extends Applet { final static byte PorteMonnaie_CLA = (byte) 0xD0; final static byte VERIFIE_PIN = (byte) 0x20; final static byte CREDIT = (byte) 0x30; final static byte DEBIT = (byte) 0x40; final static byte SOLDE = (byte) 0x50; final static short SOLDE_MAX = 0x01F4; final static byte TRANSACTION_MAX = 0x64; final static byte NB_ESSAIS = (byte) 0x05; final static byte TAILLE_MAX_PIN = (byte) 0x08; final static short SW_CODE_ERRONE = (short) 0x9110; final static short SW_VERIFICATION_PIN_REQUISE = (short) 0x9120; final static short SW_MONTANT_TRANSACTION_INVALIDE = (short) 0x9130; final static short SW_MONTANT_TRANSACTION_DEPASSE = (short) 0x9140; final static short SW_SOLDE_NEGATIF = (short) 0x9150; OwnerPIN CodePin; short Solde;

  30. JavaCard Exemple public static void install ( byte[] bArray, short bOffset, byte bLength) { new PorteMonnaie ( bArray, bOffset, bLength ); } private PorteMonnaie ( byte[] bArray, short bOffset, byte bLength) { … byte TailleCodePin = bArray[bOffset++]; CodePin = new OwnerPIN ( NB_ESSAIS, TAILLE_MAX_PIN ); try { CodePin.update ( bArray , bOffset, TailleCodePin ); } catch (PINException exc ) { ISOException.throwIt ((short) ((short) 0x9500 + TailleCodePin)); } Solde = 0; register (); } public boolean select () { CodePin.reset (); return(true); } public void deselect () { CodePin.reset (); }

  31. JavaCard Exemple public void process (javacard.framework.APDU apdu) throws javacard.framework.ISOException { byte[] buffer = apdu.getBuffer (); if ( selectingApplet () && buffer[ISO7816.OFFSET_CLA]== ISO7816.CLA_ISO7816 && buffer[ISO7816.OFFSET_INS] == ISO7816.INS_SELECT ) { … } else { if (buffer[ISO7816.OFFSET_CLA] != PorteMonnaie_CLA) ISOException.throwIt (ISO7816.SW_CLA_NOT_SUPPORTED); switch ( buffer[ISO7816.OFFSET_INS] ) { case SOLDE : getBalance (apdu); return; case DEBIT : debit (apdu); return; case CREDIT : credit (apdu); return; case VERIFIE_PIN : verify (apdu); return; default

  32. JavaCard Exemple private void credit (APDU apdu) { if ( !CodePin.isValidated () ) ISOException.throwIt (SW_VERIFICATION_PIN_REQUISE); byte[] buffer = apdu.getBuffer (); byte numBytes = buffer[ISO7816.OFFSET_LC]; byte byteRead = (byte) (apdu.setIncomingAndReceive ()); if ( byteRead != 1 ) ISOException.throwIt (ISO7816.SW_WRONG_LENGTH); byte MontantCredit = buffer[ISO7816.OFFSET_CDATA]; if ( (MontantCredit > TRANSACTION_MAX) || (MontantCredit < 0) ) ISOException.throwIt (SW_MONTANT_TRANSACTION_INVALIDE); if ( (short) (Solde + MontantCredit) > SOLDE_MAX) ISOException.throwIt (SW_MONTANT_TRANSACTION_DEPASSE); Solde = (short)(Solde + MontantCredit); }

  33. JavaCard Exemple private void debit (APDU apdu) { if ( !CodePin.isValidated () ) ISOException.throwIt (SW_VERIFICATION_PIN_REQUISE); byte[] buffer = apdu.getBuffer (); byte numBytes = buffer[ISO7816.OFFSET_LC]; byte byteRead = (byte) (apdu.setIncomingAndReceive ()); if ( byteRead != 1 ) ISOException.throwIt (ISO7816.SW_WRONG_LENGTH); byte MontantDebit = buffer[ISO7816.OFFSET_CDATA]; if ( (MontantDebit > TRANSACTION_MAX) || (MontantDebit < 0) ) ISOException.throwIt (SW_MONTANT_TRANSACTION_INVALIDE); if ( (short) (Solde - MontantDebit) < 0) ISOException.throwIt (SW_SOLDE_NEGATIF); Solde = (short)(Solde - MontantDebit); }

  34. JavaCard Exemple private void getBalance (APDU apdu) { byte[] buffer = apdu.getBuffer (); short le = apdu.setOutgoing (); apdu.setOutgoingLength ( (byte) 2); Util.setShort (buffer, (short)0, Solde); apdu.sendBytes ( (short)0, (short)2 ); } private void verify (APDU apdu) { byte[] buffer = apdu.getBuffer (); byte byteRead = (byte) (apdu.setIncomingAndReceive ()); if( CodePin.check (buffer, ISO7816.OFFSET_CDATA, byteRead) == false ) ISOException.throwIt ( (short) (SW_CODE_ERRONE + CodePin.getTriesRemaining ()) ); } }

  35. Les algorithmes Sécurité 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

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

  37. Mécanisme de paiement par carte bleue Sécurité • 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.

  38. Le standard EMV Sécurité (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

  39. OpenCard 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, …

  40. OpenCard Framework OpenCard • CardTerminal layer permet de faire abstraction des terminaux. Fournit des accès au lecteur et à la carte insérée. • CardService layer permet de faire abstraction des Card Operating System. Ex : FileAccessCardService, SignatureCardService, ApplicationManagementCardService, PurseCardService

  41. Exemple de programmation OpenCard

  42. Phase de récupération des paramètres : 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(); } } Exemple de programmation OpenCard Phase d’initialisation : // Initialize the framework SmartCard.start (); // register the new SignatureCard as a Card Terminal Event Listener CardTerminalRegistry.getRegistry().addCTListener(this);

  43. Exemple de programmation OpenCard Phase de lecture dans le fichier : ... // mount file system to get access to the root directory CardFile root = new CardFile(fileService); // This is the file holding card holder name and e-Mail address CardFile file = new CardFile(root, ":C009"); // Create a CardFileInputStream for file DataInputStream dis = new DataInputStream(new CardFileInputStream(file)); // Read in the owner’s name byte[] cardHolderData = new byte[file.getLength()]; dis.read(cardHolderData); // Explicitly close the InputStream to yield the smart card to other applications dis.close(); ...

  44. Exemple de programmation OpenCard Génération de la signature numérique : // specify the key used for signing PrivateKeyFile kf = new PrivateKeyFile (new CardFilePath(":C110"), keyNumber); // Let the card generate a signature signature = signatureService.signData(kf, JCAStandardNames.SHA1_RSA, JCAStandardNames.ZERO_PADDING, data); Terminaison : SmartCard.shutdown ();

  45. Schéma OpenCard

  46. Suppléments • Sécurité : Les fraudes des 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

  47. Fraudes des cartes bancaires Fraude sur Internet : • 16 chiffres de la carte bancaire, vérifiés par un simple algorithme Suppléments 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é

  48. MONEO Suppléments • 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

  49. 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)

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

More Related