FR 2831684 A1 20030502 FR 0114187 A 20011031 Installation de programme compilé notamment dans une carte à puce La présente invention concerne l'installation d'un programme compilé en langage intermédiaire, tel qu'une application ou une bibliothèque de services, qui a été écrit initialement dans un langage de haut niveau orienté objet et qui doit être téléchargé et exécuté dans un dispositif de traitement de données de faible capacité de mémoire et de traitement. Le dispositif de traitement de données est par exemple un objet électronique portable tel qu'une carte à puce. Plus particulièrement, l'invention a trait au processus de vérification d'un programme compilé chargé dans le dispositif de traitement de données, lors de son installation dans celui-ci. Il est connu qu'un vérificateur de code dans le dispositif de traitement de données vérifie les propriétés de sécurité de bas niveau dans un programme compilé chargé afin d'assurer que le code chargé ne puisse pas influencer les mécanismes de sécurité du dispositif de traitement inclus notamment dans l'interpréteur et les moyens de gestion de mémoire. La vérification consiste principalement à analyser le code chargé, comparer des informations contenues dans le programme compilé et à conserver certaines d'entre elles. Toutefois, l'intégration d'un vérificateur de code dans un dispositif de traitement, comme une carte à puce, dont les ressources sont relativement limitées pose des problèmes de mémoire aussi bien en termes de dimensionnement de la mémoire que du temps nécessaire pour effectuer les opérations de vérification. Pour améliorer l'intégration d'un vérificateur de programme compilé en langage intermédiaire, le programme compilé peut être modifié à l'extérieur du dispositif de traitement tout en assurant que le programme ait la même signification mais facilite la vérification. Toutefois, la modification du programme compilé ne le rend pas compatible avec les dispositifs de traitement qui étaient aptes à le recevoir initialement sans changement. La présente invention a pour objectif de rendre plus rapide l'installation d'un programme compilé dans un dispositif de traitement de données, sans modifier l'interprétation du programme. Pour atteindre cet objectif, un procédé pour installer un programme constitué de plusieurs composants et compilé à l'extérieur d'un dispositif de traitement de données pour être exécuté dans celui-ci, est caractérisé en ce qu'il comprend les étapes de : - détecter à l'extérieur du dispositif de traitement de données, des informations prédéterminées d'installation dans les composants du programme compilé, - construire des premier et deuxième composants additionnels contenant des informations prédéterminées détectées respectivement qui sont reformulées et nécessaires également à l'installation d'autres programmes dans le dispositif de traitement de données et qui sont reformulées et ne sont nécessaires qu'à l'installation dudit programme compilé, - charger depuis l'extérieur le programme compilé et les premier et deuxième composants additionnels dans le dispositif de traitement de données, et - installer le programme compilé chargé en dépendance des informations prédéterminées reformulées dans les premier et deuxième composants additionnels. Ainsi, l'invention n'ajoute pas de l'information au programme compilé à exécuter et est une solution efficace pour accéder rapidement à des informations nécessaires à l'installation du programme grâce à une optimisation en termes de temps d'accès et de mémoire du processus de vérification du programme compilé. Afin de réduire la taille de l'emplacement de mémoire occupée par le programme compilé après son installation, le procédé comprend l'étape de supprimer le deuxième composant additionnel dans le dispositif de traitement de données préalablement à toute exécution du programme compilé. En outre, les informations prédéterminées dans le programme compilé chargé ne peuvent pas être en partie mémorisées. Selon un autre aspect de l'invention, de manière à adapter à tout dispositif de traitement de données d'une catégorie, telle que carte à puce, le procédé de l'invention et particulièrement le prétraitement du programme compilé comportant les étapes de détecter et construire effectuées à l'extérieur du dispositif de traitement, le procédé comprend une reconnaissance des premier et deuxième composants additionnels dans le dispositif de traitement de données afin de ne mémoriser que le programme compilé chargé et ne pas mémoriser les composants additionnels si ces derniers ne sont pas reconnus par le dispositif de traitement de données, et de mémoriser le programme compilé sans les informations prédéterminées détectées mais avec les composants additionnels si ces derniers sont reconnus par le dispositif de traitement de données. Selon une réalisation préférée, les informations prédéterminées détectées peuvent être relatives au format et au typage du programme compilé, et l'étape d'installer comprend une étape de vérifier le format du programme compilé chargé et une étape de vérifier le typage du programme compilé chargé en dépendance des informations prédéterminées reformulées. D'autres caractéristiques et avantages de la présente invention apparaîtront plus clairement à la lecture de la description suivante de plusieurs réalisations préférées de l'invention en référence à la figure unique 1 qui est un bloc-diagramme d'un système à serveur et client du type carte à puce dans un terminal d'accueil, dans lesquels les principales étapes du procédé d'installation de programme compilé selon l'invention sont montrées. Dans la figure 1, on retrouve d'une manière classique un système client/serveur comprenant des moyens logiciels pour la mise en oeuvre du procédé d'installation de programme selon l'invention. Le client et le serveur sont reliés à travers un réseau de télécommunications de type internet RES. Le client est un dispositif de traitement de données ayant une faible capacité de mémoire et de traitement de données. Typiquement, le client est un objet électronique portable du type carte à puce CP, dite également carte à microcontrôleur ou à circuit intégré, logée d'une manière amovible dans un lecteur d'un terminal d'accueil TE. La carte à puce à laquelle on se référera dans la suite en tant qu'exemple de dispositif de traitement de données est de n'importe quel type connu de carte à puce à contact ou sans contact, et peut être une carte de paiement, une carte téléphonique, une carte additionnelle, une carte de jeu, etc. Le terminal électronique TE peut être un ordinateur électronique personnel PC, ou un terminal bancaire, ou un terminal point de vente. Selon une autre variante, le terminal TE et la carte à puce CA peuvent être un terminal radiotéléphonique cellulaire mobile et un module d'identité d'abonné téléphonique amovible SIM (Subscriber Identity Module). Selon encore d'autres variantes, le dispositif de traitement de données peut être un objet électronique portable tel qu'un assistant numérique personnel PDA (Personal Digital Assistant) ou un porte-monnaie électronique relié par modem au réseau de télécommunications RES. Les blocs fonctionnels représentés dans la figure 1 concernent des fonctions ayant un lien avec l'invention et pouvant correspondre à des modules logiciels et/ou matériels implantés respectivement dans le serveur SE et la carte à puce CP. La figure 1 montre également des étapes d'installation de programme compilé selon l'invention qui sont réalisées respectivement par des blocs fonctionnels dans le serveur et la carte à puce CP. Le terminal d'accueil TE est considéré comme transparent au procédé d'installation, c'est-à-dire n'intervient pas directement dans le traitement relatif à l'installation d'un programme compilé. Le serveur SE, en tant que moyen électronique externe à la carte CP, est par exemple le serveur d'un site internet appartenant à l'éditeur de la carte CP, ou bien à l'éditeur d'un programme source PG à télécharger dans la carte CP. Il sera supposé ci-après que le programme source PG à charger et exécuter dans la carte à puce CP a été écrit initialement dans un langage de haut niveau du type orienté objet tel que le langage Java, ou plus particulièrement le langage Java Card. D'une manière connue, le serveur SE comprend un compilateur CM qui convertit le programme PG en langage source Java Card en un programme compilé PGC en langage intermédiaire, appelé également pseudocode, composé de mots d'instruction formés par des octets, appelés bytecodes, qui sont prêts à être exécutés par un interpréteur IT constituant la machine virtuelle Java Card dans la carte à puce CP. Au sens de l'invention, le programme compilé PGC est une application, c'est-à-dire un fichier compilé structuré en plusieurs composants logiciels CO qui peuvent correspondre chacun à une classe d'objet, ou à plusieurs classes d'objet regroupées dans un paquetage, ou bien à une interface. Un composant, tel qu'une classe, comprend des informations prédéterminées IP qui, selon l'invention, sont nécessaires à l'installation du programme compilé dans la carte à puce CP. Les informations IP contribuent à la vérification du programme compilé PGC lors du chargement et avant toute exécution de celui-ci dans la carte à puce CP. Les informations IP concernent essentiellement le format et le typage du programme compilé PGC. La vérification du format concerne essentiellement la syntaxe et/ou la structure du programme compilé, par exemple les longueurs correctes des attributs des champs, le format correct des instructions, etc. Le typage est relatif à la sémantique et la syntaxe du code dans les composants du programme compilé PGC de manière à assurer la cohérence (consistance) des instructions à l'intérieur d'un composant et entre les composants du programme compilé et avec des composants d'autres programmes. Comme montré à la figure 1, pour la mise en oeuvre de l'invention, le serveur SE comprend un module de prétraitement de programme compilé PT qui réalise essentiellement deux étapes du procédé de l'invention à l'extérieur de la carte à puce CP : une étape de détection SI pour détecter des informations prédéterminées IP relatives au format et au typage dans les composants CO du programme compilé PGC, et une étape de construction S2 pour construire deux composants additionnels CAD1 et CAD2. A l'étape SI, le module de prétraitement PT détecte des informations prédéterminées dans les composants CO du programme compilé PGC qui sont relatives au format et au typage du programme PGC et qui serviront à la vérification ultérieure de celuici dans la carte à puce CP. Les informations détectées ne sont pas extraites des composants CO, mais seulement copiées dans un emplacement de mémoire prédéterminé dans le serveur afin de construire les deux composants additionnels à l'étape suivante S2. Les composants CO dans le programme compilé PGC ne sont pas ainsi modifiés dans le module de prétraitement PT afin que toute carte à puce qui reçoit le programme compilé PGC et qui est incapable de reconnaître les composants additionnels CAD1 et CAD2, puisse exécuter le programme compilé non modifié. L'étape de construction de composants additionnels S2 consiste principalement à reformuler les informations prédéterminées IP détectées dans les composants CO et à les classer en deux catégories : les informations nécessaires ultérieurement à la vérification d'autres programmes et les informations seulement nécessaires à la vérification de ce programme compilé, ces dernières pouvant être effacées au moins partiellement. Le module de prétraitement PT analyse les informations prédéterminées détectées de manière à les reformuler afin d'accéder plus rapidement à celles-ci lors de l'installation du programme compilé et afin de réduire la taille de l'emplacement de mémoire occupé par les informations détectées IP, et plus généralement par le programme compilé PGC. Par exemple, le module PT supprime des redondances dans les informations détectées IP ; selon un exemple particulier, lorsque deux étiquettes identifient deux entrées relatives à deux structures ayant le même contenu dans un tableau relatif par exemple au champ constant~pool, l'une des deux entrées est supprimée à l'étape S2. Les informations prédéterminées reformulées IP sont classées dans deux composants additionnels CAD1 et CAD2 selon que ces informations servent uniquement ou non à l'installation du programme compilé PGC dans la carte à puce CP. Le premier composant additionnel CAD1 contient des informations IP qui sont exportées, c'est-à-dire accessibles à d'autres programmes. Ces premières informations prédéterminées reformulées doivent être conservées dans la carte à puce CP après l'installation du programme compilé PGC. En effet, les premières informations, par exemple relatives à des champs de classe, peuvent être utilisées pour vérifier notamment d'autres applications ou paquetages ou composants, c'est-à-dire d'autres programmes compilés importés ultérieurement dans la carte à puce CP, et doivent donc être accessibles pour des vérifications ultérieures dans la carte. Les informations prédéterminées reformulées classées dans le premier composant additionnel CAD1 sont ainsi accessibles à toutes les applications et donc à tous les composants de ceux-ci installés dans la carte à puce CP grâce à leur caractère exporté. Des deuxièmes informations prédéterminées reformulées classées dans le deuxième composant additionnel CAD2 sont au contraire des informations non exportées afin de ne les rendre visibles qu'à l'intérieur du programme compilé PGC en question et les rendre inaccessibles depuis un autre paquetage ou un autre programme. Les deuxièmes informations prédéterminées reformulées ne serviront qu'à l'installation du programme compilé PGC dans la carte à puce CP, c'est-à-dire à la vérification que du programme PGC, et ne seront donc pas maintenues en mémoire dans la carte après cette installation de manière à réduire l'occupation de la mémoire par le programme PGC, comme on le verra ci-après. Pour construire les deux composants additionnels CAD1 et CAD2, le module de prétraitement PT utilise un mécanisme d'extension connu de programme compilé prévu par le concepteur du langage Java Card. En variante, au lieu de détecter des informations prédéterminées IP relatives au format et au typage dans les composants CO du programme compilé PGC, l'étape SI copie un composant spécifique appelé descripteur DES qui est inclus dans le programme PGC et qui contient déjà les informations prédéterminées IP nécessaires à la vérification ultérieure. Cette variante concerne le contexte du langage Java Card pour lequel le processus de vérification doit s'adapter au contexte d'exécution déjà existant dans la carte à puce CP, c'est-à-dire la machine virtuelle IT dans celle-ci ne peut être modifiée. Selon la spécification du langage Java Card, le composant descripteur DES contenu dans un programme compilé PGC est suffisant pour analyser et vérifier tous les composants du programme compilé. Toutefois, la recherche d'une information dans le descripteur DES inclus dans le programme compilé n'est pas aisée puisque les informations contenues dans le descripteur ne sont pas classées selon un ordre spécifique. Par conséquent, également pour cette variante, l'étape S2 reformule les informations prédéterminées IP se trouvant dans le descripteur DES et les classe dans deux composants additionnels CAD1 et CAD2 ayant respectivement les caractères exporté et non exporté. Le premier composant additionnel CAD1 contient des informations prédéterminées de format et de typage qui sont conservées obligatoirement pour vérifier d'autres programmes importés, et constitue ainsi un composant descripteur export . Le deuxième composant additionnel CAD2 comprend des informations prédéterminées de format et de typage qui sont seulement utilisées pour la vérification du programme compilé PGC, et qui ne peuvent pas être accessibles par un autre programme compilé, c'est-à-dire par une autre classe ou un autre paquetage ou interface n'appartenant pas au programme compilé PGC, et constitue ainsi un composant descripteur interne . A l'étape suivante S3 dans le serveur SE, un chargeur éventuellement sécurisé CH assemble le programme compilé PGC et les deux composants additionnels CAD1 et CAD2 par exemple dans une page Web qui est téléchargée dans la carte à puce CP à travers le réseau internet RES et le terminal TE. Le téléchargement du programme compilé PGC depuis le serveur SE est effectué d'une manière transparente à travers un navigateur et un module logiciel intermédiaire de type Plugin ou proxy du terminal TE. Comme montré également à la figure 1, un vérificateur VER inclus dans la carte à puce CP exécute d'autres étapes Cl à C5 du procédé d'installation de programme compilé selon l'invention. Comme il est connu, la carte à puce CP comprend également un éditeur de liens ED et un interpréteur IT constituant la machine virtuelle Java Card. Tous ces modules logiciels sont implantés dans la mémoire non réinscriptible ROM et la mémoire non volatile EEPROM de la carte à puce. Le vérificateur VER vérifie le format et le typage du programme compilé téléchargé PGC et l'éditeur de liens ED assure les liens entre les composants CO du programme téléchargé PGC avec ceux des applications déjà installées dans la carte à puce CP. L'interpréteur IT est par exemple une machine virtuelle qui interprète les instructions normalisées du programme compilé PGC afin que celui-ci soit exécuté en code natif par le microprocesseur PR de la carte. Le vérificateur VER commence la vérification du programme compilé chargé PGC en examinant les identifiants des composants additionnels CAD1 et CAD2 dans l'extension du programme PGC à l'étape Cl. Si le vérificateur ne reconnaît pas les composants additionnels, les mémoires ROM et EEPROM de la carte à puce enregistrent le programme compilé PGC avec les informations prédéterminées non reformulées IP ou le descripteur DES sans changement, comme spécifié par le format du programme, et n'enregistrent pas les composants additionnels CAD1 et CAD2 que la carte à puce ignore, à une étape Cil. Dans ce cas, la carte à puce exécutera ultérieurement le programme PGC sans changement, d'une manière connue. Au contraire, si le vérificateur VER reconnaît les composants additionnels CAD1 et CAD2 à l'étape C1, c'est-à-dire si l'interpréteur IT est capable d'utiliser les composants additionnels, la mémoire non volatile de la carte à puce mémorise le programme compilé PGC et ne mémorise que partiellement les informations prédéterminées détectées non reformulées IP contenues dans le programme PGC, ou ne mémorise pas le descripteur détecté non reformulé DES contenu dans le programme PGC, et mémorise également les composants additionnels CAD1 et CAD2 à l'étape C2. Puis le vérificateur VER procède à deux étapes de vérification proprement dites C3 et C4 en utilisant les informations prédéterminées reformulées IP incluses dans les composants additionnels CAD1 et CAD2. L'étape C3 est une vérification structurelle pour assurer que toutes les données dans le programme compilé PGC présentent un format correct pour l'exécution ultérieure par l'interpréteur IT. L'étape C3 examine non seulement le format des champs du programme compilé PGC mais également le format d'autres caractéristiques telles que des noms, des attributs, des étiquettes, des instructions ainsi que des correspondances correctes de ceux-ci dans des tableaux. Ces examens sont facilités par un accès plus aisé et donc plus rapide aux informations IP relatives au format qui ont été reformulées dans les composants additionnels CAD1 et CAD2. Si l'un des formats examinés est incorrect à l'étape C3, le vérificateur VER arrête la vérification en cours et efface le programme compilé PGC et les composants additionnels CAD1 et CAD2 dans les mémoires de la carte CP, à une étape C34. Si la vérification structurelle précédente a été exécutée avec succès, le vérificateur VER vérifie à l'étape suivante C4 que le programme compilé respecte des règles de typage définies par le langage de programmation, en l'occurrence le langage Java Card. Comme à l'étape précédente C3, la vérification de typage est facilitée par l'organisation et la reformulation des informations prédéterminées IP relatives au typage incluses dans les composants CAD1 et CAD2. La vérification de typage consiste notamment en une vérification sémantique des champs du programme compilé, une vérification syntaxique de signature de champs et de paramètres, une vérification de la cohérence de chaque ligne de code supportant une instruction proprement dite composée d'un code opération et éventuellement d'un ou plusieurs opérandes, une vérification de références au champ constant~pool, la cohérence des instructions entre composants logiciels CO du programme, etc. Si la vérification du typage signale une quelconque incohérence ou erreur dans le programme compilé PGC, le vérificateur VER arrête la vérification et efface le programme compilé PGC et les composants additionnels CAD1 et CAD2 dans les mémoires de la carte CP, à l'étape C34. A ce stade, si les vérifications aux étapes C3 et C4 du programme compilé chargé PGC sont positives, le programme compilé PGC est accepté par la carte CP pour une exécution ultérieure par l'interpréteur IT. Cependant, l'ensemble du programme compilé PGC avec les composants additionnels CAD1 et CAD2 contient des nombreuses informations qui ne sont pas nécessaires à l'exécution ultérieure du programme, telles que les informations de typage qui ont été classées dans le deuxième composant additionnel CAD2 à caractère privé. A l'étape suivante C5, le vérificateur supprime directement dans la mémoire non volatile de la carte à puce CP, les informations prédéterminées privées réunies dans le deuxième composant additionnel CAD2. La suppression du composant CAD2 réduit la taille de l'emplacement de mémoire occupé par le programme PGC et le premier composant additionnel CAD1. Le premier composant CAD1 est conservé en mémoire puisqu'il contient des informations prédéterminées publiques qui seront utilisées ultérieurement pour vérifier notamment d'autres programmes compilés téléchargés ultérieurement. Grâce au prétraitement dans le module PT du serveur SE, le vérificateur VER n'a pas besoin de rechercher les informations qui seraient éparpillées dans le programme compilé et qui sont inutiles pour des exécutions ultérieures. Aucune modification structurelle n'est nécessaire pour conserver le premier composant additionnel CAD1, à l'exception que certaines données dans celui-ci peuvent être modifiées lors de l'édition de liens dans l'éditeur ED, mais sans imposer un changement dans la structure du composant CAD1. Le programme compilé est alors prêt à être exécuté dans l'interpréteur IT. Bien que les étapes C1 à C5 soient représentées dans le vérificateur VER avant l'éditeur de lien ED, le chargement, la vérification, l'édition de lien et l'interprétation peuvent être effectués à la volée, quasi-simultanément au fur et à mesure du chargement du programme compilé PGC dans la carte CP. Avant l'interprétation, une compression du programme compilé avec les composants CAD1 et CAD2 peut être prévue en la préparant et l'exécutant d'une manière partielle ou totale dans le serveur SE ou la carte CP ou les deux à la fois. L'invention n'est pas limitée à la réalisation préférée décrite ci-dessus, mais concerne tout programme exprimé initialement en un langage source orienté objet et tout dispositif de traitement de données autre qu'une carte à puce qui présente notamment une capacité de mémoire et de traitement relativement faible. REVENDICATIONS 1-Procédé pour installer un programme constitué de plusieurs composants et compilé à l'extérieur d'un dispositif de traitement de données pour être exécuté dans celui-ci, caractérisé en ce qu'il comprend les étapes de : - détecter (SI) à l'extérieur du dispositif de traitement de données (CP), des informations prédéterminées d'installation (IP, DES) dans les composants (CO) du programme compilé (PGC), - construire (S2) des premier et deuxième composants additionnels (CAD1, CAD2) contenant des informations prédéterminées détectées respectivement qui sont reformulées et nécessaires également à l'installation d'autres programmes dans le dispositif de traitement de données et qui sont reformulées et ne sont nécessaires qu'à l'installation dudit programme compilé (PGC), - charger (S3) depuis l'extérieur le programme compilé (PGC) et les premier et deuxième composants additionnels (CAD1, CAD2) dans le dispositif de traitement de données, et - installer (C3, C4) le programme compilé chargé en dépendance des informations prédéterminées reformulées dans les premier et deuxième composants additionnels. 2-Procédé conforme à la revendication 1, comprenant une étape de supprimer (C5) le deuxième composant additionnel (CAD2) dans le dispositif de traitement de données préalablement à toute exécution du programme compilé. 3-Procédé conforme à la revendication 1 ou 2, selon lequel les informations prédéterminées (IP) dans le programme compilé ne sont pas en partie mémorisées. 4-Procédé conforme à l'une quelconque des revendications 1 à 3, comprenant une reconnaissance (C1) des premier et deuxième composants additionnels (CAD1, CAD2) dans le dispositif de traitement de données (CP) afin de ne mémoriser (C11) que le programme compilé chargé (PGC) et ne pas mémoriser (Cll) les composants additionnels (CAD1, CAD2) si ces derniers ne sont pas reconnus par le dispositif de traitement de données, et de mémoriser (C2) le programme compilé sans les informations prédéterminées détectées (IP, DES) mais avec les composants additionnels (CAD1, CAD2) si ces derniers sont reconnus par le dispositif de traitement de données. 5-Procédé conforme à l'une quelconque des revendications 1 à 4, selon lequel les informations prédéterminées détectées (IP) sont relatives au format et au typage du programme compilé, et l'étape d'installer comprend une étape (C3) de vérifier le format du programme compilé chargé et une étape (C4) de vérifier le typage du programme compilé chargé en dépendance des informations prédéterminées reformulées. 6-Procédé conforme à l'une quelconque des revendications 1 à 5, selon lequel les informations prédéterminées à détecter sont incluses dans un composant spécifique (DES) du programme compilé (PGC). 7-Procédé conforme à l'une quelconque des revendications 1 à 5, selon lequel le dispositif de traitement de données est un objet électronique portable de type carte à puce (CP).