|
Page 5 sur 6 4. Blowfish
4.1 Bref historique
L’algorithme Blowfish a été conçu par Bruce Schneier de la société Counter Software en 1993. Blowfish est une véritable alternative aux algorithmes existants de part sa puissance et sa rapidité. Son code source n’est pas breveté, mais il a fait récemment l’objet d’une analyse qui en a conclue qu’il est suffisamment fiable. Certains experts se prêtent même à dire qu’il sera le futur standard, celui qui remplacera le D.E.S.
Blowfish est un algorithme à clé privée. Une seule clé est donc utilisée pour chiffrer et pour déchiffrer les données.
4.2 Ou est-il utilisé ?
SSH dans sa version 2 utilise cet algorithme pour crypter les données à transmettre.
Il est aussi disponible dans la librairie crypto de OpenSSL.
Les solutions de VPN VTun, cIPe et tinc utilisent aussi cet algorithme pour chiffrer les données à envoyées sur le réseau. (VTun utilise aussi cet algorithme pour la phase d’authentification, en le faisant fonctionner en mode challenge)
4.3 Fonctionnement
Le mécanisme de Blowfish peu être divisé en deux étapes.
Premièrement, on observe une expansion de la clé et une initialisation d’un tableau et de quatre S-Boxes.
Secondement, Blowfish fait intervenir une fonction, ou il chiffre les données entrantes.
Expansion et initialisation :
La clé qui a été généré (de 448 bits maximum) est divisée en un sous-ensemble de clés.
Puis un tableau P est initialisé ainsi que 4 S-Boxes.
Le tableau P compte 18 sous clés de 32 bits chacune, chaque S-Boxes contient 256 entrées.
Voici les différentes étapes pour calculer les sous-clés à partir de la clé principale.
- Initialisation du tableau P et des S-Boxes avec une chaîne de caractères fixe.
- Opération XOR (ou exclusif) entre les 18 entrées du tableau P et les bits de la clé.
Exemple : P[1] XOR (1ere sous-clé de 32 bits)
P[2] XOR (2ème sous-clé de 32 bits)
.......
P[18] XOR (18ème sous-clé de 32 bits)
Une fois tous les bits de la clé utilisé on boucle en recommençant à partir les 32 premier bits.
- A cette étape Blowfish chiffre la chaîne de caractère all-zéro, en utilisant les sous-clés. Nous avons donc en sortie P[1] et P[2].
- Chiffrement de P[1] et P[2] avec les sous-clés modifiées. Nous avons maintenant en sortie P[3] et P[4].
- Les deux dernières étapes sont répétées 521 fois afin de calculer les nouvelles sous-clés pour le tableau P et pour les 4 S-Boxes.
Le chiffrement des données :
Voici une approche du mécanisme de chiffrement de Blowfish en langage algorithmique.
PROGRAMME Blowfish
/* x est un bloc de 64 bits à crypter */
DEBUT
Diviser x en 2 : xL et xR
Pour i allant de 1 à 16 pas de 1 faire
xL = xL XOR P[i]
xR = F(xL) XOR xR
Permuter xL et xR
Fin Pour
Permuter xL et xR
xR = xR XOR P[17]
xL = xL XOR P[18]
x = xL + xR
Retourner x
FIN
Comme on peut l’observer dans l’algorithme ci-dessus, une fonction F est utilisée.
Voici, toujours en langage algorithmique son fonctionnement.
Début fonction F(Entrée : xL : 32 bits de données)
Diviser xL en 4 : a, b, c, d
Retourner ((S1,a + S2,b MOD 232) XOR S3,c) + S4,d MOD 232
Fin fonction F
Pour décrypter un cryptogramme Blowfish, il suffit d’utiliser la clé ayant servi lors du chiffrement, Blowfish étant un algorithme symétrique.
|