2009-06-08 18 views
2

J'ai un peu de difficulté à comprendre les exigences de longueur de clé en cryptographie. J'utilise actuellement des DES qui, je crois, est en 56 bits ... maintenant, en convertissant un mot de passe de 8 caractères en un byte[], mon travail de cryptographie fonctionne. Si j'utilise un mot de passe à 7 chiffres, ce n'est pas le cas. Maintenant, pardonnez-moi si je me trompe, mais est-ce parce que les caractères ASCII sont 7 bits, donc 8 * 7 = 56bits?Comment créer ma clé DES? Pourquoi une chaîne de 7 caractères n'est-elle pas suffisante?

Cela ne me semble pas juste. Si je veux utiliser une clé, pourquoi ne puis-je pas simplement passer un hachis salé de ma clé secrète, c'est-à-dire un hachage MD5? Je suis sûr que c'est très simple, mais je ne peux pas comprendre clairement ce qui se passe.

Répondre

7

Chaque algorithme est conçu pour accepter une certaine longueur de clé. La clé est utilisée dans le cadre de l'algorithme, et en tant que telle, ne peut pas être ce que votre cœur désire.

tailles clés communes sont:

  • DES: 56 bits clés
  • AES: clé 128-256bit (valeurs couramment utilisées sont 128, 192 et 256)
  • RSA (cryptographie asymétrique): 1024, 2048, clé 4096 bits

Un nombre, tel que 1234567 est seulement une variable de 4 octets. La clé devrait être un tableau d'octets, tel que "1234567" (implicitement convertible en un en C) ou `{'1', '2', '3', '4', '5', '6', '7 '}.

Si vous souhaitez passer le hachage MD5 de votre clé salée à DES, vous devez utiliser une technique de compression de clé. Par exemple, vous pouvez prendre les 7 premiers octets (quelque peu indésirable), ou effectuer un cryptage DES sur le hachage MD5 (avec une clé constante connue), et prendre tout sauf le dernier octet comme clé pour l'opération DES.

edit: Le DES dont je parle ici est l'implémentation selon la norme publiée par le NIST. Cela peut être le cas (comme indiqué ci-dessus), que votre API spécifique attend différentes exigences sur la longueur de la clé, et dérive la clé finale à 7 octets de celle-ci.

2

Vous ne devez pas passer vos mots de passe directement dans l'algorithme. Utilisez par exemple la classe Rfc2898DeriveBytes qui salera vos mots de passe, aussi. Cela fonctionnera avec n'importe quelle longueur.

Jetez un oeil here pour un exemple.

EDIT: D' Oh - votre question n'est pas C# ou .Net taggées:/

0

Selon MSDN DES soutient une clé de 64 bits.

5

La clé doit avoir une taille de 64 bits mais seulement 56 bits sont utilisés à partir de la clé. Les autres 8 bits sont des bits de parité (usage interne).

Les caractères ASCII ont une taille de 8 bits.

+0

Certains droits, certains faux. Les caractères US-ASCII sont seulement 7 bits. Mais merci de souligner que chaque octet d'une clé DES contient un bit de parité. – erickson

12

DES utilise une clé de 56 bits: 8 octets où un bit dans chaque octet est un bit de parité.

En général, cependant, il est recommandé d'utiliser un algorithme de dérivation de clé bien connu et accepté pour convertir un mot de passe textuel en une clé de chiffrement symétrique, quel que soit l'algorithme.

L'algorithme PBKDF2 décrit dans PKCS # 5 (RFC 2898) est une fonction de dérivation de clé largement utilisée qui peut générer une clé de n'importe quelle longueur. En son cœur, PBKDF2 combine le sel et le mot de passe via une fonction de hachage pour produire la clé actuelle. Le hachage est répété plusieurs fois de sorte qu'il sera coûteux et lent pour un attaquant d'essayer chaque entrée dans son "dictionnaire" des mots de passe les plus courants.

L'ancienne version, PBKDF1, peut générer des clés pour le cryptage DES, mais DES et PBKDF1 ne sont pas recommandés pour les nouvelles applications.

La plupart des plates-formes prenant en charge la cryptographie incluent des algorithmes de dérivation de clé PKCS # 5 dans leur API.

+0

Merci à vous de faire remarquer qu'il y a un bit de parité (défaussé?) Dans chacun des huit octets. –

0

Pour éviter ce problème et augmenter la sécurité globale de l'implémentation, nous transmettons généralement une variante hachée de la clé aux fonctions de cryptage, plutôt qu'à la clé elle-même.

De même, il est recommandé de "saler" le hachage avec une valeur propre à l'opération que vous effectuez et qui ne changera pas (par exemple, userid interne). Cela vous assure que pour deux instances de la clé, le résultat sera différent. Une fois que vous avez votre clé dérivée, vous pouvez retirer les premières n-bits de celle-ci comme requis par votre fonction de cryptage particulière.