Les algorithmes de chiffrement par flot tirent leur origine du principal système de chiffrement offrant une confidentialité absolue, le chiffrement de Vernam (ou One Time Pad). Celui-ci consiste à chiffrer un message de n bits à l’aide d’une clé de n bits au moyen d’un simple « ou exclusif ».
Cependant, cela n’est valable que si plusieurs conditions sont vérifiées :
Ces trois conditions font du chiffrement de Vernam une méthode difficile à utiliser en pratique.
En effet, ces conditions imposent que le destinataire d’un message chiffré connaisse
Préalablement la clé qui est aussi longue que le message. De plus cette clé ne pouvant être réutilisée sans compromettre la sécurité du système, il est nécessaire que le destinataire possède à l’avance suffisamment de clés, ou puisse recevoir les clés utilisées par un canal sûr.
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 définition des algorithmes de chiffrement par flot induit les propriétés suivantes :
L’étude des algorithmes de chiffrement à flot se résume généralement à l’étude du générateur de nombres.
Un chiffrement par bloc peut être converti en un chiffrement par flot grâce à un mode opératoire qui permet de chaîner plusieurs blocs et traiter des données de taille quelconque.
Une des principales caractéristiques des algorithmes de chiffrement à flot est qu’ils permettent d’atteindre un très haut niveau de performances. Ces performances s’expriment soit en termes de vitesse de chiffrement soit en termes d’efficacité matérielle. On distingue deux principaux types d’algorithmes à flot :
Il existe différents types de chiffrement par flot.
RC4 (utilisé notamment par le protocole WEP du Wi-Fi)
E0 (utilisé par le protocole Bluetooth)
A5/1 (utilisé dans les téléphones mobiles de type GSM pour chiffrer la communication par radio entre le mobile et l'antenne-relais la plus proche)
Le chiffrement de rétroaction de sortie est similaire au CFB. La différence réside au niveau du chiffrement :
On partage le texte en bloc de n bits m1m2…mr.
On se donne un bloc d'initialisation de n bits Z1. Ce bloc z1 est la première clé de contexte.
Pour chaque bloc i, on calcule
Le bloc chiffré correspondant, par la formule ci=mi⊕zi;
La clé de contexte suivante, par la formule zi+1=CK(zi).
C'est un mode de chiffrement de flot qui possède les mêmes avantages que CFB. De plus, il est possible de le pré-calculer en chiffrant successivement le vecteur d'initialisation. Il n'est donc sûr que si la fonction de chiffrement alliée à la clé forme une bonne suite pseudo-aléatoire.
Dans les modes CFB et OFB, le bloc d'initialisation V ne doit pas nécessairement être secret. En revanche, il doit être à usage unique.
L'algorithme AES est de plus en plus utilisé avec les modes CFB et OFB dans les protocoles de communication comme le wifi, bluetooth ou la téléphonie mobile, où il remplace des algorithmes de chiffrement par flots comme RC4.
Les deux derniers blocs sont échangés et combinés en partie, ce qui nécessitera de les obtenir tous les deux pour en déchiffrer un. CTS n'est pas un mode de chiffrement par flot, mais permet d'éviter l'utilisation de bourrage dans les chiffrements par blocs, et donne une taille de message chiffré égale à la taille du message clair. Il est très utilisé dans les protocoles ou formats ne supportant pas une taille quelconque.
Ce type de chiffrement n'assure pas l'intégrité des données, il faut les coupler avec des MAC (Message Authentication Code)
Il s'agit ici d'utiliser la fonction de chiffrement CK comme un générateur pseudo-aléatoire de clés.
On partage le texte en bloc de n bits m1m2…mr.
On se donne un bloc d'initialisation de n bits Z1. Ce bloc z1 est la première clé de contexte.
Pour chaque bloc i, on calcule
Le bloc chiffré correspondant, par la formule ci=mi⊕zi;
La clé de contexte suivante, par la formule zi+1=CK(ci).
Dans ce mode, le flux de clé est obtenu en chiffrant le précédent bloc chiffré. CFB est un chiffrement par flot. Son grand intérêt est qu'il ne nécessite que la fonction de chiffrement, ce qui le rend moins cher à câbler ou programmer pour les algorithmes ayant une fonction de chiffrement différente de la fonction de déchiffrement (AES)
On retrouve certaines propriétés du mode CBC, comme par exemple le fait que la modification d'un bloc de texte clair entraîne la modification de tous les blocs chiffrés à partir de celui-ci.
Ce mode est très rapide, ce qui le rend utile dans les réseaux à grande vitesse.
Dans ce cas, c'est la valeur d’un compteur qui est chiffrée et le résultat est ajouté par un « ou exclusif » au message (bloc) en clair produisant un message (bloc) chiffré.
Le compteur est une fonction simple, cependant garantissant que la séquence utilisée pour chiffrer ne sera pas réutilisée.
N'utilise pas la fonction de chiffrement.
Pas d'erreur de propagation.
La suite des chiffreurs peut être pré-calculée.
Accès aléatoire aux données possible.
Très facilement parallélisable