Streaming authentifié du chiffrement avec des données associées (AEAD en flux continu)

La primitive de flux AEAD fournit un chiffrement authentifié pour les données par flux. Elle est utile lorsque les données à chiffrer sont trop volumineuses pour être traitées en une seule étape. Les cas d'utilisation typiques incluent le chiffrement de fichiers volumineux ou de flux de données en direct.

Le chiffrement s'effectue en segments, qui sont liés à leur emplacement au sein d'un texte chiffré et qui ne peuvent être ni supprimés, ni réorganisés. Les segments d'un texte chiffré ne peuvent pas être insérés dans un autre texte chiffré. Pour modifier un texte chiffré existant, l'ensemble du flux de données doit être rechiffré1.

Le déchiffrement est rapide, car seule une partie du texte chiffré est déchiffrée et authentifiée à la fois. Il est possible d'obtenir du texte brut partiel sans traiter l'intégralité du texte chiffré.

Les implémentations AEAD en streaming répondent à la définition AEAD et sont sécurisées avec OAE2. Elles présentent les propriétés suivantes:

  • Confidentialité: on connaît uniquement la longueur du texte en clair.
  • Authenticité: il est impossible de modifier le texte brut chiffré sous-jacent au texte chiffré sans être détecté.
  • Symétrie: le chiffrement du texte brut et le déchiffrement du texte chiffré s'effectuent avec la même clé.
  • Randomisation: le chiffrement est aléatoire. Deux messages comportant le même texte brut génèrent des textes chiffrés différents. Les pirates informatiques ne peuvent pas savoir quel texte chiffré correspond à un texte en clair donné.

Données associées

Le chiffrement AEAD en flux continu peut être utilisé pour associer du texte chiffré à des données associées spécifiques. Supposons que vous disposez d'une base de données avec les champs user-id et encrypted-medical-history. Dans ce scénario, user-id peut être utilisé comme données associées lors du chiffrement de encrypted-medical-history. Cela empêche un pirate informatique de transférer le dossier médical d'un utilisateur à un autre.

Choisir un type de clé

Nous recommandons AES128_GCM_HKDF_1MB pour la plupart des utilisations. Généralités:

  • AES128_GCM_HKDF_1MB (ou AES256_GCM_HKDF_1MB) est l'option la plus rapide. Il peut chiffrer 264 fichiers d'une taille maximale de 264 octets chacun. ~1 Mo de mémoire est utilisé pendant le processus de chiffrement et de déchiffrement.
  • AES128_GCM_HKDF_4 Ko consomme environ 4 Ko de mémoire et constitue un bon choix si votre système ne dispose pas de beaucoup de mémoire.
  • AES128_CTR_HMAC_SHA256_1MB (ou AES256_CTR_HMAC_SHA256_1MB) est une option plus prudente.
.

Garanties de sécurité

Les implémentations AEAD en flux continu offrent les avantages suivants:

  • Sécurité CCA2
  • Niveau d'authentification d'au moins 80 bits.
  • Capacité à chiffrer au moins 264 messages3 pour un total de 251 octets2 . Aucune attaque comportant jusqu'à 232 texte en clair choisi ou le texte chiffré choisi ne présente une probabilité de réussite supérieure à 2-32.

Exemple d'utilisation

Consultez la section Je souhaite chiffrer des fichiers volumineux ou des flux de données.


  1. L'utilisation du chiffrement AES-GCM en raison de l'utilisation de l'algorithme de chiffrement AES-GCM. Chiffrer un segment de texte brut différent au même endroit revient à réutiliser le vecteur d'initialisation, ce qui enfreint les garanties de sécurité d'AES-GCM. Une autre raison est que cela empêche les attaques par rollback, où le pirate informatique peut tenter de restaurer une version précédente du fichier sans être détecté. 

  2. 232 segments sont acceptés, chacun contenant segment_size - tag_size octets de texte brut. Pour les segments de 1 Mo, la taille totale du texte brut est de 232 * (220-16) ~= 251 octets.

  3. Le streaming AEAD n'est plus sécurisé lorsqu'une combinaison de clé dérivée (128 bits) et de préfixe nonce (valeur aléatoire indépendante de 7 octets) est répétée. Nous avons une résistance aux collisions de 184 bits, ce qui se traduit approximativement par 264 messages si nous voulons que la probabilité de réussite soit inférieure à 2-32