FR 2830952 A1 20030418 FR 0113117 A 20011011 Générateur d'aléa perfectionné L'invention concerne la génération d'aléas par des moyens informatiques, notamment pour la cryptographie. Des dispositifs pour générer des aléas se présentent sous forme d'ordinateurs équipés d'un processeur, de mémoires et de périphériques tels qu'un écran, des organes de saisie (clavier, souris), une carte son, une carte graphique, ou encore une carte d'accès à un réseau distant. Les échanges du processeur avec ces périphériques, généralement via une carte mère et une mémoire vive, s'effectuent par voie d'interruptions. Dans des dispositifs connus, des générateurs d'aléas comprennent un module comportant des instructions pour détecter les interruptions et effectuer une mesure de temps entre ces interruptions. Le générateur d'aléa tire de cette mesure de temps une expression aléatoire puisque, dans les ordinateurs conventionnels, il est rare qu'un processeur coopère avec les mêmes périphériques, régulièrement suivant une même séquence. Même si de tels générateurs d'aléas sont suffisamment fiables pour certaines applications cryptographiques, ils présentent l'inconvénient d'être lents puisque la cadence de génération de l'aléa dépend des opérations effectuées par un utilisateur. De plus, ils ne sont pas complètement inviolables puisque l'aléa provient de phénomènes physiques externes. L'aléa reste déterminable, même s'il faut des moyens très lourds pour le déterminer. La présente invention vient améliorer la situation. Elle propose à cet effet un ordinateur comprenant : - un processeur, susceptible d'interagir avec des périphériques par voie d'interruptions, et - un générateur d'aléa, opérant par mesure de temps sur des séquences d'événements, liées à des interruptions. Selon une caractéristique de l'invention, le générateur d'aléa effectue la mesure de temps sur des séquences d'instructions dont la durée d'exécution dépend au moins en partie d'états internes du processeur, non directement accessibles à l'utilisateur et qui sont modifiés par des interruptions. Les états internes du processeur concernent préférentiellement des états volatiles non-architecturaux, tels que les états39 : - du cache de données de premier niveau, - du cache de second niveau, - du cache d'instructions, - de la mémoire tampon d'écriture, - de la table de prédiction de branchement, - du compteur de cycle. Typiquement, le compteur de cycles incrémente sa valeur courante à chaque cycle. Les autres éléments ci-avant comprennent des mémoires dont les contenus ne peuvent être lus que de manière indirecte. Le terme "état non-architectural" s'oppose au terme"état architectural"qui concerne le contenu des mémoires de l'ordinateur (mémoire vive, mémoire morte), le contenu des registres et le compteur de programme (ou compteur ordinal), qui restent accessibles et peuvent être manipulés par un jeu d'instructions d'un programme approprié. Dans une réalisation préférée, le générateur d'aléa effectue la mesure de temps à partir du compteur de cycle que comprend le processeur. En variante, d'autres compteurs peuvent être utilisés, notamment des compteurs d'événements tels que des compteurs de défauts sur les caches ou des compteurs de défauts de prédictions de branchement. Avantageusement, le générateur d'aléa, dans l'ordinateur de l'invention, comporte un module exécutant des instructions pour modifier une partie au moins des états internes du processeur en y accédant. A ce titre, ce module est un moyen important pour mettre en oeuvre la présente invention. Le module peut se présenter sous la forme d'un produit programme d'ordinateur capable de commander le processeur pour effectuer une mesure de temps dont la durée d'exécution dépend au moins en partie d'états internes du processeur, non directement accessibles à l'utilisateur et qui sont modifiés par des interruptions. Préférentiellement, le module comprend une instruction pour déclarer une table de taille mémoire choisie au moins égale à la capacité d'une mémoire cache interne du processeur, ainsi qu'un pointeur dans la table. Dans une réalisation, le processeur comprend une mémoire cache de premier niveau et une mémoire cache de second niveau, volatiles, et la taille mémoire de la table est choisie supérieure à la capacité mémoire du cache de premier niveau, de manière à adresser le cache de premier niveau ou le cache de second niveau. En complément ou en variante, le processeur comprend une table de prédiction de branchement, de contenu volatile, les états internes précités du processeur concernant en outre des adresses de la table de prédiction. Avantageusement, le module comprend une instruction de test de la valeur du pointeur, de manière à modifier le contenu de la table de prédiction de branchement. Préférentiellement, le test porte sur un bit de poids fort pour exercer la table de prédiction de branchement. Avantageusement, le module comprend au moins une instruction de lecture d'une valeur du compteur de cycle, et le générateur d'aléa est agencé pour fournir une expression aléatoire à partir d'une combinaison de la valeur lue du pointeur et de la valeur du compteur de cycle, ce qui permet d'additionner l'aléa généré. Dans une réalisation avantageuse, le générateur d'aléa est agencé pour être mis en service en permanence, avec une priorité de bas niveau. Avantageusement, le module comporte une boucle d'instructions comprenant une mise à jour de la table avec l'attribution d'une valeur fonction de l'expression aléatoire, en vue de propager un aléa dans la table. Préférentiellement, le module est agencé pour réitérer la boucle d'instructions un nombre de fois choisi pour saturer le cache d'instructions du processeur. Pour adresser la mémoire tampon d'indication d'adresses, volatile, que comprend le processeur dans une réalisation, le module comprend avantageusement une instruction pour déclarer une seconde table de taille mémoire choisie au moins égale à la capacité de la mémoire tampon, ainsi qu'un pointeur dans la seconde table. En variante, le module comprend une instruction pour faire jouer la mémoire tampon de traduction d'adresses en mettant en oeuvre un nombre suffisant de pages dans la première table déclarée. D'autres caractéristiques et avantages de l'invention apparaîtront à l'examen de la description détaillée ci-après, et des dessins annexés sur lesquels : - la figure 1 représente schématiquement un ordinateur conventionnel, équipé de périphériques, - la figure 2 représente schématiquement les interactions entre le processeur et les équipements d'une unité centrale UC de l'ordinateur de la figure 1, - la figure 3 représente les opérations exécutées pendant une routine d'interruption qui sollicite le processeur pP, - la figure 4 représente les interactions entre différents registres et mémoires du processeur, ainsi que le compteur de cycle, et - la figure 5 représente un organigramme d'un traitement pour générer une expression aléatoire, dans un dispositif de l'invention. En annexe sont retranscrites des instructions de programmes (en langage C) que l'ordinateur de l'invention met en oeuvre, dans une réalisation préférée. Le présent document peut contenir des éléments susceptibles d'une protection par droit d'auteur ou copyright. Le titulaire des droits n'a pas d'objection à la reproduction à l'identique par quiconque de ce document de brevet, tel qu'il apparaît dans les dossiers et/ou publications des offices de brevet. Par contre, il réserve pour le reste l'intégralité de ses droits d'auteur et/ou de copyright. La description ci-après, les dessins et l'annexe contiennent, pour l'essentiel, des éléments de caractère certain. Ils pourront donc non seulement servir à mieux faire comprendre la description, mais aussi contribuer à la définition de l'invention, le cas échéant. On se réfère tout d'abord à la figure 1 pour décrire un ordinateur équipé de périphériques. L'ordinateur comprend une unité centrale UC, munie d'un lecteur LEC pour, le cas échéant, lire des données sur un support du type CD-ROM, disquette ou autre, notamment des données d'instructions de programmes. L'ordinateur comprend en outre un écran d'affichage ECR, ainsi que plusieurs organes de saisie tels qu'une souris SOU et un clavier CLA. Dans l'exemple représenté, l'ordinateur est équipé d'une liaison à un réseau distant (flèche COM). Le lecteur LEC, les organes de saisie SOU et CLA, la liaison COM sont des périphériques capables de dialoguer avec le processeur de l'unité centrale par voie d'interruptions. Ils émettent par des liaisons au processeur pP des requêtes d'interruption et le processeur pP effectue les tâches en réponse à ces requêtes. En se référant à la figure 2, l'unité centrale UC comprend, dans l'exemple décrit, un processeur pP capable de coopérer avec une mémoire de travail MT (une mémoire RAM, par exemple), avec une carte mère CM et un disque dur DD. La carte mère CM dialogue avec la plupart des périphériques, tels que la liaison COM (sortie L3) via une carte modem CMO, une carte son CS (sortie L2) et, le cas échéant, l'écran ECR via une carte graphique CG (sortie Ll). Les organes de saisie CLA et SOU sont reliés par les liaisons L4 et L5. Le processeur pP peut dialoguer avec les périphériques tels que les organes de saisie, la liaison COM, le disque dur DD et la carte son CS, par des interruptions. En se référant à la figure 3, un programme PGM est exécuté (flèche EXE). Pendant cette exécution, un périphérique PERI (ou encore une horloge système), requiert une interruption provisoire INT de l'exécution du programme PGM en cours. La routine d'interruption RINT se déroule alors comme suit : - la routine commence d'abord par une sauvegarde SAV1 des registres en cours, dans une mémoire cache CH du processeur et, le cas échéant dans une mémoire vive RAM de l'ordinateur, en cas de dépassement des capacités de la mémoire cache CH ; - la routine se poursuit par l'élaboration effective TRA de la tâche requise par le périphérique, au cours de laquelle seuls les états architecturaux (par exemple le compteur ordinal de programmes) sont sauvegardés ; - et, lorsque la tâche est effectuée, la routine d'interruption se poursuit par une restauration des registres RES par rapport à l'état initial SAV1, puis - par une sauvegarde SAV2 des registres et des états architecturaux qui ont été utilisés pendant l'interruption. A la fin de la routine d'interruption RINT, on retourne (flèche RT) à l'exécution du programme PGM. Dans les techniques de génération d'aléas connues et vérifiant la norme RFC 1750 (IETF, RFC 1750 : Randomness recommendations for secunty, 1994), l'ordinateur comprend un contrôleur d'interrup- tion auquel on accède pour mesurer un écart temporel entre deux interruptions. A partir de l'écart temporel entre différentes interruptions, on construit une expression aléatoire. Cependant, en service, ces interruptions sont requises par des périphériques généralement en fonction de la demande d'un utilisateur. Cette technique présente le désavantage d'être lente puisque la génération de l'expression aléatoire dépend principalement de l'activité de l'utilisateur. De plus, comme l'aléa généré dépend ainsi de conditions physiques externes, il s'agit plutôt d'un"pseudo-aléa", au sens de la référence : Oded Goldreich, Modern Cryptography Probabilistic Proofs and Pseudorandomness. Number 17 in Algorithms and Combinatorics. Springer, 1999. La présente invention propose de procéder autrement. En se référant à la figure 4, le processeur pP, capable de coopérer avec une mémoire de travail MT, comprend dans l'exemple décrit : - une mémoire cache de données CD, - une mémoire cache de second niveau CN2, - une mémoire cache d'instructions CI, - un prédicteur de branchement PB, - une mémoire cache de traduction d'adresses TLB ("Translation Lookaside Buffer"), et - un compteur de cycle CC. Dans l'exemple, l'ordinateur est une station de travail commercialisé par la société SUN (Marque déposée) et le processeur est du type ULTRASPARC II (Marque déposée) à 300 MHz de fréquence d'horloge. Le processeur est mis en oeuvre par le système d'exploitation SOLARIS (Marque déposée). Dans le schéma représenté sur la figure 4, les mémoires volatiles et/ou les états internes volatiles du processeur sont représentés par des traits pleins. Ainsi, les mémoires CI, CD, CN2, ainsi que les tables PB et TLB correspondent à des mémoires qui comprennent des données volatiles relatives à des états internes du processeur. Le compteur de cycle, qui incrémente sa valeur à chaque cycle, correspond à un état interne volatile du processeur. Des unités fonctionnelles UF coopèrent, d'une part, avec la mémoire cache de données CD, pour récupérer et transmettre les données et, d'autre part avec un fichier de registre REG, régulièrement mis à jour. Le prédicteur de branchement PB pilote la mémoire cache d'instructions CI. Pour utiliser ces données d'instructions, un mécanisme matériel appelé décodeur DR traduit et renomme ces données d'instructions. Ces données traduites sont ensuite traitées par des files d'attentes matérielles Q, lesquelles les appliquent aux unités fonctionnelles UF du processeur. La mémoire cache de second niveau CN2 peut stocker des données simples, auquel cas elle coopère avec la mémoire cache de données CD, ou encore des données d'instructions, auquel cas elle coopère avec la mémoire cache d'instructions CI. La mémoire cache de traduction d'adresses TLB peut stocker les adresses physiques des pages d'un processus. Dans l'exemple décrit où le processeur est de type ULTRASPARC II : - la mémoire cache de données de premier niveau CD comprend 16 ko à accès direct (512 secteurs cache à 32 octets) ; - la mémoire cache d'instructions est de 16 ko, avec des blocs caches de 32 octets ; - les caches de second niveau CN2 sont de 1 Mo avec des blocs de 64 octets ; - la table TLB comprend 64 entrées et le demandeur a constaté que pour cent invocations consécutives par le système d'exploitation, le nombre minimum cumulé de déplacements de blocs excède systématiquement 4500 pour les données et 600 pour les instructions ; - le prédicteur de branchement PB a une taille mémoire de 2K entrées de 2 bits. On se réfère maintenant à la figure 5 pour décrire, dans un mode de réalisation préféré, un traitement permettant de générer des expressions aléatoires en utilisant un ordinateur équipé d'un processeur du type représenté sur la figure 4. Le traitement commence par l'initialisation et la déclaration d'une table WALK, à l'étape 10. Préférentiellement, la table WALK est de dimensions correspondant à une taille mémoire deux fois plus grande que la mémoire cache de premier niveau. Le cas échéant, à l'étape 12, une table ARRAY est initialisée et déclarée. Elle est choisie de dimensions mettant en oeuvre une taille mémoire deux fois plus grande que la mémoire pouvant être traduite par le cache de traduction TLB, en vue d'exercer la totalité des entrées du TLB. Le traitement se poursuit en 14 par la lecture d'une donnée de la table WALK, à travers une valeur de pointeur PT. Préférentiellement, à l'étape 14, on conserve en outre l'ancien pointeur lu précédemment dans la boucle pour la mise à jour à l'étape 24, comme on le verra plus loin. Ainsi, en lisant la valeur d'un pointeur dans la table WALK, on met en oeuvre : - soit la mémoire cache de données CD de premier niveau ; - soit la mémoire cache de second niveau CN2 quand la donnée est absente au premier niveau ; - soit la mémoire principale quand la donnée est absente au premier et au deuxième niveau. Comme les dimensions de la table WALK sont deux fois plus grandes, en taille de mémoire, que la mémoire cache de premier niveau CD, la probabilité de présence de la donnée dans le cache de premier niveau est de 1/2 : le temps de la lecture sera différent suivant la présence ou non de la donnée dans le cache. A l'étape 16, un bit de poids fort de la valeur du pointeur PT est testé, dans le but de dépasser la taille de la table WALK et d'exercer plutôt la table de prédiction de branchement PB. Ici, le résultat du test 16 n'a aucune influence sur la suite du traitement et, d'ailleurs, n'est pas pris en compte pour la suite. Cependant, la durée d'exécution du test diffère selon que le test a été bien prédit ou mal prédit. A l'étape 20, on lit la valeur T du compteur de cycles du processeur pP. A l'étape 22, une nouvelle valeur du pointeur PT est attribuée, en fonction de son ancienne valeur et de la valeur courante T du compteur de cycles, lue à l'étape 20. Cette fonction de l'ancienne valeur du pointeur PT et de la valeur T est une combinaison qui, dans une réalisation préférée, correspond à la fonction ou exclusif" (XOR). Cette modification de la valeur du pointeur par un"ou exclusif"avec le compteur de cycles permet d'amplifier l'aléa. Ainsi, un utilisateur qui tenterait d'accéder à la valeur de PT pour reprendre le traitement et obtenir l'expression aléatoire générée ne retrouverait pas les mêmes valeurs puisqu'elles dépendent du compteur de cycles, ce qui renforce avantageusement la sécurité de l'aléa généré. A l'étape 24, la table WALK est mise à jour en y attribuant la valeur du pointeur PT nouvellement définie à l'étape 22. Avantageusement, on propage ainsi l'aléa dans la table WALK, lorsque le traitement aura effectué plusieurs boucles, comme on le verra plus loin. A l'étape 26, on sort une donnée aléatoire RES [i], en fonction de la valeur du pointeur PT établie à l'étape 22. Le traitement se poursuit par une incrémentation (étape 30) de l'indice de boucle i, laquelle est incrémentée à l'étape 30, tant que cette valeur ne dépasse pas le nombre N (étape 28). Avantageusement, le nombre N est choisi en fonction de la taille mémoire du cache d'instructions CI, de manière à le saturer lorsque l'indice de boucle i atteint la valeur N. Ainsi, à chaque boucle d'indice i, on lit en 14 la valeur précédente du pointeur PT, établie à l'étape 22 pour l'indice de boucle précédent et, d'une part, on propage l'aléa progressivement à chaque étape 24, pour tous les indices de boucle, et, d'autre part, on récupère les expressions aléatoires successives RES [i] à l'étape 26. Finalement, lorsque la valeur de l'indice de boucle i atteint la valeur N, on récupère une expression aléatoire Q, à l'étape 32, en fonction des différents aléas RES [1], RES [2],.., RES [N]. Une boucle pour déduire l'expression aléatoire, aussi en fonction d'une valeur de pointeur dans le tableur ARRAY défini à l'étape 12, n'est pas représentée à la figure 5. Bien entendu, l'expression aléatoire RES [i] peut être tirée, à la fois d'une lecture d'un pointeur sur la table WALK et d'une lecture d'un autre pointeur sur la table ARRAY. On se réfère maintenant au traitement retranscrit en annexe, correspondant à des instructions pour un programme informatique, en langage C. Le code est compilé en utilisant le compilateur du système d'exploitation SOLARIS de la société SUN (Marques déposées), avec les options cc-x05-FAST-XARCH = v8PLUS. La fonction "HardTick () " fournit le nombre de cycles écoulés depuis le dernier appel (il s'agit donc d'une différence entre le nombre de cycles actuels et le nombre de cycles lus lors de la consultation précédente). Le signe-correspond à la fonction"ou exclusif" (XOR). Le programme commence par les déclarations : - de la table Walk, - des pointeurs pt, PT et PT2, - de l'indice de boucle i qui est un entier, et - d'une boucle (instruction"loop"de la ligne 1). La table Walk est initialisée par l'instruction short Walk [512*1024], de manière à lui attribuer une taille mémoire de 1 Mo, ce qui correspond à la capacité du cache de second niveau CN2 et qui, en tout état de cause, dépasse la capacité du cache de premier niveau. A la ligne 2, on teste le bit 14 du pointeur pt (4000 en hexadécimal correspondant à 214). Le test sur le bit de poids fort 14 permet de dépasser la taille mémoire allouée à la table Walk et d'exercer ainsi le prédicteur de branchement PB. On incrémente, le cas échéant, une valeur courante X, en fonction du test. De façon analogue, la ligne 5 teste le bit de poids fort 15 du pointeur pt (8000 en hexadécimal correspondant à 215) pour exercer encore le prédicteur de branchement. Les résultats de ces tests, ainsi que la variable courante X, n'ont aucune importance ici. En fait, ces instructions de test sont suivies d'une opération de combinaison"ou exclusif" (signe """aux lignes 4 et 7), faisant intervenir le pointeur pt, en vue d'additionner l'aléa et empêcher un observateur d'accéder à l'expression aléatoire RESULT [i] (correspondant à l'expression aléatoire RES [i] de la figure 5) et à la valeur du pointeur pt, comme on le verra plus loin. A la ligne 3, les bits de poids faible (inférieur à 14) du pointeur pt (3fff en hexadécimal correspondant à 214-1) sont sauvegardés dans le pointeur PT. A la seconde instruction de la ligne 3, le pointeur pt lit ses nouvelles valeurs dans la table. La troisième instruction concerne le pointeur PT2 qui prend aléatoirement ses valeurs aux adresses correspondant aux bits de poids inférieur à 14. Ici, l'opération sur le pointeur PT2 de la ligne 3 a principalement pour but la combinaison "ou exclusif" avec le pointeur pt de la ligne 4 qui suit, de laquelle est tirée l'expression aléatoire RESULT [i]. A la ligne 6, on tire du compteur de cycles du processeur (fonction"HardTick ()") la valeur courante du compteur de cycles, puis on combine cette valeur par"ou exclusif"et décalage circulaire avec une variable T. A la ligne 7, le pointeur pt prend la valeur de la combinaison "ou exclusif" de lui-même avec la variable T, dans le but d'additionner l'aléa, comme décrit ci-avant. Le résultat de cette combinaison est appliqué à la table Walk (ligne 8). En modifiant ainsi la table Walk à la volée, on propage l'aléa dans la table. On incrémente ensuite le compteur de boucle i (ligne 9). Dans l'exemple décrit, 132 autres copies des lignes 2 à 9 du corps de boucle sont présentes, de manière que le volume d'instructions de la boucle (compilée) soit sensiblement égale (de préférence, par valeur inférieure) à la taille du cache d'instruction CI. Dans l'exemple de l'annexe, on remarquera que la table ARRAY de la figure 5 n'a pas été déclarée. On procède autrement ici pour exercer le tampon TLB. A la ligne 11, on fait jouer tout le tampon TLB en mettant en oeuvre les 128 pages dans la table Walk. Avantageusement, ce programme est destiné à être mis en service en permanence dans l'ordinateur de l'invention, avec une priorité d'exécution relativement basse par rapport aux autres tâches du processeur pP. Ainsi, à chaque disponibilité du processeur pP, le programme de l'annexe prend la main pour préparer des expressions aléatoires Q. Il s'interrompt lorsque le processeur est sollicité par une autre application, notamment par voie d'interruptions, auquel cas le contenu des adresses des caches de premier niveau, de second niveau, d'instructions, du tampon TLB, etc, est modifié après l'interruption, ce qui augmente encore l'aléa généré lorsque le programme générateur d'aléas reprend son exécution ensuite. Bien entendu, la présente invention ne se limite pas à la forme de réalisation décrite ci-avant à titre d'exemple ; elle s'étend à d'autres variantes. Ainsi, on comprendra que l'utilisation du compteur de cycles, ci-avant, n'est décrite qu'à titre d'exemple. Dans une variante, on peut utiliser un compteur d'événements, tel que le compteur d'horloge ou autre. Dans le programme retranscrit en annexe, on ne déclare pas une table ARRAY pour exercer le tampon TLB. Bien entendu, cette variante peut être prévue, comme dans le traitement représenté sur la figure 5. Les déclarations et initialisations des tables en début de traitement sont fonction des capacités des mémoires telles que le cache de données de premier niveau, de second niveau, le tampon TLB. La déclaration de ces tables est susceptible d'évoluer en fonction des mémoires utilisées dans le processeur de l'ordinateur selon l'invention. Enfin, dans ce qui précède, le traitement fait intervenir tous les états internes pour les mémoires caches et les prédicteurs de branchements des processeurs actuels. Dans des variantes simplifiées, il peut être prévu de n'utiliser qu'une partie de ces états internes pour générer des expressions aléatoires, au moins un type d'états internes. D'autres états internes non accessibles à l'utilisateur peuvent être aussi exploités (états de différents tampons, etc.). La présente invention vise également le code logiciel qu'elle fait intervenir, tout particulièrement lorsqu'il est mis à disposition sur tout support lisible sur un ordinateur. L'expression"support lisible par ordinateur"couvre un support de stockage, par exemple magnétique ou optique, aussi bien qu'un moyen de transmission, tel qu'un signal numérique ou analogique. ANNEXE short Walk [512 * 1024] ; register short pt, PT, pT2 ; register integer i ; 1 loop { 2 if (pt & 0x4000) X++ ; 3 PT=pt & Ox3fff ; pt=Walk [PT] ; PT2=Walk [PT2 & Ox3fff] ; 4 RESULT[i]=PT2^pt ; 5 if (pt & 0x8000) X++ ; 6 T = ((T#1)^HardTick())^(T#15) ; 7 pt put-T ; 8 Walk [PT] = pt ; 9 i++ ; 10 ** même séquence répétée 132 fois ** 11 X += Walk [ (PT & 127) 12} Revendications 1. Ordinateur comprenant : - un processeur (pP), susceptible d'interagir avec des périphériques par voie d'interruptions, et - un générateur d'aléa, opérant par mesure de temps (T) sur des séquences d'instructions, liées à des interruptions, caractérisé en ce que le générateur d'aléa effectue la mesure de temps sur des séquences d'instructions dont la durée d'exécution dépend au moins en partie d'états internes (CD, CN2, CI, TLB, PB, T) du processeur, non directement accessibles à l'utilisateur et qui sont modifiés par des interruptions. 2. Ordinateur, selon la revendication 1, caractérisé en ce que le générateur d'aléa effectue la mesure de temps (T) à partir au moins d'un compteur de cycle que comprend le processeur. 3. Ordinateur selon l'une des revendications 1 et 2, dans lequel les états internes du processeur incluent des adresses mémoire pour au moins une mémoire cache interne, volatile, du processeur (CD, CN2, CI, TLB), caractérisé en ce que le générateur d'aléa comporte un module comprenant des instructions susceptibles de modifier le contenu de la mémoire cache interne en y accédant. 4. Ordinateur selon la revendication 3, caractérisé en ce que le module comprend une instruction pour déclarer une table (Walk) de taille mémoire choisie au moins égale à la capacité de la mémoire cache interne du processeur, ainsi qu'au moins un pointeur (pt ; PT) pour adresser la table. 5. Ordinateur selon la revendication 4, dans lequel le processeur comprend un cache de premier niveau (CD) et un cache de second niveau (CN2), caractérisé en ce que la taille mémoire de la table (Walk) est choisie supérieure à la capacité mémoire du cache de premier niveau (CD), de manière que la table ne puisse pas être contenue dans le cache de premier niveau. 6. Ordinateur selon l'une des revendications 4 et 5, caractérisé en ce que le module comprend au moins une instruction de lecture de la valeur du pointeur (pt), et en ce que le générateur d'aléa est agencé pour fournir une expression aléatoire (RES [i]) à partir de la valeur lue (pt). 7. Ordinateur selon la revendication 6, prise en combinaison avec la revendication 2, caractérisé en ce que le module comprend au moins une instruction de lecture d'une valeur du compteur de cycle (T), et en ce que le générateur d'aléa est agencé pour fournir une expression aléatoire (RES [i]) à partir d'une combinaison (XOR) de la valeur lue du pointeur (pt) et de la valeur du compteur de cycle (T). 8. Ordinateur selon l'une des revendications précédentes, dans lequel le processeur comprend une table de prédiction de branchement (PB), de contenu volatile, caractérisé en ce que le générateur d'aléa comporte un module comprenant des instructions pour modifier le contenu de la table de prédiction en y accédant. 9. Ordinateur selon la revendication 8, prise en combinaison avec la revendication 6, caractérisé en ce que le module comprend en outre une instruction de test de la valeur du pointeur (pt), de manière à modifier le contenu de la table de prédiction de branchement. 10. Ordinateur selon l'une des revendications précédentes, caractérisé en ce que le générateur d'aléa est agencé pour être mis en service en permanence, avec une priorité de bas niveau. 11. Ordinateur selon la revendication 10, prise en combinaison avec l'une des revendications 6 et 7, caractérisé en ce que le module comporte une boucle d'instructions comprenant une mise à jour de la table avec l'attribution d'une valeur fonction de l'expression aléatoire (PT2pt ; pt"T), en vue de propager un aléa dans la table. 12. Ordinateur selon l'une des revendications précédentes, dans lequel le processeur comprend en outre un cache d'instructions (CI), de contenu volatile, tandis que les états internes du processeur concernent en outre le contenu du cache d'instructions, caractérisé en ce que le générateur d'aléa comporte un module comprenant des instructions pour modifier le contenu du cache d'instructions en y accédant. 13. Ordinateur selon la revendication 12, prise en combinaison avec la revendication 11, caractérisé en ce que le module est agencé pour que la taille de la boucle d'instructions soit sensiblement égale à la taille du cache d'instructions. 14. Ordinateur selon l'une des revendications précédentes, caractérisé en ce que le module comprend une instruction pour déclarer une table (ARRAY) de taille mémoire choisie au moins égale à la capacité de la mémoire cache de traduction d'adresse (TLB), ainsi qu'un pointeur dans la table. 15. Produit programme d'ordinateur, caractérisé en ce qu'il comporte des données d'instructions capables de commander le processeur pour effectuer une mesure de temps dont la durée d'exécution dépend au moins en partie d'états internes du processeur, non directement accessibles à l'utilisateur et qui sont modifiés par des interruptions, et de générer des aléas à partir de ladite mesure.