La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "Cartes à puce et programmation Nicolas Droze Jean-Noel Isnard."— Transcription de la présentation:

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

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

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 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 2 types de cartes

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

8 Cycle de vie FABRICATION : Inscription dans la ROM des fonctionnalités de base INITIALISATION : Inscription dans lEEPROM des données de lapplication PERSONNALISATION : Inscription dans lEEPROM des données utilisateur UTILISATION : Envoi de commandes à la carte MORT : Invalidation logique, destruction, …

9 NORMES EN VIGUEUR ISO à

10 Epaisseur 0,76 mm 85 mm 54 mm ISO Caractéristiques physiques, dimensions

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

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

13 ISO APDU (Application Programming Data Units) CLA : 1 octet pour identifier lapplication INS : 1 octet pour le code de linstruction P1 - P2 : Paramètres de linstruction Lc : Longueur du champ de données Le : Longueur maxi du champ de données de la réponse SW1 - SW2 : Code dexécution OK

14 ISO

15 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 structures de données :

17 ISO Spécifie des identifiants dapplications (Application IDentifier) Un AID = identication unique d'une application de la carte et de certains types de fichiers.

18 ISO Spécifie les éléments de données inter-industrie : Nom du porteur de la carte Date dexpiration … Etiquette Longueur valeur

19 ISO 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 à 10 ISO : Sécurité de l'architecture et des commandes inter-industrie. ISO : Commandes inter-industries améliorées ISO : Spécifiques aux cartes synchrones

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

22 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 JavaCard

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

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

25 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 lapplet –Process : exécute APDU –Deselect : Suspend lapplet JavaCard

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

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

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

29 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; JavaCard Exemple

30 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) 0x TailleCodePin)); } Solde = 0; register (); } JavaCard Exemple public boolean select () { CodePin.reset (); return(true); } public void deselect () { CodePin.reset (); }

31 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 JavaCard Exemple

32 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); } JavaCard Exemple

33 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); } JavaCard Exemple

34 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 ()) ); } JavaCard Exemple

35 Les algorithmes 2 principaux algorithmes : RSA (Rivest Shamir Adleman) 1977 : 320 bits, nombres premier, algorithme dEuclide (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é

36 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é

37 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. Sécurité Authentification de la transaction : Algo DES et TDES, fonctions de tests, code les informations de la transaction.

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

39 OpenCard 3 raisons : Les terminaux des cartes, nont pas dinterfaces standardisées différents protocoles Card Operating System divers différentes commandes et codes de réponse Les émetteurs des cartes décident de lemplacement des applications sur la carte But : Rendre le développement dapplications indépendant des fabricants, technologies, …

40 OpenCard Framework 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 OpenCard

41 Exemple de programmation OpenCard

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

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

44 // 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); SmartCard.shutdown (); Génération de la signature numérique : Terminaison : Exemple de programmation OpenCard

45 Schéma OpenCard

46 -Sécurité : Les fraudes des cartes bancairesLes fraudes des cartes bancaires -Applications générales : Par secteurPar secteur -Application : La carte MONEOLa carte MONEO -Conférences : Le salon Cartes 2002 à ParisLe salon Cartes 2002 à Paris -Technologies : FINREAD pour sécuriser le-businessFINREAD pour sécuriser le-business -GlossaireGlossaire -RéférencesRéférences Suppléments

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

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

49 Applications générales Télécommunications –Lun des plus gros secteurs –GSM –Télécarte (Cabines, Publiphones) Les transports –Système Transcarte (SEMURVAL, SNCF) –STO (Réseau dautobus, sans contact) Suppléments

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

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

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

53 FINREAD : Pour sécuriser le- business 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. Suppléments

54 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 FeRAM : 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

55 Références


Télécharger ppt "Cartes à puce et programmation Nicolas Droze Jean-Noel Isnard."

Présentations similaires


Annonces Google