Aller au contenu principal

Cryptographie à clé symétrique

Dans cette leçon, nous allons examiner la cryptographie à clé symétrique, qui sécurise une grande partie des données au repos et en transit grâce à son efficacité.

À la fin de cette leçon, nous aurons abordé :

  • Ce qu'est la cryptographie à clé symétrique
  • Des exemples de code Python illustrant l'utilisation de la cryptographie à clé symétrique
  • Un aperçu des applications de la cryptographie à clé symétrique
  • Les applications de la cryptographie à clé symétrique
  • La sécurité de la cryptographie à clé symétrique
  • Les menaces pesant sur ces algorithmes, tant des ordinateurs classiques que quantiques

Introduction à la cryptographie à clé symétrique

La cryptographie à clé symétrique (SKC) est la forme de cryptographie la plus ancienne et la plus intuitive. Avec la SKC, les informations confidentielles sont sécurisées par le chiffrement à clé symétrique (SKE), c'est-à-dire en utilisant une clé secrète unique pour le chiffrement et le déchiffrement.

La SKC implique :

  • Une fonction de chiffrement qui convertit une instance de texte en clair donnée en texte chiffré en utilisant une clé secrète
  • Une fonction de déchiffrement qui inverse l'opération en reconvertissant le texte chiffré en texte en clair à l'aide de la même clé secrète

Le texte en clair peut désigner tout type de données non chiffrées, comme du texte en langage naturel ou du code binaire dont le contenu informationnel est en principe directement accessible, tandis que le texte chiffré désigne des données chiffrées dont le contenu informationnel est destiné à être inaccessible avant déchiffrement.

Un algorithme qui décrit les opérations de chiffrement et de déchiffrement à l'aide d'une clé secrète partagée est également appelé chiffre symétrique.

Fig 1 : Chiffrement à clé symétrique d'un texte en clair donné en texte chiffré, puis déchiffrement vers le texte en clair d'origine en utilisant la même clé.

Figure 1. Chiffrement à clé symétrique d'un texte en clair donné en texte chiffré, puis déchiffrement vers le texte en clair d'origine en utilisant la même clé.

Propriétés des cryptosystèmes à clé symétrique

Un cryptosystème à clé symétrique doit garantir les propriétés suivantes pour sécuriser les messages — qu'il s'agisse de données stockées de façon statique ou de communications via un canal de transmission :

  • Confidentialité : Désigne la propriété selon laquelle le contenu informationnel des messages chiffrés est protégé contre tout accès non autorisé.
  • Intégrité : Désigne la propriété selon laquelle toute altération des messages chiffrés lors du stockage ou de la transmission peut être détectée.
  • Authenticité : Désigne la propriété selon laquelle le destinataire d'un message peut vérifier l'identité de l'expéditeur et détecter toute usurpation d'identité par une partie non autorisée.

De plus, ces propriétés doivent être réalisées dans un contexte où les algorithmes ou chiffres utilisés pour le chiffrement et le déchiffrement peuvent être publics, et où l'accès au contenu informationnel des messages chiffrés est contrôlé exclusivement par l'accès à la clé secrète.

La mise en œuvre d'un cryptosystème à clé symétrique sécurisé implique donc deux tâches principales :

  1. Utiliser un algorithme de chiffrement à clé symétrique robuste et résistant aux attaques cryptographiques.
  2. Assurer la confidentialité dans la distribution et la gestion des clés secrètes.

Dans cette leçon, nous aborderons les aspects liés à la première tâche, qui constitue la préoccupation principale de la technologie SKC. La seconde tâche, en revanche, nécessite des solutions qui dépassent le cadre de la SKC elle-même et sera introduite ultérieurement.

Illustration du chiffrement à clé symétrique en Python

Nous montrons un exemple simple des opérations de chiffrement et de déchiffrement avec le chiffre de César à décalage classique et le moderne Advanced Encryption System (AES), qui est la norme pour le chiffrement à clé symétrique depuis 2001. Nous commençons par configurer quelques bibliothèques Python qui fournissent les chiffres de chiffrement à clé symétrique nécessaires, puis nous définissons le texte en clair que nous souhaitons chiffrer.

# Added by doQumentation — required packages for this notebook
!pip install -q cryptography numpy secretpy
# Install the library if needed
# %pip install secretpy

# import the required crypto functions which will be demonstrated later
from secretpy import Caesar
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from functools import reduce
import numpy as np

# Set the plaintext we want to encrypt
plaintext = "this is a strict top secret message for intended recipients only"
print(f"\nGiven plaintext: {plaintext}")

Nous allons voir comment le chiffrer et le déchiffrer à l'aide de deux méthodes de chiffrement à clé symétrique différentes :

  1. Le classique chiffre de César à décalage
  2. Le moderne protocole Advanced Encryption Standard AES-256

Chiffre de César à décalage :

Le chiffrement de César à décalage consiste à définir :

  • Un alphabet des caractères possibles à encoder
  • Une valeur de décalage comprise entre 0 (non chiffré) et la longueur de l'alphabet. Nous considérons cela comme la clé.

Il est connu sous le nom de chiffre de substitution monoalphabétique car chaque lettre du texte en clair est substituée par une autre dans le texte chiffré.

Dans cet exemple, nous utiliserons les lettres minuscules de l'alphabet.

Commençons par mettre les choses en place.

# initialize the required python object for doing Caesar shift encryption
caesar_cipher = Caesar()

# Define the shift, ie the key
caesar_key = 5
print(f"Caesar shift secret key: {caesar_key}")

# Define the alphabet
alphabet = (
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
" ",
)
print(f"alphabet: {alphabet}")

Chiffrons le texte en clair pour obtenir le texte chiffré avec le chiffre de César.

caeser_ciphertext = caesar_cipher.encrypt(plaintext, caesar_key, alphabet)
print(f"Encrypted caeser shift ciphertext: {caeser_ciphertext}")

Déchiffrons le texte chiffré pour retrouver le texte en clair d'origine en utilisant la même clé que pour le chiffrement.

caeser_plaintext = caesar_cipher.decrypt(caeser_ciphertext, caesar_key, alphabet)
print(f"Decrypted caeser shift plaintext: {caeser_plaintext}\n")

Chiffre Advanced Encryption Standard (AES)

Nous chiffrons maintenant le texte en clair à l'aide d'AES, un algorithme de chiffrement à clé symétrique populaire.

Nous commençons par créer la clé, dans ce cas une chaîne aléatoire de 16 caractères.

# lambda defines an inline function in this case that takes two values a,b with the resulting expression of a+b
# reduce uses a two-argument function(above), and applies this to all the entries in the list (random alphabet characters) cumulatively
aes_key = reduce(lambda a, b: a + b, [np.random.choice(alphabet) for i in range(16)])

print(f"AES secret key: {aes_key}")

AES supporte plusieurs modes de fonctionnement et il faut préciser lequel utiliser.

Nous choisissons le mode Cipher Block Chaining (CBC) fourni par la classe modes.CBC de la bibliothèque cryptography. Le mode CBC d'AES utilise de l'aléatoire pour une sécurité accrue. Cela nécessite de spécifier un vecteur d'initialisation (IV) aléatoire, également appelé nonce. Nous utiliserons également une chaîne aléatoire pour cela, tout comme pour la clé.

aes_initialization_vector = reduce(
lambda a, b: a + b, [np.random.choice(alphabet) for i in range(16)]
)
print(f"AES initialization vector: {aes_initialization_vector}")

Nous pouvons maintenant instancier un chiffre AES pour l'expéditeur du message secret. Notons que le vecteur d'initialisation est passé à la classe modes.CBC pour configurer le mode de fonctionnement CBC.

Nous allons ensuite chiffrer le texte en clair à envoyer.

# The encryptor is setup using the key and CBC. In both cases we need to convert the string (utf-8) into bytes
sender_aes_cipher = Cipher(
algorithms.AES(bytes(aes_key, "utf-8")),
modes.CBC(bytes(aes_initialization_vector, "utf-8")),
)
aes_encryptor = sender_aes_cipher.encryptor()

# update can add text to encypt in chunks, and then finalize is needed to complete the encryption process
aes_ciphertext = (
aes_encryptor.update(bytes(plaintext, "utf-8")) + aes_encryptor.finalize()
)

# Note the output is a string of bytes
print(f"Encrypted AES ciphertext: {aes_ciphertext}")

Pour le déchiffrer, instancions un chiffre AES pour le destinataire. Notons que le destinataire prévu a accès à la clé secrète et au vecteur d'initialisation, mais ce dernier n'est pas requis d'être secret.

# Similar setup of AES to what we did for encryption, but this time, for decryption
receiver_aes_cipher = Cipher(
algorithms.AES(bytes(aes_key, "utf-8")),
modes.CBC(bytes(aes_initialization_vector, "utf-8")),
)
aes_decryptor = receiver_aes_cipher.decryptor()

# Do the decryption
aes_plaintext_bytes = aes_decryptor.update(aes_ciphertext) + aes_decryptor.finalize()

# convert back to a character string (we assume utf-8)
aes_plaintext = aes_plaintext_bytes.decode("utf-8")

print(f"Decrypted AES plaintext: {aes_plaintext}")

Applications de la cryptographie à clé symétrique

Bien que les chiffres classiques tels que le chiffre de César soient tombés en désuétude depuis longtemps, les cryptosystèmes symétriques modernes tels qu'AES sont déployés dans un large éventail d'applications, notamment :

  1. Chiffrement et déchiffrement des données : La SKC est largement utilisée pour protéger les données sensibles, qu'elles soient stockées de façon statique sur un appareil ou transmises sur un réseau. Les exemples incluent la protection des identifiants des utilisateurs, le chiffrement des messages électroniques et la sécurisation des transactions financières, entre autres.

  2. Communication sécurisée : Les protocoles de communication courants tels que SSL/TLS utilisent une combinaison de chiffrement à clé symétrique et asymétrique pour assurer la confidentialité et l'intégrité des données échangées entre deux parties. Ces messages sont chiffrés et déchiffrés à l'aide du chiffrement à clé symétrique qui utilise une clé partagée. La clé utilisée dans le chiffrement à clé symétrique est échangée de manière sécurisée grâce au chiffrement à clé asymétrique qui utilise une paire de clés publique-privée. Le chiffrement à clé symétrique est beaucoup plus rapide et peut donc être utilisé pour le chiffrement de messages de grande taille.

  3. Vérification de l'authenticité : Dans certains contextes, la SKC est utilisée via des techniques comme les codes d'authentification de message (MAC) et les MAC à clé de hachage (HMAC) pour vérifier l'authenticité et l'intégrité des messages, garantissant une communication résistante à la falsification.

  4. Chiffrement de fichiers et de disques : Les logiciels de chiffrement intégral du disque et les outils de chiffrement de fichiers utilisent la SKC pour protéger les données sensibles stockées sur des disques durs ou des dispositifs de stockage portables.

  5. Réseaux privés virtuels : Les technologies VPN, qui visent à fournir des canaux de communication confidentiels à l'abri des écoutes, peuvent utiliser le chiffrement à clé symétrique ou asymétrique pour connecter des utilisateurs distants ainsi que des réseaux d'entreprise.

La diversité des applications dans lesquelles la SKC est déployée implique à son tour que les cryptosystèmes symétriques satisfassent un certain ensemble de critères.

Principes du chiffrement à clé symétrique

Dans cette section, nous aborderons quelques-uns des principes fondamentaux sous-jacents à la sécurité des algorithmes de chiffrement à clé symétrique.

Résistance aux attaques par force brute : L'exigence la plus fondamentale pour la sécurité d'un chiffre est que la taille de l'espace des clés — en d'autres termes, le nombre de clés distinctes possibles parmi lesquelles quelqu'un utilisant l'algorithme aurait pu choisir — soit très grande.

Résistance aux attaques cryptanalytiques : La deuxième exigence fondamentale pour un chiffre, symétrique ou non, est qu'il puisse générer des textes chiffrés informationnellement impénétrables. À cette fin, une condition nécessaire mais non suffisante du point de vue de la théorie de l'information est que les textes chiffrés soient caractérisés par une entropie élevée, les rendant indiscernables d'un texte aléatoire sans motifs ni corrélations discernables. De cette façon, un attaquant ne peut obtenir aucune information sur le texte en clair ou la clé secrète en tentant d'analyser le texte chiffré par analyse fréquentielle ou d'autres techniques statistiques.

La résistance aux formes générales d'attaques cryptanalytiques suffisante pour assurer la sécurité sémantique est formalisée via la notion d'indiscernabilité. Bien qu'il existe plusieurs variantes de l'indiscernabilité avec des exigences distinctes, un cryptosystème symétrique est considéré comme sémantiquement sûr s'il satisfait le critère d'Indiscernabilité sous Attaque à Texte en Clair Choisi (IND-CPA). Cela signifie qu'un attaquant ne peut pas distinguer entre les chiffrements de deux messages différents, même s'il est autorisé à envoyer plusieurs textes en clair de son choix à l'algorithme et à visualiser les textes chiffrés correspondants.

Comme nous le verrons plus loin, l'IND-CPA nécessite généralement l'utilisation de l'aléatoire pour garantir que chaque fois qu'un texte en clair donné est chiffré avec une clé secrète donnée, le texte chiffré résultant est de manière imprévisible différent pour chaque chiffrement.

Modes d'échec des chiffres classiques : Avant l'avènement de la cryptographie moderne dans les années 1970, la plupart des chiffres classiques en usage pratique échouaient à satisfaire l'une ou les deux exigences ci-dessus. Par exemple, les premiers chiffres de substitution tels que le chiffre de César à décalage monoalphabétique étaient caractérisés à la fois par une petite taille d'espace des clés (voir Tableau 1) et par un texte chiffré à faible entropie, les rendant peu sûrs contre une variété d'attaques cryptanalytiques telles que les attaques par force brute, l'analyse fréquentielle et les attaques à texte en clair connu (KPT).

Les chiffres de substitution polyalphabétiques ultérieurs tels que le chiffre de Vigenère et le chiffre de la machine Enigma disposaient d'espaces de clés effectivement grands, les rendant résistants aux attaques par force brute, mais ils étaient susceptibles à l'analyse fréquentielle et aux attaques KPT respectivement. De même que les chiffres de substitution, les chiffres de transposition classiques, qui réarrangent les lettres d'un message au lieu de les substituer, sont également compromis par diverses attaques telles que l'anagrammage, l'analyse statistique, la force brute et les attaques KPT, entre autres.

Théoriquement, un chiffre de substitution polyalphabétique connu sous le nom de bloc-notes à usage unique (OTP) est reconnu comme cryptographiquement sûr. Un OTP possède une clé secrète qui doit être (1) composée de lettres ou de bits choisis aléatoirement, (2) au moins aussi longue que le texte en clair d'origine, et (3) utilisée une seule fois. Un OTP est impraticable pour des applications réelles car si la clé secrète — qui doit être aussi longue que le texte en clair et ne peut être utilisée qu'une seule fois — pouvait être partagée de manière sécurisée, il en serait de même pour le texte en clair original. L'OTP illustre plutôt l'utilité de l'aléatoire dans la génération de textes chiffrés sécurisés.

Un attaquant qui tente d'effectuer une recherche par force brute dans l'espace des clés pour trouver une clé qui déchiffre le message doit effectuer un nombre d'opérations proportionnel à la taille de l'espace des clés.

Par conséquent, une grande taille d'espace des clés confère une résistance aux attaques par force brute en les rendant informatiquement infaisables. Le Tableau 1 liste les tailles d'espace des clés de certains chiffres bien connus.

Tableau 1 : Tailles d'espace des clés de quelques chiffres symétriques

ChiffreLongueur de cléTaille de l'espace des clés
Caeser shift1alphabet-size
Vigenerenalphabet-sizen^\mathrm{n}
One-time-padplaintext-lengthalphabet-sizeplaintextlength^\mathrm{plaintext-length}
DES56256^\mathrm{56}
AES-1281282128^\mathrm{128}
AES-1921922192^\mathrm{192}
AES-2562562256^\mathrm{256}
ChaCha202562256^\mathrm{256}
Les schémas de chiffrement à clé symétrique modernes surmontent en grande partie les limitations des chiffres classiques. Ils produisent des textes chiffrés résistants à la cryptanalyse et disposent de grands espaces de clés, tout en étant bien plus efficaces en pratique qu'un OTP.

Chiffres par blocs : Une classe de chiffres modernes — tels que DES et AES — obtient la sécurité en combinant les principes de confusion et de diffusion introduits à l'origine par Claude Shannon. Nous discutons de ces notions dans un contexte où les schémas de chiffrement travaillent avec des représentations binaires des messages :

  • Confusion : La confusion est la caractéristique selon laquelle chaque bit du texte chiffré dépend de plusieurs bits de la clé secrète. Elle garantit qu'un petit changement dans la clé secrète modifie presque tous les bits du texte chiffré, obscurcissant la relation entre le texte chiffré et la clé secrète.

  • Diffusion : La diffusion est la caractéristique selon laquelle inverser un seul bit dans le texte en clair devrait modifier environ la moitié des bits dans le texte chiffré et vice versa. La diffusion masque les relations statistiques entre le texte en clair et le texte chiffré. Les chiffres avec une diffusion adéquate satisfont ce qu'on appelle le critère d'avalanche de la cryptographie.

Les chiffres par blocs implémentent la confusion et la diffusion à l'aide de structures cryptographiques appelées réseaux de substitution-permutation (SPN) opérant sur des blocs discrets de données. Un SPN accepte un bloc de texte en clair et la clé secrète comme entrées et effectue un nombre spécifié de tours de transformations pour produire un bloc de texte chiffré. Chaque tour est composé de structures mathématiques alternées appelées boîtes de substitution (S-boxes) et boîtes de permutation (P-boxes) ou des opérations équivalentes.

Celles-ci implémentent respectivement des transformations non linéaires complexes et des transformations linéaires sur les blocs d'entrée, conduisant à des effets d'avalanche dans le texte chiffré.

Les SPN sont conçus de telle sorte qu'augmenter le nombre de tours augmente généralement la sécurité du chiffre. Cela conduit à la notion de marge de sécurité. Marge de sécurité : La marge de sécurité d'un chiffre cryptographique basé sur SPN donné est la différence entre le nombre de tours dans l'implémentation complète du chiffre et le nombre maximum de tours que l'on sait être cassables par la meilleure attaque réelle connue.

Par exemple, actuellement les meilleures attaques connues plus rapides que la force brute contre AES-256 peuvent casser jusqu'à 9 tours sur les 14 tours du chiffre complet lorsqu'il est utilisé dans le mode standard connu sous le nom de mode Electronic Codebook (ECB). Par conséquent, actuellement la marge de sécurité d'AES-256 est de 5 tours.

Chiffres de flot : En alternative aux chiffres par blocs, les cryptologues modernes ont également conçu des chiffres de flot pratiquement sûrs tels que Chacha20. Ces chiffres utilisent l'aléatoire comme partie fondamentale de leur conception et opèrent sur des flux de clés pseudoaléatoires de bits au lieu de blocs discrets de données.

En conséquence, les chiffres de flot combinent une clé secrète et un vecteur d'initialisation (IV) pour initialiser un générateur de nombres pseudo-aléatoires (PRNG) afin de produire un flux de clés de bits aléatoires qui sont ensuite combinés avec le texte en clair donné pour produire le texte chiffré. En ce sens, les chiffres de flot sont similaires à un bloc-notes à usage unique (OTP) mais avec des longueurs de clé secrète plus courtes et des clés réutilisables, ce qui les rend plus pratiques. Cependant, pour la même raison, ils ne garantissent pas le secret parfait, contrairement à un OTP.

Sécurité sémantique : Nous concluons cette sous-section en revenant à la notion de sécurité sémantique ou de sécurité de niveau IND-CPA introduite ci-dessus. Les opérations de base implémentées par les chiffres par blocs telles que les S-box et P-box sont déterministes. Cela signifie que dans les modes de fonctionnement standard tels que le mode ECB, une paire texte en clair-clé donnée produit toujours le même texte chiffré, un état qui est susceptible aux attaques à texte en clair choisi.

Pour atteindre la sécurité de niveau IND-CPA, les chiffres par blocs doivent fonctionner dans un mode qui utilise l'aléatoire introduit via un vecteur d'initialisation (IV) pseudoaléatoire avec l'exigence supplémentaire qu'aucune opération de chiffrement n'utilise la même paire clé-IV. AES prend en charge plusieurs modes de fonctionnement, tels que le cipher block chaining (CBC), qui sont sécurisés au niveau IND-CPA. Une exigence similaire s'applique également aux chiffres de flot, où la même paire clé-IV ne doit pas être utilisée pour initialiser le PRNG plus d'une fois si l'IND-CPA est souhaitée.

Après avoir introduit quelques principes de base de la SKC, nous listons maintenant quelques algorithmes à clé symétrique populaires pour illustrer la variété des approches poursuivies dans les cryptosystèmes modernes. Les chiffres par blocs et les chiffres de flot modernes sont tous deux utilisés dans différents contextes comme illustré ci-dessous.

  1. Advanced Encryption Standard : AES, déjà introduit ci-dessus, est actuellement la norme de facto pour la SKC en raison de ses caractéristiques de sécurité, d'efficacité et de performance. AES dispose de tailles de clés fixes de 128, 192 et 256 bits et utilise un réseau de substitution-permutation (SPN) multi-tours. AES est connu pour être résistant à un large éventail d'attaques cryptanalytiques. AES a été annoncé comme Federal Information Processing Standard (FIPS) pour le chiffrement à clé symétrique aux États-Unis en 2001.`

  2. Data Encryption Standard (DES) et Triple Data Encryption Standard (3DES) : DES était un chiffre par blocs inventé à l'origine par Horst Feistel et ses collègues chez IBM® dans les années 1970 et utilisait un SPN avec une clé de 56 bits relativement courte. DES a été adopté comme FIPS pour le chiffrement à clé symétrique aux États-Unis jusqu'à la fin des années 1990, lorsqu'il a été démontré qu'il pouvait être cassé par des attaques par force brute avec du matériel spécialisé en raison de sa petite taille d'espace de clés. Par la suite, 3DES a été introduit comme remplacement et applique l'algorithme DES trois fois avec des clés différentes, augmentant la longueur de clé à 168 bits. Néanmoins, 3DES est largement supplanté par AES.

  3. Blowfish et Twofish : Blowfish et son successeur, Twofish, sont des chiffres par blocs proposés par le cryptographe Bruce Schneier dans les années 1990. Blowfish et Twofish permettent des longueurs de clés variables allant jusqu'à 448 bits et 256 bits respectivement, offrant une certaine flexibilité dans le compromis entre sécurité et performance. Contrairement à AES, ils disposent également de S-boxes dépendantes de la clé. Twofish était l'un des finalistes dans le concours NIST pour sélectionner l'Advanced Encryption Standard mais n'a finalement pas été retenu. Les deux algorithmes sont actuellement considérés comme sûrs.

  4. Chiffres de Rivest (RC2, RC4, RC5 et RC6) : La famille d'algorithmes à clé symétrique Rivest Cipher (RC) a été conçue par Ron Rivest à partir des années 1980. RC2 était un premier chiffre par blocs 64 bits tandis que RC4 était un chiffre de flot largement utilisé dans les protocoles de sécurité liés au trafic web en raison de sa simplicité et de sa rapidité. Ni l'un ni l'autre n'est actuellement considéré comme sûr. RC5 et RC6 sont des chiffres par blocs basés sur SPN conçus avec une taille de bloc, une taille de clé et un nombre de tours personnalisables. Comme Twofish ci-dessus, RC6 était un finaliste dans le concours NIST pour l'AES et est considéré comme sûr.

  5. Salsa20 et ChaCha20 : Salsa20 et ChaCha20 forment une famille de chiffres de flot apparentés conçus par le cryptographe Daniel Bernstein dans les années 2000. Salsa20 fait partie du portefeuille de profil-1 du projet européen de validation cryptographique eSTREAM. ChaCha20, une modification de Salsa20, a été conçu pour améliorer les caractéristiques de diffusion et les performances. Actuellement, ChaCha20 est considéré comme sûr et offre de meilleures performances en l'absence d'accélération matérielle AES dédiée. Par conséquent, ChaCha20 est utilisé dans certains contextes tels que les protocoles réseau comme QUIC et les appareils mobiles avec des CPU ARM.

Avantages de la cryptographie à clé symétrique

Après avoir décrit les propriétés des cryptosystèmes à clé symétrique et certains des principes qui sous-tendent leur développement, nous listons maintenant quelques-uns des principaux avantages de la SKC par rapport à la cryptographie à clé asymétrique. Cette dernière sera abordée dans les leçons suivantes.

  1. Rapidité et efficacité : Les algorithmes à clé symétrique sont plus adaptés au chiffrement de grands volumes de données ou à une utilisation dans des scénarios de communication en temps réel, car ils sont généralement plus rapides et moins gourmands en ressources que leurs équivalents asymétriques. Les algorithmes SKC tels qu'AES évoluent linéairement avec la taille du texte en clair et n'impliquent pas d'opérations mathématiques algébriquement intensives. Voir Tomoiaga et al. pour une revue détaillée des caractéristiques de performance d'AES.

  2. Extensibilité : En raison de leur surcharge de calcul relativement faible, les algorithmes à clé symétrique s'adaptent bien au nombre d'utilisateurs et à la quantité de données chiffrées.

  3. Simplicité : Les protocoles de chiffrement symétrique sont souvent plus faciles à implémenter et à comprendre par rapport aux approches à clé asymétrique, ce qui les rend attractifs pour les développeurs et les utilisateurs.

Défis et limites de la cryptographie à clé symétrique

Malgré ses avantages, la cryptographie à clé symétrique présente également certains défis et limites :

  1. Distribution et gestion des clés : Dans la SKC, l'émetteur et le destinataire d'un message doivent avoir accès à la même clé, qui doit être gardée confidentielle vis-à-vis des parties non autorisées. Si la clé est interceptée ou compromise par un tiers, la sécurité des données chiffrées est également perdue. La distribution et la gestion sécurisées de la clé secrète constituent donc un défi majeur. Cependant, la solution à ce défi se situe en dehors de la SKC elle-même.

  2. Absence de non-répudiation : La non-répudiation désigne la capacité à prouver qu'une partie spécifique a envoyé un message. Dans la SKC, puisque la même clé est utilisée pour le chiffrement et le déchiffrement, il n'est pas possible de déterminer quelle partie a créé un texte chiffré particulier. En revanche, la cryptographie à clé asymétrique fournit la non-répudiation grâce à l'utilisation de la signature numérique.

Pour relever ces défis, la cryptographie à clé symétrique est souvent utilisée en combinaison avec la cryptographie à clé asymétrique. Par exemple, on utilise souvent le chiffrement à clé asymétrique pour transmettre de manière sécurisée une clé secrète partagée relativement courte entre l'émetteur et le destinataire. Cela permet l'utilisation ultérieure du chiffrement à clé symétrique pour transmettre des données et des messages bien plus volumineux de manière efficace.

Informatique quantique et chiffrement à clé symétrique : risques et atténuation

La cryptographie quantique offre une voie prometteuse pour l'atténuation des risques à l'ère numérique, avec l'adoption de produits à sécurité quantique prête à protéger nos informations contre la menace imminente des avancées en informatique quantique.

Dans ce qui suit, nous discutons des risques posés par les ordinateurs quantiques aux schémas de chiffrement à clé symétrique introduits dans la section précédente et décrivons quelques pistes potentielles pour atténuer ces risques.

Attaques cryptographiques quantiques

Il existe deux catégories distinctes de menaces quantiques pour les algorithmes cryptographiques traditionnels :

  1. Attaques par force brute quantique : Elles désignent des situations où l'attaquant utilise un ordinateur quantique pour exécuter un algorithme quantique spécialisé afin de mener une recherche par force brute dans l'espace des clés d'un chiffre symétrique. La primitive quantique la plus pertinente pour permettre ce type d'attaque est l'algorithme de Grover.

  2. Attaques cryptanalytiques quantiques : Elles désignent des situations où des ordinateurs quantiques sont déployés pour exécuter des attaques cryptanalytiques visant à récupérer la clé secrète ou le texte en clair de manière plus efficace qu'une recherche par force brute. La possibilité d'exécuter des attaques cryptanalytiques quantiques réussies dépend de nombreux facteurs liés à la structure mathématique du chiffre analysé ainsi qu'à des faiblesses potentielles dans des implémentations spécifiques.

Stratégies d'atténuation des risques pour les attaques quantiques

Avant de discuter des stratégies d'atténuation des risques pour les attaques quantiques, introduisons la notion de niveau de sécurité d'un chiffre cryptographique :

Niveau de sécurité est une mesure de la difficulté à casser un chiffre, exprimée en termes de nombre d'opérations de calcul qu'un cassage réussi du chiffre nécessiterait.

En règle générale, le niveau de sécurité est exprimé en bits ; c'est-à-dire qu'en général, un chiffre offre une sécurité de N bits s'il nécessite O(2N)\mathcal{O}(2^{N}) opérations pour le casser. Sur les ordinateurs classiques, en supposant qu'un chiffre symétrique est par ailleurs cryptographiquement sûr, le niveau de sécurité est approximativement synonyme de la longueur de la clé.

Par exemple, le niveau de sécurité d'AES-128, qui dispose d'une clé de 128 bits, est généralement considéré comme étant de 128 bits, car il faudrait de l'ordre de 2128^{128} opérations pour qu'un attaquant utilisant un ordinateur classique essaie toutes les clés de 128 bits possibles dans l'espace des clés.

Attaques par force brute et atténuation

Risque d'attaque par force brute quantique : Une attaque par force brute quantique modifie l'évaluation ci-dessus car l'algorithme de Grover permet à un attaquant disposant d'un ordinateur quantique adéquat de parcourir l'espace des clés d'un chiffre quadratiquement plus vite que n'importe quel ordinateur classique.

Par exemple, la même attaque par force brute sur AES-128 avec l'algorithme de Grover pourrait potentiellement être réalisée avec seulement 264^{64} opérations. Par conséquent, le niveau de sécurité d'AES-128 est réduit de 128 bits à 64 bits face à un adversaire quantique exécutant la recherche de Grover. Comme la puissance de calcul a traditionnellement augmenté de façon exponentielle avec le temps, un niveau de sécurité de 64 bits est actuellement considéré comme non sécurisé, ce qui signifie qu'une fois des ordinateurs quantiques suffisamment capables réalisés, AES-128 devra être abandonné.

Le même type de calcul s'applique aux autres chiffres symétriques par blocs ou de flot, où le niveau de sécurité pour une longueur de clé donnée est effectivement réduit de moitié par l'algorithme de Grover.

Atténuation du risque d'attaque par force brute quantique : Les considérations ci-dessus impliquent qu'une façon évidente de résister aux attaques par force brute quantiques est de doubler au minimum les longueurs de clé utilisées pour le chiffrement à clé symétrique.

Par conséquent, pour assurer une sécurité de 128 bits face aux attaques par force brute quantiques, il suffit d'utiliser des chiffres tels qu'AES-256 ou ChaCha20 qui emploient des clés de 256 bits. Cela est considéré comme sûr car même avec des ordinateurs quantiques, effectuer 2128^{128} opérations pour casser des chiffres est infaisable dans un avenir prévisible.

Bien que théoriquement simple, cette solution proposée de doubler les tailles de clé n'est pas sans coûts, car des tailles de clé plus grandes impliquent un coût de calcul supplémentaire pour les tâches de chiffrement-déchiffrement de routine, ainsi que des performances plus lentes, des besoins en mémoire plus importants et une consommation d'énergie accrue.

Attaques cryptanalytiques et atténuation

Risque d'attaques cryptanalytiques quantiques : Le risque posé aux cryptosystèmes à clé symétrique par les attaques cryptanalytiques quantiques fait actuellement l'objet de recherches actives par les cryptographes. La combinaison de l'informatique classique et quantique élargit potentiellement l'éventail des outils disponibles pour les attaquants afin de sonder les faiblesses dans la structure mathématique des chiffres, et un large éventail de nouvelles attaques cryptanalytiques quantiques sont actuellement proposées. Celles-ci incluent des quantisations de techniques classiques connues telles que la cryptanalyse linéaire et différentielle ainsi que de nouveaux modes d'attaque sans équivalents classiques.

Une récente étude cryptanalytique quantique de l'Advanced Encryption Standard (AES) a révélé que le chiffre restait résistant à diverses attaques cryptanalytiques quantiques connues et continuait à exhiber une marge de sécurité post-quantique adéquate. Cependant, certaines études ont révélé que divers chiffres symétriques considérés comme classiquement sûrs sont facilement compromis par ce qu'on appelle l'attaque à texte en clair choisi quantique. Par conséquent, de nouvelles primitives pour le chiffrement à clé symétrique conçues spécifiquement pour l'ère post-quantique ont également été proposées.

Atténuation du risque d'attaques cryptanalytiques quantiques : Étant donné que la cryptanalyse quantique en tant que discipline en est à ses débuts, il se peut que la cryptographie symétrique post-quantique connaisse une évolution rapide à mesure que de nouvelles attaques cryptanalytiques quantiques émergent et que de nouveaux chiffres résistants sont proposés et évalués. Par conséquent, la meilleure stratégie pour atténuer le risque d'attaques cryptanalytiques quantiques dans un avenir prévisible est l'agilité cryptographique (ou crypto-agilité). La crypto-agilité désigne la capacité d'un système d'information à adopter rapidement et facilement des primitives cryptographiques alternatives sans modifications perturbantes de l'infrastructure du système.

La crypto-agilité exige la capacité de remplacer les algorithmes obsolètes utilisés pour le chiffrement, le déchiffrement, les signatures numériques ou d'autres fonctions cryptographiques avec un minimum d'effort et de perturbation. Les systèmes crypto-agiles seront bien positionnés pour gérer la transition vers la cryptographie à clé symétrique post-quantique.

Résumé

La cryptographie à clé symétrique fournit des solutions robustes et efficaces pour sécuriser les informations numériques. La simplicité d'utiliser la même clé pour le chiffrement et le déchiffrement permet des performances élevées et une bonne extensibilité, rendant la SKC adaptée à un large éventail d'applications.

La sécurité de la SKC repose sur la résistance algorithmique aux attaques cryptographiques ainsi que sur une gestion appropriée des clés secrètes. Les cryptosystèmes à clé symétrique modernes combinent les principes de confusion, de diffusion et d'aléatoire, en conjonction avec des tailles de clé adéquates, pour atteindre la sécurité sémantique. La gestion des clés secrètes, bien que cruciale, ne peut pas être réalisée avec la SKC seule.

Comprendre les propriétés et les limites de la SKC permettra aux développeurs de concevoir, implémenter et déployer des solutions technologiques d'information sécurisées en utilisant des approches incluant des tailles de clé plus grandes selon les besoins, et l'utilisation de nouveaux algorithmes.

L'avancement de l'informatique quantique et de l'apprentissage quantique introduit une nouvelle dimension dans la cryptographie à clé symétrique. Les ordinateurs quantiques ont le potentiel de démanteler la sécurité fournie par les algorithmes classiques à clé symétrique, suscitant la nécessité d'approches cryptographiques résistantes au quantum pour assurer la confidentialité et la protection des données face à l'évolution des paysages technologiques.