INTEGRITE MATERIELLE PERMANENTE DES DONNEES
La présente invention se rapporte au domaine de la sécurisation des données dans un composant électronique.
La présente invention concerne plus particulièrement un procédé et une architecture pour la protection d'un circuit intégré matériel contre les attaques par fautes .
La carte à puce, et de manière plus générale, certains composants électroniques portables, sont bien souvent utilisés comme unité de calcul et de stockage de données secrètes et/ou sensibles dans le but de sécuriser une application. L'identité, la téléphonie mobile, le payement, le transport ou encore le contrôle d'accès sont autant de domaines d'application dans lesquels la carte à puce a un rôle essentiel. Ce rôle consiste, entre autres et de manière non limitative, à une authentification du porteur de la carte et/ou de l'émetteur de la carte. La carte peut également contenir des « unités » qui peuvent correspondre à des points de fidélité, de l'argent (par exemple les unités téléphoniques) ou encore des tickets de métro selon 1' application .
La carte représente ainsi, pour certains individus et organisations malveillants, une cible de prédilection afin de frauder ou de porter atteinte à l'image de marque d'une société.
La carte fait face depuis son déploiement à des menaces dont l'observation de la consommation de courant
(side channel analysis) mais également depuis peu aux attaques par injection de fautes transitoires. La détection
de telles attaques est relativement complexe et la réponse à ces attaques difficile à mettre en œuvre. Les composants électroniques actuels ne garantissent pas un fonctionnement correct quelles que soient les perturbations externes. Il en résulte que le logiciel embarqué dans la carte doit se prémunir par lui-même de défaillances éventuelles du composant engendrées par une injection de faute.
L'art antérieur connaît déjà des solutions pour la détection de perturbations, par exemple des glitchs (impulsion de tension) qui seraient susceptibles d'entraîner une faute dans le fonctionnement du composant électronique. Notons l'existence de solutions matérielles qui consistent en intégrer des capteurs environnementaux (de température, de fréquence horloge, de tension d'alimentation, de lumière) qui vont détecter une perturbation (une tension anormalement basse, une intensité lumineuse trop forte) afin de réagir avant de rentrer dans une zone de fonctionnement du composant jugée instable et donc à risques en terme de faute. Ces solutions sont coûteuses car nécessitent le développement de capteurs spécifiques (coût économique) et l'intégration de ceux-ci dans des circuits parfois de petite taille (coût de taille) .
On connaît également des solutions qui détectent l'effet de la perturbation subie, par exemple par la présence d'un bit de données modifié.
On distingue, entre autres, des solutions logicielles ou matérielles de type redondance d'un processus. La redondance consiste de manière simpliste à effectuer deux fois la même opération (calcul, transmission, ...) afin de comparer le résultat des deux actions. En mode logiciel, la redondance peut être un
double calcul sur des données. En mode matériel, cette redondance peut se manifester pas la présence, par exemple, de deux registres dédoublés stockant a priori les mêmes valeurs. Si les résultats sont différents, alors il peut être raisonnablement conclu que l'une des actions s'est mal passée sûrement suite à une perturbation (faute) . L'inconvénient de ces solutions réside dans le caractère ponctuel de la protection ou détection fournie et dans la perte de performance due à la répétition d' opérations . La redondance n'offre une garantie que pour l'opération qui est réalisée en double.
Egalement, il existe des solutions logicielles ou matérielles de type contrôle d'intégrité. Une donnée stockée en mémoire non volatile se voit ajouté un « checksum » (somme de contrôle) de la donnée, cette somme permettant de détecter si la donnée est corrompue par une faute avant la vérification du checksum en cas d'incohérence entre la donnée et la somme checksum. L'ajout de données d' intégrité est répandu dans les couches logicielles, par exemple pour la transmission de données. Le checksum en hardware (matériel) tel qu'on le trouve dans l'art antérieur est mis en oeuvre uniquement au niveau d'un bloc mémoire, il prend bien souvent le nom de « bit de parité ». Le mot machine élémentaire (8 bits sur un composant 8-bit) est stocké sur 9 bits en mémoire, le 9ieme bit étant un bit de parité positionné de sorte que la parité du mot soit systématiquement pair/impair. Lors d'une lecture, la parité est vérifiée et le mot de 8 bits est positionné sur le bus de données. Lors d'une écriture, le mot de 8 bits positionné sur le bus de données est écrit en mémoire et le bit de parité est généré dans le même temps . Le problème est que sur le bus de données, le mot transmit ne comprend pas de données d'intégrité : il n'y a aucun
moyen de vérifier que cette valeur, une fois transférée vers la mémoire, l'unité centrale de traitement CPU ou le cache, est encore correcte.
II convient de noter que dans un soucis sécurité optimal, l'idéal serait de pouvoir détecter une faute quelque soit son effet. Ce n'est malheureusement pas possible à un coût raisonnable avec les solutions de l'état de l'art précédemment exposées (redondance, checksum) .
De façon générale, les solutions de l'art antérieur ne permettent pas un contrôle de l'intégrité en permanence sur les données. En effet, aucune solution n'est proposée pour le contrôle de l'intégrité permanente des données au niveau matériel.
Il y a donc un besoin pour la détection systématique de fautes et pour assurer l'intégrité permanente des données lors des manipulations par les éléments matériels.
La présente invention entend remédier aux inconvénients de l'art antérieur en proposant un procédé de traitement des données pour la détection de fautes et une architecture matérielle prévue également à cet effet. Le procédé et l'architecture permettent de travailler sur des mots incluant des données d' intégrité de façon systématique ; le nombre de bits des mots est supérieur à celui Ix des données initiales X afin d'y intégrer en permanence des fonctionnalités d' intégrité Y sur toutes les étapes de traitement hardware.
Le procédé selon la présente invention répond particulièrement bien aux besoins pour la détection de fautes puisqu'elle assure l'intégrité des données sur toute
la chaîne de traitement et durant toute leur durée de vie tout en maintenant les performances de traitement.
Chaque composant matériel est conçu de manière à travailler de manière systématique avec Ix + lγ bits afin de rendre la détection optimale et systématique. Cela signifie que chaque mot logiciel X est stocké en mémoire dans Ix + lγ cellules, que le mot logiciel X est transféré d'un module matériel à un autre avec son checksum associé sur un bus de Ix + lγ lignes. De la sorte, le mot logiciel est protégé quelque soit son type : adresse, data, instruction, opérande, ...
A cet effet, l'invention concerne dans son acception la plus générale un procédé de traitement de données numériques X d'un logiciel codées sur Ix bits pour la détection de faute dans un circuit électronique comprenant au moins un bus, une unité de traitement et une mémoire pour l'exécution du logiciel, le procédé comprenant :
- une étape de transformation des données numériques X en des données numériques Z codées sur Ix + lγ bits, les lγ bits additionnels étant le résultat d'une fonction f d'intégrité appliquée sur lesdites données X ;
- une étape de traitement des données numériques Z par l'ensemble des ressources matérielles du circuit, ces ressources matérielles travaillant sur des mots de Ix + lγ bits ; - au moins une étape de vérification de l'intégrité desdites données Z pendant ladite étape de traitement .
Dans un mode de réalisation, lesdites données numériques Z consistent en la concaténation des données X avec des données Y d' intégrité résultat de la fonction f d' intégrité appliquée sur les données X : Z = X | Y = X | -f(X) . Dans la suite « | » est l'opérateur signifiant la concaténation de deux éléments (X et Y dans ce qui précède)
Dans un autre mode de réalisation, ladite fonction f d'intégrité calcule le nombre de bits mis à « 1 » ou « 0 » dans lesdites données numériques X. Particulièrement, ladite étape de traitement des données numériques Z est réalisée par une unité de logique et d'arithmétique (ALU) et comprend :
- une étape de calcul d'une opération OP sur les données X des données Z, - une étape de calcul de ladite opération OP sur les bits additionnels d'intégrité desdites données Z, et ladite fonction d' intégrité f est conforme à f(X1 OP X2) = f(Xi) OP f(X2) .
Dans un mode de réalisation, ladite étape de traitement des données numériques Z est réalisée par une unité de logique et d'arithmétique (ALU) et comprend :
- une première étape de contrôle de l'intégrité des données Z, - une étape suivante de calcul d'une opération OP sur les données X des données numériques Z,
- une étape de transformation des données numériques résultats de ladite opération OP en des données numériques Z' codées sur Ix + lγ bits, les lγ bits additionnels étant le résultat de la fonction f d' intégrité appliquée sur lesdites données résultats de ladite opération OP.
Particulièrement, ladite fonction f est définie par -f(X) = X / Ix, où Ix est la longueur en bits du mot binaire X.
L'invention concerne également une architecture matérielle pour la détection de faute dans un circuit électronique, l'architecture comprenant :
— des moyens de transformation de données numériques X d'un logiciel codées sur x bits en des données numériques Z codées sur Ix + lγ bits, les lγ bits additionnels étant le résultat d'une fonction f d' intégrité appliquée sur lesdites données X ;
— des ressources matérielles comprenant au moins un bus, une unité de traitement et une mémoire pour le traitement des données numériques Z, l'ensemble desdites ressources matérielles travaillant sur des mots de Ix + lγ bits ;
— des moyens de vérification de l'intégrité desdites données Z pendant ladite étape de traitement à chaque manipulation des données X.
Dans un mode de réalisation, ledit bus comprend au moins un moyen de vérification de l'intégrité desdites données Z transférées par ledit bus.
Dans un mode de réalisation particulier, lesdites ressources matérielles comprennent au moins une mémoire qui stocke lesdites données Z sous forme de mots de taille Ix + lγ bits (taille du mot logiciel + taille du mot de contrôle d'intégrité) .
Dans un mode de réalisation, lesdites ressources matérielles comprennent au moins des registres associés à une unité centrale de traitement CPU, lesdits registres stockant les données Z sous forme de mots de
taille Ix + lγ bits, et ladite CPU réalisant séparément des opérations sur lesdites données X et les bits additionnels d'intégrité Y.
Particulièrement, lesdites ressources matérielles comprennent au moins une unité de logique et d'arithmétique (ALU) calculant une opération OP séparément sur lesdites données X des données Z et sur les bits additionnels d'intégrité des données Z, et en ce que ladite fonction d'intégrité f est conforme à f(Xl OP X2) = f(Xl) OP f(X2) .
Eventuellement, lesdites ressources matérielles comprennent au moins une unité de logique et d' arithmétique (ALU) , ladite ALU :
- comprenant des moyens de vérification de l'intégrité desdites données Z,
- calculant une opération OP sur les données X des données Z, et
- transformant les données numériques résultats de ladite opération OP en des données numériques Z' codées sur Ix + lγ bits, les lγ bits additionnels étant le résultat de la fonction f d' intégrité appliquée sur lesdites données résultats de ladite opération OP.
Dans un mode de réalisation, ladite fonction f d'intégrité calcule le nombre de bits mis à « 1 » ou « 0 » dans ledit mot logiciel X, ou ladite fonction f est définie par -f(X) = X / Ix, où Ix est la longueur en bits du mot binaire X.
L'invention concerne également un composant électronique, par exemple une carte à puce, comprenant l'une des architectures matérielles précédentes.
On comprendra mieux l'invention à l'aide de la description, faite ci-après à titre purement explicatif, d'un mode de réalisation de l'invention, en référence aux figures annexées : - la figure 1 représente un schéma global d'un mode de réalisation de l'architecture matérielle selon la présente invention ;
- la figure 2 représente un bloc de contrôle mis en œuvre dans l'architecture de la figure 1 ; - la figure 3 illustre un mode de réalisation d'une unité de logique et d'arithmétique ALU transparent pour la fonction d' intégrité ; et
- la figure 4 illustre un mode de réalisation moins sécurisé d'une unité de logique et d'arithmétique ALU dans lequel les informations d' intégrité sont recalculées .
Dans la description qui suit, on entend par « données » toute information numérique qui transite, est exécutée, stockée ou traitée dans le circuit intégré, que ces données soient des variables binaires, des adresses mémoires, des instructions, ... Dans l'invention, toute donnée se voit affectée d'une somme de contrôle (checksum) .
De même, les termes « somme de contrôle », « checksum », « bits de parité », « données/bits d'intégrité » ou encore « mot de contrôle » sont considérés comme synonymes et représentent des données additionnelles d'une donnée, ces données additionnelles étant déterminées en fonction de la donnée, par exemple par une fonction. Ces données d'intégrité permettent de contrôler l'intégrité d'un fichier ou d'un bloc de données et de vérifier avec plus ou moins de précision si des données ont été transmises correctement. Une méthode classique est le CRC
(Contrôle de Redondance Cyclique - Cyclical Redundancy Check) .
On entend par « mot logiciel » la suite binaire représentative d'une donnée utilisée par un logiciel, par exemple une variable, et considérée comme un tout pour un traitement particulier. Un mot logiciel peut avoir une taille de 8, 16 ou 32 bits par exemple. Dans la suite, la lettre « X » représente ce mot logiciel et « Ix » la taille du mot logiciel. On entend par « mot matériel » ou « mot machine » la suite binaire utilisée par les éléments matériels du circuit électronique pour manipuler les mots logiciels lors d'une commande logicielle. Le circuit électronique comprend au moins un bus de données/adresses, une mémoire et une unité de traitement (CPU, ALU, ...) . Les mots machine peuvent avoir la même taille que les mots logiciels mais, dans la présente invention, ils ont une taille supérieure, par exemple 10, 18 ou 36 bits pour des mots logiciels de 8, 16 ou 32 bits respectivement. Les bits additionnels ou « overhead » sont des bits d'intégrité pour coder un checksum qui peut être un seul bit ou plusieurs bits afin d'augmenter la probabilité de détecter une faute. Dans la suite, la lettre « Z » désigne le mot matériel et la lettre « Y » les bits d'intégrité, de telle sorte que Z = X I Y ; et « lz » et « lγ » les tailles associées.
Les données d' intégrité Y sont calculées à partir du mot logiciel X par une fonction f dite fonction d'intégrité de telle sorte que Y = f(X) . Un exemple de fonction d'intégrité f est le nombre de bits à « 1 » (à « 0 ») dans le mot logiciel X.
Le mot logiciel X seul est considéré comme n'étant pas protégé car une modification inopportune d'un bit de celui-ci ne peut être détectée. A contrario, dans le mot machine Z = X | Y, le mot logiciel X est protégé
puisqu'une modification de celui-ci implique une incohérence entre les données d'intégrité Y et le mot X.
En référence à la figure 1, un mode de réalisation d'une architecture du circuit électronique d'un composant électronique est proposé. L'architecture matérielle présentée est étendue à des mots matériels comportant des données d' intégrité Y en plus du mot logiciel X. Quelque soit le chemin matériel emprunté ou le stockage, des données d'intégrité sont associées en permanence avec les mots logiciels.
Les bus d'adresses et de données sont de taille
Ix + lγ, les mots en mémoire utilisent des cellules mémoires de taille Ix + lγ, l'unité centrale de traitement
(CPU) utilise des registres et des données de taille Ix +
Des mémoires de stockage de type non volatiles NVM {Non Volatile Memory) ou ROM 10 et 11 stockent des données et des programmes informatiques sous forme de mots machine de Ix + lγ bits. Ces données sont enregistrées depuis un poste informatique 12 externe après une vérification des données transmises par un bloc de contrôle d'intégrité 13. Le bloc de contrôle 13 vérifie que les données transmises par le poste 12 ne comprennent pas d'incohérence. En référence à la figure 2, un exemple de réalisation d'un bloc de contrôle 13 est proposé. Le bloc de contrôle 13 reçoit en entrée un mot machine composé du mot logiciel X et des données d'intégrité Y. Le bloc de contrôle connaît la fonction d'intégrité f. Il calcule à partir de X et de -f la valeur de Y a priori attendue. Cette valeur est ensuite comparée 22 à la valeur de Y reçue en entrée. Le bloc de contrôle 13 transmet alors les données X
et Y en sortie si cette comparaison est positive, les données X et Y étant alors considérées comme cohérence l'une avec l'autre.
De retour à la figure 1, lors de l'exécution du programme stocké dans la mémoire 11, une instruction, par exemple un bytecode dans le cas d'un langage interprété, est transmise puis mémorisée dans un registre d'instruction 14. La transmission et le stockage sont également réalisés en travaillant sur le mot machine X | Y. Puis un décodeur d'instruction 15 interprète l'instruction à partir du ou des mots machines Z contenu (s) dans les registres 14 et transmet les informations à des lignes de commandes après une nouvelle vérification de l'intégrité des données par un bloc de contrôle 13.
Des données sous forme de mot machine X | Y sont également transmis sur un bus 16 de données/adresses de Ix + lγ bits. Ainsi le bus de données 16 transporte des données protégées par les informations d'intégrité. Afin de cloisonner chaque structure matérielle fonctionnelle (par exemple la zone mémoire morte, le bus, la mémoire RAM), un bloc de contrôle d'intégrité 13 peut être utilisé pour chaque liaison entre deux structures matérielles fonctionnelles différentes. C'est le cas entre la zone mémoire 10 et le bus de données 16 : l'intégrité des données est vérifiée avant transmission sur le bus et/ou à réception depuis le bus.
Des périphériques 17 et des mémoires vives de type RAM (Random Access Memory) 18 tous travaillant avec des mots machine de taille Ix + lγ font également partie de l'architecture et conversent avec le bus de données 16 via un bus de contrôle d'accès 19 et un bloc de contrôle 13.
Des registres généraux 20 sont également disponibles et stockent des données fournies par exemple par une unité centrale de traitement CPU dans des cellules de taille Ix + lγ. Ces registres 20 alimentent une unité de logique et d'arithmétique ALU 21 en données X | Y. Cette ALU 21 travaille sur des mots matériels X | Y et réalise des opérations logiques et/ou arithmétiques afin de fournir une donnée également sur Ix + lγ bits .
La figure 3 fournit un exemple de réalisation d'une ALU 21 transparente aux données d'intégrité. On entend par « transparente » le fait que l'ALU 21 considère les données d' intégrité Y comme des données à part entière indépendamment de leur statut de données d'intégrité. L'unité arithmétique et logique est capable en tout ou partie de traiter des opérations sur X | Y afin de ne jamais avoir à recalculer les données d'intégrité Y sur un mot logiciel X non protégé.
L'unité ALU 21 reçoit deux mots matériels en entrée : Zi = Xi | Yi et Z2 = X2 I Yi, et fournit un mot matériel Z = X | Y en sortie. L'ALU 21 réalise une opération OP sur les mots logiciels Xi et X2 conformément à sa fonction propre, fournissant un mot résultat X = Xi OP X2. Les données d'intégrité sont traitées de manière similaire par une opération OP' : Y = Yi OP' Y2.
Il est à noter que pour garantir l'intégrité du mot machine Z en sortie de l'ALU 21, il faut que : f(Xi OP X2) = Yi OP' Y2 = Jf(Xi) OP' Jf(X2) .
Chaque donnée numérique X est associée à une donnée d'intégrité Y, encore appelée donnée de contrôle de redondance. Chaque opération effectuée sur la donnée
numérique X est également associée avec une opération ou fonction d'intégrité sur la donnée numérique X.
Du fait que la vérification d'intégrité et les données résultantes obtenues en fin d'opération sont effectuées en parallèle et/ou consécutivement l'une à l'autre respectivement, une attaque par faute opérée au niveau d'une quelconque opération provoque une incohérence entre les données résultantes obtenues en fin d'opération et les données d'intégrité correspondantes obtenues en parallèle. Ainsi, une simple vérification entre les données obtenues suite à une opération prédéterminée et une vérification d'intégrité à la fin de l'exécution de l'opération en question est suffisante pour détecter la présence d'une attaque par faute au cours de toute et/ou après l'exécution de l'opération.
Dans les paragraphes qui suivent, on prend, pour exemple, en tant qu'opération OP, un algorithme connu de multiplication modulaire de Montgomery.
Il convient de rappeler que le fonctionnement de 1' implémentation matérielle est basé sur la difficulté à manipuler de grands entiers, par exemple d'entiers présentant une taille de l'ordre de 1024 bits.
Due à la nature de la multiplication modulaire de Montgomery, la vérification de l'intégrité des données obtenues suite à une multiplication modulaire de Montgomery peut être effectuée de manière efficiente.
Il est à rappeler qu'une multiplication modulaire de Montgomery connue de l'homme du métier, devant multiplier deux entiers x et y mod m, fournit, en entrée, les trois données (ou opérandes) suivantes, où la fonction "mod.m" représente le reste d'une division d'un nombre par le nombre m :
• m = (mn_i " " •mimo)b; où n est le nombre de mots dans la représentation de nombres m, x et y, par exemple de mots de 32 bits .
• X = (Xn-I • • • XlX0) b,' • y = (yn-i • • • yiyo)b ;
• (0 < x, y < m) ;
• R = bn ; ou :
• PGCD (m, b) = 1 ; avec PGCD étant le plus grand commun diviseur et • M = -m"1 mod b ; où b est la base du mot ; où les choix d'un standard connu pour b est 232 pour des tailles de mots à 4 octets et n = 32 pour des nombres m, x et y de 1024 bits, n représente le nombre de bits sur lequel une unité centrale de traitement.
L'algorithme modulaire de Montgomery procède alors comme suit :
1. A <— 0 (Notation A = (anan-i • • • aiao)b-) ; où le signe connu de l'homme du métier " <— " correspond à une affectation de la valeur du calcul ou de la donnée à droite du signe à gauche du signe ;
2. pour i depuis 0 à (n - 1) faire :
(a) Ui <— (ao + Xi Yo) M mod b.
(b) A^(A + X1 y + Ui m) /b. 3. Si A≥m alors A^A - m.
4. Retour de A.
En sortie de l'algorithme de la multiplication modulaire de Montgomery, on obtient comme résultat :
A = xyR"1 mod m. Selon l'invention, les données devant effectuer la multiplication modulaire de Montgomery effectuent en parallèle la fonction d'intégrité suivante appliquée à une donnée x: f (x) = x mod (b - 1) ; une telle fonction
représente aussi la somme de tous les mots dans la représentation de x modulo (b - 1) , c'est-à-dire : ι=k f (x) =£ χ! m°d (b - 1)
(=0
• OÙ X = (Xk • • • XiX0) b- Les entrées m, x et y subissent en parallèle la fonction d' intégrité :
• m' = m mod (b - 1) ;
• x' = x mod (b - 1) ; et
• y' = y mod (b - 1) . Une telle fonction d' intégrité est homomorphe modulo (b-1), c'est-à-dire f (x + y) = f(x) + f(y) mod (b - 1) ; et f(x * y) = f(x) * f(y) mod (b - 1).
Lorsqu'un mot de données est modifié, la modification est donc détectée. Lorsque plus d'un mot est modifié, la modification est détectée avec une probabilité de : 1 - (l/(b - I)) .
Comme les mots de données sont sommés, la dernière modification présente une probabilité de (1/ (b - I)) d'être l'inverse de toutes les modifications qui ont déjà été prises en compte.
La vérification d'intégrité échoue, autre que lors d'une ou plusieurs attaques par faute, dans un seul cas : lorsque les deux résultats obtenus en parallèle, à savoir les données résultant de la multiplication modulaire de Montgomery et celles résultant de la fonction d'intégrité, sont réinitialisées aux valeurs initiales, c'est-à-dire tous les octets sont fixés à la valeur « OxOO ». Toutefois, la donnée zéro ne véhicule alors aucune information significative notamment vu de la part d'un attaquant. L'algorithme modulaire de Montgomery modifié selon l'invention procède alors comme suit :
1. A <— 0 (Notation A = (anan-i • • • aiao)b-)
2. A' <- 0 (Notation A' = (a'o)b-)
3. Pour i depuis 0 à (n - 1) faire :
(a) Ui <— (a0 + XiYo) M mod b.
(b) A <- (A+Xiy+Uim) /b.
(c) A' ^A+Uim' mod (b - 1) . 4. A' <^A'+x'y' mod (b - 1) .
5. Si A > m alors A <— A - m ; A' <—A'-m' mod (b - 1) .
6. Retour de A et A' .
En sortie de l'opération de multiplication modulaire de Montgomery et de la fonction d' intégrité exécutée simultanément, on obtient respectivement comme résultats : A = xyR"1 mod m et A' .
La vérification de la fonction d'intégrité où f (A) correspond à A' est alors toujours vérifiable. Ainsi, si la correspondance de f (A) et A' est vérifiée, alors aucune attaque par faute n'a lieu ou n'a eu lieu. En revanche, si la correspondance de f (A) et A' n'est pas vérifiée, alors une ou plusieurs attaques par faute a lieu ou a eu lieu sur le circuit électronique.
On notera qu'un traitement des données numériques X associées aux données d'intégrité Y, de manière générale, du mot Z matériel peut être une lecture et/ou écriture en mémoire, une manipulation au sein d'une unité de traitement, un transfert du mot Z matériel via un bus propre les ressources du circuit électronique. II est à noter que la correspondance entre la présente notation et la notation utilisée, de manière générique, précédemment est la suivante :
Xi= x ; X2= y ; un autre opérande non encore introduit X3= m ; OP est l'opération de multiplication modulaire de Montgomery ; Y1= x' ; Y2= y' ; et Y3= m', A=X et A'=Y.
On comprend que tout calcul, en particulier au sein d'un calcul de cryptographie Rivest, Shamir et Adelman encore désigné par l'acronyme R. S.A., non représenté, impliquant au moins une opération de multiplication
modulaire de Montgomery de données peut faire l'objet, à tout moment, pendant et/ou après l'opération de multiplication modulaire de Montgomery, de la vérification de la fonction d'intégrité Y = f (X) où X fait l'objet de l'opération de multiplication modulaire de Montgomery.
Un tel calcul de RSA est effectué par exemple dans un but d'accélérer l' implémentation matérielle du calcul de cryptographie RSA.
On choisit une opération OP identique à OP' , par exemple une addition arithmétique. Le choix de la fonction f d'intégrité ne peut alors être libre, il est conditionné par f(X1 OP X2) = f(Xi) OP f(X2) .
Par exemple, si OP est une addition arithmétique, on peut choisir -f(X) = |X/8| : si X est une valeur sur 8 bits, Y est une valeur sur 5 bits (donc Z est sur 13 bits) . De façon générale, on peut choisir comme exemple de fonction f : -f(X) = X/lχ où Ix est le nombre de bits (longueur) du mot X.
Dans un tel mode de réalisation, les opérations sur les mots logiciels Xi et sur les données d'intégrité Yi sont réalisées en parallèle. Ainsi le circuit final est aussi rapide que dans une version où les données ne sont pas protégées par des informations d'intégrité. Par contre, la réalisation matérielle de l'unité ALU 21 (tout comme l'ensemble des éléments matériels) nécessite une plus grande quantité de silicium (proportionnelle au rapport entre X et Y) pour des performances équivalentes.
En référence à la figure 4, un autre mode de réalisation de l'unité ALU 21 est proposé. L'intégrité des données Zi et Z2 en entrée est vérifiée par deux blocs de contrôle 13. Seuls les mots logiciels Xi et X2 sont
utilisés pour le calcul de X par l'opération OP. Puis un calcul des données d'intégrité Y est réalisé en appliquant la fonction f sur le mot logiciel résultat X. L'unité ALU 21 fournit ainsi un mot matériel X | Y complet. Un ensemble de portes matérielles peut permettre d'appliquer la fonction f au mot logiciel pour calculer les informations d' intégrité .
Ce mode de réalisation est moins sécurisé car les données d' intégrité en sortie sont recalculées à partir du mot logiciel X résultat de l'opération. On a donc aucun moyen de détecter une erreur durant l'opération OP.
L'unité centrale de traitement CPU (non représentée sur la figure 1) fonctionne sur le même principe que l'unité ALU 21. Les registres gérés par la CPU, les données reçues par la CPU ou fournies par la CPU conviennent pour des mots machine de taille Ix + lγ. Les opérations et instructions sont réalisées par la CPU soit de façon transparent pour assurer une forte protection des données logicielles, soit en recalculant les données d'intégrité en fin de traitement.