Aes

Algorithme utilisé par Up ! Security Manager

L'algorithme Advanced Encryption Standard (AES) du Federal Information Processing Standards (FIPS) crypte un flux binaire à partir d'une clé CleInitiale de taille TailleCle qui est soit 128, 192 ou 256 bits i.e. 16, 24 ou 32 octets.

Dans un premier temps, la clé est expansée de la sorte à atteindre 4*NbIterations+4 octets avec :

Taille de la clé.Nombre d'itérations.
16.10.
24.12.
32.14.

Dans un second temps, le flux est crypté par bloc de seize octets en réalisant des opérations sur leurs bits avec la clé expansée.

Le cryptage se base sur une algèbre polynomiale particulière, non détaillée dans cette fichie, pour laquelle il existe une opération d'addition et de multiplication :

Contexte

L'algorithme de cryptage / décryptage utilise un contexte composé des constantes et des variables globales suivantes :

Variable
/******/


TableS=
TableSInv=

Expansion de la clé

Voici l'algorithme d'expansion de la clé :

Variable
/******/


Selon TailleCle Faire Fin Selon
/* Debut de l'expansion de la cle dans W. */
W=Cle;
J=TailleCle; /* Suite de l'expansion de la cle dans W. */
IMax=4*(NbIterations+1);
K=0;
Rcon=0x01;
Pour I=J/4 JusquA IMax-1 Faire
Fin Pour

Cryptage EAS d'un bloc de seize octets

/****************************************************************/
Procedure Crypter(BufferEntree : Binaire, BufferSortie : Binaire)
/* Objet : Crypte un binaire de 16 octets. */
/****************************************************************/
Variable
/******/

Debut
/* Copie des octets d'entree dans S. */
K=0;
Pour I=0 JusquA 3 Faire
Fin Pour
/* Transformation AddRoundKey. */
L=0;
Pour I=0 JusquA 3 Faire
Fin Pour
/* Iterations. */
Pour K=1 JusquA NbIterations Faire
Fin Pour
/* Copie des octets S dans la sortie. */
K=0;
Pour I=0 JusquA 3 Faire
Fin Pour
Fin Procedure

Decryptage AES d'un bloc de seize octets

/****************************************************************/
Procedure Decrypter(BufferEntree : Binaire, BufferSortie : Binaire)
/* Objet : Decrypte un binaire de 16 octets. */
/****************************************************************/
Variable
/******/

Debut
/* Copie des octets d'entree dans S. */
K=0;
Pour I=0 JusquA 3 Faire
Fin Pour
/* Transformation AddRoundKey. */
L=16*NbIterations;
Pour I=0 JusquA 3 Faire
Fin Pour
L-=32;
/* Iterations. */
Pour K=NbIterations JusquA 1 Faire
Fin Pour
/* Copie des octets S dans la sortie. */
K=0;
Pour I=0 JusquA 3 Faire
Fin Pour
Fin Procedure

Multiplication AES

Voici la multiplication particulière du cryptage / décryptage AES :

/****************************************************************/
Fonction MultiplicationAes(A : Octet, B : Octet) Retourner Octet
/* Objet : Multiplication AES. */
/****************************************************************/
Variable
/******/


Debut
Resultat=0;
Resultat2=0;
Masque=0x01;
Pour I=0 JusquA 7 Faire
Fin Pour
Retourner Resultat;
Fin Fonction