Master SSI - TP 01 - septembre 2013

Transcription

Master SSI - TP 01 - septembre 2013
Master SSI-IR - TP 01
septembre 2013
Exercice 1 :
Énoncé
Programmation en C de l’attaque CCS
Un registre à décalage linéaire (LFSR : Linear Feedback Shift Register) donne un générateur
pseudo-aléatoire (PRG) très rapide en matériel. Plusieurs produits électroniques utilisent des
stream ciphers basés sur des LFSRs comme les lecteurs de DVD. Un registre de n bits est défini
par un ensemble d’entiers V = {v1 , . . . , vd } où vi désigne un entier dans l’ensemble {0, . . . , n−1}.
Les éléments de V sont appelés les tap positions.
Input : s = (s[n − 1], . . . , s[0]) ∈ {0, 1}n et s ̸= 0n
Output : y ∈ {0, 1}ℓ , ℓ > n
for i ← 1 . . . ℓ do :
output s[0] // retourne un bit
b ← s[v1 ] ⊕ · · · ⊕ s[vd ] // calcule le bit de rebouclage
s ← (b, s[n − 1], . . . , s[1]) // shift d’un bit vers la droite
Le Content Scrambling System (CSS) est utilisé pour sécuriser le contenu des disques DVDs.
CSS souffre de plusieurs faiblesses. Nous discutons ici du stream cipher CSS utilisé pour chiffrer
les contenus des films. CSS a été conçu dans les années 1980 quand le chiffrement exportable
était restreint à 40 bits. En conséquence, CSS utilise des clés secrètes de 40 bits.
Le PRG de CSS utilise deux LFSRs.
Input : seed s ∈ {0, 1}40
write s = s1 ∥s2 où s1 ∈ {0, 1}16 et s2 ∈ {0, 1}24
Charger 1∥s1 dans le LFSR de 17 bits
Charger 1∥s2 dans le LFSR de 25 bits
c ← 0 // carry bit
repeat
exécuter les deux LFSRs pendant 8 cycles et obtenir x, y ∈ {0, 1}8
1
traiter x et y comme des entiers dans 0 . . . 255
output z = x + y + c mod 256
si x + y > 255, alors c ← 1, 0 sinon c ← 0 // carry bit
forever
Le PRG retourne un octet à chaque itération. L’ajout du bit à 1 pour s1 et s2 garantit que
les LFSRs ne seront pas initialisés à 0. Les taps pour les deux LFSRs sont fixes. Le LFSR de
17 bits utilise {14, 0} et celui de 25 bits {12, 4, 3, 0}.
1.a ] Programmer en C le premier LFSR de 17 bits où l’état sera mis dans un entier de type
int. Vérifier que l’état prend bien 217 − 1 valeurs différentes.
1.b ] Programmer le second LFSR de 25 bits, l’opération de chiffrement et le déchiffrement
d’un texte. Chiffrer un message commençant par 5 octets identiques égaux à 0xff.
1.c ] Soit x1 , x2 , x3 les 3 premiers octets de sortie du LFSR de 17 bits. Montrer que l’état
initial s2 du second LFSR peut être obtenu en fonction de (z1 , z2 , z3 ) et (x1 , x2 , x3 ).
1.d ] Monter une attaque du type guess-and-determine de complexité 216 .
1.e ] Programmer l’attaque contre ce générateur. On supposera que l’on connaı̂t les 5 premiers
octets.
2