Cryptographie!

Les chiffrements par flots

  Les chiffrements par flots (on parle aussi de chiffrements à la volée) sont des chiffres qui cherchent à imiter le chiffre de Vernam, en agissant directement sur chaque bit du texte. Dans le chiffre de Vernam, le seul à garantir parfaitement la confidentialité, on ajoute à chaque bit du texte chiffré le bit correspondant d'une clé parfaitement aléatoire, aussi longue que le message à chiffrer. Dans la pratique, on ne peut pas échanger des clés parfaitement aléatoires arbitrairement longues. Les chiffrements par flots cherchent donc à imiter ceci en produisant, à partir d'une clé courte fixée, une clé arbitrairement longue qui semble parfaitement aléatoire. Ils peuvent donc utiliser par exemple des générateurs de nombres pseudo-aléatoires.

  En pratique, si on souhaite chiffrer le message $m_1\dots m_n$ avec la clé $K$, un algorithme de chiffrement effectue les opérations suivantes :
  • la génération du flot de clés : à partir de $K$, on construit une clé $k_1\dots k_n$ de même longueur que le message.
  • pour chaque caractère $m_i$ du message, on calcul le caractère chiffré correspondant $c_i=E(m_i,k_i)$ où $E$ est une fonction qui prend en entrée un caractère $m$ et une clé $k$ et retourne un caractère chiffré $E(m,k)$.
  • le message chiffré est $c_1\dots c_n$.
  Le cas le plus simple de chiffrement par flots (et celui qui imite le mieux le chiffre de Vernam) est celui où le message est écrit comme une succession de bits $m_1\dots m_n$, où le flot de clés est aussi une succession de bits $k_1\dots k_n$ et où l'opération de chiffrement est simplement le ou exclusif, $c_i=m_i\oplus k_i$.

  Le principal avantage des chiffrements à la volée est qu'ils permettent de chiffrer et déchiffrer un message en continu, sans avoir besoin de connaitre tout le message. Ceci justifie leur utilisation dans les domaines où il faut du chiffrement et du déchiffrement en temps réel et simultané (communications téléphoniques, bluetooth,…)

  Parlons un peu sécurité maintenant. Comme pour le chiffre de Vernam, la clé ne doit être utilisée qu'une seule fois. Cela peut poser un problème si jamais une clé doit être impérativement être réutilisée. Pour éviter ceci, on n'utilise jamais la clé seule, mais on lui adjoint un nombre utilisé une seule fois, baptisé nunique, contraction de nombre et de unique. Ce nunique peut par exemple être la valeur d'une horloge bien réglée (et commune à l'expéditeur et au récepteur), ou un compteur de message (on parle alors de chiffrement synchrone, car l'expéditeur et le récepteur n'ont pas besoin de se le communiquer), ou bien un nombre quelconque transmis en clair avec le message (on parle alors de chiffrement asynchrone). La flot de clés $k_1\dots k_n$ est alors généré à partir de la clé secrète initiale $K$, et du nunique. En particulier, elle n'est utilisée qu'une seule fois.

  Si les chiffrements par flots sont souvent plus rapides que les chiffrements par blocs, leur sécurité est souvent plus faible. Par exemple, le chiffrement par flots implémenté dans le protocole de communication des téléphones GSM, bien que non rendu public, a été cassé quelques années après le début de son utilisation.