Introduction Les protocoles de sécurité Les attaques possibles Conclusion
1967 : Six banques françaises créent la première carte de paiement en France : la Carte Bleue.
1975 : Les cartes à mémoires disposent d’un composant électronique mais sont dépourvues d’un micro processeur.
1967 : Six banques françaises créent la première carte de paiement en France : la Carte Bleue. 1975 : Les cartes à mémoires disposent d’un composant électronique mais sont dépourvues d’un micro processeur. 1978 : Michel Ugon dépose deux principaux brevets sur les cartes à microprocesseur.
1967 : Six banques françaises créent la première carte de paiement en France : la Carte Bleue. 1975 : Les cartes à mémoires disposent d’un composant électronique mais sont dépourvues d’un micro processeur. 1978 : Michel Ugon dépose deux principaux brevets sur les cartes à microprocesseur. 1983 : Première apparition de la télécarte à puce française.
1967 : Six banques françaises créent la première carte de paiement en France : la Carte Bleue. 1975 : Les cartes à mémoires disposent d’un composant électronique mais sont dépourvues d’un micro processeur. 1978 : Michel Ugon dépose deux principaux brevets sur les cartes à microprocesseur. 1983 : Première apparition de la télécarte à puce française. : Les cartes à puces se démocratisent fortement pour lutter contre la fraude. Elle est passée de 0,118 à 0,028 % en France.
De nos jours, 2 types de carte sont utilisées : - Les cartes à puce intégrées comportant aussi une bande magnétique. Elles sont surtout utilisées en Europe. - Les cartes à bande magnétique : utilisées dans tout le reste du monde.
La première génération fut équipée du système BO. Cette technologie a un faible niveau de sécurité.
Dans les années 2000 la technologie BO est remplacée par EMV. Elle est beaucoup plus sure en matière d’authentification. EMV permet un traitement plus approprié du chiffrement du code, vérification en ligne ou hors ligne et de la signature.
A Type de carte 3 : American Express 4 : Visa 5 : Eurocard Mastercard
BCD Banque 131 : Crédit Agricole (ou 612) 132 : Crédit Mutuel 970 : La Banque Postale (ou 130) 971 : HSBC 972 : Crédit Lyonnais 973 : Société Générale 974 : BNP Paribas 978 : Caisse d’Epargne
E à O Chiffres aléatoires
P Clé de Luhn Permet de vérifier la validité de la carte Se calcule en fonction des 15 premiers chiffres
P Clé de Luhn Permet de vérifier la validité de la carte Se calcule en fonction des 15 premiers chiffres S = 2A + B + 2C + D + 2E + F + 2G + H + 2I + J + 2K + L + 2M + N + 2O (si un élément de la somme est supérieur ou égal à 10, on retire 9)
P Clé de Luhn Permet de vérifier la validité de la carte Se calcule en fonction des 15 premiers chiffres S = 2A + B + 2C + D + 2E + F + 2G + H + 2I + J + 2K + L + 2M + N + 2O (si un élément de la somme est supérieur ou égal à 10, on retire 9) P = 10 – (S modulo 10)
Exemple :
S = (5*2-9) (3*2) (2*2) (1*2) (8*2-9) (4*2) (7*2-9) (7*2-9) = 57 : P = 3
Exemple : S = (5*2-9) (3*2) (2*2) (1*2) (8*2-9) (4*2) (7*2-9) (7*2-9) = 57 : P = 3 Dernière vérification : Il faut : (S + P) modulo 10 = 0
Acteurs /agents : (A)lice (C)arte bancaire (que A possède) (T)erminal détenu par commerçant (B)anque (banque émettrice de la carte)
Déroulement de la transaction : A introduit sa carte C dans T
Déroulement de la transaction : A introduit sa carte C dans T Le commerçant saisit le montant m sur T
Déroulement de la transaction : A introduit sa carte C dans T Le commerçant saisit le montant m sur T T authentifie C
Déroulement de la transaction : A introduit sa carte C dans T Le commerçant saisit le montant m sur T T authentifie C A donne son code C (2011)
Déroulement de la transaction : A introduit sa carte C dans T Le commerçant saisit le montant m sur T T authentifie C A donne son code C (2011) Si m dépasse 100 euros (et dans 20% des cas)
Déroulement de la transaction : A introduit sa carte C dans T Le commerçant saisit le montant m sur T T authentifie C A donne son code C (2011) Si m dépasse 100 euros (et dans 20% des cas) T demande l’autorisation à B pour C B donne l’autorisation
(A)lice possède un code secret : 2011
(B)anque possède : >une clé publique K B (RSA) >une clé privée K B −1
(A)lice possède un code secret : 2011 (B)anque possède : >une clé publique K B (RSA) >une clé privée K B −1 >une clé symétrique partagée avec C K CB (DES)
(A)lice possède un code secret : 2011 (B)anque possède : >une clé publique K B (RSA) >une clé privée K B −1 >une clé symétrique partagée avec C K CB (DES) (C)arte possède des informations publiques
(A)lice possède un code secret : 2011 (B)anque possède : >une clé publique K B (RSA) >une clé privée K B −1 >une clé symétrique partagée avec C K CB (DES) (C)arte possède des informations publiques >Data = nom, prénom, numéro carte, date de validité
(A)lice possède un code secret : 2011 (B)anque possède : >une clé publique K B (RSA) >une clé privée K B −1 >une clé symétrique partagée avec C K CB (DES) (C)arte possède des informations publiques >Data = nom, prénom, numéro carte, date de validité >Valeur de Signature VS = {hash(Data)} K B −1
(A)lice possède un code secret : 2011 (B)anque possède : >une clé publique K B (RSA) >une clé privée K B −1 >une clé symétrique partagée avec C K CB (DES) (C)arte possède des informations publiques >Data = nom, prénom, numéro carte, date de validité >Valeur de Signature VS = {hash(Data)} K B −1 et la clé secrète K CB
(A)lice possède un code secret : 2011 (B)anque possède : >une clé publique K B (RSA) >une clé privée K B −1 >une clé symétrique partagée avec C K CB (DES) (C)arte possède des informations publiques >Data = nom, prénom, numéro carte, date de validité >Valeur de Signature VS = {hash(Data)} K B −1 et la clé secrète K CB (T)erminal possède : >la fonction hash & une clé publique K B
(A)lice possède son code : 2011 (C)arte possède Data et {hash(Data)}K B −1 (T)erminal possède hash et la clé publique K B Phase hors ligne de la transaction :
(A)lice possède son code : 2011 (C)arte possède Data et {hash(Data)}K B −1 (T)erminal possède hash et la clé publique K B Phase hors ligne de la transaction : T authentifie C 1. C T : Data, {hash(Data)} K B −1
(A)lice possède son code : 2011 (C)arte possède Data et {hash(Data)}K B −1 (T)erminal possède hash et la clé publique K B Phase hors ligne de la transaction : T authentifie C 1. C T : Data, {hash(Data)} K B −1 hash hash(Data)
(A)lice possède son code : 2011 (C)arte possède Data et {hash(Data)}K B −1 (T)erminal possède hash et la clé publique K B Phase hors ligne de la transaction : T authentifie C 1. C T : Data, {hash(Data)} K B −1 hash K B hash(Data) hash(Data)
(A)lice possède son code : 2011 (C)arte possède Data et {hash(Data)}K B −1 (T)erminal possède hash et la clé publique K B Phase hors ligne de la transaction : T authentifie C 1. C T : Data, {hash(Data)} K B −1 hash K B hash(Data) hash(Data)
A donne son code C (C authentifie A) 2. T A : code ? 3. A T : T C : C T : ok
Si le montant est supérieur à 100 euros : T demande l’autorisation à B pour C 6. T B : Demande d’authentification
Si le montant est supérieur à 100 euros : T demande l’autorisation à B pour C 6. T B : Demande d’authentification B réalise l’authentification en ligne de C 7. B T : N B
Si le montant est supérieur à 100 euros : T demande l’autorisation à B pour C 6. T B : Demande d’authentification B réalise l’authentification en ligne de C 7. B T : N B 8. T C : N B
Si le montant est supérieur à 100 euros : T demande l’autorisation à B pour C 6. T B : Demande d’authentification B réalise l’authentification en ligne de C 7. B T : N B 8. T C : N B 9. C T : A, {N B }K CB
Si le montant est supérieur à 100 euros : T demande l’autorisation à B pour C 6. T B : Demande d’authentification B réalise l’authentification en ligne de C 7. B T : N B 8. T C : N B 9. C T : A, {N B }K CB 10. T B : A,{N B }K CB
Si le montant est supérieur à 100 euros : T demande l’autorisation à B pour C 6. T B : Demande d’authentification B réalise l’authentification en ligne de C 7. B T : N B 8. T C : N B 9. C T : A, {N B }K CB 10. T B : A,{N B }K CB N B K CB
Si le montant est supérieur à 100 euros : T demande l’autorisation à B pour C 6. T B : Demande d’authentification B réalise l’authentification en ligne de C 7. B T : N B 8. T C : N B 9. C T : A, {N B }K CB 10. T B : A,{N B }K CB N B K CB
B donne alors l’autorisation 11. B T : ok
Initialement la sécurité de la carte se basait sur : La non réplicabilité de celle-ci Le secret autour des clés employées, du protocole...
Mais des faiblesses subsistaient, telles que La faiblesse cryptographique : Les clés RSA 320 bits ne sont plus sûres (depuis 1988)
Mais des faiblesses subsistaient, telles que La faiblesse cryptographique : Les clés RSA 320 bits ne sont plus sûres (depuis 1998) La faiblesse logique du protocole : Il n’y pas de lien entre le « code à 4 chiffres » et l’ authentification
Mais des faiblesses subsistaient, telles que La faiblesse cryptographique : Les clés RSA 320 bits ne sont plus sûres (depuis 1998) La faiblesse logique du protocole : Il n’y pas de lien entre le « code à 4 chiffres » et l’ authentification La faiblesse physique : La réplicabilité Ex: La Yescard (avec l’affaire Humpich 1998)
Faiblesse logique du protocole : Il n’y pas de lien entre le « code à 4 chiffres » et l’ authentification! 1. C T : Data, {hash(Data)} K B −1 2. T A : code ? 3. A C : 2011 4. C T : ok
Faiblesse logique du protocole : Il n’y pas de lien entre le « code à 4 chiffres » et l’ authentification! 1. C T : Data, {hash(Data)} K B −1 2. T A : code ? 3. A C : 2011 A C’’: 7575 4. C T : ok C’’ T : ok
Faiblesse logique du protocole : Il n’y pas de lien entre le « code à 4 chiffres » et l’ authentification! 1. C T : Data, {hash(Data)} K B −1 2. T A : code ? 3. A C’’: 7575 4. C’’ T : ok
Europay, MasterCard et Visa ont produit EMV pour les cartes bancaires : Avec non pas un mais 3 protocoles : > SDA > DDA > CDA Conçu en 2004 et mis en place en 2006
SDA=Static Data Authentification (A)lice possède un code secret : 2011
SDA=Static Data Authentification (A)lice possède un code secret : 2011 (C)arte possède des informations publiques
SDA=Static Data Authentification (A)lice possède un code secret : 2011 (C)arte possède des informations publiques > Data= nom, prénom, numéro carte, date de validité >Valeur de Signature VS = {hash(Data)}K B −1
SDA=Static Data Authentification (A)lice possède un code secret : 2011 (C)arte possède des informations publiques > Data= nom, prénom, numéro carte, date de validité >Valeur de Signature VS = {hash(Data)}K B −1 > Certificat {K B }K S −1 de la clé de la banque
SDA=Static Data Authentification (A)lice possède un code secret : 2011 (C)arte possède des informations publiques > Data= nom, prénom, numéro carte, date de validité >Valeur de Signature VS = {hash(Data)}K B −1 > Certificat {K B }K S −1 de la clé de la banque (T)erminal possède > hash > une clé publique K S
(A)lice possède son code : 2011 (C)arte possède Data, {hash(Data)}K B −1, {K B }K S −1 (T)erminal possède hash et la clé publique K S Phase hors ligne de la transaction :
(A)lice possède son code : 2011 (C)arte possède Data, {hash(Data)}K B −1, {K B }K S −1 (T)erminal possède hash et la clé publique K S Phase hors ligne de la transaction : T authentifie C 1. C T : {K B } K S −1, Data, {hash(Data)} K B −1
(A)lice possède son code : 2011 (C)arte possède Data, {hash(Data)}K B −1, {K B }K S −1 (T)erminal possède hash et la clé publique K S Phase hors ligne de la transaction : T authentifie C 1. C T : {K B } K S −1, Data, {hash(Data)} K B −1 K S K B
(A)lice possède son code : 2011 (C)arte possède Data, {hash(Data)}K B −1, {K B }K S −1 (T)erminal possède hash et la clé publique K S Phase hors ligne de la transaction : T authentifie C 1. C T : {K B } K S −1, Data, {hash(Data)} K B −1 K S hash K B hash(Data)
(A)lice possède son code : 2011 (C)arte possède Data, {hash(Data)}K B −1, {K B }K S −1 (T)erminal possède hash et la clé publique K S Phase hors ligne de la transaction : T authentifie C 1. C T : {K B } K S −1, Data, {hash(Data)} K B −1 K S hash K B K B hash(Data) hash(Data)
(A)lice possède son code : 2011 (C)arte possède Data, {hash(Data)}K B −1, {K B }K S −1 (T)erminal possède hash et la clé publique K S Phase hors ligne de la transaction : T authentifie C 1. C T : {K B } K S −1, Data, {hash(Data)} K B −1 K S hash K B K B hash(Data) hash(Data)
A donne son code C (C authentifie A) 2. T A : code ? 3. A C : C T : ok
DDA = Dynamic Data Authentication (Déployé en mai 2007) (A)lice possède un code secret : 2011
DDA = Dynamic Data Authentication (Déployé en mai 2007) (A)lice possède un code secret : 2011 (C)arte possède des informations privées > Clé K C −1 propre à la (C)arte
DDA = Dynamic Data Authentication (Déployé en mai 2007) (A)lice possède un code secret : 2011 (C)arte possède des informations privées > Clé K C −1 propre à la (C)arte (C)arte possède des informations publiques > Data= nom, prénom, numéro carte, date de validité > Valeur de Signature VS = {hash(Data)}K B −1 > Certificat {K B }K S −1 de la clé de la (B)anque
DDA = Dynamic Data Authentication (Déployé en mai 2007) (A)lice possède un code secret : 2011 (C)arte possède des informations privées > Clé K C −1 propre à la (C)arte (C)arte possède des informations publiques > Data= nom, prénom, numéro carte, date de validité > Valeur de Signature VS = {hash(Data)}K B −1 > Certificat {K B }K S −1 de la clé de la (B)anque > Certificat {K C } K B −1 de la clé de la (C)arte
DDA = Dynamic Data Authentication (Déployé en mai 2007) (A)lice possède un code secret : 2011 (C)arte possède des informations privées > Clé K C −1 propre à la (C)arte (C)arte possède des informations publiques > Data= nom, prénom, numéro carte, date de validité > Valeur de Signature VS = {hash(Data)}K B −1 > Certificat {K B }K S −1 de la clé de la (B)anque > Certificat {K C } K B −1 de la clé de la (C)arte (T)erminal possède > hash > une clé publique K S
Phase hors ligne de la transaction : T authentifie C 1. C T : {K B }K S −1, {K C }K B −1, Data, {hash(Data)}K B −1 CDA = Combined Data Authentication (variante de DDA)
Phase hors ligne de la transaction : T authentifie C 1. C T : {K B }K S −1, {K C }K B −1, Data, {hash(Data)}K B −1 K S K B CDA = Combined Data Authentication (variante de DDA)
Phase hors ligne de la transaction : T authentifie C 1. C T : {K B }K S −1, {K C }K B −1, Data, {hash(Data)}K B −1 K S K B K B K C CDA = Combined Data Authentication (variante de DDA)
Phase hors ligne de la transaction : T authentifie C 1. C T : {K B }K S −1, {K C }K B −1, Data, {hash(Data)}K B −1 K S K B hash K B K C hash(Data) CDA = Combined Data Authentication (variante de DDA)
Phase hors ligne de la transaction : T authentifie C 1. C T : {K B }K S −1, {K C }K B −1, Data, {hash(Data)}K B −1 K S K B hash K B K B K C hash(Data) hash(Data) CDA = Combined Data Authentication (variante de DDA)
Phase hors ligne de la transaction : T authentifie C 1. C T : {K B }K S −1, {K C }K B −1, Data, {hash(Data)}K B −1 K S K B hash K B K B K C hash(Data) hash(Data) CDA = Combined Data Authentication (variante de DDA)
Phase hors ligne de la transaction : T authentifie C 1. C T : {K B }K S −1, {K C }K B −1, Data, {hash(Data)}K B −1 K S K B hash K B K B K C hash(Data) hash(Data) 2. T C : N vérif CDA = Combined Data Authentication (variante de DDA)
Phase hors ligne de la transaction : T authentifie C 1. C T : {K B }K S −1, {K C }K B −1, Data, {hash(Data)}K B −1 K S K B hash K B K B K C hash(Data) hash(Data) 2. T C : N vérif 3. C T : {N vérif } K C −1 CDA = Combined Data Authentication (variante de DDA)
Phase hors ligne de la transaction : T authentifie C 1. C T : {K B }K S −1, {K C }K B −1, Data, {hash(Data)}K B −1 K S K B hash K B K B K C hash(Data) hash(Data) 2. T C : N vérif 3. C T : {N vérif } K C −1 K C N vérif CDA = Combined Data Authentication (variante de DDA)
Phase hors ligne de la transaction : T authentifie C 1. C T : {K B }K S −1, {K C }K B −1, Data, {hash(Data)}K B −1 K S K B hash K B K B K C hash(Data) hash(Data) 2. T C : N vérif 3. C T : {N vérif } K C −1 K C N vérif CDA = Combined Data Authentication (variante de DDA)
A donne son code C (C authentifie A) 4. T A : code ? 5. A T : T C : {2011}K C 7. C T : ok CDA = Combined Data Authentication (variante de DDA)
Affaire Humpich (1998)
« Yes-Card » = cartes qui renvoient « code bon » quelque soit le code entré
Affaire Humpich (1998) « Yes-Card » = cartes qui renvoient « code bon » quelque soit le code entré Terminal → Alicecode ? Alice → Terminal3456 Terminal → Carte{3456} K C (K C : clé publique) (Carte compare la valeur reçue avec la valeur stockée) Carte → Terminalcode bon / code faux
Humpich modifie la fonction de comparaison de telle sorte qu’elle renvoie « code bon » tout le temps
Faiblesse cryptographique : clé RSA de 320 bits
Humpich factorise un nombre semi-premier et trouve la clé secrète K B -1
Faiblesse cryptographique : clé RSA de 320 bits Humpich factorise un nombre semi-premier et trouve la clé secrète K B -1 Il peut ainsi inventer des données créées de toute pièce
Piratage des distributeurs automatiques Ajout d’un skimmer sur la fente
Piratage des distributeurs automatiques Micro-caméra cachée dans les autocollants
Piratage des distributeurs automatiques Ajout d’un faux clavier par-dessus le vrai
Récupération de données sur serveurs Introduction dans des serveurs sécurisés
Récupération de données sur serveurs Introduction dans des serveurs sécurisés Les pirates récupèrent des bases de données confidentielles