FR 3050847 A1 20171103 FR 1653944 A 20160502 1 L'invention concerne un procédé d'optimisation d'écriture en mémoires dans un dispositif mettant en oeuvre une pluralité de modules logiciels, un premier module logiciel comprenant des fonctions permettant de mettre en oeuvre un algorithme de cryptographie, et un dispositif mettant en oeuvre ledit procédé. L'invention est plus particulièrement adaptée au domaine des cartes à puce. Une carte à puce comporte au moins un circuit intégré capable de contenir et de traiter de l'information. Le circuit intégré, i.e. la puce, contient un microprocesseur ou un microcontrôleur capable de traiter l'information qui est stockée dans une mémoire. Le microprocesseur (ou le microcontrôleur) permet de mettre en oeuvre un système d'exploitation au sein de la carte puce. Java Card est une technologie permettant de définir un système d'exploitation fournissant essentiellement un environnement d'exécution pour un sous-ensemble d'un langage de programmation appelé Java, ledit sous-ensemble étant spécifiquement destiné aux applications pour cartes à puce. Cet environnement d'exécution, appelé JCRE (« Java Card Runtime Environment » en terminologie anglo-saxonne) comporte un interpréteur, appelé machine virtuelle, JCVM (« Java Card Virtual Machine » en terminologie anglo-saxonne anglais), permettant l'exécution de codes intermédiaires correspondant à des fonctions ou applications, aussi dénommées applets, installées en mémoire non volatile sur la carte à puce. Le système d'exploitation fait appel à des librairies, dites librairies natives, contenant des fonctions de base (APIs, pour « Application Programming Interfaces » en terminologie anglo-saxonne) utiles à un développement d'applications pour cartes à puce. Une carte à puce est un dispositif principalement utilisé comme moyen d'identification personnelle, comme moyen de paiement, ou comme moyen de preuve d'abonnement à des services prépayés. Chacune des utilisations citées précédemment peut être considérée comme sensible, notamment parce qu'elles utilisent des données confidentielles contenues dans la carte à puce. Une carte à puce est destinée à échanger des données confidentielles avec d'autres dispositifs. Par exemple, une carte à puce utilisée comme moyen de paiement échange des données confidentielles avec des terminaux de paiement. Il est nécessaire que ces échanges de données se fassent de manière sécurisée pour éviter toute récupération illicite de données confidentielles. C'est la raison pour laquelle, la plupart des cartes à puce comprennent des librairies natives implémentant des algorithmes de cryptographie. 3050847 2 Un algorithme de cryptographie est un algorithme qui vise à protéger des données, en assurant, par exemple, leur confidentialité, leur authenticité ou leur intégrité, grâce aux mathématiques. Toutefois, le fait qu'un algorithme de cryptographie soit sécurisé d'un point de vue mathématique ne garantit pas nécessairement qu'une mise en oeuvre 5 pratique de cet algorithme de cryptographie par un dispositif électronique soit sécurisée. En effet, les algorithmes de cryptographie sont souvent décrits de façon précise dans des spécifications accessibles au public. Or, il est bien connu que lorsqu'un dispositif électronique non protégé exécute un logiciel mettant en oeuvre un algorithme de cryptographie d'une manière « naïve », i.e. d'une manière qui se contente de produire 10 un résultat numérique attendu selon la spécification de cet algorithme à partir d'une entrée donnée, il est souvent possible d'obtenir des informations confidentielles sur le déroulement de l'algorithme de cryptographie en effectuant des observations extérieures de certains paramètres de fonctionnement du dispositif électronique. C'est ainsi qu'un attaquant désirant obtenir des données confidentielles du dispositif 15 électronique, peut analyser des bruits générés par le dispositif électronique, des émanations électromagnétiques, une image thermique ou encore une consommation électrique du dispositif électronique pour obtenir des données confidentielles. Afin de se prémunir contre des attaques, il est possible de sécuriser le dispositif électronique lui-même. Par exemple, il est possible de superposer un bruit sur 20 l'alimentation électrique afin de rendre son exploitation difficile, de lisser la consommation électrique (par exemple, en utilisant des condensateurs), de limiter les émissions électromagnétiques par des blindages adéquats, etc. Un procédé de sécurisation connu consiste à masquer les données confidentielles. Les données confidentielles peuvent par exemple être des clés de cryptage et/ou un 25 message d'entrée devant par exemple être chiffré par un algorithme de cryptographie, et/ou certaines données intermédiaires manipulées durant l'exécution de l'algorithme de cryptographie. Plusieurs procédés de sécurisation par masquage ont été proposés. On peut ainsi citer les masquages de type additif où une donnée X manipulée par un algorithme de cryptographie est remplacée par une donnée masquée XEDM où El) 30 désigne un ou exclusif et M est une donnée de masquage qui peut être différente à chaque utilisation. Une carte puce, telle qu'elle est produite par un fournisseur de cartes à puce, peut être vue comme une carte à puce générique pouvant avoir plusieurs utilisations. Cette carte à puce comporte un certain nombre de librairies natives permettant de mettre en 3050847 3 oeuvre des fonctions diverses sur la carte à puce, dont des librairies permettant de mettre en oeuvre des modules logiciels, dits modules de cryptographie, aptes à mettre en oeuvre diverses fonctions manipulant des données confidentielles comme par exemple des fonctions relatives à des algorithmes de cryptographie et/ou des fonctions de plus bas 5 niveau implémentant de l'arithmétique modulaire (i.e. addition, soustraction, multiplication, etc). Par la suite nous regroupons toutes les fonctions mises en oeuvre par un module de cryptographie sous le terme de fonctions de cryptographie. Afin que cette carte générique puisse répondre à une utilisation spécifique, il peut être nécessaire de la configurer a posteriori. C'est ainsi que certains fournisseurs de cartes à puce 10 fournissent à leurs clients des cartes à puce dans lesquelles chaque client, selon ses besoins spécifiques, peut introduire ses propres librairies. Chacune de ces librairies, dites librairies client, une fois chargées sur une carte à puce, est apte à mettre en oeuvre des modules logiciels, dits modules client, donnant accès à des fonctions spécifiques du client, appelées fonctions client par la suite. Un premier module logiciel peut, par 15 ailleurs, invoquer des fonctions mises en oeuvre par un deuxième module logiciel. Notamment, un module client peut invoquer des fonctions mises en oeuvre par le module de cryptographie. Permettre un accès à des fonctions de cryptographie à partir d'un module client peut constituer une faille de sécurité. En effet, alors qu'un module de cryptographie peut être fortement sécurisé, par exemple en utilisant des méthodes de 20 masquage dans les fonctions de cryptographie, le degré de sécurisation d'un module client peut être inférieur, ce qui peut constituer un point d'entrée pour une attaque. Afin de limiter les risques d'introduction de failles de sécurité dans les cartes à puce par les clients, les fournisseurs de cartes à puce contraignent fortement les échanges de données entre les modules client et les modules de cryptographie. Une 25 méthode connue permettant de limiter les failles de sécurité consiste à compartimenter les exécutions des fonctions client mises en oeuvre par un module client et des fonctions de cryptographie mises en oeuvre par un module de cryptographie ainsi que les espaces mémoires dédiés à ces modules. Par exemple, un module client n'accède jamais directement à une fonction de cryptographie et un module client n'accède jamais à une 30 zone mémoire si cette zone mémoire n'est pas certifiée comme ne contenant pas des données confidentielles issues d'un module de cryptographie. Lorsqu'un module client doit faire appel à une fonction de cryptographie pour faire une opération, il fait appel à un module logiciel, dit module d'interface, implémenté par une librairie native fournissant une interface entre le module client et le 3050847 4 module de cryptographie. En d'autres termes, le module client n'appelle pas directement des fonctions de cryptographie mais demande au module d'interface d'appeler ces fonctions de cryptographie. Un problème inhérent à cette approche est que, lorsqu'un module client exécute une opération nécessitant plusieurs calculs 5 intermédiaires, chaque calcul intermédiaire faisant intervenir une fonction de cryptographie, il se produit une succession de copies de variables et de résultats intermédiaires en mémoire. D'un point de vue performance, ces multiples copies ralentissent la mise en oeuvre de l'opération du module client. Par ailleurs, d'un point de vue sécuritaire, il est connu que plus il y a de copies de résultats intermédiaires 10 obtenues à partir de fonctions manipulant des données confidentielles, plus le risque de rendre ces données confidentielles accessibles par des personnes non habilitées augmente. Il est souhaitable de pallier ces inconvénients de l'état de la technique. Il est notamment souhaitable de proposer une méthode et un dispositif permettant de fluidifier 15 les échanges entre un module client et un module de cryptographie afin d'obtenir des temps d'exécution plus courts, sans pour autant augmenter les risques d'introduction de failles de sécurité dans les cartes à puce. Selon un premier aspect de l'invention, l'invention concerne un procédé d'optimisation d'écritures en mémoires dans un dispositif mettant en oeuvre une 20 pluralité de modules logiciels, un premier module logiciel comprenant des fonctions manipulant des données confidentielles, un troisième module logiciel permettant à des fonctions d'un deuxième module logiciel, dites fonctions client, d'appeler des fonctions du premier module logiciel, dites fonctions de cryptographie, le dispositif comprenant une mémoire vive divisée en une pluralité de zones mémoires, une première zone 25 mémoire de la pluralité étant sécurisée et pouvant être utilisée exclusivement par le premier et le troisième modules logiciels, une deuxième zone mémoire pouvant être utilisée exclusivement par le deuxième et le troisième modules logiciels. Le procédé comprend: obtenir une suite de fonctions client comprenant une première fonction client et au moins une deuxième fonction client, chaque deuxième fonction client devant être 30 exécutée à la suite de la première fonction client ou d'une autre deuxième fonction client et donnant un résultat d'exécution devant être ajouté à un résultat d'exécution de la fonction client la précédant dans la suite, chaque fonction client de la suite faisant appel à une fonction de cryptographie ; allouer une mémoire tampon dans la première zone mémoire et initialiser cette mémoire tampon à une valeur égale à une valeur prédéfinie ; 3050847 5 lancer une exécution séquentielle de chaque fonction client de la suite, chaque exécution d'une desdites fonctions client comprenant un appel, par l'intermédiaire du troisième module logiciel, à la fonction de cryptographie concernée par ladite fonction client provoquant une exécution de ladite fonction de cryptographie dans la première zone 5 mémoire, le résultat d'exécution de ladite fonction de cryptographie étant additionné à la valeur contenue dans la mémoire tampon ; et copier, dans la deuxième zone mémoire, la valeur contenue dans la mémoire tampon suite à l'exécution de la dernière fonction client de la suite. Le procédé évite de copier des résultats intermédiaires entre la première zone 10 mémoire et la deuxième zone mémoire lors de chaque exécution d'une fonction de cryptographie. Le nombre de copies mémoires est donc réduit. Selon un mode de réalisation, la première zone mémoire est bloquée en lecture et écriture par défaut et n'est débloquée que lors d'une exécution d'une fonction de cryptographie, la deuxième zone mémoire étant bloquée en lecture et écriture pendant 15 chaque exécution d'une fonction de cryptographie. Selon un mode de réalisation, la mémoire vive comprend une troisième zone mémoire, par laquelle transite chaque donnée échangée entre le premier et le deuxième modules logiciels depuis la première zone mémoire vers la deuxième zone mémoire ou depuis la deuxième zone mémoire vers la première zone mémoire. 20 Selon un mode de réalisation, chaque donnée échangée entre le premier et le deuxième modules logiciels est copiée de la première zone mémoire dans la deuxième zone mémoire ou de la deuxième zone mémoire dans la première zone mémoire, et préalablement à chaque copie une vérification est mise en oeuvre permettant de s'assurer que la première zone mémoire ne contient aucune donnée confidentielle et, si la 25 première zone mémoire contient des données confidentielles, lesdites données confidentielles sont effacées. Selon un deuxième aspect de l'invention, l'invention concerne un dispositif comprenant des moyens pour mettre en oeuvre le procédé selon le premier aspect. Selon un mode de réalisation, le dispositif est une carte à puce. 30 Selon un troisième aspect de l'invention, l'invention concerne un programme d'ordinateur, comprenant des instructions pour mettre en oeuvre, par un dispositif, le procédé selon le premier aspect lorsque ledit programme est exécuté par un processeur dudit dispositif 3050847 6 Selon un quatrième aspect, l'invention concerne des moyens de stockage stockant un programme d'ordinateur comprenant des instructions pour mettre en oeuvre, par un dispositif, le procédé selon le premier aspect, lorsque ledit programme est exécuté par un processeur dudit dispositif 5 Les caractéristiques de l'invention mentionnées ci-dessus, ainsi que d'autres, apparaîtront plus clairement à la lecture de la description suivante d'un exemple de réalisation, ladite description étant faite en relation avec les dessins joints, parmi lesquels : - la Fig. 1 illustre schématiquement une architecture matérielle d'un dispositif, 10 tel qu'une carte à puce, dans lequel la présente invention peut être implémentée ; - la Fig. 2 illustre schématiquement un exemple de configuration d'une mémoire vive utilisée dans l'invention ; - la Fig. 3 illustre schématiquement un exemple d'un procédé selon l'invention exécutant une pluralité de fonctions faisant appel à des fonctions de cryptographie; 15 - la Fig. 4 illustre schématiquement une exécution d'une fonction client faisant appel à une fonction de cryptographie; et, - La Fig. 5 détaille une étape de copie d'un résultat d'exécution d'une suite de fonctions client faisant appel à des fonctions de cryptographie, d'une zone mémoire sécurisée vers une zone mémoire non sécurisée. 20 La description qui suit détaille plus particulièrement des modes de réalisation de la présente invention dans un contexte de carte à puce. Les principes décrits ici s'appliquent toutefois à d'autres types de cartes ou dispositifs électroniques que les cartes à puce. L'invention s'applique par exemple à des cartes électroniques contenues dans des téléphones intelligents ou dans des ordinateurs implémentant un système 25 d'exploitation comportant des librairies natives permettant d'implémenter au moins un module de cryptographie ou, plus largement, des modules manipulant des données confidentielles, lesdites cartes électroniques étant génériques mais pouvant être adaptées à des besoins spécifiques d'un client en permettant une introduction de librairies clients permettant d'implémenter des modules client utilisant des fonctions 30 des librairie natives. La Fig. 1 illustre schématiquement une architecture matérielle d'un dispositif 10 dans lequel la présente invention peut être implémentée. Dans un mode de réalisation, le dispositif 10 est une carte à puce. 3050847 7 La carte à puce 10 comporte une interface 110 configurée pour connecter la carte à puce 10 à un lecteur de carte (non représenté sur la Fig. 1). La carte à puce 10 est par exemple une carte bancaire et le lecteur de carte est un terminal de paiement. L'interface 110 est configurée pour permettre d'effectuer des échanges de données entre le lecteur 5 de carte et la carte à puce 10, notamment de permettre au lecteur de carte d'envoyer des commandes à la carte à puce 10, et aussi permettre au lecteur de carte d'alimenter en énergie la carte à puce 10. La carte à puce 10 comporte en outre un processeur, typiquement sous la forme d'un microcontrôleur 111 ou d'un microprocesseur, en charge d'effectuer des 10 traitements au sein de la carte à puce 10 : calculs, transferts de données, etc. La carte à puce 10 comporte en outre une mémoire vive RAM (« Random Access Memory » en terminologie anglo-saxonne) 112, une mémoire morte ROM (« Read Only Memory » en terminologie anglo-saxonne) 113, et une mémoire non volatile, comme par exemple une mémoire EEPROM (« Electronically Erasable Programmable 15 ROM » en terminologie anglo-saxonne) 114. La mémoire vive 112, la mémoire morte 113 et la mémoire non volatile 114 sont reliées au microcontrôleur 111 par un bus de communication 115. La mémoire morte 113 contient typiquement des instructions causant l'implémentation d'un environnement d'exécution JCRE au sein de la carte à puce 10, 20 en s'appuyant sur la mémoire vive 112. La mémoire vive 112 est utilisée pour stocker temporairement des données, telles que des variables et des résultats intermédiaires de calculs. La mémoire 114 contient un ensemble d'instructions correspondant à des fonctions offertes par des librairies (natives ou client) stockées sur la carte à puce 10. 25 Ces fonctions sont regroupées en une pluralité de modules logiciels. Lorsque la carte à puce 10 est alimentée en énergie par le lecteur de carte via l'interface 110, le microcontrôleur 111 est capable d'exécuter des instructions, notamment sous forme de code intermédiaire, à partir de la mémoire morte 113 et/ou de la mémoire non volatile 114. Par la suite, lorsque le microcontrôleur 111 exécute 30 (i.e. met en oeuvre) des instructions relatives à une fonction d'un module logiciel, nous dirons pour simplifier, que le module logiciel exécute (i.e. met en oeuvre) une fonction. Par ailleurs, lorsque le microcontrôleur 111 exécute (i.e. met en oeuvre) des instructions relatives à une fonction d'un premier module logiciel permettant de lancer une exécution (i.e. une mise en oeuvre) par le microcontrôleur 111 d'une fonction d'un 3050847 8 deuxième module logiciel, nous dirons que le premier module logiciel appelle la fonction du deuxième module logiciel. A noter que, lorsque le système d'exploitation est implémenté sur un dispositif électronique autre qu'une carte à puce, le microcontrôleur 111 est capable d'exécuter 5 des instructions chargées dans la mémoire vive RAM 112 à partir de la mémoire morte ROM 113 et/ou de la mémoire EEPROM 114, une fois que ledit dispositif électronique est alimenté en énergie. Dans un mode de réalisation, la carte à puce 10 comprend une librairie client appelée LM CLI et une librairie native appelée LM CRYPTO. La librairie native 10 LIB CRYPTO permet d'implémenter un module de cryptographie offrant des fonctions de cryptographie (i.e. des fonctions manipulant des données confidentielles comme par exemple des fonctions permettant de mettre en oeuvre un algorithme de cryptographie et des fonctions bas niveau). La librairie client LIB CLI permet d'implémenter un module client offrant des fonctions client faisant appel à des fonctions de cryptographie 15 du module de cryptographie. Chaque appel à une fonction de cryptographie par le module client est indirect. En effet, la carte à puce 10 comprend en outre une librairie native LIB INTER permettant d'implémenter un module d'interface entre le module client et le module de cryptographie. Par exemple, lorsque le module client fait appel à une fonction de cryptographie FCT CRYPTO du module de cryptographie, il fournit 20 un identifiant de la fonction de cryptographie FCT CRYPTO au module d'interface, qui se charge de l'appel effectif de la fonction de cryptographie FCT CRYPTO, la fonction de cryptographie étant mise en oeuvre par le module de cryptographie. Par ailleurs, le module d'interface se charge de copies en mémoire vive 112 de paramètres et résultats de fonctions. L'utilisation d'un accès indirect par l'intermédiaire d'un 25 module d'interface aux fonctions de cryptographie par le module client plutôt qu'un accès direct permet de limiter les risques de failles de sécurité. Afin d'accroître la sécurisation des données confidentielles utilisées par le module de cryptographie, dans un mode de réalisation, la mémoire vive RAM 112 est divisée en une pluralité de zones mémoires dédiées. Le module client et le module de 30 cryptographie utilisent des zones mémoires dédiées distinctes, ce qui évite que le module client (i.e. qu'une fonction exécutée par le module client) ait accès à des données confidentielles manipulées par le module de cryptographie. La Fig. 2 illustre schématiquement un exemple de configuration d'une mémoire vive utilisée dans l'invention. 3050847 9 Dans un mode de réalisation correspondant à l'exemple illustré en Fig. 2, la mémoire vive 112 est divisée en trois zones mémoires : - Une zone mémoire 1120, appelée RAM LIB CLIENT, dédiée au module client ; 5 - Une zone mémoire 1121, appelée RAM CRYPTO, dédiée au module de cryptographie; - Une zone mémoire 1122, appelée RAM SHARED, dédiée à des partages de données entre le module client et le module de cryptographie. La zone mémoire RAM CRYPTO 1121 est une zone mémoire sécurisée. En 10 effet, lorsque le module de cryptographie (i.e. lorsqu'une fonction de cryptographie exécutée par le module de cryptographie) manipule une donnée confidentielle, celle-ci est reçue par le module de cryptographie sous forme masquée et n'est démasquée que dans la zone mémoire RAM CRYPTO 1121. Par ailleurs, le module client n'a jamais accès directement à la zone mémoire RAM CRYPTO 1121. On peut noter que d'autres 15 solutions de sécurisation connues peuvent être utilisées en remplacement ou en combinaison avec les solutions citées dans ce mode de réalisation. Le module de cryptographie ne peut écrire et lire que dans la zone mémoire RAM CRYPTO 1121. Le module client ne peut écrire et lire que dans la zone mémoire 20 RAM LIB CLIENT 1120. Seul le module d'interface peut écrire et lire dans les trois zones mémoires RAM LIB CLIENT 1120, RAM CRYPTO 1121 et RAM SHARED 1122. La Fig. 3 illustre schématiquement un exemple d'un procédé selon l'invention dans lequel le module client fait appel à des fonctions de cryptographie. 25 Afin d'illustrer ce procédé, nous prenons l'exemple de l'opération OP suivante: OP: RESFINAL = (r. d)mod(q) + (k. e)mod(q) où RESFINAL est un résultat final de l'opération OP, r, d, k, et e sont des paramètres de l'opération OP, (x)mod(q) est l'opération modulo calculant le reste de la division euclidienne d'une variable x par une variable q. 30 L'opération OP peut se décomposer en deux sous-opérations : RESITER = (r. d)ni°d(q) RES/2NTER = (k. e)mocl(q) 3050847 10 où RESITER et RES/2NTER sont des résultats intermédiaires. L'opération OP a été stockée sous forme d'un programme d'ordinateur, par exemple sous forme de code intermédiaire, dans la mémoire non volatile 114 de la carte à puce. Ce programme comprend une suite de fonctions client. Cette suite de fonction client comprend une 5 première fonction client FCT CLI 1 prenant les deux paramètres r et d en entrée et implémentant la sous-opération (r. d)mod(q) et une deuxième fonction client FCT CLI 2 prenant les deux paramètres k et e en entrée et implémentant la sous-opération (k. e)mod(q). Le résultat de la sous-opération (k. e)mo d (g) doit être ajouté au résultat de la sous-opération (r. d)mod(q). Chaque fonction client de la suite de 10 fonctions client fait appel à une fonction de cryptographie pour mettre en oeuvre l'opération OP. Dans l'exemple de l'opération OP, chaque fonction client (FCT CLI 1 et FCT CLI 2) fait appel à une même fonction de cryptographie FCT CRYPTO réalisant la sous-opération j)mod(q), où i et j sont deux variables dont on souhaite calculer un produit modulo q. 15 On note que la suite de fonctions client pourrait contenir une première fonction client et une pluralité de deuxièmes fonctions client, chaque deuxième fonction client devant être exécutée à la suite de la première fonction client ou d'une autre deuxième fonction client et donnant un résultat d'exécution devant être ajouté à un résultat d'exécution de la fonction client la précédant dans la suite, chaque fonction client de la 20 suite faisant appel à une fonction de cryptographie, des fonctions de cryptographie différentes pouvant être appelées. Comme nous l'avons vu plus haut chaque appel à une fonction de cryptographie par le module client se fait par l'intermédiaire du module d'interface. Par exemple dans le programme d'ordinateur, l'appel à la fonction de cryptographie FCT CRYPTO par 25 la fonction client FCT CLI 1 se fait par l'intermédiaire d'une fonction d'interface FCT INTER du module d'interface prenant en entrée un identifiant de la fonction de cryptographie FCT CRYPTO et les paramètres r et d. Lorsque la carte à puce 10 est alimentée en énergie par le lecteur de carte via l'interface 110, le microcontrôleur 111 exécute le programme d'ordinateur 30 implémentant l'opération OP en chargeant ledit programme à partir de la mémoire non volatile 114. Dans une étape 29, le module client (i.e. le microcontrôleur 111 exécutant des instructions relatives à une fonction du module client) obtient la liste des fonctions client. 3050847 11 Dans une étape 30, le module client démarre un processus accumulatif en informant le module d'interface qu'un processus accumulatif va démarrer (i.e. le module client exécute une fonction client transmettant au module d'interface une information représentative d'un démarrage d'un processus accumulatif, de manière à ce 5 que le module d'interface prenne en compte ladite information pendant ses exécutions de fonctions d'interface). Lorsque le module d'interface est informé qu'un processus accumulatif va démarrer, il en informe le module de cryptographie (i.e. le module d'interface exécute une fonction d'interface transmettant au module de cryptographie une information représentative d'un démarrage d'un processus accumulatif, de manière 10 à ce que le module de cryptographie prenne en compte ladite information pendant ses exécutions de fonctions de cryptographie). Un processus accumulatif est une suite de fonctions, chaque fonction donnant un résultat devant être additionné à une valeur contenue dans une même mémoire tampon (buffer en terminologie anglo-saxonne). Dans une étape 31, le module d'interface alloue une mémoire tampon dans la zone 15 mémoire RAM CRYPTO 1121. Dans l'exemple de l'opération OP, cette mémoire tampon est destinée à accumuler les résultats de chaque exécution de la fonction de cryptographie FCT CRYPTO. Dans une étape 32, le module d'interface initialise la mémoire tampon à une valeur prédéfinie. Dans un mode de réalisation, la mémoire tampon est initialisée à zéro. 20 Dans une étape 33, le module client lance une exécution séquentielle de chaque fonction client de la suite. Chaque exécution d'une desdites fonctions client comprend un appel, par l'intermédiaire du module d'interface, à la fonction de cryptographie concernée par ladite fonction client provoquant une exécution par le module de cryptographie de ladite fonction de cryptographie dans la zone mémoire 25 RAM CRYPTO 1121. Le résultat d'exécution de ladite fonction de cryptographie est additionné à la valeur contenue dans la mémoire tampon par le module de cryptographie. L'étape 33 est donc une étape itérative. Au cours de chaque itération, lors d'une étape 330 que nous détaillons en relation avec la Fig. 4, le module client exécute une 30 des fonctions client de la suite. La Fig. 4 illustre schématiquement une exécution d'une fonction client de la suite faisant appel à la fonction de cryptographie FTC CRYPTO. 3050847 12 Dans une étape 3300, le module client appelle la fonction d'interface FCT INTER avec pour paramètres l'identifiant de la fonction de cryptographie FCT CRYPTO et les deux paramètres r et d. Dans une étape 3301, le module d'interface copie les deux paramètres r et d de la 5 zone mémoire RAM LIB CLIENT 1120 vers la zone mémoire RAM SHARED 1122. Dans une étape 3304, le module d'interface copie les deux paramètres r et d de la zone mémoire RAM SHARED 1120 vers la zone mémoire RAM CRYPTO 1122. Dans une étape 3305, le module d'interface appelle la fonction de cryptographie FCT CRYPTO avec les paramètres r et d, ce qui provoque l'exécution de la fonction 10 de cryptographie FCT CRYPTO par le module de cryptographie. Dans une étape 3306, le module de cryptographie ajoute le résultat de l'exécution de la fonction de cryptographie FCT CRYPTO à la valeur de la mémoire tampon et conserve la valeur obtenue dans la mémoire tampon. De retour à la Fig. 3, lors d'une étape 331, le module client vérifie si la fonction 15 client exécutée lors de l'étape 330 est la dernière fonction client de la suite. Si cette fonction client n'est pas la dernière de la suite, le module client exécute de nouveau l'étape 330 avec la fonction suivante dans la suite. Dans l'exemple de l'opération OP, le module client réalise deux itérations lors de l'étape 33, une première durant laquelle il met en oeuvre la fonction client FCT CLI 1 et ajoute le résultat de cette mise en 20 oeuvre à la valeur de la mémoire tampon (à la valeur zéro lors de la première itération) et une seconde durant laquelle il met en oeuvre la fonction client FCT CLI 2 et ajoute le résultat de cette mise en oeuvre à la valeur de la mémoire tampon (au résultat de l'exécution de la fonction client FCT CLI 1 lors de la deuxième itération). Lorsque toutes les fonctions client de la suite ont été exécutées, le module client 25 demande la valeur de la mémoire tampon au module d'interface. Le module d'interface met alors en oeuvre une étape 34, que nous détaillons par la suite en relation avec la Fig. 5, au cours de laquelle il copie dans la zone mémoire RAM LIB CLIENT 1120 la valeur contenue dans la mémoire tampon. Dans une étape 35, suite à la mise en oeuvre de l'étape 34, le module d'interface 30 sait que le processus accumulatif est terminé. Le module d'interface désalloue alors la mémoire tampon. La Fig. 5 détaille l'étape 34 de copie du résultat d'exécution de la suite de fonctions client FCT CLI 1 et FCT CLI 2 faisant appel à la fonction de cryptographie 3050847 13 FCT CRYPTO de la mémoire tampon vers la zone mémoire RAM LIB CLIENT 1120. Dans des étapes 340 et 344, le module d'interface exécute une fonction d'interface FCT INTER 2. Lors de l'étape 340, le module d'interface copie le résultat d'exécution 5 de la suite de fonctions client de la mémoire tampon vers la zone mémoire RAM SHARED 1122. Lors de l'étape 344, le module d'interface copie le résultat d'exécution de la suite de fonctions client de la zone mémoire RAM SHARED 1122 vers la zone mémoire RAM LIB CLIENT 1120. Dans un mode de réalisation, la zone mémoire RAM CRYPTO 1121 est bloquée 10 par défaut de manière à interdire toute lecture et écriture dans cette zone mémoire. Dans ce mode de réalisation, deux étapes 3302 et 3303 s'intercalent entre les étapes 3301 et 3304. Lors de l'étape 3302, le module d'interface bloque la zone mémoire RAM LM CLIENT 1120. Lors de l'étape 3303, le module d'interface débloque la zone mémoire RAM CRYPTO 1121. Par ailleurs, dans ce mode de réalisation, l'étape 15 3306 est suivie de deux étapes 3307 et 3308. Lors de l'étape 3307, le module d'interface bloque la zone mémoire RAM CRYPTO 1121. Lors de l'étape 3308, le module d'interface débloque la zone mémoire RAM LIB CLIENT 1120. Un principe identique est appliqué lors de l'étape 34, l'étape 340 étant précédée de deux étapes 338 et 339. Lors de l'étape 338, le module d'interface bloque la zone mémoire 20 RAM LIB CLIENT 1120. Lors de l'étape 339, le module d'interface débloque la zone mémoire RAM CRYPTO 1121. Deux étapes 341 et 342 s'intercalent entre les étapes 340 et 344. Lors de l'étape 341, le module d'interface bloque la zone mémoire RAM CRYPTO 1121. Lors de l'étape 342, le module d'interface débloque la zone mémoire RAM LIB CLIENT 1120. Ce mode de réalisation renforce la sécurité 25 puisque les accès à la zone mémoire RAM CRYPTO ne sont autorisés que lorsque cela est strictement nécessaire. Dans un mode de réalisation, la mémoire vive 112 ne comprend que la zone mémoire RAM LIB CLIENT et la zone mémoire RAM CRYPTO. Dans ce mode de réalisation, le module d'interface copie directement de la zone mémoire 30 RAM LIB CLIENT vers la zone mémoire RAM CRYPTO et inversement. Toutefois, préalablement à chaque copie dans la zone mémoire RAM CRYPTO, le module d'interface effectue une vérification permettant de s'assurer que la zone mémoire RAM CRYPTO ne contient aucune donnée confidentielle et, si la zone mémoire 3050847 14 RAM CRYPTO contient des données confidentielles, il efface ces données confidentielles. REVENDICATIONS1) Procédé d'optimisation d'écritures en mémoires dans un dispositif mettant en oeuvre une pluralité de modules logiciels, un premier module logiciel comprenant des fonctions manipulant des données confidentielles, un troisième module logiciel permettant à des fonctions d'un deuxième module logiciel, dites fonctions client, d'appeler des fonctions du premier module logiciel, dites fonctions de cryptographie, le dispositif comprenant une mémoire vive (112) divisée en une pluralité de zones mémoires, une première zone mémoire (1121) de la pluralité étant sécurisée et pouvant être utilisée exclusivement par le premier et le troisième modules logiciels, une deuxième zone mémoire (1120) pouvant être utilisée exclusivement par le deuxième et le troisième modules logiciels, caractérisé en ce que le procédé comprend: obtenir (29) une suite de fonctions client comprenant une première fonction client et au moins une deuxième fonction client, chaque deuxième fonction client devant être exécutée à la suite de la première fonction client ou d'une autre deuxième fonction client et donnant un résultat d'exécution devant être ajouté à un résultat d'exécution de la fonction client la précédant dans la suite, chaque fonction client de la suite faisant appel à une fonction de cryptographie ; allouer (31) une mémoire tampon dans la première zone mémoire (1121) et initialiser (32) cette mémoire tampon à une valeur égale à une valeur prédéfinie ; lancer (33) une exécution séquentielle de chaque fonction client de la suite, chaque exécution d'une desdites fonctions client comprenant un appel, par l'intermédiaire du troisième module logiciel, à la fonction de cryptographie concernée par ladite fonction client provoquant une exécution de ladite fonction de cryptographie dans la première zone mémoire (1121), le résultat d'exécution de ladite fonction de cryptographie étant additionné (3306) à la valeur contenue dans la mémoire tampon ; copier (34), dans la deuxième zone mémoire (1120), la valeur contenue dans la mémoire tampon suite à l'exécution de la dernière fonction client de la suite. 2) Procédé selon la revendication 1, caractérisé en ce que la première zone mémoire est bloquée en lecture et écriture par défaut et n'est débloquée que lors d'une exécution d'une fonction de cryptographie, la deuxième zone mémoire étant bloquée en lecture et écriture pendant chaque exécution d'une fonction de cryptographie. 3050847 16 3) Procédé selon la revendication 1 ou 2, caractérisé en ce que la mémoire vive (112) comprend une troisième zone mémoire, par laquelle transite chaque donnée échangée entre le premier et le deuxième modules logiciels depuis la première zone mémoire vers la deuxième zone mémoire ou depuis la deuxième zone mémoire vers la 5 première zone mémoire. 4) Procédé selon la revendication 1 ou 2, caractérisé en ce que chaque donnée échangée entre le premier et le deuxième modules logiciels est copiée de la première zone mémoire dans la deuxième zone mémoire ou de la deuxième zone mémoire dans 10 la première zone mémoire, et préalablement à chaque copie une vérification est mise en oeuvre permettant de s'assurer que la première zone mémoire ne contient aucune donnée confidentielle et, si la première zone mémoire contient des données confidentielles, lesdites données confidentielles sont effacées. 15 5) Dispositif (10) comprenant des moyens pour mettre en oeuvre le procédé selon l'une quelconque des revendications 1 à 4. 6) Dispositif (10) selon la revendication 5 caractérisé en ce que le dispositif est une carte à puce. 7) Programme d'ordinateur, caractérisé en ce qu'il comprend des instructions pour mettre en oeuvre, par un dispositif (10), le procédé selon l'une quelconque des revendications 1 à 4 lorsque ledit programme est exécuté par un processeur (111) dudit dispositif (10). 8) Moyens de stockage (112, 113, 114), caractérisés en ce qu'ils stockent un programme d'ordinateur comprenant des instructions pour mettre en oeuvre, par un dispositif (10), le procédé selon l'une quelconque des revendications 1 à 4, lorsque ledit programme est exécuté par un processeur (111) dudit dispositif (10). 20 25