Tutoriel de cryptographie Tutoriel de cryptographie

Simon Guillem-Lessard
Projet de fin d'étude 2001-2002
Département des mathématiques et de l'informatique
Université du Québec à Trois-Rivières


Table Des Matières
 Chiffrements par blocs
 Blowfish

Introduction

Blowfish a été conçu par Bruce Schneier en 1993 comme étant une alternative aux algorithmes existants, en étant rapide et gratuit. Blowfish est sensiblement plus rapide que le DES. Il est un chiffrement Feistel, utilisant itérativement une fonction de chiffrement 16 fois. La grandeur des blocs est de 64 bits.

Il peut prendre une longueur de clé variant entre 32 bits et 448 bits. Depuis sa conception il a été grandement analysé et est aujourd'hui considéré comme étant un algorithme de chiffrement robuste. Il n'est pas breveté et ainsi son utilisation est libre et gratuite.

Cet algorithme peut être optimisé dans les applications matérielles (puces), mais il est surtout utilisé dans des logiciels.

Il y a deux parties dans l'algorithme : une première partie qui manipule l'expansion de la clé et une deuxième partie qui manipule le chiffrement des données.

Algorithme

Expansion de la clé

La première étape dans l'algorithme est de séparer la clé originale en un ensemble de sous-clés. Plus précisément, une clé (qui ne doit pas avoir plus de 448 bits) est séparée en plusieurs sous-clés totalisant 4168 octets. Il y a aussi l'initialisation d'un tableau P et de quatre S-Boxes de 32 bits chacune. Le tableau P contient 18 sous-clés de 32 bits, alors que chaque S-Box contient 256 entrées.

Les étapes suivantes sont utilisées pour calculer les sous-clés :

· Initialisation du tableau P et des S-Box avec une chaîne de caractères fixe (chiffres composant la constante PI).
· Opération XOR entre le tableau P (et ses 18 entrées) et les bits de la clé :
     P[1] XOR (1er 32 bits de la clé),
     P[2] XOR (2e 32 bits de la clé),
     ...
     P[18] XOR (Ne 32 bits de la clé)
Lorsque les bits de la clé sont épuisés, on revient au premier 32 bits.
· Utilisation de l'algorithme blowfish pour chiffrer la chaîne de caractères all-zero (chaîne de caractères fixe) en utilisant les sous-clés.
· La sortie est maintenant P[1] et P[2].
· Chiffrement des nouveaux P[1] et P[2] avec les sous-clés modifiées.
· La sortie est maintenant P[3] et P[4].
· Répéter 521 fois les deux dernières étapes afin de calculer les nouvelles sous-clés pour le tableau P et pour les quatre S-Box.

Chifffement

Algorithme

Note : l'entrée de 64 bits de texte clair est notée "x" et le tableau P est noté Pi/P[i], où "i" est l'itération.

Début chiffrement

     Divisé x en 2 : xL et xR

     Pour i allant de 1 à 16 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 chiffrement
Source
La fonction F( )

Début fonction F(Entrée : xL : 32 bits de données)

     Divisé xL en 4 : a, b, c, d
     Retourner ((S1,a + S2,b MOD 232) XOR S3,c) + S4,d MOD 232

Fin fonction F



Considérations

Mettre en application l'algorithme de Blowfish semble une option pratique pour le chiffrement de donnée étant donné qu'il est destiné à être rapide, compact, simple et relativement sécuritaire. Néanmoins, il convient mieux aux applications logicielles plutôt qu'aux applications matérielles.



Pour en savoir plus
· Page officielle :
http://www.counterpane.com/blowfish.html
· Codes sources C/C++/Java :
http://www.counterpane.com/blowfish-download.html
/codes/blowfish/


.Sources.
.Haut de page.


Algorithmes Importants

  Systèmes à clé privée

     Blowfish

     DES

     IDEA

     RC2, RC5, RC6

     RC4

     Rijndael

     SEAL

     TripleDES

  Systèmes à clé publique

     Diffie-Hellman

     DSA

     PGP

     RSA

  Fonctions de hachage

     MD2, MD4, MD5

     RIPEMD-128, RIPEMD-160

     SHA0, SHA1

     Tiger

  Protocoles Web

     SSL

     SHTTP