web-dev-qa-db-fra.com

Pourquoi devrais-je utiliser AES-256-CBC si AES-256-GCM est plus sécurisé?

Je suppose que l'essentiel de ma question est le suivant: y a-t-il des cas où la SRC est meilleure que GCM?

La raison pour laquelle je pose la question est qu'à la lecture de cet article par Matthew Green, et cette question sur l'échange de pile de cryptographie, et cette explication d'un attaque sur XML (puisque je crypte json dans mon travail, bien qu'il ne soit diffusé nulle part, mais apparemment une attaque cipertext choisie est possible), alors je ne devrais jamais, jamais utiliser CBC, et simplement utiliser GCM.

En d'autres termes: il n'y a aucune raison d'utiliser CBC, tant que GCM existe ( ce qu'il fait sur OpenSSL , la bibliothèque que j'utilise pour mon travail de chiffrement). Parce que:

GCM = CBC + Authentification.

Quelqu'un pourrait-il me dire si mes conclusions sont correctes?


MISE À JOUR IMPORTANTE: Étant donné que cette question devient populaire si rapidement, je voudrais souligner à partir de mes recherches que GCM IS NOT A SILVER BULLET . Il y a un énorme problème avec GCM, c'est que si vous utilisez deux fois le même IV, il peut compromettre votre clé (en raison de la l'utilisation de GMAC, donc ce n'est pas infaillible.) Dans le cas où vous êtes paranoïaque (comme moi), CBC avec HMAC ( chiffrer puis MAC ) est probablement le meilleur si l'on veut être sur le coffre-fort (Veuillez également me corriger si je me trompe sur cette mise à jour).

41

CBC et GCM sont très différents. Les deux sont sécurisés lorsqu'ils sont utilisés correctement, mais CBC n'est pas aussi parallélisable et manque d'authentification intégrée. Pour cette raison, CBC n'est vraiment pratique que pour crypter des fichiers locaux qui n'ont pas besoin d'un accès aléatoire.

En ce qui concerne ses avantages, CBC n'échoue pas de manière aussi catastrophique si l'IV est réutilisé, et il peut être plus rapide s'il est implémenté sur du matériel de base.

Quant à GCM, c'est fondamentalement GCM = CTR + Authentification (pas CBC). Il est rapide et sécurisé s'il est utilisé correctement, et très polyvalent, d'où sa popularité.

30
ZOMVID-20
  1. CBC est plus ancien, ce qui signifie plus de compatibilité et seulement des raisons historiques globales.
  2. Il y a avantages en termes de performances , si vous n'avez pas besoin de GCM pour l'authenticité. Vous souhaiterez peut-être souvent votre propre système d'authenticité avec des caractéristiques supplémentaires ou vous n'en aurez peut-être pas du tout besoin.
13
Peter Harmann

Big nitpick:

GCM = CBC + Authentification.

Non, GCM = CTR + Authentification.

Mais en général, vous avez raison; CBC est un mode plus ancien qui a été inventé à l'époque des ténèbres sur le plan cryptographique (au plus tard dans les années 1970), et est maintenant défavorisé en raison du manque d'authentification intégrée et de tous les problèmes causés par le rembourrage des oracles. Un bon exemple pratique de cela est que TLS 1.3 s'est débarrassé du support de CBC.

GCM n'est pas non plus une panacée, cependant. C'est à proprement parler correct, mais il s'est avéré loin d'être infaillible en pratique:

  1. Il échoue de façon spectaculaire si vous réutilisez un nonce. Un seul nonce répété permet à un adversaire de récupérer sa sous-clé d'authentification, ainsi que d'apprendre le XOR des deux messages avec le même nonce.
  2. Ses nonces sont inconfortablement courts (96 bits), ce qui peut être difficile à utiliser avec des nonces aléatoires .

CBC n'a pas ces problèmes. Les IV aléatoires fonctionnent très bien (et sont en fait nécessaires), et si vous répétez une IV, vous n'obtenez pas d'échec catastrophique, vous perdez simplement des informations sur les préfixes de texte en clair égaux.

9
Luis Casillas

Autrement dit - CBC est venu en premier. Il est possible que vous ayez des systèmes qui ne prennent en charge que CBC.

Ce serait la même question que "Pourquoi devrais-je jamais utiliser RC4 et MD5 si AES et SHA-2 sont disponibles?" Compatibilité et historique. (Idem avec de nombreux autres choix de chiffrement.)

Si tous vos systèmes prennent en charge AES-256-GCM, disposent des ressources nécessaires pour l'exécuter et ont un besoin de sécurité plus élevé, utilisez AES = 256-GCM.

Par exemple, j'ai des systèmes qui ne prennent en charge rien de plus récent que SSL3, RC4 et MD5, avec des certificats de 1024 bits. (En 2018, oui). Bien sûr, ce n'est pas beaucoup mieux que ROT13 de nos jours, mais cela en fait assez pour ces données qui ne nécessitent aucun cryptage. (De nos jours, les gens appellent ces choses IoT.)

7
MikeP