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

Présentations similaires


Présentation au sujet: "Cartes à puce et programmation"— Transcription de la présentation:

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

7 Technologie 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 Bus de données Bus d’adresses EEPROM ROM RAM Microcontact Microchip Micromodule

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 à

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

11 ISO 7816-2 • Emplacement des contacts et aspects électriques 1 2 3 4 5
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 Mhz Vitesse des communications < 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

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

17 ISO • 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 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

19 2000 PicoDBMS : Un SGBD sur carte à puce
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 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 Fonctions Java non supportées
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 Fonctions Java supportées
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 JavaCard Avantages • Facilité de développement (Java) • Sécurité
• Portabilité • Stockage et gestion de multiples applications • Compatibilité

29 JavaCard Exemple 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) 0x 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); case CREDIT : credit (apdu); case VERIFIE_PIN : verify (apdu); 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 byteRead = (byte) (apdu.setIncomingAndReceive ()); if( CodePin.check (buffer, ISO7816.OFFSET_CDATA, byteRead) == false ) ISOException.throwIt ( (short) (SW_CODE_ERRONE + CodePin.getTriesRemaining ()) );

35 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

36 Mécanisme de paiement par carte bleue
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.

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

38 (Europay Mastercard Visa)
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

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

41 Exemple de programmation
OpenCard Exemple de programmation

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

43 OpenCard Exemple de programmation 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 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 OpenCard Exemple de programmation
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 OpenCard Schéma

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
Suppléments Fraudes des 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

48 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

49 Applications générales
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 Applications générales
Suppléments Applications générales • La santé : carte SesamE-Vitale HC-Forum (identification et milieu familial) • Les banques : CB Porte-monnaie électronique

51 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

52 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. • : Carte d’identité électronique : Identification par empreinte digitale intégrée ?

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

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 http://www.opencard.org http://www.xcard3.com


Télécharger ppt "Cartes à puce et programmation"

Présentations similaires


Annonces Google