STOCKAGE DE CLES D'UN ALGORITHME A CLE PUBLIQUE DANS
UN ENVIRONNEMENT EMBARQUE
L'invention concerne le stockage de clés pour des algorithmes à clé publique et en particulier le stockage de clés dans des environnements embarqués, par exemple dans des cartes à puce.
Les algorithmes à clé publique nécessitent la mise en œuvre d'une clé publique et d'une clé privée. Ces clés sont mathématiquement liées pour former une paire. Alors que la clé publique est destinée à être diffusée sans aucune restriction, la clé privée doit rester confidentielle pour assurer la sécurité de l'algorithme. Ces clés sont donc en général cloisonnées de façon assez stricte.
Certaines cartes à puce ou appareils portatifs embarquent une machine virtuelle par exemple de type JavaCard (marque déposée), ainsi que des applications faisant appel à des algorithmes à clé publique, tels le RSA (cryptage, signature électronique). Pour ce type de machine virtuelle, il est imposé un accès exclusif très strict respectivement entre la clé publique et la clé privée. Un objet clé publique contient par exemple les éléments n et e (module et exposant public). Les méthodes associées à cet objet clé permettent la lecture de ses éléments par l'utilisateur. Un objet clé privée contient soit les éléments d et n si la clé est stockée au format standard (d étant l'exposant privé et n le module), soit les éléments p, q, dp, dq et iq si la clé est stockée au format CRT. En outre, une classe appelée KeyPair en prenant l'exemple JavaCard est prévue dans le but d'associer une clé publique et une clé privée et de générer ainsi des paires de clés mathématiquement liées.
Le stockage et l'utilisation de telles clés posent problème dans les appareils embarqués et en particulier dans les cartes à puce.
Les clés mémorisées occupent un espace important dans la mémoire de l'appareil, au détriment d'autres applications. Cet espace occupé peut représenter une proportion relativement importante de la mémoire disponible. En outre, pour répondre à la contrainte de l'indépendance stricte entre les clés publiques et les clés privées, le module est dupliqué dans chacune de ces clés. A titre d'exemple, le module d'une clé RSA 2048 occupe au moins 256 octets.
Certaines méthodes d'attaque consistent à forcer la carte à puce à générer des signatures erronées, en la soumettant par exemple à des perturbations de l'alimentation électrique. Une exploitation mathématique d'une signature erronée permet de
déterminer des éléments privés. Certaines cartes mettent en œuvre des algorithmes de vérification de la signature électronique générée. En principe, la vérification de la signature devrait être effectuée au moyen de l'exposant public. Cependant, du fait de l'indépendance stricte entre les clés publique et privée, ni l'exposant public ni les autres éléments publics ne sont mémorisés dans l'objet clé privée. Le niveau de sécurité de la vérification des signatures générées n'est alors pas optimal.
Il existe donc un besoin pour un procédé de stockage d'une clé d'un algorithme à clé publique dans un appareil portatif muni d'un interpréteur de programme écrit dans un langage orienté objet, comprenant les étapes consistant à : - créer dans l'appareil au moins un objet conteneur (5), mémorisant au moins un élément d'une clé privée (54, 72) et au moins un élément (53, 73) d'une clé publique associée ;
- créer dans l'appareil au moins un objet clé (3) ne contenant aucun élément de la clé privée et de la clé publique associée ; - associer l'objet clé à au moins une méthode d'accès aux éléments mémorisés dans l'objet conteneur.
Selon une variante, l'étape d'association de l'objet clé à une méthode d'accès consiste à associer à l'objet, dit objet clé publique, une méthode d'accès aux seuls éléments de la clé publique mémorisés dans l'objet conteneur. Selon une autre variante, l'étape d'association de l'objet clé à une méthode d'accès consiste à associer à l'objet, dit objet clé privée, une méthode d'accès aux seuls éléments de la clé privée mémorisés dans l'objet conteneur.
On peut alors prévoir que le procédé comprenne en outre les étapes consistant à:
- créer dans l'appareil au moins un autre objet clé (3) ne contenant aucun élément de la clé privée ou de la clé publique associée ;
- associer l'autre objet clé, dit objet clé publique, à au moins une méthode d'accès aux seuls éléments de la clé publique mémorisés dans l'objet conteneur.
Selon encore une variante :
- la clé privée et la clé publique sont associées à un algorithme de cryptage RSA en mode standard ;
- l'objet conteneur mémorise les éléments n, e et d, n étant le module RSA, e étant l'exposant public, et d étant l'exposant privé ;
- la méthode d'accès associée à l'objet clé privée fournit en outre un accès à n et d ;
- la méthode d'accès associée à l'objet clé publique fournit un accès uniquement aux éléments n et e. Selon encore une autre variante :
- la clé privée et la clé publique sont associées à un algorithme de cryptage RSA en mode CRT ;
- l'objet conteneur mémorise les éléments n, e, p, q, dp, dq et iq, tels que dp= d modulo (p-1), dq= d modulo (q-1) et iq = q"1 modulo p, n étant le module RSA, p et q étant les nombres premiers distincts, n étant le module RSA et e étant l'exposant public ;
- la méthode d'accès associée à l'objet clé privée fournit en outre un accès à p, q, dp, dq et iq ;
- la méthode d'accès associée à l'objet clé publique fournit un accès uniquement aux éléments n et e.
On peut encore prévoir que l'appareil portatif soit contrôlé par un interpréteur du type Java ou Javacard.
L'invention porte également sur un procédé de signature dans lequel la clé privée et la clé publique sont associées à un algorithme de cryptage RSA, ce procédé comprenant les étapes des procédés de stockage ci-dessus et les étapes suivantes :
- générer une signature électronique associée à la clé privée ;
- lire l'exposant public e par une méthode associée à l'objet conteneur;
- vérifier la signature électronique générée au moyen de l'exposant public e;
- fournir la signature électronique vérifiée sur une sortie de l'appareil électronique.
L'invention porte encore sur un appareil électronique portatif présentant une mémoire mémorisant une application mettant en œuvre un algorithme à clé publique, une clé privée stockée dans la mémoire par l'un quelconque des procédés ci-dessus, et un organe de calcul susceptible d'exécuter ladite application. Selon une variante, l'appareil électronique portatif est une carte à puce.
ç
D'autres caractéristiques et avantages de l'invention ressortiront clairement de la description qui en est feite ci-après, à titre indicatif et nullement limitatif, en référence aux dessins annexés, dans lesquels :
-la figure 1 illustre des objets mémorisés dans une carte à puce selon une première variante de l'invention ;
-la figure 2 illustre des objets mémorisés dans une carte à puce selon une seconde variante de l'invention.
L'invention propose de créer un objet associé à une clé d'un algorithme à clé publique. Cet objet ne contient aucun élément de la clé publique ou de la clé privée. Un objet conteneur est créé pour mémoriser les éléments de la clé privée et certains éléments de la clé publique. Une méthode d'accès est associée à l'objet clé pour accéder aux éléments mémorisés dans l'objet conteneur.
Le stockage des différents éléments dans un même objet conteneur permet notamment de réduire l'espace mémoire occupé par ces éléments, du fait de la mise en commun de certains d'entre eux (par exemple le module).
L'invention s'applique à un appareil numérique portatif (non représenté), qui embarque au moins une application utilisant un algorithme à clé publique. Cet appareil embarque également un interpréteur de programme écrit en langage orienté objet, tel que Java ou JavaCard (marque déposée). L'interpréteur et l'application sont par exemple mémorisés dans une mémoire non volatile incluse dans l'appareil portatif numérique, telle qu'une EEPROM. L'appareil est également muni de moyens d'exécution de l'application à clé publique. La figure 1 illustre une première variante de l'invention. Selon cette variante, on crée dans un premier temps un objet « couple de clés » 1 dans la mémoire non volatile de l'appareil. Cet objet 1 présente un entête 11 et est associé à au moins une méthode de génération d'un couple de clés par le champ 14. Cette méthode est appelée et génère de façon connue en soi un couple de clés liées mathématiquement, comprenant une clé publique et une clé privée. On peut également envisager que les clés soient créées au préalable et mémorisées lors d'un chargement dans l'appareil.
Un objet 2 est créé pour la clé publique et un objet 3 est créé pour la clé privée. L'objet 1 présente des champs 12 et 13 comprenant chacun une référence vers
respectivement l'objet clé publique 2 et vers l'objet clé privée 3. Les objets 2 et 3 présentent respectivement les entêtes 21 et 31. Les objets de type clé 2 et 3 sont mémorisés dans une mémoire non volatile de l'appareil. On notera que ces objets 2 et 3 ne contiennent aucun élément du couple de clés créé. La méthode de génération du couple de clés comprend également la création d'un objet conteneur 5, commun à la clé publique et à la clé privée. Les objets 2 et 3 présentent respectivement des champs 22 et 32 contenant des références à l'objet conteneur 5. Au sein des méthodes de chaque objet clé, on peut accéder à des éléments prédéfinis de l'objet conteneur 5. Cet objet conteneur 5 comprend un entête 51 et l'ensemble des éléments répartis dans plusieurs champs 52 à 54. L'objet conteneur 5 est également mémorisé dans une mémoire non volatile de l'appareil. Les éléments du couple de clés ne sont pas stockés dans les objets clés mais dans l'objet conteneur 5. Ainsi, les accès à un élément dans l'objet conteneur 5 peuvent être gérés simplement en fonction des méthodes associées aux objets clés 2 et 3. Le cloisonnement entre l'objet clé publique et l'objet clé privée est ainsi réalisé par les méthodes d'accès respectives des objets 2 et 3 aux éléments de l'objet conteneur 5.
Dans l'exemple de la figure 1, les éléments mémorisés dans l'objet conteneur 5 sont associés à un algorithme RSA standard. L'objet clé publique 2 est associé à une méthode d'accès aux éléments publics de l'objet conteneur 5. Ces éléments sont en l'occurrence n (le module) et e (l'exposant public) et sont stockés respectivement dans les champs 52 et 53. L'objet clé publique 2 est également associé à une méthode d'accès aux éléments publics de l'objet conteneur 5. L'objet clé publique 2 n'est en revanche pas associé à une méthode d'accès à un élément privé de l'objet conteneur 5. Ainsi, aucune méthode associée à l'objet clé publique 2 ne permet d'accéder aux éléments de la clé privée.
L'objet clé privée 3 est associé à une méthode d'accès uniquement aux éléments privés de l'objet conteneur 5. Le champ 54 contient les éléments privés (en l'occurrence d correspondant à l'exposant privé). Aucune méthode d'accès associée à l'objet clé privée ne permet de récupérer des éléments de la clé publique.
Selon la variante illustrée à la figure 2, l'appareil mémorise seulement un objet de clé privée 6 et pas d'objet de clé publique. L'objet 6 présente un entête 61 et un
champ 62 contenant une référence à l'objet conteneur 7. L'objet 6 est associé à une méthode d'accès uniquement aux éléments privés (p, q, dp, dq et iq).
L'objet conteneur 7 comprend un entête 71 et des champs d'éléments 72 et 73. Le champ 72 comprend les éléments privés p, q, dp, dq et iq (éléments pour un cryptage RSA en mode CRT, avec dp = d modulo (p-1), dq = d modulo (q-1) et iq = q'1 modulo p) et le champ 73 comprend l'élément public e.
Dans ces deux exemples, l'objet conteneur 5 ou 7 peut stocker une méthode de récupération d'éléments publics et en particulier de l'exposant public e. Cette méthode est rendue utilisable uniquement par une fonction de vérification qui utilise l'exposant public e pour tester la validité de signatures générées à partir des éléments privés. Une signature non valide ne sera pas appliquée sur la sortie de l'appareil électronique. Une attaque par injection de faute lors de la génération de la signature sera donc inopérante.
Cette fonction de vérification cryptographique peut être incluse sans accroître excessivement l'espace occupé dans la mémoire non volatile de l'appareil numérique. En effet, un unique exemplaire de l'exposant e est accessible par une méthode d'accès de l'objet clé publique et est utilisable par la fonction de vérification.