Brevet FR2879778A1 — publié le 20060623

PROCEDE DE TRAITEMENT DE SIGNATURE DE DONNEES L'invention se rapporte à des dispositifs de traitement sécurisés qui vérifient le bon déroulement d'un programme en vérifiant des signatures de données. Plus particulièrement, l'invention se rapporte à un procédé de traitement desdites signatures de données. Les dispositifs de traitement de données sécurisés sont utilisés afin de vérifier leur bon fonctionnement, notamment dans les transports ferroviaires afin d'assurer la sécurité des passagers. Un exemple de dispositif de traitement de données sécurisé est, par exemple décrit dans la demande de brevet français publiée sous le numéro 2 799 018. Dans cette demande, un système informatique sécurisé est décrit. Un tel système se caractérise par l'association d'une signature à chaque donnée que l'on souhaite sécuriser. Lors du traitement effectué sur les données, un traitement parallèle est effectué sur les signatures à l'aide d'opérations similaires à celles utilisées pour les données. Une comparaison entre les traitements effectués directement sur les données et les traitements effectués sur les signatures permet de valider un bon déroulement du programme. En effet, sli le traitement effectué sur les données n'est pas conforme au traitement effectué sur les signatures, cela indique qu'une erreur de fonctionnement s'est produite. En cas d'erreur de fonctionnement, on peut alors interrompre le programme et mettre le dispositif dans un état complètement sécuritaire. La demande française, citée précédemment dévoile une architecture de dispositifs sécurisés. Cette architecture présente un inconvénient principal qui est la vitesse de traitement. En effet, les opérations effectuées sur les signatures pour être analogues ou similaires aux opérations effectuées sur les données se trouvent par nature être plus complexes. Les moyens mis en oeuvre pour effectuer les calculs sur les signatures doivent alors être plus puissants que les moyens mis en oeuvre pour effectuer le traitement des données. Les systèmes de traitement de données étant de plus en plus puissant, il devient très difficile de réaliser un dispositif de traitement de signatures performant vis à vis des unités de traitement actuelles. Il est suggéré dans la demande de brevet français d'utiliser une structure dite pipeline pour le traitement des signatures. Cependant, la structure pipeline n'est pas dévoilée et l'utilisation d'une structure pipeline avec l'enseignement de la demande de brevet français présente également un inconvénient. Les structures de type pipeline sont des structures de calcul pour lesquels une opération est découpée en une pluralité de sous-opérations très élémentaires. Chaque sous-opération peut être réalisés en un temps très bref. Cela permet de commencer un calcul à l'issue de chaque temps très bref. Les opérations sont ainsi morcelées sur une pluralité de cycle d'horloge mais peuvent être commencées à chaque cycle d'horloge. Par profondeur de pipeline, il faut comprendre le nombre de cycle d'horloge nécessaire pour réaliser intégralement une opération. Le traitement effectué sur les signatures nécessite de connaître la signature des opérandes pour calculer la signature résultante. Or l'une des opérandes peut être un résultat d'un calcul immédiatement précédent. Dans le cas d'une architecture de type pipeline relativement profonde, cela nécessite de vider intégralement le pipeline entre cieux opérations de calcul. Si le pipeline est relativement profond, par exemple nécessitant quelques centaines de cycles pour réaliser une opération, cela entraîne une perte de temps considérable au niveau du traitement. L'invention propose une solution au problème précédemment évoqué. Selon l'invention, les opérations effectuées sur les signatures ne sont effectuées qu'avec des signatures directement encodées à partir des données. Ainsi, si une opération comporte un opérande qui dépend d'un résultat précédent, l'opération effectuée sur les signatures va utiliser la signature calculée à partir du résultat de l'opération effectuée sur les données au lieu d'utiliser la signature calculée à partir de signature à l'aide d'une opération associée. L'invention est un procédé de traitement de signatures de données pendant le déroulement d'un programme effectuant des opérations sur les données. Chaque signature est représentative d'une donnée associée. A chaque opération effectuée sur des données correspond une opération associée sur des signatures associées auxdites données, la signature d'un résultat d'opération sur au moins une donnée d'entrée correspondant au résultat de l'opération associée sur la signature associée à la donnée d'entrée. Le traitement des opérations associées se fait par un fractionnement d'opération de type pipeline. Chaque opération associée dont un opérande dépend d'un résultat précédent est calculée à partir de la signature dudit résultat précédent obtenue par un encodage direct dudit résultat précédent. Afin de simplifier la réalisation des différents circuits mettant en oeuvre un tel procédé, la signature d'une donnée comporte une composante produite par un générateur pseudo aléatoire qui évolue lors de chaque opération. Pour une opération donnée, on calcule, d'une part la signature résultante de l'opération réalisée sur les signatures des opérandes et d'autre part la signature correspondant à l'encodage du résultat calculée directement sur les données. Les deux signatures sont ensuite comparées et on mémorise le résultat de la comparaison dans un traceur du déroulement du programme. Une telle solution permet de simplifier fortement la conception, car le résultat de la comparaison se trouvant être prédictible, il n'est plus besoin d'avoir un résultat rigoureusement identique. Ainsi, pour une opération donnée sur au moins un opérande: on calcule, d'une part, une signature encodée à partir du résultat, et d'autre part, une signature calculée obtenue par l'opération associée sur au moins une signature d'opérande; on compare la signature encodée du résultat avec la signature calculée du résultat, on mémorise le résultat de la comparaison dans un traceur de déroulement de programme par accumulation avec les résultats de comparaisons précédemment réalisées. L'utilisation d'un traceur prédictible peut néanmoins poser quelques problèmes dans le cas d'utilisation de boucles ou de branchement conditionnels. En effet, lors du déroulement d'une boucle, les données sont modifiées plusieurs fois et il est difficile d'avoir des signatures sur des mêmes données dont les résultats doivent être prédictibles à l'identique lorsque l'on réalise plusieurs fois le même calcul sur lesdites données. A cet effet, lorsque le programme comporte une boucle: on compense le générateur pseudo aléatoire à la fin de chaque itération de boucle pour le ramener à sa valeur en début de boucle; puis on réaffecte, à la fin de chaque itération de boucle, les signatures de toutes les données qui ont été modifiées dans la boucle. Un problème similaire se pose pour les branchements conditionnels ou une suite d'opérations peut se dérouler dans une première ou une deuxième branche suivant le branchement effectué. Suivant la branche qui va être prise par le programme, la comparaison des résultats peut influer sur les résultats suivants, à cause d'une part de la longueur de branche qui peut différer d'une branche à l'autre, et d'autre part des résultats qui peuvent être modifiés suivant la branche prise. A cet effet, lorsque le programme comporte un branchement conditionnel pouvant réaliser une suite d'opérations dans une première branche ou une deuxième branche: on compense le générateur pseudo aléatoire après avoir effectué les instructions de la première ou de la deuxième branche pour le ramener à une valeur indépendante de la branche prise; on recalcule les signatures en réaffectant toutes les données qui ont été modifiées dans la branche exécutée ainsi que toutes les données qui auraient pu être modifiée dans l'autre branche; on introduit une compensation dans le traceur afin de rendre celui-ci indépendant de la branche qui vient d'être utilisée. Selon un autre aspect, l'invention est également un dispositif de traitement de signatures de données au cours du déroulement d'un programme effectuant des opérations sur les données, chaque signature étant représentative d'une donnée associée. Chaque opération effectuée sur des données correspond à une opération associée sur des signature associées auxdites données, la signature d'un résultat d'opération sur au moins une donnée d'entrée correspondant au résultat de l'opération associée sur la signature associée à la donnée d'entrée. Ledit dispositif comporte: un circuit d'encodage de signature apte à faire correspondre une signature à une donnée; un circuit de traitement ayant une architecture pipeline apte à effectuer les opérations associées de manière fractionnée à partir de signatures de donnée provenant du circuit d'encodage. Préférentiellement, le circuit d'encodage comporte un générateur pseudo aléatoire disposant de moyen d'évolution et de moyens de repositionnement. Le dispositif comporte une mémoire de signature apte à mémoriser les signatures provenant du circuit d'encodage et qui fournit lesdites signatures au circuit de traitement. Le dispositif comporte en outre un circuit de comparaison et d'accumulation apte à comparer une signature provenant du circuit d'encodage et une signature provenant du circuit de traitement et à accumuler les résultats desdites comparaisons, ledit circuit de comparaison et d'accumulation fournissant en sortie un traceur de déroulement de programme représentatif du bon déroulement dudit programme. L'invention porte également sur un système de commande sécurisé comportant une unité centrale de traitement apte à effectuer au moins un programme de manière sécurisée; des moyens de sécurisation destinés à effectuer une vérification du bon déroulement dans l'unité centrale de traitement du programme sécurisé ; des moyens de validation de commandes apte à valider ou invalider les commandes produites par l'unité centrale de traitement en fonction du bon déroulement du programme. Les moyens de sécurisation comporte au moins un dispositif de traitement de signature comme précédemment décrit. L'invention sera mieux comprise et d'autres particularités et avantages à la lecture de la description qui va suivre, en faisant référence aux figures annexées parmi lesquelles: la figure 1 représente un système de traitement de données sécurisé, la figure 2 représente un coprocesseur qui effectue un traitement sur les signatures de données, la figure 3 est un exemple de générateur pseudo aléatoire tel qu'utilisé pour l'encodage des données, la figure 4 représente un exemple d'organigramme réalisé pour compenser le coprocesseur de la figure 2 dans le cas d'une boucle, la figure 5 représente un organigramme pour compenser le fonctionnement du coprocesseur de la figure 2 dans le cas d'un branchement conditionnel. La figure 1 représente un système de commande sécurisé qui comporte un circuit d'entrées sécuritaires 1, une unité de traitement 2, un coprocesseur sécuritaire 3, un contrôleur. de sécurité 4, un circuit de génération d'horloge 5, un circuit d'alimentation sécuritaire 6 et un circuit de sorties sécuritaires 7. Le circuit d'entrées sécuritaires 1 sert à recevoir toutes les entrées et à vérifier si celles-ci sont bien des entrées valides. Les entrées sont ensuite mises en forme et fournies à l'unité de traitement 2. L'unité de traitement 2 est une unité de traitement conventionnelle qui comporte, par exemple, un processeur, une mémoire et d'autres périphériques. L'unité de traitement 2 va fournir des sorties Sf au circuit de sorties sécuritaires 7, mais va également fournir au coprocesseur sécuritaire 3 les données Xf, Yf et Zf sur lesquelles le traitement est effectué ainsi que les adresses @, les opérations Op réalisées sur ces données, et des données de compensations Comp propres à certaines parties du programme. Le coprocesseur sécuritaire 3 est un coprocesseur qui réalise des traitements sur les signatures de données afin de vérifier si celles-ci sont conformes au bon déroulement du programme. D'autre part le coprocesseur sécuritaire 3 va fournir une signature des sorties ES, ainsi qu'un traceur T et une date Dcp, de manière régulière, au contrôleur de sécurité 4. Le contrôleur de sécurité 4 va régulièrement tester si la signature des sorties ES, le traceur T et la date Dcp fournis par le coprocesseur sont conformes à ce qui est prédictible lors d'un bon fonctionnement du programme. Le contrôleur de sécurité 4 va également fournir des dates Dcs au circuit de sortie sécuritaire 7 pour recevoir en retour une signature des sorties ESr datée avec la date fournie Dcs. Le contrôleur de sécurité 4 compare régulièrement la signature des sorties ES fournie par le coprocesseur sécuritaire 3 et la signature des sorties ESr fournie par le circuit de sortie sécuritaire 7. Le contrôleur de sécurité 4 contrôle également la conformité du traceur T, la conformité des dates Dcp et Dcs fournies par le coprocesseur et fournies par le circuit de sorties sécuritaires 7 afin de générer une séquence de bits pseudo aléatoire Sbpa à un circuit d'horloge 5. Le circuit d'horloge 5, produit différents signaux de pilotage pour piloter le circuit d'alimentation 6 qui est, par exemple un onduleur tel que décrit dans US-A-5 510 971. La séquence de bits pseudo aléatoire Sbpa est validée par le circuit d'horloge 5 pour que celui-ci fournisse les bons signaux de pilotage. Le circuit de sorties sécuritaires 7 va quant à lui valider les sorties fournies par l'unité de contrôle et contrôler leur bonne application. Dans le cas d'une défaillance du système, le contrôleur de sécurité 5 va générer une séquence de bits pseudo aléatoire modifiée par l'une des données de sécurité reçue, à savoir les signatures des sorties ES ou ESr fournies par le coprocesseur sécuritaire 3 ou par le circuit de sorties sécuritaires 7 ou par le traceur T ou une incohérence dans les dates Dcp ou Dcs. Si la séquence de bits pseudo aléatoire Sbpa n'est pas conforme à celle attendue par le circuit d'horloge, l'horloge 5 va se désynchroniser et envoyer des signaux de cadencement au circuit d'alimentation 6 qui ne permettront pas de synchroniser correctement l'onduleur et vont ainsi abaisser la tension d'alimentation ne permettant plus d'alimenter le circuit de sortie sécuritaire 7 mettant ainsi toutes les sorties sécurisées Ssec à un état de basse énergie considéré comme un état sécuritaire. Un système similaire d'architecture est déjà décrit dans la demande française n 2 799 018. L'homme du métier peut s'y reporter pour avoir des détails d'explication supplémentaires sur le fonctionnement général de ce système. L'invention portant plus particulièrement sur le traitement des signatures dans le coprocesseur sécuritaire 3 à architecture pipeline, il va être à présent détaillé le coprocesseur 3 à l'aide de la figure 2. Un multiplexeur 100 reçoit les données, les adresses, les opérations ainsi que les données de compensation de l'unité de traitement 2. Le multiplexeur 100 reçoit en outre de l'unité de traitement 2 une information qui lui précise s'il s'agit de données Xf, Yf, Zf, d'adresses @, d'opérations Op ou de données de compensation Comp. En fonction du type de données reçues, le multiplexeur 100 va les orienter selon quatre chemins possibles. Un premier chemin est celui des données de compensation Comp qui sont fournies à un circuit d'encodage 101. Les données d'adresses @ sont fournies à un circuit de retard 102 puis à une mémoire de signature 103 après avoir été retardé dans le circuit de retard 102. Le circuit de retard 102 sert à compenser le retard qui est engendré par le circuit d'encodage 101. Les données notées Xf, Yf, Zf sont fournies d'une part au circuit d'encodage et d'autre part à un circuit de retard 103. Lorsqu'une donnée à encoder est fournie au circuit d'encodage 101, celui-ci va l'encoder et fournir un peu après une signature Xce, Yce ou Zce. La signature Xce, YCe ou Zce est fournie à la mémoire 103 et arrive de manière synchrone avec l'adresse @ correspondante provenant du circuit de retard 102. Elle est ainsi mémorisée et immédiatement sortie de la mémoire 103. Pour les signatures Xce, Yce déjà encodées, seules les adresses @ peuvent être fournies mais celles-ci sont également retardées dans le circuit de retard 102 afin de permettre à la mémoire de fournir à une unité de traitement codé 105 les signatures Xce, Yce, Zce qui vont être traitées de manière simultanée. Les opérations Op sont fournies par le multiplexeur 100 à un circuit de retard 106 qui retarde les opérations Op afin que celles-ci arrivent de manière synchrone avec les signatures Xce, Yce et Zce. Les données Xf, Yf, Zf et les signatures qui leurs sont associés Xce, Yce, Zce sont fournies simultanément à l'unité de traitement codé 105. Par ailleurs, les opérations Op retardées sont fournies à un registre à décalage 107 qui mémorise les opérations Op qui se déroulent simultanément dans l'unité de traitement codé 105. Les différents codes opératoires correspondant aux opérations Op vont commander directement, à partir du registre à décalage 107, les différents étages de l'unité de traitement codé qui est comme précédemment dit une unité de type pipeline. L'unité de traitement codé comporte comme toute architecture pipeline une alternance de registres et de couches logiques. Lors de chaque cycle de l'horloge, toutes les données présentes clans un registre vont se déplacer dans le registre suivant en traversant la couche logique qui est contrôlée par l'opération Op mémorisée dans un registre correspondant du registre à décalage 107. Parallèlement à l'unité de traitement codé 105 se situe un circuit de retard 108 qui retarde les signatures encodées Zce qui correspondent à des signatures de résultats calculées par le circuit d'encodage 101 à partir de la valeur Zf du résultat fourni par l'unité de traitement 2. L'unité de traitement codé 105 réalise les différentes opérations effectuées sur les signatures d'opérande, généralement Xce et Yce et fournit une signature résultante Zcu. Un circuit de comparaison et d'accumulation 109 est relié d'une part au circuit de retard 108, d'autre part à l'unité de traitement codé 105 afin de recevoir d'une part une signature de résultat encodée Zce et d'autre part un résultat calculé de signature Zcu afin de les comparer et d'accumuler cette comparaison. Le résultat accumulé de la comparaison est ensuite stocké dans un registre de traceur 110. Par ailleurs, l'unité de traitement codé dispose également d'une sortie qui fournie un résultat une signature de sortie. Les signatures de sortie sont ensuite accumulées dans un accumulateur de sortie 111. Le circuit d'encodage 101 effectue un encodage de la donnée Zf fournies par l'unité de traitement 2. Les données entrantes Xf, Yf, Zf où le f correspond à la partie fonctionnelle de la donnée sont soit des opérandes notées Xf, Yf soit des résultats Zf. Par ailleurs, lorsque les entrées sont des opérandes, celles-ci peuvent être des constantes rentrées une fois pour toute à l'initialisation du programme dans la mémoire 103 ou des résultats de calcul précédents aussi stockés dans la mémoire 103. Les données Xf et Yf sont qui ont été préalablement fournies au circuit d'encodage 101, soit lors d'une initialisation ou comme résultats des calculs qui précèdent. Les données Zf sont des données correspondant à des résultats d'opérations, celles-ci sont fournies systématiquement lors de chaque opération afin d'être encodées sous forme de signatures de données Zce pour être, d'une part, stockées dans la mémoire et servir pour un prochain calcul et, d'autre part, pour être fournies au circuit de retard 108 afin d'être comparées au résultat Zcu calculé à partir des opérandes de ladite opération dans le circuit 109. Le circuit d'encodage 101 les encode en associant une signature de donnée également appelée partie codée qui comprend une signature de la valeur fonctionnelle, une signature d'encodage dite statique et une date. Une donnée encodée X peut s'écrire ainsi: X = Xf + Xce avec Xf la partie fonctionnelle de la donnée et Xce la partie codée définie ainsi Xce = (Xf x 2k + Bxe + De) mod A pour lequel k est un entier tel que 2k est supérieur à A, A est un nombre premier de grande taille, par exemple de 48 bits; Bxe est une valeur fournie par un générateur pseudo aléatoire 120 situé dans le circuit d'encodage 101; De est la date attribuée par le circuit d'encodage; et mod représente l'opération modulo qui correspond au reste entier de la division par A. Toutes les signatures encodées sont stockées dans la mémoire de signature 103. Par la suite lorsqu'une donnée est utilisée comme opérande si celle-ci est déjà présente dans la mémoire de signature 103, seule l'adresse de cette donnée est fournie de sorte que, à l'aide de l'adresse, la mémoire puisse la fournir directement à l'unité de traitement codé 105 avec sa date de création. Ainsi lors de la création du programme, mis à part la partie relative à la valeur fonctionnelle des données, le reste de la signature se trouve être une signature prédictible. Lorsqu'un résultat d'opération est encodé, le résultat est fourni, d'une part à la mémoire RAM 103 qui le fournit simultanément à l'unité de traitement codé 105 mais, d'autre part au circuit de retard 108 pour pouvoir être comparé par la suite au résultat de l'opération effectuée sur les signatures qui, normalement, doit concorder avec une différence prédictible avec celle du résultat encodé. Les valeurs fonctionnelles Xf, Yf, Zf sont également fournies à l'unité de traitement codé 105, mais uniquement pour des opérations qui nécessitent de connaître leur vraie valeur, par exemple lorsqu'il s'agit d'une valeur qui détermine une branche à suivre au cours d'une opération de branchement. L'unité de traitement codé 105 reçoit les données codées et datées. Afin de faciliter les calculs, les dates des données sont supprimées au cours des opérations élémentaires en début de traitement dans unité de traitement codé. Une date est réattribuée en fin du traitement codé afin de pouvoir dater ladite opération. L'unité de traitement codé 105 effectue sur les signatures des opérations similaires à celles effectuées sur les données fonctionnelles par l'unité de traitement 2. Toutefois, ces opérations sont faites modulo A. Pour une opération donnée Op réalisée sur les parties fonctionnelles Xf et Yf de deux opérandes et ayant pour résultat Zf, l'unité de traitement codé fait correspondre un résultat codé calculé de type: Zcu = (Xf Op Yf, Gop(Bx, By)+ Dutc) mod A. Où Xf Op Yf est calculé directernent à partir des parties codées Xc et Yc; où Gop(Bx By) correspond à l'opération réalisée sur les parties fonctionnelles codées transposées sur les signatures statiques associées; et où Dutc est la date donnée par l'unité de traitement codé 105. Ainsi, pour une addition Xf + Yf = Zf, le calcul sur les signatures est du 10 type Zcu = (Xce + Yce) mod A. Si l'on décompose l'opération effectuée on obtient Zcu =(Xfx2k+Yfx2k+Bxe+Bye+Dutc) modA Afin de simplifier le traitement, les opérandes sont dédatées avant de rentrer dans l'unité de traitement codé pour être redatées dans cette unité de traitement à l'aide d'une date fournie par l'unité de traitement codé qui se trouve être décalée par rapport à la date fournie par l'encodeur 101. Le circuit de comparaison et d'accumulation 109 va recevoir la donnée Zce qui correspond à l'encodage du résultat Zf et également la donnée Zcu qui correspond à l'opération effectuée sur les signatures des opérandes. Afin de s'affranchir de la valeur des données et de vérifier que le calcul a été correctement effectué, ces deux signatures de résultat codé sont comparées l'une à l'autre puis accumulées afin de ne garder qu'une signature globale du traitement mémorisée dans un traceur T représentatif du déroulement du programme. Le traceur T est de la forme: T(i) = a x (Zcu Zce + T(i-1)) mod A Soit: T(i) = a x ((Xf Op Yf) x 2k Zf x 2k + Gop(Bxe, Bye) Bze +Dutc De + T(i-1)) mod A Où (Xf Op Yf) x 2k = Zf x 2k, si l'opération est correcte, donc: - 12 - T(i) = a x (Gop(Bxe, Bye) Bze Dutc De + T(i-1)) mod A Bxe, Bye et Bze sont produits par le générateur pseudo aléatoire en fonction du nombre d'opérations réalisées par le programme. Ces valeurs sont donc prédictibles. De plus, Gop est l'opération associée réalisée sur les signatures statiques Bxe et Bye. Le résultat de cette opération est également connu d'avance. La différence entre Gop(Bxe, Bye) et Bze est donc également un résultat qui est connu lors de la conception du programme, et qui est indépendant des valeurs fonctionnelles Xf, Yf et Zf des données X, Y et Z. Par ailleurs, la date Dutc fournie par l'unité de traitement codé et la date De fournie par l'encodeur sont des dates différentes mais dont l'écart est également connu car il correspond à la profondeur du pipeline de l'unité de traitement codé 105. Ainsi, le traceur T(i) correspondant à la ième instruction est un traceur qu'il est possible de prévoir à l'avance lorsque le programme se déroule correctement. De plus le traceur T(i) dépendant du traceur précédent T(i-1), toute erreur de traitement est mémorisée et donc se répercute dans tous les traceur qui suivent. Pour vérifier le bon fonctionnement du programme, il suffit alors de comparer, à des instants donnés, le traceur T(i) à des valeurs attendues de ce traceur. C'est ce qui est réalisé par le circuit contrôleur de sécurité 4. Le traceur T(i) étant une accumulation, d'une part des signatures fournies par le générateur pseudo aléatoire 120, et d'autre part des résultats d'une opération sur des valeurs sortant également de ce générateur pseudo aléatoire à des instants connus, il est tout à fait calculable à partir d'une analyse du programme faite lors de la conception du programme. Par ailleurs les différences de dates entre la date fournie par l'encodeur 101 et la date fournie par l'UTC 105 correspond à une constante qui est elle-même connue. II résulte de tout ça que le traceur a tout instant du programme change de valeur et prend une valeur qui est prédictible. Astucieusement, le circuit de comparaison et d'accumulation 109 comporte deux circuits d'accumulation 151 et 152 et un circuit de soustraction 153. Le circuit d'accumulation 151 reçoit les signatures de résultat encodées Zce pour réaliser une accumulation Sae de ces signatures de résultat encodées telles que: Sae(i) = a x (Zce + Sae(i-1)) mod A Le circuit d'accumulation 152 reçoit les signatures de résultat calculées Zcu pour réaliser une accumulation Sau de ces signatures de résultat calculées telles que: Sau(i) = a x (Zcu + Sae(i-1)) mod A Le circuit de soustraction 153 soustrait alors l'accumulation encodée Sae à l'accumulation calculée Sau pour obtenir le traceur T: T(i) = (Sau(i) - Sae(i)) mod A Le traceur est mémorisé à des instants choisis de vérification dans le registre de traceur 110. L'homme du métier remarquera que le système n'est pas bouclé et que pour tout calcul, une donnée doit être préalablement encodée. Grâce à cette architecture, il n'est pas nécessaire d'attendre le résultat d'uneopération sur des signatures pour réutiliser la signature de cette opération dans un prochain calcul. Toute opération est réalisée à partir de signature sur des données qui sont encodées y compris si ces données sont des résultats. Dans le cas d'opération de branchement ou d'opération de boucles, pour conserver le caractère prédictible de la composante de signature fournie par le générateur pseudo aléatoire 120, il peut être nécessaire de pouvoir compenser celui-ci. A titre d'exemple, il est donné un mode de réalisation du générateur pseudo aléatoire 120 sur la figure 3. Le générateur pseudo aléatoire est principalement composé d'un registre 200 qui mémorise la valeur pseudo aléatoire courante. Cette valeur pseudo aléatoire évolue par une multiplication par deux modulo B réalisée dans un générateur polynomial 201. B sert de polynôme générateur pour le générateur pseudo aléatoire selon une technique connue. Un multiplexeur 202 permet de reboucler la sortie du générateur polynomial 201 sur l'entrée du registre 200. La compensation va s'effectuer en additionnant bit à bit, à l'aide d'un additionneur de type OU- Exclusif, une valeur de compensation Comp. La sortie du circuit d'addition 203 est reliée à l'entrée du registre 200 par l'intermédiaire du multiplexeur 202. - 14 - Dans le cas d'une boucle ou d'un branchement, il est préférable d'arriver à une valeur connue indépendante du déroulement de la boucle ou du branchement, notamment afin de simplifier la vérification du traceur. A cet effet, la valeur de compensation est une valeur qui se déduit de la lecture du programme pour ramener la valeur du registre à une valeur connue. L'opération est effectuée par une addition bit à bit de type ou exclusif, celle-ci correspond au masque à effectuer sur le contenu du registre pour que celui-ci revienne à la bonne valeur. A titre d'exemple, dans le cas d'une boucle illustrée à l'aide de la figure 4, il va être explliqué comment est réalisée une telle compensation. A l'issue de la conception du programme de traitement, on effectue une analyse du programme. Lorsque l'on trouve sur une boucle, on mémorise en début de boucle la valeur du générateur pseudo aléatoire 102. Puis on encode toutes les variables qui vont être amenées à changer de valeur au cours de la boucle avant de commencer celle-ci au cours d'une étape 301. Au cours de cette réaffectation, le générateur pseudo aléatoire va évoluer lors de chaque affectation de variable et affecter une signature statique qui lui est propre. La boucle commence ensuite par un test de réalisation de boucle 302, si la boucle doit être réalisée, alors une série d'instructions de boucles est réalisée au cours d'une étape 303. Les instructions réalisées au cours de l'étape 303 peuvent être plus ou moins nombreuses et dépendent du programme que l'on souhaite réaliser. Lors du déroulement de cette étape 303, le générateur pseudo aléatoire a évolué lors de chaque instruction. Le contenu de ce générateur n'est donc plus le même que lors du début de la boucle. Or, pour que le déroulement reste toujours prédictible à l'intérieur de la boucle indépendamment du nombre d'itérations de boucle, il est préférable qu'à chaque itération de boucle, ce générateur se trouve positionné à la même valeur pour une même opération afin de s'affranchir du nombre d'itération. De même en fin de boucle, il est préférable que la valeur du générateur soit indépendante du nombre d'itérations réalisées par la boucle. Il est préféré de compenser le générateur pseudo aléatoire 120 à l'issue de chaque itération de boucle afin de le ramener à sa valeur de début de boucle. Pour cela, on effectue une compensation du générateur au cours d'une étape 304. La compensation est réalisée relativement simplement à l'aide d'une addition bit à bit faite par des OU-Exclusif. Pour obtenir la valeur de compensation Comp à additionner au contenu du générateur pseudo aléatoire, il suffit de réaliser une addition bit à bit de la valeur mémorisée du contenu du générateur pseudo aléatoire avec la valeur obtenue en fin de boucle, l'addition se faisant à l'aide de OU- Exclusif. La valeur de début de boucle et de fin de boucle est obtenue en simulant le générateur pseudo aléatoire pendant l'analyse du programme et en l'incrémentant du nombre d'instructions qui se sont déroulées durant la boucle. L'utilisation d'une addition bit à bit à l'aide d'un OU- Exclusif se trouve être la manière la plus simple de repositionner le générateur lors de l'étape 304. Afin que les signatures statiques des variables soient également indépendantes de l'itération de boucle, toutes les données qui ont changé de valeur au cours du déroulement des instructions de la boucle sont alors réaffectées à elles-mêmes au cours d'une étape 305. En effet les données étant réaffectées à elles-mêmes, on recalcule systématiquement leur signature mais celles-ci étant affectées à elles-mêmes, seule va changer dans leur signature la signature statique qui va être ramenée à la signature statique qu'elles avaient en début de boucle suite à l'étape 301. Seule la date n'est pas compensée afin de garder une trace temporelle représentative du déroulement. De façon préférée, le traceur T est aussi compensé au cours d'une étape 306. La compensation du traceur consiste à additionner au traceur une valeur qui permette de le ramener à une valeur prédéterminée de début de boucle. Pour obtenir la valeur de compensation du traceur, il faut émulé l'évolution du traceur pendant l'itération d'une boucle et déterminer à partir de cette émulation une valeur de correction à y ajouter. Cette valeur de correction est additionnée au traceur par la fourniture d'une donnée correspondante en entrée de l'unité de traitement codé 105 accompagnée d'un code d'opération Op qui va transférer cette donnée sur la sortie Zcu de l'unité de traitement codé 105 sans la modifier. Parallèlement la valeur zéro sera mise dans le circuit de retard 108, de sorte que la valeur de correction soit accumulée dans le traceur comme s'il s'agissait d'un résultat de comparaison. - 16 - Lorsque la boucle se finit, les données qui se sont comportées en variables au cours de la boucle, sont, à nouveau, réaffectées à elles-mêmes afin d'obtenir des signatures de sortie de boucle propre à l'opération de sortie de boucle et de restaurer une date correspondant au programme englobant la boucle. Cette mécanique de compensation présente un grand intérêt lorsque les boucles réalisent un nombre d'itérations variable. Toutefois, l'homme du métier comprendra qu'il n'est pas nécessaire de l'appliquer pour des boucles comportant un nombre d'itération fixé à l'avance. Dans le cas d'un branchement de programme conditionnel, deux séries d'instructions peuvent être réalisées. Bien évidement ces deux séries d'instructions sont différentes et ne produisent pas les mêmes effets sur le traceur. Il va être expliqué à l'aide de la figure 5 comment, selon un mode préféré, le traceur et les variables sont ramenées à des valeurs prédictible indépendamment de la branche de programme prise. Au cours de l'analyse du programme, lorsqu'un test de branchement conditionnel 400 est détecté, la valeur du témoin de test est insérée dans le générateur pseudo aléatoire 120, ce qui permet de différencier les signatures produites pour les différentes branches. Suivant le résultat du test 400, le programme effectue une série d'instruction correspondant à une première branche du programme au cours d'une étape 401 ou une série d'instruction correspondant à une deuxième branche du programme au cours d'une étape 402. Suivant la branche prise, le contenu du générateur pseudo aléatoire est donc différent. Il convient alors de compenser le générateur pseudo aléatoire au cours d'une étape 403 si la première branche a été prise, ou au cours d'une étape 404 si la deuxième branche a été prise. Les étapes 403 et 404 diffèrent uniquement par la valeur de compensation Comp qui est calculée pour ramener le contenu du générateur pseudo aléatoire à une valeur prédéterminé, par exemple par tirage aléatoire. La compensation se calcule et s'effectue d'une manière similaire à celle décrite précédemment pour la compensation de boucle. Ensuite, il convient de rendre les variables indépendantes de la branche prise. Des étapes 405 et 406 respectivement situées dans les première et deuxième branches réaffectent toutes les variables qui sont modifiée dans l'une ou l'autre branche. Les étapes 405 et 406 sont rigoureusement identiques. Il convient également de compenser le traceur au cours d'étapes 407 et 408 situées respectivement dans les première et deuxième branches. La compensation du traceur consiste à additionner au traceur une valeur propre à chaque branche afin que celui-ci ait la rnême valeur quelque soit la branche prise. La valeur à additionner au traceur dans l'une des branches peut se calculer simplement comme étant la valeur d'incrémentation du traceur pendant le déroulement de l'autre branche. Cette compensation de traceur est additionnée au traceur par la fourniture d'une donnée correspondant à la compensation à effectuer en entrée de l'unité de traitement codé 105 accompagnée d'un code d'opération Op qui va transférer cette donnée sur la sortie Zcu de l'unité de traitement codé 105 sans la modifier. Parallèlement la valeur zéro sera mise dans le circuit de retard 108, de sorte que la compensation soit accumulée dans le traceur comme s'il s'agissait d'un résultat de comparaison. L'homme du métier remarquera qu'il est possible de compenser le traceur n'importe quand dans la branche, y compris pendant les étapes 401 et 402 qui correspondent aux instructions de chaque branche. L'homme du métier remarquera également que le traceur n'est pas facilement utilisable tant que les étapes 401 ou 402 et respectivement 407 ou 408 n'ont pas été réalisée. Il est préférable de ne pas vérifier la conformité du traceur tant que le programme n'a pas, à nouveau, convergé. REVENDICATIONS 1. Procédé de traitement de signatures de données pendant le déroulement d'un programme effectuant des opérations sur les données, dans lequel chaque signature (Xce, Yce, Zce, Zcu) est représentative d'une donnée associée (Xf, Yf, Zf), dans lequel, à chaque opération effectuée sur des données correspond à une opération associée (Op) sur des signatures associées auxdites données, la signature d'un résultat d'opération (Zce) sur au moins une donnée d'entrée correspondant au résultat de l'opération associée (Zcu) sur la signature associée à la donnée d'entrée, dans lequel le traitement des opérations associées se fait par un fractionnement d'opération de type pipeline, et dans lequel chaque opération associée dont un opérande dépend d'un résultat précédent est calculée à partir de la signature dudit résultat précédent obtenue par un encodage direct dudit résultat précédent. 2. Procédé selon la revendication 1, dans lequel la signature d'une donnée encodée (Xce, Yce, Zce) à partir de la valeur de la donnée (Xf, Yf, Zf) comporte une composante (Bxe, Bye, Bze) produite par un générateur pseudo aléatoire qui évolue à chaque opération. 3. Procédé selon l'une des revendications 1 ou 2, dans lequel, pour une opération donnée (Op) sur au moins un opérande (Xf, Yf) : - on calcule, d'une part, une signature encodée (Zce) à partir du résultat (Zf) , et d'autre part, une signature calculée (Zcu) obtenue par l'opération associée (Op) sur au moins une signature d'opérande (Xce, Yce), - on compare la signature encodée du résultat avec la signature calculée du résultat, - on mémorise le résultat de la comparaison dans un traceur (T) de déroulement de programme par accumulation avec les résultats de comparaisons précédemment réalisées. 4. Procédé selon l'une des revendications 2 ou 3, dans lequel, lorsque le programme comporte une boucle: - on compense le générateur pseudo aléatoire à la fin de chaque itération de boucle pour le ramener à sa valeur en début de boucle, - puis on réaffecte, à la fin de chaque itération de boucle, les signatures de toutes les données qui ont été modifiées dans la boucle. 5. Procédé selon la revendication 3, dans lequel, lorsque le programme comporte un branchement conditionnel pouvant réaliser une suite d'opérations dans une première branche ou une deuxième branche: - on compense le générateur pseudo aléatoire après avoir effectué les instructions de la première ou de la deuxième branche pour le ramener à une valeur indépendante de la branche prise, - on recalcule les signatures en réaffectant toutes les données qui ont été modifiées dans la branche exécutée ainsi que toutes les données qui auraient pu être modifiée dans l'autre branche, - on introduit une compensation dans le traceur afin de rendre celui-ci indépendant de la branche qui vient d'être utilisée. 6. Dispositif de traitement (3) de signatures de données au cours du déroulement d'un programme effectuant des opérations sur les données, chaque signature étant représentative d'une donnée associée, chaque opération effectuée sur des données correspondant à une opération associée sur des signatures associées auxdites données, la signature d'un résultat d'opération sur au moins une donnée d'entrée correspondant au résultat de l'opération associée sur la signature associée à la donnée d'entrée, ledit dispositif comportant: - un circuit d'encodage (101) de signature apte à faire correspondre une signature à une donnée; - un circuit de traitement (105) ayant une architecture pipeline apte à effectuer les opérations associées de manière fractionnée à partir de signatures de donnée provenant du circuit d'encodage (101). - 20 - 7. Dispositif selon la revendication 6, dans lequel le circuit d'encodage (101) comporte un générateur pseudo aléatoire (120) disposant de moyen d'évolution (201) et de moyens de repositionnement (203). 8. Dispositif selon l'une des revendications 6 ou 7, qui comporte une mémoire (103) de signature apte à mémoriser les signatures provenant du circuit d'encodage (101) et qui fournit lesdites signatures au circuit de traitement (105). 9. Dispositif selon l'une des revendications 6 à 8, qui comporte en outre un circuit de comparaison et d'accumulation (109) apte à comparer une signature provenant du circuit d'encodage (101) et une signature provenant du circuit de traitement (105) et à accumuler les résultats desdites comparaisons, ledit circuit de comparaison et d'accumulation (109) fournissant en sortie un traceur de déroulement de programme représentatif du déroulement dudit programme. 10. Système de commande sécurisé comportant: - une unité centrale de traitement (2) apte à effectuer au moins un programme de manière sécurisée; - des moyens de sécurisation (3, 4, 5, 6) destinés à effectuer une vérification du bon déroulement dans l'unité centrale de traitement du programme sécurisé ; - des moyens de validation de commandes (7) apte à valider ou invalider les commandes produites par l'unité centrale de traitement (2) en fonction du bon déroulement du programme; caractérisé en ce que les moyens de sécurisation comporte au moins un dispositif de traitement de signature (3) selon l'une des revendications 6 à 9.