OpenSSL aes-128-cfb ne produit pas la taille attendue

Aug 17 2020

J'essaye d'implémenter moi - même aes-128-cfb pour apprendre. Pour confirmer si mon implémentation est correcte, je souhaite la vérifier avec une bibliothèque bien connue telle que OpenSSL. Mais ensuite, j'ai remarqué quelque chose d'étrange lorsque j'essaye d'utiliser OpenSSL pour chiffrer.

J'ai un fichier cleartext.txtavec le contenu suivant:

This is cleartext that will be used to encrypt with OpenSSL.

Ensuite, j'exécute cette commande

openssl enc -aes-128-cfb -in cleartext.txt -K 48656c6c6f20576f726c642041455321 -iv 72616e646f6d20313662797465206976 -out output.txt

La chose étrange est que le fichier de sortie ne contient que 60 octets. Le bloc AES est de 16 octets. La taille de sortie attendue en octets doit être un multiple de 16. 60 n'est pas un multiple de 16.

Ai-je manqué quelque chose d'important ici?

Réponses

2 kelalaka Aug 17 2020 at 22:02

Parce que CFB ne nécessite pas de remplissage similaire au mode de fonctionnement CTR et OFB. Ces modes créent des blocs de chiffrement et on en utilise la quantité nécessaire.

  • Dans le cas de openssl enc -K -ivl'IV n'est pas écrit dans le fichier de sortie output.txt. Par conséquent, il a la même taille que le texte brut en octets; 61octets chacun pour mon fichier. Dans ce cas, vous devez gérer l'IV. Puisque vous fournissez également l'IV, assurez-vous qu'il n'est plus utilisé. Sinon, un crib-dragging peut se produire dans le mode CTR ou la réutilisation de la clé OTP.

  • Dans le cas de -k/-kfile/-pass, l'IV et la clé sont dérivés de la méthode de dérivation de clé en utilisant le mot de passe de l'utilisateur et le sel aléatoire de 8 octets.

    OpenSSL écrit d'abord la magie de fichier de Salted__sel de 8 octets puis le texte chiffré dans le fichier. Maintenant, la taille de sortie est votre magic size + salt size + data-size. Dans mon système, 8+8+61 = 77bytes.

    • Si le mode ECB est utilisé

      openssl enc -aes-128-ecb -in cleartext.txt -k -pass -out output.txt
      

    alors la taille est en 80octets en raison du remplissage. Bien sûr, ECB n'utilise pas l'IV et il faut oublier ce mode!

    • Le mode CBC a des résultats similaires avec ECB.

    • La taille IV dérivée peut changer en fonction de l'algorithme de chiffrement utilisé comme le chiffrement par blocs de 8 octets TDES et Blowfish nécessite des chiffrements par bloc de 8 octets et 16 octets comme AES et Twofish nécessite 16 octets IV.

Lors de l'utilisation du mot de passe, il faut faire attention à l'entropie du mot de passe et à la méthode de dérivation de clé utilisée. L'utilisation d'un mot de passe Diceware est recommandée et au moins PBKDF2 pour la dérivation de clé. OpenSSL fournit diverses méthodes de dérivation de clé