HOWTO : Paiement sécurisé sur internet CM-CIC Paiement

30/12/2009 13:44
31.262 lectures
Cette article a pour but d'expliquer le fonctionnement de la solution de paiement CM-CIC Paiement après que j'ai pu lire les difficultés rencontrées par de nombreux internautes pour l'implémenter et surtout comprendre son fonctionnement.
Je m'attarderai surtout sur la clé à employer et son implémentation.

Principe général


La solution de paiement du groupe CM-CIC est fondée sur la technique du secret partagé : l'opérateur bancaire et le commerçant utilise une clé secrète qu'ils sont normalement les seuls à connaître. Cette clé leur permet de signer les échanges entre leurs serveurs respectifs afin de garantir l'authenticité de l'émetteur d'un message et la non altération du message par un tiers non autorisé.

Les messages échangés sont donc toujours accompagnés d'une signature (aussi appelé sceau) générée à partir de la clé secrète et des informations à échanger : le HMAC.
CM-CIC Paiement propose deux type de HMAC (et donc deux types de clé associées) : HMAC-MD5 et HMAC-SHA1.
Notons que par défaut pour les développeurs en language ASP, c'est du HMAC-MD5 qui est proposé. L'exemple d'implémentation fourni par le CM-CIC utilise d'ailleurs ce HMAC, mais une implémentation de l'algorithme HMAC-SHA1 en JS est disponible ici (EN) et offre donc le choix.

La cinématique d'une transaction de paiement est la suivante :
1. Génération sur le site commerçant du message contenant les informations sur le paiement à effectuer (montant, date, référence...) et appel du serveur bancaire
2. Contrôle de l'identité de l'appelant, de l'intégrité (format) des données et de leur authenticité (HMAC)
3. Affichage de la page de saisie des informations bancaires (serveur de la banque)
4 Contrôle des informations saisies, authentification 3D Secure éventuelle, demande d'autorisation de paiement à la banque de l'internaute
5. Affichage du résultat de la transaction à l'internaute et appel asynchrone d'une url de callback (souvent dénommée "url CGI2" dans le jargon de cette solution de paiement) sur le site du commerçant pour l'informer du résultat de paiement.

Les échanges commerçant/banque (donc soumis à signature) ont lieu aux étapes 1 et 5, respectivement appelée "phase aller" et "phase retour" dans le jargon de cette solution de paiement.

La clé


Avant toute chose, il vous faudra télécharger le fichier contenant clé afin de l'en extraire et de l'intégrer à votre système d'information.

Télécharger la clé


Il faut différencier la clé qui sera utilisée pour le calcul du sceau du fichier qui la contient.
Le fichier contenant la clé est téléchargeable via une pièce jointe contenue dans un email envoyé par la banque (downloadkey[TPE].html).
Vous êtes alors redirigé vers le serveur bancaire où à l'aide de votre identifiant/mot de passe (envoyés en deux emails séparés par la banque) vous avez le choix de télécharger le fichier contenant la clé selon la version de la solution de paiement que vous souhaitez utiliser :
- version 3.0 : c'est la dernière version de la solution de paiement
- version antérieure à la 3.0 (appelée aussi 1.2open).
Nous allons par la suite traiter que de la version 3.0, mais il faut savoir que le principe de calcul du sceau est exactement le même pour les deux versions au delta des messages à signer et d'une particularité dans la représentation de la clé.

Extraire la clé


Le fichier contenant la clé est un fichier texte contenant les information suivantes :
VERSION 1 [CLE]
[TYPE_DE_CLE]
#
[HASH_DU_FICHIER]

Exemple fichier clé version 3.0 :


VERSION 1 325A16A325127FD42B700D4810E83F6312877B92
HMAC-SHA1
#
e63b33e42b62f19fb5e6bbfa0c08429ab04239ba


Exemple fichier clé version 1.2open :


VERSION 1 325A16A325127FD42B700D4810E83F6312877BP2
HMAC-SHA1
#
e63b33e42b62f19fb5e6bbfa0c08429ab04239ba


La clé est donc la suite de 40 caractères située en première ligne du fichier, soit 405A16A325127FD42B700D4810E83F6312877B92.
Je reviendrais sur le caractère non-hexadécimal en avant-derniere position du fichier clé version 1.2open dans le paragraphe suivant.

Implémenter la clé


La clé que vous avez extraite du fichier est la représentation au format externe de la clé à utiliser pour le calcul du sceau HMAC.
Vous devez donc convertir cette clé en sa représentation opérationnelle, soit une chaine de 20 octets (20 caractères si vous préférez).
Ce qui apparaît ici un peu barbare est en fait relativement simple : il faut convertir chaque couple de caractères hexadécimaux par le caractère ASCII correspondant.

Exemple :


Soit une clé de 40 caractères 4142434445464748494A4142434445464748494A
Elle est composée de 20 couples de caractères hexadécimaux : 41 42 43 44 45 46 47 48 49 4A 41 42 43 44 45 46 47 48 49 4A
Ce qui donne la représentation opérationnelle suivante : ABCDEFGHIJABCDEFGHIJ



Evidemment, l'exemple précédent offre une représentation opérationnelle composé uniquement de caractères affichables, ce qui n'est pas forcément le cas dans la réalité. Ne vous étonnez pas si en voulant afficher votre clé au format opérationnel des hieroglyphes apparaissent.

Petite disgression vers la clé au format 1.2open. Si la version 3.0 est composée uniquement de caractères hexadécimaux, la version 1.2open possède un avant dernier caractère non hexadécimal.
Il s'agit donc de le convertir pour le rendre hexadécimal et là ça ne s'invente pas, mais la méthode à employer est la suivante (déduite des exemples d'implémentation fournis par la banque) : soustraire 23 (en décimal) au code ASCII du caractère non hexadécimal.

Exemple :


Soit la clé 325A16A325127FD42B700D4810E83F6312877BP2
L'avant-dernier caractère de la clé : P
Code ASCII en décimal : 80
Ce qui donne 80 - 23 = 57 soit le caractère 9 (qui lui est entre dans le cadre de la représentation hexadécimale).
donc la représentation externe de la clé est 325A16A325127FD42B700D4810E83F6312877B92



La transformation en représentation opérationnelle pour les clés de version 1.2open suit le schéma décrit précédemment.

Vous avez moyen de vérifier auprès de la hotline de la banque si vous utilisez la bonne clé, non pas en leur envoyant la clé que vous utilisez (à ne JAMAIS faire !), mais en envoyant un HMAC sur une chaine précise : le HMAC de contrôle.
Je détaille ce HMAC de contrôle dans la section glossaire.

Les messages


Maintenant que vous avez votre clé dans sa représentation opérationnelle, il ne vous reste plus qu'à calculer les sceaux pour les messages à envoyer et à réceptionner.

Message Phase Aller (version 3.0) :
Il s'agit d'une chaine formée de la concaténation des données relatives au paiement à effectuer :
<TPE>*<date>*<montant>*<reference>*<texte-libre>*<version>*<lgue>*<societe>*<mail>*<nbrech>*<dateech1>*<montantech1>*<dateech2>*<montantech2>*<dateech3>*<montantech3>*<dateech4>*<montantech4>*

Il est très important de respecter scrupuleusement le format de cette chaine, ainsi que le format de chacune des variables la composant.
Si certaines des variables vous sont inutiles (par exemple celles du paiement fractionné), il faut tout de même les mettre dans cette chaine avec une valeur vide et sans occulter le caractère '*' qui les sépare.
Vous pouvez utiliser un outil de calcul de hash pour vérifiez que votre sceau est correct. (voir la section Références utiles).

Message Phase Retour (version 3.0) :
Il s'agit d'une chaine formée de la concaténation des données relatives au résultat du paiement effectuée. Ca vous permet de vous assurer que c'est bien la banque qui vous envoie ce message.
<TPE>*<date>*<montant>*<reference>*<texte-libre>*3.0*<coderetour>*<cvx>*<vld>*<brand>*<status3ds>*<numauto>*<motifrefus>*<originecb>*<bincb>*<hpancb>*<ipclient>*<originetr>*<veres>*<pares>*

Je ne peux que vous renvoyer vers la documentation et vers les exemples d'implémentation pour que vous vous fassiez une idée du fonctionnement de ces échanges. Le but de cet article étant surtout d'expliquer le fonctionnement de la clé.

Glossaire


TPE : Terminal de paiement électronique. C'est un code composé de 7 caractères (Exemple : 1234567) qui sert à l'identification du commerçant en phase aller.
Clé : suite de 40 caractères (tous hexadécimaux en version 3.0) utilisé pour le calcul du sceau
Contrôle HMAC : il s'agit d'un HMAC calculé sur une chaine fixe CtlHmac[version][TPE] (Exemple : CtlHmac3.01234567) et qui vous permet de déterminer avec la hotline de la banque si vous utilisez la bonne clé. A noter qu'il apparait nativement dans les exemples d'implémentation fournis par la banque.

Références utiles


N'hésitez pas à consulter les liens ci-dessous afin d'obtenir des informations complémentaires :
Le site de la solution de paiement :
http://www.cmcicpaiement.fr/fr/index.html

La page de téléchargement (documentations, logos, exemples d'implémentation) :
http://www.cmcicpaiement.fr/fr/installation/telechargements/index.html

Un utilitaire gratuit de calcul de hash (dont HMAC-MD5 et HMAC-SHA1) :
HashCalc de SlavaSoft

Hotline de la banque
centrecom@e-i.com

Commentaires (21)

Commentaire

Ne sera pas affiché, mais uniquement utilisé pour afficher votre éventuel gravatar.

Enregistre dans un cookie vos informations pour ne plus avoir à les resaisir la prochaine fois.

Annuler
Flux RSS Que du sexe, des femmes nues, des hommes nus, des animaux nus, bref le blog le plus intéressant du monde... et un poil de football et d'informatique aussi... mais nus évidemment.
teuh1308510950.jpg

teuh

Voir son profil complet

Archives

2014

2013

2011

2010

2009

2008

2007

2006

2005