Vous êtes sur la page 1sur 27

Chapitre 3:

Chiffrement authentifié :
sécurité contre les attaques à
texte chiffré choisie
Par FARAOUN Kamel Mohamed
Introduction
• Afin de garantir la confidentialité des messages, les
algorithmes de chiffrement (blocs/flots) sont utilisés
pour chiffré/déchiffré tout genre de données
numériques. Ils protègent les messages contre un
attaquant qui peut seulement consulter les
messages.
• Les MACs permettent de protégé l’intégrité des
messages en garantissant que tout modification
intentionnelle est détecter lors de la réception.
• La combinaison des deux techniques permettra de
garantir la sécurité des messages contre un
attaquant qui à le pouvoir de consulter et de
modifier les messages : Attaquant active.
Exemples d’attaques actives
• La protection de la confidentialité n’est pas
suffisante. Un attaquant active peut toujours
attendre la confidentialité :
IV, dest = 80 data
TCP/IP
TCP/IP WWW
WWW
Alice packet stack WWW
Alice packet stack port = 80
port
Alice port == 80
80
dest
dest == 80
Bob: 80 data
data

kk IV’, dest = 25 data


sourcemachine
source machine dest = 25 stuff k
k Bob
packets encrypted Bob
Bob = 25
destination machine
destination
destination machine port
machineport
using key k port == 25
25
Protection contre les
attaques actives
• Afin de garantir la protection contre les attaques
actives, il est nécessaire de combiner les deux
techniques : chiffrement et MACs pour satisfaire les
deux services : confidentialité et intégrité. Cette
combinaison définie le chiffrement authentifié
(Authenticated Encryption (AE)).
• Définie pour la première fois en l’an 2000 [KY’00,
BN’00].
• Avant 2000: des API crypto existent pour le
chiffrement et pour l’intégrité (e.g. MS-CAPI) ,
chaque projet combine les deux à sa manière !.
• Malheureusement, tout les combinaisons ne sont
pas sécurisés !
Objectif de l’AE
• Un crypto-système (E,D) assurant le chiffrement
authentifié est définie sur les ensembles suivant :
E:KxMxNC
D:KxCxNM{}
• Ce crypto-système doit garantir la confidentialité et
l’intégrité du texte-chiffré:
– La sécurité sémantique contre les attaques à texte-
claire choisies : CPA-Security.
– L’intégrité des messages chiffrés : un attaquant ne
peut construire un texte chiffré valide sans
connaissance de la clé. Le déchiffrement de tels
messages donnera «  ».
Sécurité sémantique de
l’intégrité d’un ciphertext
• Soit (E,D) un crypto-système :

m1  M m2 , …, mq
Chal. Adv.
kK c1  E(k,m1) c2 , …, cq

c
b
b=1 if D(k,c) ≠⊥ and c  { c1 , … , cq }
b=0 otherwise

• (E,D) assure l’intégrité des messages chiffrés si pour


tout adversaire efficace A:
AdvCI[A,E] = Pr[Chal. outputs 1] est “négligeable.”
Définition de l’ AE
• Soit (E,D) un crypto-système. (E,D) assure un
chiffrement authentifié ssi :
1. (E,D) est CPA-Sécurisé (contre les attaques à texte claire
choisies).
2. (E,D) assure l’intégrité des messages chiffrés.
• Les modes déjà vus (ex. CBC,CTR…) n’assurent aucune
intégrité : n’importe quel message peut être déchiffré 
le jeux de la sécurité sémantique peut toujours être
gagner avec une probabilité 1.
• Implications de l’AE: un attaquant ne peut induire le
récepteur en erreur :
m1 , …, mq c
Alice Bob
ci = E(k, mi) Cannot create
k k
valid c ∉ { c1, …, cq }
CCA-Security : contre les
attaques à texte chiffrés choisies
• Un crypto-système qui assure un chiffrement
authentifié est sémantiquement sécurisé contre les
attaques à textes chiffrés choisies (CCA-Secure).
• Dans ce type d’attaques, l’adversaire peut obtenir le
déchiffrement de plusieurs messages chiffrés
C1,C2,…Cq, et veut obtenir celui d’un autre message C
avec C∉ { C1, …, Cq }.
• Pouvoirs de l’attaquant :
– Il peut obtenir le chiffrement de messages arbitraires de sont
choix (CPA-attaque)
– Peut obtenir le déchiffrement de messages arbitraires de sont
choix (sauf un message de défi C)
• Son objectif :
– Casser la sécurité sémantique (CCA-security)
CCA-Security : Définition
• Soit (E,D) un crypto-système définie sur (K,M,C). On
définie l’expérience Exp(b) pour b=0,1 :

Chal. for i=1,…,q: Adv.


b kK (1) CPA query:
mi,0 , mi,1  M : |mi,0| = |mi,1|
ci  E(k, mi,b)

(2) CCA query:


ci  C : ci ∉ {c1, …, ci-1}
mi  D(k, ci) b’  {0,1}

• (E,D) est CCA-Secure (sémantiquement sécurisé contre


les attaques à texte chiffré choisie) ssi :
AdvCCA [A,E]=|Pr[EXP(0)=1] – Pr[EXP(1)=1]|est négligeable.
CCA-Security : Exemple
• Le mode CBC avec IV aléatoire n’est pas CCA-Sécurisé :

m0 , m1 : |m0| = |m1|=1 bloc


Chal. Adv.
b c  E(k, mb) = (IV, c[0])
kK
c’ = (IV⨁1, c[0]) Learn b with
probability 1 b
D(k, c’) = mb⨁1

Théorème :
Si (E,D) est un crypto-système assurant le chiffrement
authentifié (AE), alors (E,D) est CCA-Secure.
En particulier, pour chaque adversaire efficace A
effectuant q requête, il existe deux adversaires efficaces B1
et B2 tel que :
AdvCCA[A,E] ≤ 2q⋅AdvCI[B1,E] + AdvCPA[B2,E]
CCA-Security : Preuve

Chal. CPA query: mi,0 , mi,1 Adv. Chal. CPA query: mi,0 , mi,1 Adv.

ci=E(k,mi,0) ci=E(k,mi,0)
kK kK
CCA query: ci
≈p CCA query: ci
D(k,ci) ⊥
≈p ≈p
Chal. CPA query: mi,0 , mi,1 Adv. Chal. CPA query: mi,0 , mi,1 Adv.

ci=E(k,mi,1) ci=E(k,mi,1)
kK ≈p kK
CCA query: ci CCA query: ci
D(k,ci) ⊥
CCA-Security : Synthèse
• Pour assuré la sécurité contre les attaques actives, un
crypto-système (E,D) doit être sémantiquement sécurisé
contre les attaques à texte chiffré choisie: CCA-Secure.
• Un crypto-système est prouvé être CCA-Secure, s’il
vérifie les deux conditions :
1. (E,D) est CPA-Secure (contre les attaques à texte
claire choisie)
2. (E,D) assure l’intégrité du texte chiffré : répond avec
«  » pour tout texte chiffré non conforme (conçu
sans connaissance de la clé secrète)
Conclusion :
Il suffit de construire des AE à base de crypto-systèmes
CPA-Secure et de MACs pour assuré la CCA-Sécurité !.
Toute les constructions ne sont pas sécurisé !!!
Constructions AE : Chiffrement + MACs
• Soit (E,D) un CPA-Secure crypto-système, et I=(S,V) un
MAC sémantiquement sécurisé. Trois constructions
standards existants (avec deux clé KE et KI):
MAC-then-Encrypt
Construction 1: (SSL)
S(kI, m) E(kE , mlltag)
msg m msg m tag

Encrypt-then-MAC
Construction 2: (IPsec)
E(kE, m) S(kI, c)
msg m tag

Encrypt-and-MAC
Construction 3: (SSH)
E(kE , m) S(kI, m)
msg m tag
Constructions AE : Théorèmes …
• Soit (E,D) un CPA-Secure crypto-système, et I=(S,V) un
MAC sémantiquement sécurisé:
1. La construction Encrypt-Then-MAC:
est toujours sémantiquement sécurisé .
2. La construction MAC-Then-Encrypt:
peut ne pas être sémantiquement sécurisé dans
certains cas (elle l’est si CBC/CTR avec IV sont
utilisées).
3. La construction Encrypt-And-MAC:
n’est pas sémantiquement sécurisé !

Pour plus de détails :


KRAWCZYK, Hugo. The order of encryption and authentication for protecting
communications (or: How secure is SSL?). In : Annual International Cryptology
Conference. Springer Berlin Heidelberg, 2001. p. 310-331.
Constructions AE : Standards
• Plusieurs standards existants pour implémenter des
crypto-systèmes assurant l’AE avec sécurité sémantique
prouvée (tous EtM, avec support du AEAD):
– GCM (Galois Counter Mode): CTR mode encryption avec un MAC
CW (Carter-Wegman). Accélérer via l’instruction Intel
PCLMULQDQ. Spécifier par la norme IEEE 802.1AE.
Implémentations très sensible aux attaques! [Böck, H., Zauner, A., Devlin, S.,
Somorovsky, J., & Jovanovic, P. (2016). Nonce-Disrespecting Adversaries: Practical
Forgery Attacks on GCM in TLS. IACR Cryptology ePrint Archive, 2016, 475]).

– CCM (Counter with CBC-MAC): utilise CBC-MAC avec un


chiffrement en mode CTR (norme 802.11i). Il est généralement lent:
un bloc est traiter deux fois, une pour le chiffrement et l’autre pour
l’authentification.

– EAX : Utilise un chiffrement en mode CTR avec un CMAC. Sécurité


prouvée, traitement on-line, gratuit !
Une meilleurs solution: OCB
• OCB (Offset Codebook Mode): est un mode de chiffrement
authentifier qui traite chaque bloc une seule fois !, il est
en plus complètement parallèle (extrêmement rapide par
rapport aux autres standards).

m[0] m[1] m[2] m[3] checksum

P(N,k,0)  P(N,k,1)  P(N,k,2)  P(N,k,3)  P(N,k,3) 


E(k,) E(k,) E(k,) E(k,) E(k,)

P(N,k,0)  P(N,k,1)  P(N,k,2)  P(N,k,3)  auth 


c[0] c[1] c[2] c[3] c[4]

• Il est malheureusement protéger par un brevet (US


patents 7.949.129, and 8.321.67).
Constructions AE : Performances …

Cipher Speed (MB/sec)

AES/GCM 108
AES/CCM 61
AES/EAX 61
AES/OCB 129

Crypto++ 5.6.0 Library Benchmarks (AMD Opteron,2.2 GHz -


Linux)
https://www.cryptopp.com/benchmarks.html
AE en pratique : Protocole TLS
• TLS/SSL est un protocole permettant des
communications chiffrées sur le web (https).
• Après une étape de négociation, deux clés sont établies
pour les deux sens : kb⇾s and ks⇾b

HDR TLS record

kb⇾s , ks⇾b kb⇾s , ks⇾b

• En plus, deux compteurs sont maintenus de chaque


cotée ctrb⇾s, ctrs⇾b initialisés à 0 et incrémentés pour
chaque nouveau paquet (de 16 ko). (contre une attaque
par replay)  Stateful encryption.
AE en pratique : Protocole TLS
• TLS/SSL Utilise le mode MAC-then-Encrypt avec CBC-
AES128 pour le chiffrement et HMAC-SHA1 pour la
signature. La clé des deux cotés est étendu en deux kb⇾s
= (kmac , kenc).
type ll ver ll len

data
tag pad

• Si le client veut envoyer un message « data », il calcule


enc(kb⇾s , data, ctrb⇾s ) comme suit :
1. tag ⟵ S( kmac , [ ++ctrb⇾s ll header ll data] )
2. pad [ header ll data ll tag ] à la taille d’un bloc AES
3. Chiffre le résultat en mode CBC avec kenc et un IV
aléatoire.
4. Ajoute le header au résultat du chiffrement .
AE en pratique : Protocole TLS
• Lors de la réception, le serveur déchiffre de la manière
suivantes dec(kb⇾s , record, ctrb⇾s ):
1. Déchiffre le paquet en mode CBC avec kenc
2. Vérifie le format du pad : envoi bad_record_mac si invalide
3. Vérifie la tag sur [ ++ctrb⇾s ll header ll data] :envoi
bad_record_mac si invalide

• TLS assure le chiffrement authentifié, mais des


anciennes versions (avant 1.1) contiennes des bugs :
1. IV prédictible pour CBC (le dernier bloc chiffré du
paquet précédant)  attaque BEAST.
2. Padding Oracle Attack : le faite de renvoyer deux
messages d’erreur différents : decryption_failed si le pad
est invalide et bad_record_mac si le MAC est invalide
permet une attaque sur le protocole
Padding Oracle Attack sur TLS/SSL
• Supposant que l’attaquant peut différencier les deux
situations « padding invalide » et « MAC invalide » (deux
messages d’erreur différents), il pourra donc exécuter
une attaque à texte chiffré choisie:
L’attaquant soumis des messages chiffrés de son choix
et apprend si leurs dernier octet de padding est valide.
• On suppose (pour l’exemple) que l’attaquant à le texte
chiffré C = (C[0], C[1], C[2]) et veut obtenir M[1]:
IV c[0] c[1] c[2]

D(k,) D(k,) D(k,)


  
m[0] m[1] m[2] ll pad
Padding Oracle Attack sur TLS/SSL
• L’attaquant envoi des blocs chiffrés modifier
C=(IV,C’[0],C[1]) construits comme suit :
• L’attaquant fait un choix « g » du dernier octet du bloc M[1],
ensuit il construit C’[0]=C[0]⨁g⨁0x01 (0x01 est un pad
valide).

IV c[0] c[1]
⨁ g ⨁ 0x01

D(k,) D(k,)
= last-byte ⨁ g ⨁ 0x01
 
if last-byte = g: “valid pad”
m[0] m[1] otherwise: “invalid pad”

• En essayant les valeurs de 0…255 de « g » l’attaquant


apprend la dernière valeur de M[1] en maximum 256
itération !.
Padding Oracle Attack sur TLS/SSL
• De la même manière, l’attaquant peut apprendre l’avant
dernier octet de M[1] en utilisant un padding de (0x02 ,
0x02): il à déjà la valeur du dernier octet, il suffit de faire un
teste avec les valeurs de « g » sur l’avant dernier en
envoyant C=(IV,C’[0],C[1]) avec les deux derniers octets de
C[0] combinées en xor avec (g⨁0x02 ,g0⨁0x02), avec g0
égale a la valeur découverte dans la première étape.
• Le même principe permettra de découvrir tout les octets de
M[1] : en utilisant (0x02,0x02) ensuite (0x03,0x03,0x03)
ensuit (0x04,0x04,0x04,0x04) ……..
• Le remède à cette attaque :
Ne jamais renvoyer un message d’erreur indiquant un
mauvais padding !

Malheureusement même ce remède n’est pas suffisant : timing


padding oracle attack !
Padding Oracle Attack sur TLS/SSL
• Une vulnérabilité dans TLS v 1.0: le temps d’exécution
quand le padding est invalide est inférieur au temps
d’exécution quand le pad est valide mais les MAC ne l’est
pas (exécution supplémentaire du MAC) !

Pad invalide Pad valide


mais MAC
invalide

• Solutions :
– Utiliser Encrypt-then-MAC :le MAC est toujours calculer …
– Utiliser CTR : pas besoins de faire un padding …
Attaque sur SSH: faiblesses de Encrypt-
and-MAC
• SSH utilise Encrypt-and-MAC. Une attaque sur le
déchiffrement est possible: Non-Atomic decryption attack.
CBC encryption (chained IV)
seq. packet pad MAC
payload pad
num. len. len. tag

32 bit
MAC computed
SSH Binary Packet Protocol over plaintext

• Le déchiffrement ce fait comme suit :


1. Le récepteur déchiffre la longueur seulement !
2. Il lit le nombre d’octets définie par la longueur
3. Il déchiffre le paquet lue
4. Il vérifie le MAC et renvoi une erreur s’il est invalide.
Attaque sur SSH: non-atomic decryption
• Cette manière de déchiffrement permet une attaque ! : l’attaquant
veut déchiffré un seul bloc « C »:
1. Il envoi ce bloc comme le premier d’un paquet.
2. Le serveur déchiffre les premier 32 bits et les utilise comme longueur et
continue la lecture du paquet.
3. L’attaquant envoi le reste octet par octet, quand le serveur lie le nombre
spécifier par la longueur il calcule le MAC est renvoi une erreur !,
4. L’attaquant peut donc savoir quel est l’exacte valeur de la longueur (les
premiers 32bit de C).
one AES block
seq.
num.
c
k
decrypt
and obtain
len “len” field

send bytes one at a time

when “len” bytes read:


server sends “MAC error”
attacker learns 32 LSB bits of m !!
Conclusions
• Le chiffrement authentifié (AE) est nécessaire pour assuré la
sécurité contre les attaques actives (CCA-Security).
• Le mode le plus sûre est Encrypt-then-MAC. Les deux autres
sont vulnérables : MAC-then-Encrypt est vulnérable à
l’attaque « Padding Oracle » et Encrypt-and-MAC est
vulnérable à l’attaque «non-atomic decryption »
• Ne jamais concevoir sont propre mode de chiffrement !
• La sécurité repose plus sur la manière de composer les outils
de chiffrement que sur les outils eux-mêmes !
• Le chiffrement authentifié combine tout les outils de la
cryptographie symétrique (Encryption, Hash, MACs….), mais
suppose que la clé de chiffrement est déjà partagée
secrètement entre les deux entités communicants. Ceci
constitue un autre problème de la cryptographie : partage et
échange de clés ………