Il consiste à chiffrer le message en substituant les lettres du message, non plus lettre à lettre, mais par groupe de lettres. Il permet ainsi de rendre plus difficile le cassage du code par observation des fréquences.
Lester S. Hill a aussi conçu une machine capable de réaliser mécaniquement un tel codage[2].
Principe
Chaque caractère est d'abord codé par un nombre compris entre 0 et n – 1 (son rang dans l'alphabet diminué de 1 ou son code ASCII diminué de 32). Les caractères sont alors regroupés par blocs de p caractères formant un certain nombre de vecteurs. Les nombres étant compris entre 0 et n – 1, on peut les considérer comme des éléments de et X est alors un élément de .
On a construit au préalable une matrice p × p d'entiers : A. Le bloc X est alors chiffré par le bloc Y = AX, le produit s'effectuant modulo n.
En effet, le produit de A et de la transposée de sa comatrice donne
(où désigne la matrice identité de taille p) donc s'il existe un entier k tel que
alors, en notant B n'importe quelle matrice congrue modulo n à ktcom(A), on aura
soit encore
Illustration sur un exemple simple
On imagine dans cette section que chaque lettre est codée par son rang dans l'alphabet diminué de 1 et que le chiffrement s'effectue par blocs de 2 lettres. Ici n = 26 et p = 2.
Et l'on cherche à chiffrer le message suivant : TEXTEACRYPTER en utilisant une matrice A dont le déterminant est premier avec 26.
Pour construire une telle matrice, il suffit de choisir trois entiers a, b, c au hasard mais tels que a soit premier avec 26, ce qui permet de choisir le dernier terme d tel que ad – bc soit inversible modulo 26[3]. Pour la suite on prendra
dont le déterminant est 21. Comme 5 × 21 = 105 ≡ 1 (mod 26), 5 est un inverse de det(A) modulo 26.
Chiffrement
On remplace chaque lettre par son rang à l'aide du tableau suivant :
Il faut inverser la matrice A. Il suffit de prendre la transposée de sa comatrice, c'est-à-dire
et la multiplier (modulo 26) par un inverse modulaire du déterminant de A c'est-à-dire par 5 (cf. ci-dessus) :
Connaissant les couples Y, il suffit de les multiplier (modulo 26) par la matrice B pour retrouver les couples X et réussir à déchiffrer le message.
Cryptanalyse
Le cassage par force brute nécessiterait de tester toutes les matrices carrées inversibles soit matrices[4] dans les cas de matrices d'ordre 2 modulo 26. Ce nombre augmente considérablement si l'on décide de travailler avec des matrices 3 × 3 ou 4 × 4.
Dans l'exemple précédent, la paire ZA apparait 2 fois ce qui la classe parmi les paires les plus fréquentes qui sont ES, DE, LE, EN, RE, NT, ON, TE. Si l'on arrive à déterminer le chiffrement de 2 paires de lettres, on peut sous certaines conditions retrouver la matrice de codage A.
En effet, si l'on suppose connu le fait que est codé par et est codé par alors on peut écrire l'égalité matricielle suivante :
Si la seconde matrice est inversible, c'est-à-dire si est premier avec 26, alors on peut déterminer A par
Si l'on travaille avec des blocs de taille p, il faut connaitre le chiffrement de p blocs pour arriver à déterminer la matrice. Encore faut-il que ces blocs constituent une matrice inversible.
↑(en) Lester S. Hill, « Concerning certain linear transformation apparatus of cryptography », American Mathematical Monthly, vol. 38, 1931, p. 135-154.
↑Ou plus généralement : de choisir a et b tels que PGCD(a, b, 26) = 1, puis u, v tels que au – bv ≡ 1 (mod 26), et de poser d = mu, c = mv pour un entier m premier avec 26.