2012-04-20 1 views

Répondre

4

Vous commencez par choisir trois clés DES indépendantes les unes des autres.

Vous voudrez mettre DES en mode ECB, pas le mode CBC. Vous devez également vous assurer que chaque opération de cryptage et de décryptage est effectuée uniquement sur des blocs 64 bits et rien de plus ou de moins. Les schémas de remplissage et les goûts provoqueront une vulnérabilité dans l'implémentation et conduiront à la découverte du contenu du bloc via la force brute plus rapidement qu'une force brute contre chaque clé. En utilisant la première clé, cryptez votre texte en clair. En utilisant la deuxième clé, déchiffrez cette valeur. En utilisant la troisième clé, cryptez la valeur pour votre bloc complet. Il ressemble à ceci:

Encrypt(k3, Decrypt(k2, Encrypt(k1, plaintext)))

Decryption est l'inverse et ressemble à ceci:

Decrypt(k1, Encrypt(k2, Decrypt(k3, ciphertext)))

Lorsque vous cryptez vos blocs avec 3DES dont vous avez besoin alors d'appliquer le mode de fonctionnement comme CBC ou CTR et appliquer un remplissage si nécessaire.

Soyez prudent.

0

3DES est juste DES utilisé trois fois sur le texte en clair:

ciphertext = E_K3(D_K2(E_K1(plaintext))) 
plaintext = D_K1(E_K2(D_K3(ciphertext))) 

E_Kn = Encryption with Key number n. 
D_Kn = Decryption with Key number n. 

Vous pouvez facilement 3DES "imiter" avec juste DES.

En mode CBC, vous aurez besoin d'un IV pour commencer, puis de XOR le prochain bloc de texte en clair avec le bloc de texte chiffré précédent. Si votre appareil ne prend pas en charge CBC, cela aussi est facilement "émulé".

+0

Si les opérations ne sont pas effectuées sur des limites de bloc, cela entraînera une implémentation non sécurisée en raison du remplissage et de l'application de CBC. CBC et le remplissage doivent être effectués après l'opération 3DES composite. –

+0

@ MichaelJ.Gray ce n'est pas une recommandation très claire Michael. Pour le cryptage, je ne pense pas que vous voulez faire du remplissage après l'opération 3DES composite. –

+0

@owlstead Mon erreur. Vous avez raison. CBC serait appliqué par la suite pour des raisons évidentes et un remplissage serait effectué pour les blocs non alignés sous forme de chiffrement (k3, déchiffrer (k2, chiffrer (k1, pad (texte en clair)))). Il était tard quand j'ai posté cette nuit dernière;) –

1

mode bloc cryptage

Ce que vous faites est que vous divisez la clé de taille 128 bits (16 octets) ou 168 bits (24 octets) en deux ou trois morceaux, respectivement. Donc, pour une clé de 16 octets K, vous auriez deux clés Ka et Kb, et pour une clé de 24 octets, vous auriez Ka, Kb et Kc. Les clés DES ABC ont un effectif de d'environ 112 bits, les clés DES ABA ont un effectif de d'environ 80 bits. Pour chiffrer un seul bloc de 8 octets (la taille de bloc de DES et 3DES), vous devez effectuer l'opération cryptographique suivante: Cn = E (Ka, D (Kb, E (Kc, Mn))) où Mn est le nième bloc du message texte brut et Cn le nième bloc du texte chiffré. Si vous n'avez pas de Kc, vous pouvez utiliser Ka (touche DES ABC et touche DES ABA). Pour cela, vous avez besoin d'un seul cryptage DES blocs, identique à un cryptage monobloc en mode ECB, ou d'un cryptage monobloc avec CBC et d'un IV composé de 8 octets d'une valeur de 00Hz.

CBC

Donc c'est le chiffrement par blocs triés, vous devez maintenant une sorte de mode de cryptage et le mode de remplissage. Je vais expliquer le chiffrement en mode CBC ici, ECB ne devrait pas être utilisé pour le chiffrement des données non aléatoires.

Avec le cryptage en mode CBC vous XOR un vecteur au texte brut. Le vecteur est normalement la sortie du dernier bloc crypté DESede. Comme vous n'avez pas de texte chiffré précédent, vous devez créer le premier vecteur vous-même en utilisant des données aléatoires. Ce vecteur est appelé le vecteur d'initialisation ou IV. Voir wikipedia pour une image claire.

Rembourrage

modes de chiffrement par blocs ne permettent que des blocs pleins de texte brut à chiffrer. Donc, vous auriez besoin d'un genre de système de remplissage. Bien qu'il existe de nombreux modes de remplissage, le remplissage PKCS # 5 est utilisé la plupart du temps. Vous devez remplir le texte brut comme suit: pad avec des octets de valeur 0Xh, où X est le nombre d'octets de remplissage requis pour créer un bloc complet. X doit être compris entre 1 et 8: en d'autres termes, le remplissage PKCS # 5 est toujours utilisé; cela permet de distituer les octets de remplissage du texte brut.

Si vous utilisez un remplissage dans un protocole en ligne, vous devez vous protéger contre les attaques d'oracle de remplissage. Dans ce cas, il est fortement recommandé d'utiliser une certaine forme de contrôle d'intégrité, par ex. en ajoutant un HMAC sur le texte chiffré en utilisant une clé séparée.

Questions connexes