Je vais faire une longue histoire courte. Cela fait longtemps que je veux implémenter mon propre programme de cryptage/décryptage AES. Le programme de cryptage s'est bien passé et a crypté sans aucune erreur ou sortie étrange (Depuis que j'ai comparé la sortie de mon programme avec une sortie commerciale et le résultat était le même). Wikipedia a été (est) mon guide dans cette implémentation dans laquelle je lis "Un ensemble de tours inverses sont appliqués pour transformer le texte chiffré en texte brut original en utilisant la même clé de chiffrement."Algorithme de décryptage AES
Il y a quelques modules que je mis en œuvre:
- Ajouter ronde clés
- lignes Shift
- Sub octets
- Mix colonne
I couple a également mis en œuvre de la mise en œuvre inverse des modules ci-dessus:
- lignes de décalage inverse
- inverse Sub Byte
- Mix inverse Colonne
NOTE: Je ne mettent pas en œuvre clé ronde inverse depuis, il est XOR ing le texte en clair avec la clé de chiffrement et inverse de XOR est lui-même XOR (corrigez-moi si je me trompe)
Je ces modules dans roulés l'ordre inverse que je l'ai fait le cryptage, mais jamais j'ai obtenu mon texte brut retour:
expandkey128(key);
rev_subbytes(data);
rev_shiftrows(data);
addroundkey(data,key,10);
for(int i = 9; i>= 1; i--) {
rev_subbytes(data);
rev_shiftrows(data);
rev_mixColum(data);
addroundkey(data,key,i);
}
addroundkey(data,key,0);
// Please note that I also did from 0 to 10 ,
// instead of 10 to 0 and didn't workout
Et aussi je pensais, peut-être que je ne devrais pas implémenter le modèle inverse des modules, peut-être que je dois utiliser ces modules que j'ai fait crypter, seulement dans l'ordre inverse; bien devinez quoi? n'a pas fonctionné! :
expandkey128(key);
addroundkey(data,key,0);
for(int i = 1; i<= 9; i++) {
subbytes(data);
shiftrows(data);
mixColum(data);
addroundkey(data,key,i);
}
subbytes(data);
shiftrows(data);
addroundkey(data,key,10);
Alors voici la question: quel est le problème? || Quelle est la séquence correcte d'application de ces soi-disant modules ou fonctions si vous voulez?
Avez-vous calculé correctement votre s-box, car vous ne pouvez pas utiliser le même que celui que vous utilisez pour le cryptage. http://en.wikipedia.org/wiki/S-box Ce commentaire est manquant dans la version anglaise dans wikipedia. Jetez un oeil à la spécification directement: http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf Vous avez faire calculer l'inverse s-box à déchiffrer. – evildead
Oui en fait à rev_subbytes J'ai In-S-boîte de Rijndael –
il y a un excellent outil là-bas: http://www.cryptool.de/ Dans ce que vous pouvez faire une transformation à la main.Peut-être que vous devez déboguer chaque étape, peut-être que l'outil vous aidera à vérifier chaque étape. – evildead