Chapitre 1: Chiffrement Symétrique: par flot et par blocs.
Transcript of Chapitre 1: Chiffrement Symétrique: par flot et par blocs.
Chapitre 1:
Chiffrement Symétrique:
par flot et par blocs.
Par FARAOUN Kamel Mohamed
• Les systèmes de chiffrement à clé privé (crypto-
systèmes symétrique), sont utilisés depuis déjà
plusieurs siècles. C'est l'approche la plus
authentique du chiffrement de données et
mathématiquement la moins problématique.
• Dans ce type de système, la clé servant à chiffrer
les données peut être facilement déterminée si l'on
connaît la clé servant à déchiffrer et vis-versa. Dans
la plupart des systèmes symétriques, la clé de
chiffrement est la même que la clé de
déchiffrement.
Introduction
• L’échange de la clé doit se faire sur un canal
sécurisé. La sécurité repose totalement sur la
confidentialité de la clé.
Chiffrement Internet DéchiffrementVoici lenumérode ma
carte decrédit
111111,
♠♣◊€£
¥₪Ω٭
Texte clair
Clé01010000111
Clé01010000111
Emetteur Récepteur
Voici lenumérode ma
carte decrédit
111111,
Texte clair
Texte crypté
KC=KD
3
Chiffrement symétrique
Deux catégories existent dans le cadre du
chiffrement symétrique :
1. Chiffrement par flot (Stream ciphering):
Les données en claires sont considérées comme
un flot de bits (octets) et chiffrées ensembles….
2. Chiffrement par blocs (Block ciphering):
Les données en claire sont considérées block par
block (de taille fixe). Les blocks sont ensuite
chiffrés selon un mode opératoire spécifique
(généralement plus sécurisé que le chiffrement
par flot!)
Chiffrement symétrique
• Pour un algorithme de chiffrement
symétrique, la clé est de taille fixe (ex. 256
bit). Les messages en claire et les messages
chiffrées sont de longueurs arbitraires.
• Ainsi on définie :
– L’ensemble K de tout les clés possibles
K=0,1L (ex. L=256)
– L’ensemble M de tout les messages en claire
M=0,1*
– L’ensemble C de tout les messages chiffrées
C=0,1*
Chiffrement symétrique
• Un algorithme de chiffrement symétrique est
définie par deux fonctions E et D (un couple
(E,D)), tel que :
E : KxMC
(k,m)C=E(k,m)=Ek(m)
D: KxC M
(k,c) M=D(k,c)=Dk(c)
mM, kK : D(k,E(k,m))=m
E : peut être aléatoire , mais D doit être
déterministe
Chiffrement symétrique
• L’algorithme de chiffrement symétrique le plus
simple est le : OTP(One-Time-Pad). On l’appel
aussi chiffrement de Vernam (1971).
• Le message en claire est une chaine de bits
(mM=0,1*), le message chiffré est aussi une
chaine de bits (cC=M=0,1*).
• La clé de chiffrement n’est d’autre qu’un
message binaire arbitraire de même longueur
que le message en claire (kK=C=M=0,1*),
avec l(k)=l(m).
One Time Pad
• Le chiffrement : E(k,m)=km;
le déchiffrement : D(k,c)=k c.
• On peut facilement vérifier que:
D(k,c)=D(k,E(k,m))= k E(k,m)= kkm=m !
One Time Pad
• Est-ce que le OTP est sécurisé? (Un adversaire
qui observe seulement!):
« Sécurité contre une attaque à texte chiffré
seulement :l’attaquant ne dispose que du texte
chiffré et veut déduire le texte en claire ou la
clé »
• Selon Shannon: le texte chiffré ne doit
véhiculer aucune information sur le texte en
claire. (Sécurité parfaite par rapport à la
théorie de l’information).
One Time Pad
• Pour deux message m0 et m1, un attaquant qui
à le texte chiffré ne peut déterminé si c’est le
chiffrement de m0 ou bien de m1.
• Le One Time Pad possède une sécurité parfaite
(dans le sens de la THI).
Définition: Un crypto-système (E,D) sur (K,M,C) à
une sécurité parfaite ssi:
∀m0, m1 ∈M ( |m0| = |m1| ) et ∀c∈C
Pr[ E(k,m0)=c ] = Pr[ E(k,m1)=c ]
avec k ⟵K (choisie uniformément)
Sécurité parfaite du OTP
Preuve : (M=C=K= 0,1L)
m,c 0,1L, k 0,1L : c=Ek(m)= km
k=cm
k est unique
Donc : |k 0,1L tel que c= km|=1
(nombre de clé possibles pour un couple (c ,m))
Ainsi :
∀m∈M, ∀c∈C: Pr(Ek(m)=c)=
=|k 0,1l tel que c= km|/|K|
=1/|K| (const.)
Donc : ∀m0, m1 ∈M (|m0|=|m1|):
Pr(E(k,m0)=c)= Pr(E(k,m1)=c)=1/|K|
Donc le OTP est donc parfaitement sécurisé.
Sécurité parfaite du OTP
• Inconvénients : Taille de clé même que celle du
message (|K||M|): c’est pas pratique. En
plus, la même clé ne doit être utilisée qu’une
seul fois (One Time !)
• La sécurité de Vernam repose sur le théorème
suivant:
Théorème: Un flux de distribution uniforme
combiné par un Xor avec un flux de
distribution quelconque produit toujours un
flux de distribution uniforme.
One Time Pad
Preuve (pour n=1):
• P(X=0)=P(X=1)=1/2 ;
• P(Y=0)=p1 et P(y=1)=p2.
Selon la table du Xor :
Z=0 ssi: (X=0 et Y=0)
ou(X=1 et Y=1),
donc :
P(Z=0) = (P(X=0)*P(Y=0) )+(P(X=1)*P(Y=1))
=p1/2+p2/2
=(p1+p2)/2 = ½
Ainsi :
P(Z=0)=P(Z=1)= ½ , (Z est donc uniforme)
One Time Pad
• Le OTP n’est pas du tout pratique : taille de la
clé et nombre de clés ne peuvent être pris en
charge par une application pratique surtout
dans un environnement multiutilisateur et
temps réel tel Internet.
• La solution à ce problème est d’utiliser un
Keystreams Pseudo-aléatoire : a partir d’une
information de taille fixe (une clé), une suite
pseudo aléatoire est génère et servira comme
keystream (un flot aléatoire).
One Time Pad
Ensemble de clés
sur une taille fixe
l ex. 128 bit 2128
possibilités
Ensemble de tout les
Keystream possible
sur n bit : n>>l de
cardinalité 2n
Ensemble de clés
possibles
Ensemble de
Keystream possibles
One Time Pad
• Le chiffrement par flot: est une adaptation
pratique du OTP: Taille de la clé raisonnable
et utilisable !
• Malheureusement le chiffrement par flot n’est
pas parfaitement sécurisé (nombre de clés
inférieur au nombre de messages possibles).
• Pour généré des keystreams , on utilise des
PRNG (Pseudo Random Number Generators).
• A partir d’une information de taille fixe (la clé
/seed), on génère un flot de taille arbitraire
(selon la taille du message en claire).
Chiffrement par flot
• L’algorithme de génération doit être
déterministe: la même clé génère toujours la
même séquence.
• Deux catégories de PRNG existes :
– PRNG classique: non utilisé en
cryptographie (non sécurisé);
– PRNG cryptographique :hautement sécurisé.
• Puisqu’un chiffrement par flot n’est pas
parfaitement sécurisé comme le OTP, une
autre définition de la sécurité s’impose : « La
Prédictibilité ».
Chiffrement par flot
• Un PRNG est sécurisé s’il est imprédictible !
• Définition : soit le générateur G:K0,1n un
générateur de séquence PRNG.
G est prédictible ssi:
un algorithme efficace A, et 0 i n-1, tel
que :
Adv(A,G)=PA(G(k)[0],…G(k)[i])=G(k)[i+1] > ½ +
avec non négligeable (>1/230).
Théorème (Yao’82): si ∀ i ∈ 0, … , n-1, un
PRNG G est imprédictible à la position i, alors G
est sécurisé .
Sécurité d’un PRNG
• Généralement il n’existe pas de moyennes
formelles de test d’imprédictibilité d’un PRNG.
• En pratique, on utilise des testes statistiques
qui permettes de tester le degré de l’aléatoire
d’une séquence (keystream):
– Distribution uniforme
– Nombre de séquence répétitives
– …….
• Un teste statistique A donne en sortie 1 si la
séquence est aléatoire (selon le test) sinon 0.
Sécurité d’un PRNG
• Les testes statistiques ne sont pas suffisants
pour prouver qu’une séquence est pseudo-
aléatoire :non différentiable (indistinguishable)
d’une séquence vraiment aléatoire.
• Pour qu’une séquence soit pseudo-aléatoire il
faut que le résultat de tout les testes
statistiques soit 0.
Pour tout teste efficace A,
Adv(A,G)=|P(A(G(k))=1)-P(A(r)=1)| < (avec
négligeable ).
Est-ce qu’on connait tout les testes statistiques
possibles …..????
Sécurité d’un PRNG
• Par contre, il suffit qu’un seul teste répond
par 1 pour que la séquence ne soit pas
considérée pseudo-aléatoire.
• En pratique, il existe des PRNG qui passent
avec sucées les testes statistiques connues.
Ceux-ci sont considéré comme des PRNG
cryptographiques sûres.
• D’autres PRNG sont faibles (échoues pour
certains testes ), donc ne doivent jamais être
utilisées pour des opérations de chiffrement !,
par exemples : les générateurs inclus dans les
compilateurs des différents langages de
programmation….
Sécurité d’un PRNG
Exemples de PRNG :
Congruences linéaires
• Utilisés dans la majorité
des langages de
programmation.
• Très faibles et prédictibles;
à ne pas utilisés
• Exemple : glibc random()
(faille grave dans Kerberos
V4).
• Réservé à tout autre
utilisation non
cryptographique.
Exemples de PRNG:
Chiffrement par flot RC4 (1987)
2048bits
seed
1 byteper round
40bits
• Longueur du IV : 24bit ;
• Le IV est répété après chaque 224 bloc =16Mo ;
• Dans certains cartes 802.11: remise à 0 du IV
après reset !
Chiffrement par flot RC4: Exemple
réel
Exemples de PRNG:
Chiffrement par flot RC4 (1987)
• Il est largement utilisé : WEP, WPA, SSL/TLS,
Oracle SQL, ...
• Faiblesses :1. Biais dans le premier octet en sortie : Pr[ 2nd byte = 0 ]
= 2/256
2. Probabilité d’avoir (0,0) est 1/2562 + 1/2563
3. Related key attacks……
• Actuellement n’est plus conseiller : possibilité
de reconstruire la clé complète à partir
seulement de 40000 IV différent.
• Retiré du standard TLS depuis 2015.
Exemples de PRNG:Chiffrement LFSR
• Exemple : registre sur 16 bits
• Cet algorithme n’est plus fiable. Une attaque
développé par Berlekamp et Massey permet de
trouver la clé à partir d’une suite finie de bits
que l’on génère.
• Améliorations: on utilise plusieurs registres
avec filtrage (Algorithme A5 utilisé par les
réseaux GSM européens).
• LSFR à été utilisé dans plusieurs système
(hardaware):
Chiffrement des DVD (CSS): 2 LFSRs
Chiffrement GSM (A5 /1,2): 3 LFSRs
Bluetooth (E0):4 LFSRs
• Tous ces systèmes ont été cassés !
• Exemple : CSS utilise une clé de 40 bit =
5bytes
Exemples de PRNG:: LFSR -CSS
• On peut cassé CSS en 217 opération seulement !
• Pour tout les 217 valeurs possible faire:
1. Initialiser la configuration du 1ièr registre;
2. Généré 20 octet avec cette configuration;
3. Soustraire ce résultat su préfix CSS obtenu,
le résultat définie les 25 bit du deuxième
registre s’il s’agit d’une configuration
produite par un LFSR !!!.
20 octet
20 octet
Exemples de PRNG:: LFSR -CSS
Exemples de PRNG:: LFSR -Trivium
• Clé sur 80bit et IV sur 80bit. Peut générer
jusqu’à 264 bit de flot.
• Aucune attaque jusqu’à aujourd’hui!
Salsa20: 0,1 128 or 256 × 0,164 ⟶ 0,1n (max n = 273 bits)
Salsa20( k ; r) := H( k, (r, 0))H( k , (r, 1))…
h: fonction inversible. Rapide sur les CPU x86 (SSE2)
http://www.ecrypt.eu.org/stream/salsa20.html
Exemples de PRNG: Salsa 20nonce
τ0
kτ1
ri
τ2
kτ3 64 bytes
kri
32 bytes
64 byteoutput⊕h
(10 rounds)
64 bytes
Attaques sur le chiffrement par flot / OTP
• La clé ne doit jamais être utilisé deux fois :
C1 m1 PRG(k)
C2 m2 PRG(k)
On peut facilement calculer :C1C2=m1m2 .
Avec un calcul simple (a cause de la
redondance de la langue):m1m2 m1 , m2
Ex. MS-PPTP (windows NT):
k k
• Les modifications sur le texte chiffré sont
facilement détectable :
Attaques sur le chiffrement par flot / OTP
Les modifications sur le texte chiffré sont
indétectable et leurs résultat est facilement
prévisible !
Le mode de chiffrement par flot est malléable !:
Attaques sur le chiffrement par flot / OTP
menc ( ⊕k )
m⊕k
dec ( ⊕k )m⊕p
p
(m⊕k)⊕p
⊕
Attaques sur le chiffrement par flot / OTP
From: Bobenc ( ⊕k )
From: Bob
⋯
From: Evedec ( ⊕k )
From: Eve
⊕
Ne jamais utiliser un chiffrement par flot s’il
n’ya pas en plus un mécanisme de contrôle
d’intégrité !
Sécurité Sémantique
• Le OTP est parfaitement sécurisé;
• Le chiffrement par flot ne l’est pas (Taille des clés);
• Nous avons besoin d’une nouvelle définition de la
sécurité plus pratique et réaliste :Sécurité
Sémantique.
• Cette notion est utilisée pour prouver la sécurité
des algorithmes/protocoles de chiffrement dans
certains conditions :
1. Le cas d’un attaquant qui observe seulement:
CPA-Security
2. Le cas d’un attaquant sui peut modifier :CCA-
Security
Sécurité SémantiqueSoit (E,D) un crypto-système sur (K,M,C)
(E,D) est parfaitement sécurisé ssi:
∀ m0, m1 ∈ M ( |m0| = |m1| )
E(k,m0) = E(k,m1) avec k⟵K
On peut allégé la contrainte par :
E(k,m0) ≈p E(k,m1) (pas vraiment pratique)
Pour être plus pratique, on impose une contrainte
sur m0 et m1: ils doivent être explicitement choisies
par un adversaire:
(E,D) est sémantiquement sécurisé ssi:
Pour tout m0, m1 choisies par un adversaire
(|m0|= |m1|): E(k,m0) ≈p E(k,m1) avec k⟵K
Sécurité Sémantique (One time
key)
• L’adversaire soumis deux messages en claire m0 et
m1 au challenger.
• Le challenger choisie une clé aléatoire K et réalise
l’une des deux expériences EXP(0) ou EXP(1):
dans EXP(0) il chiffre m0 avec K et renvoi le
résultat à l’adversaire, dans EXP(1) il chiffre m1
avec K et renvoi le résultat à l’adversaire.
• L’adversaire donne en sortie une valeur (prédite)
de b qui b’0,1 pour dire s’il à reçu le
chiffrement de m0 ou de m1: il doit être incapable
de faire la différence !
Pour b=0,1 on définir deux expériences EXP(0) et
EXP(1) tel que :
pour b=0,1: Wb := [ événement EXP(b)=1]
AdvSS[A,E] := | Pr[ W0 ] − Pr[ W1 ] | ∈ [0,1]
Chal.
b
Adv. A
kKm0 , m1 M : |m0| = |m1|
c E(k, mb)
b’ 0,1
Sécurité Sémantique (One time
key)
Sécurité Sémantique (One time
key)
Définition (sécurité sémantique pour un chiffrement qui ce
fait toujours avec la même clé ):
Un crypto système E est sémantiquement sécurisé si
pour tout adversaire efficace A:
AdvSS[A,E] est négligeable (<).
Cette définition implique que pour tout m0 , m1 M
explicites :
E(k,m0) ≈p E(k,m1)
Exemple• On suppose un crypto système E, pour lequel il existe
un adversaire A qui peut toujours trouver le bit de
poids faible (LSB) du texte en claire à partir seulement
du texte chiffré. On montre que E n’est pas
sémantiquement sécurisé:
Adv. B (us)Chal.
b0,1
Adv. A(given)
kKC E(k, mb)
m0, LSB(m0)=0
m1, LSB(m1)=1
C
LSB(mb)=b
Alors :
AdvSS[B, E] =|Pr[ EXP(0)=1 ] −Pr[ EXP(1)=1 ] |=|0 – 1|=1
Pour tout A:
AdvSS[A,OTP] = | Pr[ A(k⊕m0)=1 ] − Pr[ A(k⊕m1)=1 ] |= 0
Même distribution
Chal. Adv. A
kK
m0 , m1 M : |m0| = |m1|
c k⊕m0 b’ 0,1
EXP(0):
Chal. Adv. A
kK
m0 , m1 M : |m0| = |m1|
c k⊕m1 b’ 0,1
EXP(1):
Exemple: OTP• On montre que le OTP est sémantiquement sécurisé :
Sécurité sémantique du
chiffrement par flot• Le chiffrement par flot est sémantiquement sécurisé si
le générateur utilisé est sécurisé (imprédictible !).
Théorème : G:K ⟶0,1n
est un PRG sécurisé
Le chiffrement par flot E utilisent G est sémantiquement
sécurisé.
La démonstration se fait par contraposé: il suffit de
montré que :
∀ A un adversaire sémantiquement sécurisé, ∃ un
adversaire B pour le PRG tel que :
AdvSS[A,E] ≤ 2 ∙ AdvPRG[B,G]
Preuve par intuition
chal. adv. A
kK
m0 , m1
c m0⊕ G(k)
b’≟1
chal. adv. A
kK
m0 , m1
c m1⊕ G(k)
b’≟1
≈p
≈p
≈p
chal. adv. A
r0,1n
m0 , m1
c m0⊕ r
b’≟1
chal. adv. A
r0,1n
m0 , m1
c m1⊕ r
b’≟1
• Un message est décomposer en blocs avant
d’être chiffré. Les blocs obtenus sont
rassemblés pour construire le message chiffré.
Chiffrement par blocs
E, D CT Block
n bits
PT Block
n bits
Key k bits
Examples:
3DES: n= 64 bits, k = 168 bits
AES: n=128 bits, k = 128, 192, 256 bits
• Un réseau de Feistel est une construction utilisée dans
les algorithmes de chiffrement par bloc, nommée d'après
le cryptologue d'IBM, Horst Feistel. Elle a été utilisée
pour la première fois dans Lucifer et DES.
• Avantages:
1. Le chiffrement et le déchiffrement ont une architecture
similaire voire identique dans certains cas.
2. L'implémentation matérielle est aussi plus facile avec un
tel système.
Avec des fonctions qui ne sont inversible :
f1, …, fd: 0,1n ⟶ 0,1n,
Construire une fonction inversible :
F: 0,12n ⟶ 0,12n
Réseaux de Feistel
Réseaux de Feistel
input output
Rd-1
Ld-1
Rd
Ld
R0
L0
n-b
itsn
-bits
R1
L1
⊕
f1
R2
L2
⊕
f2 ⋯
⊕
fd
Ri-1Li-1
⊕
fi
RiLi
Li=Ri-1
Ri= Li-1f(Ri-1,Ki)
Le chiffrement se fait selon la séquence:
L0R0L1R1……………….. LnRn
Réseaux de Feistel
Pour tout ensemble de fonctions
f1, …, fd: 0,1n ⟶ 0,1n
Le réseaux de Feistel définie par
F: 0,12n ⟶ 0,12n est inversible
Preuve: construction de l’inverse:
Ri-1
Li-1
Ri
Li
⊕
fi
inverseRi
Li
Ri-1
Li-1
⊕
fi
Dans le cadre d’un algorithme de chiffrement, la clé est
un paramètre de chaque fonction fi. (une sous-clé).
• La taille de chaque Bloc Li et Ri est généralement de
32 bits dans le standard (32+32=64 bits)
• La taille de chaque clé Ki et de 48 bits; les clés Ki
sont extraites de la clé initiale K de taille 64 bits.
• Les schémas de Feistel ont été largement analysés et
examinés par les experts. Plusieurs attaques sont
possibles mais les deux principales sont : la
cryptanalyse linéaire et la cryptanalyse différentielle.
• Ces méthodes ont fait leur preuve sur DES et sur
d'autres algorithmes. Mais cela ne signifie pas que
l'utilisation d'un réseau de Feistel va obligatoirement
entraîner des vulnérabilités significatives.
Réseaux de Feistel
• Les structures de Feistel sont théoriquement basées
sur deux notions importantes :
1. Les fonctions pseudo-aléatoires: PRF (Pseudo-
random functions).
2. Les permutations pseudo-aléatoires: PRP (Pseudo-
random permutations).
• Une PRF est définie sur (K,X,Y):
F: K X Y
tel qu’il existe un algorithme efficace pour le calcule
de F(k,x), son inversion n’est pas nécessairement
possible.
PRF et PRP
• Une PRP est définie sur (K,X):
E: K X X
tel que :
1. Il exist un algorithme déterministe pour l’évaluation de
E(k,x)
2. La fonction E( k, ) est un-à-un (bijective)
3. Il existe un algorithme efficace d’inversion D(k,y)
Contrairement à une PRF, une PRP doit
obligatoirement être inversible (Une PRP est une
PRF mais pas l’inverse)
PRF et PRP
• Une PRF est sécurisé, si ça sortie ne peut être
distinguer de celle d’une fonction aléatoire:
• Déf: F est une PRF sécurisé si pour tout algorithme
“efficace ” A:
AdvPRF[A,F] = |Pr[EXP(0)=1] – Pr[EXP(1)=1] |est
négligeable
Sécurité des PRF
Chal.
b
Adv. Ab=0: kK, f F(k,)
b=1: fFuns[X,Y] x1 X
f(x1)
b’ 0,1
f, …, xq
, …, f(xq)
, x2
, f(x2)
EXP(b)
• Une PRP est sécurisé, si ça sortie ne peut être
discriminer de celle d’une permutation aléatoire:
• Déf: F est une PRP sécurisé si pour tout algorithme
“efficace ” A:
AdvPRP[A,F] = |Pr[EXP(0)=1] – Pr[EXP(1)=1] |est
négligeable
Sécurité des PRP
Chal.
b
Adv. Ab=0: kK, f E(k,)
b=1: fPerms[X] x1 X
f(x1)
b’ 0,1
f, x2, …, xq
, f(x2), …, f(xq)
• Un algorithme de chiffrement par bloc n’est rein
d’autre qu’une PRP:
– AES : une PRP sur (0,1128,0,1128) vers 0,1128
– DES :une PRP sur (0,156,0,164) vers 0,164
– 3DES: une PRP sur (0,1112,0,164) vers 0,164
• Une PRF n’est pas inversible, elle ne peut être
utilisée directement pour le chiffrement, mais elle
peut l’être en utilisant deux constructions :
– Les réseaux de Feistel
– Le mode opératoire CTR (a voir plus loin)
PRF et PRP
Théorème: (Luby-Rackoff ‘85):
Soit f: K × 0,1n ⟶ 0,1n une PRF sécurisé,
alors avec 3 round Feistel on obtient:
F: K3 × 0,12n ⟶ 0,12n une PRP sécurisé
R3
L3
R0
L0
input
R1
L1
⊕
fR2
L2
⊕
f
⊕
f
output
PRF dans les réseaux de Feistel
• DES est l’un des premiers algorithmes de
chiffrement par bloc.
• L’information à chiffrer est à découper en blocs de
tailles identiques (64bit dans le standard).
• Les blocs sont chiffrés les uns après les autres en
utilisant la même clé.
• La clé de DES est sur 64 bits dont 8 servent à
vérifier l’intégrité de la clé: 56bit utilisés
réellement.
• Le principe de fonctionnement de DES est basé
sur le mécanisme des Réseaux de Feistel.
• La version standard du DES utilise un réseau de
Feistel de 16 rounds pour le cryptage et le
décryptage.
Exemple d’une PRP:DES
• L’algorithme DES agit en trois étapes :
1. Les 64 bits m en entrée sont transformés selon
une permutation fixe pour obtenir m0=IP(m), m0
est ensuite divisé en deux parties L et R de taille
32 bits chacune tel que m0=L0R0
2. Pour i=1..16 faire : Li=Ri-1 et Ri= Li-1f(Ri-1,Ki)
3. Inverser le résultat final m16=L16R16 pour obtenir
R16L16, ensuite la permutation initiale est
appliquée dans le sens inverse pour obtenir C=IP-
1(R16L16)
Exemple d’une PRP:DES
Exemple d’une PRP:DESPlaintext
IP
L0 R0
f
K1
L1 R1
L16 R16
Ciphertext
IP-1
Ri-1
Li-1
Transformed
Key Ki
Permutations
and substitution
f
XOR
Li
Ri
Les étapes d’un tour de chiffrement
Exemple d’une PRP:DES
Ri-1
Expander
E(Ri-1)
Ki
B1 B2 B3 B4 B5 B6 B7 B8
S1 S2 S3 S4 S5 S6 S7 S8
C1 C2 C3 C4 C5 C6 C7 C8
Permutation
f(Ri-1, Ki)
Blocs de 6 bits
S-Boxes
Blocs de 4 bits
Exemple d’une PRP:DES
• DES présente quelques faiblesses : Taille des clefs :
56 bits Vulnérabilité devant la recherche
exhaustive.
• Une des solution est d’utilisé 3DES:
• Enchaînant 3 applications successives de l'algorithme
DES sur le même bloc de données de 64 bits, avec 2
ou 3 clés DES différentes. Plusieurs approches
permettent de combiner DES 3 fois.
• La version adoptée (de Tuchman) utilise un
chiffrement, suivi d'un déchiffrement pour se conclure
à nouveau par un chiffrement (mode EDE :Encryption-
Decryption-Encryption).
Exemple d’une PRP:3DES
Exemple d’une PRP:3DES
• Le 3DES est: Plus sécurisé mais trois fois plus lent.
La taille des blocs est limitée à 64 bits Nécessité
de trouver un remplaçant .
• Une construction plus optimale permet de rendre
DES plus sécurisé avec les même performances
(même temps de calcule), il s’agit de DESX.
• Proposé par Ron Rivest en 1984.
DESXK(M)=K1EK2(M K3) avec K=K1||K2||K3.
• Taille de la clé =64+56+64=184 bit !
• Meilleur attaque connue de l’ordre de 264+256=2120.
• Sachez que K1 EK2(M) et EK2(M K1) ont un
niveau de sécurité exactement égale à EK2(M) !!!!
• Cette approche peut être utilisé avec tout PRP:
construction d’Evan-Mansour.
Une autre solution pour DES:
DESX
inp
ut
⨁
S1
S2
S3
S8
⋯
ou
tpu
t
subs.layer
perm.layer inversion
k1
⨁
S1
S2
S3
S8
⋯
k2S1
S2
S3
S8
⋯
⨁⋯
kn
Exemple d’une PRP:AES
• Tailles de clés: 128, 192, 256 bits. Taille de blocks : 128 bits
• Standard depuis l’an 2000, d’origines Belges (Rijndael)
Exemple d’une PRP:AES
input
4
4
10 rounds
(1) ByteSub(2) ShiftRow(3) MixColumn
⨁
k2
⋯
k9
⨁
(1) ByteSub(2) ShiftRow(3) MixColumn
⨁
k1
⨁
k0
(1) ByteSub(2) ShiftRow
output
4
4
⨁
k10
key
16 bytes
key expansion:
invertible
16 bytes ⟶176 bytes
ByteSub: une S-Box pour un octet (Table de 256 octet). Il
s’agit simplement de l’inverse modulaire dans le corps de Galois,
Exemple d’une PRP:AES
• ShiftRows:
• MixColumns:
Meilleur attaque connue sur AES256(Bogdanov et
Khovratovich): de l’ordre de 2254 !!!
Modes opératoires
• Les standard connues tel AES,3DES,CAST… sont
suffisamment sécurisé comme PRP, il n’est pas
nécessaire (à ce stade) de se préoccuper de leurs
fonctionnement interne!
• L’essentiel par contre est de savoir les utilisés d’une
manière correcte et sécurisé !
• L’objectif : construire des crypto-système sécurisé
pour des données de tailles arbitraires en utilisant
des PRP sécurisés.
• Dans la suite on considère (pour l’instant!) que
l’attaquant n’a accès qu’au texte chiffré, et que la clé
n’est utilisée qu’une seul fois !
• L’attaquant cherche à cassé la sécurité sémantique
du crypto-système.
Modes opératoires: ECB (OTK)
• La plus mauvaise manière d’utiliser une PRP:
Electronic Code Book (ECB) mode.
si mi=mj alors ci=cj
c1
m2 m3
c2 c3
m1
Modes opératoires: ECB (OTK)
• Image « Cervin » chiffrée (AES-256 mode ECB)!
Originale avec ECB Autre mode
Modes opératoires: ECB (OTK)• Le mode ECB n’est pas sémantiquement sécurisé !
AdvSS[A, ECB] =
|Pr[ EXP(0)=1 ] −Pr[ EXP(1)=1 ] |=1
Modes opératoires: CTR (OTK)• Un meilleur mode :le mode CTR déterministe. Utilise
une PRF (ou PRP) pour simuler un chiffrement par
flot!: F : K x 0,1n0,1n
• Le mode CTR déterministe est sémantiquement
sécurisé (Emulation d’un chiffrement par flot en
utilisant une PRP),
Modes opératoires: CTR (OTK)
• Théorème (ROGAWAY’89):
Pour tout valeur entière L>0, si F est une PRF
sécurisé sur (K,X,X), alors Edetctr est
sémantiquement sécurisé sur (K,XL,XL).
En particulier, pour tout adversaire A contre Edetctr,
il existe un adversaire efficace B contre la PRF F tel
que:
AdvSS[A,Edeter]=2*AdvPRF[B,F]
Négligeable Négligeable
Preuve par intuition
Utiliser la clé plusieurs fois (MTK)
• Si la même clé est utiliser plusieurs fois, un
attaquant peut accéder à plusieurs texte chiffré avec
la même clé !: la définition de la sécurité sémantique
doit changée.
• Dans ce cas on considère que :
1. L’attaquant peut soumettre plusieurs texte en
claire et obtenir leurs version chiffré (Choosen-
Plaintext-Attack CPA)
2. L’attaquant veut casser la sécurité sémantique
du crypto-système.
Utiliser la clé plusieurs fois (MTK)
Utiliser la clé plusieurs fois (MTK)Pour b=0,1 on définit deux expériences EXP(0) et EXP(1)
tel que :
Si l’adversaire veut le chiffrement de m, il peut soumettre
m=mi,0=mi,1.
Un crypto-système (E,D) est sémantiquement CPA-Secure
si pour tout adversaire A:
AdvCPA[A,E] := | Pr[ EXP(0)=1 ] − Pr[ EXP(1)=1 ] |
est négligeable.
Utiliser la clé plusieurs fois (MTK)• Si la même clé est toujours utilisée, un attaquant
peut toujours casser la sécurité sémantique !:
• L’attaquant peut savoir si deux fichiers, deux
paquets ou deux enregistrements chiffrées sont
identiques.
• En pratique, ceci peut conduire à des attaques
significatives !, surtout quand la taille du message
M est relativement petite.
Solution 1: Chiffrement Probabiliste
Randomized Encryption• L’algorithme de chiffrement E(k,m) doit être une
fonction aléatoire (initialement proposé par Chafi
Goldwasser):
• Le même message chiffré deux fois donnera un message
chiffrer différent :la taille du message chiffré est
obligatoirement supérieur à celle du message en claire.
|Ci|=|mi|+#random_bits
Exemple :Randomized Encryption
• Soit F :K x RM une PRF sémantiquement
sécurisé.
• Pour un message mM, on définie E(k,m) par:
E(k,m)=rR; C=(r , F(k,r)m)
Est-ce que E est CPA-Sémantiquement sécurisé ?
• Oui mais seulement si R est suffisamment grande
pour que r ne ce répète jamais ! Sinon un
attaquant parviendra toujours à brisé la sécurité
sémantique.
Chal.
bAdv. A
kK
m0 , m0 M
c0 r0,F(k,r0)⊕m0
ri0,1nm0 , m0 M
c1 r1,F(k,r1)⊕m0
m0 , m0 M
cn rn,F(k,rn)⊕m0
m0 , m1 M
cb ri,F(k,ri)⊕mb
ri F(k,ri)
r0
r1
r2
…
rn
F(k,r1)
F(k,r2)
F(k,r3)
…
F(k,rn)
• Chercher F(k,ri)• Déchiffré Cb en mb
• Output 0 si mb=m0
Exemple :Randomized Encryption
Solution 2: nonce-basedEncryption
• Nonce : number used once. Une valeur qui change
d’un message à un autre. Généralement il s’agit
d’un compteur.
• Si les deux parties sont synchroniser, pas besoin
de transmettre la valeur de n.
• La valeur de n ne doit jamais être réutilisée.
Sécurité sémantique: nonce-basedEncryption
Un crypto-système (E,D) utilisant les nonces est
sémantiquement CPA-Secure si pour tout adversaire A:
AdvCPA[A,E] := | Pr[ EXP(0)=1 ] − Pr[ EXP(1)=1 ] |
est négligeable.
Exemple :nonce-based Encryption
• Soit F :K x RM une PRF sécurisé. Soit r un
compteur initialisé à 0. Alors le schéma de
chiffrement définie par :
mM , E(k,m)=r++, C=(r,E(k,r)m)
Est CPA-sémantiquement sécurisé, à condition que r
ne soit jamais réutilisé!
• Le chiffrement basé sur les nonce est utilisée quand
les deux parties sont « synchrones » (ex. le protocole
https, l’ordre des messages est le même des deux
cotées).
• Par contre le chiffrement aléatoires est utilisée quand
les deux sont «asynchrones» (ex. le protocole IPsec,
l’ordre des paquets n’est pas le même)
Modes opératoires: CBC (MTK)
• Soit (E,D) une PRP sémantiquement sécurisé. On
définie le mode opératoire CBC par ECBC(k,m), le
vecteur IV est choisie aléatoirement!
E: K x 0,1n0,1n, IV0,1n
• Si c[0]=E(k,IVm[0]) alors : m[0]=IVD(k,c[0])
• Le vecteur IV est transmis en claire avec le message
chiffré la taille du message chiffré augment.
• Un IV n’est jamais réutilisé, et ne doit même pas être
prédictible !
Modes opératoires: CBC (MTK)
Sécurité sémantique du CBC
Théorème (Bellar,Rogaway’11):
Pour tout valeur L>0, si E est une PRP sémantiquement
sécurisé sur (K,X,X), alors ECBC est CPA-sémantiquement
sécurisé sur (K,XL,XL+1).
En particulier, pour un adversaire A contre ECBC qui
soumis q requêtes il existe un adversaire B contre la
PRP E tel que:
AdvCPA[A,ECBC]2*AdvPRP[B,E]+(2*q2L2)/|X|
CBC est sémantiquement sécurisé tans que q2L2<<|X|
Sécurité sémantique du CBC
AdvCPA[a,ECBC]2*AdvPRP[B,E]+(2*q2L2)/|X|
q : le nombre de messages chiffrés avec la même clé k
L : la longueur maximale d’un message (nombre de blocs)
On suppose que le seuil de sécurité désiré soit de 1/232:
AdvCPA[A,ECBC] ≤1/232 q2L2/|X| ≤1/232
• Pour AES: |X|=2128 q L ≤ 248 , donc la clé doit
changé après le chiffrement de 248 bloc (16384 To).
• Pour 3DES: |X|=264 q L ≤ 216 une condition plus
stricte (216 bloc= 512Ko seulement !!!)
Sécurité sémantique du CBC• Si le IV est prédictible, CBC ne grarantie aucune
sécurité sémantique !!!
• Prédictible :on peut prédire le prochain IV.
• Preuve:
On suppose qu’ayant c=ECBC(k,m), un attaquant peut
prédire le prochain IV:
• Exemple: un bug dans SSL/TLS v1.0: le IV du
prochain N° i enregistrement est le dernier bloc chiffré
de l’enregistrement N° i-1. (BEAST Attack)
CBC avec « nonce »• Quand le mode CBC est utiliser avec une « nonce » (le
cas d’une communication synchrone), certains
mesures de sécurité supplémentaires doivent être
prises :
• k1 doit être différente de k, sinon le mode n’est plus
sémantiquement sécurisé.
m1,0
m1,1
EXP(0)
EXP(1)
m0,0=m0,1
Problème technique: CBC et padding
• Un bourrage (padding) est ajouter quand la taille du
dernier bloc n’est pas conforme (taille de la PRP).
• Un padding de n octets est un bloc (ajouté
même si la taille est conforme !).
• Une grande source de vulnérabilités : « Padding Oracle
Attack » contre SSL/TLS v 1.0 (attaque active).
Modes opératoires: CTR (MTK)
• Soit F une PRF sémantiquement sécurisé. On définie le
mode opératoire CTR par ECTR(k,m), le vecteur IV est
choisie aléatoirement!
F: K x 0,1n0,1n, IV0,1n
• Une émulation du chiffrement par flot !
• Avantages: parallélisable; déchiffrement sélective; pas
besoin de faire un padding !
Sécurité sémantique du CTR
Théorème (Bellar,Rogaway’11):
Pour tout valeur L>0, si F est une PRF sémantiquement
sécurisé sur (K,X,X), alors ECTR est CPA-sémantiquement
sécurisé sur (K,XL,XL+1).
En particulier, pour un adversaire A contre ECTR qui
soumis q requêtes il existe un adversaire B contre la
PRF F tel que:
AdvCPA[A,ECTR]2*AdvPRP[B,F]+(2*q2L)/|X|
CTR est sémantiquement sécurisé tans que q2L<<|X|
il est meilleur que CBC!
Sécurité sémantique du CTR
AdvCPA[A,ECTR]2*AdvPRP[B,F]+(2*q2L)/|X|
q : le nombre de messages chiffrés avec la même clé k
L : la longueur maximale d’un message (nombre de blocs)
On suppose que le seuil de sécurité désiré soit de 1/232:
AdvCPA[A,ECTR] ≤1/232 q2L/|X| ≤1/232
• Pour AES: |X|=2128 q L1/2 ≤ 248 , donc la clé doit
changé après le chiffrement de 264 bloc (16777216 To).
• Pour 3DES: |X|=264 q L1/2 ≤ 216 une condition plus
stricte (220 bloc= 8Mo seulement !!!)
Modes opératoires: CFB et OFB
CFB
OFB
• Des variantes de CTR
• Sémantiquement sécurisés (Sung & Lee 2001)
• Ne permettent pas l’accès aléatoire !!
• OFB est protéger par un brevet (US 20050160279 A1).
Conclusion
• Les PRF et les PRP sont de meilleurs abstractions pour
modéliser le chiffrement par bloc.
• La sécurité sémantique diffère entre le cas de l’usage de
la clé une seul fois, et le cas d’usage multiple. Dans ce
dernier, deux solutions sont envisageable : chiffrement
aléatoire (en utilisant un IV), et chiffrement par nonce.
• Dans les deux cas, le mode doit être choisie
attentivement pour assuré la sécurité sémantique.
• Le mode CTR est le plus sécurisé et le plus pratique !
• Malheureusement, tout ces modes n’assurant pas la
sécurité contre un attaquant qui peut modifier (Temper)
« aucune assurance sur l’intégrité des données ».
• Il est donc nécessaire de prévoir d’autres outils
cryptographique et d’autres modes de chiffrement avec
une nouvelle définition de la sécurité sémantique…..
Merci