FR 2721414 A1 19951222 FR 9407325 A 19940615 Générateur de code cuasi-aléatoire L'invention concerne un générateur de code quasi-aléatoire pour l'authentification de cartes personnalisées. De tels générateurs sont utilisés dans des dispositifs électroniques de cryptographie destinés à émettre une séquence d'authentification en direction d'un centre de gestion, après prise en compte d'un mot dit "aléa" émis par ce même centre. Actuellement, certains de ces dispositifs fonctionnent selon une technique dérivée de la technique dite du "sac à dos", consiste à effectuer des tirages pseudo-aléatoires parmi des entiers prédéfinis dits " "incréments", utilisables une seule fois, puis à additionner ces incréments au fur et à mesure de leur tirage. Les techniaues dérivées du "sac à dos" autorisent une utilisation répétée d'un même incrément dans l'addition. Un microprocesseur de commande, préprogrammé, extrait à des restants choisis la somme partielle résultant de cette addition, d'où il extrait un ou plusieurs bits afin d'engendurer dlrectement une séquence d'authentification. Cette génération directe de ia séquence d'authentification représente un inconvénient mateur. En effet, il existe des algorithmes, certes très complexes, qui permettent de retrouver les incréments constituant une somme (choisis dans un ensemble donné avec ou sans répétition), à partir de la seule somme. Dans ces conditions, il n est pas utile de connaître la clé secrète et/ou l'aléa. il est donc clair que dans les dispositifs connus l'élément dans lequel on effectue l'addition des incréments, généralement un registre de mémoire vive, n'évolue pas de façon rloureusement aléatoire. Cette évolution est de type çpseudo-aléatoire, et de pseudo-période plus ou moins longue selon le nombre de bits de codage utilisés pour un incrément. > ns tous les cas, cette pseudo-période est courte devant la f riode limite au-delà de laquelle une évolution peut être nsidèrée comme aléatoire. Pour tenter de remédier à ce problème, certains dispositifs offrent un traitement sur la somme partielle qui consiste en une permutation de bits d'adressage de la mémoire source. Cependant, cet aménagement ne suffit pas. un des buts de la présente invention est de proposer un dispositif dans lequel le résultat de l'addition n'est pas Utilisé directement comme authentifiant, mais comme un résultat intermédiaire servant de source quasi-aléatoire permettant d'une part d'adresser une clé secrète pour fournir les bits de la séquence d'authentification, et d'autre part de faire évaluer de façon quasi-aléatoire une partie au moins des registres de la mémoire. Par définition, on entendra par "quasi-aléatoire", une évolution possédant une période proche de 23, qui est une limite théorique pour des mémoires à registre de 86 bits. Le générateur de code selon l'invention comprend - une mémoire source de N bits, adressable par un mot de q bits, - une mémoire auxiliaire d'incréments, formant table pour p incréments entiers de t bits et adressable par un mot de r bits, - au moins une mémoire vive de z bits, dite mémoire de base, définissant un premier registre, un second registre disjoint ou non du premier registre et un troisième registre à s bits, ledit premier registre définissant des zones à q bits, et ledit second registre définissant des zones à r bits, - au moins de premier, second et troisième moyens de calculs, nuais d'au moins deux entrées et une sortie, aptes à recevoir ;i, chaque entrée le contenu d'une partie au moins de l'une des mémoires, pour réaliser une opération sur leurs contenus, délivrer sur sa sortie le résultat de ladite opération, - des moyens d'accès mémoire munis d'au moins une première entrée pour recevoir des ordres d'adressage de parties au ,,t,lns des mémoires, d'au moins une seconde entrée, pour recevoir le résultat d'une opération réalisée par l'un des moyens de calcul, et d'au moins une première sortie, pour délivrer le contenu d'une partie au moins de l'une des mémoires sur l'une des entrées d'au moins l'un des moyens de calcul, - une logique de cycle apte à recevoir les désignations identiques ou non de deux zones visées respectives des premier et second registres, pour a) solliciter la première entrée des moyens d'accès mémoire, pour extraire le contenu de la zone visée du second registre, b) solliciter les premières et secondes entrées du premier moyen de calcul avec respectivement le contenu de la zone visée, et une partie au moins du contenu du troisième registre, ce qui fournit un premier entier compris entre 0 et p-l, ) solliciter la première entrée des moyens d'accès mémoire pour extraire un incrément dans la mémoire auxiliaire d 'incréments à l'adresse définie par le premier entier, d) solliciter les première et seconde entrées du second moyen de calcul avec respectivement cet incrément et le contenu du troisième registre, ce qui fournit le nouveau contenu du troisième registre, e) solliciter la première entrée des moyens d'accès mémoire pour extraire le contenu de la zone visée du premier registre, f) solliciter les première et seconde entrées du troisième moyen de calcul avec respectivement l'incrément, et le contenu de la zone visée, ce qui fournit un second entier compris entre 0 et N-l, et g) solliciter la seconde entrée des moyens d'accès mémoire pour inscrire l'entier dans la zone visée, - des moyens pour initialiser au moins le contenu des egistres de la mémoire de base, à partir de données d'entrée formant aléa, et - des moyens de commande pour fournir à la logique de cycle les désignations, et pour solliciter répétitivement ladite logique de cycle en sélectionnant à chaque fois au moins une zone visée différente dans les premier et second registres de la mémoire de base. Cela permet de faire évoluer le contenu d'une partie au moins de la mémoire de base de façon sensiblement pseudo-aléatoire, mais déterminable pour une autorité disposant du contenu de la mémoire source, de l'aléa, et du nombre de répétitions effectuées par la logique de cycle. Selon un autre aspect de l'invention, la logique de cycle est en outre agencée pour h) solliciter la première entrée des moyens d'accès mémoire pour extraire une partie du contenu, de longueur r, de la mémoire source, à l'adresse définie par le second entier, i) solliciter la première entrée des moyens d'accès mémoire pour extraire une partie du contenu, de longueur r, d'une zone du premier registre différente de la zone visée, j) solliciter une première et une seconde entrée d'un quatrième moyen de calcul, avec respectivement le contenu, de longueur r, de la mémoire source à l'adresse définie par le deuxième entier, et le contenu, de longueur r, de ladite zone du premier registre différente de la zone visée, ce qui fournit un troisième entier compris entre 0 et p-l, k) solliciter une première et une seconde entrée d'un cinquième moyen de calcul, avec respectivement le troisième entier et le contenu d'une zone du deuxième registre différente de la zone visée, ce qui fournit un quatrième entier compris entre 0 et p-l, et 1) solliciter la seconde entrée des moyens d'accès mémoire pour inscrire le quatrième entier dans ladite zone du deuxième registre différente de la zone visée. Cela permet de faire évoluer le contenu du second registre de façon pseudo-aléatoire, comme une fonction à sens unique, dont les résultats ne permettent pas à eux seuls de reconstituer le contenu de la mémoire source. Selon encore un autre aspect de l'invention, les moyens de commande sont en outre agencés pour extraire au moins un bit de la mémoire source en fonction de parties disjointes ou non du contenu global du second registre, à chaque renouvellement complet dudit contenu. Par ailleurs, lesdits moyens de commande sont en outre agencés pour engendrer une séquence de bits formant séquence d'authentification, chaque bit et sa position dans la séquence étant définis à partir des bits extraits de la mémoire source et d'une partie au moins du contenu global du troisième registre. Ces moyens de commande sont également agencés pour solliciter la logique de cycle pendant une durée déterminée, afin que ladite logique de cycle ne produise pas de bit destiné à engendrer la séquence d'authentification. Dans un mode de réalisation particulièrement avantageux, le premier registre est subdivisé en cinq sous-registres de dix bits chacun, le second registre est subdivisé en cinq sous-registres de quatre bits chacun, le troisième registre est à seize bits, et la mémoire source est une mémoire réinscriptible de type EEPROM à 1024 bits, adressable par des mots de dix bits. Par ailleurs, dans un but de sécurisation, la séquence de bit formant la séquence d'authentification est constituée de 32 bits. 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 est un schéma décrivant une chaîne d'authentification; - la figure 2 schématise l'organisation des mémoires et les liaisons entre les différents éléments du dispositif selon un mode de réalisation de l'invention; - la figure 3 illustre les liaisons entre les différents eléments du dispositif autorisant la réalisation de la première sous-procédure; - la figure 4 est un schéma qui illustre l'enchaînement des étapes de la première sous-procédure; - la figure 5 illustre les liaisons entre les différents éléments du dispositif, lesquelles autorisent la réalisation de la seconde sous-procédure; - la figure 6 est un schéma qui illustre l'enchaînement des étapes de la seconde sous-procédure; - la figure 7 illustre les liaisons, entre les différents éléments du dispositif, lesquelles autorisent la réalisation de la troisième sous-procédure; - la figure 8 est un schéma qui illustre l'enchaînement des étapes de la troisième sous-procédure; et - la figure 9 est un schéma qui illustre l'enchaînement des principales étapes autorisant la réalisation d'une séquence d'authentification. Les dessins annexés sont, pour l'essentiel, de caractère certain. En conséquence, ils font partie intégrante de la description et pourront non seulement servir à compléter celle-ci, mais aussi contribuer à la définition de l'invention, le cas échéant. On se réfère tout d'abord à la figure 1 qui permet de situer le dispositif dans une chaîne complète d'authentification. Un dispositif électronique personnel d'authentification DEPA est un composant électronique, par exemple en silicium, de surface réduite, ce qui permet son incorporation dans une tarte 1, un jeton, etc. Dans toute la description, nous considérerons que le DEPA est logé dans une carte 1, destinée à être lue par un lecteur 2. Bien entendu, tout autre système pourra être envisagé. Une carte 1, contenant le dispositif selon l'invention, est introduite dans un lecteur 2, qui avertit un centre de gestion 3, de la présence de ladite carte 1 dans la chaîne d'authentification. Le centre de gestion 3 renvoie au lecteur 2 un mot, par exemple de soixante-quatre bits, dit "aléa" 4. Le lecteur 2 transmet ensuite cet aléa 4 à ladite carte 1. L'aléa 4 est alors encodé 5 par le dispositif, ce qui lui permet d'engendrer une séquence de bit dite "séquence d'authentification" 6, qui est ensuite envoyée au centre de gestion 3 par l'intermédiaire du lecteur 2. Le centre de gestion 3 est alors apte à autoriser ou non le lecteur 2 à utiliser la carte personnalisée 1, pour effectuer une opération particulière. Il est maintenant fait référence à la figure 2 pour décrire les éléments constituant le dispositif selon l'invention. L'ensemble des dispositifs est piloté par un microprocesseur 10, qui reçoit sur une entrée 10a des informations, et notamment l'aléa 4, en provenance du lecteur 2, dans lequel se trouve logée momentanément la carte personnalisée 1. Le microprocesseur 10 comprend une entrée/sortie 10a pour communiquer avec le lecteur 2, un module d'initialisation 14, et une logique de cycle 13 pour désigner de façon aléatoire des sous-registres de mémoire. Ce microprocesseur 10 est connecté à un bus d'adressage, dit "bus microprocesseur" 11, lui-même connecté par câblage direct à des mémoires vives MB et MSF, des mémoires mortes MI et MS, ainsi qu'à des opérateurs booléens 12-1 à 12-10, ce qui lui permet de dialoguer avec ces mémoires et opérateurs. Le bus microprocesseur 11 est muni - d'une première entrée El, pour recevoir des ordres d'adressage, de parties au moins des mémoires (MS, MI, MB, MSF), - d'une seconde entrée E2, pour recevoir le résultat d'une opération réalisée par l'un des opérateurs booléens 12-1 à 12-10; - d'une première sortie S1, pour délivrer le contenu d'une partie au moins de l'une des mémoires (MS, MI, MB, MSF), sur l'une des entrées d'au moins l'un des opérateurs booléens 12-1 à 12-10, et - d'une seconde sortie S2, pour délivrer la séquence d'authentification 6 au lecteur 2. Le microprocesseur 10 peut ainsi aller chercher le contenu partiel d'une mémoire, pour le transférer dans une autre mémoire, et/ou sur une entrée d'un ou plusieurs opérateurs booléens 12. Les mémoires utilisées peuvent être réparties en quatre groupes différents. e premier groupe est composé d'une mémoire morte (ROM), appelée mémoire auxiliaire d'incréments MI, de 96 bits, numérotés de 0 à 95 en partant du bit de poids le plus fort. Cette mémoire MI est divisée en 16 tranches de six bits chacune, chaque tranche étant adressable par un mot de quatre bits et permettant de stocker un nombre entier. 16 entiers distincts de valeur inférieure à 64 sont ainsi stockés. Le second groupe est composé d'une mémoire morte réinscriptible (EEPROM), divisée en deux mémoires - une mémoire source MS qui renferme une clé secrète personnelle de 1024 bits, numérotés de 0 à 1023, chacun étant adressable par un code de dix bits. Cette clé secrète est propre à la carte 1 dans laquelle elle se trouve implantée. le ne peut pas être lue par une tierce personne, mais est susceptible d'être modifiée en un lieu donné et sécurisé; - une mémoire germe de la séquence émise GS qui renferme l'aléa 4 émis par le centre de gestion 3. Elle a une capacité de 64 bits, et elle peut être divisée en 16 quadruplets de bits, chaque quadruplet étant adressable par un mot de 4 bits. Le troisième groupe est composé de deux mémoires vives (RAM). La première mémoire vive, appelée mémoire de base MB, est composée de quatre-vingt-six bits numérotés de O à 85. Elle se divise en trois registres - un premier registre SS de cinquante bits, numérotés de O à 49, subdivisé en cinq sous-registres SS(j), j=O à 4, de dix bits chacun, adressables par un code de trois bits, chaque bit étant lui-même adressable, soit par un code de quatre bits, soit par un code de six bits; - un second registre RI de vingt bits, numérotés de O à 19, subdivisé en cinq sous-registres RI(i), i=O à 4, de quatre bits chacun, chaque sous-registre RI(i) étant adressable par un mot de quatre bits, chaque bit étant lui-même adressable, soit par un code de deux bits, soit par un code de quatre bits; il peut également être considéré comme deux sous-registres de 10 bits, RIS(O) pour les bits numérotés de O à 9 et RIS(1) pour ceux numérotés de 10 à 19, chaque sous-registre étant adressable par un mot d'un bit; - un troisième registre AI de seize bits numérotés de O à 15, chaque bit étant adressable par un code de quatre bits. On définit dans ce troisième registre AI les sous-registres suivants - AIGS constitué des bits 6 à 9 de AI (poids 512 à 64), - AITM constitué des bits 9 à 12 de AI (poids 64 à 8), et - AIMB constitué des bits 13 à 15 de AI (poids 4, 2, 1). La seconde mémoire vive, appelée mémoire de séquence en formation MSF, est composée de soixante-dix bits. Elle est divisée en quatre registres - un premier registre SF de trente-deux bits, numérotés de 0 à 31, adressables par un code de cinq bits, ce registre étant le lieu de stockage de la séquence d'authentification 6; - un second registre OSF, également de trente-deux bits, numérotés de 0 à 31, adressables par un code de cinq bits, et servant de table d'occupation du premier registre SF; - un troisième registre ASF, de cinq bits, numérotés de 0 à 4, adressables par un mot de trois bits, et servant de table d'adressage pour le premier registre SF; - un quatrième registre BS, d'un seul bit, servant de zone tampon pour alimenter en bits le premier registre SF. Un quatrième groupe qui comprend un compteur d'index CIM, de la mémoire source MS, pour progresser pas à pas, modulo 1024, et un compteur d'utilisation du dispositif CS, qui est incrémenté de 1 à chaque émission d'une séquence d'authentification 6. Bien entendu, le nombre de bits de chaque mémoire pourra être adapté en fonction de l'application désirée. Il pourra être réduit en vue d'une procédure simple et rapide, ou bien augmenté en vue d'une procédure nécessitant une haute confidentialité, comme par exemple pour accéder à une zone protégée. La procédure d'élaboration de la séquence d'authentification 6 consiste à tirer de façon pseudo-aléatoire des bits contenus dans la mémoire source MS, pour les envoyer, après traitement, à un emplacement désigné pseudo-aléatoirement dans le premier registre SF de la seconde mémoire vive MSF. Cette procédure comprend les trois sous-procédures décrites ci-après - une première sous-procédure, qui initialise les mémoires à partir de l'aléa 4 émis par le centre de gestion 3, - une seconde sous-procédure, qui extrait des bits de la mémoire source MS pour les envoyer dans les troisième ASF et quatrième BS registres de la seconde mémoire vive MSF, - une troisième sous-procédure, qui traite les bits extraits de la mémoire source MS, et les place dans le premier registre SF de la seconde mémoire vive MSF, où ils constituent la séquence d'authentification 6. Ces trois sous-procédures sont commandées et supervisées par le microprocesseur 10, par l'intermédiaire du bus microprocesseur 11. Les seconde et troisième sous-procédures sont cycliques. En conséquence, elles sont plus particulièrement supervisées par la logique de cycle 13, qui fait partie intégrante du microprocesseur 10. Avant de procéder à un tirage, on initialise le contenu des mémoires vives MB et MSF. Pour décrire cette initialisation, on se réfère aux figures 3 et 4. L'initialisation consiste à calculer le contenu initial des bits de la mémoire de base MB. Le micro-ordinateur 10 commande tout d'abord au module d'initialisation 14 la mise à zéro de l'ensemble des registres SF, OSF, ASF et BS de la seconde mémoire vive MSF, de la totalité de la première mémoire vive MB, ainsi que d'un compteur d'index CIM de la mémoire source MS. On initialise alors le troisième registre AI. On met à zéro un compteur de 8 bits CAI qui va contrôler une itération de 256 étapes. A chaque étape, un nombre de 4 bits DP servant de désignateur d'incrément est calculé comme suit - PCAI un nombre de 4 bits correspondant aux 4 bits de poids faible de CAI, - GCAI un nombre de 4 bits correspondant aux 4 bits de poids fort de CAI, - QCAI un nombre de 10 bits égal à 4 fois le contenu de CAI, et - QFAI un nombre de 4 bits constitué par les bits 12 à 15 de poids faible du troisième registre AI. Sur les 4 entrées d'un dixième opérateur booléen 12-10, on injecte respectivement - 4 bits consécutifs de la mémoire source MS, le premier étant désigné par QCAI, - le quadruplet de bits numéro PCAI de l'aléa 4 stocké dans GS, - GCAI, et - QFAI. Puis le dixième opérateur booléen 12-10 effectue une opération binaire de type "OU EXCLUSIF" en combinant ces quatre entiers, ce qui fournit le nombre de 4 bits DP. Ce nombre DP désigne un incrément dans la mémoire d'incréments MI, qui est extrait par le bus microprocesseur 11 et injecté sur la première entrée du deuxième opérateur booléen 12-2. Ce même bus va chercher ensuite le contenu du troisième registre AI pour l'injecter sur la deuxième entrée du deuxième opérateur booléen 12-2, qui effectue une opération binaire de type addition modulo 65536. Le résultat de cette opération constitue le nouveau contenu du troisième registre AI. On reproduit cette accumulation d'incréments dans AI jusqu'à ce que le compteur CAI soit à la valeur 256. Le compteur d'index CIM va progresser par pas de 1, modulo 1024, à chaque étape de la première sous-procédure régissant l'initialisation. Ainsi, à chaque pas dudit compteur d'index CIM, on extrait une tranche de quatre bits consécutifs (modulo 1024) de la mémoire source MS, à partir de l'emplacement désigné par la valeur courante dudit contenu du compteur d'index CIM. On injecte cet extrait de la mémoire source MS sur une première entrée du sixième opérateur booléen 12-6. On extrait ensuite le contenu des bits numéros 3 à 6 du troisième registre AI de la première mémoire vive MB, que l'on injecte sur une seconde entrée du sixième opérateur 12-6. Enfin, on extrait les bits numéros 6 à 9 du sous-registre AIGS du troisième registre AI de la première mémoire vive MB, ce qui fournit une valeur comprise entre 0 et 15 qui va désigner l'un des 16 quadruplets de bits constituant l'aléa 4 stocké dans GS, et émis par le centre de gestion 3. On injecte le contenu du quadruplet désigné sur une troisième entrée du sixième opérateur booléen 12-6. Ledit sixième opérateur est alors apte à effectuer une opération booléenne de type "OU EXCLUSIF" sur le contenu de ses trois entrées, ce qui fournit un entier DM qui sert à désigner un incrément dans la mémoire auxiliaire d'incréments MI. Cet incrément est alors extrait par le bus microprocesseur 11, puis injecté sur la première entrée du troisième opérateur booléen 12-3. On extrait alors le contenu global du troisième registre AI de la première mémoire vive MB et on l'injecte sur la deuxième entrée du troisième opérateur 12-3. Ledit troisième opérateur est alors apte à effecteur une opération binaire, de type addition, modulo 65536, sur le contenu de ses deux entrées. Le résultat de cette opération est dirigé vers le troisième registre AI de la première mémoire vive MB, où il remplace le précédent contenu. Le microprocesseur 10 commande alors l'extraction du contenu des bits numéros 13 à 15 du sous-registre AIMB du troisième registre AI de la première mémoire vive MB. Ce contenu sert à désigner soit l'un des sous-registres SS(j), soit l'un des deux sous-registres RIS, soit encore les 10 bits de poids faible (bits 6 à 15) du troisième registre AI, de la première mémoire vive MB. On extrait ce contenu, et on l'injecte sur la première entrée du second opérateur booléen 12-2. On injecte ensuite l'incrément, extrait précédemment de la mémoire auxiliaire d'incréments MI, sur la seconde entrée du second opérateur booléen 12-2. On effectue une opération booléenne de type addition, modulo 1024, sur le contenu des deux entrées, ce qui fournit un entier DN que l'on dirige vers le registre ou le sous-registre désigné par le contenu des bits numéros 13 à 15 extraits préalablement du sous-registre AIMB du troisième registre AI de la première mémoire vive MB. On incrémente alors le compteur d'index CIM de une unité. Cette sous-procédure est ensuite réitérée jusqu'à ce que chaque bit de la mémoire source MS ait été utilisé quatre fois. Bien entendu, le nombre de bits extraits dans chaque registre ou mémoire n'est pas limitatif. Après initialisation, on peut prévoir que le microprocesseur 10 effectue la seconde sous-procédure décrite ci-dessous, un certain nombre de fois, sans produire de bit à implanter dans le troisième registre ASF de la seconde mémoire vive MSF. Dans la présente invention, cette étape n'est pas utile. Le tirage proprement dit de la séquence d'authentification 6 peut alors être effectué. Ce tirage fait appel aux seconde et troisième sous-procédures. Pour décrire la seconde sous-procédure, il est fait maintenant référence aux figures 5 et 6. Le microprocesseur 10 lance la seconde sous-procédure en ordonnant à la logique de cycle 13 de sélectionner de façon aléatoire l'un des cinq sous-registres indicés i des premier Ss et second RI registres de la première mémoire vive MB. On extrait le contenu de quatre bits du sous-registre RI(i) du second registre RI, grâce au bus microprocesseur 11. On Injecte ce contenu sur la première entrée du premier opératueur booléen 12-1. On extrait alors une partie de quatre bits du contenu du troisième registre AI de la première mémoire vive MB, soit les bits numéros 9 à 12 du sous-registre AITM, que l'on injecte sur la seconde entrée du premier opérateur booléen 12-1. On effectue une opération binaire de type "OU EXCLUSIF" à partir du contenu des deux entrées du premier opérateur booléen 12-1. Cette opération fournit un premier entier DI qui va servir à désigner un incrément contenu dans la mémoire auxiliaire d'incréments MI. Le bus microprocesseur 11 va ensuite extraire l'incrément contenu à l'adresse DI, puis l'injecter, d'une part, sur une première entrée d'un second opérateur booléen 12-2, et d'autre part, sur une première entrée d'un troisième opérateur booléen 12-3. Le microprocesseur 10 commande alors au bus microprocesseur 11 d'aller chercher tout d'abord le contenu global du troisième registre AI de la première mémoire vive MB, pour l'injecter sur la seconde entrée du second opérateur booléen 12-2. On effectue alors une seconde opération binaire de type addition, modulo 65536, sur le contenu des deux entrées du second opérateur 12-2. Le résultat de cette seconde opération est dirigé vers le troisième registre AI de la première mémoire vive MB, où il remplace le précédent contenu. Puis le bus microprocesseur 11 va chercher le contenu du sous-registre SS(j) désigné au commencement de la seconde sous-procédure. Il injecte ledit contenu sur la seconde entrée du troisième opérateur booléen 12-3. On effectue ensuite une troisième opération booléenne de type addition, modulo 1024, sur le contenu des deux entrées du troisième opérateur 12-3. Le résultat de cette troisième opération fournit un second entier DJ, qui, d'une part, est dirigé vers le sous-registre SS(j) où il remplace le précédent contenu, et d'autre part, sert à désigner l'emplacement d'un bit dans la mémoire source MS. Le contenu des bits désignés par les entiers DJ à DJ+3 est ensuite extrait puis injecté sur une première entrée d'un quatrième opérateur booléen 12-4. La logique de cycle 13 désigne alors le sous-registre SS(j+l) du premier registre SS de la première mémoire vive MB, ce qui permet d'extraire les bits 2 à 5 contenus dans le sous-registre SS(j+1). Ce contenu est injecté sur la seconde entrée du quatrième opérateur booléen 12-4, où il est combiné logiquement avec le contenu des bits d'adresses DJ à DJ+3 de la mémoire source MS, préalablement injectés sur la première entrée de cet opérateur 12-4. Cette combinaison logique sur le contenu des deux entrées du quatrième opérateur 12-4 est une opération booléenne de type "OU EXCLUSIF", qui fournit un troisième entier DK, que l'on dirige vers une première entrée d'un cinquième opérateur booléen 12-5. On injecte sur une deuxième entrée de ce même opérateur le contenu du sous-registre RI(i-1), puis on combine logiquement ces deux entrées en effectuant une opération de type "OU EXCLUSIF". Le résultat de cette opération fournit un entier DL qui est dirigé vers le sous-registre RI(i-1) pour y remplacer son précédent contenu. Après cette dernière opération, les contenus des sous-registres RI(i-1) et SS(j), ainsi que celui du troisième registre AI ont évolué par addition d'incréments tirés de façon pseudo-aléatoire. La logique de cycle 13 réitère ensuite cette seconde sousprocédure, en exploitant les contenus des premier SS et second RI sous-registres indicés i+l, ce qui permet de faire évoluer les contenus des sous-registres RI(i) et SS(j+l), ainsi que celui du troisième registre AI. La seconde sous-procédure est ainsi réalisée cinq fois afin que les contenus de tous les sous-registres (i, j = 0 à 4) des premier SS et second RI registres soient renouvelés. A l'issue des cinq réalisations de la deuxième sous-procédure, on a additionné un incrément à chaque sous-registre SS(j) et RI(i), et cinq incréments au troisième registre AI. Afin de renforcer le caractère pseudo-aléatoire de l'évolution du troisième registre AI, on procède à la permutation de 9 bits de AI. Pour cela, on extrait le contenu des sous-registres RI(3) et RI(4), ce qui fournit deux entiers compris entre 0 et 15 qui serviront à désigner les positions des deux bits de AI fournis parmi les 16. Le choix des sous-registres numéros 3 et 4 est bien entendu arbitraire. On extrait ensuite les bits 0 à 9 et 10 à 19, définissant les sous-registres RIS(0) et RIS(1), du second registre RI, pour désigner respectivement deux emplacements de bits de la mémoire source MS. Le contenu des deux bits désignés est ensuite stocké aux emplacements 0 et 1 du troisième registre ASF de la seconde mémoire vive MSF. Il va de soi que les bits extraits dans le deuxième registre RI peuvent être différents. Ces deux séries de bits peuvent ne pas être disjointes. L'implantation des deux bits dans le troisième registre ASF constitue un cycle complet. Pour achever de remplir le troisième registre ASF de la seconde mémoire vive MSF, qui contient cinq bits, il faut alors effectuer de nouveaux cycles. Le second cycle remplit les bits 2 et 3, et le troisième cycle remplit le bit 4 du troisième registre ASF, et le bit unique du quatrième registre BS de la seconde mémoire vive MSF. Le remplissage des troisième ASF et quatrième BS registres de la seconde mémoire vive MSF aura donc permis de remplacer trois fois le contenu global des premier SS et second RI registres, ainsi que d'effectuer l'addition de quinze valeurs d'incréments dans le troisième registre AI, de la première mémoire vive MB, de façon pseudo-aléatoire. Pour décrire la formation de la séquence d'authentification o, à partir du contenu des troisième ASF et quatrième BS registres de la seconde mémoire vive MSF, on se réfère aux figures 7 et 8. Cette formation de la séquence d'authentification 6 fait appel à la troisième sous-procédure. On extrait tout d'abord le contenu du quatrième registre BS de la seconde mémoire vive MSF, et on l'injecte sur une première entrée d'un septième opérateur 12-7. On extrait ensuite le bit 7 (de poids 256) du troisième registre AI de la première mémoire vive MB, et on l'injecte sur une seconde entrée du septième opérateur booléen 12-7. Puis on effectue une opération binaire de type "OU EXCLUSIF", ce qui fournit une valeur 0 ou 1, que l'on dirige vers le quatrième registre BS de la seconde mémoire vive MSF, où il remplace le précédent contenu. Le choix du bit numéro 7 est un choix intermédiaire. Celui d'un bit de poids plus élevé ne serait pas judicieux car sa valeur évolue très lentement lorsque les incréments sont codés sur six bits. On extrait alors le contenu du troisième registre ASF pour l'injecter sur la première entrée du huitième opérateur booléen 12-8. Puis on extrait le contenu des bits 11 à 15 du troisième registre AI de la première mémoire vive MB, que l'on injecte sur la seconde entrée du huitième opérateur booléen 12-8. On effectue alors une opération booléenne de type "OU EXCLUSIF" sur le contenu des deux entrées de ce huitième opérateur 12-8, ce qui fournit un entier DZ, qui est dirigé vers le troisième registre ASF de la seconde mémoire vive MSF, où il remplace le précédent contenu. L'entier DZ, compris entre 0 et 31, sert également à désigner le bit numéro DZ du second registre OSF de la seconde mémoire vive MSF. Si le contenu de ce bit vaut 1, cela veut dire que l'emplacement numéro DZ, dans le premier registre SF de la seconde mémoire vive MSF, a déjà été garni. On incrémente alors de 1, modulo 32, le contenu du troisième registre ASF de la seconde mémoire vive MSF, en utilisant le neuvième opérateur booléen 12-9. A cet effet, on injecte le contenu du troisième registre ASF de la seconde mémoire vive MSF, sur une première entrée du neuvième opérateur booléen 12-9, la seconde entrée étant fixée en permanence à 1. Puis, on effectue une addition binaire, modulo 32. Le résultat de cette opération permet de désigner le bit numéro DZ+1 du second registre OSF de la seconde mémoire vive MSF. Si ce bit numéro DZ+1 est également à 1, on réincrémente le troisième registre ASF jusqu'à ce que l'on trouve un bit de valeur 0 dans le second registre de la seconde mémoire vive MSF. On force alors à 1 ce bit. Le contenu du troisième registre ASF de la seconde mémoire vive MSF sert ensuite à désigner l'emplacement dans le premier registre SF de cette mémoire MSF, dans lequel on va inscrire le contenu du bit du quatrième registre BS de la seconde mémoire vive MSF. Une fois le bit implanté dans le premier registre SF de la seconde mémoire MSF, on recommence à zéro la seconde sousprocédure, puis la troisième sous-procédure pour implanter le bit suivant dans ledit premier registre SF. On constitue ainsi bit après bit la séquence d'authentification 6 de 32 bits dans le premier registre SF de la seconde mémoire vive MSF. Lorsque la séquence d'authentification 6 est entièrement constituée, le microprocesseur 10 est apte à émettre ladite séquence 6 en direction du centre de gestion 3 via le lecteur 2. Pour certaines applications particulières, on peut prévoir un compteur d'utilisation du dispositif CS qui sera incrémenté de 1 dans la mémoire morte réinscriptible EEPROM, en vue du tirage de la prochaine séquence d'authentification, après émission de ladite séquence d'authentification 6. En résumé, comme cela est illustré sur la figure 9, un cycle complet de génération d'une séquence d'authentification 6 comprend les étapes suivantes a) on initialise les mémoires en tenant compte de l'aléa 4 émis par le centre de gestion 3, b) on effectue cinq fois la seconde sous-procédure pour réaliser un cycle sur les sous-registres SS(j) et RI(i) de la première mémoire vive MB, ce qui désigne deux emplacements de bit de la mémoire source MS, le contenu de ces bits étant implanté dans le troisième registre ASF de la seconde mémoire vive MSF, c) on recommence deux fois l'étape b), ce qui fournit quatre autres bits, les trois premiers étant implantés dans le troisième registre de la seconde mémoire vive MSF, et le quatrième bit dans le quatrième registre BS de cette même mémoire MSF, d) on implante un bit dans le premier registre SF de la seconde mémoire MSF, à partir du traitement des six bits issus de l'étape c), ce qui constitue la troisième sous-procédure, e) on reproduit trente et une autre fois les étapes b), c) et d), afin de générer l'ensemble de la séquence d'authentification 6 de 32 bits, dans le premier registre SF de la seconde mémoire vive MSF. En conclusion, la présente invention présente deux avantages certains sur les générateurs de code connus actuellement - d'une part, elle propose une évolution quasi-aléatoire de la mémoire vive, servant à générer la séquence d'authentificaution, et - d'autre part, elle propose une fonction d'encodage de l'aléa, génératrice de ladite séquence d'authentification, à sens unique, ce qui interdit de remonter dans un délai raisonnable à la clé secrète cachée dans la mémoire morte réinscriptible de la carte personnalisée, tout en connaissant la séquence d'authentification et l'aléa. Bien entendu, la présente invention n'est pas limitée au mode de réalisation décrit. Elle s'étend à toute variante que pourra développer l'homme du métier, en particulier dans le cadre des revendications ci-après. Ainsi, le nombre d'opérations sur le contenu des registres ne se limite pas à l'exemple décrit précédemment. En conséquence, un nombre plus ou moins important d'opérateurs booléens pourra être envisagé pour réaliser le générateur de code tel que décrit. Par ailleurs, il est clair que le nombre de bits servant à coder les incréments contenus dans la mémoire auxiliaire d'incréments n'est pas non plus fixe. Plus ce nombre sera élevé, plus le générateur de code tendra vers une évolution de type purement aléatoire, ce qui renforcera l'inviolabilité du dispositif d'authentification. Enfin, on pourra également prévoir une séquence d'authentification d'un nombre de bits supérieur ou inférieur à celui proposé, selon que l'on souhaite renforcer l'inviolabilité du dispositif, ou accroître la rapidité de génération de la séquence d'authentification, dans le cadre d'authentifications de routine. Revendications 1. Générateur de code, caractérisé en ce qu'il comprend - une mémoire source (MS) de N bits, adressable par un mot de q bits, - une mémoire auxiliaire d'incrément (MI), formant table pour p incréments entiers de t bits, et adressable par un mot de r bits, - au moins une mémoire vive, dite mémoire de base (MB) de z bits, définissant un premier registre (SS) et un second registre (RI) disjoint ou non du premier registre (SS) et un troisième registre (AI) à s bits, ledit premier registre (SS) définissant des zones (SS(j)) à q bits, et ledit second registre (RI) définissant des zones (RI(i)) à r bits, - au moins de premier (12-1), second (12-2) et troisième (12-3) moyens de calculs munis chacun d'au moins deux entrées et une sortie, aptes à recevoir sur chaque entrée le contenu d'une partie au moins de l'une des mémoires (MS, MI, MB), pour réaliser une opération sur leurs contenus, et délivrer sur sa sortie le résultat de ladite opération, - des moyens d'accès mémoire (11) munis d'au moins une première entrée (El) pour recevoir des ordres d'adressage de parties au moins des mémoires (MS, MI, MB), d'au moins une seconde entrée (E2), pour recevoir le résultat d'une opération réalisée par l'un des moyens de calcul (12), et d'au moins une première sortie (S1), pour délivrer le contenu d'une partie au moins de l'une des mémoires (MS, MI, MB) sur l'une des entrées d'au moins l'un des moyens de calcul (12), - une logique de cycle (13) apte à recevoir les désignations (j et i), identiques ou non, de deux zones visées respectives des premier (SS) et second (RI) registres, pour a) solliciter la première entrée (El) des moyens d'accès mémoire (11) pour extraire le contenu de la zone visée (RI(i)) du second registre, b) solliciter les premières et secondes entrées du premier moyen de calcul (12-1) avec respectivement le contenu de la zone visée (RI(i)), et une partie au moins du contenu du troisième registre (AI), ce qui fournit un premier entier (DI) compris entre 0 et p-1, c) solliciter la première entrée (El) des moyens d'accès mémoire (11) pour extraire un incrément (x) dans la mémoire auxiliaire d'incréments (MI) à l'adresse (DI), d) solliciter les première et seconde entrées du second moyen de calcul (12-2) avec respectivement cet incrément (x) et le contenu du troisième registre (AI), ce qui fournit le nouveau contenu du troisième registre (AI), e) solliciter la première entrée (El) des moyens d'accès mémoire pour extraire le contenu de la zone visée (SS(j)) du premier registre, f) solliciter les première et seconde entrées du troisième moyen de calcul (12-3) avec respectivement l'incrément (x), et le contenu de la zone visée (SS(j)), ce qui fournit un second entier (DJ) compris entre 0 et N-1, et g) solliciter la seconde entrée (E2) des moyens d'accès mémoire pour inscrire l'entier (DJ) dans la zone visée (ss(j)), - des moyens pour initialiser (14) au moins le contenu des registres de la mémoire de base (MB), à partir de données d'entrée formant aléa (4), et - des moyens de commande (10) pour fournir à la logique de cycle (13) les désignations (i et j), et pour solliciter répétitivement ladite logique de cycle (13) en sélectionnant à chaque fois au moins une zone visée dans les premier (SS) et second (RI) registres de la mémoire de base (MB), ce qui permet de faire évoluer le contenu d'une partie au moins de la mémoire de base (MB) de façon sensiblement pseudo-aléatoire (mais déterminable pour une autorité disposant du contenu de la mémoire source (MS), de l'aléa, et du nombre de répétitions effectuées par les moyens de commande (10)). 2. Générateur de code selon la revendication 1, caractérisé en ce que la logique de cycle (13) est en outre agencée pour h) solliciter la première entrée (El) des moyens d'accès mémoire (11) pour extraire une partie du contenu, de longueur (r), de la mémoire source (MS), à l'adresse (DJ), i) solliciter la première entrée (El) des moyens d'accès flemoire (11) pour extraire une partie du contenu, de longueur (r), de la zone visée (SS(j+k)), (k > 0), j) solliciter une première et une seconde entrée d'un quatrième moyen de calcul (12-4), avec respectivement le contenu, de longueur r, de la mémoire source (MS) à l'adresse DJ), et le contenu, de longueur r, de la zone visée (SS(j+k)), ce qui fournit un troisième entier (DK) compris entre 0 et p-1, k) solliciter une première et une seconde entrée d'un cinquième moyen de calcul (12-5), avec respectivement l'entier (DK) et le contenu de la zone visée (RI(i-l) (1 > 0), ce qui fournit un quatrième entier (DL) compris entre 0 et p-1, et 1) solliciter la seconde entrée (E2) des moyens d'accès mémoire (11) pour inscrire l'entier (DL) dans la zone visée (RI(i-l)), ce qui permet de faire évoluer le contenu du second registre (RI) de façon pseudo-aléatoire, comme une fonction à sens unique, dont les résultats ne permettent pas à eux seuls de reconstituer le contenu de la mémoire source (MS). 3. Générateur de code selon l'une des revendications 1 et 2, caractérisé en ce que la logique de cycle est également apte à recommencer les étapes a) à 1) jusqu a renouvellement complet des zones visées (i et j) des premier (SS) et deuxième (RI) registres de la mémoire de base (MB). 4. Générateur de code selon la revendication 3, caractérisé en ce qu'après renouvellement complet la logique de cycle est également apte à : m) solliciter la première entrée (El) des moyens d'accès mémoire (11) pour extraire les contenus de deux zones distinctes d'au moins l'un des premier (SS) et deuxième (RI) registres de la mémoire de base (MB), ce qui fournit deux entiers compris entre 0 et s-1, lesdits deux entiers désignant deux adresses de bits du troisième registre (AI) de la mémoire de base (MB), et n) permuter lesdits deux bits désignés. 5. Générateur de code selon l'une des revendications 3 et 4, caractérisé en ce que les moyens de commande (10) sont en outre agencés pour extraire au moins un bit de la mémoire source (MS) en fonction de parties disjointes ou non du contenu global du second registre (RI), à chaque renouvellement complet dudit contenu. 6. Générateur de code selon la revendication 5, caractérisé en ce que les moyens de commande sont en outre agencés pour engendrer une séquence de bits formant séquence d'authentification (6), chaque bit et sa position dans la séquence (6) étant définis à partir des bits extraits de la mémoire source (MS) et d'une partie au moins du contenu global du troisième registre (AI). 7. Générateur de code selon l'une des revendications précédentes, caractérisé en ce que les opérations effectuées par les second (12-2) et troisième (12-3) moyens de calcul sont des additions binaires respectivement modulo 2S et modulo N, et en ce que les opérations effectuées par les premier (12-1), quatrième (12-4) et cinquième (12-5) moyens de calcul sont des combinaisons logiques de type OU EXCLUSIF. 8. Générateur de code selon l'une des revendications précédentes, caractérisé en ce que les moyens d'accès mémoire (11) sont connectés aux mémoires par câblage direct. 9. Générateur de code selon l'une des revendications précédentes, caractérisé en ce que les moyens pour initialiser (14) sont en outre agencés pour mettre à zéro tous les bits de la séquence de bits formant la séquence d'authentification (6). 10. Générateur de code selon l'une des revendications précédentes, caractérisé en ce que les moyens de commande (10) sont également agencés pour solliciter la logique de cycle (13) pendant une durée déterminée, afin que ladite logique de cycle (13) ne produise pas de bit destiné à engendrer la séquence d'authentification (6). 11. Générateur de code du type décrit dans les revendications précédentes, caractérisé en ce que le premier registre (SS) est subdivisé en cinq sous-registres (SS(i)) de dix bits chacun, le second registre (RI) est subdivisé en cinq sous-registres (RI(i)) de quatre bits chacun, et le troisième registre (AI) est à seize bits, et en ce que la mémoire source (MS) est une mémoire réinscriptible de type EEPROM à 1024 bits, adressable par des mots de dix bits. 12. Générateur de code selon la revendication 11, caractérisé en ce que les moyens d'acces mémoire (11) sont un bus microprocesseur (11). 13. Générateur de code selon l'une des revendications 11 et 12, caractérisé en ce que la séquence de bits formant la séquence d'authentification est constituée de 32 bits.