Title: Pr
1Cartes à puce et programmation
Nicolas Droze Jean-Noel Isnard
2SOMMAIRE
- Historique
- Technologie
- Normes en vigueur
- Javacard
- Sécurité et cartes bancaires
- OpenCard Framework
- Suppléments
- Glossaire
- Références
3Historique
- 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
4Historique
- 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
5Historique
- 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
62 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
7Technologie
Mémoire et processeur
CPU 8 / 16 / 32 bits, architecture RISC
(souvent)
ROM 8 32 Ko (Card Operating System)
RAM lt 1Ko mémoire temporaire
EEPROM / FlashRAM / FeRAM 8 64 Ko mémoire
persistante
8Cycle 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,
9NORMES EN VIGUEUR
ISO 7816-1 à 7816-10
10ISO 7816-1
Caractéristiques physiques, dimensions
11ISO 7816-2
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
12ISO 7816-3
Caractéristiques électriques Fréquence
dhorloge 1 - 5 Mhz Vitesse des communications lt
115200 bauds
Protocole de transmission TPDU (Transmission
Protocol Data Unit) T0 Protocole orienté
octet T1 Protocole orienté paquet
Sélection du type de protocole PTS (Protocol
Type Selection)
Réponse au reset ATR (Answer To Reset)
13ISO 7816-4
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 90 00 ? OK
14ISO 7816-4
15ISO 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)
16ISO 7816-4
4 structures de données
17ISO 7816-5
Spécifie des identifiants dapplications
(Application IDentifier) Un AID identication
unique d'une application de la carte et de
certains types de fichiers.
18ISO 7816-6
Spécifie les éléments de données
inter-industrie Nom du porteur de la
carte Date dexpiration
19ISO 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
20ISO 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
21Présentation
JavaCard
- 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
22Architecture
JavaCard
- 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
23APIs
JavaCard
- java.io
- IOException
- java.lang
- Object (has default constructor and method
equals()) - Throwable (10 Exception classes)
- java.rmi, javacardx.rmi (support for limited
RMI)
24APIs
JavaCard
- javacard.framework
- javacard.security, javacardx.crypto
- algorithmes (RSA, DSA, DES, ), security
management - SecurityManager doit être construit dans VM
25Applet
JavaCard
- 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
26Fonctions Java non supportées
JavaCard
- 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
27Fonctions Java supportées
JavaCard
- 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
28Avantages
JavaCard
- Facilité de développement (Java)
- Sécurité
- Portabilité
- Stockage et gestion de multiples applications
- Compatibilité
29Exemple
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_REQ
UISE (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
30JavaCard
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
bArraybOffset 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 ()
31JavaCard
Exemple
public void process (javacard.framework.APDU
apdu) throws javacard.framework.ISOException byt
e buffer apdu.getBuffer () if (
selectingApplet () bufferISO7816.OFFSET_CLA
ISO7816.CLA_ISO7816 bufferISO7816.OFFSET_INS
ISO7816.INS_SELECT ) else if
(bufferISO7816.OFFSET_CLA ! PorteMonnaie_CLA) I
SOException.throwIt (ISO7816.SW_CLA_NOT_SUPPORTED)
switch ( bufferISO7816.OFFSET_INS ) case
SOLDE getBalance (apdu) return case DEBIT
debit (apdu) return case CREDIT credit
(apdu) return case VERIFIE_PIN verify
(apdu) return default
32JavaCard
Exemple
private void credit (APDU apdu) if (
!CodePin.isValidated () ) ISOException.throwIt
(SW_VERIFICATION_PIN_REQUISE) byte buffer
apdu.getBuffer () byte numBytes
bufferISO7816.OFFSET_LC byte byteRead (byte)
(apdu.setIncomingAndReceive ()) if ( byteRead
! 1 ) ISOException.throwIt (ISO7816.SW_WRONG_LENG
TH) byte MontantCredit bufferISO7816.OFFSET_CD
ATA if ( (MontantCredit gt TRANSACTION_MAX)
(MontantCredit lt 0) ) ISOException.throwIt
(SW_MONTANT_TRANSACTION_INVALIDE) if ( (short)
(Solde MontantCredit) gt SOLDE_MAX) ISOException.
throwIt (SW_MONTANT_TRANSACTION_DEPASSE) Solde
(short)(Solde MontantCredit)
33JavaCard
Exemple
private void debit (APDU apdu) if (
!CodePin.isValidated () ) ISOException.throwIt
(SW_VERIFICATION_PIN_REQUISE) byte buffer
apdu.getBuffer () byte numBytes
bufferISO7816.OFFSET_LC byte byteRead (byte)
(apdu.setIncomingAndReceive ()) if ( byteRead
! 1 ) ISOException.throwIt (ISO7816.SW_WRONG_LENG
TH) byte MontantDebit bufferISO7816.OFFSET_CDA
TA if ( (MontantDebit gt TRANSACTION_MAX)
(MontantDebit lt 0) ) ISOException.throwIt
(SW_MONTANT_TRANSACTION_INVALIDE) if ( (short)
(Solde - MontantDebit) lt 0) ISOException.throwIt
(SW_SOLDE_NEGATIF) Solde (short)(Solde -
MontantDebit)
34JavaCard
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.getTriesRemainin
g ()) )
35Les algorithmes
Sécurité
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
36Mécanisme de paiement par carte bleue
Sécurité
Authentification de la carte Algo RSA,
fonctions de tests, identifie la carte de manière
unique.
37Mé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.
38Le 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 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
39OpenCard
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,
40OpenCard 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
41Exemple de programmation
OpenCard
42Exemple de programmation
OpenCard
Phase dinitialisation
// Initialize the framework SmartCard.start
() // register the new SignatureCard as a Card
Terminal Event Listener CardTerminalRegistry.getRe
gistry().addCTListener(this)
43Exemple 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
owners name byte cardHolderData new
bytefile.getLength() dis.read(cardHolderData)
// Explicitly close the InputStream to yield the
smart card to other applications dis.close() ...
44Exemple 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 ()
45Schéma
OpenCard
46Supplé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
le-business - Glossaire
- Références
47Fraudes des cartes bancaires
Suppléments
Laffaire 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 lauthentification de
la carte
Carte répond code bon lorsque nimporte
quel code est entré
48MONEO
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
49Applications générales
Suppléments
- 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)
50Applications générales
Suppléments
- La santé
- carte SesamE-Vitale
- HC-Forum (identification et milieu familial)
- Les banques
- CB
- Porte-monnaie électronique
51Supplé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 daccès
- Logique
- Physique
52Salon Cartes 2002
Suppléments
5 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.
2007 Carte didentité électronique
Identification par empreinte digitale intégrée ?
53FINREAD Pour sécuriser le-business
Suppléments
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.
54Glossaire
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
55Références
http//www.opencard.org http//www.xcard3.com http
//www.dell.com http//www.gemplus.com http//www.
smartcards.net http//www.smartcardalliance.org ht
tp//www.cartes.com http//www.cartes-bancaires.co
m