Procédé de génération de signature à la volée avec preuve de sécurité
L'invention consiste en deux nouveaux schémas de signature électronique à sécurité prouvée, le premier schéma étant basé sur le problème du logarithme discret sur courbe elliptique, le second schéma étant basé sur un procédé quelconque d'identification sans divulgation d'information. Les deux schémas de l'invention ont en commun de permettre la génération rapide d'une signature électronique une fois que certains pré-calculs ont été réalisés. Cela rend l'invention particulièrement utile dans le cadre d'objets portables à faible ressource de calcul tels qu'une carte à puce.
Une signature électronique d'un message est un ou plusieurs nombres dépendant à la fois d'une clé secrète connue seulement de la personne signant le message, ainsi que du contenu du message à signer. Une signature électronique doit être vérifiable: il doit être possible pour une tierce personne de vérifier la validité de la signature, sans que la connaissance de la clé secrète de la personne signant le message ne soit requise.
Un schéma de signature est décrit sous la forme de trois éléments (GEN_S, SIGN_S, VER_S) :
GEN_S est un procédé de génération de clé publique et privée
SIGN_S est un procédé de génération de signature
VER_S est un procédé de vérification de signature.
II existe de nombreux procédés de signature électronique. Les plus connus sont:
- Schéma de signature RSA: c'est le schéma de signature électronique le plus largement utilisé. Sa sécurité est basée sur la difficulté de la factorisation de grands nombres .
- Schéma de signature Rabin. Sa sécurité est aussi basée sur la difficulté de la factorisation de grands nombres.
- Schéma de signature de type El-Gamal. Sa sécurité est basée sur la difficulté du problème du logarithme discret. Le problème du logarithme discret consiste à déterminer, s'il existe, un entier x tel que y=gx avec y et g deux éléments d'un ensemble E possédant une structure de groupe.
- Schéma de signature Schnorr. Il s'agit d'une variante du schéma de signature de type El-Gamal.
Le schéma RSA est sans doute le schéma de signature le plus connu et utilisé. Cette méthode est décrite dans
"A method for obtaining digital signatures and public-key cryptosystems" (Communications of the ACM, 1978) par
Rivest, Shamir et Adleman.
Le procédé de génération de clé consiste à générer 2 premiers p et q, tels que (p-1) et (q-1) soient premiers avec un exposant public e (choisi par l'utilisateur, ou initialisé à une valeur standard, par exemple e=2A16+l) .
La clé secrète est alors d, tel que
ed=l modulo (p-l)*(q-l),
que l'on note d=eA(-l) modulo (p-l)*(q-l), et la clé publique est formée de n=p*q et e.
Le procédé de signature, pour un message m, consiste alors, avec une fonction dite de « padding » P (le mot anglais « padding » pourrait se traduire par « de remplissage », mais nous préférerons, pour plus de clarté, le mot anglais dans la suite) , à retourner
s=P (m) Ad modulo n
Le procédé de vérification d'une signature s d'un message m se résume ainsi à vérifier que sAe modulo n = P (m) .
Le schéma Rabin est un schéma de signature décrit dans « Digital signatures and public-key functions as intractable as factorization", Tech. Rep. MIT/LCS/TR-212, MIT Laboratory for Computer Science, 1979.
C'est un procédé assez proche de RSA, qui repose sur la factorisation.
Le procédé de génération de clé consiste à générer 2 premiers p et q. La clé secrète est alors (p,q) et la clé publique est n=p*q.
Le procédé de signature, pour un message m, consiste alors, avec une fonction de « padding » P à retourner s, racine carrée de P (m) modulo n, ce qui est facile connaissant la factorisation de n. Les algorithmes permettant de faire ce calcul sont connus de l'homme de l'art.
Le procédé de vérification d'une signature s d'un message m se résume ainsi à vérifier que sA2 modulo n = P (m) .
La signature Rabin est aussi sure que la factorisation.
Dans l'article « How to prove yourself: Practical solutions to identification and signature problems", Proceedings of Crypto 86, Fiat et Shamir définissent la notion de procédé d'identification sans divulgation d'information (en anglais « zero-knowledge protocol») , ainsi qu'une heuristique, dite heuristique de Fiat- Shamir, qui permet de transformer un procédé d'identification sans divulgation d'information en schéma de signature.
Un procédé d'identification sans divulgation d' information comprend : un procédé de génération de clé publique et privée un protocole d'identification, qui peut généralement se décrire à l'aide de trois étapes, en un prouveur P et un vérifieur V ; pour cela,
on définit 3 fonctions publiquement connus A, B et C ; le protocole est alors :
étape 1 : P génère un nombre aléatoire r, calcule x=A(r) et envoie x à V étape 2 : V génère un nombre aléatoire g et l'envoie à P étape 3 : P calcule, à l'aide de son secret s, le nombre y=B(s,g,r), et l'envoie à V. V peut alors vérifier si x=C(y,g), auquel cas l'identification est acceptée.
Le protocole d'identification peut également comporter la vérification que les éléments sont dans des ensembles connus. Un moyen simple de vérifier l'appartenance de ces éléments à ces ensembles est de ne définir les fonctions A, B, C que sur ces ensembles . Un exemple est donné ci- dessous par le schéma « Poupard Stern »
L'heuristique Fiat-Shamir consiste à supprimer l'interactivité du procédé d'identification sans divulgation d'information: pour cela, on utilise une fonction de hachage (« hash », en anglais), appelée G. Le signataire est appelé S, tandis que le vérifieur est appelé V.
Le schéma de signature alors obtenu est alors caractérisé par un procédé de génération de clé qui est le procédé de génération de clé du procédé
d'identification sans divulgation d'information, et par un procédé de génération de signature qui est:
générer un nombre aléatoire r et calculer x=A(r) ; calculer g=G(m,x), où m est le message à signer ; calculer y=B(s,g,r) ; la signature alors obtenue est (x,y) .
Enfin, le procédé de vérification de la signature (x,y) du message m consiste à calculer g=G(m,x), puis a vérifier que x=C(y,g) .
On dit qu'un schéma de signature est de type « à la volée » (« on the fly », en anglais) lorsque la génération de la signature peut se décomposer en deux phases distinctes : une première phase dite de pré¬ calcul, durant laquelle une valeur indépendante du message à signer est calculée, et la phase de génération de signature, durant laquelle une signature d'un message m est calculée en utilisant la valeur pré-calculée, cette dernière phase devant pouvoir s'exécuter rapidement. Les schémas de signature « à la volée » sont donc particulièrement utiles dans le cadre d'objets portables à faible ressource de calcul tels qu'une carte à puce. De tels schémas permettent la génération rapide de la signature par l'objet portable, alors que cela ne serait pas possible pour un schéma de signature classique demandant plus de ressources de calculs.
On voit ainsi aisément que les schémas basés sur l'heuristique Fiat-Shamir sont des schémas de signatures
« à la volée » dès lors que l'évaluation de la fonction G
(la fonction de hachage) et de la fonction B (pour le calcul de y) est rapide, ce qui est le cas pour les procédé d'identification sans divulgation d'information classiques (Fiat-Shamir, Girault-Poupard-Stern, Poupard-
Stern) . En effet, l'étape consistant à générer un nombre aléatoire r et à calculer x=A(r) est indépendante du message, et peut donc se faire sans la connaissance de celui ci, lors d'un pré-calcul.
Girault-Poupard-Stern est décrit dans "An identity- based identification scheme based on discrète logarithms modulo a composite number", Proceedings og EUROCRYPT 90.
Fiat-Shamir est décrit dans « How to prove yourself: Practical solutions to identification and signature problems", Proceedings of Crypto 86.
Poupard-Stern est détaillé ci-après .
Malheureusement, RSA et Rabin ne disposent pas de cette propriété très intéressante de signature « à la volée ». Une variante de RSA et de Rabin proposant cet avantage est l'œuvre de cette invention.
Poupard-Stern est un procédé d'identification sans divulgation d'information, publiée dans « On the fly signatures based on factoring », dans ACM Conférence on
Computer and Communications Security 1999, par Poupard et
Stern. Poupard-Stern peut être transformé en procédé de signature, grâce à l'heuristique Fiat-Shamir.
Le procédé de génération de clé consiste à générer 2 premiers p et q. La clé publique comprend alors un module n=p*q, dont la factorisation est gardée secrète, et une base a. La clé secrète est s=n-(p-l) (q-1) .
Le protocole d'identification est alors: - Le prouveur P génère un nombre aléatoire r
P calcule x=aAr modulo n et l'envoie au vérifieur V
V génère un nombre aléatoire g et l'envoie à P. P calcule y=r+s*g et l'envoie à V
Le vérifieur V peut alors vérifier que aAy=x *aA (n*g) modulo n.
De plus, il est vérifié que y est dans le bon intervalle de valeur. Plus précisément, le nombre r étant généré entre 0 et R, le nombre g étant de taille I IgI I bits, et le nombre s étant de taille I |s| | bits, il est vérifié que : 0 < y < R+2Λ ( | | s | | + | | k| | ) . Cet intervalle, ainsi que les tailles des paramètres, sont décrits plus précisément dans l'article de Poupard et Stern.
On dit qu'un schéma de signature est à sécurité prouvée si on peut, par une preuve mathématique, utiliser un éventuel attaquant contre ce schéma de signature (plus précisément, les signatures forgées, c'est à dire contrefaites par cet attaquant) pour résoudre un problème
difficile, comme le logarithme discret ou la factorisation.
Les preuves peuvent être non strictement réductibles (« loose » en anglais) ou strictement réductibles (« tight » en anglais) . Les termes anglais seront préférés dans la suite.
Une preuve « loose » utilise un attaquant et résoud le problème difficile avec une probabilité faible comparée à celle de l'attaquant. Au contraire, une preuve « tight » résout le problème avec une probabilité très proche de celle de l'attaquant. Ainsi, une preuve « tight » est un bien meilleur gage de sécurité.
Les schémas de signature basés sur l'heuristique
Fiat-Shamir possèdent une preuve de sécurité. Cette preuve est réalisée grâce à l'article « Security proofs for signature schemes" , Proceedings of EUROCRYPT 96, où Pointcheval et Stern introduisent le lemme de bifurcation
("forking lemma", en anglais), qui permet de prouver la sécurité de schémas basés sur l'heuristique Fiat-Shamir, dans le modèle de l'oracle aléatoire.
Malheureusement, les preuves dues au « forking lemma » n'assurent qu'une sécurité « loose ». Il n'existe pas de moyen connu de prouver un schéma basé sur l'heuristique Fiat-Shamir avec une preuve « tight ». Ainsi, la preuve de sécurité de Poupard-Stern, reposant sur le lemma de bifurcation, n'est que « loose ».
Le modèle de l'oracle aléatoire est un modèle idéal dans lequel toute fonction de hachage est considérée comme parfaitement aléatoire. Comme dans la pratique, une fonction de hachage n'est pas un objet parfaitement aléatoire, on considère généralement qu'une preuve dans le modèle de l'oracle aléatoire est une indication que le schéma est correctement construit, mais que cela ne donne pas une garantie parfaite de la sécurité du schéma lors de son utilisation pratique.
Au contraire, on dit qu'un schéma cryptographique possède une preuve de sécurité dans le modèle standard lorsque sa sécurité peut être prouvée sans faire l'hypothèse du caractère parfaitement aléatoire des fonctions de hachage. Une telle preuve de sécurité est particulièrement utile car elle permet d'avoir une confiance parfaite dans la sécurité du schéma lors de son utilisation pratique.
Dans la publication "Improved online/offune signature schemes" par Shamir et Tauman (Proceedings of Crypto 01) , les auteurs décrivent un moyen de conversion générique permettant d'obtenir un schéma de signature « à la volée » à partir d'un schéma de signature quelconque. L'avantage de cette conversion est qu'elle préserve la sécurité du schéma de signature : si le schéma initial possède une preuve de sécurité dans le modèle standard, alors le schéma de signature « à la volée » obtenue possède aussi une preuve de sécurité dans le modèle standard. L'inconvénient de cette méthode est qu'elle double la taille de la clef publique ainsi que la taille
de la signature, et qu'elle augmente aussi le temps de vérification de la signature. Le temps total de génération de la signature (pré-calcul+génération) est lui-même augmenté.
Le premier schéma de l'invention consiste en un premier schéma de signature à la volée avec une preuve « tight » de sécurité dans le modèle standard et ne présentant pas les inconvénients cités précédemment. En effet, dans ce premier procédé de l'invention, la taille de la clef publique et de la signature ne sont pas augmentées, et le temps de vérification de la signature n'est pas modifié.
Le premier procédé de l'invention est basé sur le schéma de signature inventé par Boneh and Boyen ("Short signatures without random oracles", Proceedings of Eurocrypt 2004) . Ce schéma de signature est basé sur le calcul du couplage dans une courbe elliptique, et possède une preuve de sécurité « tight » dans le modèle standard. En revanche, ce schéma ne possède pas la propriété d'être « à la volée », c'est à dire que la génération de la signature est coûteuse en temps de calcul et ne peut pas se décomposer en deux phases telles que définies précédemment.
Le calcul du couplage de deux points définis sur une courbe elliptique est un procédé permettant la mise en oeuvre de protocoles possédant des propriétés intéressantes sur le plan cryptographique. A titre d'exemple, on peut citer un protocole de chiffrement basé
sur l'identité (Boneh et Franklin, « Identity-based encryption from the Weil pairing », Proceedings of Crypto 2001) ainsi qu'un protocole d'échange de clef entre trois parties (A. Joux, "A one-round protocol for tripartite Diffie-Hellman, " Algorithm Number Theory Symposium — ANTS-IV, lecture Notes on Computer Science, volume 1838, Springer-Verlag (2000), pp. 385-394) .
Une courbe elliptique est un ensemble de points ayant des caractéristiques communes. Etant donné deux points A et B appartenant à une courbe elliptique, il est possible d'additionner ces deux points pour en obtenir un troisième C=A+B. De plus, étant donné un point A et un entier k, il est possible de calculer k.P=P+P+...+P (l'opération étant répétée k fois) . Cette opération s'appelle multiplication scalaire par un entier k. Etant donné deux points A et B appartenant à une courbe elliptique, il est possible de calculer le couplage entre les points A et B, noté <A,B>. Pour plus de détails sur les courbes elliptiques, on pourra se reporter notamment à la publication FR 2 828 779. La mise en oeuvre classique d'une opération de couplage de type C = <A, B> est détaillée notamment dans le document "Identity based encryption from the Weil pairing" D. Boneh et M. Franklin, Proceedings of Crypto 2001, disponible à 1'adresse :http: //crypto. Stanford.edu/~dabo/abstracts/ibe .html) . Les points A, B que l'on cherche à coupler sont par exemple une clé, publique ou privée, et un message, à chiffrer ou à déchiffrer, dans le cadre d'un protocole de cryptographie à clés asymétriques .
Le schéma de signature inventé par Boneh et Boyen sur lequel est basé le premier procédé de l'invention, est défini de la façon suivante :
Gl et G2 sont deux générateurs de courbes elliptiques El et E2, respectivement. Une réalisation possible du schéma consiste à prendre El=E2 et G1=G2. On suppose que ces deux générateurs sont d'ordre p, où p est un nombre premier. Les courbes elliptiques El et E2, les points Gl et G2, ainsi que p, sont des paramètres du système, x et y sont deux entiers définis modulo p, et U est tel que U=x.G2 et V tel que V=y.G2. La clef publique est (U,V) et la clef privée est (x,y) .
Pour générer une signature, on génère un aléa r compris entre 0 et p-1, et la signature est alors (s,r), tel que :
s=l/ (x+H(m)+y*r) .Gl
dans laquelle H (m) est le haché du message m.
La vérification de la validité d'une signature s'effectue de la manière suivante : on vérifie l'égalité suivante :
<s,U+H(m) .G2+r.V>=<Gl,G2>
On voit d'après la description précédente du schéma de signature de Boneh et Boyen que ce schéma n'est pas du type « à la volée ». En effet, pour calculer la signature (s,r), il est nécessaire de connaître le message m, et la
multiplication scalaire ainsi définie (ie, s=l/ (x+H (m) +y*r) .Gl) ne peut pas être pré-calculée.
Le premier schéma de l'invention consiste à modifier le schéma de signature précédent pour le rendre du type
« à la volée ». Le procédé de génération de la clef publique et de la clef privée n'est pas modifié par rapport au schéma original. Le procédé de vérification de la signature n'est pas modifié non plus. Seul le procédé de génération de signature est modifié de la façon suivante selon deux phases .
Dans une première phase, dite phase de pré-calcul, on génère un aléa r' compris entre 0 et p-1, et on calcule le point :
s=l/ (x+y*rf ) .Gl
Dans une deuxième phase, étant donné le message m, on calcule l'entier:
r=r'-H(m)/y modulo p
La signature est alors égale à (s,r) .
Plus précisément, ce premier schéma de signature à sécurité prouvé « tight » et « à la volée » destiné à un composant électronique est tel qu'il utilise les procédés suivants :
GEN_NOU est le procédé de génération de la clé publique et privée selon le schéma de signature de Boneh et Boyen,
SIGN_NOU est le procédé de génération de signature d'un message m à signer et consiste à :
1) générer un aléa r' compris entre 0 et p-1, l'entier p étant un paramètre du schéma ;
2) pré-calculer le point s=l/ (x+y*r' ) .Gl, le point Gl étant un générateur de la courbe elliptique El, le point Gl et la courbe elliptique Gl étant deux paramètres du schéma, les entiers x et y formant la clef privée du schéma ; 3) calculer, une fois le message m connu, l'entier r=r'-H(m)/y modulo p ; 4) renvoyer la signature (s,r) ;
VER_N0U est le procédé de vérification selon le schéma de signature de Boneh et Boyen.
On voit que dans le schéma décrit précédemment, le point s est indépendant du message m et peut dont être pré-calculé. Ensuite, lors de la deuxième phase, lorsque le signataire reçoit le message m, il peut calculer l'entier r=r'-H(m)/y modulo p. Comme cette opération ne requiert qu'une division et une soustraction, elle peut s'effectuer très rapidement. Le premier procédé de l'invention est donc du type « à la volée »
De plus, comme la distribution de probabilité des signatures générées n'a pas été modifié, le premier
procédé de l'invention définit un schéma de signature possédant le même niveau de sécurité que le schéma original, c'est à dire qu'il possède une preuve de sécurité « tight » dans le modèle standard.
Le premier procédé de l'invention comprend une première variante destinée à réduire le temps de génération de la signature. Dans cette première variante, on suppose que le signataire possède en mémoire l'entier y'=-l/y modulo p. Dans ce cas, la génération de la signature s'effectue en calculant r=r'+H (m) *y' modulo p. L'avantage de la première variante est qu'elle remplace une division modulaire par une multiplication modulaire dont le calcul est généralement plus rapide. Comme la distribution de probabilité des signatures générées n'a pas été modifiée, cette variant possède exactement le même niveau de sécurité.
Le premier procédé de l'invention comprend une deuxième variante destinée à réduire encore le temps de génération de la signature. Dans cette deuxième variante, le signataire génère un aléa r' de grande taille (par exemple de taille 400 bits si la taille de p est de 160 bits) . Dans cette deuxième variante, le signataire calcule r=r'+H(m)*y, le calcul s'effectuant sur les entiers et non modulo p. Comme le calcul d'une addition et d'une multiplication sur les entiers est plus rapide qu'une addition et une multiplication modulo p, la deuxième variant s'exécute plus rapidement. De plus, on peut montrer que le niveau de sécurité du schéma n'est
pas modifié de façon significative si la taille de r' est suffisamment grande.
Le deuxième schéma de l'invention consiste en un schéma de signature basé sur l'heuristique Fiat-Shamir, mais avec le nouvel avantage que la preuve est « tight ».
Le schéma gardera toutefois la bonne propriété d'être « à la volée ».
L'invention utilise ainsi n'importe quel procédé d'identification sans divulgation d'information. Elle utilise aussi n'importe quel schéma de signature S, pour lequel il soit impossible pour un attaquant, étant donné k messages, de procéder à une forge sur l'un quelconque de ces messages. Enfin, l'invention utilise deux fonctions de hachage G et H.
Plus précisément, le deuxième schéma de l'invention est un schéma de signature à sécurité prouvé « tight » et « à la volée » destiné à un composant électronique, utilisant deux fonctions de hachage G et H, un procédé d'identification sans divulgation d'information ZK, donné sous la forme (GEN ZK, A, B, C) et un schéma de signature
S, donné sous la forme (GEN_S, SIGN_S, VER_S) , où • GEN_ZK est le procédé de génération de clé publique et privée de ZK ;
• A, B, C sont les fonctions définissant le protocole d'identification de ZK ;
• GEN_S est le procédé de génération de clé publique et privée de S ;
• SIGN_S est le procédé de génération de signature de S ;
• VER_S est le procédé de vérification de signature de S ; ledit schéma de signature de l'invention est tel qu'il utilise les procédés suivants :
• GEN_INV est le procédé de génération de clé publique et privée, qui consiste à exécuter GEN_ZK et GEN_S • SIGN INV est le procédé de génération de signature, et consiste à : o générer un nombre aléatoire r et calculer x=A(r) ; o pré-calculer h=H(x) ; o pré-calculer la signature de h : z=SIGN_S (h) ; o calculer g=G(m, z) , où m est le message à signer, une fois celui-ci connu; o calculer y=B(s,g,r), et ainsi à obtenir la signature (z,y)
• VER_INV est le procédé de vérification de signature (z,y) du message m, et consiste à :
' calculer g=G(m, z) ; " calculer x=C(y,g) ;
' calculer h=H(x) ;
" vérifier que z est une signature valide de h à l'aide de VER_S.
Comme on peut le voir aisément, ce schéma est « à la volée », car les étapes premières de la signature
(précisément, jusqu'au calcul de g non inclus) peuvent être faites sans connaître le message. Les étapes finales étant très rapides, le schéma est « à la volée ». Plus précisément, ces étapes peuvent être réalisées avant la connaissance du message m, car elles sont indépendantes de celui ci : par un tel procédé, le temps de la signature une fois le message reçu est grandement diminué.
On peut alors prouver que ce schéma possède une preuve de sécurité « tight », permettant de résoudre, en utilisant un attaquant du schéma, soit le problème sur lequel repose le procédé d'identification sans divulgation d'information, soit le problème sur lequel repose le schéma de signature S.
Un exemple non limitatif est celui où S est le RSA et où le procédé d'identification sans divulgation d'information est Poupard-Stern.
Plus précisément, une telle combinaison nous permet d'obtenir un schéma de signature utilisant le schéma Poupard-Stern comme étant le procédé d'identification sans divulgation d'information, et le schéma RSA, comme étant le schéma de signature, schéma de l'invention tel qu'il utilise les procédés suivants :
• GEN_INV est le procédé de génération de clé publique et clé secrète et consiste à : ' générer un paramètre a appelé base,
1 générer deux premiers p et q, tel que (p-1) et (q-1) soient premiers avec un exposant public e, et
1 retourner (n=p*q,e) comme clé publique, et (d=eA(-l) modulo (p-1) * (q-1) , s=n- (p-
I)* (q-1)) comme clé privée , la taille de s en bit étant connue, et notée I I s I I , ainsi que celle de la fonction de hachage G, notée I IgI I, R désignant la valeur maximale du nombre aléatoire dans le procédé de génération de signature ;
• SIGN INV est le procédé de génération de signature, et consiste à : o générer un nombre aléatoire r, entre 0 et
R, et calculer x=aAr modulo n ; o pré-calculer h=H(x) ; o pré-calculer la signature de h : z=hAd modulo n ; o calculer g=G(m, z) , où m est le message à signer, une fois celui-ci connu ; o calculer y=r+s*g et ainsi obtenir la signature (z,y) ;
• VER_INV est le procédé de vérification de signature (z,y) du message m, et consiste à :
1 calculer g=G(m, z) ;
' calculer x=aAy * aA (-n*g) modulo n ;
' calculer h=H(x) ;
" vérifier que zAe = h modulo n et que y est dans le bon intervalle [0,R+2Λ(| |s| |+| |g| I)] .
Comme on peut le voir aisément, ce schéma est « à la volée », car les étapes premières de la signature
(précisément, jusqu'au calcul de g non inclus) peuvent être faites sans connaître le message, et donc avant la réception de celui ci, comme une étape de pré calcul. Les étapes finales étant très rapides, le schéma est « à la volée ».
La sécurité de ce schéma repose sur la difficulté de trouver une racine e-ieme modulo n. La preuve est « tight ».
Ce schéma permet donc de faire une variante du RSA, mais avec un caractère « à la volée ».
L'avantage en terme de vitesse est grand : le calcul en ligne (c'est à dire une fois reçu le message m) n'est qu'un calcul de haché et une multiplication. Au contraire, le RSA nécessite le calcul d'une exponentiation d'au moins 1024 bits. Ainsi, notre système est environ 1024 fois plus rapide que le RSA classique, tout en gardant la même sécurité « tight ».
Enfin, on remarquera qu'il est possible, comme dans le RSA, de définir d non pas modulo (p-1) (q-1) , mais modulo PPCM(p-1,q-1) , où PPCM est le plus petit commun multiple.
Alors, ed=l modulo PPCM (p-1, q-1) . Le reste est inchangé.
Un autre exemple est celui où S est la signature de Rabin et où le procédé d'identification sans divulgation d'information est Poupard-Stern.
Plus précisément, une telle combinaison nous permet d'obtenir un schéma de signature qui utilise le schéma Poupard-Stern, comme étant le procédé d'identification sans divulgation d'information, et le schéma Rabin, comme étant le schéma de signature, tel que le schéma de signature utilise les procédés suivants :
• GEN_INV est le procédé de génération de clé publique et clé secrète et consiste à : " générer un paramètre a appelé base ;
1 générer deux premiers p et q ; 1 retourner n=p*q comme clé publique, et (p, q, s=n- (p-1) * (q-1) ) comme clé privée, la taille de s en bit étant connue, et notée | | s | | , ainsi que celle de la fonction de hachage G, notée I IgI I , R désignant la valeur maximale du nombre aléatoire dans le procédé de génération de signature ; • SIGN_INV est le procédé de génération de signature, et consiste à : o générer un nombre aléatoire r, entre 0 et
R, et calculer x=aAr modulo n o pré-calculer h=H(x)
o pré-calculer, à l'aide de p et q, la signature z comme étant une racine carrée de h modulo n o calculer g=G(m, z) , où m est le message à signer, une fois celui-ci connu ; o calculer y=r+s*g et ainsi à obtenir la signature (z,y) • VER INV est le procédé de vérification de signature (z,y) du message m, et consiste à :
1 calculer g=G(m, z) ;
1 calculer x=aAy * aA (-n*g) modulo n ; 1 calculer h=H(x) ;
1 vérifier que zA2 = h modulo n et que y est dans le bon intervalle
[0,R+2Λ(| |s| |+| |g| I)] .
Comme on peut le voir aisément, ce schéma est « à la volée », car les étapes premières de la signature (précisément, jusqu'au calcul de g non inclus) peuvent être faites sans connaître le message, et donc avant la réception de celui ci, comme une étape de pré calcul. Les étapes finales étant très rapides, le schéma est « à la volée ».
La sécurité de ce schéma repose sur la difficulté de factoriser un grand nombre. La preuve est « tight ».
Ce schéma permet donc de faire une variante du RSA, mais avec un caractère « à la volée ».
De même que pour l'exemple précédent, l'avantage en terme de vitesse est grand : le calcul en ligne n'est qu'un calcul de haché et une multiplication. Au contraire, le Rabin nécessite le long calcul d'une racine carré. Ainsi, notre système est environ 1024 fois plus rapide que le Rabin classique, tout en gardant la même sécurité « tight ».
Certaines variantes habituelles peuvent être appliquées à notre deuxième partie de l'invention.
Notamment, dans les procédés de vérification de nos deux exemples, la quantité alpha=aA (-n) modulo n peut être pré calculée, rendant ainsi le calcul de x plus rapide.
Cela nous donne les deux variantes suivantes :
La première variante consiste en un schéma de signature qui utilise le schéma Poupard-Stern comme étant le procédé d'identification sans divulgation d'information, et le schéma RSA comme étant le schéma de signature, tel que ce schéma selon la première variante utilise les procédés suivants
• GEN_INV est le procédé de génération de clé publique et privée et consiste à : " générer un paramètre a appelé base,
1 générer deux premiers p et q, tel que (p-1) et (q-1) soient premiers avec un exposant public e, et
1 retourner (n=p*q,e,alpha=aA (-n) modulo n) comme clé publique, et (d=eA(-l) modulo (p-1) * (q-1) , s=n- (p-1) * (q-1) )
comme clé privée, la taille de s en bit étant connue, et notée | | s | | , ainsi que celle de la fonction de hachage G, notée I IgI I, R désignant une valeur maximale du nombre aléatoire dans le procédé de génération de signature ;
• SIGN_INV est le procédé de génération de signature, et consiste à : o générer un nombre aléatoire r, entre 0 et R, et calculer x=aAr modulo n ; o pré-calculer h=H(x) ; o pré-calculer la signature de h : z=hAd modulo n ; o calculer g=G(m, z) , où m est le message à signer, une fois celui-ci connu; o calculer y=r+s*g, et ainsi à obtenir la signature (z,y) ;
• VER_INV est le procédé de vérification de signature (z,y) du message m, et consiste à :
1 calculer g=G(m, z) ;
1 calculer x=aAy * alphaAg modulo n ;
' calculer h=H(x) ;
1 vérifier que zAe = h modulo n et que y est dans le bon intervalle
[0,R+2A(| |s| |+| |g| I)] .
La seconde variante consiste en un schéma de signature qui utilise le schéma Poupard-Stern comme étant le procédé d'identification sans divulgation d'information, et le schéma Rabin, comme étant le schéma
de signature, tel que ce schéma selon la seconde variante utilise les procédés suivants :
• GEN_INV est le procédé de génération de clé publique et clé secrète et consiste à : " générer un paramètre a appelé base ;
1 générer deux premiers p et q ; ' retourner (n=p*q,alpha=aA (-n) modulo n) comme clé publique, et (p,q, s=n- (p- l)*(q-l)) comme clé privée, la taille de s en bit étant connue, et notée
I I s I I , ainsi que celle de la fonction de hachage G, notée I IgI I, R désignant la valeur maximale du nombre aléatoire dans le procédé de génération de signature ;
• SIGN_INV est le procédé de génération de signature, et consiste à : o générer un nombre aléatoire r, entre 0 et
R, et calculer x=aAr modulo n o pré-calculer h=H(x) o pré-calculer, à l'aide de p et q, la signature z comme étant une racine carrée de h modulo n o calculer g=G(m, z) , où m est le message à signer, une fois celui-ci connu ; o calculer y=r+s*g et ainsi à obtenir la signature (z,y)
• VER_INV est le procédé de vérification de signature (z,y) du message m, et consiste : " calculer g=G(m, z) ;
1 calculer x=aAy * alphaAg modulo n ;
1 calculer h=H(x), et enfin " vérifier que zA2 = h modulo n et que y est dans le bon intervalle [0,R+2Λ(| |s| |+| |g| I)] .
De plus, la clé peut être compressée, c'est à dire stockée sous une forme prenant moins de place. Ainsi, on voit aisément dans l'exemple avec Rabin que s peut ne pas être stocké, mais directement recalculé à chaque utilisation par une simple soustraction.
De manière préférentielle, dans l'exemple avec le RSA, la clé privée est générée sous la forme :
(d=eΛ(-l) modulo (p-l)*(q-l), k=(e*d-l) / ( (p-1) * (q-1) ) ) , et dans lequel, au moment de la signature, s est recalculé par la formule s=n- (ed-1) /k.
k étant petit (car 0<=k<=e et e petit) , le stockage sous cette forme de la clé privée est d'autant moins coûteux en mémoire.
D'une autre manière préférentielle, dans l'exemple avec le Rabin, la clé privée est générée sous la forme :
(P,q) et dans lequel, au moment de la signature, s est recalculé par la formule s=p*q- (p-1) * (q-1) .
Il est à noter que dans le RSA, de manière préférentielle, d est défini comme : d=eA(-l) modulo PPCM(p-l,q-1) .
Dans le RSA, d'une autre manière préférentielle, d est défini commme : d=eA(-l) modulo u*PPCM(p-1,q-1) , où u est un nombre entier positif non nul.
Etant parfaitement généralistes, toutes les variantes de cette deuxième partie de l'invention ne peuvent être décrites en détail. On citera notamment l'utilisation possible des signatures RSA, Rabin, Paillier, El Gamal, Goh-Jarecki comme signature S ; parallèlement, on citera l'utilisation possible des procédés d'identification sans divulgation d'information Fiat-Shamir, Poupard-Stern, Girault-Poupard-Stern.
La signature de Paillier est décrite « Public-key cryptosystems based on composite degree residuosity classes », Proceedings of EUROCRYPT 99.
La signature El Gamal est décrite « A public key cryptosystem and a signature scheme based on discrète logarithms", IEEE Transactions on Information Theory}, 1985.
De plus, la signature de Goh-Jarecki est décrite dans « A signature scheme as secure as the Diffie-Hellman problem », Proceedings of EUROCRYPT 03.
En outre, les deux schémas à sécurité prouvé « tight » et « à la volée » destiné à un composant électronique de cette invention sont mis en oeuvre un composant électronique portable du type carte à puce.
Enfin, le calcul de ces deux schémas s'effectue sur un module TPM pour « Trusted Platform Module » installé dans un PC non sécurisé.