Brevet FR3090939A1 — publié le 20200626

Description Titre de l'invention : PROCEDE DE VERIFICATION D'INTEGRITE ET DE DECHIFFREMENT D'UN MESSAGE CHIFFRE, CRYPTOMODULE ET TERMINAL ASSOCIES Domaine technique 100011 Le domaine technique de l'invention est celui des procédés permettant de vérifier l'intégrité d'un message chiffré, puis le cas échéant, de le déchiffrer. 100021 La présente invention concerne un procédé de vérification d'intégrité et de dé- chiffrement d'un message chiffré. La présente invention concerne également un cryptomodule, un terminal et un produit-programme d'ordinateur permettant la mise en oeuvre d'un tel procédé. ARRIERE-PLAN TECHNOLOGIQUE DE L'INVENTION 100031 Le chiffrement avec authentification ou « authenticated encryption » en anglais est un mode de chiffrement permettant d'assurer à la fois la confidentialité, l'intégrité et l'authenticité des données chiffrées. Ce type de chiffrement est préconisé par la norme 3rd Generation Partnership Project (3GPP) régissant les réseaux mobiles de type Mission Critical Services » ou MCS. 100041 Un mode classique de chiffrement avec authentification est le mode « Galois Counter Mode » ou GCM. Le déchiffrement d'un message chiffré par le mode GCM nécessite le stockage de l'intégralité du message déchiffré avant de pouvoir vérifier son intégrité et le cas échéant, de pouvoir le délivrer en clair. 100051 Ce mode de fonctionnement n'est pas compatible avec les cryptomodules, c'est-à-dire les composants électroniques utilisés pour la cryptographie, par exemple dans les téléphones portables ou les ordinateurs portables, qui comportent des mémoires ayant des capacités de stockage réduites. Ainsi, il est impossible pour le cryptomodule d'un téléphone portable de stocker l'intégralité d'une vidéo chiffrée. [0006] TI existe donc un besoin de pouvoir déchiffrer un message chiffré dans un cryp- tomodule présentant une mémoire à la capacité de stockage réduite par un mode de chiffrement avec authentification, quelle que soit la taille du message chiffré. Résumé de l'invention [0007] L'invention offre une solution aux problèmes évoqués précédemment, en permettant à un cryptomodule ayant une mémoire de capacité réduite de déchiffrer n'importe quel message chiffré par un mode de chiffrement avec authentification. 100081 Un premier aspect de l'invention concerne un procédé de vérification d'intégrité et de déchiffrement d'un message chiffré comportant une pluralité de blocs de données Bi ordonnés pour i allant de 1 à N, N étant strictement supérieur à I, le message chiffré 2 étant stocké dans une mémoire d'un terminal, ledit terminal comportant un cryptomodule comprenant une mémoire de cryptomodulc, le procédé comportant les étapes suivantes réalisées par le cryptomodulc : Stocker ou activer, dans la mémoire de cryptomodulc, une clé d'intégrité CI propre au message chiffré ; Calculer un code d'intégrité initial 10 à l'aide de la clé d'intégrité CI et le stocker dans la mémoire de cryptomodule ; Générer une clé de vérification CV et la stocker dans la mémoire de cryptomodule ; Pour chaque bloc de données Bi : Stocker le bloc de données Bi dans la mémoire de cryptomodulc ; Calculer un code d'intégrité intermédiaire Ii et le stocker dans la mémoire de cryptomodulc Si le bloc de données Bi est le premier bloc de données BI du message chiffré, le code d'intégrité intermédiaire Il est calculé à l'aide de la clé d'intégrité CI, du premier bloc de données B1 et du code d'intégrité initial IO ; Sinon, le code d'intégrité intermédiaire Ii est calculé à l'aide de la clé d'intégrité CI, du bloc de données Bi et du code d'intégrité intermédiaire Ii-1 du bloc de données Bi-1 précédent le bloc de données Bi dans le message chiffré ; Générer un code d'authentification Ai du bloc de données Bi à l'aide de la clé de vérification CV, le code d'authentification Ai dépendant du rang i du bloc de données Bi, et le transmettre au terminal ; Effacer le bloc de données Bi de la mémoire de cryptomodule ; Analyser un code d'intégrité final In correspondant au code d'intégrité intermédiaire In du dernier bloc de données Bn du message chiffré pour vérifier l'intégrité du message chiffré ; Si l'intégrité du message chiffré est vérifiée : Stocker ou activer, dans la mémoire de cryptomodule, une clé de déchiffrement CD propre au message chiffré ; Pour chaque bloc de données Bi du message chiffré : Stocker le bloc de données Bi dans la mémoire de cryptomodule ; Recevoir du terminal le code d'authentification du bloc de données Bi et vérifier l'authenticité et le rang i du bloc de données Bi à l'aide de son code d'authentification Ai ; Si l'authenticité et le rang i du bloc de données Bi sont - - - - - 3 vérifiés, déchiffrer le bloc de données Bi à l'aide de la clé de déchiffrement CD et le transmettre au terminal pour le stocker dans la mémoire du terminal ; Effacer le bloc de données chiffré Bi et le bloc de données déchiffré Di de la mémoire de cryptomodule. [0009] Grâce à l'invention, le message chiffré est divisé en plusieurs blocs. Son intégrité est vérifiée bloc par bloc et il est ensuite déchiffré bloc par bloc une fois l'intégrité de l'intégralité du message vérifiée. La mémoire du cryptomodule ne stocke donc jamais plus de deux blocs de données. De plus, le procédé est sécurisé par les codes d'authentification qui permettent d'ajouter un niveau de sécurité entre l'étape de vérification de l'intégrité et l'étape de déchiffrement du message chiffré. [0010] Outre les caractéristiques qui viennent d'être évoquées dans le paragraphe précédent, le procédé selon un premier aspect de l'invention peut présenter une ou plusieurs caractéristiques complémentaires parmi les suivantes, considérées individuellement ou selon toutes les combinaisons techniquement possibles. [0011] Selon un mode de réalisation, le procédé comporte une étape consistant à effacer ou désactiver la clé d'intégrité CI de la mémoire de cryptomodule et à effacer les codes d'intégrité Ti de la mémoire de cryptomodule, juste avant l'étape consistant à stocker ou activer, dans la mémoire de cryptomodule, une clé de déchiffrement CD propre au message chiffré. [0012] Ainsi, la mémoire du cryptomodule stocke soit la clé d'intégrité CI, soit la clé de dé- chiffrement CD et non les deux, ce qui permet d'économiser de la capacité de stockage. [0013] Selon un mode de réalisation, le procédé comporte une étape consistant à effacer ou désactiver la clé de vérification CV et la clé de déchiffrement CD. [0014] Ainsi, le cryptomodule est opérationnel pour réaliser le procédé pour un autre message chiffré. [0015] Selon un mode de réalisation pouvant être combiné au mode de réalisation précédent, les codes d'authentification Ai sont générés par un algorithme d'authentification à clé secrète utilisant la clé de vérification CV comme clé secrète. [0016] Selon un exemple de ce mode de réalisation, l'algorithme d'authentification à clé secrète est l'algorithme HMAC SHA 256. [0017] Ainsi, les codes d'authentification Ai générés et la clé utilisée nécessitent une capacité de stockage réduite. [0018] Selon un mode de réalisation, la clé de vérification CV est générée aléatoirement. [0019] Ainsi, cela évite d'avoir à stocker plusieurs clés de vérification CV dans la mémoire du cryptomodule. [0020] Selon un premier mode de réalisation pouvant être combiné aux modes de réalisation précédents, le procédé est de type GCM pour « Galois Counter Mode ». [0021] Selon un deuxième mode de réalisation, le procédé est de type CWC pour « Carter-Wcgman Counter ». [0022] Ainsi, le procédé utilise un mode de chiffrement avec authentification. [0023] Selon un mode de réalisation pouvant être combiné aux modes de réalisation précédents, un bloc de données Bi comporte 512 bits. [0024] Un deuxième aspect de l'invention concerne un terminal comportant un cryp- tomodule selon un troisième aspect de l'invention et une mémoire. [0025] Selon un mode de réalisation, le terminal est compatible avec la norme 3GPP TS 33.180. [0026] Un troisième aspect de l'invention concerne un cryptomodule configuré pour mettre en oeuvre les étapes du procédé selon un premier aspect de l'invention, comportant une mémoire de cryptomodule. [0027] Selon un mode de réalisation, la mémoire de cryptomodule a une capacité de stockage inférieure à la taille du message chiffré. [0028] Selon un exemple de ce mode de réalisation, la mémoire de cryptomodule a une capacité de stockage choisie pour stocker sensiblement la clé de vérification CV, les codes d'intégrité Ii, deux blocs de données Bi, Di ou un bloc de données chiffré Bi et un code d'authentification Ai, et la clé d'intégrité Cl ou la clé de déchiffrement CD. [0029] Ainsi, le nombre d'éléments à stocker dans la mémoire de cryptomodule est minimisé par rapport à un procédé à mode de chiffrement avec authentification classique. [0030] Un quatrième aspect de l'invention concerne un produit programme d'ordinateur comprenant des instructions qui, lorsque le programme est exécuté par un ordinateur, conduisent celui-ci à mettre en oeuvre le procédé selon un premier aspect de l'invention. [0031] L'invention et ses différentes applications seront mieux comprises à la lecture de la description qui suit et à l'examen des figures qui l'accompagnent. Brève description des dessins [0032] Les figures sont présentées à titre indicatif et nullement limitatif de l'invention. La figure 1 montre un schéma synoptique du procédé selon un premier aspect de l'invention. La figure 2 montre une représentation schématique d'un terminal selon un deuxième aspect de l'invention comportant un cryptomodule selon un troisième aspect de l'invention. [0033] DESCRIPTION DETAILLEE D'AU MOINS UN MODE DE REALISATION DE L'INVENTION [0034] Sauf précision contraire, un même élément apparaissant sur des figures différentes présente une référence unique. [0035] Un premier aspect de l'invention concerne un procédé 100 de vérification d'intégrité et de déchiffrement d'un message chiffré. [0036] Le chiffrement d'un message est un processus de transformation du contenu du message de façon à le rendre inintelligible à toute personne autre que le destinataire détenteur d'une clé de déchiffrement lui permettant de réaliser le déchiffrement du message. [0037] Le déchiffrement est le processus inverse du chiffrement qui consiste à transformer le contenu du message au moyen de la clé de déchiffrement pour le rendre à nouveau intelligible. [0038] Un message chiffré est donc un message ayant subi un processus de chiffrement et qui est donc inintelligible pour les tiers. [0039] L'intégrité d'un message est vérifiée si le message n'a subi aucune altération ou des- truction volontaire ou accidentelle lors de son traitement, c'est-à-dire, par exemple, lors de son chiffrement, de son stockage ou encore de sa transmission, et que le message conserve donc un format permettant son déchiffrement. [0040] Un mode de chiffrement devant vérifier l'intégrité d'un message chiffré avant de le déchiffrer est appelé chiffrement avec authentification. Le mode de chiffrement est par exemple de type « Galois-Counter Mode » ou GCM ou encore le « Carter-Wcgman Couiner» ou CWC. [0041] Le message chiffré comporte au moins un bloc de données Bi, les blocs de données Bi étant ordonnés pour i allant de 1 à N. Ainsi, le bloc de données B3 est le troisième bloc de données Bi du message chiffré [0042] Par exemple, un bloc de données Bi comporte 512 bits. [0043] Un troisième aspect de l'invention concerne un cryptomodule 200 permettant la mise en oeuvre du procédé selon un premier aspect de l'invention. [0044] On entend par « cryptomodule » un composant électronique utilisé pour la cryp- tographie, c'est-à-dire pour le chiffrement/déchiffrement de messages. [0045] Le cryptomodule 200 est par exemple une carte à puce ou une puce électronique. [0046] Un deuxième aspect de l'invention concerne un terminal 300. [0047] Le terminal 300 est par exemple un téléphone portable ou plus particulièrement un smartphone, une tablette ou encore un ordinateur portable. [0048] Par exemple, le terminal 300 est compatible avec la norme 3GPP TS 33.180. [0049] [fig.2] montre une représentation schématique du terminal 300. [0050] Le terminal 300 comporte une mémoire 301 et le cryptomodule 200. [0051] Le cryptomodule 200 comporte une mémoire 201 ayant une capacité de stockage in- 6 férieure à la capacité de stockage de la mémoire 301 du terminal 300, en particulier, la mémoire 301 du terminal 300 a une capacité de stockage suffisante pour stocker le message chiffré alors que la mémoire 201 du cryptomodule 200 n'a pas nécessairement une capacité de stockage suffisante pour stocker le message chiffré. [0052] [fig.1] montre un schéma synoptique du procédé 100 selon un premier aspect de l'invention. [0053] Le procédé 100 selon un premier aspect de l'invention comporte plusieurs étapes mises en oeuvre par le cryptomodule 200. [0054] Initialement, le message chiffré est stocké dans la mémoire 301 du terminal 300. [0055] Lors d'une première étape 101 du procédé 100, le cryptomodulc 200 stocke ou active dans sa mémoire 201 une clé d'intégrité CI propre au message chiffré. En effet, la clé d'intégrité CI du message chiffré peut être soit fournie au cryptomodulc 200 au moment des opérations, soit présente a priori dans le cryptomodulc 200 et une activation est alors suffisante pour pouvoir l'utiliser. [0056] Quand la clé d'intégrité CI n'est pas présente a priori dans le cryptomodulc 200, la première étape 101 du procédé 100 consiste, pour le cryptomodule 200, à sélectionner parmi les clés d'intégrité CI stockées dans le terminal 300, la clé d'intégrité CI correspondant au message chiffré. [0057] A l'issue de la première étape 101 du procédé 100, le cryptomodulc 200 peut utiliser la clé d'intégrité CI permettant de vérifier l'intégrité du message chiffré. [0058] Lors d'une deuxième étape 102 du procédé 100, le cryptomodule 200 génère une clé de vérification CV et stocke la clé de vérification CV dans sa mémoire 201. [0059] La clé de vérification CV est par exemple générée aléatoirement. [0060] Lors de la troisième étape 103 du procédé 100, le cryptomodule 200 calcule un code d'intégrité initial IO à partir de la clé d'intégrité CI. Une fois calculé, le code d'intégrité initial IO est stocké dans la mémoire du cryptomodule 201. [0061] Le code d'intégrité initial IO est par exemple une fonction constante. Le code d'intégrité initial IO est par exemple généré par l'algorithme AES (pour « Advanced Encryption Standard ») à partir de la clé d'intégrité CI. [0062] Les quatrième 104, cinquième 10, sixième 106 et septième 107 étapes du procédé 100 sont ensuite réalisées pour chaque bloc de données Bi du message chiffré [0063] Lors de la quatrième étape 104 du procédé 100, le cryptomodule 200 stocke un bloc de données Bi dans sa mémoire 201. [0064] Lors de la cinquième étape 105 du procédé 100, le cryptomodule 200 calcule un code d'intégrité intermédiaire Ii. Ce code d'intégrité intermédiaire Ii est stocké dans la mémoire du cryptomodule 201. [0065] Le code d'intégrité intermédiaire Ii est calculé à l'aide de la clé d'intégrité CI, du bloc de données Bi stocké et du code d'intégrité intermédiaire Ii-1 du bloc de données 7 Bi-1 précédent le bloc de données Bi dans le message chiffré. Par exemple, le troisième code d'intégrité 13 est calculé à partir de la clé d'intégrité CI, du troisième bloc de données B3 et du deuxième code d'intégrité intermédiaire 12 calculé à partir du deuxième bloc de données B2. [0066] Par exemple, le code d'intégrité intermédiaire Ii s'exprime de la manière suivante : ii = + Bi)* Cl. [0067] Le code d'intégrité intermédiaire 11 du premier bloc de données B1 est calculé à l'aide de la clé d'intégrité Cl, du bloc de données B1 stocké et du code d'intégrité initial IO. [0068] Lors de la sixième étape 106 du procédé 100, le cryptomodule calcule un code d'authentification Ai pour le bloc de données Bi dépendant de son rang i dans le message chiffré. [0069] Le code d'authentification Ai est calculé à l'aide de la clé de vérification CV. Par exemple, le code d'authentification Ai est calculé par un algorithme d'authentification à clé secrète utilisant la clé de vérification CV comme clé secrète. Ce type d'algorithme fonctionne avec une clé secrète de taille réduite et génère des codes d'authentification de taille réduite, ce qui est compatible avec la problématique de capacité de stockage réduite du cryptomodule 200. [0070] Par exemple, l'algorithme d'authentification à clé secrète est l'algorithme HMAC SHA 256. La clé de vérification CV est de taille 256 bits et les codes d'authentification générés sont alors de 256 bits. [0071] Le cryptomodule 200 envoie alors le code d'authentification Ai au terminal 300 pour qu'il le stocke dans sa mémoire 301. [0072] Lors de la septième étape 107 du procédé 100, le cryptomodule 200 efface le bloc de données Bi traité de sa mémoire 201. [0073] Une fois que les quatrième 104, cinquième 105, sixième 106 et septième 107 étapes du procédé 100 sont réalisées pour chaque bloc de données Bi du message chiffré, le cryptomodule 200 réalise une huitième étape 108 du procédé 100 qui consiste à analyser un code d'intégrité final In du terminal 300 pour vérifier l'intégrité du message chiffré. [0074] Le code d'intégrité final In correspond au code d'intégrité intermédiaire In du dernier bloc de données Bn du message chiffré. Ainsi, le code d'intégrité final In dépend de tous les codes d'intégrité intermédiaires Ii calculés pour chaque bloc de données Bi et permet donc de vérifier l'intégrité de l'ensemble des blocs de données Bi et donc du message chiffré dans son ensemble. [0075] Si l'intégrité du message chiffré n'est pas vérifiée, le message chiffré ne peut être déchiffré Le procédé 100 s'interrompt alors. [0076] Si l'intégrité du message chiffré est vérifiée, il est alors possible, dans un mode de 8 chiffrement avec authentification, de passer au déchiffrcmcnt du message chiffré. [0077] Lors d'une neuvième étape 109 optionnelle du procédé 100, le cryptomodulc 200 efface ou désactive la clé d'intégrité CI de sa mémoire 201 et efface les codes d'intégrité Ii de sa mémoire 201. [0078] Lors d'une dixième étape 110 du procédé 100, le cryptomodulc 200 stocke ou active dans sa mémoire 201 une clé de déchiffrement CD propre au message chiffré. En effet, la clé de déchiffrcmcnt CD du message chiffré peut être soit fournie au cryptomodule 200 au moment des opérations, soit présente a priori dans le cryptomodulc 200 et une activation est alors suffisante pour pouvoir l'utiliser. [0079] Quand la clé de déchiffrement CD n'est pas présente a priori dans le cryptomodulc 200, la dixième étape 110 du procédé 100 consiste, pour le cryptomodulc 200, à sélectionner parmi les clés de déchiffrement CD stockées dans le terminal 300, la clé de déchiffrement CD correspondant au message chiffré. [0080] A l'issue de la dixième étape 110 du procédé 100, le cryptomodulc 200 peut utiliser la clé de déchiffrcmcnt CD permettant de déchiffrer le message chiffré. [0081] Les onzième 111, douzième 112, treizième 113 et quatorzième 114 étapes du procédé 100 sont ensuite réalisées pour chaque bloc de données Bi du message chiffré. [0082] Lors de la onzième étape 111 du procédé 100, le cryptomodule 200 stocke un bloc de données Bi dans sa mémoire 201. [0083] Lors de la douzième étape 112 du procédé 100, le cryptomodule 200 reçoit le code d'authentification Ai du bloc de données Bi traité. [0084] Le cryptomodule 200 vérifie alors l'authenticité et le rang i du bloc de données Bi traité à l'aide de son code d'authentification Ai. [0085] L'authenticité du bloc de données Bi est vérifiée si le bloc de données Bi n'a pas subi d'altérations depuis l'étape 106 de génération du code d'authentification Ai. Le code d'authentification Ai permet donc d'ajouter un niveau de sécurité entre l'étape 105 de vérification de l'intégrité du message chiffré et son déchiffrement et de s'assurer que le message qui va être déchiffré est bien le même message que celui dont l'intégrité a été précédemment vérifiée. [0086] Si l'authenticité du bloc de données Bi n'est pas vérifiée, le message chiffré ne peut être déchiffré et le procédé 100 s'interrompt alors. [0087] La vérification du rang i permet de s'assurer que les blocs de données Bi du message chiffré soient déchiffrés dans le même ordre que ne le sont les blocs de données Bi chiffrés correspondants dans le message chiffré pour qu'à la lecture du message déchiffré les blocs de données Bi déchiffrés soient dans le bon ordre. [0088] Si l'authenticité et le rang i du bloc de données Bi traité sont vérifiés, le cryp- tomodule 200 réalise la treizième étape 113 du procédé 100 qui consiste à déchiffrer le bloc de données Bi traité à l'aide de la clé de déchiffrement CD. 9 [0089] A l'issue de l'étape 113 de déchiffrement du bloc de données Bi, le bloc de données Bi déchiffré est stocké dans la mémoire 301 du terminal 300. [0090] Lors de la quatorzième étape 114 du procédé 100, le cryptomodule 200 efface le bloc de données Bi traité de sa mémoire 201. [0091] A l'issue des onzième 111, douzième 112, treizième 113 et quatorzième 114 étapes du procédé 100, le message chiffré est entièrement déchiffré et les blocs de données Bi déchiffrés sont stockés dans la mémoire 301 du terminal 300 dans le même ordre que le sont les blocs de données Bi chiffrés correspondants dans le message chiffré. [0092] La mémoire 201 du cryptomodule 200 ne contient plus aucun bloc de données Bi. [0093] Lors d'une quinzième étape 115 optionnelle du procédé 100, le cryptomodule 200 efface ou désactive la clé de vérification CV et la clé de déchiffrement CD de sa mémoire 201.Ainsi, à l'issue du procédé 100, la mémoire 201 du cryptomodule ne contient plus aucune clé active, ni aucun code ayant servi lors du procédé 100. Lc cryptomodule 200 peut alors réaliser à nouveau le procédé 100 sur un autre message chiffré. [0094] Ainsi, lors du procédé 100 illustré à la figure 1, la mémoire 201 du cryptomodule 200 ne comporte jamais plus de deux clés, soit la clé de vérification CV et la clé d'intégrité CI, soit la clé de vérification CV et la clé de déchiffrement CD, et jamais plus de deux blocs de données Bi, Di. [0095] Ainsi, la mémoire du cryptomodule 200 peut avoir une capacité de stockage choisie pour lui permettre de stocker sensiblement la clé de vérification CV, les codes d'intégrité Ii, deux blocs de données Bi, Di ou un bloc de données chiffré Bi et un code d'authentification Ai et la clé d'intégrité CI ou la clé de déchiffrement CD. [Revendication 1]