Quelle est la principale différence entre une clé, un IV et un nonce?

Avr 24, 2021
admin

Une clé, dans le contexte de la cryptographie symétrique, est quelque chose que vous gardez secret. Quiconque connaît votre clé (ou peut la deviner) peut décrypter toutes les données que vous avez chiffrées avec elle (ou falsifier les codes d’authentification que vous avez calculés avec elle, etc.)

(Il existe également la cryptographie « asymétrique » ou à clé publique, où la clé comporte effectivement deux parties : la clé privée, qui permet le déchiffrement et/ou la signature, et une clé publique (dérivée de la clé privée correspondante) qui permet le chiffrement et/ou la vérification de la signature.)

Un IV ou vecteur d’initialisation est, dans son sens le plus large, juste la valeur initiale utilisée pour démarrer un certain processus itéré. Le terme est utilisé dans plusieurs contextes différents et implique des exigences de sécurité différentes dans chacun d’eux. Par exemple, les fonctions de hachage cryptographiques ont généralement un IV fixe, qui n’est qu’une constante arbitraire incluse dans la spécification de la fonction de hachage et utilisée comme valeur de hachage initiale avant l’introduction de toute donnée :

Diagramme d'une fonction de hachage Merkle-Damgård de Wikipedia

A l’inverse, la plupart des modes de fonctionnement du chiffrement par blocs nécessitent un IV qui est aléatoire et imprévisible, ou au moins unique pour chaque message chiffré avec une clé donnée. (Bien sûr, si chaque clé n’est jamais utilisée pour chiffrer un seul message, on peut s’en sortir en utilisant un IV fixe). Cet IV aléatoire garantit que chaque message est chiffré différemment, de sorte que la vue de plusieurs messages chiffrés avec la même clé ne donne pas plus d’informations à l’attaquant que la vue d’un seul long message. En particulier, il garantit que le chiffrement du même message deux fois donne deux ciphertextes complètement différents, ce qui est nécessaire pour que le schéma de chiffrement soit sémantiquement sûr.

Dans tous les cas, l’IV n’a jamais besoin d’être gardé secret – si c’était le cas, ce serait une clé, pas un IV. En effet, dans la plupart des cas, garder l’IV secret ne serait pas pratique même si vous le vouliez puisque le destinataire doit le connaître pour décrypter les données (ou vérifier le hachage, etc.).

Un nonce, au sens large, est juste « un nombre utilisé une seule fois ». La seule chose généralement exigée d’un nonce est qu’il ne doit jamais être utilisé deux fois (dans le cadre pertinent, comme le chiffrement avec une clé particulière).Les IV uniques utilisés pour le chiffrement par bloc sont qualifiés de nonces, mais divers autres schémas cryptographiques font également usage de nonces.

Il y a une certaine variation sur lequel des termes « IV » et « nonce » est utilisé pour les différents modes de fonctionnement du chiffrement par bloc : certains auteurs utilisent exclusivement l’un ou l’autre, tandis que certains font une distinction entre eux. Pour le mode CTR, en particulier, certains auteurs réservent le terme « IV » au bloc d’entrée complet du chiffrement formé par la concaténation du nonce et de la valeur initiale du compteur (généralement un bloc de tous les bits zéro), tandis que d’autres préfèrent ne pas utiliser du tout le terme « IV » pour le mode CTR. Tout cela est compliqué par le fait qu’il existe plusieurs variations sur la façon dont le nonce/IV envoyé avec le message en mode CTR est effectivement mappé dans l’entrée initiale du chiffrement par blocs.

A l’inverse, pour les modes autres que CTR (ou les modes connexes tels que EAX ou GCM), le terme « IV » est presque universellement préféré à « nonce ». Ceci est particulièrement vrai pour le mode CBC puisqu’il a des exigences sur ses IV (spécifiquement, qu’ils soient imprévisibles) qui vont au-delà de l’exigence habituelle d’unicité attendue des nonces.

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.