La primitive AEAD en streaming fournit un chiffrement authentifié pour les données en streaming. 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 est effectué par segments, qui sont liés à leur emplacement dans un texte chiffré et ne peuvent pas être 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'intégralité du flux de données doit être rechiffrée1.
Le déchiffrement est rapide, car seule une partie du texte chiffré est déchiffrée et authentifiée à la fois. Les textes bruts partiels sont disponibles 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 par nOAE. Elles présentent les propriétés suivantes :
- Secrecy: rien n'est connu concernant le texte brut, à l'exception de sa longueur.
- Authenticité: il est impossible de modifier le texte brut chiffré sous-jacent au texte chiffré sans être détecté.
- Symétrique : 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 brut donné.
Données associées
Le streaming AEAD peut être utilisé pour lier le texte chiffré à des données associées spécifiques. Supposons que vous disposiez d'une base de données avec les champs user-id
et encrypted-medical-history
. Dans ce scénario, user-id
peut être utilisé en tant que données associées lors du chiffrement de encrypted-medical-history
. Cela empêche un pirate informatique de transférer l'historique médical d'un utilisateur à un autre.
Choisir un type de clé
Nous recommandons AES128_GCM_HKDF_1MB pour la plupart des utilisations. En général :
- AES128_GCM_HKDF_1MB (ou AES256_GCM_HKDF_1MB) est l'option la plus rapide. Il peut chiffrer 2 64 fichiers de 2 64 octets chacun. Environ 1 Mo de mémoire est consommé pendant le processus de chiffrement et de déchiffrement.
- AES128_GCM_HKDF_4KB 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 conservatrice.
Garanties de sécurité
Les implémentations AEAD par flux offrent les avantages suivants:
- Sécurité CCA2
- Niveau d'authentification d'au moins 80 bits.
- Capacité de chiffrer au moins 2 64 messages3 pour un total de 2 51 octets2. Aucune attaque avec un maximum de 232 textes en clair choisis ou des textes chiffrés choisis ne présente une probabilité de réussite supérieure à 2-32.
Exemple d'utilisation
Consultez Je souhaite chiffrer de grands fichiers ou des flux de données.
-
Cette restriction est due à l'utilisation du chiffrement AES-GCM. Le chiffrement d'un autre segment de texte brut au même emplacement équivaut à la réutilisation de l'IV, ce qui enfreint les garanties de sécurité d'AES-GCM. Cela permet également d'éviter les attaques de rollback, où le pirate informatique peut essayer de restaurer une version précédente du fichier sans être détecté. ↩
-
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. ↩ -
Le streaming AEAD devient non sécurisé lorsqu'une combinaison de clé dérivée (128 bits) et de préfixe de nonce (valeur aléatoire indépendante de 7 octets) est répétée. Nous disposons d'une résistance aux collisions de 184 bits, ce qui correspond à environ 264 messages si nous voulons que la probabilité de réussite soit inférieure à 2-32. ↩