web-dev-qa-db-fra.com

Que signifie "clé avec une longueur de x bits"?

Je voudrais savoir ce que cela signifie de dire "le cryptosystème C utilise des clés d'une longueur de x bits". Je ne comprends pas ce que signifie la longueur des bits ... cela ne dépend-il pas du codage? Le même mot code pour des chaînes de bits de longueurs différentes dans utf8, iso et unicode, donc y a-t-il un codage général utilisé pour définir la longueur d'une clé? Ou la "longueur de x bits" signifie-t-elle quelque chose de complètement différent?

22
strauberry

Pour algorithmes symétriques ( cryptage symétrique , Code d'authentification de message ), une clé est une séquence de bits, de sorte que toute séquence de la bonne longueur est une clé possible. Par exemple, AES est un algorithme de chiffrement symétrique (en particulier, un block cipher ) qui est défini sur des clés de 128, 192 et 256 bits: toute séquence de 128, 192 ou 256 bits peut être utilisée comme clé. La façon dont vous encodez ces bits n'est pas pertinente ici: que vous les vidiez simplement (8 bits par octet), que vous utilisiez Base64, ou hexadécimal, ou que vous les déduisiez à partir d'une chaîne de caractères, ou autre, c'est à vous de décider.

Il y a quelques pièges avec quelques algorithmes. L'exemple principal est DES , un prédécesseur d'AES. DES est défini pour utiliser une clé 64 bits. Cependant, si vous regardez la définition de l'algorithme, vous voyez que seulement 56 de ces bits sont utilisés; les 8 autres sont simplement ignorés (si vous numérotez les bits de 1 à 64, ce sont les bits 8, 16, 24, 32, 40, 48, 56 et 64; ils sont censés être des "bits de parité" selon les 56 autres, mais personne ne se soucie vraiment de les régler ou de les vérifier). On dit donc souvent que DES a une clé 56 bits. C'est parce que la longueur de clé est liée à la sécurité: si un algorithme accepte des clés de longueur n bits, alors il y a 2n clés possibles, et donc toutes les essayer (attaque dite "recherche exhaustive" ou "force brute") a un temps proportionnel à 2n (avec n assez grand, c'est-à-dire plus d'environ 85, c'est technologiquement impossible). En ce sens, DES offre la sécurité d'une clé de 56 bits ( 256 touches "vraiment distinctes" possibles). Pourtant, si vous utilisez une bibliothèque implémentant DES, cette bibliothèque attendra DES sous forme de séquences de 64 bits (souvent fournies en 8 octets).

Un autre algorithme avec une règle spéciale est RC2 . Il accepte des clés de 8 à 128 bits (multiple de 8 uniquement); mais il a également un paramètre supplémentaire appelé longueur de clé effective dénoté par "T1". Au milieu du traitement de la clé, une valeur interne est "réduite" à une séquence de bits T1, ce qui signifie que le chiffrement ultérieur ne dépendra que des valeurs de bits spécifiques T1 dans cette valeur interne. La résistance de RC2 à la recherche exhaustive n'est alors pas plus que celle offerte par une clé T1 bits, car on peut essayer toutes les séquences possibles de bits T1 pour cette valeur interne. Pourtant, RC2 a toujours une longueur de clé réelle (la longueur de la séquence de bits qui est fournie comme clé) qui peut être supérieure à T1.

Pour algorithmes asymétriques (également connu sous le nom de cryptographie à clé publique , englobant le chiffrement asymétrique, les signatures numériques, certains protocoles d'échange de clés et quelques algorithmes plus ésotériques), les clés fonctionnent par paires consistant en une clé publique et une clé privée. Ces clés sont des objets mathématiques avec une structure interne lourde. La "longueur de clé" est alors une mesure conventionnelle de la taille de l'un des objets mathématiques impliqués.

Par exemple, une clé publique RSA contient un grand entier appelé module, ainsi qu'un autre entier (généralement petit) appelé exposant public. Lorsque nous disons une "clé RSA 1024 bits", nous voulons dire que le module a une longueur 1024 bits, c'est-à-dire est un entier supérieur à 21023 mais inférieur à 21024. Un tel entier pourrait être codé comme une séquence de 1024 bits, soit 128 octets. Pourtant, la clé publique doit également contenir l'exposant public, de sorte que la longueur codée réelle sera plus grande. Et la clé privée est, d'un point de vue théorique, la connaissance de la façon dont le module peut être factorisé en nombres premiers; l'encodage traditionnel pour cette connaissance est celui des facteurs premiers, avec un tas de valeurs auxiliaires qui pourraient être recalculées à partir des facteurs (mais qui seraient légèrement coûteuses) et pourraient aider à exécuter l'algorithme plus rapidement.

Pour les types de clés distincts qui fonctionnent sur des mathématiques distinctes, d'autres "longueurs" sont utilisées, vous ne pouvez donc pas comparer directement la sécurité des algorithmes en comparant simplement les longueurs de clés. Une clé 256 bits ECDSA est beaucoup plus sécurisée qu'une clé RSA 768 bits. En outre, la structure mathématique inhérente aux paires de clés publiques/privées permet des attaques beaucoup plus rapides que d'essayer simplement un tas de bits aléatoires, et il existe de nombreux détails subtils. Voir ce site pour des explications et des calculateurs en ligne pour les différents ensembles de règles sur la comparaison des tailles clés que de nombreux organismes de réglementation ont élaborés.

23
Thomas Pornin

Considérez le cryptage simple consistant à déplacer chaque lettre une vers la droite dans l'alphabet, de sorte que A devienne B, B devienne C, etc. Pour que: BONJOUR devienne crypté comme: IFMMP

Je peux décaler une lettre vers la droite, deux lettres vers la droite ou jusqu'à 25 lettres vers la droite. Considérez le "nombre de lettres à droite" comme la "clé". Il faut 5 mors pour conserver un nombre compris entre 0 et 25. Par conséquent, la taille de la clé est "5 bits".

Ou, au lieu de se déplacer vers la droite, disons que nous réorganisons au hasard l'alphabet et faisons un mappage un à un: ABCDEFGHIJKLMNOPQRSTUVWXYZ RJQFGSKPBTODUZLNHYAVXEMWIC Dans ce cas, nous recherchons la lettre 'H' dans le tableau, voyons que il se transforme en la lettre 'P', et que le message: BONJOUR devient: PGDDL

Disons que le réarrangement aléatoire de l'alphabet se fait avec une séquence mathématique basée sur un nombre de 5 bits, de telle sorte que chaque nombre génère une séquence différente. Ainsi, le nombre à 5 bits est à nouveau la "clé".

Le problème avec une clé à 5 bits est qu'elle n'a que 32 combinaisons. Si je connais l'algorithme de cryptage, je peux toutes les 32 clés jusqu'à ce que je trouve la bonne combinaison. Plus la clé est grande, plus cela devient difficile - EXPONENTIELLEMENT. Une clé à 6 bits a 64 combinaisons, une clé à 7 bits a 128 combinaisons, etc. Une clé de 10 bits a mille combinaisons, une clé de 20 bits a un million de combinaisons, une clé de 30 bits a un milliard de combinaisons.

Disons que vous avez un ordinateur qui peut tester un milliard de clés par seconde en essayant de forcer brutalement toutes les combinaisons. Cela signifie que vous pouvez casser une clé de 30 bits en une seconde. Mais cela signifie qu'il vous faudra un milliard de secondes (ou 34 ans) pour casser une clé de 60 bits.

Tous les 30 bits que nous ajoutons rendent la tâche un milliard de fois plus difficile. Une agence d'espionnage comme la NSA peut casser des clés de 60 bits en utilisant des superordinateurs, mais une clé de 90 bits est un milliard de fois plus difficile à casser, et une clé de 120 bits serait un milliard de fois plus difficile encore) à craquer qu'une clé de 90 bits.

C'est pourquoi les anciens WEP (40 bits) et DES (56 bits) sont considérés comme obsolètes: nous pouvons les casser avec des ordinateurs de bureau en essayant toutes les combinaisons. C'est pourquoi la crypto moderne, comme AES, utilise 128 Nous ne pouvons pas forcer ces algorithmes par la force brute.

14

La longueur d'une clé en bits n'est rien de plus qu'une spécification de sa taille. Une clé de 128 bits occupe 16 octets d'espace - juste les bits bruts que le processeur utilise. Il n'y a rien de spécial, pas de traduction.

Un codage est un mappage de bits à quelque chose qui a un sens. Par exemple, la séquence de 8 bits 01100001 (0x61) dans ASCII est la lettre "a". Parce que les clés sont des données aléatoires et elles n'ont aucune signification, l'encodage n'entre en jeu que pour la traduction des données binaires en quelque chose imprimable, par exemple BASE64. Ainsi, au lieu de "quelle séquence de bits dois-je avoir pour écrire la lettre a?" - qui peut varier avec différents encodages, une clé est "quel est ce bit? quel est ce bit? quel est ce bit ? ".

3
Jeff Ferland

Le même mot code pour des chaînes de bits de longueurs différentes dans utf8, iso et unicode, donc y a-t-il un codage général utilisé pour définir la longueur d'une clé?

Une clé n'est pas un mot. Il s'agit d'une séquence de bits. Le "codage général" dont vous parlez n'est pas un codage.

Sur une autre note, il existe des encodages point de code-> chaîne appelés UTF-8 et ISO- *, mais unicode n'est pas un encodage. C'est un jeu de caractères.

Peut-être que la définition de certains termes pourrait aider.

Un "jeu de caractères", par exemple unicode, est un ensemble de symboles généralement identifiés par un indice entier. En unicode, ces symboles sont également appelés points de code (valeurs scalaires strictement unicode).

Une "chaîne" est une séquence de symboles choisis dans un alphabet. Sauf indication contraire, la séquence est de longueur finie et l'alphabet est un sous-ensemble d'unicode mais le terme peut également être utilisé pour d'autres alphabets: une "chaîne d'octets" (où l'alphabet est l'ensemble des nombres entiers représentables sur 8 bits [0,255] ou [-128,127]) ou "chaîne UTF-16" (où l'alphabet est l'ensemble des entiers [0,65535]).

Un "encodage" est un mappage (généralement réversible) d'un type de chaîne à un autre. UTF-8 mappe des séquences de "point de code" (ou chaînes régulières) à des chaînes d'octets.

1
Mike Samuel

Je ne comprends pas ce que signifie la longueur des bits ... cela ne dépend-il pas du codage?

Le texte - une séquence de caractères et d'autres glyphes de plusieurs langues - est une abstraction. Les humains savent comment gérer le texte, mais pas les ordinateurs - jusqu'à ce que nous trouvions un moyen pour les ordinateurs de le faire. De cette façon, on appelle un "codage" - un codage est un moyen de mapper une séquence de caractères sur une séquence d'octets et de mapper une séquence d'octets sur une séquence de caractères. Dans un codage, un caractère peut être codé en un octet, tandis que dans un autre codage, le même caractère sera codé en quatre octets.

Simplement, le texte peut être encodé dans une séquence d'octets. Le texte est abstrait, cependant, et doit être encodé pour être traité.

Mais une séquence d'octets n'est qu'une séquence d'octets, et n'a rien à voir avec le texte, et n'a aucun concept d'encodage.

Les séquences de bits, tant que leurs longueurs sont toujours des multiples de 8 bits, sont équivalentes à des séquences d'octets. Ainsi, lorsque quelqu'un parle d'une clé de 16 octets, cela équivaut à une clé de 128 bits.

Lorsqu'il s'agit de fonctions cryptographiques, il faut toujours prendre soin de ne traiter que des séquences de bits ou d'octets. Si l'on a du texte que l'on veut crypter ou hacher, il doit d'abord prendre soin de le coder d'abord en une séquence d'octets, en utilisant le même codage dans tous les cas ou en notant quel codage a été utilisé dans ce cas. On ne doit chiffrer ou hacher que des octets, jamais du texte: et les encodages sont la façon de traduire le texte en octets. De même, si l'on a une clé représentée dans les codages de texte hexadécimal ou base64, il faut d'abord prendre soin de décoder la clé en octets.

1
yfeldblum

La signification réelle de cela est le nombre de bits qui constitueront la clé souhaitée pour procéder aux algorithmes de chiffrement ou de déchiffrement. Supposons que la taille de la clé soit de 256 bits, ce qui signifie que, si vous prenez un entier supérieur à 2 ^ 255 et inférieur à 2 ^ 256. Entre l'entier, vous devez le prendre comme une clé publique ou privée.

0
seshu babu