Chiffrement Symétrique:
par flot et par blocs.
Texte crypté
Emetteur Récepteur
3
Chiffrement symétrique
Deux catégories existent dans le cadre du
chiffrement symétrique :
D: KxC M
(k,c) M=D(k,c)=Dk(c)
Ensemble de clés
possibles
Ensemble de clés
sur une taille fixe Ensemble de tout les
l ex. 128 bit 2128 Keystream possible
possibilités sur n bit : n>>l de
cardinalité 2n
Chiffrement par flot
• 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é ».
Sécurité d’un PRNG
• Un PRNG est sécurisé s’il est imprédictible !
• Définition : soit le générateur G:K{0,1}n 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)=P{A(G(k)[0],…G(k)[i])=G(k)[i+1]} > ½ +
avec non négligeable (>1/230).
• 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 !
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
20 octet
20 octet
http://www.ecrypt.eu.org/stream/salsa20.html
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
Attaques sur le chiffrement par
flot / OTP
• Les modifications sur le texte chiffré sont
facilement détectable :
Attaques sur le chiffrement par
flot / OTP
Le mode de chiffrement par flot est malléable !:
enc ( ⊕k )
m m⊕k
p
⊕
dec ( ⊕k )
m⊕p (m⊕k)⊕p
⋯
⊕
dec ( ⊕k )
From: Eve From: Eve
b’ {0,1}
pour b=0,1: Wb := [ événement EXP(b)=1]
Alors :
AdvSS[B, E] =|Pr[ EXP(0)=1 ] −Pr[ EXP(1)=1 ] |=|0 – 1|=1
Exemple: OTP
• On montre que le OTP est sémantiquement sécurisé :
kK
c k ⊕m 0 b’ {0,1}
Même distribution
Pour tout A:
AdvSS[A,OTP] = | Pr[ A(k⊕m0)=1 ] − Pr[ A(k⊕m1)=1 ] |= 0
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 !).
AdvSS[A,E] ≤ 2 ∙ AdvPRG[B,G]
Preuve par intuition
m0 , m1 m0 , m1
chal. adv. A chal. adv. A
kK c m0 ⊕ G(k) ≈p r{0,1}n c m0 ⊕ r
b’≟1
b’≟1
≈p
m0 , m1 m0 , m1
chal. adv. A chal. adv. A
b’≟1 b’≟1
Chiffrement par blocs
• Un message est décomposer en blocs avant
d’être chiffré. Les blocs obtenus sont
rassemblés pour construire le message chiffré.
n bits n bits
PT Block E, D CT Block
Key k bits
Examples:
3DES: n= 64 bits, k = 168 bits
AES: n=128 bits, k = 128, 192, 256 bits
Réseaux de Feistel
• 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.
L0 ⊕ L1 ⊕ L2 Ld-1 ⊕ Ld
input output
Li-1 Ri-1
Li=Ri-1
fi
⊕
Ri= Li-1f(Ri-1,Ki)
Li Ri
b’ {0,1}
EXP(b)
• 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 PRP
• Une PRP est sécurisé, si ça sortie ne peut être
discriminer de celle d’une permutation aléatoire:
b
b’ {0,1}
• 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
PRF et PRP
• Un algorithme de chiffrement par bloc n’est rein
d’autre qu’une PRP:
– AES : une PRP sur ({0,1}128,{0,1}128) vers {0,1}128
– DES :une PRP sur ({0,1}56,{0,1}64) vers {0,1}64
– 3DES: une PRP sur ({0,1}112,{0,1}64) vers {0,1}64
• 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 dans les réseaux de Feistel
Théorème: (Luby-Rackoff ‘85):
Soit f: K × {0,1}n ⟶ {0,1}n une PRF sécurisé,
alors avec 3 round Feistel on obtient:
F: K3 × {0,1}2n ⟶ {0,1}2n une PRP sécurisé
R0 R1 R2 R3
f f f
L0 ⊕ L1 ⊕ L2 ⊕ L3
input output
Exemple d’une PRP:DES
• 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(R L )
16 16
Exemple d’une PRP:DES
Plaintext
IP
L0 R0
K1
f
L1 R1
L16 R16
IP-1
Ciphertext
Exemple d’une PRP:DES
Transformed
Key Ki
Permutations
Ri-1 and substitution XOR Ri
f
Li-1 Li
Expander
E(Ri-1)
Ki
Blocs de 6
bits
B1 B2 B3 B4 B5 B6 B7 B8
S1 S2 S3 S4 S5 S6 S7 S8 S-Boxes
C1 C2 C3 C4 C5 C6 C7 C8
Blocs de 4
Permutation bits
f(Ri-1, Ki)
Exemple d’une PRP:3DES
• 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
output
input
⨁
⋯
⨁
⨁
⋯
⋯
⋯
S8 S8 S8
subs. perm.
layer layer inversion
• 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
10 rounds
4
(1) ByteSub (1) ByteSub (1) ByteSub
⋯ (2) ShiftRow
⨁
⨁
(2) ShiftRow
⨁
invertible
k0 k1 k2 k9
⨁
k10
key key expansion:
4 output
16 bytes 16 bytes ⟶176 bytes 4
• MixColumns:
m1 m2 m3
c1 c2 c3
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,1}n{0,1}n
Négligeable Négligeable
Preuve par intuition
Utiliser la clé plusieurs fois (MTK)
m0 , m1 M
• Chercher F(k,ri)
cb ri,F(k,ri) ⊕ mb • Déchiffré Cb en mb
• Output 0 si mb=m0
Solution 2: nonce-based
Encryption
m0,0=m0,1
EXP(0)
m1,1
EXP(1)
Problème technique: CBC et padding
CFB
OFB
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