FR 3066845 A1 20181130 FR 1754636 A 20170524 1 Procédé de signature électronique d'un document avec une clé secrète prédéterminée DOMAINE TECHNIQUE GENERAL La présente invention concerne le domaine de la cryptographie, et en particulier un procédé de signature de type « boite blanche ». ETAT DE L'ART Une fonction est considérée comme une « boîte noire » lorsqu'on ne peut pas accéder à son fonctionnement interne, i.e. qu'on peut connaître ses entrées et ses sorties mais pas ses paramètres secrets ou ses états intermédiaire. Les algorithmes cryptographiques (par exemple pour du chiffrement ou de la signature) sont ainsi classiquement supposés des boites noires lorsqu'on évalue leur fiabilité (résistance aux attaques). L'hypothèse de boite noire impose une contrainte forte sur le stockage et la manipulation de ces paramètres. Cependant des outils ont été récemment publiés pour permettre l'automatisation d'attaques sur implémentation matérielle, attaques dites par canaux auxiliaires ou par fautes. Aujourd'hui, pour de nombreux cas d'usages incluant le paiement sur mobile, il est nécessaire de déployer des algorithmes cryptographiques en faisant le moins d'hypothèses possibles sur la sécurité du matériel cible. Le stockage et la manipulation sécurisés des paramètres secrets doivent alors être assurés au niveau applicatif. La cryptographie dite boite blanche vise à répondre à ce défi en proposant des implémentations des algorithmes cryptographiques qui sont sensés rendre l'extraction des secrets impossible, même en cas d'attaque permettant à l'attaquant un accès complet à l'implémentation logicielle de l'algorithme. Plus précisément, une fonction est considérée comme une « boîte blanche » lorsque ses mécanismes sont visibles et permettent d'en comprendre le fonctionnement. En d'autres termes, on fait directement l'hypothèse que l'attaquant a accès à tout ce qu'il souhaite (le binaire est complètement visible et modifiable par l'attaquant 3066 845 2 et celui-ci a le plein contrôle de la plateforme d'exécution). Par conséquent, l'implémentation elle-même est la seule ligne de défense. On parle alors « d'implémentation blanchie » d'un calcul élémentaire de l'algorithme lorsqu'on arrive à représenter ce calcul sous une forme sécurisée évitant d'avoir les clés 5 utilisées en clair, par exemple en représentant le calcul par une table stockée en mémoire. Il a par exemple été proposé dans la demande US2016/328543 une méthode visant à cacher les entrées et les sorties d'une fonction d'exponentiation modulaire, ce qui permet d'améliorer la sécurité d'algorithmes cryptographiques 10 tels que RSA (« Rivest, Shamir, Adleman »). Toutefois, il a été montré que cette méthode n'était pas suffisante pour assurer une protection satisfaisante de l'algorithme de signature DSA (« Digital Signature Algorithm »). 15 Le calcul d'une signature DSA présuppose qu'une clef publique (p, q, g, y) et une clef privée x ont été associées à l'utilisateur. Le procédé de génération de ces clefs se compose des différentes étapes suivantes : - Choisir un nombre premier p de longueur L telle que 512 1024, et L est divisible par 64 20 - Choisir un nombre premier q de 160 bits, de telle façon que p - 1 = qc, avec c un entier - Choisir h, avec 1 1 - Générer aléatoirement un x, avec 0 zg-K mod a ; - ladite première opération d'arithmétique modulaire est zi-> (gZ mod p) mod q, 20 où g et p sont des constantes ; - ladite somme modulaire avec la constante prédéterminée est zi-> k + K mod p ; - la signature est le couple des premier et deuxième états internes ; - la première opération d'arithmétique modulaire est mise en oeuvre en clair par 25 les moyens de traitement de données de l'équipement ; - ledit produit modulaire avec une exponentiation de la constante prédéterminée est mise en oeuvre par application d'une troisième implémentation blanchie stockée sur les moyens de stockage de données de l'équipement ; - le procédé comprend en outre des étapes de : 30 (a') détermination d'un troisième état interne par application à un condensat du document obtenu par une fonction de hachage donnée d'une quatrième implémentation blanchie de : 3066845 5 - la génération du nonce principal et d'un nonce auxiliaire à partir dudit condensat ; puis - le produit modulaire du nonce principal et du nonce auxiliaire ; ladite quatrième implémentation blanchie étant stockée sur les moyens 5 de stockage de données de l'équipement ; (b') détermination d'un quatrième état interne par inversion modulaire du troisième état interne ; - les étapes (a') et (b') sont mises en oeuvre antérieurement à l'étape (c), ladite deuxième implémentation blanchie implémentant également : 10 - la génération du nonce auxiliaire à partir dudit condensat ; et - le produit modulaire du quatrième état interne et du nonce auxiliaire de sorte à obtenir la valeur de l'inverse modulaire du nonce principal ; - l'étape (b') est mise en oeuvre en clair par les moyens de traitement de 15 données de l'équipement ; - ladite deuxième implémentation blanchie implémente également le produit modulaire du nonce auxiliaire et de ladite valeur de l'inverse modulaire du nonce principal pour vérification. - Le procédé comprend une étape préalable (a0) de génération desdites 20 implémentations blanchies par des moyens de traitement de données d'un serveur, et leur transmission à l'équipement. - l'étape (a0) comprend la génération préalable des constantes p, q, g conformément à l'algorithme DSA ; - l'étape (a0) comprend également la génération préalable de la clé secrète et 25 d'une clé publique associée en fonction des constantes p, q, g ; - lesdites implémentations blanchies utilisent un Système de Représentation Modulaire, RNS, pour effectuer ladite opération d'arithmétique modulaire ; - le procédé comprend une étape subséquente (d) d'association par les moyens de traitement de données de l'équipement de la signature électronique générée au 30 document de sorte à former le document signé. Selon un deuxième et un troisième aspect, l'invention propose un produit programme d'ordinateur comprenant des instructions de code pour l'exécution 3066845 6 d'un procédé selon le premier aspect de signature électronique d'un document avec une clé secrète prédéterminée ; et un moyen de stockage lisible par un équipement informatique sur lequel un produit programme d'ordinateur comprend des instructions de code pour l'exécution d'un procédé selon le premier aspect de 5 signature électronique d'un document avec une clé secrète prédéterminée. PRESENTATION DES FIGURES D'autres caractéristiques et avantages de la présente invention apparaîtront 10 à la lecture de la description qui va suivre d'un mode de réalisation préférentiel. Cette description sera donnée en référence aux dessins annexés dans lesquels : - la figure 1 est un schéma d'une architecture pour la mise en oeuvre du procédé selon l'invention. 15 DESCRIPTION DETAILLEE Architecture En référence à la figure 1, est proposé un procédé de signature « boite 20 blanche » d'un document mis en oeuvre au sein d'un équipement 10a tel qu'un terminal mobile (smartphone, tablette tactile, etc.), i.e. un équipement ne disposant pas particulièrement d'un matériel sécurisé et qui peut faire l'objet d'attaques sur implémentation matérielle, et pour lequel l'approche boite blanche prend tout son intérêt. 25 L'équipement 10a comprend des moyens de traitement de données lia (un processeur) et des moyens de stockage de données 12a (une mémoire, par exemple flash). L'équipement 10a est par exemple relié à un serveur 10b par exemple via le réseau internet 20. Il peut être amené à recevoir depuis ce serveur 10b (par 30 exemple celui d'un fournisseur de solutions de sécurité) des objets cryptographiques (qu'on décrira plus loin) contenant des secrets qui vont être stockées dans la mémoire 12a et utilisées pour la mise en oeuvre du présent procédé 3066845 7 L'équipement 10a peut lui-même être connecté à d'autres serveurs 10c de tiers auxquels il pourra transmettre le document signé une fois qu'il aura généré la signature électronique. 5 Procédé de signature Le présent procédé est bien un procédé de « génération de signature électronique de document », et non « de signature d'un document ». Cela signifie qu'il permet seulement d'obtenir la signature électronique du document et pas 10 encore le « document signé », i.e. l'association du document original et de la signature, généralement dans un conteneur quelconque. Par « signature électronique » d'un document, on entend la définition classique de ce terme, à savoir une primitive cryptographique permettant d'identifier le signataire et garantissant que le document n'a pas été altéré depuis 15 l'instant où la signature a été produite et est bien le document original (dans la suite de la présente description, on désignera comme « original » le document dont est réellement issu le condensat). Cet objet cryptographique consiste généralement en un chiffré du condensat du document grâce à une fonction de chiffrement asymétrique : le signataire utilise une clé privée, et tout le monde peut 20 vérifier la signature grâce à une clé publique (en comparant le condensat contenu dans la signature et un condensat recalculé). On comprendra que le présent procédé est une nouvelle implémentation d'algorithmes connus utilisant des opérations d'arithmétique modulaire (i.e. des opérations comprenant des calculs de modulo, notamment des exponentiations 25 modulaires), en particulier DSA qui est un standard actuel et dont on prendra l'exemple dans la suite de la description. Plus précisément, il ne propose pas une nouvelle stratégie de signature, mais seulement une nouvelle façon de manipuler les données au sein de l'algorithme qui soit résistante à toutes les attaques matérielles en « boite blanche ». 30 Le document est associé à un condensat obtenu par une fonction de hachage donnée. 3066845 8 Comme expliqué, une fonction de hachage prend en entrée un message de taille arbitraire (le document original) et produit un condensat de taille fixe associé à ce message. Ici, ladite fonction de hachage donnée est avantageusement une fonction dite cryptographique, c'est-à-dire avec des propriétés supplémentaires : le 5 condensat est statistiquement bien réparti dans l'ensemble des valeurs d'arrivées, il est impossible en temps raisonnable de trouver deux messages qui ont le même condensat (résistance aux collisions) et on ne peut pas à partir du condensat retrouver un message qui a permis d'obtenir cette valeur (résistance au calcul de pré-image). 10 On prendra l'exemple des fonctions de la famille SHA (« Secure Flash Algorithm »), standardisées par le NIST (« National Institute of Standards and Technology »), en particulier les sous-familles SHA-1 ou SHA-2 (notamment SHA256). 15 Principe Dans la demande FR1751894, il a été proposé, pour une même paire de clés publique/privée, de faire précalculer plusieurs valeurs d'un premier état interne si chacune pour un nonce ki, puis une implémentation blanchie WBi d'une 20 opération d'arithmétique modulaire utilisée par l'algorithme de signature pour chacun des nonces ki, ladite opération d'arithmétique modulaire étant en effet fonction du premier état interne si, du nonce ki et de la clé secrète x. On rappelle que par implémentation blanchie, ou « white box implementation », d'une opération, on entend une représentation de l'opération qui ne permette pas de 25 remonter aux états internes ou aux paramètres lorsque l'opération est exécutée (par application de l'implémentation blanchie aux données d'entrée). Ainsi, un ensemble de couples {(si, WBi)} E[[0,n-11 du premier état interne SI et de l'implémentation blanchie WBi de l'opération d'arithmétique modulaire sont prédéfinis et stockés sur les stocké sur les moyens de stockage de données 12a 30 de l'équipement 10a. En d'autres termes, à clés publique/privée fixée, chaque couple (s1,WBi) est entièrement déterminé par le nonce ki : tirer un nonce équivaut à tirer un 3066845 9 couple. Le nonce k, n'est donc pas une donnée d'entrée de l'implémentation blanchie WB, mais bien un paramètre « encapsulé » auquel un attaquant ne peut pas remonter. 5 Cette solution apporte entière satisfaction car les propriétés attendues du blanchiment d'application font que l'observation de l'exécution de l'implémentation blanchie WB, ne permet pas de retrouver les valeurs de la clef secrète x et du nonce ki enfouies dans le calcul. Cependant, la sécurité contre les restart attacks n'est complète que si l'on 10 s'assure que les k, sont bien à usage unique. Pour cela il faut prévoir de : - n'autoriser l'utilisation de chaque WB, qu'une seule fois pour empêcher de remonter à ki ; - supprimer des moyens de stockage de données 12a les implémentations blanchies WB, après utilisation. 15 Or cela pourrait s'avérer malgré tout contournable si un attaquant avait non seulement accès à chaque état interne, mais également au contenu de la mémoire. Un attaquant pourrait alors extraire un des WB, et le réinjecter plusieurs fois dans la mémoire de sorte à ce qu'il soit en plusieurs exemplaires, ce qui permettrait indirectement sa réutilisation et alors une possibilité de remonter à ki . 20 Le présent procédé permet d'offrir tous les avantages de ce premier procédé (protection boite blanche complète) tout en éliminant toute possibilité d'attaque mémoire. Pour cela il propose d'utiliser non pas une pluralité de nonces k, 25 précalculés, mais au contraire une fonction de calcul à la volée d'un nonce k (qui sera dit « nonce principal » dans la suite de la description) à partir du condensat du message, et d'utiliser pour une même paire de clés publique/privée, une première implémentation blanchie W/30 de : - la génération du nonce principal k à partir dudit condensat ; puis 30 - une somme modulaire (i.e. une somme sur le résultat de laquelle un modulo est appliquée) du nonce principal k et d'une constante prédéterminée K (enfouie dans l'implémentation blanchie). 3066845 10 En effet il ne faut pas que le nonce principal k apparaisse en clair, c'est pourquoi il faut le combiner avec la constante prédéterminée K de sorte à obtenir un état interne « initial » So. Comme l'on va montrer, il apparait alors possible de calculer efficacement 5 le premier état interne s1 à partir de cet état interne initial so par une première opération d'arithmétique modulaire utilisée par l'algorithme de signature, suivie d'un produit modulaire (i.e. un produit sur le résultat duquel un modulo est appliqué) avec une exponentiation de la constante prédéterminée K (ce qui permettra comme l'on montrera de supprimer la contribution de la constante 10 prédéterminée K et d'obtenir la valeur que l'on aurait eu en appliquant directement ladite opération d'arithmétique modulaire utilisée par l'algorithme de signature au nonce principal k « tel quel », sans que celui ait eu besoin d'être révélé). Comme l'on verra, une implémentation tout ou moins partiellement blanchie (la troisième implémentation blanchie notée W/3,1) de ce calcul est souhaitable (on 15 verra divers modes de réalisation) a minima pour conserver secrète la constante prédéterminée K (enfouie). Ensuite, on peut calculer le deuxième état interne s2 à partir du premier état interne s1 en utilisant sur le condensat une opération d'arithmétique modulaire utilisée par l'algorithme de signature, fonction du premier état interne s1, du nonce 20 principal k et de la clé secrète x. Ici, on peut éviter de communiquer le nonce principal k en le recalculant indépendamment à partir du condensat. Pour cela est appliqué audit condensat une deuxième implémentation blanchie W/3,2 de : 25 - la génération (à nouveau) du nonce principal k à partir dudit condensat (par la même fonction bien entendu) ; et - la deuxième opération d'arithmétique modulaire ; On rappelle que par implémentation blanchie, ou « white box implementation », d'une opération/ensemble d'opérations, on entend une 30 représentation de l'opération/ensemble d'opérations qui ne permette pas de remonter aux états internes ou aux paramètres lorsqu'elle est exécutée (par application de l'implémentation blanchie aux données d'entrée). Les paramètres internes sont dits enfouis. 3066845 11 Ainsi, les implémentations blanchies WBo, W/3,1, W/3,2 (ainsi que potentiellement une autre comme l'on verra) sont prédéfinies et stockées sur les moyens de stockage de données 12a de l'équipement 10a. En d'autres termes, à clés publique/privée fixée, on n'a plus des couples 5 (si, WB,) entièrement déterminés par des nonces k, (le nonce k, n'est pas une donnée d'entrée de l'implémentation blanchie WB, mais un paramètre enfoui), mais une combinaison d'une implémentation blanchie WBo dédiée à générer et cacher un nonce principal k associé de façon unique à un message (il est ainsi impossible d'avoir deux messages conduisant au même nonce principal k) et 10 d'une ou plusieurs implémentations blanchies des fonctions de calcul des états internes sl et s2 cachant l'opération d'arithmétique modulaire, modifiées de sorte à tenir compte du fait que le nonce est caché. De façon préférée, lesdites implémentations blanchies WBo, W/3,1, W/3,2 (et 15 autres) sont générées par les moyens de traitement de données 11 b du serveur 1 b et sont transmises pour stockage à l'équipement 10a dans une étape préalable (a0). Les propriétés attendues du blanchiment d'application font que l'observation de l'exécution des implémentations blanchies WBo, W/3,1, W/3,2 ne doivent pas 20 permettre de retrouver les valeurs de la clef secrète x, du nonce k, et de la constante K enfouies dans le calcul. Mode de réalisation préféré 25 Dans l'exemple où l'algorithme de signature est conforme à DSA, alors sl peut être égal à (g" mod p)mod q, où g,p et q sont des constantes (en particulier des nombres premiers pour p et q). Cela signifie que ladite première opération d'arithmétique modulaire est avantageusement z 1-> (gz mod p) mod q, où g et p sont des constantes. 30 Similairement, ladite deuxième opération d'arithmétique modulaire représentée par la deuxième implémentation blanchie W/3,2 peut comprendre l'inversion modulaire du nonce principal k (i.e. utiliser k-1 calculé à partir de k), et notamment être zi-> (z + six)k-1 mod q. On peut facilement vérifier que ce calcul 3066845 12 correspond à celui du s2 associé à s1, pour une valeur de condensat z du message. A ce titre, ladite somme modulaire avec la constante prédéterminée K est avantageusement z 1-> k+Kmodp, et ledit produit modulaire avec une 5 exponentiation de la constante prédéterminée K qui suit la première opération d'arithmétique modulaire est avantageusement z 1-> z - 9-K mod q. De façon générale, on pourra retenir que dans un contexte DSA les « sommes (ou additions) modulaire » sont des sommes de termes modulo p, et les « produits (ou multiplications) modulaire » sont des produits de termes modulo 10 a. En appliquant toutes les formules proposées ci-dessus, on a pour un condensat z = H(m) : - so = k(H(m)) + K mod p ; 15 - En appliquant la première opération on obtient donc l'état interne Stem = \ ( Ic(11(m))+K mod p)mod q = 91( gic(H070) mod p mod q; - D'où s1= - s temp 9-K mod q = gk(1-10-0) mod p mod q ; - Et enfin s2 = (H(m) + s1x)k(H(m))-1 mod q. Les valeurs p, q, g sont préférentiellement prédéterminés conformément à 20 l'algorithme DSA, en particulier par les moyens de traitement de données 11 b du serveur 10b lors de l'étape préalable (a0). On rappelle que dans DSA, (p, q, g, y) forme une clé publique générée avec une clef privée x de la façon suivante : - Choisir un nombre premier p de longueur L telle que 512 1024, 25 et L est divisible par 64 - Choisir un nombre premier q de 160 bits, de telle façon que p - 1 = qc, avec c un entier - Choisir h, avec 1 1 - Générer aléatoirement un x, avec 0 k qui permet la génération du nonce principal k, elle utilise avantageusement un secret sk qui lui est associé de 5 manière uniquement, et utilise préférentiellement un algorithme de chiffrement, en particulier Triple DES. Cette fonction (et le secret) sont partagés entre toutes les implémentations blanchies ayant besoin de retrouver le nonce k. Comme l'on verra, un éventuel nonce auxiliaire k' peut être obtenu exactement de la même façon, en utilisant un secret différent sk'. 10 Mise en oeuvre Le présent procédé est mis en oeuvre par les moyens de traitement de données 11a de l'équipement 10a et commence par une étape (a) de 15 détermination de l'état interne initial so par application à un condensat H(m) du document m (obtenu par une fonction de hachage donnée, telle que SHA256) de l'implémentation blanchie W/30 stockée sur les moyens de stockage de données 12a de l'équipement 10a de : - la génération du nonce principal k à partir dudit condensat 20 H(m) ; puis - une somme modulaire du nonce principal k et de la constante prédéterminée K ; La première implémentation blanchie W/30 a pour seule entrée le condensat H(m) et pour sortie so le résultat de la somme modulaire. 25 Dans une étape (b) est déterminé le premier état interne s1 par application à l'état interne initial so de la première opération d'arithmétique modulaire, puis du produit modulaire avec une exponentiation (g-K) de la constante prédéterminée K. Comme expliqué, cette étape (b) peut faire l'objet de plusieurs modes de réalisation. 30 Dans un premier mode, l'ensemble du calcul (application à l'état interne initial so de la première opération d'arithmétique modulaire, puis du produit modulaire avec une exponentiation de la constante prédéterminée K) fait l'objet d'une troisième implémentation blanchie W/3,1. Toutefois, dans la mesure où la 3066845 14 première opération d'arithmétique modulaire est typiquement une exponentiation doublement modulaire (modulo p puis q), la mise en oeuvre est longue est complexe. Ainsi, alternativement on peut se permettre le passage comme expliqué 5 avant par un état interne intermédiaire Stemp (tel que Stemp est déterminé par application à l'état interne initial so de la seule première opération d'arithmétique modulaire, et s1 est déterminé par application à l'état interne intermédiaire stem, du seul produit modulaire avec l'exponentiation de la constante prédéterminée K), dans la mesure où cet état interne n'apporte aucune information sensible puisque 10 le nonce k est caché par K. De façon préférée, l'optionnelle troisième implémentation blanchie W/3,1 n'implémente que le produit modulaire avec l'exponentiation de la constante prédéterminée K. En d'autres termes la première opération d'arithmétique modulaire est mise en oeuvre en clair (i.e. de façon non sécurisée) par les moyens 15 de traitement de données 11a de l'équipement 10a puisque c'est la moins sensible et celle qui est la plus complexe. La troisième implémentation blanchie W/3,1 a alors pour seule entrée l'état interne intermédiaire stem, et pour sortie s1 le résultat du produit modulaire. Elle est très légère, car l'exponentiation de la constante prédéterminée K (et le cas 20 échant son modulo) peut-être précalculée et directement enfouie. Ensuite, dans une troisième étape (c) est déterminé le deuxième état interne s2 par application audit condensat H(m) de la deuxième implémentation blanchie W/3,2 stockée sur les moyens de stockage de données 12a de 25 l'équipement de : - la « re-génération » du nonce principal k à partir dudit condensat (on comprend qu'on met en oeuvre la même fonction que dans la première implémentation blanchie WBo, en d'autres termes qu'elle enfouit le même secret sk) ; et 30 - la deuxième opération modulaire fonction du premier état interne du nonce principal k et de la clé secrète x (enfouie) ; 3066845 15 La deuxième implémentation blanchie W/3,2 a pour entrées le condensat H(m) et le premier état interne s1 (et comme l'on verra plus loin éventuellement un quatrième état interne s4), et pour sortie s2 le résultat de la deuxième opération d'arithmétique modulaire. 5 A partir de là, dans une quatrième étape (c) peut être générée la signature électronique du document à partir du premier état interne sl du couple tiré et du deuxième état interne s2 déterminé à l'étape (b). Dans l'exemple préféré de DSA, la signature est simplement (s1, s2). Additionnellement, le procédé peut comprendre une étape subséquente (d) 10 d'association par les moyens de traitement de données 11a de l'équipement 10a de la signature électronique au document de sorte à former le document signé. L'équipement 10a peut alors se prévaloir juridiquement de cette signature électronique auprès d'autres entités (serveurs 10c). 15 De façon préférée, lorsqu'on délègue ainsi à l'équipement 10a la mise en oeuvre de la première application d'arithmétique modulaire, il est intéressant de pouvoir prouver que l'état interne intermédiaire stem, n'a pas été altéré, en d'autres termes que la valeur du nonce principal k sur la base de laquelle stem, a été calculée est bien celle d'origine. 20 En effet on note que si l'on demande deux fois la signature du même message, alors le même nonce k sera généré dans les deux cas. Un attaquant contrôlant la mise en oeuvre en clair de la première opération d'arithmétique pourrait redemander la signature du même message, puis « tricher » sur la valeur de stemp renvoyée la 2e fois (calculer (gk(H(m))+K + ô modp)mod q, où ô est une 25 erreur ajoutée sciemment, équivalent à modifier k). Cela pourrait permettre de leurrer la deuxième implémentation blanchie W/3,2 qui va à son tour renvoyer une valeur fausse de s2. Connaissant la vraie valeur de s2 obtenue lors de la première signature et la valeur de ô, il serait possible dans certains cas de remonter à k. 30 Ainsi, ladite troisième implémentation blanchie W/3,1 implémente avantageusement également la vérification que la valeur reçue de stem, est cohérente connaissant les valeurs de k et K. Plus précisément, il est bien plus 3066845 16 léger en termes de puissance de calcul de vérifier le résultat de l'exponentiation modulaire de k + K que de réaliser ce calcul, c'est pourquoi la vérification peut être implémentée de façon blanchie. On peut mentionner les techniques connues de l'homme du métier de 5 délégation de calcul à un tiers, qui incluent diverses vérification de ce calcul (par exemple décrites dans l'article suivant : https://eprint.iacr.org/2015/206). Par ailleurs, peut être utilisée la technique des « petits moduli » qui a une faible probabilité de faux positif mais est très légère. L'idée est que la troisième implémentation blanchie W/3,1 peut elle-même réaliser le calcul délégué mais sur 10 la base de petits moduli (ce qui est bien plus facile que le calcul original), et vérifier, en réduisant la valeur reçue de stem, par ces petits moduli, que l'entité tierce (l'équipement 10a) a effectué le calcul attendu. Pour cela, la troisième implémentation blanchie W/3,1 doit également implémenter la « re-génération » du nonce principal k (car elle en a besoin pour 15 effectuer cette vérification) à partir dudit condensat (on comprend qu'on met en oeuvre la même fonction que dans la première implémentation blanchie W/30 ou la deuxième implémentation blanchie W/3,2, en d'autres termes qu'elle enfouit le même secret sk). 20 En complément ou alternativement, un compteur est implémenté pour limiter ou empêcher la réutilisation d'au moins la première implémentation blanchie W/30 avec un même jeu de paramètres. Ainsi, le compteur prend de façon préférée la forme d'une liste de messages pour lesquels la signature a déjà été demandée, i.e. ayant un 25 condensat déjà utilisé comme donnée d'entrée de la première implémentation blanchie W/30 (cette liste est typiquement une liste de condensats), avantageusement lisible uniquement par cette première implémentation blanchie W/30 (par exemple en étant chiffrée) de sorte à prévenir sa manipulation frauduleuse. Plus précisément, à chaque mise en oeuvre du procédé, la première 30 implémentation blanchie W/30 accède à la liste, vérifie si le condensat reçu fait partie de la liste. Si oui le procédé est interrompu, et si non le condensat reçu est ajouté à la liste et le procédé est poursuivi. 3066845 17 A noter que dans le cas où la deuxième implémentation blanchie W/3,2 implémente déjà la vérification de Stemp, il est possible d'avoir une tolérance et d'autoriser par exemple une ou deux « re-signatures » du même message. En effet, la probabilité que la vérification même aux petits modulos donne un faux 5 positif est très faible, il faudrait mettre en oeuvre un très grand nombre de fois la signature du même message pour espérer réaliser un tel faux positif. Chaque condensat est pour cela associé dans ladite liste à un entier désignant le nombre d'utilisation restantes (ou inversement déjà consommées) de la première implémentation blanchie WBo. Alors, à chaque mise en oeuvre du procédé, la 10 première implémentation blanchie WB° accède à la liste, vérifie si le condensat reçu fait partie de la liste et compare l'entier associé à un seuil (zéro si l'on compte le nombre d'utilisations restante, ou un nombre prédéterminé d'utilisations maximum si l'on compte les utilisations déjà consommées). Si le condensat fait partie de la liste et que le seuil est atteint le procédé est interrompu. Sinon le 15 procédé est poursuivi et : - soit le condensat reçu ne fait pas partie de liste et il y est ajouté avec une valeur initiale donnée à l'entier associé (ledit nombre prédéterminé d'utilisations maximum si l'on compte le nombre d'utilisations restantes, ou zéro si l'on compte les utilisations déjà consommées), 20 - soit le condensat reçu fait partie de la liste et le seuil n'est pas atteint, on décrémente (respectivement incrémente) l'entier associé au condensat. A noter qu'est possible un mode de réalisation combinant la vérification de Stemp, et interdisant toute « re-signature » du même message. Il apporte une sécurité inégalée puisque même avec de la chance on ne peut alors pas tromper 25 la deuxième implémentation blanchie W/3,2. Nonce auxiliaire Comme expliqué, la deuxième opération d'arithmétique modulaire utilise 30 dans le mode de réalisation préféré la valeur inverse du nonce principal k. Or, dans la mesure où k n'est pas précalculé, la valeur de k-1- soit être calculée en direct, et l'application de l'implémentation blanchie W/3,2 pour exécuter une telle inversion modulaire peut être longue l'implémentation blanchie. 3066845 18 Le présent procédé propose de faire calculer astucieusement cette inversion en clair sans pour autant dévoiler la valeur de k, en utilisant un deuxième nonce k' dit nonce auxiliaire, généré dans les mêmes conditions. Pour cela le procédé comprend avantageusement des étapes 5 supplémentaires (a') et (b'), qui sont préférentiellement mises en oeuvre avant l'étape (c), mais sont indépendantes des étapes (a) et (b). Dans l'étape (a') est déterminé un troisième état interne s3 par application à un condensat du document obtenu par une fonction de hachage donnée d'une quatrième implémentation blanchie WBo' stockée sur les moyens de stockage de 10 données 12a de l'équipement 10a, de : - la génération du nonce principal k et du nonce auxiliaire k' à partir dudit condensat H(m) ; puis - le produit modulaire du nonce principal k et du nonce auxiliaire k'. 15 Dans l'exemple où l'algorithme de signature est conforme à DSA, alors ledit produit modulaire est avantageusement z1,z21-> z, - z2 mod a (c'est le même produit qu'à l'étape (b)), de sorte que s3 = k(H(m)) - k'(11(m))mod a. Dans l'étape (b') est détermination un quatrième état interne s4 par inversion modulaire du troisième état interne s3. En d'autres termes s4 = 20 s3-1 mod a =1 1/ k(H(m)) mod a k(H(m)) - k'(H(m))m° A l'instar de l'étape (b), cette étape (b) est préférentiellement mise en oeuvre en clair (i.e. de façon non sécurisée) par les moyens de traitement de données 11 a de l'équipement 10a puisqu'une opération d'arithmétique modulaire est comme expliqué une opération peu sensible (car k est caché) et très 25 complexe. A ce stade-là, connaissant k' on peut facilement récupérer k-1. A ce titre, ladite deuxième implémentation blanchie W/3,2 implémente avantageusement également : - la génération du nonce auxiliaire k' à partir dudit condensat ; et 3066845 19 le produit modulaire du quatrième état interne s4 et du nonce auxiliaire k' de sorte à obtenir la valeur de l'inverse modulaire du nonce principal k. Ledit produit modulaire est avantageusement toujours de la même forme, 5 de sorte que si l'on note s5 le résultat de ce produit on a s5 = s4 - k'(II(m))mod a = y mod q. 1411(m)) On a ainsi une implémentation blanchie très légère du calcul de la l'inverse modulaire de k. 10 Il est à noter que l'utilisation du nonce auxiliaire a un autre intérêt. Dans la mesure où des traitements en clair peuvent effectuées, il est intéressant de pouvoir prouver que l'état interne intermédiaire s4 n'a pas été altéré, en d'autres termes que la valeur du nonce principal k sur la base de laquelle s4 a été calculée est bien celle d'origine, de la même façon que pour stem,. 15 Ainsi, ladite deuxième implémentation blanchie W/3,2 implémente avantageusement également le produit modulaire du nonce auxiliaire k et de ladite valeur de l'inverse modulaire du nonce principal k pour vérification (que 55 est bien l'inverse de k dans Eh E). Plus précisément, si la ladite valeur de l'inverse modulaire du nonce 20 principal k est bien ce qu'elle prétend être, en d'autres termes que S5 /Cl mod q, alors k - 55 mod a = k - /Cl mod a = lmod q. Implémentation blanchie 25 La réalisation d'implémentations blanchies d'opérations d'arithmétique modulaire est connue de l'homme du métier. Toutefois, l'application de l'implémentation blanchie pour exécuter l'opération représentée peut être longue, en particulier si ladite opération d'arithmétique modulaire comprend des exponentiations modulaires. 30 A ce titre, de façon préférée lesdites implémentations blanchies WB, utilisent un Système de Représentation Modulaire (« Residue Number System », RNS) pour effectuer ladite opération d'arithmétique modulaire. 3066845 20 Plus précisément, le principe d'implémentation RNS permet de décomposer des calculs modulo une valeur donnée en des calculs modulo des petits nombres premiers dont le produit est plus grand que ladite valeur donnée (grâce au théorème chinois). 5 L'homme du métier pourra procéder par exemple conformément à la demande US2016/239267. Alternativement il est possible de laisser faire la partie finale du calcul en clair, en utilisant le principe du brevet US5479511. Par exemple, dans le cas de S2, l'implémentation blanchie peut facilement calculer 10 s2' = (H(m) + s1x)(1C1 mod q) + r - q, avec r un nombre quelconque de longueur égale à q, et les moyens de traitement de données 11a de l'équipement 10a calculent s2 = S21 mod q. Produit programme d'ordinateur 15 Selon un deuxième et un troisième aspects, l'invention concerne un produit programme d'ordinateur comprenant des instructions de code pour l'exécution (en particulier sur les moyens de traitement de données lla de l'équipement 10a) d'un procédé selon le premier aspect de l'invention de signature électronique d'un 20 document avec une clé secrète x prédéterminée, ainsi que des moyens de stockage lisibles par un équipement informatique (une mémoire 12a de l'équipement 10a) sur lequel on trouve ce produit programme d'ordinateur. REVENDICATIONS1. Procédé de signature électronique d'un document avec une clé secrète (x) prédéterminée, le procédé étant caractérisé en ce qu'il comprend la mise en oeuvre par des moyens de traitement de données (11a) d'un équipement (10a) d'étapes de : (a) détermination d'un état interne initial (so) par application à un condensat du document obtenu par une fonction de hachage donnée d'une première implémentation blanchie (WB0) de : - la génération d'un nonce principal (k) à partir dudit condensat ; puis - une somme modulaire du nonce principal (k) et d'une constante prédéterminée (K) ; ladite première implémentation blanchie (WB0) étant stockée sur des moyens de stockage de données (12a) de l'équipement (10a) ; (b) détermination d'un premier état interne (si) par application à l'état interne initial (so) d'une première opération d'arithmétique modulaire, puis d'un produit modulaire avec une exponentiation de la constante prédéterminée (K) ; (c) Détermination d'un deuxième état interne (s2) par application audit condensat d'une deuxième implémentation blanchie (W/3,2) de : - la génération du nonce principal (k) à partir dudit condensat ; et - une deuxième opération modulaire fonction du premier état interne (si), du nonce principal (k) et de la clé secrète (x) ; ladite deuxième implémentation blanchie (W/3,2) étant stockée sur les moyens de stockage de données (12a) de l'équipement (10a) ; (d) génération d'une signature électronique du document à partir du premier état interne (si) et du deuxième état interne (s2) déterminés. 2. Procédé selon la revendication 1, dans lequel ladite deuxième opération d'arithmétique modulaire comprend l'inversion modulaire du nonce principal (k). 3066845 22 3. Procédé selon la revendication 2, dans lequel ladite deuxième opération d'arithmétique modulaire est z 1-> + s1x)k-1 mod q, où si est le premier état interne, k le nonce principal, x la clé secrète et q une constante. 5 4. Procédé selon la revendication 3, dans lequel ledit produit modulaire avec une exponentiation de la constante prédéterminée (K) est z 1-> zg-K mod q. 10 5. Procédé selon l'une des revendications 3 et 4, dans lequel ladite première opération d'arithmétique modulaire est z 1-> (gZ mod p) mod q, où g et p sont des constantes. 6. Procédé selon la revendication 5, dans lequel ladite somme 15 modulaire avec la constante prédéterminée (K) est z 1-> k + K mod p. 7. Procédé selon l'une des revendications 1 à 6, dans lequel la signature est le couple (s1, s2) des premier et deuxième états internes. 20 8. Procédé selon l'une des revendications 1 à 7, dans lequel la première opération d'arithmétique modulaire est mise en oeuvre en clair par les moyens de traitement de données (11 a) de l'équipement (10a). 9. Procédé selon la revendication 8, dans lequel ledit produit 25 modulaire avec une exponentiation de la constante prédéterminée (K) est mise en oeuvre par application d'une troisième implémentation blanchie (W/3,1) stockée sur les moyens de stockage de données (12a) de l'équipement (10a). 10. Procédé selon l'une des revendications 1 à 8, comprenant en 30 outre des étapes de : (a') détermination d'un troisième état interne (s3) par application à un condensat du document obtenu par une fonction de hachage donnée d'une quatrième implémentation blanchie (W/30') de : 3066845 23 - la génération du nonce principal (k) et d'un nonce auxiliaire (k') à partir dudit condensat ; puis - le produit modulaire du nonce principal (k) et du nonce auxiliaire (k') ; 5 ladite quatrième implémentation blanchie (WB0') étant stockée sur les moyens de stockage de données (12a) de l'équipement (10a) ; (b') détermination d'un quatrième état interne (s4) par inversion modulaire du troisième état interne (s3). 10 11. Procédé selon la revendications 2 en combinaison avec la revendication 10, dans lequel les étapes (a') et (b') sont mises en oeuvre antérieurement à l'étape (c), ladite deuxième implémentation blanchie (W/3,2) implémentant également : - la génération du nonce auxiliaire (k') à partir dudit condensat ; et 15 - le produit modulaire du quatrième état interne (s4) et du nonce auxiliaire (k') de sorte à obtenir la valeur de l'inverse modulaire du nonce principal (k). 12. Procédé selon la revendication 11, dans lequel l'étape (b') est 20 mise en oeuvre en clair par les moyens de traitement de données (11a) de l'équipement (10a). 13. Procédé selon l'une des revendications 11 et 12, dans lequel ladite deuxième implémentation blanchie (W/3,2) implémente également le produit 25 modulaire du nonce auxiliaire (k) et de ladite valeur de l'inverse modulaire du nonce principal (k) pour vérification. 14. Procédé selon l'une des revendications 1 à 13, comprenant une étape préalable (a0) de génération desdites implémentations blanchies (WBo, 30 WB0', WBsi, WBs2) par des moyens de traitement de données (11b) d'un serveur (1 b), et leur transmission à l'équipement (10a). 3066845 24 15. Procédé selon les revendications 6 et 14 en combinaison, dans lequel l'étape (a0) comprend la génération préalable des constantes p, q, g conformément à l'algorithme DSA. 5 16. Procédé selon la revendication 15, dans lequel l'étape (a0) comprend également la génération préalable de la clé secrète (x) et d'une clé publique associée en fonction des constantes p, q, g. 17. Procédé selon l'une des revendications 1 à 8, dans lequel 10 lesdites implémentations blanchies (WBo, WB0,, W/3,1, W/3,2) utilisent un Système de Représentation Modulaire, RNS, pour effectuer les sommes ou produits modulaires. 18. Procédé selon l'une des revendications 1 à 17, comprenant 15 une étape subséquente (d) d'association par les moyens de traitement de données (11a) de l'équipement (10a) de la signature électronique générée au document de sorte à former le document signé 19. Produit programme d'ordinateur comprenant des instructions 20 de code pour l'exécution d'un procédé selon l'une des revendications 1 à 18 de signature électronique d'un document avec une clé secrète (x) prédéterminée, lorsque ledit programme est exécuté par un ordinateur. 20. Moyen de stockage lisible par un équipement informatique sur 25 lequel un produit programme d'ordinateur comprend des instructions de code pour l'exécution d'un procédé selon l'une des revendications 1 à 18 de de signature électronique d'un document avec une clé secrète (x) prédéterminée.