FR 2835130 A1 20030725 FR 0200967 A 20020124 message SMS. PROCEDE DE GENERATION ET DE VERIFICATION DE SIGNATURES ELECTRONIQUES L' invention concerne un procédé de génération et de vérification de signatures électroniques de messages électroniques. Le procédé de l' invention s'applique à tout système électronique dans lequel un dispositif émetteur ou signataire envoie une signature électronique à un dispositif récepteur ou vérifieur chargé de vérifier la validité de la signature La signature électronique ou numérique se rapporte généralement à un message électronique qui est envoyé, conjointement avec la signature, au dispositif vérifieur. La signature a alors pour fonction d'authentifier le message et l'identité de son auteur. Le procédé qui va être décrit vient en complément des algorithmes de génération et de vérification de signatures numériques connus, tel que l'algorithme DSA (Digital Signature Algorithm) décrit dans la demande de brevet américain US 07/738431 et annoncé le 30 août 1991 au Registre Fédéral tenu par le US National Institute of Standards and Technology, pages 42980 42982. Afin de mieux comprendre l 'invention, on va rappeler ce qu'est un algorithme DSA. Comme déjà exposé dans la demande de brevet francais publiée sous le n 2 733 378, une signature DSA est constituée par une paire {r, s} de grands nombres représentés par de longues chaînes de chiffres binaires (160 chiffres). La signature numérique est calculée à l' aide d'une série de règles de calcul, définies par l'algorithme, et d'un ensemble de paramètres utilisés dans ces calculs. L'algorithme permet d'une part de générer des signatures, et d'autre part de vérifier des signatures. La génération de signature DSA fait intervenir une clé privée. La vérification fait intervenir une clé publique qui est liée à la clé privée mais qui ne lui est pas identique. Chaque utilisateur possède une paire de clés (privoe, publique). Les clés publiques peuvent être connues de tous, alors que les clés privées ne sont jamais dévoilées. Toute personne a la capacité de vérifier la signature d'un utilisateur en utilisant la clé publique de celui-ci, mais seul le possesseur de la clé privée peut générer une signature correspondant à la paire de clés. Les paramètres de l'algorithme DSA sont les suivants: - un nombre premier p tel que 2-1 1; - un nombre x généré aléatoirement ou pseudo- aléatoirement (c'est la clé privée); - un nombre y défini par la relation y = gx modulo p; (c'est la clé publique); les opérations modulaires définies ci-après, modulo p ou modulo q seront désignés par mod p ou mod q respectivement; - un nombre k généré aléatoirement ou pseudo aléatoirement, tel que O S Les entiers p, q, et g sont des paramètres du système pouvant être publiés et/ou partagés par un groupe dutilisateurs. Les clés, privée et publique, dun signataire sont respectivement x et y. Le paramètre k, aléatoire, doit être régénéré pour chaque nouvelle signature. Les paramètres x et k sont utilisés - pour la génération de signatures et doivent être gardés secrets. Afin de signer un message m (qui sera en général une valeur hachée d'un fichier initial M), le 1S signataire calcule la signature {r, s} par: r = (gk mod p) mod q, et s = (m + xr)/k mod q (o la division par k s'étend modulo q, c'est-à- dire que 1/k est le nombre k' tel que kk' = 1 mod q; par exemple si q - 5 et k = 3, alors 1/k' = 2 car 3x2 = 6, soit 1 mod 5). Après avoir testé que r et s sont différents de zéro, la signature {r, s} est envoyée au vérifieur. Le vérifieur, qui connaît p, q, g (liés à l 'application), y (lié à l'utilisateur), et m (le message qu'il a également requ de l'organe signataire), calcule: w = (l/s) mod q ul = mw mod q u2 = rw mod q v = [gul. yu2 mod p] mod q Or, cette valeur [gul yu2 mod p] mod q est justement égale à r si s a la valeur (m + xr)/s mod q. Par conséquent, le dispositif vérifieur recoit r et s et vérifie que v est bien égal à r pour accepter la signature, ou la rejeter dans le cas contraire. La signature permet à la fois de certifier l'identité du signataire (parce qu'elle fait intervenir une clé privée propre au signataire) et l'intégrité du message signé (parce qu'elle fait intervenir le message lui-même). - Un haut niveau de sécurité n'est garanti que si la clé privée reste secrète vis à vis des tiers. Or, il existe des programmes de type cheval de troie, appelés aussi parfois anti-programmes, qui sous l'apparence de programmes inoffensifs, contiennent en réalité des fonctions illicites cachéss destinées à contourner les mécanismes de sécurité du système informatique de l'organe signataire en vue de pénétrer par effraction dans ses fichiers pour les consulter, les modifier ou les détruire. Ce type de programme est alors capable d'accéder à des données secrètes dans l'organe signataire, par exemple à la clé privée utilisée dans l'algorithme DSA. Un but de l' invention est d' augmenter la sécurité des systèmes utilisant des signatures électroniques. L'idée de l' invention est de s' assurer non seulement de la validité de la signature électronique mais aussi de la manière dont elle a été générée. I1 s'agit de vérifier notamment si la signature a été générée par des moyens habilités par l'autorité contrôlant l'organe vérifieur. Par exemple, dans le cas s d'une transaction électronique, il s'agit de vérifier que la signature électronique attachée à la transaction électronique a été générée par un programme de signature et une machine agréés par l'autorité qui gère s les transactions. Aussi, selon l' invention, l'organe signataire fournit à l'organe vérifieur non seulement une signature électronique mais également un code représentatif du programme et/ou de la machine physique ou virtuelle employés pour générer la signature. La signature et le code sont envoyés à lorgane vérifieur qui vérifie leur validité. L' invention concerne donc un procédé de signature électronique, comportant la génération d'une signature numérique par un organe signataire qui calcule cette signature en fonction d'une donnce secrète, et la vérification de la signature par un organe vérifieur qui vérifie si une condition mathématique est remplie par ladite signature, caractérisé en ce que l'organe signataire calcule en outre, lors de la génération de la signature, un code représentatif du programme et/ou de la machine physique ou virtuelle employés pour générer ladite signature puis le transmet audit organe vérifieur, ledit code 2s généré étant indépendant de la donnée secrète, et en ce que la vérification consiste en outre à vérifier si la signature a été générée à l' aide d'un programme et/ou d'une machine physique ou virtuelle habilités, cette seconde condition étant vérifiée en utilisant ledit code envoyé par l'organe signataire et la signature étant acceptée si cette seconde condition et la condition mathématique sont remplies. Le code constitue un niveau de sécurité supplémentaire permettant de s' assurer que la signature a été générée par des moyens de l'organe signataire habilités par l'organe vérifieur. Selon une caractéristique de l 'invention, la vérification de ladite séconde condition consiste à générer dans l'organe vérifieur, à l' aide d'un programme et/ou d'une machine physique ou virtuelle identiques à ceux de l'organe signataire, une signature non personnalisée établie sur la base d'une donnée quelcouque remplaçant ladite donnée secrète afin d'obtenir le code représentatif du programme et/ou de la machine physique ou virtuelle employés, et à le comparer avec le code transmis par l'organe signataire. La seconde condition est vérifiée si le code ainsi généré par l'organe vérifieur et le code transmis par ltorgane signataire sont identiques. L' invention a également pour objet un programme d'ordinateur de génération et de vérification de signature électronique destiné à la mise en _uvre des étapes du procédé décrit précédemment dans un ordinateur. 2s Enfin, l 'invention a pour objet tout support d'enregistrement, tel que disquette, disque CD-ROM ou mémoire, comprenant ledit programme d'ordinateur. D'autres caractéristiques et avantages de l 'invention apparaîtront à la lecture de la description détaillée qui suit et qui est en rétérence à la figure 1, unique, qui représente un organigramme du procédé de l' invention dans le cas d'une génération et d'une vérification de signature conformes à l'algorithme DSA décrit précédemment. Selon l' invention, il est prévu que l'organe signataire délivre en plus de la signature numérique un code, noté ci-après CS, caractérisant le programme et la machine employés pour générer la signature. Le programme de signature est exécuté dans une machine physique, par exemple de type PC ou Macintosh=, ou une machine virtuelle, par exemple du type de celle employée dans les plate-formes JAVA_. Génération du code CS - Selon l' invention, le code CS est généré sur la base des instructions du programme de génération de signature, par exemple sur la base du code machine des instructions de ce programme. Bien entendu, pour éviter tout risque de divulgation de données secrètes (par exemple, la clé privée) contenues dans le programme, il est prévu de ne sélectionner que des instructions ne faisant pas intervenir ces données secrètes. 2s En pratique, au moment de l'exécution d'une instruction du programme de signature, on la teste pour savoir si elle contient des donnses secrètes puis, si ce nest pas le cas, on mémorise son code machine ou une partie de celui-ci dans une mémoire non volatile de ltorgane signataire. Des critères complémentaires peuvent être prévus pour déterminer les instructions à stocker dans la mémoire non volatile. On teste ainsi toutes les instructions du programme pour mémoriser, dans la mémoire non volatile S de l'organe signataire, les codes machine dinstructions ne comportant pas de données secrètes. On traite ensuite ces codes. machine pour former un code CS représentatif du programme et de la machine employés pour générer la signature électronique. De préférence, on effectue une opération de hachage sur les codes machine enregistrés. L'opération de hachage est réalisée au moyen d'une fonction de hachage. On rappelle qu'une fonction de hachage d'un nombre, représenté par une chaîne de bits, consiste en la production d'une nouvelle chaîne de bits de longueur déterminée, longueur différente ou non de la chaîne de départ, à partir de fonctions logiques exécutées sur - des groupes de bits de la chaîne de départ. Les fonctions de hachage les plus connues sont la fonction SHA et la fonction MD4. Le code obtenu à la fin de l'opération de hachage est le code CS qui sera envoyé à l'organe vérifieur. L'opération de hachage permet non seulement de crypter le code des instructions mémorisées mais également de choisir la longueur du code en fin d'opération. Par ailleurs, à l'instar d'une empreinte digitale, le code obtenu à l 'issue de l'opération de hachage est fonction du contenu des instructions et de leurs positions dans la mémoire non volatile de l'organe signataire. En variante, on peut choisir de traiter différemment les codes machine enregistrés dans la mémoire non volatile de l'organe signataire. On peut par exemple les combiner ensemble par une opération logique de type OU EXCLUSIF. Dans cette variante, chaque code machine est combiné avec le contenu d'un registre de l'organe signataire par une opération de type OU EXCLUSIF et après chaque opération, le résultat est enregistré dans le registre. Le registre est initialisé avant le début de la première opération OU EXCLUSIF. I1 est initialisé soit à zéro, soit à une valeur particulière, par exemple le numéro d' identification du processeur de la machine sur lequel tourne le programme de signature. Le code CS est le code présent dans le registre lorsque tous les codes machine de la mémoire volatile de l'organe signataire ont été traités par l'opération OU EXCLUSIF. Ces deux modes de génération du code CS (par une fonction de hachage ou une opération OU EXCLUSIF) ne sont donnés qu'à titre dexemple. Bien entendu, tous les traitements permettant de générer un code CS à partir des instructions du programme de signature sont applicables au procédé de l'invention. Le code CS généré par l'organe signataire est envoyé à l'organe vérifieur conjointement avec la signature numérique. I1 est par exemple concaténé à la signature. En variante, on peut directement intégrer le code CS dans la signature électronique. VERIFICATION DU CODE CS L'organe vérifieur reçoit le code CS et la signature électronique après avoir reçu préalablement le message électronique. Dans le cas de lalgorithme DSA, 1' organe vérifieur va alors calculer la valeur v à l' aide de la clé publique et vérifier que v est égale à r. Selon une caractéristique importante de linvention, il doit également vérifier une seconde condition visant à s' assurer que la signature a été générée par des moyens habilités par l'organe vérifieur. Cette seconde condition constitue une sécurité supplémentaire pour le signataire et pour le vérifieur. Si les deux conditions sont vérifiées, la signature sera acceptée. La deuxième condition consiste à vérifier que le code CS généré par lorgane signataire est celui attendu par l'organe vérifieur. Pour réaliser cette vérification, on génère dans l'organe vérifieur, à l' aide d'un programme et dune machine physique ou virtuelle identiques à ceux de l'organe signataire, une signature non personnalisée établie sur la base d'une donnée quelconque remplagant la donnée secrète car lorgane vérifieur ne connaît pas la donnée secrète. Un code CS' est généré à partir d' instructions du programme générant la signature non personnalisée comme dans l'organe signataire. Les instructions retenues pour générer le code CS' sont sélectionnées selon les mêmes critères que dans l'organe signataire. Au final, les instructions sélectionnées par l'organe vérifieur doivent être les mêmes que celles sélectionnées par l'organe signataire. Le code machine des instructions sélectionnées subit ensuite le même traitement logique (opération OU EXCLUSIF ou fonction de hachage) que celui mis en _uvre dans l'organe signataire pour générer le code CS. Le code CS' ainsi généré est ensuite comparé au code CS. Si les codes CS et CS' sont différents, c'est que l'opération de génération de la signature ne s'est pas déroulée correctement dans l'organe qui a émis la signature (c 'est-à-dire qu'elle ne s'est pas déroulée comme il est prévu dans l'organe vérifieur) et la signature est rejetée même si son authenticité est confirmée par l'organe vérifieur. Par contre, si les deux conditions sont remplies (v=r et CS'=CS), la signature est acceptée. La figure 1 montre l'organigramme du procédé de l' invention dans le cas d'une génération et d'une vérification de signatures électroniques selon un algorithme DSA correspondant à celui exposé dans le préambule de la présente demande. L'organe signataire dispose des paramètres p, q et g, de la clé secrète x, d'une fonction de hachage F et du message m. I1 calcule d'abord la signature {r,s} puis le code CS par application de la fonction de hachage F sur la chaîne de bits formée par certaines instructions du programme de signature. La signature {r,s} et le code CS sont transmis à l'organe vérifieur. L'organe vérifieur qui connaît les paramètres p, q et g, la clé publique y, la fonction de hachage F et le message m calcule alors v et vérifie si v est égale à r. Selon l'invention, il génère également une nouvelle signature {r',s'} sur la base d'une donnée quelcouque x' de même longueur que la clé secrète x à l' aide d'un programme de signature identique à celui de l'organe -- signataire. Ce programme est mis en _uvre sur une machine physique ou virtuelle identique à celle de lorgane signataire. Un code CS' est ensuite généré sur la base d' instructions du programme de signature répondant aux mêmes critères que ceux utilisés dans l'organe signataire. On vérifie ensuite que CS'=CS. Si les deux conditions, à savoir v=r et CS'=CS, ne sont pas vérifiées, la signature {r,s} est refusée par l'organe vérifieur. L' invention est applicable à tout type de système électronique dans lequel un organe signataire envoie une signature électronique à un organe vérifieur chargé 1S de vérifier la validité de la signature. L'organe signataire peut être par exemple une carte à puce à microprocesseur et l'organe vérifieur un terminal de lecture de la carte. REVENDICATIOWS l) Procédé de signature électronique, comportant la génération d'une signature numérique par un organe signataire qui calcule cette signature en fonction d'une donnée secrète, et la vérification de la signature par un organe vérifieur qui vérifie si une condition mathématique est remplie par ladite signature, caractérisé en ce que l'organe signataire calcule en -outre, lors de la génération de la signature, un code représentatif du programme et/ou de la machine physique ou virtuelle employés pour générer ladite signature puis le transmet audit organe vérifieur, ledit code généré étant indépendant de la donnée secrète, et en ce que la vérification consiste en outre à vérifier si la signature a été générée à l' aide d'un programme et/ou d'une machine physique ou virtuelle habilités, cette seconde condition étant vérifiée en utilisant ledit code envoyé par l'organe signataire et la signature étant acceptée si cette seconde condition et la condition mathématique sont remplies. 2) Procédé selon la revendication l, caractérisé en ce que la vérification de ladite seconde condition consiste à générer dans ledit organe vérifieur, à l' aide d'un programme et/ou d'une machine physique ou virtuelle identiques à ceux dudit organe signataire, une signature non personnalisée établie sur la base d'une donnée quelcouque remplagant ladite donnée secrète afin d'obtenir le code représentatif du programme et/ou de la machine physique ou virtuelle employés, et à le comparer avec le code transmis par l'organe signataire, la seconde condition étant vérifiée si le code ainsi généré par l'organe vérifieur et le code transmis par l'organe signataire sont identiques. 3) Procédé selon la revendication 2, caractérisé en ce que ledit code représentatif du programme et/ou de la machine physique ou virtuelle emplayés pour générer la signature est généré dans l'organe signataire et dans l'organe vérifieur sur la base d' instructions exécutées par le programme de génération de la signature, lesdits codes d' instruction étant indépendants de ladite donnée secrète ou de ladite donnse quelconque. 4) Procédé selon la revendication 3, caractérisé en ce que, pour générer le code représentatif du programme et/ou de la machine physique ou virtuelle, on sélectionne des instructions du programme de génération de la signature qui sont indépendantes de la donnée secrète ou de la donnée quelcouque, et on combine les codes des instructions sélectionnées entre eux par une opération de type OU EXCLUSIF. ) Procédé selon la revendication 3, caractérisé en ce que, pour générer le code représentatif du programme et/ou de la machine physique ou virtuelle, on sélectionne des instructions du programme de génération de la signature qui sont indépendantes de la donnée secrète ou de la donnée quelconque, et on réalise une opération de hachage sur les codes des instructions sélectionnées. 6) Procédé selon lune des revendications 1 à 5, caractérisé en ce que le code représentatif du programme et/ou de la machine physique ou virtuelle généré par l'organe signataire est concaténé à la signature et est transmis simultanément avec celle-ci. 7) Procédé selon l'une des revendications 1 à 5, : caractérisé en ce que le code représentatif du programme et/ou de la machine physique ou virtuelle est intégré dans la signature électronique.