Pourquoi ' t je ne devrais pas utiliser le cryptage ECB?
On février 18, 2021 by adminJutilise Java pour générer des chaînes chiffrées et jobtiens cet avertissement au moment de la construction:
Le mode de chiffrement ECB ne doit pas être utilisé
Je me demande donc pourquoi je ne devrais pas utiliser ECB et ce que je peux utiliser à la place ?
Commentaires
- Les commentaires ne sont pas destinés à une discussion approfondie; cette conversation a été déplacée vers le chat .
- Travaillez-vous au zoom?;)
Réponse
Pourquoi ne devrais-je pas utiliser le cryptage ECB?
La principale raison de ne pas utiliser le cryptage en mode ECB est que ce nest pas sémantiquement sécurisé — cest-à-dire que le simple fait dobserver le texte chiffré ECB peut divulguer des informations sur le texte en clair (même au-delà de sa longueur, ce qui tous les schémas de chiffrement acceptant des textes en clair arbitrairement longs fuiront dans une certaine mesure).
Spécifique Le problème avec le mode ECB est que le cryptage du même bloc (de 8 ou 16 octets, ou quelle que soit la taille du bloc du chiffrement sous-jacent) de texte en clair en utilisant le mode ECB produit toujours le même bloc de texte chiffré. Cela peut permettre à un attaquant de:
- détecter si deux messages chiffrés ECB sont identiques;
- détecter si deux messages chiffrés ECB partagent un préfixe commun;
- détecter si deux messages chiffrés ECB partagent dautres sous-chaînes communes, à condition que ces sous-chaînes soient alignées aux limites des blocs; ou
- détecter si (et où) un seul message chiffré par la BCE contient des données répétitives (telles que de longues séries despaces ou doctets nuls, des champs den-tête répétés ou des phrases répétées par coïncidence dans le texte).
Il ya « une belle démonstration graphique de cette faiblesse sur Wikipédia, où la même image (brute, non compressée) est chiffrée en utilisant à la fois le mode ECB et un mode de chiffrement sémantiquement sécurisé (tel que CBC, CTR, CFB ou OFB):
Bien que ce scénario soit quelque peu artificiel (on ne crypterait généralement pas les images brutes comme celle-ci), il démontre bien le problème avec le mode ECB: les zones répétitives dans limage dentrée entraînent des motifs répétitifs dans la sortie cryptée, de sorte que de nombreuses caractéristiques à grande échelle de limage restent reconnaissables malgré le cryptage. Dans le monde réel, un cryptanalyste attaquant un ECB- cryptage basé système serait plus susceptible de rechercher de tels modèles dans un vidage hexadécimal du texte chiffré, mais le principe est le même.
Un cas réel de cette faiblesse du cryptage ECB contribuant à un compromis de données dans le monde réel est donnée par la fuite de la base de données de mots de passe Adobe de 2013, comme décrit dans cette réponse . Ici, un élément contribuant à la gravité de la fuite était quau lieu de les hacher correctement , Adobe avait chiffré les mots de passe en mode ECB. Cela a permis aux attaquants de localiser rapidement les mots de passe partagés par plusieurs comptes, ou de partager un préfixe commun avec dautres mots de passe (comme password1 et password2 ), et a également révélé la longueur approximative de chacun mot de passe.
Le mode de chiffrement ECB présente également dautres faiblesses, comme le fait quil « est hautement malléable : comme chaque Le bloc de texte brut est chiffré séparément, un attaquant peut facilement générer de nouveaux textes chiffrés valides en rassemblant des blocs à partir de textes chiffrés précédemment observés.
Cependant, la malléabilité nest un problème que si le chiffrement ECB est utilisé sans code dauthentification de message et, dans ce cas, il est partagé (dans une certaine mesure) par tous les autres modes de chiffrement non authentifiés , comme les CBC, CTR, CFB et OFB susmentionnés. Ainsi, il ne peut pas vraiment être considéré comme une faiblesse spécifique du mode ECB, même si cela a tendance à être un problème supplémentaire lorsque jamais le mode ECB est utilisé.
Que dois-je utiliser à la place?
Vous devez utiliser nimporte quel chiffrement authentifié mode, tel que GCM , EAX ou OCB .
Personnellement, pour les messages courts, jaime plutôt le mode SIV ( RFC 5279 ), qui fournit une couche supplémentaire de résistance aux abus. (De nombreux autres modes de cryptage se cassent assez mal si le même IV / nonce est accidentellement utilisé pour crypter plusieurs messages. Le mode SIV conserve toutes ses propriétés de sécurité dans cette situation, à lexception de la fuite de savoir si les messages cryptés sont identiques.)
Vous pouvez également utiliser nimporte quel mode de chiffrement traditionnel sémantiquement sécurisé (tel que CBC ou CTR ), combiné à un code dauthentification de message (tel que HMAC ) à laide du Chiffrer -puis construction-MAC . (Autrement dit, vous devez dabord crypter le message, puis calculer un MAC du texte chiffré et lajouter au texte chiffré.) Tant que vous vous assurez de vérifier le MAC avant dessayer de déchiffrer le message, cette construction vous protégera de les diverses vulnérabilités de ces modes aux attaques actives (texte chiffré choisi).
Pour le chiffrement de disque ou des applications similaires qui nécessitent la possibilité de modifier des parties du texte chiffré sans rechiffrer toutes les données, vous devez utiliser un mode de chiffrement conçu à cet effet, tel que XTS . Notez que ces modes manquent généralement de résistance aux attaques actives, et peuvent présenter dautres faiblesses quil convient de comprendre avant de les utiliser. Si possible, ils doivent être combinés avec une forme de protection dintégrité, telle quun MAC sur un arbre de hachage .
Commentaires
- Que suggéreriez-vous dans les cas où lon souhaite pouvoir lire / écrire des blocs dun magasin de données dans un ordre arbitraire, de préférence en faisant mapper un bloc tout-un à un tout- ceux qui bloquent? Mon inclination serait de chiffrer en xoring les données de bloc avec un hachage très simple du numéro de bloc, en annulant / répétant lopération xor si elle donne un bloc tout-un, en utilisant ECB sur le résultat et en xoring avec le complément du résultat de crypter un bloc tout-un [ce complément ne doit être calculé quune seule fois pour chaque clé]. Cela vous semble-t-il une bonne approche?
- @supercat: ' est essentiellement chiffrement de disque , vous pouvez donc utiliser des modes conçus pour cela. Je pense que XTS est considéré comme un bon choix, même si, comme tous les modes de chiffrement de disque, il a ses limites (que vous devez comprendre avant de lutiliser). Si possible, il doit être combiné avec un MAC quelconque pour se défendre contre les attaques actives.
- @IlmariKaronen: je pense en disant " don ' t utiliser ECB " est un peu exagéré. Je comprends les risques, mais souvent (à moins que votre document – ce que vous chiffrez – nest ' très secret, et ladversaire ne ' Je nai pas trop de capacités, etc.), ça devrait aller.
- @giorgim: Il ny a ' vraiment aucune bonne raison pour utiliser ECB (sauf comme élément constitutif des autres modes). Presque toutes les bibliothèques cryptographiques fournissent au moins le mode CBC ou CTR, et sinon, elles ' sont triviales à implémenter vous-même. Claquez un HMAC (ou CMAC) en plus de cela, et vous ' êtes prêt à partir.
- @giorgim: Même si vous ne ' t avoir aucun mode MAC ou AE disponible, lutilisation de CBC est toujours strictement meilleure que ECB. Si vous avez une fonction MAC, CBC-then-MAC est un très bon mode AE.
Réponse
Vous ne devez pas utiliser le mode ECB car il cryptera des blocs de message identiques (cest-à-dire la quantité de données cryptées à chaque invocation du bloc-chiffrement) en blocs de texte chiffré identiques. Cest un problème car cela révélera si les mêmes blocs de messages sont cryptés plusieurs fois. Wikipédia a une très belle illustration de ce problème .
Commentaires
- Commentaires ne sont pas pour une discussion approfondie; cette conversation a été déplacée vers le chat .
Réponse
Comme @Guut Boy la mentionné, ECB nest pas sémantiquement sécurisée, en ce sens que si un message avec des blocs identiques est chiffré, alors un attaquant obtient un certain avantage davoir des informations en clair, en observant uniquement CipherText.
Utilisez de préférence le mode CBC pour crypter un message long. Ce mode introduit un paramètre supplémentaire appelé IV (Valeur initiale), vous initialisez avec le numéro de session pour éviter les attaques en cas de cryptage du même message deux fois.
Commentaires
- IV signifie vecteur dinitialisation, pas valeur initiale.
- 1. Ce nest pas un bon conseil. Utiliser le chiffrement sans lauthentification ne tient pas compte dune décennie de conseils de la part des cryptographes. Il serait préférable dutiliser le cryptage authentifié, comme le recommande Ilmari Karonen. 2. Cette réponse semble être remplacée par Ilmari Karonen ' réponse.
- En plus de cela, le fait est que lIV doit être imprévisible pour un attaquant (i.e. indiscernable du hasard), et cette réponse indique que vous devez utiliser le numéro de session, qui nest généralement pas du tout aléatoire.
Laisser un commentaire