PROCEDE CRYPTOGRAPHIQUE NOTAMMENT A CLE PUBLIQUE
La présente invention concerne un procédé cryptographique, notamment à clé publique. L'invention trouve une application particulièrement avantageuse dans le domaine de la protection contre la fraude des puces à circuit intégré à logique câblée. Ce type de circuit équipe notamment les cartes prépayées utilisées dans des applications diverses, notamment des transactions telles que l'établissement de communications téléphoniques, le paiement d'objets dans un distributeur automatique, la location d'emplacements de stationnement à partir d'un parcmètre, le paiement d'un service comme un transport public ou la mise à disposition d'infrastructures (péage, musée, bibliothèque,...), ou les étiquettes radio-fréquence (en anglais, "Radio Frequency IDentification Tags" ou RFID) utilisées dans le traçage des palettes, des produits de grande consommation, des billets de banque, etc. Actuellement, les puces à logique câblée sont susceptibles de subir différents types de fraude. Un premier type de fraude consiste à dupliquer sans autorisation la carte, le terme de « clonage » étant souvent utilisé pour caractériser cette opération. Un deuxième type de fraude consiste à modifier les données attachées à une carte, en particulier le montant du crédit inscrit dans la carte. Pour lutter contre ces fraudes il est fait appel à des procédés cryptographiques, d'une part, pour assurer l'authentification de la carte au moyen d'une authentification et/ou pour assurer l'authentification des données au moyen d'une signature numérique et, d'autre part, pour assurer le cas échéant la confidentialité des données au moyen d'un chiffrement.
Les procédés cryptographiques mettent en jeu deux entités qui sont, dans le cas de l'authentification, une entité à authentifier et une entité vérificatrice. L'authentification peut être soit symétrique, soit asymétrique. Lorsqu'elle est symétrique (on parle alors de cryptographie "à clé secrète", les deux termes étant synonymes), les deux entités partagent exactement la même information, en particulier une clé secrète. Lorsqu'elle est asymétrique (on parle alors de cryptographie "à clé publique", les deux termes étant synonymes), l'entité à authentifier possède une paire de clés dont l'une est secrète et l'autre est publique, l'entité vérificatrice ne disposant que de la clé publique. Il n'y a pas de clé secrète partagée entre les deux entités. Dans de nombreux systèmes, notamment lorsque la puce est de type "à logique câblée", seule la cryptographie symétrique est mise en œuvre avec des cartes prépayées, car la cryptographie asymétrique reste lente et coûteuse. Les premiers mécanismes d'authentification développés en cryptographie symétrique, appelés mécanismes passifs, consistent à calculer une fois pour toutes une valeur d'authentification, différente pour chaque carte, à la stocker dans la mémoire de la carte, à la lire à chaque transaction et à la vérifier en interrogeant une application du réseau supportant la transaction où les valeurs d'authentification déjà attribuées sont soit stockées soit recalculées. Ces mécanismes assurent une protection insuffisante parce que la valeur d'authentification peut être espionnée, reproduite et rejouée frauduleusement, étant donné qu'elle est toujours la même pour une carte donnée, ce qui permet ainsi de réaliser un clone de cette carte. Pour lutter contre les clones, les mécanismes d'authentification passifs de cartes sont remplacés par des mécanismes d'authentification actifs qui peuvent en outre assurer l'intégrité des données. Le principe général des mécanismes d'authentification actifs symétriques est le suivant : lors d'une authentification, la puce électronique et l'application calculent une valeur d'authentification qui est le résultat d'une fonction appliquée à une liste d'arguments déterminée à chaque authentification. La liste d'arguments peut comprendre un aléa, c'est à dire une donnée déterminée par l'application à chaque authentification, une donnée contenue dans la puce électronique et une clé secrète connue de la
puce électronique et de l'application. Lorsque la valeur d'authentification calculée par la puce électronique est identique à la valeur d'authentification calculée par l'application, la puce électronique est jugée authentique et la transaction entre la puce électronique et l'application est autorisée. De tels mécanismes d'authentification sont largement connus mais la plupart exigent des capacités de calcul au moins égales à celles dont dispose un microprocesseur. Ces mécanismes conviennent donc aux cartes à microprocesseur, mais rarement aux puces à logique câblée, lesquelles disposent de moyens de calcul beaucoup plus limités. Un premier pas a été effectué lorsque des mécanismes actifs d'authentification symétriques ont pu être intégrés dans des puces à logique câblée. Par exemple, la demande de brevet français n° 2826531 décrit un procédé permettant de spécifier de tels mécanismes. On notera que la valeur d'authentification produite par ces mécanismes peut aussi, comme l'enseigne la demande de brevet français précédente, être interprétée comme une séquence de bits pseudo-aléatoires et, en faisant varier au moins l'un des paramètres d'entrée, le procédé de calcul de la valeur d'authentification devient alors un procédé de génération de bits pseudo-aléatoires. Cependant, les mécanismes à clé secrète imposent que l'entité vérificatrice en charge de vérifier l'authenticité de la puce dans un téléphone public, un terminal de paiement électronique, ou encore un portillon de transport en commun, connaisse la clé secrète détenue par ladite puce. Il en découle un inconvénient majeur, à savoir que, si l'on souhaite que ladite entité puisse authentifier n'importe quelle puce émise en relation avec l'application, elle doit soit stocker les clés secrètes de toutes les puces, soit stocker une clé de base, appelée aussi clé-mère ou clé-maître, permettant de retrouver la clé secrète de n'importe quelle puce. Dans les deux cas, une quantité suffisante d'informations doit être stockée pour pouvoir retrouver les clés secrètes de toutes les puces émises, cette quantité d'informations étant également suffisante pour pouvoir fabriquer des clones de l'une quelconque desdites puces. Il s'ensuit qu'une intrusion réussie contre n'importe quel dispositif de vérification anéantirait la sécurité de l'application dans son ensemble.
Il existait donc un besoin impérieux de pouvoir intégrer un mécanisme actif d'authentification à clé publique dans une puce à logique câblée, notamment dans les applications déployant un grand nombre de puces, ce qui est généralement le cas des applications utilisant des puces à logique câblée, car elles sont très bon marché. Un tel mécanisme est enseigné dans la demande de brevet français n° 03 01108. Auparavant il n'en existait pas, la raison en étant que les mécanismes à clé publique requièrent généralement de nombreuses opérations portant sur de grands nombres, et donc qu'ils sont a priori inappropriés à une intégration dans des puces à logique câblée, dans lesquelles la surface de silicium est extrêmement réduite, et dont la logique de calcul se réduit par conséquent au câblage d'opérations extrêmement élémentaires. Le procédé décrit dans la demande de brevet citée ci-dessus constitue donc une première étape dans l'intégration de mécanismes d'authentification à clé publique, l'efficacité de ce mécanisme reposant sur la forme de la valeur d'authentification ainsi calculée. En effet, ladite valeur n'implique qu'une multiplication, effectuée par l'entité à authentifier, de deux opérandes, à savoir la clé secrète s et une valeur c, appelée défi, choisie par l'entité vérificatrice et communiquée à l'entité à authentifier, ainsi qu'une addition. Plus précisément, le procédé connu ci-dessus consiste pour l'entité à authentifier à calculer une valeur d'authentification y de la forme y = r + s-c (ou y = r-s-c), où r est un aléa. La complexité du calcul de la valeur d'authentification ne réside en fait que dans le calcul de la multiplication s • c . Les autres mécanismes à clé publique existants ne présentent pas cet avantage. En effet, certains d'entre eux impliquent, dans le calcul de la valeur d'authentification, des calculs de puissances de nombres, c'est à dire des opérandes de la forme sc , où s désigne une clé secrète appartenant à une paire de clés asymétriques et c le défi choisi par l'entité vérificatrice, ce qui est inapproprié car beaucoup trop complexe en terme de calcul, dans des puces à logique câblée.
D'autres mécanismes impliquent quant à eux le calcul d'une valeur d'authentification plus proche en structure de la valeur d'authentification du précédent procédé. Ainsi, dans ces procédés, la valeur d'authentification calculée est de la forme y = r + s -c (modn ) (ou y = r-s-c (mod n )), où l'opération (modn ) consiste à soustraire à la valeur r + s - c (ou r-s -c ) un multiple du nombre n de façon à obtenir une valeur d'authentification y comprise dans l'intervalle [0,n[ . Ce second type de mécanismes semble donc être effectivement mieux adapté aux puces à logique câblée, mais reste toutefois relativement complexe en calcul du fait de l'opération (modn ). C'est donc en ce sens que l'invention décrite dans la demande de brevet français n° 03 01108 est une réelle amélioration puisqu'il n'y a plus d'opération (mod « ). Toutefois, selon les tailles de la clé secrète s et de la valeur c choisie par l'application, le calcul de la multiplication s -c peut devenir relativement trop complexe et donc trop coûteux pour être effectué par une puce à logique câblée. Aussi, le problème technique à résoudre par l'objet de la présente invention est de proposer un procédé cryptographique comprenant une opération de multiplication s -c d'une clé secrète s (disons, d'au moins 30 bits) destinée à l'authentification ou à la signature, par un nombre c , qui permettrait de réduire efficacement la complexité et le coût de calcul de ladite opération de multiplication s -c , afin de rendre possible une meilleure intégration dans les puces à logique câblée et, de façon plus générale et indépendamment de l'environnement (puces à logique câblée, cartes à microprocesseur,...), d'accélérer le calcul d'une multiplication d'une clé secrète s par un nombre quelconque dans tout mécanisme à clé publique entraînant le calcul d'une valeur d'authentification y = r±s -c , avec ou sans l'opération (mod n ). La solution au problème technique posé consiste, selon la présente invention, en ce que ladite opération de multiplication s -c utilise une prédécomposition d'au moins un des opérandes s et c en nombre entiers dont la décomposition binaire a un poids de Hamming sensiblement inférieur au poids de Hamming de la décomposition binaire dudit opérande.
Par souci de simplification, on qualifiera de « petit » un tel poids de Hamming. Rappelons tout d'abord le mécanisme de calcul généralement utilisé dans des puces à logique câblée. On présentera ici le cas de l'application du procédé de l'invention à la clé secrète s . Pour calculer la valeur y - r ± s • c , on utilise la décomposition binaire de la clé secrète s , c'est à dire s = 2k +2'2 +... + 2'ra . Calculer y = r + s -c (ou y = r-s-c) revient donc à effectuer: r + 2'1 -c + 2'2 •C + ... + 2''"' - c (ou: r-2'1 -c-2'2 • C-...-2'"' -c ) en considérant successivement les termes 2lJ -c puisque multiplier un nombre par 2,J revient à décaler l'écriture binaire de ce nombre vers la gauche de i. positions. Il suffit ensuite d'additionner le nombre décalé obtenu à l'aléa r . Ainsi, il y a autant d'additions que de décalages, et ce nombre de décalages est égal au nombre de termes du type 2( -c , soit m . Ce nombre m correspond au "poids de Hamming" de la clé secrète s , c'est à dire au nombre de bits non nuls utilisés dans la décomposition binaire de la clé secrète s , alors que la taille de la clé secrète s correspond au nombre total de bits intervenant dans la décomposition binaire de s . Ainsi, plus le poids de Hamming m est grand et plus le calcul de la valeur d'authentification y est coûteux. Soulignons que l'on peut parfaitement faire également appel aux étapes de la méthode de calcul décrite ci-dessus lorsqu'une opération (mod n ) intervient dans le calcul de la valeur d'authentification. Dans un premier mode de réalisation, le procédé de l'invention réside dans le fait de prédécomposer la clé secrète s comme produit de nombres entiers plus petits, de sorte que ces facteurs aient une décomposition binaire de poids de Hamming petit, c'est à dire sensiblement inférieur au poids de Hamming m de la décomposition binaire de la clé secrète s , et d'effectuer successivement les multiplications selon ces nombres entiers, ce qui facilite et accélère le calcul de y = r ±s -c , et plus généralement tout calcul cryptographique faisant intervenir une multiplication avec la clé secrète s , comme le calcul d'une signature électronique par exemple. Plus précisément, la présente invention consiste à utiliser une clé secrète s égale au produit de k facteurs de plus petite taille sl,s2,...,slc , de
sorte que calculer s - c revienne à calculer tout d'abord la valeur s1 -c puis calculer s2 -(sl -c) , et ainsi de suite pour finalement calculer sk -(sk_l -sk_2 -...-s2 -sï -c). L'intérêt du procédé de l'invention réside dans le fait de choisir les k valeurs de manière que chaque valeur st ait une décomposition binaire de poids de Hamming (que l'on notera PH(si )) petit. En effet, comme on l'a vu plus haut, multiplier un nombre a de taille A par un nombre b de taille B revient alors à effectuer PH(α ) additions de blocs de B bits ou, de façon symétrique, PH(b ) additions de blocs de A bits avec au final un résultat de taille égale à A + B . Ainsi, de façon classique, effectuer la multiplication de ladite clé secrète s de taille S par la valeur c de taille C consiste à effectuer PH(s ) additions de blocs de C bits. Avec la présente invention, en notant S. la taille de s où l ≤ i≤ k, le calcul sl -c implique PH(^ ) additions de blocs de C bits, le résultat étant alors de taille C + S Ensuite, calculer s2 -(s1 -c) implique PH(s2 ) additions de blocs de C+St bits, le résultat étant alors un nombre de taille C + S! +S2. On continue le processus jusqu'à sk -(sk_l -sk_2 -...-s2 -s1 -c). Préférentiellement, on utilisera k = 2. Par exemple, considérons une clé secrète s de taille 160, dont la décomposition binaire a un poids de Hamming égal à 64 et une valeur c de taille 80. La multiplication classique de c par s consiste donc en 64 additions de blocs de 80 bits; ce qui est équivalent alors à 5120 additions d'un bit (additionner k bits est équivalent à additionner k fois un bit). Considérons maintenant que, conformément à l'invention, on construit s de la forme suivante : s = s2 -sl t avec sl de taille 18 et ayant une décomposition binaire de poids de Hamming égal à 6, et s2 de taille 142 et ayant une décomposition binaire de poids de Hamming égal à 17. Ces valeurs sont prises de manière à assurer certaines contraintes de sécurité et permettre d'optimiser le coût de calcul du produit s -c . En appliquant le procédé selon l'invention, il faut calculer dans un premier temps la valeur sx -c, ce qui implique donc 6 additions d'un bloc de 80 bits et la valeur obtenue est alors de taille 98 (= 18 + 80). Le calcul s2 -(sl -c) implique ensuite 17 additions de blocs de 98 bits. Le coût de calcul total est donc de 17*98 + 6*80=2146 additions d'un bit.
On a donc au final divisé par plus de 2 la complexité du calcul selon le procédé classique, ce qui permet d'intégrer plus facilement l'opération de multiplication dans les puces à logique câblée (voire même à microprocesseur) en limitant le nombre de composants nécessaires (portes logiques par exemple) et donc en limitant en conséquence la surface de silicium des puces, conformément au problème technique que l'invention s'est proposée de résoudre. La description qui précède se réfère à un mode de réalisation dans lequel la clé secrète est décomposée en un produit de nombres entiers ayant chacun une décomposition de poids de Hamming petit. Considérons maintenant un nombre a de taille / et ayant une décomposition binaire de poids de Hamming m grand; on a donc: α = 2,'1 +2''2 +... + 2'"' . Le nombre a = (2l -ï) -a , appelé "complémentaire de a ", présente des bits non nuls aux positions où le nombre a a des bits nuls; et a ayant une décomposition binaire de grand poids de Hamming, le nombre de bits nuls de a est petit, et par conséquent, a a quant à lui une décomposition binaire de poids de Hamming petit. Ainsi, si l'on considère une clé secrète s égale au produit de nombres ayant une décomposition binaire de grand poids de Hamming, il est alors possible de calculer efficacement la multiplication d'un nombre par la clé secrète en se ramenant au calcul de la multiplication par les complémentaires des facteurs de la clé secrète. C'est ainsi que, dans un deuxième mode de réalisation du procédé conforme à l'invention, on considère une clé secrète s égale au produit de deux nombres, sx et s2, ayant une décomposition binaire de poids de Hamming grand et de tailles respectives /, et l2. La multiplication de s par un nombre c vaut s -c = (s2 -s1) -c mais vaut aussi: ((2'- -l)-&).((2'. -l)-£,).c , ce qui peut s'écrire aussi: (2l2+li - (2 s2 + 2 s1 + 2ll + 2!l )+ s2 + s1 +s2 -sï +l)- c , où, comme décrit ci-dessus, les nombres s2 et .s. ont une décomposition binaire de poids de Hamming petit. Tous les termes de la parenthèse sont alors de poids petit, et l'on se retrouve ainsi ramené au premier mode de
réalisation présenté plus haut puisque la prédécomposition de la clé secrète s fait apparaître des nombres entiers exprimés en fonction de nombres entiers complémentaires ayant une décomposition binaire de poids de Hamming sensiblement inférieur au poids de Hamming de la décomposition binaire de la clé secrète s . En résumé, le procédé cryptographique, objet de la présente invention, a pour but d'accélérer le calcul d'une multiplication par la clé secrète 5 en décomposant ladite clé secrète en produit de nombres entiers ayant une décomposition binaire de poids de Hamming petit ou en produit de nombres entiers dont les complémentaires ont une décomposition binaire de poids de Hamming petit. Bien entendu, il est possible de faire intervenir dans une même prédécomposition de la clé secrète s à la fois des nombres entiers ayant une décomposition de poids Hamming grand et de poids de Hamming petit. Lors du calcul, un terme de poids grand sera remplacé par l'expression faisant intervenir son complémentaire α = (2z -l)-α si a est de poids grand. Il faut également noter que, si dans la description qui précède on n'a considéré que la clé secrète 5 comme opérande auquel est appliqué le procédé de l'invention, ce même procédé peut s'appliquer également au nombre c ou encore aux deux opérandes simultanément. Dans le cas d'une authentification, le nombre c peut être un défi fourni par l'entité vérificatrice à l'entité à authentifier, par contre, dans le cas d'une signature, le nombre c est généré par l'entité signataire elle-même. Dans le cas de l'authentification d'une puce électronique ou du calcul d'une signature par une puce électronique, le résultat de la prédécomposition de la clé secrète s peut être stocké dans la puce électronique. Par ailleurs, dans le cas de l'authentification, le résultat de la prédécomposition du nombre c peut être fourni à la puce électronique par une application.