Algorithmes de cryptographie symétrique

1. Algorithmes de cryptographie symétrique (à clé secrète)

Les algorithmes de chiffrement symétrique se fondent sur une même clé pour chiffrer et déchiffrer un message. L’un des problèmes de cette technique est que la clé, qui doit rester totalement confidentielle, doit être transmise au correspondant de façon sûre. La mise en œuvre peut s’avérer difficile, surtout avec un grand nombre de correspondants car il faut autant de clés que de correspondants.

Source de l’image

Quelques algorithmes de chiffrement symétrique très utilisés :

  • Chiffre de Vernam (le seul offrant une sécurité théorique absolue, à condition que la clé ait au moins la même longueur que le message, qu’elle ne soit utilisée qu’une seule fois à chiffrer et qu’elle soit totalement aléatoire)
  • DES
  • 3DES
  • AES
  • RC4
  • RC5
  • MISTY1
  • et bien d’autres.

2. Chiffrement par bloc et chiffrement par flot

On distingue deux catégories de chiffrement symétrique :

  • Le chiffrement par bloc (en anglais block cipher) est une des deux grandes catégories de chiffrements modernes en cryptographie symétrique, l’autre étant le chiffrement par flot. La principale différence vient du découpage des données en blocs de taille généralement fixe. La taille de bloc est comprise entre 32 et 512 bits, dans le milieu des années 1990 le standard était de 64 bits mais depuis 2000 et le concours AES le standard est de 128 bits.
  • Le chiffrement de flux ou chiffrement par flot (en anglais stream cipher). Un chiffrement par flot arrive à traiter les données de longueur quelconque et n’a pas besoin de les découper. Un chiffrement par flot se présente souvent sous la forme d’un générateur de nombres pseudo-aléatoires avec lequel on opère un XOR entre un bit à la sortie du générateur et un bit provenant des données.

La recommendation du RGS_v-2-0_B1 indique taille minimale des clés symétriques à 128 bits.

3. Modes de chiffrement par bloc

En cryptographie, un mode d’opération est la manière de traiter les blocs de texte clairs et chiffrés au sein d’un algorithme de chiffrement par bloc. Historiquement, les modes d’opération ont été abondamment étudiés pour leur propriétés de propagation d’erreurs lors de divers scénarios de modification de données durant le chiffrement. Les développements suivants ont considéré que la protection de l’intégrité était un objectif à atteindre par des moyens complètement différents. Mais aujourd’hui il existe des modes d’opérations qui associent chiffrement et authentification de manière efficace.

Plusieurs modes existent, certains sont plus vulnérables que d’autres :

  • Dictionnaire de codes (Electronic Code Book, ECB)
  • Enchaînement des blocs (Cipher Block Chaining, CBC)
  • Chiffrement à rétroaction (Cipher Feedback, CFB)
  • Chiffrement à rétroaction de sortie (Output Feedback, OFB)
  • Chiffrement basé sur un compteur (CounTeR, CTR)
  • Chiffrement avec vol de texte (CipherText Stealing, CTS)
  • Compteur avec CBC-MAC, voir l’article CCMP
  • EAX (inventé par David Wagner et al.)
  • CWC (à deux passes)

3. Exercices de chiffrement symétrique

3.1. Chiffement symétrique avec vim

vim -x vimtest.cry

3.2. Chiffrement de fichier avec openssl

openssl list-cipher-commands
aes-128-cbc
aes-128-ecb
aes-192-cbc
aes-192-ecb
aes-256-cbc
aes-256-ecb
base64
bf
bf-cbc
bf-cfb
bf-ecb
bf-ofb
camellia-128-cbc
camellia-128-ecb
camellia-192-cbc
camellia-192-ecb
camellia-256-cbc
camellia-256-ecb
cast
cast-cbc
cast5-cbc
cast5-cfb
cast5-ecb
cast5-ofb
des
des-cbc
des-cfb
des-ecb
des-ede
des-ede-cbc
des-ede-cfb
des-ede-ofb
des-ede3
des-ede3-cbc
des-ede3-cfb
des-ede3-ofb
des-ofb
des3
desx
rc2
rc2-40-cbc
rc2-64-cbc
rc2-cbc
rc2-cfb
rc2-ecb
rc2-ofb
rc4
rc4-40
seed
seed-cbc
seed-cfb
seed-ecb
seed-ofb

Créer un fichier clair

echo "0123456789" > clair-text.txt
cat clair-text.txt
0123456789

Codage base-64

openssl enc -base64 -in clair-text.txt
MDEyMzQ1Njc4OQo=

Chiffrement AES

openssl enc -aes-256-cbc -in clair-text.txt -out enc-text.bin
enter aes-256-cbc encryption password:
Verifying - enter aes-256-cbc encryption password:
cat enc-text.bin
Salted__Ă�%��j�J�%���z-l��[0

Déchiffrement

openssl enc -aes-256-cbc -d -in enc-text.bin -out decryp-text.txt
enter aes-256-cbc decryption password:
cat decryp-text.txt
0123456789