Brevet FR3000333A1 — publié le 20140627

PROCEDE DE GENERATION D'UNE CLE DE SESSION A PARTIR D'UNE CLE SECRETE La présente invention concerne un procédé de génération d'une clé de session à partir d'une clé secrète. L'invention concerne également une unité de cryptographie et un système cryptographique adaptés pour la mise en oeuvre du procédé. La présente invention s'inscrit dans le domaine de la cryptographie. La cryptographie permet de générer une clé de session à partir d'une clé secrète et d'information publique. La génération de la clé de session implique des calculs dont l'observation permet de déduire la clé secrète et des calculs ne le permettant pas. Les calculs permettant de déduire la clé secrète sont des calculs critiques en terme de sécurité tandis que les autres calculs sont susceptibles d'être délégués à une unité non sécurisée. Ainsi, pour un équipement de cryptographie comprenant une unité sécurisée et une unité non sécurisée, il est souhaitable de réduire au maximum les calculs de l'unité sécurisée tout en garantissant que l'interception des communications entre l'unité sécurisée et l'unité non sécurisée ne permette pas de déduire la clé secrète. Il est connu du document FR-A-2 877 453 un procédé de délégation sécurisée du calcul d'une application bilinéaire à un serveur de calcul. Mais, le procédé décrit dans ce document implique que l'unité sécurisée effectue des opérations d'inversion et d'exponentiation modulaire. Ces opérations sont coûteuses en temps de calcul. Le procédé n'est pas applicable au cas où l'unité sécurisée a une capacité de calcul ne permettant pas d'effectuer les opérations d'inversion et d'exponentiation. Il existe donc un besoin pour un procédé de génération d'une clé de session à partir d'une clé secrète qui soit applicable même pour des unités sécurisées ayant une faible capacité de calcul. A cet effet, il est proposé un procédé de génération d'une clé de session à partir d'une clé secrète et d'un paramètre public par une unité de cryptographie propre à déléguer des calculs à une unité de calcul. Le procédé comporte les étapes de génération de jetons par l'unité de cryptographie et d'envoi de données issues des jetons vers l'unité de calcul. Le procédé comporte également les étapes de réception d'au moins une valeur de l'unité de calcul, chaque valeur reçue étant la valeur d'une fonction bilinéaire appliquée à une première donnée issue des jetons et à l'un parmi une deuxième donnée issue des jetons et le paramètre public, et de déduction de la clé de session à partir de la ou des valeurs reçues. Suivant des modes de réalisation particuliers, le procédé comprend une ou plusieurs des caractéristiques suivantes, prise(s) isolément ou suivant toutes les combinaisons techniquement possibles : - chaque jeton a une valeur - les données issues des jetons sont l'ensemble des jetons générés - les données issues des jetons sont l'ensemble des jetons générés et d'au moins un jeton égal à une somme, pour chaque jeton, du produit d'une puissance du nombre 2 avec la valeur d'un endomorphisme appliqué au jeton, c'est-à-dire : PL+1 = a1*(p1 (P1) + a2*p2(P2) +...+ aL* (pL(PL) où: - ai est une puissance du nombre 2; - Pi est la valeur du jeton, et - (pi est un endomorphisme. - les données issues des jetons sont l'ensemble des jetons générés et d'au moins un jeton égal à une somme, pour chaque jeton, du produit d'une puissance du nombre 2 avec la valeur d'un endomorphisme appliqué au jeton, c'est-à-dire : PL+1 = a1*(p1 (P1) + a2*(p2(P2) +...+ aL* pL(PL) où: - ai est un nombre entier inférieur à 10; - Pi est la valeur du jeton, et - (pi est un endomorphisme. - le procédé comporte également une étape de sélection de jetons parmi l'ensemble des jetons générés de sorte que la somme de la valeur des jetons sélectionnés soit égale à la clé secrète, le nombre de jetons sélectionnés étant inférieur au nombre de jetons générés. - à l'étape de déduction, la clé de session est obtenue par pour les jetons sélectionnés. - les jetons générés sont les valeurs de points d'une courbe elliptique. - les jetons générés sont deux nombres inverses l'un de l'autre. - les données issues des jetons sont le produit d'un des deux jetons avec la clé secrète et le produit de l'autre des deux jetons avec le paramètre public. A cet effet, il est proposé un procédé de génération d'une clé de session à partir d'une clé secrète et d'un paramètre public par un système cryptographique, le système cryptographique comportant une unité de calcul, et une unité de cryptographie propre à déléguer des calculs à l'unité de calcul. Le procédé comporte les étapes de génération de jetons par l'unité de cryptographie et de transmission de données issues des jetons depuis l'unité de cryptographie vers l'unité de calcul. Le procédé comprend aussi les étapes de calcul par l'unité de calcul d'au moins une valeur d'une fonction bilinéaire appliquée à une première donnée issue des jetons et à l'un parmi une deuxième donnée issue des jetons et le paramètre public, de transmission de la ou des valeurs calculées depuis l'unité de calcul à l'unité de cryptographie, et de déduction de la clé de session à partir de la ou des valeurs calculées. Il est également proposé une unité de cryptographie adaptée pour la mise en oeuvre d'un procédé tel que décrit précédemment. Il est également proposé un système comportant une unité de calcul, et une unité de cryptographie propre à déléguer des calculs à l'unité de calcul. Le système cryptographique est adapté à mettre en oeuvre le procédé tel que décrit précédemment. D'autres caractéristiques et avantages de l'invention apparaîtront à la lecture de la description détaillée qui suit de modes de réalisation de l'invention, donnés à titre d'exemple uniquement et en référence aux dessins qui sont : figure 1, un schéma de l'architecture d'un système cryptographique ; figure 2, un ordinogramme d'un exemple de mise en oeuvre d'un procédé selon un premier mode de réalisation de l'invention, et figure 3, un ordinogramme d'un exemple de mise en oeuvre d'un procédé selon un deuxième mode de réalisation de l'invention. Le système cryptographique 10 représenté à la figure 1 comprend une unité de cryptographie 12, une unité de calcul 14, un bus 16 de communication et une unité externe 20 de mémorisation. L'unité de cryptographie 12 comporte une unité interne 22 de mémorisation et une unité de traitement 24. L'unité de traitement 24 est propre à effectuer des opérations sur une clé secrète. La clé secrète est notée Sk dans toute la suite de la description. L'unité de traitement 24 est donc propre à effectuer des opérations sur des données critiques en terme de sécurité. L'unité de traitement 24 présente une bonne capacité de résistance à la rétroingéniérie. La rétroingéniérie (traduction littérale de l'anglais « reverse engineering ») est également appelée ingénierie inversée ou ingénierie inverse. La rétroingéniérie est une activité permettant d'étudier un objet pour en déterminer le fonctionnement et les données internes. L'unité de traitement 24 est propre à mémoriser des données sur l'unité interne 22 de mémorisation et l'unité externe 20 de mémorisation. L'unité interne 22 de mémorisation est protégée des attaques extérieures. De préférence, l'unité interne 22 de mémorisation est seulement utilisée pour mémoriser des données sensibles. L'unité externe 20 de mémorisation n'est pas protégée des attaques extérieures. L'unité externe 20 de mémorisation est propre à mémoriser uniquement des données non sensibles. Selon l'exemple de la figure 1, l'unité de cryptographie 12 est une carte à puce. En variante, l'unité de cryptographie 12 est une carte SD, un mobile ou un processeur de sécurité. L'unité de calcul 14 est propre à effectuer des opérations sur des éléments non sensibles. L'unité de calcul 14 a une capacité de calcul disponible supérieure à la capacité de calcul de l'unité de cryptographie 12. L'unité de calcul 14 présente un niveau de sécurité inférieure à l'unité de cryptographie 12. Notamment, l'unité de calcul 14 présente une faible capacité de résistance à la rétroingéniérie. L'unité de calcul 14 est un processeur de smartphone. En variante, l'unité de calcul 14 est un serveur ou un processeur générique. Le bus de communication 16 est propre à permettre des échanges de données entre l'unité de calcul 14 et l'unité de cryptographie 12. Le bus de communication 16 n'est pas sécurisé. Selon une variante, les échanges de données entre l'unité de calcul 14 et l'unité de cryptographie 12 sont chiffrés, ce qui impose leur déchiffrement pour le cas où une personne intercepte les données échangées. Le fonctionnement du système cryptographique 10 est maintenant décrit en référence à un premier mode de réalisation d'un procédé de génération d'une clé de session à partir de la clé secrète Sk et d'un paramètre public X, le procédé de génération étant illustré par l'ordinogramme de la figure 2. Le procédé de génération comporte une étape 100 de génération de jetons. L'étape 100 de génération de jetons est mise en oeuvre par l'unité de cryptographie 12. L'étape 100 de génération de jetons comprend une étape 102 de génération de L points sur une courbe elliptique C. L est un nombre entier non nul. Une courbe elliptique C est définie sur un corps K et est une courbe algébrique non singulière de degré 3 comprenant le point à l'infini et l'ensemble des couples (X,Y) appartenant à K2 qui satisfont l'équation de Weierstrass : r + aiXY + a3Y = X3+ a2X2 + a4X + as Où al, ..., as appartiennent à K. Les points sont notés P1, ..., PL. L'étape 100 de génération de jetons comprend également une étape 104 de mémorisation des L points générés par l'unité interne 22 de mémorisation. Le procédé comporte, en outre, une étape 104 de sélection de points parmi les L points P1, ... PL générés à l'étape 102 de génération. A l'étape 104 de sélection de points, l'unité de cryptographie 12 choisit aléatoirement i points, i étant un nombre entier. En supposant, à titre d'exemple que les points choisis sont les i premiers points, Un i+1 ième point Pi+1 est calculé de la façon suivante : Pi+1 = Sk - (P1 + + Pi) Ainsi, ceci s'écrit : Sk = P1+ + Pi + Pi+1 Le i+1 ième point Pi+1 est ajouté à la liste des points sélectionnés parmi les L points P1, ... PL. Le nombre i de points choisis est strictement inférieur au nombre L de points générés. Les nombres i de points choisi et L de points générés sont choisis en fonction du niveau de sécurité désiré. Le procédé comporte également une étape 106 de calcul de la clé de session. L'étape 106 de calcul de la clé de session comprend une étape 108 d'envoi vers l'unité de calcul 14 des valeurs des L points générés P1, ..., PL à l'étape 102 de génération de L points. L'étape 108 d'envoi est mise en oeuvre par l'unité de cryptographie 12 via le bus 16. L'étape 106 de calcul de la clé de session comprend alors une étape 110 de réception par l'unité de calcul 14 des valeurs des L points générés P1, ..., PL. L'étape 106 de calcul de la clé de session comprend également une étape 112 de calcul de la valeur E(Pj,X) d'une application bilinéaire E sur courbe elliptique appliquée aux valeurs des points Pj et X pour chacun des L points générés P1, ..., PL. Le nombre j est un entier naturel compris entre 1 et L. L'étape 106 de calcul de la clé de session comporte aussi une étape 114 d'envoi à l'unité de cryptographie 12 de la valeur E(Pj,X) de l'application bilinéaire E sur courbe elliptique appliquée aux valeurs des points Pj et X pour chacun des L points générés P1, ..., PL. L'étape 114 d'envoi des valeurs E(Pj,X) est mise en oeuvre par l'unité de calcul 14 via le bus 16. L'étape 106 de calcul de la clé de session comporte également une étape 116 de réception par l'unité de cryptographie 12 des valeurs E(Pj,X) de l'application bilinéaire sur courbe elliptique appliquée aux valeurs des points Pj et X calculées pour chacun des L points générés P1, ..., PL. L'étape 106 de calcul de la clé de session comporte également une étape 118 de calcul de la valeur du produit des valeurs E(Pj,X) de I 'application bilinéaire sur courbe elliptique appliquée aux valeurs des points Pj et X pour les valeurs de j variant entre 1 et le nombre i+1. De part les propriétés de l'application E, E(Pj,X) =r1E(Pj,X), le produit calculé à l'étape 116 de calcul est égal à E(Sk,X). E(Sk,X) est la clé de session. Le procédé de génération permet de réduire la complexité des calculs à effectuer par l'unité de cryptographie 12. En effet, le procédé de génération permet que le calcul de l'application E sur courbes elliptiques soit effectué par l'unité de calcul 14. Ainsi, le procédé de génération proposé n'implique pas le calcul d'une exponentiation modulaire. Seules des multiplications dans le corps K sont utilisés. Le procédé de génération est donc applicable même si l'unité de cryptographie 12 a une faible capacité de calcul. En outre, la mise en oeuvre du procédé de génération est plus rapide que dans l'état de la technique puisque les calculs effectués par l'unité de cryptographie 12 sont plus simples. La sécurité de la clé secrète est garantie du fait de la difficulté du problème du sac à dos (aussi désigné sous le terme anglais de « Knapsack »). La clé secrète Sk est cachée par tous les Pi qui sont pris en nombre suffisant pour assurer un bon niveau de sécurité. Un attaquant qui arrive à apprendre la valeur des L points P1, ..., PL doit essayer toutes les combinaisons possibles de points jusqu'à trouver la clé secrète Sk. Les combinaisons possibles sont en si grand nombre que l'attaquant ne peut pas retrouver la clé secrète Sk. Selon une variante, au lieu d'utiliser comme jetons les valeurs des points P1, ..., PL générés, le choix possible est augmenté en prenant également des jetons qui sont des multiples des valeurs des points P1, ..., PL générés ou les valeurs d'un endomorphisme appliqué aux valeurs des points P1, ..., PL générés. En choisissant de petits multiples (par exemple 2*Pi, 4*Pi, 8*Pi... pour un point Pi) le calcul de ces multiples est très peu coûteux et peut s'effectuer rapidement sur l'unité de cryptographie 12. En choisissant un endomorphisme approprié, calculer les valeurs de l'endomorphisme appliqué aux valeurs des points P1, ..., PL générés s'avère peu coûteux en temps de calcul Cela permet d'augmenter le nombre de jetons possibles sans avoir à choisir de points supplémentaires sur la courbe elliptique. Il en résulte que la difficulté de la résolution du problème du sac à dos est plus grande, ce qui augmente encore la sécurité du procédé de génération. Le fonctionnement du système cryptographique 10 est maintenant décrit en référence à un deuxième mode de réalisation du procédé de génération de la clé de session à partir de la clé secrète Sk et du paramètre public X, le procédé de génération étant illustré par l'ordinogramme de la figure 3. Le procédé de génération comporte une étape 200 de génération de jetons. L'étape 200 de génération de jetons est mise en oeuvre par l'unité de cryptographie 12. L'étape 200 de génération de jetons comprend une étape 202 de génération d'un couple de nombres a et b, les nombres a et b étant l'inverse l'un de l'autre pour une loi « * » qui est appelée produit. Ceci signifie que le produit des nombres a et b est égal au neutre du corps K considéré. Cela s'écrit mathématiquement ainsi : a*b = 1 où 1 est le neutre du corps K considéré pour la loi « * ». L'étape 200 de génération de jetons comprend également une étape 204 de mémorisation du couple de nombres a et b par l'unité interne 22 de mémorisation. En variante, l'unité de cryptographie 12 code le couple d'entiers a et b et les mémorise dans l'unité externe 20 de mémorisation. Le procédé comporte également une étape 206 de calcul de la clé de session. L'étape 206 de calcul de la clé de session comporte une étape 208 de lecture de la valeur du couple de nombres a et b dans l'unité interne 22 de mémorisation. L'étape 206 de calcul de la clé de session comprend également une étape 210 de calcul des valeurs de nombres H et D. H est défini comme la valeur du produit du nombre a avec la clé secrète Sk. Ceci s'écrit mathématiquement : H = a*Sk. D est défini comme la valeur du produit du nombre b avec le paramètre public X. Ceci s'écrit mathématiquement : D = b*X. L'étape 206 de calcul de la clé de session comprend également une étape 212 d'envoi à l'unité de calcul 14 des valeurs des nombres H et D. L'étape 212 est mise en oeuvre par l'unité de cryptographie 12 via le bus 16. L'étape 206 de calcul de la clé de session comprend, en outre, une étape 214 de réception des valeurs des nombres H et D par l'unité de calcul 14. L'étape 206 de calcul de la clé de session comprend, en outre, une étape 216 de calcul de la valeur E(H,D) de l'application bilinéaire E sur courbe elliptique appliquée aux valeurs H et D. De part les propriétés de bilinéarité de l'application E, la valeur E(H,D) est égale à la valeur de l'application bilinéaire E sur courbe elliptique appliquée aux valeurs de la clé secrète Sk et du paramètre public X. En effet : E(H,D) = E(a*Sk,b*X) = E(Sk,X)"(a*b) = E(Sk,X)^(1) = E(Sk,X) L'étape 206 de calcul de la clé de session comporte également une étape 218 d'envoi à l'unité de cryptographie 12 de la valeur E(H,D) de l'application bilinéaire E sur courbe elliptique appliquée aux valeurs H et D. L'étape 218 d'envoi est mise en oeuvre par l'unité de calcul 14 via le bus 16. L'étape 206 de calcul de la clé de session comporte également une étape 220 de réception de la valeur E(H,D) de l'application bilinéaire sur courbe elliptique appliquée aux valeurs H et D. E(H,D) = E(Sk,X) est la clé de session. Le procédé de génération permet de réduire la complexité des calculs à effectuer par l'unité de cryptographie 12. En effet, le procédé de génération permet que le calcul de l'application bilinéaire E sur courbes elliptiques soit effectué par l'unité de calcul 14. Ainsi, le procédé de génération proposé n'implique pas le calcul d'une exponentiation modulaire. Seules deux multiplications de points et une inversion modulaire dans l'anneau des résidus modulo l'ordre du sous-groupe considéré de la courbe elliptique sont utilisées. Le procédé de génération est donc applicable même si l'unité de cryptographie 12 a une faible capacité de calcul. En outre, la mise en oeuvre du procédé de génération est plus rapide que dans l'état de la technique puisque les calculs effectués par l'unité de cryptographie 12 sont plus simples. REVENDICATIONS1.- Procédé de génération d'une clé de session à partir d'une clé secrète (Sk) et d'un paramètre public (X) par une unité de cryptographie (12) propre à déléguer des calculs à une unité de calcul (14), le procédé étant caractérisé en ce que le procédé comporte les étapes de: - génération de jetons (P1, ..., PL; a, b) par l'unité de cryptographie (12), - envoi de données (P1, ..., PL; H, D) issues des jetons (P1, ..., PL; a, b) vers l'unité de calcul (14), - réception d'au moins une valeur de l'unité de calcul (14), chaque valeur reçue étant la valeur d'une fonction bilinéaire (E) appliquée à une première donnée issue des jetons (P1, ..., PL; H) et à l'un parmi une deuxième donnée issue des jetons (P1, ..., PL ; D) et le paramètre public (X), et - déduction de la clé de session à partir de la ou des valeurs reçues. 2.- Procédé selon la revendication 1, dans lequel chaque jeton a une valeur et dans lequel les données issues des jetons (P1, ...PL ; a, b) sont l'ensemble des jetons (P1, ..., PL; a, b) générés ou l'ensemble des jetons (P1, ..., PL; a, b) générés et d'au moins un jeton (PL+1) égal à une somme, pour chaque jeton, du produit d'une puissance du nombre 2 avec la valeur d'un endomorphisme appliqué à la valeur du jeton, c'est-à- dire : PL+1 = a1*(p1(P1) + a2*cp2(P2) ..+ aL* pL(PL) où: - ai est une puissance du nombre 2 ou un nombre entier inférieur à 10; - Pi est la valeur du jeton, et - (pi est un endomorphisme. 3.- Procédé selon la revendication 1 ou 2, dans lequel chaque jeton (P1, ..., PL) a une valeur et dans lequel, le procédé comporte également une étape de : - sélection de jetons (P1,..., Pi+1) parmi l'ensemble des jetons générés (P1, ..., PL) de sorte que la somme de la valeur des jetons sélectionnés (P1, Pi+1) soit égale à la clé secrète (Sk), le nombre de jetons sélectionnés (i+1) étant inférieur au nombre de jetons générés (L). 4.- Procédé selon la revendication 3, dans lequel à l'étape de déduction, la clé de session est obtenue par pour les jetons sélectionnés (P1,..., Pi). 5.- Procédé selon l'une quelconque des revendications 1 à 5, dans lequel les jetons générés (P1, ..., PL) sont les valeurs de points d'une courbe elliptique. 6.- Procédé selon l'une quelconque des revendications 1 à 5, dans lequel les jetons générés sont deux nombres (a, b) inverses l'un de l'autre. 7.- Procédé selon la revendication 6, dans lequel les données (H, D) issues des jetons sont le produit d'un des deux jetons (a, b) avec la clé secrète (Sk) et le produit de l'autre des deux jetons (a, b) avec le paramètre public (X). 8.- Procédé de génération d'une clé de session à partir d'une clé secrète (Sk) et d'un paramètre public (X) par un système cryptographique (10), le système cryptographique (10) comportant : - une unité de calcul (14), et - une unité de cryptographie (12) propre à déléguer des calculs à l'unité de calcul (14), le procédé étant caractérisé en ce que le procédé comporte les étapes de : - génération de jetons par l'unité de cryptographie (12), - transmission de données (P1, ..., PL; H, D) issues des jetons (P1, ..., PL; a, b) depuis l'unité de cryptographie (12) vers l'unité de calcul (14), - calcul par l'unité de calcul (14) d'au moins une valeur d'une fonction bilinéaire (E) appliquée à une première donnée issue des jetons (P1, ..., PL ; H) et à l'un parmi une deuxième donnée issue des jetons (P1, ..., PL; D) et le paramètre public (X), - transmission de la ou des valeurs calculées depuis l'unité de calcul (14) à l'unité de cryptographie (12), et - déduction de la clé de session à partir de la ou des valeurs calculées. 9.- Unité de cryptographie (12) adaptée pour la mise en oeuvre d'un procédé selon l'une quelconque des revendications 1 à 7. 10.- Système cryptographique (10) comportant : - une unité de calcul (14), et - une unité de cryptographie (12) propre à déléguer des calculs à l'unité de calcul (14), le système cryptographique (10) étant adapté à mettre en oeuvre le procédé selon la revendication 8.30