je l'application de test suivant:chiffrement et limite ByteString
import Codec.Crypto.AES
import qualified Data.ByteString.Char8 as B
key = B.pack "Thisismykey....."
iv = B.pack "0000000000000001"
main = do
let myenc = crypt' CTR key iv Encrypt (B.pack "1234567812345678")
print (B.unpack myenc)
qui imprime le résultat suivant: "\ 250 \ DC4 \ DC4 \ 255 \ 223 \ 221C \ ETBx \ 239sF \ nuZu"
Si je change le texte clair "1234567812345678" dans "1234567812345688" je reçois "\ 250 \ DC4 \ DC4 \ 255 \ 223 \ 221C \ ETBx \ 239sF \ nuUu"
Si je change le texte clair à "1134567812345678" Je reçois la sortie "\ 250 \ ETB \ DC4 \ 255 \ 223 \ 221C \ ETBx \ 239sF \ nuZu "
Je suis maintenant très surpris car il y a clairement une corrélation prévisible entre l'entrée et la sortie que IMHO ne devrait pas se produire. Si je change quelque chose à l'avant du texte, alors seulement l'avant de la sortie est affectée, etc. Est-ce que cela peut être dû à des limites de 8 ou 16 octets de chaînes d'octets et comment pourrais-je résoudre ce problème? Est-ce que quelque chose m'égare ici?
Indépendamment du mode CTR, il convient de noter que AES fonctionne avec des baies 4x4 octets et la question concerne le cryptage d'un seul tableau. À mon sens, AES devrait effectuer quatre cycles de mélange et le changement d'un seul octet (sur 16) devrait entraîner au moins 50% de bits différents. Ainsi, à mon avis, il ne peut pas être que les changements à la fin d'un texte en clair de 16 octets changent exactement la fin du texte chiffré et les changements à l'avant changent le front etc. À ma compréhension, la IV entre en jeu comme un compteur lorsque plusieurs réseaux 4x4 sont impliqués.
Je pense que vous n'avez pas raison. La réutilisation d'un IV dans le CTR rend l'information non sécurisée dans le cas où les communications seraient interceptées. Cela n'influence pas le principe de la non-prédictibilité, je pense. J'aurais pu utiliser 'B.empty' comme IV ici et IMHP mon exemple serait encore valide. –
@JFritsch Voir le lien stackexchange que j'ai fourni. Votre texte chiffré n'est pas prévisible pour une clé unique, des paires IV. Le problème est donné 1 texte chiffré et son texte brut, vous pouvez prédire l'autre texte de chiffrement du deuxième texte brut lorsque vous utilisez la même paire (clé, IV). – Satvik
Non applicable À mon humble avis. AES utilise une matrice 4x4. Par conséquent, tout ce que je change dans un tableau de 16 octets/string/cleartext ** doit ** conduire à une sortie où au moins 50% des bits sont changés. Sinon, l'implémentation est erronée. Ne pas tenir compte des IVs. –