bt/p4-rsa.d 6. března 2003 1 Blowfsh -------- * nepatentovaný algortmus, navržený pro mplementac na 32 btových CPU * 64-btový blok, proměnná délka klíče od 32 do 448 btů * 16 terací Festelovské sítě * v první fáz je provedena expanze klíče - vytvoří 18 podklíčů a obsah čtyř S-boxů (8 btů vstup, 32 btů výstup, S box jako pole) - pro vytvoření podklíčů a S-boxů se zapotřebí 521 terací algortmu Blowfsh K 1 L 8 32 R S 1 S 2 S 3 S 4 K 18 K 17 * dešfrování stejné jako šfrování, podklíče se použjí v opačném pořadí Útoky: * Vaudenay 1995 našel množnu slabých klíčů, klíč je slabý s p=2ˆ-14, ale nenašel se zatím žádný způsob jak toho využít pro útok SAFER ----- * dalším zajímavým volně použtelným algortmem je SAFER (Secure and Fast Encrypton Routne) * navržen pro použtí na čpových kartách apod. - 8 btové mkroprocesory, omezená pamět * několk varant: původní verze SAFER K64 měla 64 btový klíč - Sngapurské Mnsterstvo vntra navrhlo SAFER K128 - varanty SAFER SK64 a SK128 odstraňují slabnu v tvorbě podklíčů - měly by se používat místo K64 a K128 * 64-btový blok, varanta SK64 64-btový klíč atd. * není Festelovská šfra, používá odlšné operace pro šfrování a dešfrování * na začátku vstupuje 8 bytů, pak 8 terací: - XOR-add s podklíč - substtuce, obsah S-boxů S(x) = 45ˆx mod 257, fce je nvertovatelná - add-xor s podklíč, sčítání a XOR je zaměněno - třívrstvá pseudo-hamardova transformace: f(l, R)=(2L+R, L+R) * na konc výstupní transformace - XOR-add s podklíč 1 2-1 -1-1 -1 S S S S S S S S 2r+1 * dešfrování nverze operací v opačném pořadí:
2 6. března 2003 bt/p4-rsa.d - opak výstupní transformace - XOR-sub podklíčů K_2r+1 - pak opak terací (nverzní PT: f(l, R)=(L-R, -L+2R), sub-xor s podklíč, substtuce - použta nverze S-boxů, XOR-sub s podklíč) Útoky: * útoky prot plné verz SAFER 64SK a SAFER 128SK zatím nejsou známy AES --- * DES malá délka klíče, 3DES pomalý a jsté problémy, EES se neuchytl * proto 1997 NIST konkurs na AES (Advanced Encrypton Standard), několk délek klíčů a délek bloku (128, 192 a 256 btů) * v roce 2002 vybrán algortmus Rjndael (Daemen, Rjmen) * zde pops pro varantu s délkou bloku 128 a klíčem 128 btů: - data klíč chápány jako matce 4x4 byty - na začátku XOR vstupních dat a podklíče - pak 10 terací:. ByteSub - substtuce 8 btů -> 8 btů všech dat. ShftRow - cyklcký posun řádků dat o 0, 1, 2 a 3 pozce. MxColumn - násobení sloupců konstantním polynomem. AddRoundKey - XOR dat a podklíče - pak závěrečná terace - má vynecháno MxColumn * AES může být rychlý v W a SW, na 8 btech na >= 32 btových CPU * zatím ale nový, před praktckým používáním dobré počkat cca 1-2 roky Poznámka pro zajímavost (algortmus TEA).... * TEA = Tny Encrypton Algorthm, Wheeler a Needham 1995 * blok 64 btů, klíč 128 btů * zatím nalezené nedostatky: - ke každému klíč k = (k_0, k_1, k_2, k_3) exstují tř další ekvvalentní klíče: (k_0 xor M, k_1 xor M, k_2, k_3) (k_0, k_1, k_2 xor M, k_3 xor M) (k_0 xor M, k_1 xor M, k_2 xor M, k_3 xor M), kde M=80000000 (každé terac vyruší dva nejvyšší bty klíče) - klíč by bylo možno nalézt, pokud by oponent mohl zvolt vztah mez dvěma klíč a účastník komunkace by oběma klíč zašfroval 2ˆ32 oponentem zvolených datových bloků (tento útok je poněkud nepraktcký) /* Šfrování: klíč = k[0]..k[3] data = v[0] a v[1] */ vod encrypt(word32 v[2], word32 k[4]) word32 y = v[0], z = v[1], sum = 0, delta = 0x9e3779b9, n = 32; whle (n-- > 0) sum += delta; y += (z << 4) + k[0] ˆ z + sum ˆ (z >> 5) + k[1]; z += (y << 4) + k[2] ˆ y + sum ˆ (y >> 5) + k[3]; v[0] = y; v[1] = z; /* Dešfrování: klíč = k[0]..k[3] data = v[0] a v[1] */ vod decrypt(word32 v[2], word32 k[4]) word32 y = v[0], z = v[1], delta = 0x9e3779b9, n = 32, sum = n*delta; whle (n-- > 0)
bt/p4-rsa.d 6. března 2003 3 [] z -= (y << 4) + k[2] ˆ y + sum ˆ (y >> 5) + k[3]; y -= (z << 4) + k[0] ˆ z + sum ˆ (z >> 5) + k[1]; sum -= delta; v[0] = y; v[1] = z; MDC založené na blokových šfrách --------------------------------- * každá zašfrovaná zpráva by měla obsahovat nějakou redundanc * např. představme s frmu, pobočky posílají na ústředí počet objednaných kusů produktu; pokud číslo 64 btů, ústředí neumí rozpoznat pravou zprávu od falešné - tj. aktvní oponent může způsobt potíže, když nezná obsah zpráv - řeší se přdáním redundance ke zprávám - např. pokud každý blok má 1/2 nulovou, umíme rozpoznat správnou zprávu od falešné; na druhou stranu pomůžeme analytkov - někdy predkovatelnější C - nejlepší by bylo, kdyby redundancí mohl být náhodně vypadající řetězec * k tomto účely byly navrženy MDC = manpulaton detecton code - předpokládejme, že máme k dspozc bezpečnou blokovou šfru - pak můžeme použít některou z následujících konstrukcí: x -1 x -1 g x E E g -1 E Matyas-Meyer-Oseas Daves-Meyer Myaguch-Preneel - vstupem zpráva rozdělená do n-btových bloků (pro DES: n=56 pro Daves-Mayer, pro ostatní n=64) - poslední blok je jednoznačně doplněn na délku n btů (např. 10000...0) - hodnota 0 je předdefnována - postupně vytváříme 1, 2,... - výsledné _t přpojíme za poslední P_t, celé zašfrujeme - příjemce dešfruje, nezávsle spočte _t a ověří * MDC je tzv. jednosměrná hashovací fce; je snadné spočíst = f(p), ale opačný výpočet je výpočetně neprovedtelný * uvedeno jako předběžný příklad; použtí jednosměrných hashovacích fcí s uvedeme pozděj Poznámka (délka výstupu hashovací fce) Pro většnu použtí potřebujeme s délkou > 80 btů; takové fce exstují, např. např. MD5 (Rvest 1992) se 128 btů nebo SA-1 (NIST 1993) se 160 btů. [] Klíče vs. hesla --------------- * pokud by klíč zadával užvatel, pak pro DES 7 osmbtových znaků - pokud pouze malá písmena: 26ˆ7 2ˆ33 - pokud malá a velká: 52ˆ7 2ˆ40 - všechny tsknutelné ASCII: 96ˆ7 2ˆ46 * to by ovšem platlo pouze pokud by všechny znaky byly stejně pravděpodobné * v teor nformace je defnována entrope jako mnmální počet btů potřebných pro zakódování všech možných hodnot zprávy * pokud by všechna hesla stejně pravděpodobná, pak entrope = počet btů
4 6. března 2003 bt/p4-rsa.d * pro anglčtnu 1.3 btu nformace/znak (mění se podle délky textu, pro osmznakové texty 2.3 btu/znak, sníží se na 1.3 až 1.5 pro šestnáctznakové) * tj. běžné 8 znakové heslo cca 18.4 btů entrope * slabá hesla (s nízkou entropí) se dají snadno odhadnout * oponent může prohledávat prostor klíčů podle klesající očekávané pravděpodobnost hesla (slovníkové útoky) * nejlepší používat náhodné klíče (vygenerované W generátorem náhodných čísel) * pokud klíče odvozené z užvatelem zadaného textu (passphrase) - použít jednosměrný hash Problém dstrbuce klíčů ======================== * pokud někomu zasílám tajnou zprávu, musí mít klíč aby jí rozšfroval * klíč nutné zaslat - nejjednodušší mít bezpečný kanál (tradčně kurýr apod.) * často není, nebo není praktcký (banka se stovkam poboček nebo potřeba každodenní změny klíče) * dstrbuce klíčů byl tradčně nejslabším článkem mnoha systémů * bylo by mnohem vhodnější moc klíče dstrbuovat přímo příslušným komunkačním kanálem (sítí) Metoda kryptogramů... * Merkle 1975 (publkováno 1978), Merkle puzzle scheme * Alce vytvoří např. 2ˆ20 kryptogramů, každý zašfruje 20 btovým klíčem * v každém z nch zpráva typu Toto je zpráva číslo X, tajný klíč je Y * Bob náhodně jeden vybere, rozluští hrubou slou, zjstí X a Y * Bob pošle Alc X (číslo kryptogramu) a tajnou zprávu zašfrovanou klíčem Y: m=(x, E_Y(p)) * Oskar potřebuje 2ˆ40 (resp. nˆ2 oprot n) operací * pokud mají Bob a Oskar stejný výpočetní výkon, pak např. 10 mn oprot jednomu roku * dnes vzhledem ke kryptografckým standardům málo, ale zajímavá myšlenka Šfrování s veřejným klíčem... * dstrbuce klíčů mnoho let považováno za nherentní problém * až v roce 1976 Dffe a ellman myšlenka - šfrovací a dešfrovací klíč různý, dešfrovací klíč nemůže být odvozen z šfrovacího * šfrovací zveřejním ( veřejný klíč ), dešfrovací utajím ( tajný klíč ) Alce chce komunkovat s Bobem: * Bob má tajný klíč DB, veřejný EB; tajný utají, veřejný zveřejní např. na sít * Alce chce poslat zprávu p Bobov, použje c = EB(p) * Bob dešfruje p = DB(c) * Oskar nc nerozluští, protože neumí odvodt DB z EB * název asymetrcká kryptografe, šfrování s veřejným klíčem (tradční kryptografe = symetrcká kryptografe, šfrování s tajným klíčem) * koncepce považována za revoluc, před 1977 a po Algortmus RSA -------------- * Rvest, Shamr, Adleman 1977, nejznámější a nejpoužívanější Algortmus: Mnpříklad: * Alce vybere 2 velká prvočísla P a Q P=7, Q=17 * spočte N=P*Q N=119 * spočte X = (P-1)(Q-1) X=96 * zvolí E a D, aby E*D = 1 (mod X) E=5 D=77 (E a D jsou multplkatvní nverze,
bt/p4-rsa.d 6. března 2003 5 Eˆ-1 == D (mod X), rozšířený Eukldův alg.) * zveřejní N a E (119, 5) Bob šfruje: * c = mˆe (mod N) c = 19ˆ5 (mod 119) = 66 Alce dešfruje: * m = cˆd (mod N) m = 66ˆ77 (mod 119) = 19 [Důkaz že funguje je v AC, str. 286.] Bezpečnost metody závsí na obtížnost rozkladu velkých čísel na prvočísla: * Oskar zná E a N a ví, že N=P*Q * kdyby zjstl P a Q, spočte X=(P-1)(Q-1), najde D - problém zjstt D je dokazatelně výpočetně stejně složtý jako rozklad N * P a Q nemůže zjstt jnak než rozložením N na P*Q - RSAP (RSA Problem): není znám efektvní algortmus rozkladu na prvočntele, ale není dokázáno že neexstuje - čas zhruba eˆsqrt(ln n ln ln n) [protože P, Q < sqrt(n)] * pokud je N 100 cferné - bude to trvat cca týden (336 btů) 150 1000 let (500 btů) 200 ml. let (665 btů) * ve skutečnost záleží na množství nvestovaných prostředků * pro běžné použtí (nvestce do W 25M$, doba faktorzace 25 let) by mělo stačt 1024 btů Algortmus má různé potíže: * výrazně pomalejší než symetrcké šfry (1000bt RSA as 4000x), pro stejnou bezpečnost vyžaduje podstatně větší délku klíče (17x delší) * hodnoty nelze zvolt lbovolně, např.: - P a Q musejí být zvoleny tak, aby byl rozklad N výpočetně neprovedtelný - každá entta vlastní modulus N, protože prozrazení D, E dovolí rozklad modulu - z důvodů efektvty volen často malý šfrovací exponent, např. E=3 - pokud je malý exponent E a posílám šfrovanou zprávu více enttám, provedu c_ = pˆe mod n_, z toho se ale dá zjstt pˆe, pak stačí E-tou odmocnnu - nejlepší aby p byla náhodná data atd. Správnou volbou parametrů se zabývá [AC], kap. 4.1 až 4.4. * v prax se většnou používá pro dstrbuc klíčů pro jednu relac (klíč jsou náhodná data), relace pak proběhne symetrckým algortmem