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

Cartes à puce et programmation

  • Upload
    duane

  • View
    54

  • Download
    2

Embed Size (px)

DESCRIPTION

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 - PowerPoint PPT Presentation

Citation preview

Page 1: Cartes à puce et programmation

Cartes à puceet

programmation

Nicolas DrozeJean-Noel Isnard

Page 2: Cartes à puce et programmation

• Historique• Technologie• Normes en vigueur• Javacard• Sécurité et cartes bancaires• OpenCard Framework• Suppléments

• Glossaire• Références

SOMMAIRE

Page 3: Cartes à puce et programmation

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

Page 4: Cartes à puce et programmation

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

Page 5: Cartes à puce et programmation

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

Page 6: Cartes à puce et programmation

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 7816Carte à contacts et sans contacts

2 types de cartes

Page 7: Cartes à puce et programmation

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 d’adresses

EEPROM ROM RAM

Microcontact Microchip

Micromodule

CPU : 8 / 16 / 32 bits, architecture RISC (souvent)

Mémoire et processeur

Page 8: Cartes à puce et programmation

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

Page 9: Cartes à puce et programmation

NORMES EN VIGUEURISO 7816-1 à 7816-10

Page 10: Cartes à puce et programmation

Epaisseur 0,76 mm

85 mm

54 mm

ISO 7816-1

• Caractéristiques physiques, dimensions

Page 11: Cartes à puce et programmation

ISO 7816-2

1234

5 678

1 - 2 : Alimentation 3 à 5 V3 : Horloge4 : Remise à Zéro5 : Optionnel6 : Optionnel7 : I/O asynchrone8 : Ecriture EEPROM

• Emplacement des contacts et aspects électriques

Page 12: Cartes à puce et programmation

ISO 7816-3

• Protocole de transmission :TPDU (Transmission Protocol Data Unit)T=0 Protocole orienté octetT=1 Protocole orienté paquet

• Caractéristiques électriques : Fréquence d’horloge 1 - 5 MhzVitesse des communications < 115200 bauds

• Sélection du type de protocole :PTS (Protocol Type Selection)

• Réponse au reset :ATR (Answer To Reset)

Page 13: Cartes à puce et programmation

ISO 7816-4

APDU (Application Programming Data Units)

CLA : 1 octet pour identifier l’applicationINS : 1 octet pour le code de l’instructionP1 - P2 : Paramètres de l’instructionLc : Longueur du champ de donnéesLe : Longueur maxi du champ de données de la réponse

SW1 - SW2 : Code d’exécution90 00 OK

Page 14: Cartes à puce et programmation

ISO 7816-4

Page 15: Cartes à puce et programmation

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)

Page 16: Cartes à puce et programmation

ISO 7816-4

• 4 structures de données :

Page 17: Cartes à puce et programmation

ISO 7816-5

• Spécifie des identifiants d’applications (Application IDentifier)

Un AID = identication unique d'une application de la carteet de certains types de fichiers.

Page 18: Cartes à puce et programmation

ISO 7816-6

• Spécifie les éléments de données inter-industrie :Nom du porteur de la carteDate d’expiration…

Etiquette Longueur valeur

Page 19: Cartes à puce et programmation

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

Page 20: Cartes à puce et programmation

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

Page 21: Cartes à puce et programmation

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

JavaCard

Page 22: Cartes à puce et programmation

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

Page 23: Cartes à puce et programmation

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

Page 24: Cartes à puce et programmation

APIs

• javacard.framework• javacard.security, javacardx.crypto

– algorithmes (RSA, DSA, DES, …), security management

– SecurityManager doit être construit dans VM

JavaCard

Page 25: Cartes à puce et programmation

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

JavaCard

Page 26: Cartes à puce et programmation

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

Page 27: Cartes à puce et programmation

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 sontoptionnels

JavaCard

Page 28: Cartes à puce et programmation

JavaCard

Avantages

• Facilité de développement (Java)

• Sécurité

• Portabilité

• Stockage et gestion de multiples applications

• Compatibilité

Page 29: Cartes à puce et programmation

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

Page 30: Cartes à puce et programmation

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

JavaCard

Exemple

public boolean select (){ CodePin.reset ();return(true); }

public void deselect (){ CodePin.reset (); }

Page 31: Cartes à puce et programmation

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

Page 32: Cartes à puce et programmation

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

Page 33: Cartes à puce et programmation

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

Page 34: Cartes à puce et programmation

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

Page 35: Cartes à puce et programmation

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é

Page 36: Cartes à puce et programmation

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é

Page 37: Cartes à puce et programmation

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.

Page 38: Cartes à puce et programmation

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 d’authentification statique : 1 contrôle de certificats

• Protocole d’authentification dynamique : 3 contrôles de certificats en cascadeNécessite des cartes puissantes et des ressources

Sécurité

Page 39: Cartes à puce et programmation

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

Page 40: Cartes à puce et programmation

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

Page 41: Cartes à puce et programmation

Exemple de programmationOpenCard

Page 42: Cartes à puce et programmation

// Initialize the frameworkSmartCard.start ();// register the new SignatureCard as a Card Terminal Event ListenerCardTerminalRegistry.getRegistry().addCTListener(this);

Phase d’initialisation :

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 programmationOpenCard

Page 43: Cartes à puce et programmation

...// mount file system to get access to the root directoryCardFile root = new CardFile(fileService);// This is the file holding card holder name and e-Mail addressCardFile file = new CardFile(root, ":C009");// Create a CardFileInputStream for fileDataInputStream dis = new DataInputStream(new CardFileInputStream(file));// Read in the owner’s namebyte[] cardHolderData = new byte[file.getLength()];dis.read(cardHolderData);// Explicitly close the InputStream to yield the smart card to other applicationsdis.close();...

Phase de lecture dans le fichier :

Exemple de programmationOpenCard

Page 44: Cartes à puce et programmation

// specify the key used for signingPrivateKeyFile kf = new PrivateKeyFile (new CardFilePath(":C110"), keyNumber);

// Let the card generate a signaturesignature = 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

Page 45: Cartes à puce et programmation

SchémaOpenCard

Page 46: Cartes à puce et programmation

-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

Suppléments

Page 47: Cartes à puce et programmation

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 n’importe quel code est entré

• Découvre la clé RSA pour l’authentification de la carte

L’affaire Humpich :

Fraude sur Internet :

• 16 chiffres de la carte bancaire, vérifiés par un simple algorithme

Suppléments

Page 48: Cartes à puce et programmation

MONEO

• Technologie allemande « Geldkarte » de la banque allemande ZKA.

• Sécurité : Algorithme DES 56 bits seulement !

• Porte Monnaie ElectroniqueIdée de Société Européenne de la Monnaie Electronique (SEME)

• Pas de paiement sur Internet

Suppléments

Page 49: Cartes à puce et programmation

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

Page 50: Cartes à puce et programmation

Applications générales

• La santé :– carte SesamE-Vitale– HC-Forum (identification et milieu familial)

• Les banques :– CB– Porte-monnaie électronique

Suppléments

Page 51: Cartes à puce et programmation

• 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

Applications générales

Suppléments

Page 52: Cartes à puce et programmation

Salon Cartes 20025 – 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

Page 53: Cartes à puce et programmation

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.

Suppléments

Page 54: Cartes à puce et programmation

Glossaire

AES : Advanced Encryption StandardAFNOR : Association Française de NormalisationAID : Application IdentifierAPDU : Application Programming Data UnitsATR : Answer To ResetCOS : Card Operating SystemDES : Data Encryption StandardEEPROM : Electrical Erasable Programmable Read Only MemoryEPROM : Erasable Programmable Read Only MemoryEMV : Europay Mastercard VisaFeRAM : Ferroelectric Random Access MemoryMAM : Microprocesseur Autoprogrammable MonolithiquePTS : Protocol Type SelectionRAM : Random Access MemoryRSA : Rivest Shamir AdelmanSCQL : Smart Card Query LanguageTDES : Triple Data Encryption StandardTPDU : Transmission Protocol Data Unit

Page 55: Cartes à puce et programmation

Références

http://www.opencard.orghttp://www.xcard3.comhttp://www.dell.comhttp://www.gemplus.comhttp://www.smartcards.nethttp://www.smartcardalliance.orghttp://www.cartes.comhttp://www.cartes-bancaires.com