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