Brevet FR2778519A1 — publié le 19991112

! -1- PROCESSEUR DE CHIFFREMENT AVEC INTERCONNEXION À MÉMOIRE PARTAGÉE DOMAINE DE L'INVENTION La présente invention se rapporte aux dispositifs de chiffrement de réseaux à haut rendement, en particulier aux dispositifs de chiffrement qui incorporent à la fois l'équipement et les logiciels. RENSEIGNEMENTS GÉNÉRAUX SUR L'INVENTION Avant l'apparition d'Internet, les réseaux de données d'entreprises étaient généralement composés de lignes de télécommunication spécialisées, louées auprès d'une société publique de téléphone. Puisque la mise en service de l'équipement lié aux réseaux de données était la propriété exclusive de la société de téléphone (un service public réglementé détenant un monopole absolu sur ce support), la sécurité ne présentait guère de problèmes. Le fournisseur était tenu, en vertu d'un contrat, d'assurer la sécurité de ses services; de plus, l'impossibilité d'accéder au réseau de commutation de l'extérieur rendait le système plus ou moins résistant au piratage et aux manoeuvres abusives externes. De nos jours, de plus en plus d'entreprises découvrent l'importance d'Internet, dont le déploiement est supérieur à celui de tout autre réseau informatique au monde et qui peut donc être utilisé par un réseau d'entreprise multinational. Comme il s'agit également d'un produit axé sur le consommateur, l'accès à Internet peut habituellement être offert à un coût de loin inférieur à celui du même service fourni par le réseau de sociétés de téléphone spécialisé. Enfin, la disponibilité d'Internet permet aux particuliers d'avoir facilement accès, à la maison ou ailleurs, au réseau d'entreprises. Toutefois, Internet est géré par des sociétés publiques qui ont recours à des -2- protocoles ouverts, ainsi qu'à une voie intra-bande et à un contrôle exposés aux examens approfondis. Ces caractéristiques font d'Internet un terrain d'essai fertile pour le piratage informatique. L'espionniage industriel est aujourd'hui une entreprise lucrative et les sociétés qui font des affaires sur Internet sont susceptibles d'être victimes d'agressions si elles ne prennent pas de précautions. Il existe aujourd'hui plusieurs normes en matière de respect de la vie privée et d'authentification forte sur Internet. La confidentialité est assurée au moyen du chiffrement et du déchiffrement. En général, le chiffrement et le déchiffrement sont effectués au moyen d'algorithmes visant à permettre le transfert de données à travers un canal ouvert entre deux parties, tout en protégeant la confidentialité du contenu des messages. Par ce procédé, les données sont codées par l'expéditeur à l'aide d'une clé de chiffrement et décodées par le destinataire à l'aide d'une clé de déchiffrement (les clés de chiffrement et de déchiffrement sont parfois les mêmes). Types d'algorithmes de chiffrement Il y a deux types d'algorithmes de chiffrement: les algorithmes à clé publique et les algorithmes à clé secrète. Dans le cas des algorithmes à clé secrète, les deux clés sont secrètes, alors que dans celui des algorithmes à clé publique, une des clés est connue du grand public. Le chiffrement par bloc est caractéristique des systèmes cryptographiques à clé secrète utilisés de nos jours. Les clés de chiffrement et de déchiffrement sont habituellement les mêmes pour le chiffrement par bloc. Celui-ci prend un bloc de données à l'entrée, généralement de l'ordre de 32 à 128 bits, et produit le même nombre de bits à la sortie. Le chiffrement et le déchiffrement sont exécutés à l'aide d'une clé, dont la longueur peut aller de 56 à 128 bits. L'algorithme de chiffrement est conçu de façon à rendre le message très difficilement déchiffrable quand on ne connait pas la clé. -3- Outre les chiffrements par bloc, les protocoles de sécurité Internet utilisent fréquemment les algorithmes ài clé publique. Un système cryptographique à clé publique, tel que le système Rivest, Shamir,-Adelman (RSA) décrit dans le brevet américain 5 144 667 et émis au nom de Pogue et Rivest, emploie deux clés, dont seulement une est rendue publique. Lorsqu'un utilisateur publie une clé, n'importe quel autre utilisateur peut lui faire parvenir un message secret à l'aide de cette clé. Toutefois, on ne peut déchiffrer le message qu'au moyen de la clé secrète. Ce chiffrement à clé publique comporte l'avantage de ne pas avoir à distribuer à l'avance les clés secrètes à tous les participants à une conversation. Par contre, si on utilisait seulement le chiffrement à clé secrète, il faudrait produire plusieurs clés secrètes, une pour chaque participant devant recevoir le message, et chaque clé secrète devrait être communiquée en toute confidence. En tentant de communiquer ainsi la clé secrète. on fait face au même problème que lorsqu'on envoie un message à l'aide du chiffrement à clé secrète seulement; on s'appelle cela le problème de la distribution des clés. L'échange des clés représente une autre application des techniques à clé publique. Dans un protocole d'échange de clés, les deux parties peuvent choisir une clé secrète, même si leur conversation est interceptée par un tiers. À titre d'exemple de ce genre de protocole, mentionnons l'échange de clés exponentiel de type Diffie-Hellman, décrit dans le brevet américain 4 200 770. La plupart des algorithmes à clé publique, tels que le RSA et le Diffie-Hellman, sont fondés sur l'exponentiation modulaire, qui est le calcul de & mod p. Cette expression signifie " multiplier a par lui- même x fois, diviser le résultat par p et garder le reste >". Ce calcul est très coûteux, pour la raison suivante: pour exécuter cette opération, il faut effectuer successivement de nombreuses multiplications et divisions, même si des techniques comme la méthode de Montgomery (décrite dans Modular Multiplication Without Trial -4- Division, Mathematics of Computation, vol. 44, n' 170, avril 1985), peuvent réduire le nombre de divisions requises. En outre, les nombres utilisés sont très grands (typiquement 1 024 bits ou plus); les instructions de multiplication et de division qu'on trouve dans les processeurs centraux ne peuvent donc pas être utilisées directement. Il faut plutôt recourir à des algorithmes spéciaux qui décomposent les grandes multiplications et divisions en opérations assez petites pour qu'elles puissent être exécutées par un processeur central. Ces algorithmes ont généralement une durée d'exécution proportionnelle au carré du nombre des mots- machine traités. Ces facteurs ralentissent fortement la multiplication des grands nombres. Par exemple, un Pentiumr peut exécuter une multiplication de 32 x 32 bits en dix cycles d'horloge. Un nombre de 2 048 bits peut être représenté en 64 mots de 32 bits. Une multiplication de 2 048 x 2 048 bits exige 64 x 64 multiplications distinctes de 32 x 32 bits, ce qui prend 40 960 horloges avec le Pentium'. Une exponentiation à l'aide d'un exposant de 2 048 bits requiert jusqu'à 4 096 multiplications si elle est effectuée selon le mode normal, c'est-àdire 167 millions de cycles d'horloge. Si le Pentium' fonctionne à 166 MHz, l'opération entière prend environ une seconde. Cet exemple ne tient pas compte, non plus, de la durée requise pour exécuter les divisions! Il est évident qu'on ne peut s'attendre à ce qu'un processeur central commun de type Pentium' puisse exécuter la création et l'échange de clés très rapidement. Puisque les algorithmes à clé publique exigent autant de calculs, ils ne sont généralement pas utilisés pour coder des messages entiers. On a plutôt recours à des systèmes cryptographiques à clé privée pour le transfert de messages. La clé privée employée pour chiffrer le message, appelée la clé de session, est choisie au hasard et chiffrée au moyen d'une clé publique. La clé de session chiffrée, de même que le message encodé, sont ensuite transmis à l'autre correspondant. Celui-ci utilise sa clé secrète pour déchiffrer la clé de session; le message peut -5- alors être déchiffré à l'aide de la même clé. On utilise une clé de session différente pour chaque communication, de sorte que si une clé de session était violée, seul le message chiffré à l'aide de cette dernière pourrait être lu. Cette méthode de clé publique/clé privée peut aussi servir à protéger les communications continues, comme les sessions de terminaux interactifs qui ne se terminent jamais en fonctionnement normal. Dans ce cas, on modifie la clé de session périodiquement (par ex., une fois l'heure) en répétant la technique de génération de clé publique. Là encore, la modification fréquente de la clé de session restreint la quantité de données compromises si le chiffrement est violé. Antériorité Les unités de chiffrement au niveau du réseau, qui donnent accès aux réseaux d'entreprises à l'aide d'une solution axée sur des logiciels, sont de plus en utilisées à grande échelle. Des produits comme le Raptor Eagle Remote et d'autres unités permettent un chiffrement complet à l'aide d'un logiciel. Celui-ci freine le débit de l'unité de chiffrement. La création d'une clé de session au moyen des techniques de clé publique peut prendre plusieurs minutes. Par conséquent, les clés de session ne sont pas régénérées aussi souvent que certains utilisateurs le souhaiteraient. Toutefois, le logiciel offre la possibilité de modifier facilement les algorithmes de chiffrement en fonction des progrès réalisés dans le domaine. Les autres unités utilisent une combinaison d'équipement et de logiciel. Par exemple, l'unité de chiffrement Sentinel X.25 de Northern Telecom (qui s'appelle aujourd'hui Entrust) emploie une puce DES produite par AMD pour chiffrer la clé secrète DES. La mise en application de la puce DES est beaucoup plus rapide, étant donné que cette dernière a été conçue de façon à être intégrée efficacement au matériel. La transposition, qui incorpore de nombreuses instructions du processeur central au logiciel, peut être effectuée à l'aide de tables de recherche -6- et de câblage parallèles spécialisés. Le système Sentinel utilise également un processeur Motorola DSP56000 pour exécuter les opérations de clé publique. À l'époque, la capacité de multiplication à cycle unique du DSP rendait cette méthode considérablement plus rapide que l'application d'algorithmes à clé publique à des microprocesseurs CISC réguliers. La plupart des unités de chiffrement intégrées au matériel sont très limitées en ce qui a trait au nombre d'algorithmes qu'elles peuvent appliquer. Par exemple, la puce AMD utilisée dans le système Sentinel exécute uniquement des opérations de type DES. Des unités plus récentes, de Hi/Fn, peuvent exécuter des opérations de type DES et RC4. Mais, quand on doit appliquer des opérations de type RC5 ou IDEA, on doit se tourner vers un autre produit. RÉSUMÉ DE L'INVENTION Une unité programmable de chiffrement de réseau à haut rendement, intégrée à une puce, est un système de processeur pipeline parallèle dont le jeu d'instructions est optimisé pour les algorithmes de chiffrement courants. La présente invention offre les avantages des méthodes se rapportant à l'équipement et aux logiciels. Le processeur étant programmable, tout algorithme de chiffrement peut être mis en oeuvre, contrairement à un processeur de chiffrement implanté par le biais de l'équipement, qui ne peut exécuter qu'un seul algorithme. Toutefois, l'architecture du processeur permet les calculs parallèles utiles au chiffrement, de sorte que le rendement de ce processeur se rapproche de celui d'un équipement spécialisé. Conformément au mode de réalisation préféré de l'invention, une unité de chiffrement électronique comprend toute une gamme d'éléments de traitement. Chaque élément de traitement comporte une mémoire d'instructions pour stocker un cycle d'algorithme de chiffrement, le cycle comptant une séquence -7- d'instructions. L'élément de traitement comprend également un processeur pour l'application du cycle de la mémoire d'instructions et le stockage de données pour mémoriser les opérandes des données de chiffrement et les données chiffrées découlant de la mise en oeuvre du cycle. Chaque élément de traitement de la série exécute un des cycles et transmet les résultats aux éléments de traitement successifs, de sorte que la série d'éléments de traitement implante des cycles successifs de l'algorithme de chiffrement dans un pipeline d'éléments de traitement. Selon le mode de réalisation préféré, une partie des données mémorisées sont partagées avec des éléments de traitement de la série linéaire adjacents pour la transmission de données à ces éléments. Les données mémorisées communes se composent préférablement de mémoires à double accès, mais peuvent aussi comprendre des registres communs. L'élément de traitement préféré comprend une unité de commande et une unité arithmétique et logique. L'unité de commande, l'unité arithmétique et logique, la mémoire d'instructions et le stockage de données, y compris la mémoire des données locales et la mémoire des données communes, sont reliés à un bus d'élément de traitement local. Le bus local est segmenté par un commutateur en un segment de bus d'instruction local, qui relie la mémoire d'instructions et l'unité de commande, un segment de bus de données local et l'unité arithmétique et logique, de même que la mémoire des données locales et la mémoire des données communes. Le commutateur permet le fonctionnement simultané indépendant des deux segments de bus locaux ou une communication entre les deux segments de bus. Chaque élément de traitement comporte également un multiplicateur pour exécuter des opérations de multiplication à l'intérieur de l'élément de traitement. Le dispositif de chiffrement préféré comprend également une mémoire vive globale et un bus global à travers lesquels les données sont transmises de la -8- mémoire vive à la zone de stockage de l'élément de traitement. Un processeur central est relié à un bus global pour le traitement des mots de données qui sont plus grands que les mots de données traitéspar les éléments de traitement. Les multiplicateurs des éléments de traitement multiple peuvent être adaptés pour la concaténation, sous forme de segments, d'un multiplicateur plus puissant utilisé par le processeur central. De préférence, chaque multiplicateur comprend des additionneurs partiels de produits qui disposent de circuits de sélection de données d'entrée pour la sélectionner une première série de données d'entrée, quand il est utilisé comme multiplicateur individuel, et une seconde série de données d'entrée, y compris les données d'entree des éléments de traitement adjacents, quand il est chaîné. De préférence, le processeur central comprend un nouvel additionneur. Dans l'additionneur, chacun des segments de l'additionneur a une sortie de report et une sortie de somme, et chacun des segments de l'additionneur traite un segment de chacun des deux opérandes. Les sélecteurs choisissent les sorties de report comme entrées de report pour les segments successifs de l'additionneur pour les cycles d'horloge successifs du moment que tout report résulte en un cycle d'additionneur. Les sélecteurs choisissent aussi chaque sortie de somme comme une entrée d'opérande pour le même segment d'additionneur. Par conséquent, du moment que tout report résulte en un cycle d'additionneur, la sortie de somme d'un additionneur est renvoyée à son entrée, et le segment de l'additionneur reçoit une entrée de report produite comme la sortie de report d'un segment précédent dans un cycle précédent. De préférence, chaque élément de traitement exécute une opération d'ajustement modulaire pour calculer M mod N sans utiliser un circuit de division. Chaque élément de traitement exécute également une opération d'addition/soustraction modulo pour calculer A B mod N. De plus, chaque -9- élément de traitement execute une opération de multiplication modulo afin de calculer A x B mod N. BREVE DESCRIPTION DES DESSINS Les éléments qui précèdent, de même que les autres objets, caractéristiques et avantages de l'invention seront apparents dans la description suivante des modes de réalisation préférés de l'invention, comme l'illustrent les dessins annexés, dans lesquels les caractères de reférence semblables font référence aux mêmes parties tout au long des vue différentes. Les dessins ne sont pas nécessairement à l'échelle; on a plutôt mis l'accent sur l'illustration des principes de l'invention. Les figures LA et 1 B sont des schémas fonctionnels des applications possibles de la présente invention. La figure 2 est un schéma fonctionnel d'une puce de chiffrement caractéristique de la présente invention. La figure 3 est un schéma fonctionnel d'un élément de traitement de la puce de chiffrement de la figure 2. La figure 4 illustre le plan de circuit de puce préféré des circuits des figures 2 et 3. La figure 5 illustre l'élément de traitement de la figure 3, redessiné afin de correspondre au plan de circuit de la figure 4 et d'illustrer les connexions du bus local et du bus global. La figure 6 illustre un circuit d'additionneur utilisé dans l'unité arithmétique et logique PK de la figure 2. La figure 7 illustre un symbole d'additionneur complet utilisé dans un multiplicateur de l'unité arithmétique et logique PK. La figure 8 illustre le traitement de première étape d'un multiplicateur 4 x 4 qui utilise des additionneurs complets. - 10- La figure 9 illustre les trois étapes du multiplicateur 4 x 4. La figure 10 illustre les additionneurs d'un vaste multiplicateur recouvert desadditionneurs du multiplicateur 4 x 4. La figure 11 est un schéma fonctionnel d'un multiplicateur 4 x 4 adapté pour être chaîné à des multiplicateurs semblables dans un vaste multiplicateur de longueur de mots de la figure 10. La figure 12 illustre l'application conventionnelle d'un additionneur de 8 bits à l'aide des additionneurs complets. La figure 13 est une application conventionnelle d'un additionneur à report anticipé. La figure 14 est un schéma fonctionnel illustrant le cycle de chiffrement d'une norme DES. Les figures 15A à 15D sont des diagrammes fonctionnels illustrant l'addition, la soustraction et l'ajustement modulaires, de même que la combinaison des trois opérations selon les modes de réalisation de la présente invention. DESCRIPTION DÉTAILLÉE DE L'INVENTION La puce de chiffrement de la présente invention peut être programmée pour exécuter des algorithmes courants de chiffrement et de déchiffrement de données sur un ou plusieurs flots de données dans n'importe quelle application. L'objet principal de la puce de chiffrement est d'exécuter le chiffrement rapide de données à l'aide d'algorithmes dont on prévoit l'utilisation dans Internet à des débits binaires de 100 à 2 000 millions de bits/seconde. Des exemples d'applications sont illustrés dans les figures lA et lB. Dans la figure 1A, les données d'une source 22 sont encodées dans une puce de chiffrement 24 avant le passage des données dans un réseau public 26. Les données sont ensuite déchiffrées dans la puce de déchiffrement 28 avant d'être -11- transmises à une destination 30. Dans le mode de réalisation, la source et la destination sont elles-mêmes des réseaux, comme des réseaux locaux. Dans ce cas, les puces de chiffrement offrent une vole sécuritaire entre les réseaux locaux et le réseau public 26. Dans l'application de chiffrement à chaîne illustrée à la figure lB, les données transmises à l'intérieur de chaque chaîne sont chiffrées entre les routeurs. Dans ce cas, les données chiffrées reçues à un routeur 32 entre les chaînes doivent d'abord être déchiffrées par une puce de chiffrement 34, puis chiffrées à nouveau conformément à l'algorithme de chiffrement de la chaîne suivante dans une puce de chiffrement 36. De nos jours, trois algorithmes de chiffrement de bloc à clé secrète sont couramment utilisés: DES, RC5 et IDEA. Les deux premiers algorithmes sont des algorithmes normalisés de protocole internet sécuritaire (IPSEC). Le troisième est l'algorithme utilisé par PGP, un programme répandu de chiffrement de courrier électronique. En règle générale, les algorithmes de bloc comprennent un certain nombre de cycles, chaque cycle étant une séquence d'opérations dans un algorithme de chiffrement. Il faut entre 8 et 32 cycles pour appliquer entièrement un algorithme de chiffrement. Les opérations exécutées par chaque cycle sont souvent les mêmes, mais il n'est pas nécessaire qu'elles le soient. Dans un logiciel, chaque cycle est appliqué à l'aide de quelques instructions machine. Dans le matériel, chaque cycle est appliqué à l'aide de circuits spécialisés. Le matériel prend généralement la forme d'un pipeline, chaque cycle étant applique dans sa propre étape pipeline. La figure 2 illustre une solution de puce intégrée, laquelle on désignera désormais comme puce de chiffrement, conformément au mode de réalisation de la présente invention. Bien que le terme " puce de chiffrement " sous- entende que - 12- la puce peut exécuter le chiffrement, il est à noter que la puce a également été conçue pour exécuter des fonctions de déchiffrement et de traitement des messages. Les données entrent dans la puce de chiffrement par un stade d'entrée 40 qui reçoit les données du réseau, habituellement sous la forme de train de bits en série. On peut utiliser Ethernet, ATM ou tout autre format numéroté en série. Le stade d'entrée convertit le train de données en série en données alignées selon les blocs, pouvant être traitées comme une entrée dans un pipeline de chiffrement et de déchiffrement. La taille des blocs d'entrée est programmable. Dans le mode de réalisation préféré illustré à la figure 2, le pipeline se compose de plusieurs éléments de traitement 37 agencés selon une série linéaire, chacune contenant une mémoire d'instruction, une pile de registres, une unité arithmétique et logique, une mémoire de données locales et communes et des circuits de commande. Chacun des éléments de traitement est conçu pour traiter des mots de données d'une largeur de 32 bits. Les données chiffrées sont prises du dernier élément de traitement dans le pipeline au stade de sortie 42, qui convertit à nouveau le bloc de données en un train de série et transmet les données à travers le réseau ou vers une destination locale. Les données peuvent être transmises entre les éléments de traitement non adjacents ou d'autres éléments dans la puce de chiffrement via le bus de données globales 38. La logique de communication d'entrée et de sortie 54, qui permet la communication avec un processeur central (non représenté), est aussi reliée au bus de données globales 38. La communication avec le processeur central hôte est requise pour programmer la puce de chiffrement avant l'utilisation. La mémoire vive globale 44 est également reliée au bus de données globales 38, ce qui permet la communication globale entre les éléments de traitement. Un processeur central de commande 52 synchronise les opérations des processeurs du pipeline de -13- chiffrement. Ce processeur central peut être mis en oeuvre à l'aide de n'importe quel processeur central intégré, comme MIPS, ARM ou ARC. De plus, pour permettre le traitement d'algorithmes qui utilisent de très vastes opérandes, comme les algorithmes de chiffrement à clé publique, un processeur central 46 à clé publique est relié au processeur central de commande 52. Le processeur central à clé publique comprend un registre 48 comprenant de 8 à 16 registres de 512 bits, de même qu'une unité arithmétique et logique à clé publique 50. Le processeur central à clé publique peut transmettre des données à la mémoire vive globale 44 à travers un bus de 512 bits en un cycle d'horloge de système. Les opérandes de 512 bits sont traités par l'unité arithmétique et logique 50, ce qui généralement de 2 à 32 cycles d'horloge. L'unité arithmétique et logique à clé publique 50 est un co-processeur contrôlé par le processeur central 52 qui n'exécute que des opérations arithmétiques et logiques, des chargements et des mises en mémoire. D'autres instructions requises pour l'application des algorithmes à clé publique peuvent être exécutées par le processeur central 52. La puce de chiffrement applique le code pour chaque cycle d'algorithme à clé secrète dans un élément de traitement distinct du pipeline. Une fois calculées, les données d'un élément de traitement sont transférées à l'élément de traitement suivant, o le cycle suivant est appliqué. Le premier élément de traitement est ensuite libre et peut traiter un cycle de chiffrements pour le bloc de données suivant. Le processus de pipeline se poursuit pour les autres éléments de traitement. La durée requise pour chiffrer un bloc à l'aide de cette architecture est donc équivalente à celle requise pour chiffrer un cycle. De nombreux algorithmes de bloc utilisent une série d'opérations pour chiffrer les données et une série distincte d'opérations pour étendre la clé. L'extension de la clé est le processus de transformation d'une clé relativement petite (de 56 à 128 bits) en une grande clé (512 bits ou plus) dotée des propriétés statistiquement -14aléatoires. Cette clé étendue est répartie en sous-clés plus petites, o une partie différente de la clé étendue est utilisée dans chacun des cycles. Il est important de souligner que la clé étendue ne change pas avec les données. Par conséquent, comme elle ne se trouve pas dans la voie critique, elle peut être calculée à l'avance et mémorisée. Le code d'échantillon mentionné plus loin suppose que l'information se rapportant à la clé a été calculée à l'avance et stockée dans les mémoires des données locales de chaque élément de traitement. L'application fondamentale d'un bloc d'algorithme transforme un bloc de texte en clair (données non encodées) en un bloc de texte chiffré (données codées) de même taille et inversement. Ce mode d'exploitation porte le nom de mode dictionnaire. En raison de ses nombreux points faibles inhérents sur le plan de la sécurité, on a fréquemment recours aux méthodes d'introduction de la rétroaction dans le chiffrement en acheminant à l'entrée une partie des données de sortie fondamentales. La puce de chiffrement utilise le bus de données globales 38 pour exécuter la rétroaction des algorithmes de chiffrement. En mode dictionnaire, un nouveau bloc de données peut être chiffré une fois par cycle de pipeline, ce qui peut représenter entre 10 à 100 instructions. Cependant, dans le mode de rétroaction des algorithmes de chiffrement, chaque donnée doit traverser le pipeline plusieurs fois. Ce mode réduit substantiellement le débit dans un canal. Toutefois, on peut atteindre le rendement maximal en chiffrant plusieurs canaux de données entrelacés dans le pipeline. La figure 3 présente un schéma fonctionnel d'un élément de traitement individuel selon le mode de réalisation de la présente invention. L'élément de traitement 37 comprend une unité arithmétique et logique 56 qui traite des mots de 32 bits provenant d'une pile 58 composée de 8 à 16 registres de 32 bits. La pile 58 et l'unité arithmétique et logique 56 sont contrôlées par une unité de commande 60 qui décode les instructions à l'aide d'une mémoire d'instructions -15- d'élément de traitement 62. Chaque mémoire d'instructions d'élément de traitement mémorise au moins un cycle d'algorithme, ce cycle se définissant comme une séquence d'instructionsdans unalgorithme de chiffrement. L'espace mémoire auquel chaque élément de traitement peut accéder se divise en quatre zones: une mémoire locale 64 (désignée dans la figure 3 comme mémoire locale ET.), une mémoire commune 66 (désignée dans la figure 3 comme mémoire commune ET.,,, partagée entre le n'et n-1e élément de traitement), une deuxième mémoire commune 68 (désignée dans la figure 3 comme mémoire commune ET,+,,., partagée entre le n+ l1 et le ne élément de traitement) et la mémoire globale 44 décrite à la figure 2. à laquelle tous les éléments de traitement ont accès. Ces mémoires sont toutes appliquées à l'espace adressable d'un élément de traitement, par exemple, le né élément de traitement. Aucune instruction spéciale n'est requise pour accéder à une mémoire; elles sont toutes accessibles par les instructions d'accès à la memoire. Les mémoires 66 et 68 d'un élément de traitement sont des mémoires vives à double accès, communes à l'élément de traitement des stades de pipeline précédente et suivante, respectivement. Il est à noter que la mémoire voisine supérieure d'un élément de traitement est la même que la mémoire voisine inférieure d'un élément de traitement. Ces mémoires vives à double accès servent à diffuser des données via les stades de pipeline. Un élément de traitement inscrit les données devant être transmises à la mémoire voisine supérieure commune associée. L'élément de traitement voisin supérieur lit ensuite les données mémorisées dans la mémoire voisine inférieure commune qui, tel que mentionné précédemment, est la même que la mémoire voisine supérieure commune l'élément de traitement précédent. Puisque que les mémoires ont un double accès, il n'y a aucune restriction concernant la durée d'accès. Les accès sont synchronisés à l'aide de l'ordonnancement statique -16- des instructions machine établi par l'auteur ou le compilateur du logiciel. En outre, étant donné que le bus global n'est pas utilisé pour la communication entre les éléments de traitement adjacents, ces derniers peuvent tous communiquer simultanément. La mémoire globale 44 est reliée au bus de communication global. Un seul élément de traitement est autorisé à avoir accès à la mémoire globale 44 à tout moment. Cette mémoire sert à transmettre des données entre les éléments de traitement non adjacents, notamment durant la rétroaction des algorithmes de chiffrement, et peut jouer le rôle de mémoire additionnelle pour le stockage d'éléments de traitement individuels. La mémoire d'instructions 62 comprend une série d'instructions qui ressemblent à celles d'une unité entière de processeur RISC moderne. La série d'instructions est plus ou moins orthogonale, car n'importe quel registre peut servir d'opérande pour n'importe quelle instruction. Aucun point flottant ou soutien de la gestion mémoire n'est requis, car ni l'un ni l'autre ne servent au chiffrement. Cependant, la série d'instructions contient les améliorations suivantes : une instruction d'addition et de soustraction modulaire, une instruction de multiplication modulaire et une instruction d'ajustement modulo. L'instruction d'addition et de soustraction modulaire calcule A+B mod N (le nombre " M mod N " est le solde de la division de M par N). Les figures de 15A à 15D illustrent la combinaison de l'addition, de la soustraction et de l'ajustement modulaires en une unité arithmétique modulo 3 en 1. La figure 15A illustre l'addition modulaire. Lorsque les deux nombres A et B devant être additionnés sont tous deux inférieurs à N, la somme établie par l'additionneur 120 peut être le N modulo réduit en soustrayant N dans le soustracteur 122, puis en choisissant, au moyen du multiplexeur 124, le résultat du soustracteur ou le nombre original, selon le signe de la différence. De même, -17- dans le cas d'une soustraction modulaire, telle que présentée à la figure 15B, si les deux nombres A et B sont inférieurs à N, la différence N modulo peut être calculée en ajoutant N à l'additionneur 126 si la différence du soustracteur 128 est négative ou en choisissant la différence au moyen du multiplexeur 130 si la différence est positive. Il est à noter que l'addition modulo et la soustraction modulo ne nécessitent pas de division. Cependant, elles requièrent deux additions en série (une pour calculer la somme/différence et l'autre pour réduire le N modulo). Si la double addition a un effet sur la voie critique, la réduction du N modulo peut alors être codée comme instruction séparée, qu'on appelle l'instruction " d'ajustement modulo ". L'instruction d'ajustement modulo, illustrée à la figure 15C, calcule M mod N. Le nombre M est la somme ou la différence de A et B, ces deux chiffres étant déjà réduits à mod N. Si M est négatif, la logique 132 entraîne l'addition de N à M par l'additionneur ou le soustracteur 134 pour produire le résultat à l'aide du multiplexeur 136. Si M est positif, la logique 132 entraîne la soustraction de N, puis renvoie la différence si elle est positive ou M si la différence est négative. Cette instruction peut être utilisée en conjonction avec les instructions de somme et de différence pour désactiver l'instruction d'addition/soustraction modulaire. À la figure 15D, l'unité arithmétique 3-en-1 combine l'addition modulo, la soustraction modulo et l'ajustement modulo en une seule unité intégrée à chaque élément de traitement. Conformément à la logique 144 qui répond à une instruction (addition, soustraction ou ajustement modulaire) et à la plupart des entrées de signes de bits de poids fort, l'additionneur/soustracteur 138 fait fonction des dispositifs 120 et 128, et l'additionneur/soustracteur 140 fait fonction des dispositifs 122, 126 et 134. Le multiplexeur 142 correspond aux dispositifs 124, et 136. Dans l'ajustement modulo, M est appliqué aux données A et les données B sont fixées à zéro. Cette unité combinée est la plus efficace en matière -18de coût du débit. Elle s'avère également utile dans l'application de la méthode de Montgomery de multiplication modulaire sans division d'essai, selon l'article " Modular Multiplication Without Trial Division " de Peter L. Montgomery, dans Mathematics of Computation, vol. 44, n' 170, avril 1985, pages 519 à 521. Bien que l'addition et la soustraction modulaires puissent être exécutées sur des processeurs conventionnels à l'aide de deux à trois instructions seulement, l'inclusion de ces instructions en tant que fonctions spéciales de la série d'instructions de la puce de chiffrement permet une légère accélération dans le cas des algorithmes de chiffrement. L'instruction de multiplication modulaire calcule A*B mod N. Nous décrirons plus loin le multiplicateur utilisé pour cette instruction. La puce de chiffrement offre une instruction de multiplication modulaire entière, pour des raisons qui seront expliquées plus loin. Le tableau 1 fournit un échantillon représentatif de la série d'instructions des éléments de traitement, qui sera utilisée dans les exemples subséquents. D'autres instructions RISC conventionnelles peuvent également s'appliquer. Tableau 1: Échantillon d'une série d'instructions Instruction Description load rn, addr charger le registre n en mémoire store rn, addr stocker le registre n en mémoire xor rl, r2, r3 rl = r2 xor r3 add rl, r2, r3 r l = r2 + r3 rol, rI, r2, r3 rl = r2 mul rl, r2, r3 Multiplier À rI = r2 x r3, exécuté en 32 bits. Multiplication modulaire n rl = r2 x r3 mod r4. mulm rl, r2, r3, r4 Jump label Transférer le contrôle inconditionnellement à étiquette sync label Synchronisation de pipeline À attendre jusqu'à ce que tous les éléments de traitement soient parvenus à l'instruction " sync ", puis bifurquer sur étiquette Dbra, rn, label rn = rn -1; si rn! = 0 sauter à étiquette cbra rl cond Comparer et bifurquer À comparer rn et r2 et r2, label bifurquer à étiquette si la condition est vraie. ",Cond,"est ==,!= , ≤ ou > Disposition La figure 4 présente la disposition générale d'une puce de chiffrement, en supposant 16 éléments de traitement et une unité centrale à clé publique d'une largeur de 512 bits. La largeur du mot central à clé publique à été fixée à 512 bits pour faciliter la disposition. Par exemple, une largeur de 1 024 bits nécessiterait plus de surface de silicium, mais elle en doublerait également le rendement. Les éléments individuels peuvent être comparés aux éléments des figures 2 et 3. Seize éléments de traitement sont disposés linéairement dans une colonne dans -20- la zone inférieure gauche. L'élément 70 du multiplicateur commun est présenté, associé à l'élément de traitement illustré. Comme nous l'avons décrit précédemment, un segment 70 du multiplicateur 32 x 32 est associé à chaque élément de traitement pour exécuter des multiplications de 32 bits à l'intérieur des éléments de traitement respectifs. Autrement, les éléments 70 du multiplicateur peuvent être chaînés pour servir de multiplicateur de type 512 x 32 bits pour l'unité arithmétique et logique à clé publique 50. Cette unité 50 se trouve à la droite des éléments à clé secrète comprenant les éléments de traitement décrits plus haut. La pile à clé publique 48 se situe à côté de cette unité. Réunies, l'unité arithmétique et logique à clé publique 50 et la pile à clé publique 48 constituent l'unité de traitement à clé publique, présentée à la figure 2 sous le numéro 46. A droite de l'unité de traitement à clé publique se trouve la mémoire globale (mémoire vive) 44. Le long de la partie supérieure de la puce se trouvent le processeur central de commande 52, la logique de communication 54 et les blocs de traitement d'entrée et de sortie 40 et 42. Le bus de données globales 38 relie les éléments à clé secrète, l'unité à clé publique 46, la mémoire vive globale 44, la logique de communication 54 et le processeur central de commande 52. La disposition d'un élément de traitement type et des connexions de bus local est présentée à la figure 5. Toutes les composantes d'un élément de traitement peuvent communiquer via un bus local d'élément de traitement 72, qui traite tous les transferts mémoireregistres. Il est à noter que la mémoire voisine supérieure commune 68 est alignée aux autres composantes de l'élément de traitement illustré, alors que la mémoire voisine inférieure commune 66 est alignée aux composantes de l'élément de traitement voisin inférieur. A des fins de programmation et d'expérimentation, toutes les mémoires des éléments de traitement sont accessibles à partir du bus global 38. En règle général, un commutateur 74 débranche le bus local 72 du bus global 38, mais il peut être fermé ponctuellement pour permettre -21- la transmission de données entre la mémoire vive locale 64 et la mémoire vive globale 44. Un autre commutateur 76 permet de diviser le bus local 72 afin que l'unité de commande 60 puisse simultanément lire les instructions de la mémoire vive 62 et transmettre les données au bus 72. Les opérations exécutées au sein de l'élément de traitement peuvent ainsi être transmises pendant l'exécution d'une autre instruction dans l'unité de commande, alors qu'une instruction préalable est exécutée dans l'unité arithmétique et logique 56 de l'élément de traitement. Durant l'exécution du code de chiffrement, les commutateurs 74 et 76 sont habituellement ouverts, afin que les instructions extraites de la mémoire vive d'instructions puisse être exécutées en même temps que les extractions de données dans les mémoires de données et la pile. Plusieurs architectures de multiprocesseurs ont été proposées. La plupart d'entre elles étaient conçues pour le multitraitement; la communication entre les éléments de traitement s'effectue généralement à l'aide d'une matrice de commutation pouvant être dynamiquement configurée pour échanger des données d'un élément de traitement à un autre. Ces concepts de commutateurs sont extrêmement complexes. Puisqu'ils ne sont pas requis pour le chiffrement, le mode de réalisation de la présente invention dépeint une disposition linéaire plus simple des éléments de traitement qui comporte beaucoup moins de circuits de commutation. De plus, l'utilisation de la mémoire partagée comme technique d'interconnexion, plutôt que le recours aux portes d'entrée et de sortie comme l'indique la documentation, permet de créer un modèle de programmation plus simple et plus puissant. Prenez deux éléments de traitement (A et B) reliés à un seul port d'entrée et de sortie de 32 bits. Pour transmettre des mots de données multiples entre A et B, A doit inscrire chaque mot sur le port d'entrée et de sortie et attendre que B le lise. Par contre, si A et B sont reliés par une mémoire -22- commune assez grande pour contenir tous les mots de la communication, A peut inscrire les données sans devoir attendre que B ne les lise. En outre, l'élément de traitement B a la liberté de lire les mots dans n'importe quel ordre, ou de choisir des données au besoin, en fonction de la tâche à exécuter. Enfin, il est à noter que si une portion de la mémoire commune n'est pas requise pour la communication, elle peut servir de prolongement à la mémoire locale et fournir un espace de travail local additionnel. Logistique des clés publiques Le chiffrement à clé publique requiert l'exponentiation modulaire fournie par le co-processeur à clé publique. Cette unité comprend les éléments suivants: * une pile à clé publique 48, composée de seize registres d'une largeur de 512 bits; * un multiplicateur à clé publique 70 de 512 x 32 bits, composé d'éléments chaînés du multiplicateur à clé secrète (cette unité peut exécuter une multiplication de 512 x 512 en seulement 32 cycles d'horloge); * une unité arithmétique et logique de l'additionneur 50 de 512 bits à clé publique, qui peut exécuter des additions en deux à seize cycles (habituellement, en deux cycles et moins); * la mémoire globale 44 définie pour un accès parallèle de 512 bits à partir du co-processeur à clé publique, pour le chargement et la mémorisation de mots de 512 bits en un seul cycle d'horloge. Le processeur central à clé publique accélère la multiplication modulaire en l'exécutant à l'aide de mots de 512 bits. Une multiplication de 512 x 512 à l'aide de l'unité à clé publique de l'invention serait appliquée en exécutant seize multiplications de 512 x 32 grâce aux éléments chaînés du multiplicateur des seize -23- éléments de traitement décrits plus loin. En supposant que chaque multiplication nécessite deux cycles d'horloge et que seize multiplications soient requises, une multiplication de 512 x 512 exigerait 32 cycles d'horloge et une multiplication de 2 048 x 2 048 ne prendrait que 512 cycles d'horloge. L'exponentiation modulaire complète, qui exige 4 096 multiplications, prendrait au total deux millions de cycles d'horloge. Cela représente un rendement 80 fois supérieur à celui du Pentium, indiqué précédemment à titre d'exemple. On s'attend à ce que l'utilisation d'algorithmes à clé publique améliore de la même façon le rendement des processeurs. Cette amélioration considérable par rapport à l'antériorité permettra de modifier plus souvent les clés de session et d'accroître ainsi la sécurité. ADDITIONNEUR DE 512 BITS Les unités à clé publique et à clé secrète ne se partagent pas les additionneurs. Étant donné que les additions et les opérations logiques sont communes pour les clés publique et secrète, chaque unité dispose de son propre additionneur afin que les opérations puissent être exécutées simultanément. Dans l'unité arithmétique et logique à clé publique 50, un additionneur à cycle unique de 512 bits serait d'une grande complexité et prolongerait considérablement la durée de la voie critique de l'unité arithmétique et logique. Par conséquent, l'additionneur de 512 bits de l'unité arithmétique et logique 50 est formé de seize additionneurs de 32 bits, comme le montre la figure 6. Lorsqu'ils sont en activité, la porte ET 78 et le multiplexeur 80 appliquent initialement deux segments d'opérande de 32 bits à chacun des additionneurs de 32 bits de type AO-A15. Il est à noter que la porte ET 78 représente une opération d'une largeur de 32 bits. Chaque additionneur de 32 bits calcule une somme de 32 bits avec les résultats. Le signal de sortie d'un additionneur est connecté par un circuit à bascule D 79 -24- au signal d'entrée voisin. Lorsque des résultats sont générés pendant le premier cycle, ils sont intégrés au circuit à bascule o ils sont disponibles comme données d'entrée pour le cycle suivant. Chaque somme est retournée à une entrée du même additionneur par le circuit à bascule D 81 et le multiplexeur 80; l'autre entrée de l'additionneur est maintenue à zéro par la porte ET 78 au cours des cycles successifs. L'étape consistant à rajouter la somme comme entrée pour chaque additionneur est répétée aussi longtemps qu'un signal produit des résultats pour un additionneur de 32 bits. On peut mieux comprendre le fonctionnement de l'additionneur de 512 bits en se référant à l'exemple suivant qui présente quatre mots binaires de 4 bits au lieu de seize mots de 32 bits. Additionner: 1101 0110 1001 1011 0001 0101 1100 1011 01110 01011 10101 10110 lesrésultatssont0,0, 1,1 1110 1011 0101 0110 0 I 1 0 résultats précédents 1110 1100 0110 0110 somme finale Il est à noter que deux additions sont requises pour obtenir la somme finale o aucun résultat n'est reporté. C'est un cas typique. Étant donné qu'on utilise l'additionneur pour les opérations de chiffrement, on peut affirmer avec confiance que les nombres additionnés sont distribués de façon plus ou moins aléatoire. La probabilité d'un résultat à reporter après la première addition est très élevée. Cependant, la probabilité qu'un résultat, ajouté à nouveau comme un bit de faible poids, produira un autre résultat à reporter sous forme de bit de poids fort est très mince. Par conséquent, on s'attend à ce que la plupart des additions ne prennent que deux cycles d'horloge. En ce qui a trait au problème original de la construction d'un additionneur de -25- 512 bits, si on utilisait un report anticipé standard ou un concept d'additionneur de dérivation, la voie critique traversant l'additionneur serait très longue, car le report doit se propager dans des circuits optimisés fonctionnant à 512 bits. Un additionneur de ce genre serait plutôt imposant et lent. Par contre, dans le mode de réalisation de la présente invention, un additionneur de 512 bits se compose d'additionneurs de 32 bits, dont le design est aujourd'hui bien connu et optimisé. On s'attend à ce que la vitesse d'horloge maximale d'un additionneur de 32 bits soit deux fois plus grande que celle d'un modèle de report anticipé de 512 bits. Ainsi, l'additionneur de deux cycles ou plus, selon l'invention, aurait une vitesse moyenne d'exécution plus grande qu'un additionneur imposant de 512 bits et occuperait moins d'espace sur la puce. Dans le pire des cas, comme on l'illustre ci-dessous, il est possible que seize cycles soient requis pour calculer complètement la somme finale sans reports pour l'application de seize additionneurs de 32 bits. On utilise à nouveau l'exemple des mots binaires de 4 bits: Additionner: 1111 1111 1111 1111 0000 0000 0000 0001 01111 01111 01111 10000 les 1erésultatssont0,0,0, 1 1111 1111 1111 0000 0 0 1 0 01111 01111 10000 00000 les 2me résultats sont 0, O, 1, 0 1111 1111 0000 0000 0 1 O 0 01111 10000 00000 00000 les 3" résultats sont 0, 1, 0,0 1111 0000 0000 0000 1 0 0 0 10000 0000 0000 0000 -26- Quatre additions sont requises. En règle générale, pour n groupes de nombres, il faudra au plus n additions. MULTIPLICATEUR 512 x 32 Les multiplicateurs occupent une grande superficie. Chaque élément de traitement à clé secrète doit contenir son propre multiplicateur afin d'appliquer tous les algorithmes à clé secrète exigeant la multiplication, comme par exemple le modèle IDEA, que nous examinerons plus loin. La superficie occupée par chaque multiplicateur d'élément de traitement est collectivement considérable et, par conséquent, l'utilisation de cette superficie est reliée à l'application du multiplicateur à clé publique de 512 x 32 bits. Pour économiser de l'espace, on applique le grand multiplicateur 512 x 32 en chaînant les seize multiplicateurs 32 x 32 dans chaque élément de traitement à clé secrète. Autrement dit, les unités à clé secrète et à clé publique peuvent se partager les éléments du multiplicateur, comme l'illustre la disposition de la puce à la figure 4. L'utilisation des éléments du multiplicateur doit donc être coordonné entre les éléments de traitement à clé secrète et le processeur central à clé publique, étant donné que le processeur central à clé publique ne peut exécuter une multiplication lorsqu'un des éléments de traitement à clé secrète est lui-même occupé à exécuter une multiplication. Pour illustrer l'enchaînement des multiplicateurs, on présente ci-dessous le concept simple d'un multiplicateur 4 x 4/4 x N combiné. Il faut souligner que des techniques de pointe en matière de conception de multiplicateur, comme l'encodage Booth et les compresseurs 4: 2, sont disponibles. L'exemple suivant présente une illustration simple x 01 10 1 0 1 1 Produits partiels -27- 1 000010 La multiplication du monochiffre peut être facilement appliquée à l'aide d'une porte ET. Le résultat, quand on utilise deux opérandes de 4 bits, se compose de 16 bits de produit partiel. Ces produits partiels doivent être additionnés efficacement. On pourrait y arriver, par exemple, au moyen de deux additions entières de 4 bits et d'une addition entière de 6 bits, mais le temps d'exécution serait substantiel étant donné que les résultats pourraient se voir reporter à travers plusieurs additionneurs. Le résultat global d'une telle application serait trop lent. Il serait plus avantageux d'utiliser un additionneur dont les résultats doivent traverser moins d'étapes. La composante fondamentale du multiplicateur préféré est un additionneur complet, un circuit acceptant trois données et produisant la somme de 2 bits des entrées. Un additionneur complet est illustré au moyen du symbole à la figure 7. On utilise des carrés plutôt que des nombres binaires pour des raisons de généralité et de commodité. Les trois carrés dans le haut montrent les trois données de l'additionneur complet. Les deux carrés dans le bas montrent la somme et les résultats à reporter. Le report se trouve dans le bas à gauche; il indique que sa valeur de place est deux fois plus grande que celle de la somme. La première étape de l'addition d'un multiplicateur 4 x 4 est illustrée à la figure 8. Au-dessus de la ligne d'addition, seize carrés, certains noirs, d'autres blancs, représentent les bits d'un produit partiel qui doit être additionné. Les bits représentés par des cases noires seront additionnés au cours de la première étape à l'aide de quatre additionneurs complets 82. Les bits représentés par des cases blanches ne seront pas additionnés au cours de la première étape, mais plutôt transférés vers le bas, comme l'indiquent les flèches de la figure 8, en préparation pour l'étape d'addition suivante. La somme des additionneurs dans la première -28- étape est affichée au-dessous de la ligne d'addition. La deuxième étape est illustrée à la figure 9. Les flèches désignent à nouveau les bits qui ne font l'objet d'aucune opération au cours de cette étape et qui sont simplement transférés vers le bas, alors que les cases noires désignent les bits devant être additionnés au cours de la deuxième étape. Encore une fois, quatre additionneurs complets 84 sont utilisés pour additionner les éléments des cases noires. À la sortie de la deuxième étape, il n'y a plus que deux nombres à additionner avec un additionneur régulier de 4 bits 86. Une comparaison du rendement des différentes architectures des additionneurs et des multiplicateurs permet d'illustrer les avantages du multiplicateur conformément à la présente invention. L'application naiïve d'un additionneur de 4 bits requiert quatre additionneurs complet en série de type A0-A3, comme le montre la figure 12. Selon ce concept, le résultat reporté Rpo>, de l'additionneur situé à l'extrême droite pourrait influencer chacune des étapes d'addition situées à sa gauche. La voie critique de ce concept comprend donc quatre étapes d'addition. Étant donné que l'addition typique comporte deux étapes logiques ou plus, le temps de propagation total d'un additionneur de quatre bits pourrait excéder huit étapes. L'additionneur de quatre bits amélioré est conçu selon le mode du report anticipé. La figure 13 présente un additionneur à report anticipé de trois bits. Le modèle à quatre bits est un peu plus complexe. Nous ne nous attarderons pas au fonctionnement des portes ET 102, des portes OU 104 et des portes Exclusive-OU 106, car ce sont des circuits bien connus. L'additionneur à report anticipé comporte l'avantage de propager les résultats aux bits de la somme finale dans seulement quatre portes logiques. Les concepts plus complexes pour les nombres plus grands comportent davantage d'étapes de logique, mais ils sont tout de même plus rapides qu'un modèle d'enchaînement de reports. -29- Dans le multiplicateur complet 4 x 4, le concept de sauvegarde de report crée une voie critique à travers deux additionneurs complets, plus l'additionneur à report anticipé final. L'application d'additionneurs complets seulement produirait une voie critique plus longue, car l'additionneur naif utilisant des reports enchaînés est plus lent que le additionneur à report anticipé. Enfin, si nous utilisions des additionneurs complets à report anticipé au cours des deux premières étapes d'addition du produit partiel, le multiplicateur qui en résulterait serait à nouveau ralenti, car les additionneurs à report anticipé sont plus lents que les additionneurs complets individuels. Il est à noter que, selon la présente invention, le concept du multiplicateur ne reporte jamais un résultat d'un additionneur à un autre au même niveau de produit partiel. Ainsi, la voie critique à travers le multiplicateur ne comprend forcément pas plus de deux additionneurs complets pour les deux premières étapes d'addition du produit partiel. La figure 10 présente un multiplicateur 4 x N beaucoup plus imposant. Les grandes cases noires 82, 84 et 86 désignent le même équipement d'additionneur complet utilisé à la figure 9. Il faut souligner que les additionneurs complets sont nécessaires dans ce case, car dans chaque circonstance, trois données sont additionnées. Dans la figure 9, des circuits plus simples auraient pu être utilisés, car l'addition de trois données n'est pas requise dans toutes les circonstances. Cependant, pour créer un système capable de manipuler une case 4 x N, on a préférablement recours à des additionneurs complets pour toutes les étapes, avec certains circuits supplémentaires pour déterminer la façon de traiter un cas comportant moins de trois données. Des additionneursbimodaux sont donc créés, certains comprenant un multiplexeur qui fournit une de leurs données pour faire un choix entre le résultat d'une étape précédente et le produit partiel d'un bit unique. La figure 1 1 présente les additionneurs complets A requis pour l'application des -30- zones encadrées 82, 84 et 86 de la figure 10, avec leurs résultats à reporter respectifs dans la partie inférieure gauche. Selon l'application souhaitée, chaque additionneur A est un additionneur complet. Certains additionneurs ont seulement deux entrées dans le cas 4 x 4 (clé secrète), alors que d'autres ont trois entrées dans le cas 4 x N (clé publique). Les additionneurs à deux entrées doivent recevoir une troisième donnée via un signal de validation. Certains additionneurs requièrent également qu'un multiplexeur leur fournisse une entrée afin qu'ils choisissent un résultat de l'étape précédente ou un produit partiel d'un bit unique. L'additionneur à report anticipé 86 au bas de l'illustration nécessite le report à toutes les quatre positions pour générer le dernier bit du produit dans le cas 4 x 4. Dans la figure 1 1, les produits partiels d'un multiplicateur 4 x 4 ont été étiquetés pour correspondre au scénario de produit partiel suivant: AB C D EFG H IJK L MNOP Dans le cas d'un multiplicateur 4 x N, on doit aussi tenir compte des produits partiels voisins. Ils sont étiquetés dans la figure 1l 1 selon le scénario suivant D' A B C D E F G H I J K L I' M NO P M' -31- Il est à noter que D' est l'équivalent voisin (à gauche ou à droite) de D. La somme finale de 8 bits est désignée par S7, S6, S5, S4, S3, S2, S1, SO et les trois bits de rang inférieur de la somme du voisin gauche sont S2', SI' et SO'. Le multiplexeur 2: 1 88 a un signal de sélection SEL. En règle générale, si SEL est la logique 1, la donnée de l'entrée gauche passe à la sortie du multiplexeur. Si SEL est la logique 0, la donnée de l'entrée droite passe à sortie du multiplexeur. Le signal SEL est aussi utilisé pour accéder aux portes ET 90. Lorsque SEL est la logique 1, l'autre donnée d'entrée à la porte ET passe à sortie; si SEL est la logique 0, les portes ET 90 sont invalidées et passent à la logique 0, quelle que soit la valeur de l'autre donnée d'entrée. Ainsi, selon l'application de la figure 1 l, si SEL est la logique 1, un segment d'un multiplicateur 4 x N peut être appliqué et le produit apparaît dans les résultats S6-S3. Si SEL est la logique 0, un multiplicateur 4 x 4 est appliqué et le produit de 8 bits apparaît dans les résultats S7-SO. Ainsi, la figure l l présente un élément de multiplicateur à clé secrète pouvant aussi être utilisé comme élément de multiplicateur qui, enchaîné à d'autres multiplicateurs semblables, sera utilisé pour appliquer le multiplicateur à clé publique beaucoup plus vaste. Exemples d'application Nous décrirons ci-dessous des exemples d'application d'algorithmes de chiffrement courants en nous référant au mode de réalisation préféré de la puce de chiffrement décrite précédemment. L'algorithme de chiffrement RC5 est probablement l'un des plus simples à appliquer. Il utilise fondamentalement trois types d'opérations: la disjonction, l'addition et la rotation, tous soutenables par n'importe lequel des éléments de traitement décrits plus haut, comme le montre le tableau 1. Bien que le modèle RC5 ait un bloc de longueur variable, le plus souvent, chaque cycle d'algorithme RC5 fonctionne sur un bloc de données de 64 -32- bits et une valeur de clé stockée dans Sil et Si2, qui sont des constantes à l'intérieur de chaque élément de traitement et qui dépendent uniquement du cycle et de la clé. Pour chiffrer les données, un bloc d'entrée de 64 bits est divisé en deux mots de 32 bits qui sont ensuite stockés aux emplacements A et B dans la mémoire voisine inférieure; le bloc de sortie doit être inscrit dans A_supérieur et Bsupérieur, dans la mémoire voisine supérieure. Voici un exemple de cycle d'algorithme de chiffrement RC5 Boucle: load rl, A xor ri, B roi rl, B add rl, Sil store rl, A next load r2, B xor r2, r2, r l rol r2, r2, rl add r2, Si2 store r2, B next sync Loop Chaque cycle nécessite onze cycles d'horloge. Si la puce de chiffrement est conçue à l'aide d'un processus logique pouvant fonctionner jusqu'à 400 MHz, 36 millions de blocs peuvent alors être chiffrés par seconde, ou 288 Mo/s en mode dictionnaire. Si nous supposons douze cycles (un cas typique pour le modèle RC5), comparativement à un processeur central conventionnel fonctionnant à la même vitesse d'horloge, l'exécution simultanée de plusieurs éléments de traitement selon le mode de réalisation de la présente invention donne lieu à une amélioration du rendement douze fois supérieure au logiciel conventionnel. L'algorithme de bloc IDEA est l'un des plus sûrs; sa structure est substantiellement plus complexe. Il fonctionne à l'aide de blocs de texte en clair -33- de 64 bits. Une clé de 128 bits est utilisée. Le même algorithme sert à la fois pour le chiffrement et le déchiffrement. La principale philosophie de l'algorithme est de mélanger les opérations des différents groupes algébriques, comme la disjonction, l'addition modulo 216 et la multiplication modulo 216 +1. Ces opérations fonctionnement habituellement sur des blocs de 16 bits. Par conséquent, le modèle IDEA utilise à la fois la multiplication et l'addition modulaires, qui sont des opérations coûteuses en logiciel. La multiplication est compliquée par la façon dont IDEA traite le zéro: dans une multiplication, un zéro est interprété comme (- 1) modulo 65537. En supposant que la valeur 65537 a été préalablement chargée dans le registre r8 de la pile de l'élément de traitement et que le registre rO contient zéro, la macro de multiplication suivante est présenté à titre d'exemple: MACRO MMULT (A, B, RESULT) cbra A = = rO, LI load RESULT, #l sub RESULT, B, RESULT jump L2 LI: cbra B == rO, L3 load RESULT, #l sub RESULT, A, RESULT jump L2 L3: mulm A, B, RESULT, r8 andi #OxFFFF, RESULT L2: ENDMACRO Chaque cycle d'IDEA se compose de multiplications modulaires, d'additions modulaires et de disjonctions. La clé de 128 bits est segmentée en sous-clés. La sous-clé de chaque élément de traitement est une fonction unique de la clé et de -34- l'élément de traitement et, par conséquent, peut être calculée à l'avance et mémorisée dans l'élément de traitement. L'entrée de texte en clair dans IDEA comprend quatre sous- blocs de 16 bits, de-Xl à X4, comme nous l'avons déjà indiqué. Chaque cycle utilise six sous-clés, de K1 à K6, et peut être codé de la façon suivante Boucle: load rl, X1 load r9, K1 MMULT rl, r9, rl load r2, X2 load r9, K2 MMULT r2, r9, r2 load r3, X3 load r9, K3 MMULT r3, r9, r3 load r4, K4 load r9, K4 MMULT r4, r9, r4 xor r5, rl, r3 xor r6, r2, r4 load r9, K5 MMULT r5, r9, r5 load r6, r5 add r6, r5 and r6, #OxFFFF load r9, K6 MMULT r6, r9, r6 add r5, r6 and r5, #OxFFFF xor rl, r6, rl xor r3, r6, r3 xor r2, r5, r2 xor r4, r3, r4 store rl, xl next store r2, x3 next store r3, x2_next store r4, x4 next -35- sync Loop Puisque le modèle IDEA a huit cycles, la mise en oeuvre du matériel de la puce de chiffrement selon le mode de réalisation de la présente invention accélère l'exécution par un facteur de huit ou plus. Une accélération supplémentaire est fournie par l'instruction de multiplication modulaire qui n'est pas disponible dans la plupart des microprocesseurs. Le code ci-dessus requiert environ 50 cycles d'horloge pour exécuter un cycle. À 400 MHz, la puce de chiffrement peut chiffrer, à l'aide d'IDEA, à une vitesse de 64 Mo/s, ce qui est environ trois fois plus rapide qu'une application de matériel de 25 MHz mise au point à l'Université ETH de Zurich. La norme de chiffrement de données DES a été conçue, à l'origine, pour la mise en oeuvre du matériel; elle est donc la plus difficile à appliquer au logiciel. Néanmoins, elle peut facilement être codée dans la puce de chiffrement, selon le mode de réalisation de la présente invention. Comme les deux algorithmes précédents, le système DES est aussi un chiffrement par bloc de données dans des blocs de 64 bits. Un bloc de 64 bits de texte en clair est la donnée d'entrée et un bloc de texte chiffré de 64 bits est la donnée de sortie. Ici encore, le chiffrement et le déchiffrement utilisent le même algorithme, faisant de DES un algorithme symétrique. DES crée des sous-clés à partir d'une clé unique, dans ce cas-ci 56 bits. Les sous-clés sont une fonction de l'élément de traitement et de la clé de 56 bits; elles peuvent donc être calculées à l'avance. Le concept de base de DES, comme le montre la figure 14, comprend une substitution suivie d'une permutation sur le texte fondé sur la clé. Les opérations suivantes constituent la base de DES: Expansion: le bloc de 64 bits est divisé en deux pièces de 32 bits 108 et 110. Une pièce n'est pas affectée par le chiffrement. (Les pièces sont -36- utilisées tous les deux cycles). La pièce touchée est divisée en huit groupes de quatre bits. Chaque groupe est étendu en copiant les deux bits qui lui sont adjacents. * Chaque groupe étendu est disjoncté à 112 à l'aide d'une sous-clé. * Le résultat de six bits de la disjonction est utilisé pour indexer une entrée de 64 x une table de validation de 4 bits 114 appelée boîte-S. Chacun des huit groupes utilise sa propre boite-S. * Les résultats des boîtes-S sont permutés à 116: les bits sont brouillés. Huit résultats produisent 32 bits. * Le résultat de 32 bits est disjoncté à 118 avec l'autre moitié de 32 bits du bloc. Les opérations peuvent être codées de la façon suivante: l'expansion est effectuée en copiant le mot d'entrée et en masquant les bits pour qu'il y ait deux mots: le premier représentant les entrées paires dans les boîtes-S et le deuxième représentant les entrées impaires dans les boîtes-S. Les deux mots sont disjonctés à l'aide de l'information sur la clé. On utilise le résultat pour indexer la table de consultation de la boîte-S. Dans la boîte-S, les données sont permutées au préalable, afin que les sorties de la boîte-S soient des données de 32 bits. La valeur finale est la logique OU de toutes les composantes. Voici un échantillon de code Boucle: load rl,A load r2,B load r3,r2 store r2, A next and r2, #oxF9F9F9F9 and r3, #Ox9F9F9F9F xor r2, K1 xor r3, K2 [8S + t-] ' J Jo Júxo# 't, pue LZ# 'tJ JaO ZJ 't. p8oI [LS + ti] ' Y Jo J;xo# 'ta pue úZ# 'tbi 1o. úa '4t, pcol [9S + til] 'i JO Júxo# '.i pue 61# 'ti JO-' Zi 't' peoI [S + t.] '.i Jo JúXO# 't. puur Il# 'ta loi úJ 'ti Pcol [ltS + til] 'Y Jo Júxo# 'tl pUe i # 'tJ JIJI z. 'ta pcoO [úS + tii] 'i Jo Júxo# 'ti pue L# 'ti 10o úJ 'ti peo [zs + ti] ' JJo Júxo# 't. pue ú# 'ti Joi Z. 'ti pEOj [IS + tii] 'J JO Júxo# 't. pue I# 'ti 1oiO új 'ti, PvoI oi 'ça proi 6 99L-zú-L 6 1 gLLZ -38- xor rS, rl, r5 store r5,Bnext sync Loop Cet échantillon de code requiert 44 cycles d'horloge pour exécuter un cycle. À 400 MHz, on peut atteindre un débit de données de 72 Mo/s. Ce débit se compare favorablement à celui des applications des systèmes DES disponibles au milieu des années quatre-vingt-dix, qui encodait des données à des débits variant de 1 à 35 Mo/s. Le système VM007 de VLSI Technology chiffre des données à un débit pouvant atteindre 200 Mo/s. Dans chacun des cas susmentionnés, le rendement s'est avéré beaucoup plus rapide que dans le cas d'un logiciel appliqué à un processeur central conventionnel, mais plus lent que dans le cas d'équipement spécialisé. La présente invention offre un avantage par rapport aux applications de matériel: la puce de chiffrement est programmable et peut s'appliquer à n'importe quel algorithme, y compris ceux qui n'ont pas encore été créés. Bien qu'aucun exemple d'algorithme à clé publique particulier n'ait été donné, il est à noter que des améliorations semblables aux méthodes existantes résulteront de l'utilisation des techniques discutées dans le mode de réalisation de la présente invention. ÉQUIVALENTS Bien que nous ayons présenté et décrit cette invention en faisant référence aux modes de réalisation préférés, les spécialistes du domaine comprendront que diverses modifications peuvent être apportées à la forme et aux détails de l'invention sans s'éloigner de l'esprit et de la portée de l'invention définie dans les revendications annexées. Les spécialistes du domaine reconnaîtront ou seront en mesure d'évaluer, à l'aide de l'expérimentation usuelle, de nombreux équivalents aux modes de réalisation particuliers de l'invention décrite dans le présent -39- document. Ces équivalents devraient faire partie de la portée des revendications. -40- Revendications: 1. Un dispositif de chiffrement électronique comprenant, sur une puce unique, un réseau d'éléments de traitement, chaque élément comprenant: une mémoire d'instructions pour le stockage d'un cycle d'algorithme de chiffrement, le cycle comprenant une séquence d'instructions; un processeur pour l'application du cycle de la mémoire d'instructions; le stockage de données pour mémoriser les opérandes de données de chiffrement et les données chiffrées résultant de l'application du cycle; des éléments de traitement du réseau, chacun appliquant un des cycles et transmettant les résultats aux éléments de traitement successifs, de sorte que le réseau d'éléments de traitement applique les cycles successifs de l'algorithme de chiffrement dans un pipeline d'éléments de traitement. 2. Un dispositif de chiffrement électronique selon la revendication 1, o le stockage de données comprend des données communes aux éléments de traitement adjacents de la série linéaire pour la transmission de données entre les éléments de traitement adjacents de la série linéaire. 3. Un dispositif de chiffrement électronique selon la revendication 2, o chaque élément de traitement comprend une unité de commande et une unité arithmétique et logique; l'unité de commande, la mémoire d'instructions et le stockage de données étant reliés à un bus de données d'éléments de traitement local; le bus de données locales étant segmenté en deux parties indépendantes par un commutateur; l'unité de commande et la mémoire d'instructions étant reliées à l'un des segments, et l'unité arithmétique et logique et le stockage de données étant reliés à l'autre segment. -41- 4. Un dispositif de chiffrement électronique selon la revendication 2, o chaque élément de traitement comprend une unité de commande et une unité arithmétique et logique; l'unité de commande, la mémoire d'instructions, la mémoire des données locales et le stockage des données communes étant reliés à un bus d'éléments de traitement local; le bus local étant divisé par un commutateur en un segment local du bus d'instructions reliant la mémoire d'instructions à l'unité de commande, et un segment local du bus de données reliant l'unité arithmétique et logique, la mémoire des données locales et le stockage de données communes; le commutateur permet l'utilisation simultanée indépendante des deux segments de bus locaux ou une communication entre les deux segments de bus. 5. Un dispositif de chiffrement électronique selon la revendication 4, o chaque élément de traitement comprend également un multiplicateur pour l'exécution de multiplications à l'intérieur de l'élément de traitement. 6. Un dispositif de chiffrement électronique selon la revendication 2 o, durant l'application de l'algorithme de chiffrement, chaque élément de traitement dans le pipeline inscrit les données résultantes dans le stockage de données communes à l'élément de traitement subséquent pour un accès direct par l'élément de traitement subséquent. 7. Un dispositif de chiffrement électronique selon la revendication 2, o le stockage des données communes des éléments de traitement comprennent des mémoires communes à double accès entre les éléments de traitement adjacents de la série linéaire pour le transfert de données entre les éléments de traitement adjacents de la série linéaire. -42- 8. Un dispositif de chiffrement électronique selon la revendication 7, o chaque processeur comprend une unité de commande et une unité arithmétique et logique; l'unité de:commande, l'unité arithmétique et logique, la mémoire d'instructions, la mémoire des données locales et le stockage des données communes étant reliés à un bus local de données d'éléments de traitement; le bus de données locales étant divisé en deux segments indépendants par un commutateur; l'unité de commande et la mémoire d'instructions étant reliées à l'un des segments, et l'unité arithmétique et logique, la mémoire des données locales et le stockage des données communes étant reliés à l'autre segment. 9. Un dispositif de chiffrement électronique selon la revendication 1, o chaque élément de traitement comprend un multiplicateur pour l'exécution de multiplications à l'intérieur de l'élément de traitement. 10. Un dispositif de chiffrement électronique selon la revendication 9, o les multiplicateurs des éléments de traitement multiples sont adaptés à l'enchaînement comme segments d'un multiplicateur plus grand. 11. Un dispositif de chiffrement électronique selon la revendication 10, o chaque multiplicateur comprend des additionneurs de produit partiel ayant des circuits de sélection d'entrée pour la sélection d'une première série de données quand il fonctionne comme multiplicateur individuel, et une deuxième série de données, y compris des données provenant d'éléments de traitement adjacents, quand il est enchaîné. 12. Un dispositif de chiffrement électronique selon la revendication 1, o -43- chaque processeur comprend une unité de commande et une unité arithmétique et logique; l'unité de commande, l'unité arithmétique et logique, la mémoire d'instructions, la mémoire de données locales et le stockage de données communes étant reliés à un bus local de données des éléments de traitement; le bus de données locales étant divisé en deux segments indépendants par un commutateur; l'unité de commande et la mémoire d'instructions étant reliées à l'un des segments et l'unité arithmétique et logique, la mémoire de données locales et le stockage de données communes étant reliés à l'autre segment. 13. Un dispositif de chiffrement électronique selon la revendication 1, qui comprend également une mémoire vive globale et un bus global à travers lequel les données sont transmises entre la mémoire vive globale et le stockage des données des éléments de traitement. 14. Un dispositif de chiffrement électronique selon la revendication 13, qui comprend également un processeur central couplé au bus global pour le traitement des mots de données plus grands que les mots de données traités par les éléments de traitement. 15. Un dispositif de chiffrement électronique selon la revendication 14, o chaque élément de traitement comprend également un multiplicateur pour l'exécution de multiplications à l'intérieur de l'élément de traitement. 16. Un dispositif de chiffrement électronique selon la revendication 15, o les multiplicateurs des éléments de traitement multiples sont adaptés à l'enchaînement comme segments d'un multiplicateur plus grand. -44- 17. Un dispositif de chiffrement électronique selon la revendication 16, o chaque multiplicateur comprend des additionneurs de produit partiel dotés de circuits de sélection de données pour sélectionner une première série de données quand il fonctionne comme multiplicateur individuel, et une deuxième série de données, y compris les données provenant des éléments de traitement adjacents, quand il est enchaîné. 18. Un dispositif de chiffrement électronique selon la revendication 13, o le processeur central comprend un additionneur comportant: des segments d'additionneur multiple, chacun des segments de l'additionneur multiple ayant une sortie de report et une sortie de somme; chacun des segments de l'additionneur multiple traitant un segment de chacun des deux opérandes; des sélecteurs de report pour sélectionner les sorties de report comme entrées de report aux segments de l'additionneur successifs, pour les cycles d'horloge successifs. du moment que n'importe quel report résulte en un cycle d'additionneur; et des sélecteurs d'opérande pour sélectionner chaque sortie de somme comme entrée d'opérande au même segment de l'additionneur pour les cycles d'horloge successifs, du moment que n'importe quel report résulte en un cycle d'additionneur. 19. Un dispositif de chiffrement électronique selon la revendication 1, o chaque processeur de chaque élément de traitement exécute un ajustement modulo pour calculer M mod N. 20. Un dispositif de chiffrement électronique selon la revendication 1, o -45- chaque processeur de chaque élément de traitement exécute une addition ou une soustraction modulo pour calculer A + B mod N. 21. Un dispositif de chiffrement électronique selon la revendication 1, o chaque processeur de chaque élément de traitement exécute une multiplication modulo pour calculer A x B mod N. 22. Un dispositif de chiffrement électronique selon la revendication 1, o le dispositif de chiffrement comprend également un additionneur comportant: des segments d'additionneur multiple, chacun des segments de l'additionneur multiple comportant une sortie de report et une sortie de somme; chacun des segments de l'additionneur multiple traitant un segment de chacun des deux opérandes; des sélecteurs de report pour sélectionner les sorties de report comme entrées de report des segments d'additionneur successif pour les cycles d'horloge successifs, du moment que n'importe quel report résulte en un cycle d'additionneur; des sélecteurs d'opérande pour sélectionner chaque sortie de somme comme entrée d'opérande du même segment d'additionneur pour les cycles d'horloge successifs, du moment que n'importe quel report résulte en un cycle d'additionneur. 23. Un dispositif de chiffrement électronique comprenant, sur une puce unique, une série linéaire d'éléments de traitement, chaque élément de traitement comportant: une mémoire d'instructions pour stocker le code requis pour appliquer au moins un cycle d'algorithme de chiffrement; -46un processeur pour traiter le cycle de la mémoire d'instructions; une mémoire de données locales; un stockage de données communes aux deux éléments de traitement adjacents; des éléments de traitement de la série linéaire, chacun appliquant un des cycles et transmettant les résultats aux éléments de traitement successifs, de sorte que la série linéaire des éléments de traitement traite les cycles successifs de l'algorithme de chiffrement dans un pipeline d'élément de traitement. 24. Un dispositif de traitement électronique selon la revendication 23, o, durant l'application de l'algorithme de chiffrement, chaque élément de traitement dans le pipeline inscrit les données résultantes dans la mémoire de données communes à l'élément de traitement subséquent pour l'accès direct par l'élément de traitement subséquent. 25. Un système de traitement de données de chiffrement comportant une série linéaire d'éléments de traitement, chaque élément de traitement comportant: une mémoire d'instructions; un processeur pour les instructions de traitement de la mémoire d'instructions; une mémoire de données; les mémoires de données des éléments de traitement de la série linéaire comprenant les mémoires à double accès communes aux éléments de traitement adjacents pour la transmission de données entre les éléments de traitement adjacents de la série linéaire. -47- 26. Un système de chiffrement électronique selon la revendication 25, o chaque processeur comprend une unité de commande et une unité arithmétique et logique; l'unité de, commande, l'unité arithmétique et logique, la mémoire d'instructions et les mémoires de données des éléments de traitement étant reliés au bus local de données des éléments de traitement; le bus de données locales étant segmenté en deux parties indépendantes par un commutateur; l'unité de commande et la mémoire d'instructions étant reliées à un des segments, et l'unité arithmétique et logique et les mémoires de données locales et partagées étant reliées à l'autre segment. 27. Un système de chiffrement électronique selon la revendication 25, o chaque élément de traitement comprend également un multiplicateur pour exécuter des multiplications à l'intérieur de l'élément de traitement. 28. Un système de chiffrement électronique selon la revendication 27, o les multiplicateurs des éléments de traitement multiples sont adaptés à l'enchaînement comme segments d'un multiplicateur plus grand. 29. Un système de chiffrement électronique selon la revendication 28, o chaque multiplicateur comporte des additionneurs de produit partiels dotés de circuits de sélection d'entrée pour la sélection d'une première série de données quand il fonctionne comme multiplicateur individuel, et d'une deuxième série de données, y compris les données provenant d'éléments de traitement adjacents, quand il est enchaîné. 30. Un système de chiffrement électronique selon la revendication 25, qui -48- comprend aussi une mémoire vive globale et un bus global à travers lequel les données sont transmises entre la mémoire vive globale et les mémoires de données des éléments de traitement. 31. Un système de chiffrement électronique selon la revendication 30, qui comprend également un processeur central couplé au bus global pour le traitement de mots de données qui sont plus grands que les mots de données traités par les éléments de traitement. 32. Un système de chiffrement électronique selon la revendication 31, qui comprend également un multiplicateur pour l'exécution de multiplications à l'intérieur de l'élément de traitement. 33. Un système de chiffrement électronique selon la revendication 32, o les multiplicateurs des éléments de traitement multiples sont adaptés à l'enchaînement comme segments d'un multiplicateur plus grand. 34. Un système de chiffrement électronique selon la revendication 33, o chaque multiplicateur comprend des additionneurs de produit partiel dotés de circuits de sélection de données d'entrée pour sélectionner une première série de données quand il fonctionne comme multiplicateur individuel, et une deuxième série de données, y compris les données provenant d'éléments de traitement adjacents, quand il est enchaîné. 35. Un système de chiffrement électronique selon la revendication 31, o le processeur central comprend un additionneur comportant: des segments d'additionneur multiple, chacun des segments de -49- l'additionneur multiple ayant une sortie de report et une sortie de somme, et chacun des segments de l'additionneur multiple traitant un segment de chacun des deux opérandes; des sélecteurs de report pour sélectionner les sorties de report comme entrées de report pour les segments d'additionneur successif et pour les cycles d'horloge successifs, du moment que n'importe quel report résulte en un cycle d'additionneur; des sélecteurs d'opérande pour sélectionner chaque sortie de somme comme entrées de report pour le même segment d'additionneur et pour les cycles d'horloge successifs. du moment que n'importe quel report résulte en un cycle d'additionneur. 36. Un système de chiffrement électronique selon la revendication 25, o chaque processeur de chaque élément de traitement exécute un ajustement modulo pour calculer M mod N. 37. Un système de chiffrement électronique selon la revendication 25, o chaque processeur de chaque élément de traitement exécute une addition ou une soustraction modulo pour calculer A + B mod N. 38. Un système de chiffrement électronique selon la revendication 25, o chaque processeur de chaque élément de traitement exécute une multiplication modulo pour calculer A x B mod N. 39. Un système de chiffrement électronique selon la revendication 25, o le dispositif de chiffrement comprend également un additionneur comportant: des segments d'additionneur multiple, chacun des segments de -50l'additionneur multiple comportant une sortie de report et une sortie de somme, et chacun des segments de l'additionneur multiple traitant un segment des chacun des deux opérandes; des sélecteurs de report pour sélectionner les sorties de report comme entrées de report pour les segments de l'additionneur successif et pour les cycles d'horloge successifs, du moment que n'importe quel report résulte en un cycle d'additionneur; des sélecteurs d'opérande pour sélectionner chaque sortie de somme comme une entrée d'opérande pour le même segment d'additionneur et pour les cycles d'horloge successifs, du moment que n'importe quel report résulte en un cycle d'additionneur. 40. Un dispositif de traitement électronique selon la revendication 25, o, durant l'application de l'algorithme de chiffrement, chaque élément de traitement dans le pipeline inscrit les données résultantes dans la mémoire des données communes à l'élément de traitement subséquent pour l'accès direct par l'élément de traitement subséquent. 41. Un circuit multiplicateur comportant une pluralité de segments multiplicateurs, chacun recevant des mots d'opérande d'une première longueur; des sélecteurs d'entrée qui sélectionnent une première série de données lorsque les segments multiplicateurs fonctionnent comme multiplicateurs individuels, et une deuxième série de données pour enchaîner les segments multiplicateurs en un multiplicateur plus vaste fonctionnant sur des opérandes de mots d'une deuxième longueur. -51- 42. Un multiplicateur selon la revendication 41, o chaque segment de multiplicateur comprend des additionneurs de produits partiels. 43. Un additionneur comportant des segments d'additionneur multiple, chacun ayant une sortie de report et une sortie de somme, et chacun des segments de l'additionneur traitant un segment de chacun des deux opérandes; des sélecteurs de report pour sélectionner les sorties de report comme entrées de report pour les segments d'additionneur successif et pour les cycles d'horloge successifs, du moment que n'importe quel report résulte en un cycle d'additionneur; des sélecteurs d'opérande pour sélectionner chaque sortie de somme comme des entrées d'un opérande pour le même segment d'additionneur et pour les cycles d'horloge successifs, du moment que n'importe quel report résulte en un cycle d'additionneur. 44. Un dispositif de chiffrement électronique comprenant, sur une puce unique: une série linéaire d'éléments de traitement, chacun comportant une zone d'instructions, un stockage de données et un processeur qui traite une séquence d'instructions de la zone d'instructions pour traiter des mots de données d'une première longueur, le stockage de données d'éléments de traitement, y compris les mémoires à double accès communes aux éléments de traitement adjacents pour le transfert de données entre les éléments de traitement adjacents de la série, les éléments de traitement de la série linéaire ayant stocké dans leurs zones d'instructions des cycles respectifs d'un algorithme de chiffrement et transmettant les résultats des cycles aux éléments de traitement successifs, de sorte que la série linéaire des éléments -52- de traitement traite les cycles successifs de l'algorithme de chiffrement dans un pipeline d'éléments de traitement; une mémoire vive globale; un bus global auquel les données sont transmises entre la mémoire vive globale et les mémoires de données d'éléments de traitement; un processeur de chiffrement à clé publique traitant des mots de données d'une deuxième longueur équivalant au moins à un ordre de longueur supérieur à la première longueur; le processeur à clé publique ayant accès à la mémoire vive globale en longueurs de mots de la deuxième longueur. 45. Un dispositif de chiffrement électronique comprenant, sur une puce unique, un réseau d'éléments de traitement, chaque élément de traitement comportant: des moyens de mémoire d'instructions pour stocker un cycle d'algorithme de chiffrement; des moyens de processeur pour appliquer le cycle de la mémoire d'instructions; des moyens de stockage de données pour stocker des opérandes de données de chiffrement et des données chiffrées résultant de l'application du cycle. 46. Un dispositif de chiffrement électronique selon la revendication 45, o les moyens de stockage de données comportent une portion commune aux éléments de traitement adjacents de la série linéaire pour la transmission de données entre les éléments de traitement adjacents de la série linéaire. 47. Un dispositif de chiffrement électronique selon la revendication 46, qui 2778519 9 -53- comporte des moyens de mémoire vive globale et des moyens de bus global à travers lequel les données sont transmises entre les moyens de la mémoire vive globale et les moyens de stockage des données des éléments de traitement. 48. Un dispositif de chiffrement électronique selon la revendication 47, qui comprend également des moyens de traitement central couplés aux moyens de bus global pour le traitement des mots de données qui sont plus vastes que les mots de données traités par les éléments de traitement. 49. Une méthode de chiffrement comprenant: un circuit électronique sur une puce unique, recevant les données devant être chiffrées; l'application des données à un pipeline d'éléments de traitement des données sur la puce. chaque élément de traitement traitant un cycle de chiffrement et transmettant les résultats aux éléments de traitement successifs, de sorte que les éléments de traitement appliquent les cycles successifs de l'algorithme de chiffrement dans le pipeline d'un élément de traitement. 50. Une méthode selon la revendication 49, o les résultats sont transmis aux éléments de traitement successifs à travers la mémoire commune. 51. Une méthode selon la revendication 50, qui comprend aussi le traitement des algorithmes de chiffrement sur une puce dans un processeur central couplé aux éléments de traitement à travers un bus global, le processeur central traitant les mots de données plus vastes que les mots de données -54- traités par les éléments de traitement. 52. Une méthode selon la revendication 49, qui comprend également le traitement d'algorithmes de chiffrement sur une puce dans un processeur central couplé aux éléments de traitement à travers un bus global, le processeur central traitant les mots de données plus vastes que les mots de données traités par les éléments de traitement.