Transcript prezentace

Úvod do klasických a
moderních metod šifrování
Jaro 2011, 10. přednáška
Generátory pseudonáhodných čísel
• V mnoha kryptografických aplikacích je třeba umět generovat
náhodně čísla, proud bitů, atd.
• Například vybíráme-li náhodně klíč z prostoru všech možných klíčů
v případě blokové šifry.
• Nebo když generujeme proud klíče pro proudovou šifru.
• Nebo když generujeme veřejný klíč pro šifru RSA.
• Používat fyzikální generátory (např. házení mincí) je pomalé a
nákladné.
• V praxi se proto místo generátorů náhodných čísel používají
generátory pseudonáhodných čísel – algoritmy, které produkují
posloupnosti čísel (bitů), které „vypadají náhodně“, nelze je rozlišit
od posloupnosti náhodných čísel (bitů).
• Špatný je takový generátor pseudonáhodných čísel, který umožňuje
ze znalosti k po sobě jdoucích čísel předpovědět s nenulovou
pravděpodobností následující číslo.
• V příběhu Enigmy jsme viděli, co může způsobit špatný generátor.
Lineární rekurentní posloupnosti
• V kryptografických aplikacích jsou jako generátory
pseudonáhodných čísel často využívány blokové šifry v CTR nebo
OFB módu.
• Jiné konstrukce využívají šifru RSA.
• Další konstrukce jsou založené na hašovacích funkcích.
• Zdaleka nejpopulárnější jsou konstrukce založené na lineárních
rekurentních posloupnostech.
• Lineární rekurentní posloupnost bitů řádu n dostaneme tak, že
zvolíme inicializační vektor (s0,s1,…,sn-1) a pro každé nezáporné k
definujeme
sn+k = L(sk,sk+1,…,sn+k-1) = a0sk+a1sk+1+a2sk+2….+an-1sn+k-1 (mod 2),
kde a0,a1,…,an-1 jsou bity, a0 různé od 0.
• Lineární rekurentní posloupnost je periodická.
• Délka periody je menší nebo rovná 2n-1 .
• Polynom f(x) = a0xn-1 + a1xn-2 + …. an-2x + an-1 se nazývá
generující polynom této posloupnosti.
• Délka periody závisí na inicializačním vektoru a algebraických
vlastnostech generujícího polynomu.
Lineární posuvné registry
s0
s1
s2
…
sn-1
sn
sn+1
sn+2
• Často se lze také setkat s termínem lineární posuvný registr.
• Ten odkazuje na hardwarovou implementaci lineární
rekurentní posloupnosti.
s0
s1
s2
……
sn-2
sn-1
s1
s2
s3
……
sn-1
sn
sn= L(s0,s1,…,sn-1)
s2
s3
s4
……
sn
sn+1
sn+1= L(s1,s2,…,sn)
Nevýhody lineárních rekurentních
posloupností
• Známe-li 2n po sobě jdoucích bitů LRP řádu n, umíme spočítat
koeficienty a0,a1,…,an-1 zpětné vazby L, a tedy celou funkci L a celý
generující polynom pomocí jednoduché soustavy n lineárních rovnic
o n neznámých.
• Umíme tak předpovědět všechny další bity této posloupnosti.
• Pokud neznáme řád n, ale známe aspoň 2n po sobě jdoucích bitů,
lze rovněž zjistit řád a celou funkci L.
• Pomocí Berlekampova-Masseyho algoritmu z počátku 70. let
minulého století.
• Proto se od té doby nepoužívají lineární posuvné registry jako
generátory pseudonáhodných posloupností bitů samostatně, ale
přidává se k nim ještě nelineární filtr.
Nelineární filtr
• Nelineární filtr je nějaká booleovská funkce f(x0,x1,…,xn-1), která
přiřazuje n-tici bitů jeden bit.
• Je to libovolné zobrazení z množiny 2n do množiny 2.
• LR posloupnost pak generuje proud klíče k0,k1,…,km,…
pomocí
předpisu
• k0=f(s0,s1,…,sn-1),
• k1=f(s1,s2,…,sn), …….. ,
• km=f(sm,sm+1,…,sm+n-1), ….
• Vlastnosti a bezpečnost takového proudu klíče pak závisí především
na vlastnostech booleovské funkce f .
• Špatně navržená nelineární funkce může mít pro bezpečnost příslušné
proudové šifry fatální důsledky.
Lineární posuvné registry s
nelineárním filtrem
k0
s0
s1
s2
……
sn-2
sn-1
k0=f(s0,s1,…,sn-1),
sn= L(s0,s1,…,sn-1)
k1
s1
s2
s3
……
sn-1
sn
k1=f(s1,s2,…,sn),
sn+1= L(s1,s2,…,sn)
k2
s2
s3
s4
……
sn
sn+1
k2=f(s2,s2,…,sn+1),
Karta Mifare Classic
Karta Mifare Classic je paměťové médium s omezenou možností provádět
kryptografické operace.
Je rozdělená do sektorů, každý sektor je tvořen několika bloky, každý blok
má kapacitu 16 bytů.
klíč A
podmínky přístupu
klíč B
podmínky přístupu
klíč B
datový blok
datový blok
klíč A
datový blok
datový blok
datový blok
UID
Typ karty
Data výrobce
Začátek komunikace
Přiložíme-li kartu ke čtečce, karta se napřed nabije z elektromagnetického pole
čtečky.
Poté proběhne antikolizní protokol, ze všech karet, které jsou v dosahu čtečky,
si čtečka jednu vybere.
Během antikolizního protokolu karta pošle čtečce své identifikační číslo u = UID
velikosti 4 bytů.
Poté, co si čtečka vybrala kartu s číslem u, zahájí autentizační protokol tím, že
požádá o přístup k jednomu ze sektorů.
Na to karta reaguje tím, že pošle čtečce náhodnou výzvu nT velikosti 4 bytů.
Tato výzva je generována lineárním posuvným registrem délky 16 se
zpětnou vazbou L(x0,x1,…,x15) = x0+x2+x3+x5 (mod 2) .
Inicializační vektor je na kartě pevně nahrán.
Protože nabití karty a autentizační protokol trvají vždy stejnou dobu, karta
pošle pokaždé za stejných podmínek stejnou výzvu.
Šifrovaná část autentizace
• Další část autentizačního protokolu již probíhá šifrovaně.
• Na kartě je použita proudová šifra CRYPTO1 .
• Ta je tvořena lineárním posuvným registrem délky 48 se zpětnou
vazbou
L(x0,x1,…,x47)=x0+x5+x9+x10+x12+x14+x17+x19+x24+x25+x27+
x29+x35+x39+x41+x42+x43 (mod 2) .
• Inicializační vektor je tvořený klíčem pro příslušný sektor. Ten je
známý kartě i čtečce.
• Daleko zajímavější je nelineární filtr. Ten je definovaný předpisem
f(x0,x1,…,x47)=fc(fa(x9,x11,x13,x15), fb(x17,x19,x21,x23), fb(x25,x27,x29,x31),
fa(x33,x35,x37,x39), fb(x41,x43,x45,x47)) .
• Všimněte si, že nelineární filtr závisí pouze na 20 bitech stavového
vektoru.
• Tyto bity jsou navíc vybrané pravidelně, takže ob jeden krok se
hodnota nelineární funkce počítá prakticky ze stejných hodnot stavu,
pouze první a poslední bit se liší.
Definice funkcí fa, fb a fc
• Vnější funkce fc je definována předpisem
fc(y0,y1,y2,y3,y4) = (y0 or ((y1 or y4) and (y3 xor y4))) xor
((y0 xor (y1 and y3)) and ((y2 xor y3) or (y1 and y4)).
• Vnitřní funkce fa a fb jsou definovány jako
fa(y0,y1,y2,y3) = ((y0 or y1) xor (y0 and y3)) xor
(y2 and ((y0 xor y1) or y3)),
fb(y0,y1,y2,y3) = ((y0 and y1) or y2) xor ((y0 xor y1) and (y2 or y3)).
• Takto definovaný nelineární f filtr má řadu slabin.
• Například změna posledního bitu na vstupu f změní hodnotu f s
pravděpodobností pouze 3/32.
• S pravděpodobností 5/8 hodnota f nezávisí na posledních 4 bitech.
• atd, atd.
Pokračování autentizačního
protokolu
• Čtečka na výzvu karty odpoví svojí výzvou nR a odpovědí aR na
výzvu karty.
• Obě odpovědi jsou poslané šifrovaně, tj. jako {nR} a {aR} .
• Nakonec karta odpoví na výzvu čtečky vlastní šifrovanou odpovědí
• {aR}.
• Současně s příslušnými 4bytovými výzvami a odpověďmi je po
každém bytu posílán kontrolní paritní bit.
• Ten je spočítán z otevřeného textu.
• Odeslán je ale šifrovaně, což je zásadní chyba. Proč to je chyba si
ukážeme později.
Změny stavového vektoru šifry
• Registr šifry se naplní klíčem b pro daný sektor: si = bi
pro i = 0,1,…,47 .
• V dalších 32 krocích (taktech) se ke zpětné vazbě ještě xorují bity
ui xor nT,i , tj.
s48+i = L(si,si+1,…,s47+i) xor ui xor nT,i pro i = 0,1,…,31.
• V dalších 32 krocích je ke zpětné vazbě xorována výzva čtečky nR,
tj.
s80+i = L(s32+i,s33+i,…,s79+i) xor nR,i pro i = 0,1,…,31.
• Dále je už využívána pouze zpětná vazba:
s112+i = L(s64+i,s65+i,…,s111+i) .
• Proud klíče šifry je generován pomocí nelineárního filtru f :
ki = f(si,…,s47+i) pro libovolné i .
• Šifrové texty {nR}, {aR} a {aT} jsou pak definovány jako
{nR,i} = nR,i xor k32+I , {aR,i} = aR,i xor k64+I , {aT,i} = aT,i xor k96+I ,
vše pro i = 0,1,…,31 .
Zpětný posun
• Z uvedených formulek vyplývá, že známe-li vnitřní stav šifry (tj. 48
po sobě jdoucích bitů si) v jakémkoliv okamžiku, můžeme z této
znalosti a 4bytových slov odposlechnutých během antikolizního a
autentizačního protokolu zpětně dopočítat všechny ostatní hodnoty
si, a tím získat klíč b pro daný sektor.
• K tomu stačí prohlédnout si důkladněji formulky definující změny
stavu v každém kroku.
• Cílem útoku na kartu je tedy získat nějakým způsobem stav šifry v
jakémkoliv okamžiku.
Chyby protokolu
• Jde vlastně o postranní kanály.
• Již jsme se zmínili o kontrolních paritních bitech doprovázejících
každý odeslaný byte.
• Zajímají nás paritní byty doprovázející nT, {nR} a {aR} .
• Ty jsou definovány následovně.
• pj = nT,8j xor nT,8j+1 xor … xor nT,8j +7 xor 1,
pj+4 = nR,8j xor nR,8j+1 xor … xor nR,8j +7 xor 1,
pj+8 = aR,8j xor aR,8j+1 xor … xor aR,8j +7 xor 1, vše pro j = 0,1,2,3 .
• Paritní bity jsou sice počítány z otevřeného textu, posílány jsou ale
šifrovaně: {pj} = pj xor k8+8j pro j = 0,1,…,11 .
• Tato skutečnost je významnou chybou protokolu.
Chybová hláška
• Poté, co karta obdrží výzvu čtečky {nR}, odpověď {aR} na vlastní
výzvu nT a příslušné paritní bity, provede kontrolu.
• Nejdříve překontroluje správnost paritních bitů p4,…,p11 .Nejsou-li
správně, karta nereaguje.
• Tak tomu má také být.
• Jsou-li paritní bity správně, karta dále překontroluje správnost
odpovědi aR.. Pokud je i ta správná, karta odpoví svojí vlastní
odpovědí {aT} a autentizační protokol je dokončen, čtečka získala
přístup k příslušnému sektoru na kartě.
• Je-li ale odpověď aR nesprávná, karta odpoví šifrovanou chybovou
hláškou 0101 .
• To je zásadní chyba protokolu, útočník tak získá informace o 4
bitech klíče. Kromě toho získá dalších 8 bitů informace, neboť také
ví, že paritní bity {p4},…, {p11} jsou správně.
• Z takto získávaných informací lze nakonec zjistit stav šifry a tedy i
klíč pro daný sektor.
Články ke kartě Mifare Classic
• Podrobnější informace lze získat z následujících tří článků.
• Flavio D. Garcia et al., Dismantling Mifare Classic .
• Obsahuje především popis algoritmů implementovaných na kartě, a
některé jejich slabiny.
• Flavio D. Garcia et al., Wirelessly pickpocketing a Mifare Classic
Card.
• V druhém článku jsou popsány další slabiny a jiné typy jejich využití
v případě, kdy útočník má přístup pouze ke kartě, nikoiv ke čtečce.
• Nicolas T. Courtois, The dark side of security by obscurity.
• Poslední článek obsahuje podstatné vylepšení útoků z předchozího
článku.
• Všechny články jsou přístupné z fakultní adresy.