Introduction | Signature Paybox | Vérification de la signature | Tests | Encodage | Signature non vérifiée
Introduction :
Pour se familiariser avec les notions de base en cryptographie, vous pouvez consulter le document PbxCryptoDoc.pdf
Signature Paybox :
La signature Paybox est produite en chiffrant un condensé SHA-1 avec une clé privée RSA.
La taille d'une empreinte SHA-1 étant de 160 bits et la clé Paybox faisant 1024 bits de long, la signature est toujours une valeur binaire de taille [fixe] 128 octets
(172 octets en Base64).
Vérification de la signature :
De part sa nature, la signature Paybox peut se vérifier directement dans les langages les plus répandus sur le web.
Par exemple en PHP, il suffit d'utiliser la fonction 'openssl_verify()' et en Java, la methode verify() en précisant "SHA1withRSA".
A cet effet, vous pouvez consulter les exemples joints.
On peut aussi utiliser d'autres langages, packages, composants ou utilitaires, qui peuvent demander de prendre en charge les opérations intermédiaires (condensé ou chiffrement).
Dans tous les cas, il faut utiliser la clé publique Paybox, disponible en téléchargement.
Tests :
La facon la plus souple de tester un programme de vérification de signature dans votre environnement,
est d'utiliser une paire de clé RSA de test.
Vous serez ainsi en mesure de signer vous-même des messages dont vous pourrez vérifier la signature.
Ensuite, il suffira de substituer la clé publique de test par la clé publique Paybox.
exemple avec OpenSSL (http://www.openssl.org/docs/apps/openssl.html) :
pour générer une clé privée RSA et en extraire la clé publique
openssl genrsa -out prvkey.pem 1024
openssl rsa -in prvkey.pem -pubout -out pubkey.pem
signature :
openssl dgst -sha1 -binary -sign prvkey.pem -out sig.bin data.txt
openssl base64 -in sig.bin -out sig64.txt
rm sig.bin
verification :
openssl base64 -d -in sig64.txt -out sig.bin
openssl dgst -sha1 -binary -verify pubkey.pem -signature sig.bin data.txt
Encodage :
Les messages et signatures transportés au moyen du protocoles HTTP (GET ou POST) doivent être sur-encodés (URL encodage et/ou Base64).
De ce fait il faut procéder aux opérations inverses avant de vérifier la signature :
1) détacher la signature du message,
2) URL décoder la signature,
3) décodage Base64 de la signature,
4) vérification de la signature [binaire] sur les données (toujours encodées)
Données signées :
a) lors de la réponse Paybox de serveur à serveur (URL direct), seules les informations demandées dans la variable PBX_RETOUR sont signées,
b) dans les 3 autres cas (redirection via le navigateur du client, PBX_EFFECTUE, PBX_REFUSE et PBX_ANNULE ),
ce sont toutes les données suivant le ' ? ' (les parametres URL).
ex.: http:// www.moncommerce.com /mondir/moncgi.php ? monparam=mavaleur& pbxparam1=val1&pbxparam2=val2 ... &sign=df123dsfd3...1f1ffsre%20t321rt1t3e=
la signature (df123dsfd3...1f1ffsre%20t321rt1t3e=) porte sur la partie :
cas a) pbxparam1=val1&pbxparam2=val2 ...
cas b) monparam=mavaleur& pbxparam1=val1&pbxparam2=val2 ...
Rappel : si la signature n'est pas la dernière valeur demandée dans la liste PBX_RETOUR, les valeurs suivantes seront retournées, mais pas signées.
Signature non vérifiée :
Si une signature ne peut être vérifiée, alors les cas suivants doivent être envisagés :
- erreur technique : bogue, environnement cryptographique mal initialisé ou mal configuré, ...
- utilisation d'une clé érronée,
- données altérées ou signature contrefaite.
Le dernier cas est peu probable, mais grave. Il doit conduire à la recherche d'une intrusion dans les systèmes d'informations impliqués.
Introduction | Signature Paybox | Vérification de la signature | Tests | Encodage | Signature non vérifiée