FR 3019349 A1 20151002 FR 1452840 A 20140331 Arrière-plan de l'invention L'invention se rapporte au domaine général des télécommunications. Elle concerne plus particulièrement la sécurité et la protection de données informatiques telles que par exemple un programme informatique ou un logiciel. L'invention a une application privilégiée mais non limitative dans le domaine du stockage des données informatiques sur des supports physiques adressables à accès aléatoire. De tels supports sont par exemple des mémoires de tous types, volatiles ou mortes, reprogrammables ou non reprogrammables, monolithiques ou externes aux processeurs, etc. L'invention s'applique également aux nouvelles générations de mémoires vives ferroélectriques à accès aléatoires ou FRAM (Ferroelectric Random Access Memory). Le stockage de données informatiques (ex. données de programme ou données applicatives) sur une mémoire d'un dispositif dit cible pose le problème de la confidentialité de ces données, notamment lorsque le dispositif cible est situé dans un environnement considéré comme hostile ou appelé à le devenir même temporairement. Les méthodes de rétro-conception actuelles permettent de reconstituer un programme original en s'appuyant sur le caractère séquentiel (i.e. séquentialité) de la lecture des instructions destinées à l'unité arithmétique et logique du processeur du dispositif cible, stockées en mémoire. La lecture du contenu des mémoires peut se faire par des moyens logiques internes ou externes au processeur, en espionnant notamment les bus de données ou les bus d'adresses. Une autre méthode connue consiste à utiliser des interfaces standards présentes sur de nombreux processeurs, comme par exemple l'interface de test JTAG (Joint Test Action Group). Pour protéger les données informatiques stockées en mémoire du dispositif cible, deux grandes catégories de méthodes existent dans l'état actuel de la technique. La première catégorie s'appuie sur le chiffrement des données échangées entre la mémoire et le processeur du dispositif cible. Toutefois, une telle méthode peut être attaquée par cryptanalyse en utilisant une technique connue dite d'analyse de consommation (ou « power analysis ») permettant de révéler la clé de chiffrement utilisée, et ainsi dévoiler le contenu des données échangées et les dupliquer. La seconde catégorie de méthodes de protection repose sur le chiffrement des données stockées en mémoire et/ou des adresses mémoire de ces données à l'aide d'une ou de plusieurs clés de chiffrement, le déchiffrement étant réalisé lors de la lecture des données par le processeur du dispositif cible. L'opération généralement utilisée lors du chiffrement est la disjonction exclusive entre les éléments à chiffrer et la ou les clés de chiffrement, aussi appelée opération XOR. Toutefois, de telles méthodes présentent des faiblesses et restent sensibles aux attaques par cryptanalyse du fait notamment de la séquentialité de la représentation du programme en mémoire. En outre, dans la plupart des systèmes embarqués, l'espace mémoire du processeur n'est pas utilisé dans sa totalité, ou alors il est segmenté en plusieurs morceaux (i.e. segments) non nécessairement consécutifs, ou encore de tailles différentes ou affectés à des processus différents. Les inventeurs ont ainsi constaté qu'il n'existe pas aujourd'hui dans l'état de l'art de technique robuste de protection de données informatiques permettant de résister à des actions de rétro-conception tant en statique qu'en dynamique, et adaptée lorsque ces données informatiques sont stockées dans un espace mémoire d'un dispositif cible dont l'espace mémoire du processeur n'est pas utilisé dans sa totalité ou est segmenté en plusieurs morceaux. Objet et résumé de l'invention L'invention pallie notamment les inconvénients de l'état de la technique en proposant un procédé de transformation d'une adresse mémoire codée sur N bits, N désignant un entier supérieur à 1, ce procédé de transformation comprenant : une étape d'identification d'un segment de mémoire auquel appartient l'adresse mémoire ; et au moins une étape d'application en série, sur une partie des N bits de l'adresse mémoire : o d'une fonction de permutation paramétrée par une clé de permutation d'adresses associée à ce segment de mémoire ; et o d'une fonction de substitution paramétrée par une clé de substitution d'adresses associée à ce segment de mémoire ; ladite au moins une étape d'application résultant en une adresse mémoire transformée. Corrélativement, l'invention vise aussi un module de transformation d'une adresse mémoire codée sur N bits, N désignant un entier (strictement) supérieur à 1, ce module de transformation comprenant : une entité d'identification d'un segment de mémoire auquel appartient l'adresse mémoire ; une entité de permutation apte à appliquer une fonction de permutation paramétrée par une clé de permutation d'adresses associée au segment de mémoire identifié ; et une entité de substitution apte à appliquer une fonction de substitution paramétrée par une clé de substitution d'adresses associée au segment de mémoire identifié ; l'entité de permutation et l'entité de substitution étant agencées de sorte à agir en série sur une partie des N bits de l'adresse mémoire. L'invention vise également avantageusement un procédé de traitement d'un programme destiné à être stocké dans une mémoire d'un dispositif cible, ce programme comprenant une suite ordonnée d'instructions associées à des adresses mémoire codées sur N bits et destinées à être véhiculées sur un bus d'adresses du dispositif cible comprenant N fils d'adressage, N désignant un entier supérieur à 1, ce procédé de traitement comprenant une étape de mise en oeuvre d'un procédé de transformation selon l'invention sur tout ou partie des adresses mémoire associées aux instructions du programme, cette étape de mise en oeuvre résultant en un programme traité. Corrélativement, l'invention vise aussi un dispositif de traitement d'un programme destiné à être stocké dans une mémoire d'un dispositif cible, ce programme comprenant une suite ordonnée d'instructions associées à des adresses mémoire codées sur N bits et destinées à être véhiculées sur un bus d'adresses du dispositif cible comprenant N fils d'adressage, N désignant un entier supérieur à 1, ledit dispositif de traitement comprenant un module de transformation selon l'invention apte à transformer tout ou partie des adresses mémoire associées aux instructions du programme et à fournir un programme traité. Le programme est par exemple un code exécutable destiné à être fourni au dispositif cible pour exécution (par téléchargement ou autre). L'invention propose ainsi de protéger les données stockées dans une mémoire d'un dispositif cible en agissant au niveau des adresses des cellules (ou mots) mémoire où sont stockées ces données et en tenant compte de la segmentation physique ou logique (c'est-à-dire par instance d'exécution) de l'espace d'adressage mémoire du dispositif cible. Cette action repose sur l'application d'une fonction composée judicieusement choisie, partant de l'espace d'adressage mémoire « naturel » et organisé de façon séquentielle de l'unité d'exécution (ex. processeur) du dispositif cible (auquel appartient l'adresse mémoire avant transformation) vers un nouvel espace d'adressage mémoire de même dimension (auquel appartient l'adresse mémoire transformée). La correspondance entre les deux espaces d'adressage est assurée par une fonction composée de mécanismes matériels paramétrés par des clés au sens cryptographique du terme dépendant du segment de mémoire en cours d'accès (c'est-à-dire auquel appartient l'adresse mémoire à traiter), à savoir une fonction de permutation paramétrée par une clé de permutation d'adresses permettant de mélanger les bits de l'adresse mémoire, et une fonction de substitution paramétrée par une clé de substitution d'adresses permettant de masquer la permutation appliquée. Les clés de permutation et de substitution dépendent avantageusement du segment de mémoire en cours d'accès afin de maintenir les adresses transformées dans ce segment de mémoire. La fonction de substitution comprend par exemple à cet effet au moins une table de substitution de type S-Box, couramment utilisée en cryptographie. Les fonctions de permutation et de substitution sont appliquées en série à l'adresse mémoire initiale (autrement dit, l'une à la suite de l'autre, l'une s'appliquant au résultat de l'autre elle-même appliquée à l'adresse mémoire initiale). Lorsque le procédé de transformation est appliqué aux différentes adresses mémoire destinées à être véhiculées sur un bus d'adresses d'un dispositif cible, l'invention permet avantageusement grâce à l'application de la fonction de permutation, de rompre le caractère séquentiel des instructions ou des données contenues dans les mots ou cellules mémoires adressés par ce bus (autrement dit désignés par les adresses mémoire ainsi transformées). L'application combinée à cette fonction de permutation d'une fonction de substitution adaptée au segment considéré (afin notamment de maintenir les adresses dans le segment de mémoire) permet de masquer certaines permutations particulières d'adresses qui ne sont pas souhaitables, comme par exemple lorsqu'on ne permute que des 0 entre eux ou que des 1. L'ensemble de ces caractéristiques de l'invention permet de rendre particulièrement difficile toute tentative de rétro-conception. En outre, l'application d'une clé de permutation et/ou d'une clé de substitution distinctes en fonction du segment de mémoire en cours d'accès (i.e. segment dans lequel se trouve l'adresse mémoire destinée à être transformée) permet avantageusement de rendre plus complexe la fonction utilisée pour transformer les adresses mémoire du programme. Par ailleurs, ceci offre la possibilité d'avoir une segmentation logique de la mémoire, c'est-à-dire de réserver des segments de la mémoire à des processus ou des instances d'exécution distincts tout en s'assurant qu'un processus ou une instance d'exécution donnée ne peut pas accéder à un segment de mémoire dédié à un autre processus ou instance d'exécution. Bien entendu, on s'assure que la fonction composée résultant de l'application successive de la fonction de permutation et de la fonction de substitution est bijective. Cette propriété garantit qu'à toute combinaison dans l'espace d'adressage mémoire de départ de l'unité d'exécution du programme du dispositif cible correspond une unique combinaison dans l'espace d'adressage mémoire d'arrivée résultant de l'application de la fonction composée. De cette sorte, l'inversion de la fonction composée est possible par le dispositif cible lors de l'exécution du programme. En revanche, l'ordre dans lequel sont enchaînées ces fonctions peut être quelconque. Il résulte notamment d'un choix d'implémentation. En outre, on peut enchaîner l'étape d'application de la fonction composée plusieurs fois pour obtenir l'adresse mémoire transformée (i.e. enchaînement plusieurs fois des deux fonctions de permutation et de substitution). La décision de mettre en oeuvre cette étape une unique fois ou une pluralité de fois peut résulter d'un compromis entre la robustesse de la solution proposée aux attaques de rétro-conception et la latence nécessaire résultant de la transformation de l'adresse du fait de l'application une pluralité de fois de la fonction composée. Pour un programme de type code informatique exécutable, celui-ci est préférentiellement traité conformément à l'invention avant d'être transmis au dispositif cible, de sorte qu'il se présente sous une forme compréhensible à l'unité d'exécution (ex. processeur ou processus d'exécution) du dispositif cible. Ce traitement peut ainsi être mis en oeuvre notamment suite à la compilation du programme ou lors de sa diffusion vers le dispositif cible (ex. via un téléchargement ou par un moyen physique tel qu'un CD-ROM ou une clé USB (Universal Serial Bus)). Dans un mode particulier de réalisation, la clé de permutation d'adresses et la clé de substitution d'adresses sont spécifiques au dispositif cible auquel est destiné le programme ou à une unité d'exécution du dispositif cible apte à exécuter le programme. L'invention autorise ainsi la personnalisation du programme pour un dispositif cible donné ou une unité d'exécution particulière de ce dispositif cible (ex. processus d'exécution donné) en s'assurant que seul(e) le dispositif cible ou l'unité d'exécution auquel le programme est destiné dispose des clés de permutation et de substitution utilisées pour traiter initialement le programme. De cette sorte, un programme traité pour un dispositif cible ou une unité d'exécution ne peut être exécuté par un autre dispositif cible ou une autre unité d'exécution. Une application privilégiée de l'invention est par exemple la mise à jour d'un programme ou logiciel dans un environnement hostile. On peut alors choisir pour l'une des clés de permutation et/ou de substitution une diversification du numéro de série du processeur du dispositif cible, de sorte que le programme traité conformément à l'invention avec une telle clé conformément à l'invention est protégé d'une rétro-conception tout au long de la chaîne de mise à jour. Dans un mode particulier de réalisation, le segment de mémoire en cours d'accès (autrement dit auquel appartient l'adresse mémoire à transformer) est identifié à partir d'un nombre prédéterminé p bits consécutifs de poids fort ou de poids faible de l'adresse mémoire, p désignant un entier supérieur ou égal à 1, les fonctions de permutation et de substitution étant appliquées sur les N-p bits restant de l'adresse mémoire. Ce mode de réalisation facilite le décodage des adresses mémoire à transformer et l'identification du segment de mémoire auxquelles elles se rapportent. Dans un mode particulier de réalisation, le procédé de transformation comprend en outre une étape de translation de l'adresse mémoire comprenant la modification d'au moins un bit de l'adresse mémoire identifiant le segment auquel appartient l'adresse mémoire. Ce mécanisme permet une segmentation logique de la mémoire. Il est ainsi possible notamment de réserver une zone mémoire particulière à une unité ou instance ou processus d'exécution donné et de la rendre inaccessible aux autres unités d'exécution. Ceci peut être mis en oeuvre en faisant dépendre la translation d'adresses de l'unité d'exécution. Dans un mode particulier de réalisation, le procédé de traitement du programme comprend en outre une étape d'application en série aux données contenues dans des instructions du programme associées à des adresses mémoires d'un même segment de mémoire : d'une fonction de permutation paramétrée par une clé de permutation de données associée au segment de mémoire ; et d'une fonction de substitution paramétrée par une clé de substitution de données associée au segment de mémoire. Ainsi, non seulement la séquentialité des données est rompue via la transformation des adresses mémoire, mais les données sont également protégées via un mécanisme similaire à celui utilisé pour les adresses mémoire de sorte à les rendre incompréhensibles par un dispositif qui ne connaît pas les clés de permutation et de substitution utilisées conformément à l'invention. Avantageusement les clés de permutation et de substitution des adresses mémoires peuvent être différentes des clés de permutation et de substitution des données. L'invention rend ainsi extrêmement difficiles les opérations de rétro-conception. Dans un mode particulier de réalisation, le procédé de traitement comprend une étape de fourniture (ex. par téléchargement ou via un espace de stockage matériel tel qu'un CDROM ou une clé USB) du programme traité au dispositif cible pour stockage dans la mémoire du dispositif cible, et le cas échéant exécution par celui-ci. Ainsi, selon un autre aspect, l'invention vise aussi un procédé de réception par un dispositif cible d'un programme comprenant une pluralité d'instructions et traité conformément à un procédé de traitement selon l'invention, tout ou partie desdites instructions étant associées à des adresses mémoire transformées, ce procédé de réception comprenant : une étape de stockage du programme traité reçu dans une mémoire du dispositif cible ; et une étape d'exécution par une unité d'exécution du dispositif cible des instructions du programme traité au cours de laquelle l'unité d'exécution tient compte de la fonction de permutation et de la fonction de substitution appliquées durant le procédé de traitement aux adresses mémoire associées à ces instructions. Corrélativement, l'invention concerne un dispositif cible comprenant : un module de réception d'un programme comprenant une pluralité d'instructions et traité par un dispositif de traitement selon l'invention, tout ou partie des instructions étant associées à des adresses mémoire transformées par le module de transformation du dispositif de traitement ; une mémoire dans laquelle sont stockés le programme traité et les clés de permutation et de substitution utilisées par le module de transformation du dispositif de traitement pour transformer ces adresses mémoire ; et une unité d'exécution apte à exécuter les instructions du programme traité en tenant compte de la fonction de permutation et de la fonction de substitution appliquées aux adresses mémoires associées à ces instructions. Il convient de noter que de façon avantageuse, le dispositif cible n'a pas besoin de « prétraiter » en bloc (i.e. dans son intégralité) le programme traité reçu préalablement à son exécution, afin de lui appliquer l'opération inverse des permutation(s) et substitution(s) utilisées lors de son traitement. Dans la suite de la description, cette opération inverse est également désignée par opération de « déchiffrement ». Cette opération de déchiffrement peut être au contraire réalisée à la volée (c'est-à-dire au fil de l'exécution du programme par le dispositif cible), pour chaque instruction séparément les unes des autres. En outre, l'unité d'exécution du dispositif cible n'exécute pas des instructions contigües en mémoire, i.e. du fait du traitement selon l'invention, celles-ci ne sont pas distribuées séquentiellement dans la mémoire. De cette sorte, une entité ou une personne interceptant le programme traité n'est pas capable de l'exécuter. Dans un mode particulier de réalisation, les différentes étapes du procédé de transformation, du procédé de traitement et/ou du procédé de réception sont déterminées par des instructions de programmes d'ordinateurs. En conséquence, l'invention vise aussi un programme d'ordinateur sur un support d'informations, ce programme étant susceptible d'être mis en oeuvre dans un module de transformation ou plus généralement dans un ordinateur, ce programme comportant des instructions adaptées à la mise en oeuvre des étapes d'un procédé de transformation tel que décrit ci-dessus. L'invention vise également un programme d'ordinateur sur un support d'informations, ce programme étant susceptible d'être mis en oeuvre dans un dispositif de traitement ou plus généralement dans un ordinateur, ce programme comportant des instructions adaptées à la mise en oeuvre des étapes d'un procédé de traitement tel que décrit ci-dessus. L'invention vise aussi un programme d'ordinateur sur un support d'informations, ce programme étant susceptible d'être mis en oeuvre dans un dispositif de réception ou plus généralement dans un ordinateur, ce programme comportant des instructions adaptées à la mise en oeuvre des étapes d'un procédé de réception tel que décrit ci-dessus. Chacun de ces programmes peut utiliser n'importe quel langage de programmation, et être sous la forme de code source, code objet, ou de code intermédiaire entre code source et code objet, tel que dans une forme partiellement compilée, ou dans n'importe quelle autre forme souhaitable. L'invention vise aussi un support d'informations lisible par un ordinateur, et comportant des instructions d'un programme d'ordinateur tel que mentionné ci-dessus. Le support d'informations peut être n'importe quelle entité ou dispositif capable de stocker le programme. Par exemple, le support peut comporter un moyen de stockage, tel qu'une ROM, par exemple un CD ROM ou une ROM de circuit microélectronique, ou encore un moyen d'enregistrement magnétique, par exemple une disquette (floppy disc) ou un disque dur. D'autre part, le support d'informations peut être un support transmissible tel qu'un signal électrique ou optique, qui peut être acheminé via un câble électrique ou optique, par radio ou par d'autres moyens. Le programme selon l'invention peut être en particulier téléchargé sur un réseau de type Internet. Alternativement, le support d'informations peut être un circuit intégré dans lequel le programme est incorporé, le circuit étant adapté pour exécuter ou pour être utilisé dans l'exécution du procédé en question. Selon un autre aspect encore, l'invention vise un système comprenant : un dispositif de traitement selon l'invention apte à traiter un programme ; et un dispositif cible selon l'invention apte à recevoir le programme traité par le dispositif de traitement pour stockage et/ou exécution. Ce système bénéficie des mêmes avantages cités précédemment que le dispositif de traitement et le dispositif cible. On peut également envisager, dans d'autres modes de réalisation, que le procédé de transformation, le procédé de traitement, le procédé de réception, le module de transformation, le dispositif de traitement, le dispositif de réception et le système selon l'invention présentent en combinaison tout ou partie des caractéristiques précitées. Brève description des dessins D'autres caractéristiques et avantages de la présente invention ressortiront de la description faite ci-dessous, en référence aux dessins annexés qui en illustrent des exemples de réalisation dépourvus de tout caractère limitatif. Sur les figures : la figure 1 représente, de façon schématique, un système, un dispositif de traitement et un dispositif cible conformes à l'invention, dans un mode particulier de réalisation ; les figures 2 et 3 illustrent l'architecture matérielle d'un dispositif de traitement et d'un dispositif cible conformes à l'invention ; la figure 4 représente, sous forme d'ordinogramme, les principales étapes d'un procédé de traitement et d'un procédé de transformation selon l'invention dans un mode particulier de réalisation ; la figure 5 illustre un module de transformation d'adresses conforme à l'invention, dans un mode particulier de réalisation ; et la figure 6 représente, sous forme d'ordinogramme, les principales étapes d'un procédé de réception selon l'invention, dans un mode particulier de réalisation. Description détaillée de l'invention La figure 1 représente, dans son environnement, un système 1 conforme à l'invention dans un mode particulier de réalisation. Ce système comprend un dispositif de traitement 2 et un dispositif dit cible 3 conformes à l'invention. Le dispositif de traitement 2 est dans l'exemple envisagé ici un ordinateur apte à traiter conformément à l'invention un programme informatique P destiné au dispositif cible 3, afin notamment de le rendre robuste aux actions de rétro-conception. Le programme P est par exemple un code exécutable tel un logiciel informatique, préalablement compilé ici par un module (logiciel) de compilation 4 interne au dispositif de traitement 2. Le dispositif cible 3 est par exemple un équipement physique tel une passerelle résidentielle, un boîtier décodeur (ou « set top box » en anglais. En variante, le programme P peut avoir été compilé par une unité de compilation externe au dispositif de traitement 2. De façon connue en soi, le module de compilation 4 connait, pour la compilation de programmes destinés au dispositif cible 3, les caractéristiques physiques de celui-ci, et notamment l'unité d'exécution en charge d'exécuter le programme (ex. instance ou processus d'exécution dédié(e), processeur du dispositif cible 3), la taille de la mémoire principale du dispositif cible 3, c'est-à-dire de sa mémoire vive dans laquelle sont stockés les programmes lors de leur exécution par le processeur du dispositif cible 3, et le cas échéant, la façon dont cette mémoire est segmentée (ex. nombre, tailles et emplacements des segments, chaque segment de mémoire comprenant une pluralité d'adresses mémoires contiguës, segment de mémoire dédié à tel ou tel processus ou unité d'exécution si plusieurs processus ou unités d'exécution distinct(e)s peuvent être envisagés, etc.), etc. Le module de compilation 4 connaît également la dimension des bus d'adresses et de données du dispositif cible 3. De façon connue en soi, un bus est un ensemble de fils véhiculant des signaux électriques logiques binaires. La tension appliquée à l'un de ces fils peut être interprétée comme ayant une valeur VRAI ou FAUX, « 1 » ou « 0 ». Les tensions représentant ces valeurs peuvent être différentes en fonction de la technologie considérée. Par exemple, en logique positive, une tension proche de la tension d'alimentation est considérée comme un « 1 » binaire ou véhiculant la valeur VRAI alors qu'une tension proche de la masse ou de zéro volt est considérée comme un « 0 » binaire ou véhiculant la valeur FAUX. Dans une architecture de type Von Neuman classique, le processeur du dispositif considéré (ou plus généralement l'unité d'exécution) utilise deux bus différenciés en raison de leurs fonctionnalités respectives, à savoir un bus de données, qui véhicule sous forme binaire les instructions et les données utilisées par le processeur, et un bus d'adresses qui permet au processeur de présenter l'adresse des instructions qu'il désire lire en mémoire ou de lire et/ou écrire des données en mémoire. Les différentes combinaisons binaires présentées par le processeur correspondent chacune à une adresse différente donc à un mot ou une cellule mémoire différente. L'invention ne se limite toutefois pas à une architecture de type Von Neuman et peut être appliquée à d'autres types d'architectures comme par exemple une architecture de type Harvard dans laquelle les bus d'adresses et d'instructions destinés à véhiculer des instructions sont séparés des bus d'adresses et de données destinés à véhiculer des données. On suppose par ailleurs que les caractéristiques physiques précitées du dispositif cible 3 sont également connues du dispositif de traitement 2. Le programme P se présente, de façon connue de l'homme du métier, sous la forme d'une suite ordonnée d'instructions, chaque instruction comprenant un ensemble de données et étant associée à une adresse mémoire (généralement statique) désignant la cellule mémoire (ou encore le mot ou la case mémoire) dans laquelle est destinée à être stockée l'instruction sur le dispositif cible 3. Les dimensions de chaque adresse mémoire et de chaque instruction dépendent de la capacité de l'unité d'exécution du programme du dispositif cible 3 et de sa mémoire (mémoire vive et/ou morte). Dans l'exemple envisagé ici, on suppose : - que chaque adresse mémoire est codée sur un nombre entier de bits N supérieur (strictement) à 1 et est destinée à être véhiculée sur un bus d'adresses du dispositif cible 3 comprenant N fils d'adressage ; - que chaque cellule mémoire comprend un nombre entier de bits M supérieur (strictement) à 1, destinés à être véhiculés sur un bus de données comprenant M fils du dispositif cible 3. Autrement dit, chaque instruction comprend des données codées sur M bits ; et - que le bus d'adresses du dispositif cible 3 est subdivisé en deux bus comprenant respectivement p fils d'adressage (premier bus) et N-p fils d'adressage (second bus), p désignant un entier supérieur à 1. L'espace d'adressage de la mémoire du dispositif cible est ainsi subdivisé en plusieurs segments de mémoire distincts. La taille de chaque segment est une puissance de 2 et peut être inférieure ou égale à 2P (sinon un découpage du segment en segments de taille égale à une puissance de 2 entière est réalisé). La mémoire du dispositif cible 3 peut ainsi être subdivisée en au plus 2" segments de même type. On suppose ici par souci de simplification que tous les segments ont la même taille (ex. 2P). Chaque segment est identifié par une adresse mémoire dite de base. Les adresses mémoire des différents segments de la mémoire du dispositif cible 3 se distinguent en considérant les N-p bits du second bus. L'entier p est supposé connu du dispositif de traitement 2. Il convient de noter que les segments de mémoire de la mémoire (vive et/ou morte) du dispositif cible 3 ne sont pas nécessairement de mêmes dimensions. Par exemple, la mémoire du dispositif cible peut comprendre un segment de mémoire S1 de dimension 16ko (kilo octets), un segment de mémoire S2 de dimension 16ko et un segment de mémoire S3 de dimension 64ko. Il peut en outre s'agir de segments de mémoire non contigus (segmentation physique de la mémoire), et/ou dédiés à des processus ou des instances d'exécution distinctes (segmentation logique). Aucune limitation n'est attachée à proprement parler à la nature de cette segmentation. Toutefois, on comprend bien que du fait de la nature des opérations mises en oeuvre par l'invention (permutation et substitution au sein d'un segment de mémoire), plus les segments de mémoire sont de taille importante, plus l'entropie résultant de ces opérations est grande, et rendent plus complexes les tentatives de rétro-conception. Par ailleurs, aucune limitation n'est attachée à la répartition envisagée en mémoire des instructions du programme P par le dispositif cible 3. Ainsi, l'ensemble des instructions du programme P peut être destiné à être stocké dans un même segment de la mémoire du dispositif cible 3 pour son exécution, ou les instructions peuvent être réparties sur des segments de mémoire distincts. Pour traiter le programme P, le dispositif de traitement 2 comprend, dans le mode de réalisation décrit ici : un module de sélection 5, apte à sélectionner séquentiellement et dans l'ordre chaque instruction de M bits du programme P désignée par DO,...,DM-1 et l'adresse mémoire codée sur N bits qui lui est associée, désignée par X0,...,XN-1 ; un module 6 de transformation d'adresses mémoire conforme à l'invention, alimenté par le module de sélection 5 avec chaque adresse mémoire X0,...,XN-1 de N bits sélectionnée par ce dernier, le module de transformation 6 fournissant une adresse mémoire transformée notée ZO,...,ZN-1 ; un module 7 de transformation de données, alimenté par le module de sélection 5 avec chaque instruction de M bits sélectionnée par ce dernier, le module de transformation 7 fournissant une instruction transformée notée CO,...,CM-1 ; et un module de combinaison 8 apte à fournir un programme P' traité comprenant les adresses mémoires ZO,..., ZN-1 et les instructions CO,...,CM-1 du programme P transformées respectivement par les modules de transformation 6 et 7. Le module 6 de transformation d'adresses mémoire comprend, conformément à l'invention, pour chaque segment S distinct de la mémoire du dispositif cible 3 : une entité 6A(S) de décodage de l'adresse qui lui est fournie en entrée afin d'identifier si cette adresse appartient ou non au segment de mémoire S (l'entité 6A(S) est une entité d'identification du segment de mémoire auquel appartient l'adresse au sens de l'invention) ; une entité de permutation 6B(S) apte à appliquer à l'adresse qui lui est fournie en entrée une fonction de permutation fm0(S) paramétrée par une clé de permutation d'adresses Km0(S) associée au segment S ; et une entité de substitution 6C(S) apte à appliquer à l'adresse qui lui est fournie en entrée une fonction de substitution fm1(S) paramétrée par une clé de substitution d'adresses Km1(S) associée au segment S. Par souci de simplification sur la figure 1, seules les entités 6A, 6B et 6C associées à un unique segment S de mémoire sont représentées. Le module de transformation 6 comprend toutefois autant d'entités 6A, 6B et 6C que de segments de mémoire distincts présents dans la mémoire (vive et/ou morte) du dispositif cible 3. Dans l'exemple envisagé ici, on suppose que les N-p bits de poids fort Xp,...,XN-1 de l'adresse mémoire X0,...,XN-1 désignent le segment de mémoire S auquel appartient l'adresse mémoire. Les p bits de poids faible X0,...,Xp-1 désignent la case mémoire dans ce segment S à laquelle correspond l'adresse mémoire X0,...,XN-1. Bien entendu, d'autres conventions peuvent être envisagées en variante. Par exemple, les N-p bits de poids faible peuvent désigner le segment S tandis que les p bits de poids fort désignent la case mémoire du segment correspondant à l'adresse mémoire X0,...,XN-1. Selon la convention envisagée ici, chaque entité 6A(S) de décodage considère les N-p bits de poids fort Xp,...,XN-1 de l'adresse mémoire X0,...,XN-1 afin d'identifier si l'adresse mémoire X0,...,XN-1 appartient ou non au segment de mémoire S (c'est-à-dire désigne une adresse mémoire du segment de mémoire S). Le cas échéant, les entités de permutation 6B(S) et de substitution 6C(S) sont activées pour appliquer la permutation fm0(S) et la substitution fm1(S) sur les p bits de poids faible X0,...,Xp-1 de l'adresse mémoire X0,...,XN-1, les N-p bits de poids fort de l'adresse mémoire restant inchangés afin de garantir qu'après permutation par l'entité de permutation 6B(S), l'adresse mémoire transformée reste dans le segment de mémoire S. Les entités de permutation 6B(S) et de substitution 6C(S) sont agencées de sorte à agir en série. Dans le mode de réalisation décrit ici, l'entité de permutation 6B(S) agit sur les p bits de poids faible de l'adresse mémoire avant l'entité de substitution 6C(S). Toutefois l'invention s'applique également à un agencement de ces deux entités dans l'ordre inverse (i.e. d'abord la substitution puis la permutation). De façon similaire, dans le mode de réalisation décrit ici, le module 7 de transformation de données comprend, pour chaque segment S de mémoire : une entité de permutation 7A(S) apte à appliquer une fonction de permutation fd0(S) paramétrée par une clé de permutation de données KdO(S) associée au segment de mémoire S ; et une entité de substitution 7B(S) apte à appliquer une fonction de substitution fd1(S) paramétrée par une clé de substitution de données Kd1(S) associée au segment de mémoire S. Par souci de simplification sur la figure 1, les entités 7A et 7B associées à un unique segment de mémoire S sont représentées. Ces entités de permutation 7A(S) et de substitution 7B(S) sont agencées de sorte à agir en série sur les M bits de données DO,...,DM-1. Dans le mode de réalisation décrit ici, l'entité de permutation 7A(S) agit sur les M bits de données avant l'entité de substitution 7B(S). Toutefois l'invention s'applique également à un agencement de ces deux entités dans l'ordre inverse (i.e. d'abord la substitution puis la permutation). Dans le mode de réalisation décrit ici, les clés de permutation et de substitution de données et d'adresses Km0(S), Km1(S), KdO(S), Kd1(S) sont des clés au sens cryptographique du terme spécifiques au dispositif cible 3 et à chaque segment de mémoire S de ce dernier. Autrement dit, seuls le dispositif cible 3 et le dispositif de traitement 2 sont censés connaître et partager ces clés. La forme et la nature de ces clés sont détaillées ultérieurement. Dans le mode de réalisation décrit ici, les modules 5 à 8 du dispositif de traitement 2 sont portés sur un système embarqué sur une puce électronique, aussi connu sous l'appellation de « System on Chip » en anglais, interne au processeur du dispositif de traitement 2 sans toutefois être une limitation à l'application de l'invention. En variante, les modules 5 à 8 du dispositif de traitement 2 peuvent être des modules logiciels. En outre, dans le mode de réalisation décrit ici, les dispositifs de traitement 2 et cible 3 sont des terminaux, et plus particulièrement des ordinateurs. Toutefois, aucune limitation n'est attachée à la nature des dispositifs 2 et 3. Il peut s'agir de serveurs, de terminaux mobiles tels que des téléphones intelligents (ou « smartphones » en anglais), des tablettes électroniques, etc. L'architecture matérielle du dispositif de traitement 2 est illustrée schématiquement à la figure 2. Il comprend notamment, un processeur ou groupe de processeurs 10 intégrant le système sur puce 9, une mémoire morte 11, une mémoire non volatile 12 dans laquelle est stockée le programme P, une mémoire vive 13 et des moyens de communication 14. Les clés de permutation KmdO(S), KdO(S) et les clés de substitution Km1(S), Kd1(S) associées aux différents segments de mémoire du dispositif cible 3 sont stockées sur le système sur puce 9. Les moyens de communication 14 peuvent être des moyens de communication sur un réseau de télécommunications (incluant par exemple une carte réseau), et/ou des ports d'entrée/sortie (tels qu'un port USB), etc., qui permettent au dispositif de traitement 2 de fournir au dispositif cible 3 le programme P' résultant du traitement conforme à l'invention du programme P. L'architecture matérielle du dispositif cible 3 est quant à elle illustrée schématiquement à la figure 3. Le dispositif cible 3 comprend de façon similaire un processeur 15, une mémoire morte 16, une mémoire vive 17 comprenant une pluralité de segments de mémoire distincts (pas nécessairement contigus), une mémoire non volatile 18 destinée à recevoir et à stocker le programme P' résultant du traitement du programme P par le dispositif de traitement 2 et dans laquelle sont stockées les clés de permutation KmdO(S), KdO(S) et les clés de substitution Km1(S), Kd1(S) associées à chaque segment S de mémoire de la mémoire vive 17 ou de la mémoire non volatile 18 du dispositif cible 3. Le dispositif cible 3 comprend également des moyens de communication 19. Ces moyens de communication peuvent être des moyens de communication sur un réseau de télécommunications (incluant par exemple une carte réseau), et/ou des ports d'entrée/sortie (tels qu'un port USB), etc. Le processeur 15 et les différentes mémoires 16, 17 et 18 communiquent via des bus d'adresses 20 et de données 21. Le bus d'adresses 20 comprend N fils d'adressage et le bus de données 21 M fils, comme mentionné précédemment. La mémoire morte 16 du dispositif cible 3 constitue un support d'enregistrement lisible par le processeur 15 et sur lequel est enregistré un programme d'ordinateur conforme à l'invention, comportant des instructions pour l'exécution des étapes d'un procédé de réception conforme à l'invention, ces étapes étant décrites ultérieurement en référence à la figure 6. Nous allons maintenant décrire plus en détail, en référence aux figures 4 à 5 les principales étapes du procédé de traitement et du procédé de transformation mis en oeuvre par le dispositif de traitement 2 et plus précisément par le système sur puce 9. En référence à la figure 4, le module de compilation 4 du dispositif de traitement 2 fournit au module de sélection 5 le programme informatique P destiné au dispositif cible 3 dans une version compilée (étape E10). Comme mentionné précédemment, ce programme P comprend une suite ordonnée d'instructions, chaque instruction (référencée par l'indice i sur la figure 4) étant associée à une adresse mémoire X0,...,XN-1 codée sur N bits qui désigne la cellule de la mémoire 17 du dispositif cible 3 destinée à stocker l'instruction i lors de l'exécution du programme P par le processeur 15. Chaque cellule mémoire adressée par une adresse mémoire X0,...,XN-1 comprend les M bits de données DO,...,DM-1. Par souci de simplification dans la suite de la description, l'indice i référençant l'instruction du programme en cours de traitement par le dispositif de traitement 2 est omis. Conformément à l'invention, le dispositif de traitement 2 traite le programme P pour le rendre plus robuste aux actions de rétro-conversion en vue de le transmettre au dispositif cible 3. Plus précisément, au moyen de son module de sélection 5 et de ses modules de transformation 6 et 7, le dispositif de traitement 2 traite séquentiellement et dans l'ordre chaque instruction i du programme P. Pour chaque instruction i sélectionnée par le module de sélection 5 (étape E20), le module de transformation 6 détermine (i.e. identifie) en premier lieu à partir des N-p bits de poids fort Xp,...,XN-p de l'adresse X0,...,XN-1 associée à cette instruction i à quel segment S de la mémoire 17 ou 18 du dispositif cible 3 correspond l'adresse (étape E30). Puis il applique sur les p bits de poids faible X0,...,Xp-1 de l'adresse, une fonction composée résultant de l'application en série (i.e. enchaînement) des deux fonctions élémentaires de permutation fm0(S) et de substitution fml(S) paramétrées respectivement par les clés Km0(S) et Km1(S) associées au segment de mémoire S (étapes E40 et E50). La figure 5 illustre schématiquement l'architecture matérielle sur laquelle s'appuie le module 6 de transformation d'adresses pour réaliser les étapes E30 à E50. Par souci de simplification, la figure 5 se limite à un segment de mémoire unique S. Toutefois, comme mentionné précédemment, les éléments représentés à la figure 5 sont répliqués pour chaque segment distinct de la mémoire 17 ou 18 du dispositif cible 3. Pour chaque segment de mémoire S, le module de transformation d'adresses 6 comprend : - un registre de masquage SMR (« Segment Mask Register » en anglais) qui reçoit le complément bit à bit de la taille p du segment exprimée en une puissance entière de 2 et diminuée d'une unité (i.e. 2P-1). En d'autres mots, et selon la convention adoptée, les N-p bits de poids fort de ce registre SMR sont positionnés à 1 (partie hachurée du registre sur la figure 5). Ils correspondent aux bits de l'adresse X0,...,XN-1 qui sont utilisés pour déterminer l'adresse du segment auquel appartient cette adresse ; un registre de décodage de l'adresse du segment MSR (« Memory Segment Register » en anglais) ; une banque de registres MJBO (« Memory Jammer Bank » en anglais) apte à appliquer la fonction de permutation fm0(S) paramétrée par la clé de permutation d'adresses Km0(S) ; et une banque de registres MJB1 apte à appliquer la fonction de substitution fm1(S) paramétrée par la clé de substitution d'adresses Knn1(S). Ainsi, l'entité de décodage d'adresses 6A du module de transformation 6 d'adresses s'appuie sur les registres SMR et MSR, l'entité de permutation 6B sur la banque de registres MJBO et l'entité de substitution 6C sur la banque de registres MJB1. Plus précisément, sur réception d'une adresse X0,...,XN-1 du module de sélection 5, les N-p bits du registre MSR dont leurs équivalents dans le registre de masquage SMR sont positionnés à la valeur logique 1 sont comparés par l'entité de décodage 6A(S) aux N-p bits correspondant de l'adresse X0,...,XN-1 (étape E30). Dans l'exemple envisagé ici, ils sont comparés aux N-p bits de poids fort Xp,...,XN-1. Si les N-p valeurs comparées sont identiques, cela signifie que l'adresse X0,...,XN-1 correspond (appartient) au segment de mémoire S, et celle-ci est alors transmise à l'entité de permutation 6B(S). Sinon, l'adresse présentée par le module de sélection 5 correspond à un autre segment que le segment de mémoire S et n'est pas traitée par les entités 6B(S) et 6C(S) associées au segment S, mais par les entités associées à un autre segment de mémoire S' à laquelle appartient l'adresse présentée. Autrement dit, l'entité de décodage 6A(S) réalise la fonction logique suivante de décodage d'adresse : V = SMR + SMR . (MSR .g + MSR .X ) où X désigne l'adresse X0,...,XN-1 présentée par le module de sélection 5 et SMR désigne le complément bit à bit du contenu du registre SMR. Puis elle fournit à l'entité de permutation 6B l'adresse : W = SMR .X pour application de la fonction de permutation fm0(S) sur les p bits de poids faible X0,...Xp-1 de l'adresse X0,...,XN-1 (étape E40). La fonction fm0(S) est un mélangeur appliqué aux p bits X0,...,Xp-1. Autrement dit, par le biais de cette fonction de permutation, les fils élémentaires d'adressage d'indices donnés en entrée sont mis en relation avec les fils élémentaires d'adressage d'autres indices en sortie. Par exemple, le fil élémentaire d'indice 2 est mis en relation avec le fil élémentaire d'indice 5. Cette opération réalisée par la banque de registres MJBO de l'entité de permutation 6B(S) peut être présentée sous la forme d'une correspondance entre deux vecteurs, à savoir entre le vecteur X=(X0,...,Xp-1)T où ()T désigne l'opérateur de transposition, et un vecteur Y=(Y0,...,Yp-1)T obtenu en sortie de l'entité de permutation 6B(S) (c'est-à-dire de la banque de registres MJBO). A titre illustratif uniquement, on considère la fonction de permutation suivante : 16 p - 1 3 p - 2 p-5 1 2 f m0 3 Y Cette fonction associe au fil d'adressage (i.e. au bit de l'adresse mémoire) XO en entrée le fil d'adressage (i.e. le bit de l'adresse mémoire) Yp-1 en sortie de l'entité de permutation d'adresses 6B(S), au fil d'adressage X1 en entrée, le fil d'adressage Y3 en sortie, etc. 5 La fonction de permutation fm0(S) peut être représentée de façon équivalente par une matrice carrée binaire de dimensions pxp aussi appelée clé de permutation d'adresses Km0(S). Cette clé de permutation contient seulement p coefficients non nuls vérifiant : - km0(i,j)=1 si le fil d'adressage Ai est permuté avec le fil d'adressage Yj ; - km0(i,j)=0 sinon (i.e. aucune relation entre les fils d'adressage Ai et Yj) ; où km0(i,j), i,j=0,...,p-1 désignent les coefficients de la matrice Km0(S). Chaque ligne et chaque colonne de la matrice Km0(S) ne comporte qu'un unique coefficient égal à 1. La fonction de permutation fm0(S) appliquée par l'entité de permutation 6B au moyen de la banque de registres MJBO est dite paramétrée par la clé de permutation Km0(S). A titre illustratif, pour p=8, un exemple de clé de permutation Km0(S) est donné par : 0, 0, 0, 0, 0, 0, 0, 1, {0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, Km0(S) - i .. , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 Il convient de noter que la fonction fm0(S) paramétrée par la clé Km0(S) est inversible. L'opération inverse de celle réalisée par l'entité de permutation 6B sur les p bits d'adresse X0,...,Xp-1 est définie par la matrice de permutation inverse Km0(S)-1, soit pour l'exemple donné ci-dessus : O, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, Km° (S)- 1 - 9: u 0, 0, 0, 0, 0, 1, 0, f 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 Bien entendu, ces exemples ne sont donnés qu'à titre illustratif et d'autres fonctions de permutation fm0(S) (distinctes de l'identité) paramétrées par une clé de permutation Km0(S) et faisant correspondre à un ensemble de fils d'adressage un autre ensemble de fils d'adressage de même cardinalité (en l'occurrence p ici) peuvent être envisagées. Les N-p bits de poids fort Xp,...XN-1 de l'adresse mémoire sont laissés inchangés par l'entité de permutation 6B et la banque de registres MJBO, autrement dit, ils ne sont pas permutés afin que l'adresse YO,...,YN-1 obtenue après permutation se trouve toujours dans le segment mémoire S (ce qui revient à appliquer une matrice identité aux N-p bits de poids fort de l'adresse Xp,...,XN-1). Ainsi, on obtient en sortie de l'entité de permutation d'adresses 6B(S) une adresse YO,...,YN-1 dont les p bits de poids faibles YO,...,Yp-1 correspondent à une version permutée à l'aide de la fonction de permutation paramétrée par la clé de permutation d'adresses Km0(S) des p bits de poids faibles X0,...,Xp-1 de l'adresse X0,...,XN et dont les N-p bits de poids fort Yp,...,YN-1 sont identiques aux N-p bits de poids fort Xp,...,XN-1. On note que les p bits permutés YO,...,Yp-1 désignent une nouvelle adresse mémoire au sein du même segment S que l'adresse mémoire correspondant aux p bits X0,...,Xp-1 avant permutation (en effet, les N-p bits de poids fort désignant l'adresse de base du segment S restent inchangés). L'adresse mémoire permutée YO,...,YN-1 est ensuite fournie à l'entité de substitution 6C(S), qui substitue par le biais de la fonction fm1(S) paramétrée par la clé de substitution Km1(S), l'adresse mémoire (20,...,ZN-1) à l'adresse mémoire (Y0,...,YN-1) à l'aide de la banque de registres MJB1 (étape E50). Dans le mode de réalisation décrit ici, la fonction de substitution fm1(S) est une fonction représentée par une matrice dont les éléments sont définis par la clé de substitution Km1(S). Cette matrice est constituée d'une ou de plusieurs tables ou boîtes de substitution, aussi connues sous l'appellation de « S-Box » en anglais, et classiquement utilisées en cryptographie dans les algorithmes de chiffrement symétriques tels que l'algorithme DES (Data Encryption Standard). Une telle boîte de substitution rend l'information originale qu'elle traite inintelligible. En d'autres mots ici, elle permet de dissimuler l'opération de permutation mise en oeuvre par l'entité de permutation 6B(S). Dans le mode de réalisation décrit ici, la fonction de substitution fml(S) est appliquée sur les p bits de poids faible YO,...,Yp-1, les N-p bits de poids fort restant inchangés. Elle est choisie de sorte qu'à une combinaison de p bits en entrée corresponde une combinaison de p bits en sortie distincte de la combinaison fournie en entrée, et que deux combinaisons de p bits distinctes fournies en sorties soient associées à deux combinaisons de p bits fournies en entrée distinctes. On s'assure ainsi que la fonction de substitution fm1(S) est une bijection. Plus précisément, l'entité de substitution 6C(S) utilise ici à cette fin une pluralité de boîtes de substitution juxtaposées, et associant chacune à n bits en entrée, n bits en sortie, n étant un entier supérieur à 1 et inférieur à p. L'ensemble de ces boîtes de substitution constitue la clé de substitution d'adresses Km1(S) paramétrant la fonction de substitution fm1(S). La clé de substitution Km1(S) est une matrice de dimensions pxp. Le recours à une juxtaposition d'une pluralité de boîtes de substitution de dimensions nxn permet de gérer des clés de dimensions plus petites. Ainsi, par exemple si p=16, on peut envisager 2 boîtes de permutation de dimension 8 bits ou 4 boîtes de permutation de dimension 4 bits. Si l'on considère 4 boîtes de permutation de 4 bits, la dimension de la clé à gérer est 4x(42)=64 bits, alors que si une unique boîte de permutation de 16 bits est envisagée, la dimension de la clé à gérer est de 162=256 bits. Le choix du nombre de bits traités par chaque boîte de substitution résulte d'un choix d'implémentation. Toutefois, on choisit préférentiellement des boîtes de substitution de dimension supérieure ou égale à 4 bits afin de préserver des propriétés cryptographiques minimales. Les boîtes de substitution composant la fonction de substitution fm1(S) sont prédéterminées (i.e. définies à l'avance) dans le mode de réalisation décrit ici, c'est-à-dire qu'elles sont programmées au niveau du système sur puce 9 et plus particulièrement de l'entité de substitution 6C. Ces boîtes de substitution peuvent varier d'un segment à l'autre. Les valeurs contenues dans ces boîtes sont choisies de manière à résister aux attaques. Une technique permettant de choisir de telles valeurs est par exemple décrite dans le document de C. Adams et al. intitulé « The structured design of cryptographically good s-boxes », Journal of Cryptology, 1990. L'adresse mémoire (Z0,...,ZN-1) obtenue en sortie de l'entité de substitution 6C(S) par application de la fonction de substitution fm1 est une adresse mémoire transformée au sens de l'invention. Elle est fournie par l'entité de substitution 6C(S) au module de combinaison 8 pour élaborer le programme traité P'. Il convient de noter que bien que différentes fonctions de permutation fm0 et de substitution fm1 peuvent être choisies conformément à l'invention, ces fonctions doivent toutefois être choisies de sorte que la fonction composée f en résultant soit bijective et vérifie les caractéristiques minimales suivantes : pour une adresse donnée a dans l'espace d'adressage initial (i.e. celui du processeur ou de l'unité d'exécution du programme du dispositif cible 3) : f(a) # a et pour l'adresse suivante a+1 dans l'espace d'adressage initial : f(a+1) f(a)+1 Dans un autre mode de réalisation, le module de transformation 6 d'adresses mémoire comprend également pour chaque segment S un registre SSR (pour « Segment Swap Register » en anglais) contenant une adresse de la même taille que l'adresse contenue dans le registre MSR. Cette adresse est substituée à l'adresse d'origine du segment S contenue dans le registre MSR, effectuant ainsi une translation d'adresse du segment S considéré. L'utilisation d'un tel registre permet par exemple une segmentation mémoire par instance d'exécution. A cet effet, le registre SSR reçoit une information concernant l'unité d'exécution comme par exemple le numéro du processus en cours de traitement, le numéro d'un processeur dans un processeur multi-coeur, ou une combinaison des deux, etc., qu'il compare avec l'unité d'exécution dont l'adresse est contenue dans le registre SSR. Dans le mode de réalisation décrit ici, le dispositif de traitement 2 applique également, au moyen de son module 7 de transformation de données, une fonction de permutation fd0(S) paramétrée par une clé de permutation KdO(S) associée au segment de mémoire S (étape E60) et une fonction de substitution fd1(S) paramétrée par une clé de substitution Kd1(S) associée au segment de mémoire S (étape E70) aux données DO,...,DM-1 contenues dans l'instruction i du programme P en cours de traitement. En variante, les fonctions fd0 et fd1 ne sont appliquées qu'à une sélection prédéterminée d'instructions du programme. Les étapes E60 et E70 sont mises en oeuvre respectivement par l'entité 7A de permutation de données (générant des données permutées B0,...,BM-1 comme illustré à la figure 1) et par l'entité de substitution 7B (générant des données transformées CO,...,CM-1 comme illustré à la figure 1) du module 7 de transformation de données. Ces étapes E60 et E70 sont similaires aux étapes E40 et E50 précédemment décrites et utilisent des moyens analogues. Elles diffèrent des étapes E40 et E50 uniquement par les dimensions des clés de permutation et de substitution de données considérées. La fonction de permutation de données fd0(S) et la fonction de substitution de données fd1(S) sont en effet appliquées sur l'ensemble des données qui leur sont fournies en entrée, c'est-à-dire sur les M bits de données DO,...,DM-1 de l'instruction i considérée. Les clés de permutation de données KdO(S) et de substitution de données Kdl(S) dépendent du segment de mémoire S. Les données CO,...,CM-1 sont fournies par l'entité de substitution 7B(S) au module de combinaison 8 pour élaborer le programme traité P'. Les étapes de permutation E40 et E60, et les étapes de substitution E50 et E70 sont réitérées pour chaque instruction du programme P sélectionnée par le module de sélection 5 (réponse non à l'étape test E80 et étape d'incrémentation E90 de l'indice i désignant l'instruction courante du programme P sélectionnée par le module de sélection 5). Il convient de noter que les fonctions fm0(S), fd0(S), fm1(S) et fd1(S) peuvent être identiques pour toutes les instructions du programme P destinées à être stockées dans le segment de mémoire S ou être paramétrées par des clés variant en fonction de l'instruction considérée ou d'un groupe prédéfini d'instructions. Toutefois, il est alors nécessaire de s'assurer que l'espace d'adressage résultant est cohérent avec l'espace d'adressage du processeur du dispositif cible 3 et le segment S, et que la fonction composée résultant de l'enchaînement des fonctions fmO(S) et fm1(S), respectivement de l'enchaînement des fonctions fd0(S) et fd1(S), sur l'ensemble des instructions du programmes P est bien bijective. Lorsque toutes les instructions du programme P ont été traitées par les modules de transformation 6 et 7 du dispositif de traitement 2 (réponse oui à l'étape test E80), le dispositif de traitement 2 obtient, au niveau de son module de combinaison 8, un programme traité P', dans lequel les adresses mémoire des instructions du programme P et les données contenues dans ces instructions ont été transformées (permutées et substituées). Dans le mode de réalisation décrit ici, les fonctions de permutation et de substitution ne sont appliquées qu'une seule fois par le dispositif de traitement 2 aux adresses et aux données du programme P. Toutefois, dans une variante de réalisation, on peut envisager d'enchaîner en série plusieurs fois ces fonctions. Bien entendu, l'enchaînement une pluralité de fois de ces fonctions résulte en un temps de traitement augmenté. Il convient de noter que la mise en oeuvre ou au contraire la désactivation du traitement selon l'invention peut être dépendant d'un état particulier du processeur du dispositif cible 3. Cet état particulier peut dépendre du mode du processeur, du processus en cours, d'une plage d'adresses ou de tout autre état possible du processeur, d'une combinaison de ceux-ci et ceci d'une manière non limitative. Le programme P' obtenu par le dispositif de traitement 2 est fourni au dispositif cible 3 auquel il est destiné (étape E90). Par exemple, il est transmis par le dispositif de traitement 2 au dispositif cible 3 via une opération de téléchargement, ou copié sur un espace de stockage externe tel qu'un CDROM ou une clé USB via les moyens de communication 14 du dispositif de traitement 2. La figure 6 illustre les principales étapes mises en oeuvre par le dispositif cible 3 pour exécuter le programme P' reçu du dispositif de traitement 2, dans le mode de réalisation. Sur réception du programme P' (étape F10), le dispositif cible 3 le stocke ici dans sa mémoire non volatile 18 (étape F20). Puis il exécute, au moyen de son processeur 15, les instructions du programme P' (étape F30). Lors de l'exécution, le processeur 15 tient compte des fonctions de permutation fm0(S), fd0(S) et de substitution fm1(S), fd1(S) (et des clés associées stockées dans sa mémoire non volatile 18), appliquées par le dispositif de traitement 2 aux instructions du programme P'. En particulier, dans le mode de réalisation décrit ici, il applique à la volée les fonctions inverses de ces fonctions en tenant compte des segments de mémoire dans lesquels se trouvent stockées les instructions du programme P' de sorte à lire aux bonnes adresses mémoire et dans le bon ordre les instructions du programme qu'il exécute (en d'autres mots, comme s'il exécutait le programme P directement). Cette opération de déchiffrement du programme P' ne poserait aucune difficulté à l'homme du métier et n'est pas décrite en détail ici. Ainsi, grâce à l'invention, le programme P' peut être distribué sans crainte au dispositif cible 3 y compris lorsque celui-ci se trouve en environnement hostile, car seul le dispositif cible 3 grâce aux clés de permutation et de substitution d'adresses et de données qui lui ont été fournies pour les différents segments de sa mémoire, est apte à déchiffrer et à exécuter le programme P'. Pour mieux illustrer les avantages procurés par l'invention, nous allons brièvement exposer maintenant quelques éléments permettant d'évaluer la complexité résultant de l'enchaînement des fonctions fm0 et fm1 sur les adresses mémoire du programme P mis en oeuvre conformément à l'invention : il existe (p!) permutations possibles sur p bits répondant aux contraintes imposées à la fonction fm0 ; le nombre de boîtes de substitution S-Box possibles de dimension n, et la complexité en résultant, est de la forme [(2'1)!]. Il en résulte pour un nombre s de boîtes de substitution de même dimension agissant en parallèle, une complexité de la forme [(2n)!]s. Le tableau ci- dessous résume à titre illustratif le nombre de combinaisons possibles en fonction du paramètre n : n 2n (2n)! Dimension de la clé de substitution de chaque S-Box 1 2 2 2 2 4 24 8 3 8 40 320 24 4 16 20 922 789 888 000 64 5 32 2,631 x 1035 160 6 64 1,268 x 1089 384 7 128 3,856 x 10215 896 8 256 8,578 x 10506 2048 Ainsi, par exemple, en choisissant deux boîtes de substitution de dimension n=4 bits utilisées en parallèle pour transformer un bus d'adresses de N=8 bits, le nombre de combinaisons possibles devient : (24)!2 = 437 763 136 697 395 052 544 000 000 = 4,378 x 1026 La complexité obtenue par l'enchainement des deux fonctions de permutation et de substitution est égale au produit de la complexité de chacune d'entre elles. Elle est donc de la forme : p! * (2nDs Cette analyse de complexité est valable pour chaque segment de mémoire. Comme mentionné précédemment, il apparaît que bien que l'invention s'applique à toute taille de segment de mémoire, les actions de rétro-conception sont rendues d'autant plus difficiles que la taille des segments augmente.25 REVENDICATIONS1. Procédé de transformation d'une adresse mémoire (X0,...,XN-1) codée sur N bits, N désignant un entier supérieur à 1, ce procédé de transformation comprenant : une étape (E30) d'identification d'un segment de mémoire (S) auquel appartient l'adresse mémoire ; et au moins une étape d'application (E40,E50) en série, sur une partie des N bits de l'adresse mémoire : o d'une fonction de permutation (fm0(S)) paramétrée par une clé de permutation d'adresses (Km0(S)) associée à ce segment de mémoire ; et o d'une fonction de substitution (fm1(S)) paramétrée par une clé de substitution d'adresses (Km1(S)) associée à ce segment de mémoire ; ladite au moins une étape d'application résultant en une adresse mémoire transformée (20,...,ZN1). 2. Procédé de transformation selon la revendication 1 dans lequel le segment de mémoire (S) est identifié à partir d'un nombre prédéterminé p de bits consécutifs de poids fort ou de poids faible de l'adresse mémoire, p désignant un entier supérieur ou égal à 1, les fonctions de permutation et de substitution étant appliquées sur les N-p bits restant de l'adresse mémoire. 3. Procédé de transformation selon la revendication 1 ou 2 comprenant en outre une étape de translation de l'adresse mémoire comprenant la modification d'au moins un bit de l'adresse mémoire identifiant le segment auquel appartient l'adresse mémoire. 25 4. Procédé de transformation selon l'une quelconque des revendications 1 à 3 dans lequel la fonction de substitution (fm1(S)) comprend au moins une table de substitution de type S-Box. 5. Procédé de transformation selon l'une quelconque des revendications 1 à 4 dans 30 lequel l'étape d'application est enchaînée plusieurs fois. 6. Procédé de traitement d'un programme (P) destiné à être stocké dans une mémoire (17,18) d'un dispositif cible (3), ce programme comprenant une suite ordonnée d'instructions associées à des adresses mémoire codées sur N bits et destinées à être véhiculées sur un bus 35 d'adresses du dispositif cible comprenant N fils d'adressage, N désignant un entier supérieur à 1, ce procédé de traitement comprenant une étape de mise en oeuvre d'un procédé de transformation selon l'une quelconque des revendications 1 à 5 sur tout ou partie des adresses mémoire associées 20aux instructions du programme, ladite étape de mise en oeuvre résultant en un programme traité (P'). 7. Procédé de traitement selon la revendication 6 comprenant en outre une étape 5 d'application (E60,E70) en série aux données contenues dans des instructions du programme associées à des adresses mémoires d'un même segment de mémoire : - d'une fonction de permutation (fd0(S)) paramétrée par une clé de permutation (Kd0(S)) de données associée au segment de mémoire ; et - d'une fonction de substitution (fd1(S)) paramétrée par une clé de substitution (Kd1(S)) de 10 données associée au segment de mémoire. 8. Procédé de traitement selon les revendications 6 ou 7 comprenant une étape de fourniture (E90) du programme traité au dispositif cible pour stockage dans sa mémoire. 15 9. Procédé de traitement selon l'une quelconque des revendications 6 à 8 dans lequel la clé de permutation d'adresses et la clé de substitution d'adresses sont spécifiques au dispositif cible (3) auquel est destiné le programme ou à une unité d'exécution (15) du dispositif cible apte à exécuter le programme. 20 10. Procédé de réception (F10) par un dispositif cible (3) d'un programme (P') comprenant une pluralité d'instructions et traité conformément à un procédé de traitement selon l'une quelconque des revendications 6 à 9, tout ou partie desdites instructions étant associées à des adresses mémoire transformées, ledit procédé de réception comprenant : une étape (F20) de stockage du programme traité reçu dans une mémoire (17,18) du 25 dispositif cible ; et une étape d'exécution (F30) par une unité d'exécution (15) du dispositif cible des instructions du programme traité au cours de laquelle l'unité d'exécution tient compte de la fonction de permutation et de la fonction de substitution appliquée le cas échéant durant le procédé de traitement aux adresses mémoire associées à ces instructions. 30 11. Module de transformation (6) d'une adresse mémoire codée sur N bits, N désignant un entier supérieur à 1, ce module de transformation comprenant : une entité d'identification (6A) d'un segment de mémoire auquel appartient l'adresse mémoire ; 35 une entité de permutation (6B) apte à appliquer une fonction de permutation paramétrée par une clé de permutation d'adresses associée au segment de mémoire identifié ; et une entité de substitution (6C) apte à appliquer une fonction de substitution paramétrée par une clé de substitution d'adresses associée au segment de mémoire identifié ;l'entité de permutation et l'entité de substitution étant agencées de sorte à agir en série sur une partie des N bits de l'adresse mémoire. 12. Dispositif de traitement (2) d'un programme destiné à être stocké dans une mémoire d'un dispositif cible, ce programme comprenant une suite ordonnée d'instructions associées à des adresses mémoire codées sur N bits et destinées à être véhiculées sur un bus d'adresses du dispositif cible comprenant N fils d'adressage, N désignant un entier supérieur à 1, ledit dispositif de traitement comprenant un module de transformation selon la revendication 11 apte à transformer tout ou partie des adresses mémoire associées aux instructions du programme et à fournir un programme traité. 13. Dispositif cible (3) comprenant : un module de réception d'un programme comprenant une pluralité d'instructions et traité par un dispositif de traitement selon la revendication 12, tout ou partie desdites instructions étant associées à des adresses mémoire transformées par le module de transformation du dispositif de traitement ; une mémoire (17,18) dans laquelle sont stockés le programme traité et les clés de permutation et de substitution utilisées par le module de transformation du dispositif de traitement pour transformer lesdites adresses mémoire ; - une unité d'exécution (15) apte à exécuter les instructions du programme traité en tenant compte des fonctions de permutation et de substitution appliquées aux adresses mémoires associées à ces instructions. 14. Système (1) comprenant : un dispositif de traitement (2) selon la revendication 12 apte à traiter un programme ; et un dispositif cible (3) selon la revendication 13 apte à recevoir le programme traité par le dispositif de traitement pour stockage et/ou exécution.