FR 2924550 A1 20090605 FR 0759464 A 20071130 PROCEDES ET DISPOSITIFS DE CRYPTAGE ET DE DECRYPTAGE D'UN MESSAGE DE DONNEES A CLE SECRETE ALEATOIRE DESCRIPTION 5 DOMAINE TECHNIQUE L'invention concerne le domaine de la cryptographie de données à clé secrète. L'invention peut notamment être utilisée dans tout type de processeur de traitement de l'information, par exemple 10 une carte à puce. ÉTAT DE LA TECHNIQUE ANTÉRIEURE Des algorithmes de cryptage sont utilisés dans des processeurs de traitement de l'information par exemple pour protéger des informations confidentielles 15 (dossier médical), pour autoriser l'accès à des services particuliers (télévision à péage) ou encore pour permettre d'identifier les personnes (passeport électronique). Ces processeurs font l'objet de manipulations frauduleuses, appelées communément 20 attaques, pour obtenir les clefs utilisées par les algorithmes de cryptage, pour connaître et/ou corrompre les informations confidentielles, pour accéder gratuitement à des services ou encore pour se faire passer pour un tiers. 25 Pour réaliser un cryptage des données, il est connu d'utiliser un algorithme appelé AES (� Advanced Encryption Standard �). La figure 1 représente schématiquement les étapes de codage de données mises en oeuvre par un algorithme AES. Les données à crypter sont tout d'abord coupées en blocs de 128 bits, représentés sous forme d'une matrice 4 X 4 (référence 2 sur la figure 1) de mots de 8 bits. L'algorithme AES utilise une clé secrète 4 dont la taille peut être égale à 128 bits, 192 bits ou encore 256 bits. Sur l'exemple de la figure 1, la clé 4 comporte 128 bits représentés sous la forme d'une matrice de taille 4 X 4. Lors de ce codage, l'algorithme exécute plusieurs ensembles d'étapes, appelés rondes, dont le nombre Nr dépend de la taille de la clé utilisée (Nr = 10 pour une clé de 128 bits, Nr = 12 pour une clé de 192 bits et Nr = 14 pour une clé de 256 bits). Quelque soit la taille de la clé utilisée, l'algorithme réalise une ronde initiale consistant en une étape d'addition 6 d'une clé de ronde, qui est la clé secrète 4, avec des données 2. Cette étape d'addition 6 est appelée � AddRoundKey � et est réalisée par un OU Exclusif. Ensuite, on exécute (Nr-1) rondes réalisant les quatre fonctions suivantes : - � SubBytes � (étape 8 sur la figure 1) . chaque mot de la matrice de données obtenue à l'étape précédente est remplacé par un autre mot de taille similaire donné par un tableau de correspondance. Il s'agit d'une transformation non linéaire. - � ShiftRows � (étape 10 sur la figure 1) : il s'agit d'une transposition décalant cycliquement les mots des lignes de la matrice de données obtenue en sortie de � SubBytes �. Les mots des lignes de la matrice sont décalés suivant un décalage circulaire à gauche, le nombre de cases du décalage dépendant de la ligne : les mots de la première ligne de la matrice ne sont pas décalés, les mots de la seconde ligne sont décalés d'une case vers la gauche, les mots de la troisième ligne sont décalés de deux cases vers la gauche et les mots de la quatrième ligne sont décalés de trois cases vers la gauche. - � MixColumns � (étape 12 sur la figure 1) : il s'agit d'une multiplication matricielle entre une matrice constante et la matrice de données obtenue en sortie de � ShiftRows �. - � AddRoundKey � (étape 14 sur la figure 1) : il s'agit d'une addition (OU Exclusif) entre la matrice de données obtenue en sortie de � MixColumns � et une clé diversifiée 16, ou clé de ronde, obtenue après une opération de diversification de la clé de ronde précédente, appelée � KeySchedule � et réalisée à chaque ronde. La fonction � KeySchedule � réalise une opération de diversification à partir d'une clé qui est soit la clé secrète 4 après la ronde initiale, soit une (i-1) ème clé de ronde 16 lorsque l'on exécute la ième ronde, avec i nombre entier naturel compris entre 2 et (N,-1). Après avoir répété (N,-1) fois ces fonctions, l'algorithme réalise une dernière ronde finale (l0eme ronde dans le cas d'une clé secrète 4 de 128 bits) consistant en la mise en oeuvre d'une fonction � SubBytes � (référence 18 sur la figure 1), d'une fonction � ShiftRows � (référence 20 sur la figure 1) et d'une fonction � AddRoundKey � (référence 22 sur la figure 1). On obtient en sortie de la fonction 22 une matrice 24, de taille égale à 4 X 4 de mots de taille similaire aux mots de la matrice 2, des données cryptées. Le décryptage de ces données peut ensuite être réalisé à partir des données codées en réalisant des fonctions inverses par rapport à celles réalisées pour le cryptage. La connaissance de la clé secrète est donc nécessaire pour réaliser le décryptage des données. Diverses solutions, appelées contre-mesures, ont été proposées pour rendre inopérants différents types d'attaques sur un tel algorithme. Par exemple, pour contrer les attaques de type à canaux cachés, il est connu d'ajouter du bruit artificiellement sur les signaux émis par la puce, leur corrélation avec les données manipulées étant ainsi réduite. Des contre-mesures logicielles ad hoc sont également introduites pour complexifier l'analyse des différents signaux extraits. Contre les attaques en faute, des techniques de détection et de correction d'erreurs ainsi que de la redondance des données sont également connues. Des contre-mesures physiques, se trouvant sur le composant électronique implémentant l'algorithme, permettant de se prémunir contre les attaques invasives ou par fautes sont également connues. Ces contre-mesures physiques, par exemple des capteurs de lumière, sont capables de détecter un fonctionnement anormal de la puce. En cas d'intrusion ou d'injection de fautes, différentes actions peuvent être prises allant d'une simple réinitialisation de la puce jusqu'à un effacement partiel ou intégral de toutes les informations stockées dans les mémoires de la puce. Des dispositifs plus spécifiques à la protection du circuit contre une phase d'ingénierie inverse peuvent également être intégrés (bouclier métallique, lignes fictives etc.). Toutefois, ces solutions impliquent généralement des surcoûts importants à la fois au niveau matériel (nombreuses fonctions logiques supplémentaires nécessaires à la mise en oeuvre du cryptage et du décryptage) et au niveau du temps d'exécution de l'algorithme, à la fois pour le cryptage et pour le décryptage. EXPOSÉ DE L'INVENTION Un but de la présente invention est de proposer un nouveau procédé et un nouveau dispositif de cryptage/décryptage offrant une meilleure protection des données, rendant inefficaces des attaques telles que celles réalisées sur un algorithme AES, et n'impliquant pas ou peu de surcoûts au niveau matériel et du temps d'exécution par rapport aux contre-mesures de l'art antérieur. Pour cela, la présente invention propose un procédé de cryptage d'un message de données S comportant au moins une étape de calcul d'au moins une clé aléatoire Kat, o à partir d'au moins un nombre aléatoire Nbal et d'au moins une clé secrète Ksecret et un chiffrement des données S à partir de la clé aléatoire Kai,o et d'une pluralité de clés aléatoires diversifiées Kat, 1 à Ka1,N calculées à partir de la clé aléatoire Kat, o avec, par exemple, au moins une étape non linéaire. En ajoutant à la clé secrète Ksecret un nombre, ou une variable, aléatoire Nba1r toutes les informations sont chiffrées avec une clé différente, ce qui rend inefficace les attaques connues de l'art antérieur. Ce procédé permet donc d'améliorer la sécurité du dispositif électronique dans lequel est implanté ce procédé. La présente invention peut concerner également un procédé cryptographique pour un dispositif électronique, permettant de protéger des données contre des attaques réalisées sur le dispositif, consistant à calculer au moins une clé aléatoire Kat, o à partir d'au moins un nombre aléatoire Nba1 et d'au moins une clé secrète Ksecret, et à réaliser un chiffrement des données s à partir de la clé aléatoire Kat, o et d'une pluralité de clés aléatoires diversifiées Ka1,1 à Ka1,N calculées à partir de la clé aléatoire Kat, o . Le dispositif électronique peut comprendre une unité centrale équipée au moins d'une mémoire de travail utilisée pour exécuter les calculs et le chiffrement du procédé cryptographique, et d'une mémoire réinscriptible servant à stocker des données propres au dispositif et/ou propres à des commandes à exécuter pour mettre en oeuvre le procédé cryptographique. Le procédé cryptographique peut également être mis en oeuvre de façon matérielle en le programmant directement dans un FPGA, un ASIC (circuit intégré à application spécifique) ou dans une carte à puce, ou dans un crypto-processeur dédié au chiffrement des données. Les données cryptées obtenues peuvent donc être un signal pouvant être transmis de manière sécurisée sur un réseau à un autre dispositif électronique pour être décryptées. Le procédé de cryptage peut calculer N clés aléatoires diversifiées Ka1,1 à Ka1,N, N étant un nombre entier naturel strictement supérieur à 1 égal au nombre de rondes du procédé de cryptage. Les N clés aléatoires diversifiées Ka1,1 à Ka1,N peuvent être obtenues au moins par les étapes suivantes . - calcul d'une première clé aléatoire diversifiée Ka1,1 à partir de la clé aléatoire Ka1,o ; - calcul de chacune des N-1 clés aléatoires diversifiées Ka1,i, avec i nombre entier naturel tel que 2 Le procédé de cryptage peut comporter en outre les étapes suivantes : -calcul d'au moins une première clé diversifiée Kdiv,1 à partir de la clé secrète Ksecret ; - calcul de N-1 clés diversifiées Kdiv, 2 à v, N, chacune des N-1 clés diversifiées Kdiv, r avec i tel que 2 La présente invention concerne également un dispositif de cryptage d'un message de données S comportant au moins des moyens de calcul d'au moins une clé aléatoire Ka1,o à partir d'au moins un nombre aléatoire Nba1 et d'au moins une clé secrète Ksecret, et des moyens de chiffrement des données S à partir d'une pluralité de clés aléatoires diversifiées Ka1,1 à Ka1,N calculées à partir de la clé aléatoire Ka1,o, avec N nombre entier naturel strictement supérieur à 1. N peut être égal au nombre de rondes réalisées par le dispositif de cryptage. Le dispositif de cryptage peut comporter en outre : - des moyens de calcul d'au moins une première clé aléatoire diversifiée Ka1,1 à partir de la clé aléatoire Kai,o ; - des moyens de calcul de chacune des N-1 clés aléatoires diversifiées Ka1,i, avec i nombre entier naturel tel que 2 Des parties identiques, similaires ou équivalentes des différentes figures décrites ci-après portent les mêmes références numériques de façon à faciliter le passage d'une figure à l'autre. Les différentes possibilités (variantes et modes de réalisation) doivent être comprises comme n'étant pas exclusives les unes des autres et peuvent se combiner entre elles. EXPOSÉ DÉTAILLÉ DE MODES DE RÉALISATION PARTICULIERS On se réfère à la figure 2 qui représente les étapes réalisées lors de la mise en oeuvre d'un exemple de réalisation d'un procédé de cryptage de données à clé secrète aléatoire. Le message de données à crypter, référencé � S � sur la figure 2, est tout d'abord coupé en blocs de 128 bits représentés sous forme d'une matrice 4 X 4 dont les entrées sont respectivement des mots de 8 bits (octets). Ces blocs sont ensuite cryptés indépendamment les uns des autres pour obtenir en fin du procédé de cryptage des blocs de données cryptées, référencés � Z � sur la figure 2, qui peuvent alors être concaténés et former un message de données cryptées. Dans l'exemple de réalisation du procédé décrit, toutes les opérations arithmétiques s'effectuent sur des mots de 8 bits disposés en matrice 4 X 4. On peut donc se placer, pour les calculs, dans un corps fini appelé champ de Galois étendu noté GF(28), ayant comme polynôme primitif : P (X) = x8 + x4 + x3 + x + 1. On réalise un premier ensemble de fonctions, appelé ronde initiale, comprenant tout d'abord le calcul d'une clé aléatoire Kai, o à partir d'un nombre aléatoire Nba1r par exemple non nul, et d'une clé secrète Ksecret, par exemple également non nulle. La clé aléatoire Ka1,o est obtenue par une addition 102 entre la clé secrète Ksecret et le nombre aléatoire Nba1. La taille de la clé secrète Ksecret peut être égale à 128 bits, 192 bits ou encore 256 bits, et est ici choisie égale à la taille des blocs de données s à crypter. Sur l'exemple de la figure 2, la clé secrète Ksecret comporte 128 bits représentés sous la forme d'une matrice 4 X 4 dont les entrées sont des mots de 8 bits. La taille du nombre aléatoire Nba1 est choisie égale à la taille de la clé secrète Ksecret. Cette addition 102 est réalisée par un OU Exclusif entre la clé secrète Ksecret et le nombre aléatoire Nba1. On obtient en sortie de l'addition 102 la clé aléatoire Kat, 0 Durant la ronde initiale, on utilise la clé aléatoire Ka1,o. A la ronde suivante, on réalise le calcul d'une première clé aléatoire diversifiée Ka1,1, ou première clé de ronde aléatoire, obtenue à partir de la clé aléatoire Ka1,o par une opération de diversification 103, appelée � KeySchedule �, de cette clé aléatoire Kat, o . On a donc Kat, 1 = KeySchedule (Ka1, o) . Cette fonction 103 � KeySchedule � permet de calculer N clés aléatoire diversifiée Ka1,1 à Ka1,N, N étant le nombre de rondes réalisées durant le procédé de cryptage. La valeur de N est fonction de la taille de la clé secrète Ksecret utilisée : pour une clé secrète Ksecret de 128 bits, on a N = 10 ; N = 12 pour une clé de 192 bits ; et N = 14 pour une clé de 256 bits. La fonction � KeySchedule � sera détaillée plus loin dans la description. Ces clés aléatoires diversifiées Ka1,1 à Kai,N et la clé aléatoire Ka1,o sont utilisées pour réaliser un chiffrement 105 des données S détaillé ci-dessous en liaison avec la figure 3. Dans cet exemple de réalisation, les clés Ka1,o à Ka1,N sont calculées parallèlement à l'exécution du chiffrement 105. Dans une variante, il est possible que les clés aléatoires diversifiées Ka1,1 à Ka1,N et la clé aléatoire Ka1,o soient calculées avant l'exécution du chiffrement 105. Tout d'abord, le chiffrement 105 achève la ronde initiale par le calcul de données codées Scod,o à partir de la clé aléatoire Ka1,o et des données S. Une fonction 104, appelée � AddRoundKey �, réalise ce calcul. On a donc : Scod, o = AddRoundKey (Kao, o, S). Le calcul � AddRoundKey � des données codées Scod,o est ici une opération d'addition, réalisée par un � OU Exclusif �, entre les données initiales S et la clé aléatoire Kai, o . La ronde initiale étant terminée, on exécute N rondes. Chacune des iemes rondes, avec i nombre entier naturel tel que 1 ) = { F2 } . On exécute ensuite une fonction 108 appelée � ShiftRows � sur les données obtenues en sortie de � SubBytes � 106. Cette fonction 108 consiste en une transposition décalant cycliquement les mots des lignes de la matrice obtenue en sortie de � SubBytes �. Les mots des lignes sont décalés suivant un décalage circulaire à gauche, le nombre de cases du décalage dépendant de la ligne : les mots de la première ligne de la matrice ne sont pas décalés, les mots de la seconde ligne sont décalés d'une case vers la gauche, les mots de la troisième ligne sont décalés de deux cases vers la gauche et les mots de la quatrième ligne sont décalés de trois cases vers la gauche. Par exemple, si on a en entrée de la fonction � ShiftRows � une matrice M telle que : (Mo0 Moi Mot Mo3 M1,0 Ml ,l M1,2 M1,3 M20 M21 M22 M23 M3 M M M ,0 3,1 3,2 3,3 on obtient alors en sortie la matrice : (Mo o Mo 1 Mo 2 Mo 3 M1,1 M1 2 M13 Mi o M2,2 M2 3 M2,0 M21 M32) M= ShWRows(M) = Une fonction 110, appelée � MixColumns � réalise ensuite une multiplication matricielle dans GF(28) entre la matrice obtenue en sortie de � ShiftRows � et une matrice constante Ao telle que : (02 03 01 010 01 02 03 01 A° 01 01 02 03 X03 01 01 02 Ce calcul s'effectue par colonne, c'est-à-dire que chaque colonne dépend de toute la colonne d'entrée. Ensuite, la fonction � KeySchedule � 103 (représentée sur la figure 2) est exécutée, réalisant une opération de diversification de la clé précédemment utilisée, qui est soit la clé aléatoire Kai,o lorsque l'on réalise la ronde initiale, soit une (i-1)ème clé aléatoire diversifiée Ka1,i_1 lorsque l'on réalise les autres rondes. En écrivant la (i-1)ème clé aléatoire diversifiée Ka ,i_1 sous la forme : Kal,i-1 ko,o kl,o k2 0 k3,0 k01 k0 2 4,1 k1 2 k21 k22 k3 1 k3 2 k0,3 k1,3 k2 3 k3,3 / la ième clé aléatoire diversifiée Ka1,i obtenue est alors de la forme : Kal,i / ka ke ki ~kmkb k, kf kg k1 kk kn ko kka:" kh kl kp25 Avec ka = sub(k1 3) k0 0 Rcon (Z) kb = sub(k1,3) O+ ko,m m=0 2 ka = sub(k1,3) O+ ko,m m=0 3 kd = sub(k1,3) O+ 1 ko,m m=0 ke =sub(k23)~k1,0 kf =sub(k23)O+ klm m=o 2 kg = sub(k2 3) O+ kl m m=o 3 kh = sub(k2,3) 0 kl,m m=o ki =sub(k33)k20 k. = sub(k3 3) 0 k2,m m=0 2 kk = sub(k3,3) 0 k2,m m=0 3 k1 = sub(k3,3) 0 k2,m m=0 km = sub(k0,3) k3,0 kn = sub(k0,3) 0 k3,m m=0 2 ko = sub(k0,3) 0 k3,m m=0 3 kp = sub(k0,3) 0 k3,m m=0 26 � sub � correspond à la fonction de transformation non linéaire décrite précédemment pour la fonction � SubBytes �. Rcon correspond à un tableau unidimensionnel de constantes (en hexadécimal), indexé par le numéro de la ronde courante : Ronde i 1 2 3 4 5 6 7 8 9 10 Rcon 01 02 04 08 10 20 40 80 1B 36 On a donc Kat, i = KeySchedule (Kat, i-1) Enfin, la ième ronde, avec i tel que 1 La clé aléatoire doit toutefois être connue pour réaliser le décryptage des données cryptées. Pour cela, parallèlement aux étapes décrites ci-dessus, le procédé réalise également, durant la première ronde, une fonction 107 � KeySchedule �, représentée sur la figure 2, à partir de la clé secrète Ksecret, délivrant ainsi une première clé diversifiée Kdiv,l. Cette fonction 107 � KeySchedule � est également répétée durant les rondes suivantes en utilisant à chaque fois la clé diversifiée Kdiv calculée précédemment. En calculant la différence entre une mème clé aléatoire diversifié Kal,m et une mème clé diversifiée Kdiv, m (opération 109 sur la figure 2), avec m nombre entier naturel tel que 1 Lorsque la fonction � KeySchedule � a calculé la mème clé diversifiée Kdiv,m, l'information Difxm = Ka1,m ù Kdiv,m est ajoutée à la mème clé diversifiée Kdiv,m• On obtient alors la meme clé aléatoire diversifiée Ka1,m• On continue alors la fonction � KeySchedule � 202 à partir de la mème clé aléatoire diversifiée Kai,m, permettant ainsi d'obtenir la dernière clé aléatoire diversifiée Ka1,N• Un fonction 204 de diversification inverse de clé, appelée � InvKeySchedule � permet alors de délivrer en sortie les N clés aléatoires diversifiées Kam_,1 à Kai,N utilisées lors du cryptage des données. Cette fonction � InvKeySchedule � réalise l'opération matricielle inverse de la fonction � KeySchedule � La obtenue par la la forme Kai,i-1 si . (i-1)ème clé aléatoire diversifiée Ka1,i-1 fonction � InvKeySchedule � est alors de InvKeySchedule (Kaki) , c'est-à-dire que Kal,l ko,o 4,0 k2 0 k3,0 ko,1 k1,1 k2 1 k3,1 alors la (i-1) èmeclé aléatoire Ka1,i-1 s'écrit sous la forme : (ko o e sub(ko 2 O+ ko,3 ) O+ Rcon (t -1) ko 1 O+ ko o ko 2 O+ ko 1 ko 3 O+ ko 2 k1 0 O+ sub(k12 O+ k13 ) k1 1 O+ k1 o k12 O k11 k13 O+ k12 k2 0 sub(k2,2 k2,3 ) k2,1 O+ k2,0 k2,2 k2,1 k2,3 O+ k2,2 k30 sub(k32 k33) k31 ek30 k32 k31 k33 Ok32) A partir des N clés aléatoires diversifiées obtenues, on réalise ensuite un déchiffrement 206 des données Z. Ce déchiffrement va être détaillé en liaison avec la figure 6. On réalise une fonction 208 � AddRoundKey � qui est similaire à la fonction � AddRoundKey � 118. Cette étape est similaire pour le cryptage et le décryptage car l'opération d'addition OU Exclusif est également sa propre opération inverse. On réalise donc ici un OU Exclusif entre les données cryptées Z et la dernière (Nème) clé aléatoire diversifiée. On exécute ensuite une fonction 210 � InvShiftRows � sur les données obtenues en sortie de � AddRoundKey � 208. Cette fonction 210 est la fonction inverse de � ShiftRows �. Cette fonction � InvShiftRows � consiste en une transposition décalant cycliquement les mots des lignes de la matrice obtenue en sortie de � AddRoundKey � 208. Les mots des lignes sont décalés suivant un décalage circulaire à droite, le nombre de cases du décalage dépendant de la ligne : les mots de la première ligne de la matrice ne sont pas décalés, les mots de la seconde ligne sont décalés d'une case vers la droite, les mots de la troisième ligne sont décalés de deux cases vers la droite et les mots de la quatrième ligne sont décalés de trois cases vers la droite. Par exemple, si on a en entrée de la fonction � InvShiftRows � une matrice M telle que : /M0,0 M0,1 Ml,0 M1,1 M 21 M3,0 M3,1 M0,3 M1,3 M23 M3,3 % M= M12 M on obtient alors en sortie la matrice : /MO ,O Mo Mo 2 M0 3 M13 M10 Mil Mie M2,2 M2,3 M2,0 Al2,1 M3,3 M3,0 % Le procédé de décryptage exécute ensuite une fonction 212, appelée � InvSubBytes �, dans laquelle chaque mot de la matrice obtenue à l'étape précédente est remplacé par un autre mot. Pour cela, une transformation élémentaire appelée � invsub � est appliquée sur chaque mot à transformer. Pour cela, on réalise l'inverse de la transformation affine utilisée pour la transformation élémentaire � sub �, puis on applique l'inverse multiplicatif sur le résultat. La fonction � InvSubBytes � est donc une fonction de substitution non linéaire. Cette opération de substitution peut également être représentée sous la forme d'un tableau comportant les valeurs de substitution des mots des données codées. Un mot (ici un octet) dont la valeur est notée � x,y �, où x et y représentent respectivement les bits de poids fort et de poids faible, est donc substitué par le mot dont la valeur se trouve dans le tableau représenté sur la figure 7, au croisement de la ligne x et de la colonne InvShifiRows(M) = y correspondantes. Par exemple, si le mot à substituer a pour valeur {04}, on a alors : SubBytes({04}) = {30}. Ces fonctions réalisées ci-dessus correspondent aux fonctions inverses de celles réalisées durant la dernière ronde du procédé de cryptage. Les quatre fonctions inverses de celles correspondant aux rondes 1 à N-1 du procédé de cryptage sont ensuite réalisées. On exécute tout d'abord une fonction � AddRoundKey � 214, par exemple similaire à la fonction � AddRoundKey � 208, en utilisant la hème clé aléatoire diversifiée Ka1,h correspondant au numéro h de ronde. Une fonction 216, appelée � InvMixColumns �, correspondant à l'inverse de la fonction � MixColumns � réalise ensuite une multiplication matricielle dans GF(28) entre la matrice obtenue en sortie de la fonction � AddRoundKey � 214 et une matrice constante Bo telle que : /Oe Ob Od 09' 09 Oe Ob Od Bo Od 09 Oe Ob ~Ob Od 09 Oe) Ce calcul s'effectue par colonne, c'est-à-dire que chaque colonne dépend de toute la colonne d'entrée. On exécute ensuite une fonction � InvShiftRows � 218, par exemple similaire à la fonction � InvShiftRows � 210, sur les données obtenues en sortie de � InvMixColumns � 216. La ronde est terminée par un fonction � InvSubBytes � 220, par exemple similaire à la fonction � InvSubBytes � 212. Le décryptage des données Z est alors terminé en réalisant la dernière ronde, correspondant à l'inverse de la première ronde, ou ronde initiale, du cryptage. Cette dernière ronde consiste en une fonction � AddRoundKey � 222 similaire aux autres fonctions � AddRoundKey � réalisées. On obtient en sortie de cette fonction � AddRoundKey � 222 les données décryptées S. La figure 8 représente un exemple d'implémentation d'un circuit 300 mettant en oeuvre le procédé de cryptage à clé secrète aléatoire décrit précédemment. Les données à crypter sont entrées sur un bus 302 de 32 bits, et les données cryptées sont délivrées en sortie du circuit 300 sur un bus de sortie 304 également de 32 bits. La clé secrète est entrée sur un bus 306 également de 32 bits. Des moyens de conversion 308 convertissent quatre mots de 32 bits de données en une seule donnée S de longueur 128 bits contenu dans un registre. De même, des moyens de conversion 310 convertissent la clé secrète en une seule donnée Ksecret de 128 bits, 192 bits ou 256 bits. Au niveau de la sortie du circuit 300, des moyens de conversion 312 convertissent les données cryptées Z de 128 bits en mots de 32 bits sur le bus de sortie 304. Un contrôleur d'état 314 cadence la diversification des clés aléatoires � KeySchedule � réalisée par des moyens de diversification 316 et le chiffrement des données par des moyens de chiffrement 318. Ces moyens de chiffrement 318 exécutent les fonctions � SubBytes �, � ShiftRows �, � MixColumns � et � AddRoundKey �. La diversification de la clé secrète (fonction 107 de la figure 2) peut être réalisée par les moyens de diversification 316 si ceux-ci sont assez rapides pour réaliser deux diversifications distinctes durant une ronde, comme c'est le cas sur la figure 8, ou par d'autres moyens de diversification. Dans le deux cas, on délivrera également en sortie du circuit 300 la valeur de la différence Difxm = Kal,m ù Kdiv,m permettant de réaliser un décryptage ultérieur des données. Chaque ronde est effectuée sur un cycle, les clés aléatoires diversifiées étant produites parallèlement à l'exécution des rondes. Cette synchronisation de calcul est réalisée par le contrôleur d'état 314. Différents signaux de commande sont également échangés entre les différents composants du circuit 300. A la fin des N rondes, le contrôleur d'état 314 autorise l'envoi du texte crypté aux moyens de conversion 312. Le nombre aléatoire Nbam_ utilisé dans ce procédé de cryptage peut être obtenu à partir d'un générateur de nombre aléatoire extérieur au circuit 300, ou en utilisant un état interne dudit circuit 300 de mise en oeuvre du procédé de cryptage. Le nombre aléatoire Nbal utilisé par le procédé de cryptage peut être directement cet état interne ou le nombre obtenu en sortie du générateur, ou bien être le résultat de l'addition de la clé aléatoire précédente (utilisée pour le codage d'un précédent bloc de données) à l'état interne ou au nombre obtenu en sortie du générateur. On peut également choisir aléatoirement entre ces différentes possibilités pour chaque bloc de données à crypter. La figure 9 représente un exemple d'implémentation d'un circuit 400 mettant en oeuvre le procédé de décryptage à clé secrète aléatoire décrit précédemment. Les données à décrypter sont entrées sur un bus 402 de 32 bits, et les données décryptées sont délivrées en sortie du circuit 400 sur un bus de sortie 404 également de 32 bits. La clé secrète, ainsi que la valeur de la différence DifKm, sont entrées sur un bus 406 également de 32 bits. Des moyens de conversion 408 convertissent quatre mots de 32 bits de données en une seule donnée de longueur 128 bits contenu dans un registre. De même, des moyens de conversion 410 convertissent la clé secrète et la différence DifKm en des données de 128 bits, 192 bits ou 256 bits. Au niveau de la sortie du circuit 400, des moyens de conversion 412 convertissent les données décryptées de 128 bits en mots de 32 bits sur le bus de sortie 404. Un contrôleur d'état 414 cadence la diversification de la clé secrète � KeySchedule � réalisée par des moyens 416, permettant d'obtenir la dernière clé aléatoire diversifiée à partir de la clé secrète et de l'information de différence de clés DifKm• Ces moyens 416 réalisent ensuite la diversification inverse permettant d'obtenir les clés aléatoires diversifiées. Le contrôleur d'état 414 cadence également le déchiffrement des données par des moyens de déchiffrement 418. Ces moyens de déchiffrement 418 exécutent les fonctions � InvSubBytes �, � InvShiftRows �, � InvMixColumns � et � AddRoundKey �. Chaque ronde est effectuée sur un cycle, les clés aléatoires diversifiées étant produites parallèlement à l'exécution des rondes. Cette synchronisation de calcul est réalisée par le contrôleur d'état 414. Différents signaux de commande sont également échangés entre les différents composants du circuit 400. A la fin des N rondes, le contrôleur d'état 414 autorise l'envoi du texte décrypté aux moyens de conversion 412. Le fait d'utiliser la différence DifKm au milieu du chiffrement (par exemple à la cinquième ou sixième ronde si le chiffrement est réalisé en 10 rondes) permet de sortir ce nombre DifKm sans perdre de temps au niveau du chiffrement (un procédé réalisant le cryptage en 10 rondes sur un bus de 32 bits peut finir d'extraire cette valeur en 4 rondes et donc avant la fin de l'exécution du chiffrement) et de limiter la perte de temps au niveau du déchiffrement.30 REVENDICATIONS 1. Procédé de cryptage d'un message de données S comportant au moins une étape de calcul (102) d'au moins une clé aléatoire Kat, o à partir d'au moins un nombre aléatoire Nba1 et d'au moins une clé secrète Ksecret, et un chiffrement (105) des données S à partir de la clé aléatoire Ka1,o et d'une pluralité de clés aléatoires diversifiées Ka1,1 à Ka1,N calculées à partir de la clé aléatoire Kat, o . 2. Procédé de cryptage selon la revendication 1, calculant N clés aléatoires diversifiées Ka1,1 à Ka1,N, N étant un nombre entier naturel strictement supérieur à 1 égal au nombre de rondes du procédé de cryptage. 3. Procédé de cryptage selon la revendication 2, les N clés aléatoires diversifiées Ka1,1 à Ka1,N étant obtenues au moins par les étapes suivantes . - calcul d'une première clé aléatoire diversifiée Ka1, 1 à partir de la clé aléatoire Ka1,o ; - calcul de chacune des N-1 clés aléatoires diversifiées Kaki, avec i nombre entier naturel tel que 2 4. Procédé de cryptage selon la revendication 3, le chiffrement (105) des données S étant réalisé au moins par les étapes suivantes : 37 - calcul (104) de données codées S cod, 0 à partir de la clé aléatoire Ka1, o et des données S à crypter ; - calcul de N données codées Scod,1 à s d, N, chacune des N données codées Scod,i, avec i tel que 1 5. Procédé de cryptage selon l'une des revendications 3 ou 4, comportant en outre les étapes suivantes . calcul (107) d'au moins une première clé diversifiée Kd�V,1 à partir de la clé secrète Ksecret ; calcul (107) de N-1 clés diversifiées Kdiv,2 à KdiV,N, chacune des N-1 clés diversifiées Kdiv,i, avec i tel que 2 6. Procédé de cryptage selon l'une des revendications 4 ou 5, le chiffrement (105) de données S étant réalisé par : a) une étape d'addition (104) de la clé aléatoire Ka1,o à une matrice formée par les données s à crypter, formant des données codées Scod,o ; puis 38 b) N-1 exécutions des étapes suivantes : - substitution (106) de chaque mot d'une matrice formée par des (i-1)èmes données codées Scod,i-1, avec i tel que 1 7. Dispositif de cryptage (300) d'un message de données S comportant au moins des moyens de calcul (316) d'au moins une clé aléatoire Ka1,o à partir d'au moins un nombre aléatoire Nba1 et d'au moins une clé secrète Ksecret, et des moyens de chiffrement (318) des données S à partir d'une pluralité de clés aléatoires diversifiées Ka1,1 à Ka1,N calculées à partir de la clé aléatoire Kat, o, avec N nombre entier naturel strictement supérieur à 1. 8. Dispositif de cryptage (300) selon la revendication 7, comportant en outre : - des moyens de calcul (316) d'au moins une première clé aléatoire diversifiée Ka1,1 à partir de la clé aléatoire Kat, o ; - des moyens de calcul (316) de chacune des N-1 clés aléatoires diversifiées Kaki, avec i nombre entier naturel tel que 2 9. Dispositif de cryptage (300) selon la revendication 8, les moyens de chiffrement (318) des données S comportant au moins : - des moyens de calcul de données codées S d, 0 à partir de la clé aléatoire Ka1,o et des données S à crypter ; - des moyens de calcul de N données codées Scod, 1 à Scod,N, chacune des N données codées Scod,i, avec i tel que 1 10. Dispositif de cryptage (300) selon l'une des revendications 8 ou 9, comportant en outre : des moyens de calcul (316) d'au moins une première clé diversifiée Kdiv,1 à partir de la clé secrète Ksecret ; des moyens de calcul (316) d'une mème clé diversifiée Kdiv,m à partir d'une (m-1) ème clé diversifiée Kdiv, (m-1) , avec m nombre entier naturel tel que 2 11. Dispositif de cryptage (300) selon l'une des revendications 9 ou 10, les moyens de chiffrement (318) des données S comportant : - des moyens d'addition de la clé aléatoire Ka1,o et des clés aléatoires diversifiées Ka1,1 à Kat, N à des matrices de données ; - des moyens de substitution de chaque mot d'une matrice de données par un autre mot de taille similaire ; - des moyens de transposition cyclique des mots d'une matrice de données -des moyens de multiplication matricielle entre une matrice de données et une matrice constante.30 12. Procédé de décryptage d'un message de données cryptées Z comportant au moins une étape de calcul (202) d'une Nème clé aléatoire diversifiée Ka1,N à partir d'une clé secrète Ksecret et d'une différence DifKm entre une meme clé aléatoire diversifiée Ka1,m et une meme clé diversifiée Kdiv,m, une étape de diversification inverse (204) réalisée à partir de la Nème clé aléatoire diversifiée Ka1,N calculant N-1 clés aléatoires diversifiées Ka1,N-1 à Ka1,1 et une clé aléatoire Ka1,o, et un déchiffrement (206) des données Z à partir des N clés aléatoires diversifiées Ka1,1 à Ka1,N et de la clé aléatoire Ka1,o, avec N nombre entier naturel strictement supérieur à 1 et m nombre entier naturel tel que 1 13. Procédé de décryptage selon la revendication 12, N étant le nombre de rondes du procédé de décryptage. 14. Procédé de décryptage selon l'une des revendications 12 ou 13, le calcul (202) de la Nème clé aléatoire diversifiée Ka1,N étant obtenu au moins par les étapes suivantes - calcul d'au moins une première clé diversifiée Kdiv,1 à partir de la clé secrète Ksecret ; - calcul de m-1 clés diversifiées Kdiv, 2 à v,m, chacune des m-1 clés diversifiées Kdiv, , avec i nombre entier naturel tel que 2 15. Procédé de décryptage selon l'une des revendications 12 à 14, la diversification inverse (204) réalisant le calcul de N-1 clés aléatoires diversifiées Ka1,N-1 à Ka1,1 et de la clé aléatoire Ka1,o, chacune de ces clés Kaki, avec i nombre entier naturel tel que 0 N-1, étant calculée à partir d'une précédente clé aléatoire diversifiée Ka1,i+1. 16. Procédé de décryptage selon l'une des revendications 12 à 15, le déchiffrement (206) des données cryptées Z étant réalisé au moins par les étapes suivantes : - calcul de données décodées Scie, od,0 à partir de la Nème clé aléatoire diversifiée Ka1,N et des données cryptées Z ; - calcul de N données décodées Sdecod, i à Sdecod,N, chacune des N données décodées Sdecod,i, avec i tel que 1 17. Procédé de décryptage selon l'une des revendications 12 à 16, le déchiffrement (206) de données étant réalisé par : a) les étapes suivantes - addition (208) de la Nème clé aléatoire diversifiée Ka1,N à une matrice formée par les données cryptées Z, formant ainsi des données décodées Sdec d 0 ; - transposition cyclique (210) des mots d'une matrice formée par les données obtenues après l'étape précédente d'addition (208) ; -substitution (212) de chaque mot d'une matrice formée par les données obtenues après l'étape précédente de transposition cyclique (210) par un autre mot de taille similaire, formant ainsi des premières données décodées Sdecod,l ; puis b) N-1 exécutions des étapes suivantes : -addition (214) entre une matrice formée par des i-1 èmes données décodées S ( ) decod,i-1 et une ième clé aléatoire diversifiée Kali, avec i tel que 2 18. Dispositif de décryptage (400) d'un message de données cryptées Z comportant au moins des moyens de calcul (416) d'une Nème clé aléatoire diversifiée Ka1,N à partir d'une clé secrète Ksecret et d'une différence DifKm entre une mème clé aléatoire diversifiée Ka1,m et une mème clé diversifiée Kdiv,m, des moyens (416) de diversification inverse à partir de la Nème clé aléatoire diversifiée Ka1,N calculant N-1 clés aléatoires diversifiées Ka1,N-1 à Ka1,1 et la clé aléatoire Ka1,o, et des moyens de déchiffrement (418) des données Z à partir des N clés aléatoires diversifiées Ka1,1 à Ka1,N et de la clé aléatoire Ka1,o, avec N nombre entier naturel strictement supérieur à 1 et m nombre entier naturel tel que 1 19. Dispositif de décryptage (400) selon la revendication 18, les moyens de calcul (416) de la Nème clé aléatoire diversifiée Ka1,N comportant au moins : - des moyens de calcul d'au moins une première clé diversifiée Kdiv,1 à partir de la clé secrète Ksecret ; - des moyens de calcul de m-1 clés diversifiées Kdiv,2 à Kdiv,m, chacune des m-1 clés diversifiées Kdiv,i, avec i nombre entier naturel tel que2 20. Dispositif de décryptage (400) selon l'une des revendications 18 ou 19, les moyens (416) de diversification inverse calculant N-1 clés aléatoires diversifiées Ka1,N-1 à Ka1,1 et la clé aléatoire Ka1,o, chacune de ces clés Kaki, avec i nombre entier naturel tel que 0 N-1, étant calculée à partir d'une précédente clé aléatoire diversifiée Ka1,i+1. 21. Dispositif de décryptage (400) selon l'une des revendications 18 à 20, les moyens de déchiffrement (418) des données comportant au moins : - des moyens de calcul de données décodées Sdecod,O à partir de la Neme clé aléatoire diversifiée Ka1,N et des données cryptées Z ; - des moyens de calcul de N données décodées Sdecod,l a Sdecod,N, chacune des N données décodées Sdecod,i, avec i tel que 1 22. Dispositif de décryptage (400) selon l'une des revendications 18 à 21, les moyens de déchiffrement (418) de données comportant : - des moyens d'addition de la clé aléatoire Ka1,o et des clés aléatoires diversifiées Ka1,1 à Ka1,N à des matrices de données ; - des moyens de transposition cyclique des mots d'une matrice de données ; - des moyens de substitution de chaque mot d'une matrice de données par un autre mot de taille similaire ; - des moyens de multiplication matricielle entre une matrice de données et une matrice constante. 23. Dispositif de traitement de signaux destiné à mettre en oeuvre un procédé de cryptage d'un message de données selon l'une des revendications 1 à 6 et/ou un procédé de décryptage d'un message de données cryptées selon l'une des revendications 12 à 17. 24. Carte à puce comportant au moins un dispositif (300) de cryptage d'un message de données selon l'une des revendications 7 à 11 et/ou un dispositif (400) de décryptage d'un message de données cryptées selon l'une des revendications 18 à 22. 25. Support de données, pouvant être lu par un système informatique, comportant des données sousforme codée, pour mettre en oeuvre un procédé de cryptage d'un message de données selon l'une des revendications 1 à 6 et/ou un procédé de décryptage d'un message de données cryptées selon l'une des revendications 12 à 17. 26. Produit logiciel comportant un support de données susceptible d'être lu par un système informatique, permettant la mise en oeuvre d'un procédé de cryptage d'un message de données selon l'une des revendications 1 à 6 et/ou un procédé de décryptage d'un message de données cryptées selon l'une des revendications 12 à 17.