Informatique · Terminale · 5 min de lecture
Chiffrement symétrique et asymétrique
Chiffrement symétrique : la même clé, partagée, sert à chiffrer et à déchiffrer ; chiffrement asymétrique : une clé publique chiffre, seule la clé privée associée déchiffre ; en HTTPS, un protocole asymétrique sert à échanger une clé symétrique de session, puis les échanges sont chiffrés symétriquement (plus rapide) ; exemples de chiffrements simples (décalage, ou exclusif).
Chapitre du programme : Numérique et sciences informatiques (spécialité)
Bloc 1 sur 7 · Comprendre
Comprendre : une clé pour chiffrer, une clé pour déchiffrer
Chiffrer un message, c'est le transformer pour qu'il soit illisible par qui ne possède pas la clé ; déchiffrer, c'est retrouver le message d'origine grâce à la clé.
Chiffrement symétrique : la même clé, partagée par l'expéditeur et le destinataire, sert à chiffrer et à déchiffrer. Exemple historique, le chiffrement par décalage : chaque lettre est remplacée par celle qui se trouve d lettres plus loin dans l'alphabet (en revenant à A après Z). La clé est d ; on déchiffre avec le décalage opposé. Dans le programme, ord donne le code d'un caractère et chr le caractère d'un code ; le reste de la division par 26 (% 26) fait revenir à A après Z.
def cesar(texte, d):
resultat = ""
for c in texte:
rang = (ord(c) - ord("A") + d) % 26
resultat = resultat + chr(ord("A") + rang)
return resultat
secret = cesar("BONJOUR", 3)
print(secret)
print(cesar(secret, -3))ERQMRXU
BONJOURAvec seulement 26 décalages possibles, ce chiffrement se casse en les essayant tous : il sert à comprendre le principe, pas à protéger un secret.
Bloc 2 sur 7 · Approfondir
Approfondir : ou exclusif, asymétrique, HTTPS
Chiffrement par ou exclusif (xor). On combine chaque bit du message avec le bit de même rang de la clé : le résultat vaut 1 si les deux bits sont différents, 0 s'ils sont égaux. En Python, l'opérateur est ^. Dans l'extrait, 0b10110010 écrit un entier en binaire, et format(c, "08b") écrit c en binaire sur 8 chiffres. Appliquer deux fois la même clé redonne le message, car (m xor k) xor k = m : la même clé chiffre et déchiffre.
m = 0b10110010
k = 0b01101100
c = m ^ k
print(format(c, "08b"), c)
print(format(c ^ k, "08b"), c ^ k)11011110 222
10110010 178Sur un texte, on chiffre le code de chaque caractère : ord(c) donne le code (un entier) du caractère c, et chr(x) le caractère de code x.
cle = 42
message = "NSI"
chiffre = []
for c in message:
chiffre.append(ord(c) ^ cle)
print(chiffre)
texte = ""
for x in chiffre:
texte = texte + chr(x ^ cle)
print(texte)[100, 121, 99]
NSIChiffrement asymétrique. Chaque personne possède deux clés associées : une clé publique, que tout le monde peut connaître, et une clé privée, qu'elle garde secrète. Ce qui est chiffré avec la clé publique ne peut être déchiffré qu'avec la clé privée associée. Pour envoyer un secret à Bob, on le chiffre donc avec la clé publique de Bob ; seul Bob pourra le lire. RSA est un exemple de tel chiffrement.
HTTPS combine les deux. Le chiffrement symétrique est plus rapide, mais il faut d'abord partager la clé sans qu'elle soit interceptée. En HTTPS, un protocole asymétrique sert à échanger une clé symétrique de session ; ensuite, tous les échanges sont chiffrés symétriquement avec cette clé.
Bloc 3 sur 7 · Exemple
Exemple guidé : chiffrer un octet par ou exclusif
Énoncé. La clé est 0110 1100. On chiffre l'octet 1011 0010. Quelle est la valeur, en base 10, de l'octet chiffré ?
Méthode : comparer les bits rang par rang.
| Poids | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|---|---|---|---|
| Message | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 |
| Clé | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 |
| xor | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
L'octet chiffré est 1101 1110. Ses bits à 1 ont pour poids 128, 64, 16, 8, 4 et 2 : 128 + 64 + 16 + 8 + 4 + 2 = 222.
Déchiffrer : on applique le même ou exclusif avec la même clé, 1101 1110 xor 0110 1100 = 1011 0010, soit 178, le message d'origine (voir l'exécution ci-dessus).
Bloc 4 sur 7 · Visualiser
Voir : symétrique ou asymétrique ?
| Critère | Symétrique | Asymétrique |
|---|---|---|
| Clés | une seule clé, partagée | une clé publique et une clé privée associées |
| Chiffrer | avec la clé partagée | avec la clé publique du destinataire |
| Déchiffrer | avec la même clé | avec la clé privée du destinataire |
| Difficulté | partager la clé en secret | plus lent |
| Exemples | décalage, ou exclusif | RSA |
| Rôle dans HTTPS | chiffrer les échanges | échanger la clé de session |
Continuez sur votre lancée
Vous avez découvert l’essentiel et un exemple. Retrouvez la suite du cours et les points à retenir, puis passez à l’entraînement guidé dans votre compte.
- Les formules et les repères à retenir
- Les erreurs fréquentes expliquées
- Un exercice avec des aides et sa correction
L’accès gratuit comprend les cours et exercices de votre niveau choisi.
Sources
- BO spécial n°8 du 25 juillet 2019 — programme de spécialité numérique et sciences informatiques de terminale générale, annexe (https://eduscol.education.fr/document/30010/download) — rubrique « Architectures matérielles, systèmes d'exploitation et réseaux », sécurisation des communications
- A. S. Tanenbaum, D. J. Wetherall, Réseaux, 5e édition, Pearson — chapitre 8, « Sécurité des réseaux » (chiffrement à clé symétrique, à clé publique)
- Documentation officielle de Python 3, The Python Language Reference et The Python Standard Library (https://docs.python.org/3/) — opérateur ^ (ou exclusif bit à bit), fonctions ord, chr et format
Vous pensez avoir trouvé une erreur dans cette leçon ? Signalez-la par e-mail.