PROCEDE ET DISPOSITIF DE MISE A JOUR D' UNE GRAINE ETABLIE PAR UNE FONCTION DETERMINISTE DANS UN DISPOSITIF DE COMMUNICATION A TRAITEMENT NUMERIQUEMETHOD AND DEVICE FOR UPDATING A SEED ESTABLISHED BY A DETERMINISTIC FUNCTION IN A DIGITAL PROCESSING COMMUNICATION DEVICE
L'invention concerne de façon générale les dispositifs de communication et en particulier la mise à jour d'une valeur évoluant de façon déterministe dans de tels dispositifs. La mise à jour d'une valeur évoluant de façon déterministe est notamment utilisée pour la génération de nombres aléatoires, la synchronisation de messages ou l'incrémentation d'un compteur.The invention generally relates to communication devices and in particular the updating of a value evolving deterministically in such devices. The updating of a deterministically evolving value is used in particular for the generation of random numbers, the synchronization of messages or the incrementation of a counter.
La génération d'un nombre aléatoire par les circuits d'une carte à puce est relativement imparfaite. En effet, les différents nombres n'ont pas la même probabilité d'être générés. Pour pallier à cet inconvénient, le nombre généré par les circuits est combiné avec un nombre subissant une évolution déterministe. Un tel nombre est couramment désigné par le terme graine (désigné par le terme Seed en langue anglaise) . La valeur de la graine est ainsi modifiée de façon itérative par un algorithme déterministe lors d'une mise à jour. Les nombres aléatoires générés sont ensuite utilisés pour différentes applications, notamment pour la génération de clés de cryptage.The generation of a random number by the circuits of a smart card is relatively imperfect. Indeed, the different numbers do not have the same probability of being generated. To overcome this disadvantage, the number generated by the circuits is combined with a number undergoing a deterministic evolution. Such a number is commonly referred to as seed (referred to as Seed in English). The value of the seed is thus modified iteratively by a deterministic algorithm during an update. The random numbers generated are then used for different applications, in particular for the generation of encryption keys.
Lors de la phase de démarrage, une interruption extérieure de la communication sans contact entre une carte et un terminal peut altérer l'algorithme d'itération. La graine stockée peut alors être tronquée. De même, pour une communication par contact,
une interruption de la communication ou de l'alimentation peut tronquer d'autres valeurs de la carte durant leur mise à jour. Afin de pallier à cet inconvénient, une carte à puce telle que décrite dans le document EP-A-O 756 746 utilise des fonctions de sauvegarde génériques (fonction appelée backup) pour sauvegarder des données en mémoire non volatile. La valeur initiale d'une donnée avant sa mise à jour est lue dans un emplacement d'usage de la mémoire non volatile, puis cette valeur initiale est recopiée dans un emplacement réservé dans la mémoire non volatile. Une valeur mise à jour est calculée en mémoire vive. La valeur mise à jour est mémorisée dans l'emplacement d'usage en écrasant la valeur initiale. Si la valeur mise à jour est déterminée comme défaillante, le processus de restauration de la valeur initiale valide est le suivant : la valeur initiale est lue dans l'emplacement réservé. La valeur initiale est copiée dans l'emplacement d'usage et écrase la valeur mise à jour. La mise à jour d'une graine est également effectuée selon ce procédé.During the start-up phase, an external interruption of contactless communication between a card and a terminal may alter the iteration algorithm. The stored seed can then be truncated. Similarly, for contact communication, an interruption in communication or power may truncate other values on the card while they are being updated. In order to overcome this drawback, a smart card as described in document EP-A-0 756 746 uses generic backup functions (function called backup) to save data in non-volatile memory. The initial value of a data item before it is updated is read in a location of use of the non-volatile memory, and then this initial value is copied to a reserved place in the non-volatile memory. An updated value is calculated in RAM. The updated value is stored in the usage location by overwriting the initial value. If the updated value is determined to be faulty, the process of restoring the valid initial value is as follows: the initial value is read in the reserved slot. The initial value is copied to the usage location and overwrites the updated value. The updating of a seed is also carried out according to this method.
Une telle carte à puce présente cependant des inconvénients. En mode de communication sans contact, certaines applications de la carte à puce (par exemple, une carte utilisée comme titre de transport détecté par une borne) exigent par exemple une durée de transaction inférieure à 100 millisecondes entre le terminal et la carte. La phase de démarrage de la carte à puce (les standards ISO 14443-3 et ISO 14443-4 définissent l'établissement de la communication sans contact entre la carte et un terminal) présente une durée trop
importante pour que la durée de transaction soit respectée. Les étapes de mise à jour nécessitent plusieurs écritures en mémoire. Ces opérations sont relativement longues à mettre en œuvre. Les éventuelles phases de restauration d'une graine sont également relativement longues à mettre en œuvre.Such a smart card, however, has disadvantages. In contactless communication mode, certain applications of the smart card (for example, a card used as a transport ticket detected by a terminal) require, for example, a transaction duration of less than 100 milliseconds between the terminal and the card. The start phase of the smart card (the ISO 14443-3 and ISO 14443-4 standards define the establishment of contactless communication between the card and a terminal) is too long important for the transaction duration to be respected. The update steps require multiple writes in memory. These operations are relatively long to implement. The possible phases of restoration of a seed are also relatively long to implement.
Il existe donc un besoin pour un procédé de mise à jour d'une graine dans un dispositif de traitement numérique, comprenant les étapes de : -lecture d'une première graine dans une mémoire non volatile du dispositif ;There is therefore a need for a method for updating a seed in a digital processing device, comprising the steps of: reading a first seed in a nonvolatile memory of the device;
-génération d'une seconde graine par une fonction déterministe appliquée à la première graine ;-generation of a second seed by a deterministic function applied to the first seed;
-génération d'un indicateur de validité d'écriture associé à la seconde graine ;generating a write validity indicator associated with the second seed;
-écriture de la seconde graine et de l'indicateur de validité d'écriture associé en une seule opération dans la mémoire non volatile, en conservant la valeur de la première graine ; -détermination de graines valides parmi plusieurs graines de la mémoire non volatile au moyen d'indicateurs de validité d'écriture respectifs de la mémoire non volatile ;writing the second seed and the associated write validity flag in a single operation into the non-volatile memory, retaining the value of the first seed; determining seeds valid among several seeds of the non-volatile memory by means of respective write validity indicators of the non-volatile memory;
-si au moins une graine est déterminée valide, sélection de la première graine parmi les graines valides au moyen de ladite fonction déterministe.if at least one seed is determined valid, selecting the first seed from among the valid seeds by means of said deterministic function.
Dans le cas où aucune desdites graines n'est déterminée valide, la première graine est générée aléatoirement. Selon une variante, la fonction déterministe est une fonction croissante et la première graine est
sélectionnée par comparaison des valeurs des graines valides. Selon une autre variante, la fonction déterministe est une fonction décroissante et la première graine est sélectionnée par comparaison des valeurs des graines valides .In the case where none of said seeds is determined valid, the first seed is generated randomly. According to one variant, the deterministic function is an increasing function and the first seed is selected by comparison of valid seed values. According to another variant, the deterministic function is a decreasing function and the first seed is selected by comparing valid seed values.
L'invention porte également sur un procédé de génération d'un nombre aléatoire, comprenant les étapes d'un tel procédé de mise à jour et comprenant en outre l'étape de génération d'un nombre aléatoire en fonction de la seconde graine mémorisée.The invention also relates to a method for generating a random number, comprising the steps of such an update method and further comprising the step of generating a random number according to the second seed stored.
L'invention porte encore sur un dispositif de traitement numérique présentant une mémoire non volatile et un organe de traitement, susceptible de mettre en œuvre de tels procédés. Selon une variante, le dispositif présente une interface de communication sans contact avec d'autres appareils .The invention also relates to a digital processing device having a non-volatile memory and a processing unit, capable of implementing such methods. Alternatively, the device has a communication interface without contact with other devices.
Selon encore une variante, le dispositif est une carte à puce.According to another variant, the device is a smart card.
L'invention sera mieux comprise à la lecture de la description qui suit, accompagnée des dessins annexés qui représentent :The invention will be better understood on reading the description which follows, accompanied by the appended drawings which represent:
-Figure 1, un algorithme de mise à jour d'une graine mis en œuvre selon l'invention ;FIG. 1, an algorithm for updating a seed implemented according to the invention;
-Figure 2, un diagramme des étapes d'incrémentation d'une graine ;FIG. 2, a diagram of the steps of incrementing a seed;
-Figure 3, un exemple d'évolution des valeurs de graine selon l'invention.
Le terme graine désignera par la suite une valeur évoluant de façon déterministe à partir d'une valeur initiale. Cette valeur initiale est soit générée aléatoirement par l'appareil, soit inscrite en usine dans une mémoire non volatile de l'appareil.FIG. 3, an example of evolution of the seed values according to the invention. The term seed will subsequently designate a value evolving deterministically from an initial value. This initial value is either generated randomly by the device, or registered in the factory in nonvolatile memory of the device.
L'invention propose de mettre à jour une graine dans un dispositif de traitement numérique, en lisant une première graine, en y appliquant une fonction déterministe pour générer une seconde graine, en générant un indicateur de validité de la seconde graine, puis en inscrivant la seconde graine et son indicateur en une seule opération dans une mémoire non volatile du dispositif.The invention proposes to update a seed in a digital processing device, by reading a first seed, by applying a deterministic function to generate a second seed, generating an indicator of validity of the second seed, and then entering the seed. second seed and its indicator in a single operation in a non-volatile memory of the device.
Parmi plusieurs graines de la mémoire non volatile, des indicateurs de validité d'écriture permettent de déterminer les graines valides . La première graine est sélectionnée parmi ces graines valides . Si aucune graine n'est valide, la première graine est générée aléatoirement. La valeur de la première graine est conservée pour permettre la récupération d'une valeur valide si l'écriture de la seconde graine se révélait malgré tout défaillante.Among several seeds of the non-volatile memory, write validity indicators make it possible to determine the valid seeds. The first seed is selected from these valid seeds. If no seed is valid, the first seed is randomly generated. The value of the first seed is retained to allow the recovery of a valid value if the writing of the second seed is still found to be faulty.
La figure 1 illustre différentes étapes dans un exemple de procédé de mise à jour d'une graine selonFIG. 1 illustrates different steps in an exemplary method of updating a seed according to
1' invention.The invention.
Les étapes 101 à 103 visent à déterminer la validité de deux graines mémorisées dans la mémoire non volatile du dispositif. Pour une graine donnée, un indicateur de validité d'écriture est calculé puis
l'indicateur obtenu est comparé à l'indicateur de validité d'écriture associé de la mémoire non volatile. La graine est considérée valide si et seulement si les indicateurs comparés sont égaux. A l'étape 101, la validité d'une graine GrI est testée au moyen de son indicateur de validité. Si GrI est non valide, le procédé passe à l'étape 102. Si GrI est valide, le procédé passe à l'étape 104. Aux étapes 102 et 104, il est déterminé si une graine Gr2 est valide au moyen de son indicateur de validité. A la fin des étapes 102 et 104, les graines valides ont ainsi été déterminées parmi les graines GrI et Gr2.The steps 101 to 103 aim to determine the validity of two seeds stored in the nonvolatile memory of the device. For a given seed, a write validity flag is calculated and then the indicator obtained is compared with the associated write validity flag of the non-volatile memory. The seed is considered valid if and only if the compared indicators are equal. In step 101, the validity of a GrI seed is tested by means of its validity indicator. If GrI is invalid, the process proceeds to step 102. If GrI is valid, the process proceeds to step 104. In steps 102 and 104, it is determined whether a seed Gr2 is valid by means of its flag. validity. At the end of steps 102 and 104, the valid seeds were thus determined from seeds Gr1 and Gr2.
Trois cas se présentent alors :Three cases then arise:
-ni GrI, ni Gr2 ne sont valides. Le procédé passe alors à l'étape 103 ;Neither GrI nor Gr2 are valid. The process then proceeds to step 103;
-GrI et Gr2 sont valides. Le procédé passe alors à l'étape 105 ;-GrI and Gr2 are valid. The process then proceeds to step 105;
-Une seule valeur est valide. Si GrI est valide le procédé passe à l'étape 112 où GrI est sélectionnée comme première graine. Si Gr2 est valide, le procédé passe à l'étape 111 où Gr2 est sélectionnée comme première graine.-A single value is valid. If GrI is valid the process proceeds to step 112 where GrI is selected as the first seed. If Gr2 is valid, the process proceeds to step 111 where Gr2 is selected as the first seed.
Dans l'exemple, les indicateurs de validité d'écriture sont déterminés par un algorithme de test de redondance cyclique (CRC pour Cyclic Redundancy Check en langue anglaise) . Tout autre algorithme de vérification de validité peut également être utilisé : on pourra notamment prévoir de réaliser un test de parité sur les bits des graines .
L'étape 105 détermine la dernière valeur valide parmi les différentes valeurs valides identifiées. La première graine sélectionnée est alors la dernière valeur valide. Pour chaque valeur valide trouvée, la fonction déterministe est appliquée. La dernière valeur valide sera celle pour laquelle le résultat de la fonction ne correspondra pas à une autre valeur valide. Cette graine sera utilisée comme première graine pour la mise à jour. Dans l'exemple, si GrI et Gr2 sont valides et si Gr2 est le résultat de l'application de la fonction déterministe sur GrI, Gr2 est la dernière valeur valide et sera utilisée comme première graine.In the example, the write validity flags are determined by a cyclic redundancy check (CRC) algorithm. Any other validity verification algorithm may also be used: it will be possible in particular to perform a parity test on the seed bits. Step 105 determines the last valid value among the different valid values identified. The first seed selected is then the last valid value. For each valid value found, the deterministic function is applied. The last valid value will be the one for which the result of the function will not match another valid value. This seed will be used as the first seed for the update. In the example, if GrI and Gr2 are valid and if Gr2 is the result of applying the deterministic function on GrI, Gr2 is the last valid value and will be used as the first seed.
La fonction déterministe peut, dans un cas simplifié, être une fonction croissante, par exemple une incrémentation d'une unité. La dernière graine valide est dans ce cas celle qui présente la plus grande valeur. La fonction déterministe peut également être une fonction décroissante, par exemple une décrémentation d'une unité. La dernière graine valide est dans ce cas celle qui présente la plus petite valeur.The deterministic function can, in a simplified case, be an increasing function, for example an incrementation of one unit. The last valid seed is in this case the one with the greatest value. The deterministic function can also be a decreasing function, for example a decrementation of a unit. The last valid seed is in this case the one with the smallest value.
L'étape 103 se déroule lorsque aucune graine valide n'a été identifiée. Ce cas peut notamment se présenter lors de l'initialisation du dispositif. Les valeurs des graines dans la mémoire non volatile sont alors indéterminées. Dans ce cas, une première graine est générée aléatoirement ou à l'aide d'un algorithme adéquat.
Lors d'une génération aléatoire de la première graine, son indicateur de validité est également calculé. Cette première graine et son indicateur sont écrits en une seule opération dans la mémoire non volatile, en écrasant les valeurs précédentes de la graine GrI. Le procédé passe alors à l'étape 112 : la seconde graine est calculée à partir de la graine GrI générée.Step 103 takes place when no valid seed has been identified. This case may especially occur during the initialization of the device. The seed values in the non-volatile memory are then indeterminate. In this case, a first seed is generated randomly or with the aid of an appropriate algorithm. During a random generation of the first seed, its validity indicator is also calculated. This first seed and its indicator are written in a single operation in the non-volatile memory, overwriting the previous values of the seed GrI. The process then proceeds to step 112: the second seed is calculated from the generated GrI seed.
Les étapes 111 et 112 sont des étapes de calcul de la seconde graine. La fonction déterministe est appliquée à la première graine sélectionnée. La figure 2 illustre plus précisément différentes phases pouvant être mises en œuvre lors du calcul de la seconde graine.Steps 111 and 112 are steps for calculating the second seed. The deterministic function is applied to the first selected seed. Figure 2 illustrates more precisely different phases that can be implemented during the calculation of the second seed.
La figure 2 illustre plus précisément le déroulement des étapes 111 et 112.Figure 2 illustrates more precisely the progress of steps 111 and 112.
A l'étape 121, la première graine est copiée en mémoire vive. A l'étape 122, la valeur de la seconde graine est calculée en mémoire vive. A l'étape 123, l'indicateur de validité d'écriture de la seconde graine est calculé en mémoire vive. A l'étape 124, la seconde graine et l'indicateur calculés sont écrits en une seule opération dans la mémoire non volatile.In step 121, the first seed is copied to RAM. In step 122, the value of the second seed is calculated in random access memory. In step 123, the write validity flag of the second seed is calculated in random access memory. In step 124, the calculated second seed and the flag are written in a single operation in the nonvolatile memory.
Les graines sont de préférence écrites dans des pages distinctes de la mémoire non volatile. La sécurité de la sauvegarde de la graine est ainsi accrue : si la page d'une graine est attaquée ou
abîmée, la probabilité qu'une page contenant une autre graine soit attaquée ou abîmée est alors réduite.The seeds are preferably written in separate pages of the non-volatile memory. The security of saving the seed is thus increased: if the page of a seed is attacked or damaged, the probability that a page containing another seed is attacked or damaged is then reduced.
Pour réduire le nombre de graines mémorisées dans la mémoire non volatile, on peut également prévoir que la seconde graine et son indicateur écrasent une graine et un indicateur qui n'ont pas été sélectionnés comme première graine. Par exemple, avec GrI comme première graine, la seconde graine générée et son indicateur vont écraser la graine Gr2 et son indicateur. Afin d'éviter une génération de graines aléatoire lors d'une initialisation de l'appareil, on peut également prévoir que des valeurs de graine par défaut avec des indicateurs correspondants soient écrites en usine dans la mémoire non volatile de l'appareil.To reduce the number of seeds stored in the non-volatile memory, it is also possible that the second seed and its indicator crush a seed and an indicator that have not been selected as the first seed. For example, with GrI as the first seed, the second seed generated and its indicator will crush the Gr2 seed and its indicator. In order to avoid random seed generation during initialization of the apparatus, it is also possible to provide for default seed values with corresponding indicators to be written in the factory in the nonvolatile memory of the apparatus.
La figure 3 représente l'évolution des valeurs de graine dans un exemple de procédé selon l'invention. Les colonnes de gauche indiquent les valeurs d'une graine GrI et de son indicateur de validité. Les colonnes de droite indiquent les valeurs d'une graine Gr2 et de son indicateur de validité. Les valeurs représentées correspondent aux valeurs présentes dans la mémoire non volatile lors d'une mise sous tension de 1'appareil. Lors de la première mise sous tension illustrée à l'instant tl, GrI présente la valeur hexadécimale FFFF, son indicateur est un CRC dont la valeur est correcte. Gr2 présente une valeur quelconque et le CRC associé présente une valeur non correcte. Lors de la mise à jour, seule GrI est déterminée comme valide. GrI est donc sélectionnée comme première graine pour la mise à
jour. La fonction déterministe est donc appliquée à GrI . La seconde graine et son CRC sont alors écrits dans l'emplacement de la mémoire volatile dédié à Gr2. Dans l'exemple, la fonction déterministe incrémente la valeur de graine de 1. Le résultat de la fonction déterministe est donc 0000.FIG. 3 represents the evolution of the seed values in an exemplary method according to the invention. The left columns show the values of a GrI seed and its validity indicator. The columns on the right indicate the values of a seed Gr2 and its validity indicator. The values shown correspond to the values present in the non-volatile memory when the device is turned on. During the first power-up illustrated at time t1, GrI has the hexadecimal value FFFF, its indicator is a CRC whose value is correct. Gr2 has any value and the associated CRC has an incorrect value. When updating, only GrI is determined to be valid. GrI is therefore selected as the first seed for day. The deterministic function is therefore applied to GrI. The second seed and its CRC are then written in the location of the volatile memory dedicated to Gr2. In the example, the deterministic function increments the seed value by 1. The result of the deterministic function is therefore 0000.
Ces valeurs sont donc présentes dans la mémoire non volatile lors de la seconde mise sous tension à l'instant t2. Lors de la mise à jour, GrI et Gr2 sont déterminées valides .These values are therefore present in the non-volatile memory during the second power up at time t2. When updating, GrI and Gr2 are valid.
Dans l'exemple simplifié de la figure 3, la suite est une suite arithmétique de raison 1. Le nombre de bits de codage d'une graine étant prédéfini, la suite appliquée à la valeur maximum codée aboutit à la valeur minimum codée : ainsi, la valeur FFFF codée sur deux octets aboutit à la valeur 0000. On prévoit dans ce cas des exceptions pour les valeurs extrêmes: lorsqu'une graine atteint la valeur maximum codée, elle sera considérée comme inférieure à la valeur minimum codée. Dans l'exemple précédent, par exception 0000 sera considérée comme supérieure à la valeur FFFF. Des erreurs lors de la sélection de la première graine sont ainsi évitées.In the simplified example of FIG. 3, the sequence is an arithmetic sequence of reason 1. Since the number of coding bits of a seed is predefined, the sequence applied to the maximum coded value results in the minimum coded value: thus, the double-byte value FFFF results in the value 0000. In this case, exceptions are made for the extreme values: when a seed reaches the maximum value, it will be considered as less than the minimum value. In the above example, exception 0000 will be considered greater than FFFF. Errors in the selection of the first seed are thus avoided.
Selon le mécanisme précédemment décrit, Gr2 est sélectionnée comme première graine car elle est identifiée comme la dernière graine valide. La graine Gr2 subit donc une incrémentation. La valeur obtenue (0001) et le CRC associé sont écrits dans l'emplacement de la mémoire GrI .
Ces valeurs sont présentes dans la mémoire non volatile lors de la troisième mise sous tension à l'instant t3. Lors de la mise à jour, GrI et Gr2 sont déterminées valides . GrI est identifiée comme la dernière graine valide. La valeur GrI est incrémentée en mémoire vive. Une perturbation intervient durant l'écriture de la valeur incrémentée dans l'emplacement de Gr2.According to the previously described mechanism, Gr2 is selected as the first seed because it is identified as the last valid seed. The seed Gr2 is therefore incremented. The resulting value (0001) and the associated CRC are written to the location of the GrI memory. These values are present in the non-volatile memory during the third power up at time t3. When updating, GrI and Gr2 are valid. GrI is identified as the last valid seed. The value GrI is incremented in RAM. A disturbance occurs during the writing of the incremented value in the location of Gr2.
Lors de la quatrième mise sous tension à l'instant t4, la valeur de GrI est encore 0001 et la valeur de Gr2 est une valeur quelconque. Du fait de l'erreur d'écriture, Gr2 est déterminée comme non valide du fait de son CRC. GrI est donc sélectionnée comme première graine. GrI est incrémentée en mémoire vive. La valeur 00 02 et son CRC sont alors inscrits en remplacement de Gr2 dans la mémoire non volatile. Lors de la cinquième mise sous tension à l'instant t5, ces valeurs de graine sont ainsi présentes dans la mémoire non volatile.At the fourth power up at time t4, the value of GrI is still 0001 and the value of Gr2 is any value. Because of the write error, Gr2 is determined to be invalid because of its CRC. GrI is therefore selected as the first seed. GrI is incremented in RAM. The value 00 02 and its CRC are then registered instead of Gr2 in the non-volatile memory. During the fifth power-up at time t5, these seed values are thus present in the non-volatile memory.
Bien que les exemples décrits n'utilisent que deux graines, l'homme du métier peut également utiliser un plus grand nombre de graines en fonction des applications souhaitées . Les tailles des graines et des indicateurs de validité d'écriture sont également fournies à titre d'exemple.
Although the described examples use only two seeds, the skilled person can also use a larger number of seeds depending on the desired applications. Seed sizes and write validity flags are also provided as examples.