Cartes à puce et programmation
description
Transcript of Cartes à puce et programmation
Cartes à puceet
programmation
Nicolas DrozeJean-Noel Isnard
• Historique• Technologie• Normes en vigueur• Javacard• Sécurité et cartes bancaires• OpenCard Framework• Suppléments
• Glossaire• Références
SOMMAIRE
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
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 : le secret des CB tombe
• 1999 : Lancement de moneo• 2002 : 400 Millions de cartes bancaires
Carte à puce sonore
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
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
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 VIGUEURISO 7816-1 à 7816-10
Epaisseur 0,76 mm
85 mm
54 mm
ISO 7816-1
• Caractéristiques physiques, dimensions
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
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)
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
ISO 7816-4
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-5
• Spécifie des identifiants d’applications (Application IDentifier)
Un AID = identication unique d'une application de la carteet de certains types de fichiers.
ISO 7816-6
• Spécifie les éléments de données inter-industrie :Nom du porteur de la carteDate d’expiration…
Etiquette Longueur valeur
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
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
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
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
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
APIs
• javacard.framework• javacard.security, javacardx.crypto
– algorithmes (RSA, DSA, DES, …), security management
– SecurityManager doit être construit dans VM
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
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
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 sontoptionnels
JavaCard
JavaCard
Avantages
• Facilité de développement (Java)
• Sécurité
• Portabilité
• Stockage et gestion de multiples applications
• Compatibilité
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
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 (); }
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
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
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
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
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 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 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.
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é
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, …
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
Exemple de programmationOpenCard
// 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
...// 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
// 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
SchémaOpenCard
-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
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
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
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 SesamE-Vitale– HC-Forum (identification et milieu familial)
• Les banques :– CB– Porte-monnaie électronique
Suppléments
• 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
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
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
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
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