Úvod. Karel Klouda c KTI, FIT, ČVUT v Praze 18. dubna, letní semestr 2010/2011

Podobné dokumenty
8. RSA, kryptografie s veřejným klíčem. doc. Ing. Róbert Lórencz, CSc.

MPI - 7. přednáška. Hledání inverzí v Z n. Rychlé mocnění modulo n. Lineární rovnice v Z + n. Soustavy lineárních rovnic v Z + n.

Pokročilá kryptologie

Čínská věta o zbytcích RSA

RSA. Matematické algoritmy (11MAG) Jan Přikryl. Ústav aplikované matematiky ČVUT v Praze, Fakulta dopravní. verze: :01

RSA. Matematické algoritmy (11MA) Miroslav Vlček, Jan Přikryl. Ústav aplikované matematiky ČVUT v Praze, Fakulta dopravní. čtvrtek 21.

Testování prvočíselnosti

Karel Klouda c KTI, FIT, ČVUT v Praze 28. února, letní semestr 2010/2011

Obsah. Euler-Fermatova věta. Reziduální aritmetika. 3. a 4. přednáška z kryptografie

Hlubší věty o počítání modulo

Jak funguje asymetrické šifrování?

Úvod do kryptologie. 6. března L. Balková (FJFI ČVUT v Praze) Primality Testing and Factorization 6. března / 41

Hlubší věty o počítání modulo

Generující kořeny cyklických kódů. Generující kořeny. Alena Gollová, TIK Generující kořeny 1/30

Charakteristika tělesa

Asymetrické šifry. Pavla Henzlová FJFI ČVUT v Praze. Pavla Henzlová (FJFI ČVUT v Praze) Asymetrické šifry 28.3.

Historie matematiky a informatiky Cvičení 2

Polynomy nad Z p Konstrukce faktorových okruhů modulo polynom. Alena Gollová, TIK Počítání modulo polynom 1/30

Šifrová ochrana informací věk počítačů PS5-2

MFF UK Praha, 22. duben 2008

19. a 20. přednáška z kryptografie

Asymetrická kryptografie a elektronický podpis. Ing. Dominik Breitenbacher Mgr. Radim Janča

Zbytky a nezbytky Vazební věznice Orličky Kondr (Brkos 2010) Zbytky a nezbytky / 22

Univerzita Karlova v Praze Pedagogická fakulta

Protokol RSA. Tvorba klíčů a provoz protokolu Bezpečnost a korektnost protokolu Jednoduché útoky na provoz RSA Další kryptosystémy

Diskrétní logaritmus

Trocha teorie Ošklivé lemátko První generace Druhá generace Třetí generace Čtvrtá generace O OŠKLIVÉM LEMÁTKU PAVEL JAHODA

4 Počítání modulo polynom

1 Linearní prostory nad komplexními čísly

8 Kořeny cyklických kódů, BCH-kódy

Modulární aritmetika, Malá Fermatova věta.

Diskrétní matematika 1. týden

Šifrová ochrana informací věk počítačů PS5-2

MPI - 5. přednáška. 1.1 Eliptické křivky

Pokročilá kryptologie

Y36BEZ Bezpečnost přenosu a zpracování dat. Úvod. Róbert Lórencz. lorencz@fel.cvut.cz

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Složitost a moderní kryptografie

Polynomy. Mgr. Veronika Švandová a Mgr. Zdeněk Kříž, Ph. D. 1.1 Teorie Zavedení polynomů Operace s polynomy...

Prvočísla, dělitelnost

Aritmetické funkce. Pepa Svoboda

Zavedení a vlastnosti reálných čísel

Lineární algebra : Násobení matic a inverzní matice

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Diffieho-Hellmanův protokol ustanovení klíče

Jihomoravske centrum mezina rodnı mobility. T-exkurze. Teorie c ı sel, aneb elektronicky podpis a s ifrova nı

Matematické algoritmy (11MAG) Jan Přikryl

[1] x (y z) = (x y) z... (asociativní zákon), x y = y x... (komutativní zákon).

Lineární algebra : Polynomy

Řetězové zlomky. již čtenář obeznámen. Důraz bude kladen na implementační stránku, protože ta je ve

Obsah. Protokol RSA. Protokol RSA Bezpečnost protokolu RSA. 5. a 6. přednáška z kryptografie

5. a 6. přednáška z kryptografie

VZOROVÝ TEST PRO 1. ROČNÍK (1. A, 3. C)

Historie matematiky a informatiky Cvičení 1

Relativní Eulerova funkce

Riemannova hypotéza Martin Havlík 2. A

Matematické algoritmy (11MAG) Jan Přikryl. verze: :29

M - Kvadratické rovnice a kvadratické nerovnice

ElGamal, Diffie-Hellman

Historie matematiky a informatiky 2 7. přednáška

grupa těleso podgrupa konečné těleso polynomy komutativní generovaná prvkem, cyklická, řád prvku charakteristika tělesa

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Eliptické křivky a RSA

Modulární aritmetika, Malá Fermatova věta.

pro každé i. Proto je takových čísel m právě N ai 1 +. k k p

3. Podmíněná pravděpodobnost a Bayesův vzorec

Generátory náhodných a

0.1 Úvod do lineární algebry

z = a bi. z + v = (a + bi) + (c + di) = (a + c) + (b + d)i. z v = (a + bi) (c + di) = (a c) + (b d)i. z v = (a + bi) (c + di) = (ac bd) + (bc + ad)i.

Lineární algebra : Násobení matic a inverzní matice

Algoritmy okolo teorie čísel

Cyklické kódy. Definujeme-li na F [x] n sčítání a násobení jako. a + b = π n (a + b) a b = π n (a b)

1 Polynomiální interpolace

ANALYTICKÁ GEOMETRIE LINEÁRNÍCH ÚTVARŮ V ROVINĚ

Odpřednesenou látku naleznete v kapitolách skript Abstraktní a konkrétní lineární algebra.

Teoretická informatika Tomáš Foltýnek Algebra Struktury s jednou operací

Dosud jsme se zabývali pouze soustavami lineárních rovnic s reálnými koeficienty.

64. ročník matematické olympiády Řešení úloh krajského kola kategorie A

Arnoldiho a Lanczosova metoda

Příklad. Řešte v : takže rovnice v zadání má v tomto případě jedno řešení. Pro má rovnice tvar

Lineární algebra Kapitola 1 - Základní matematické pojmy

Algoritmy okolo teorie čísel

= - rovnost dvou výrazů, za x můžeme dosazovat různá čísla, tím měníme

a počtem sloupců druhé matice. Spočítejme součin A.B. Označme matici A.B = M, pro její prvky platí:

Kryptografie založená na problému diskrétního logaritmu

BCH kódy. Alena Gollová, TIK BCH kódy 1/27

Čínská věta o zbytcích RSA

M - Kvadratické rovnice

Úvod RSA Aplikace, související témata RSA. Ing. Štěpán Sem Festival Fantazie, Štěpán Sem

Obsah. Aplikovaná matematika I. Gottfried Wilhelm Leibniz. Základní vlastnosti a vzorce

Kvantové algoritmy a bezpečnost. Václav Potoček

Definice. Vektorový prostor V nad tělesem T je množina s operacemi + : V V V, tj. u, v V : u + v V : T V V, tj. ( u V )( a T ) : a u V které splňují

Lineární algebra : Metrická geometrie

Aplikovaná numerická matematika - ANM

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Limita funkce. FIT ČVUT v Praze. (FIT) Limita funkce 3.týden 1 / 39

Pomocný text. Polynomy

Zpracoval: 7. Matematická indukce a rekurse. Řešení rekurentních (diferenčních) rovnic s konstantními koeficienty.

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Metody výpočtu limit funkcí a posloupností

Transkript:

MI-MPI, Přednáška č. 11 Karel Klouda karel.klouda@fit.cvut.cz c KTI, FIT, ČVUT v Praze 18. dubna, letní semestr 2010/2011

RSA potřiapadesáté šifrování Co potřebuje k zašifrování zprávy x: číslo n, které je součinem dvou prvočísel n = pq, exponent e, který je nesoudělný s ϕ(n), tyto dvě čísla tvoří veřejný klíč k pub = (n, e) Šifrování: y x e (mod n) kde šifrovaná zpráva x musí být ze Z n, tzn. musíme vzít n dostatečně velké anebo x rozdělit na více částí, zašifrovaná zpráva y pak nutně vyjde také jako prvek Z n.

RSA potřiapadesáté šifrování Co potřebuje k dešifrování zprávy y: soukromý klíč k pr = d, který má tuto speciální vlastnost: pro všechna z Z n (z e ) d = z ed z (mod n) Dešifrování: x = y d x ed (mod n) To, že vyjde opět šifrovaná zpráva x nám zaručuje výše uvedená speciální vlastnost pro z = x.

RSA potřiapadesáté příklad šifrovaná zpráva x = 4, veřejný klíč k pub = (n, e), kde n = 33 = 3 11 a e = 3 (nesoudělné s ϕ(33) = 20), soukromý klíč d = 7. Šifrování: y x e (mod n) = 4 3 (mod 33) = 31, tedy zašifrovaná zpráva je y = 31. Dešifrování: y d = 31 7 = 27512614111 4 (mod 33). Tedy skutečně získáváme původní zprávu!

RSA potřiapadesáté dílčí problémy Co potřebujeme: vygenerovat dvě veliká prvočísla p a q, aby n = pq bylo dostatečně vysoké: n by mělo mít více jak 1024 bitů, tedy p a q musí mít kolem 512 bitů!! vhodně zvolit e nesoudělné s ϕ(n) = (p 1)(q 1), najít soukromý klíč d s požadovanou vlastností nutnou k dešifrování, umět rychle mocnit x e a y d modulo n, bez takového rychlého mocnění by RSA bylo k ničemu!

RSA potřiapadesáté dílčí problémy Co potřebujeme: vygenerovat dvě veliká prvočísla p a q, aby n = pq bylo dostatečně vysoké: n by mělo mít více jak 1024 bitů, tedy p a q musí mít kolem 512 bitů!! později testování prvočíselnosti vhodně zvolit e nesoudělné s ϕ(n) = (p 1)(q 1), najít soukromý klíč d s požadovanou vlastností nutnou k dešifrování, umět rychle mocnit x e a y d modulo n, bez takového rychlého mocnění by RSA bylo k ničemu! umíme pomocí square & multiply

Volba e Hledání n = pq se budeme věnovat později, nyní se zaměřme na druhou složku veřejného klíče, exponent e. Toto číslo je veřejné, takže není třeba, aby bylo neuhodnutelné. Jediné kritérium je, aby se při znalosti e, n a y nedalo zjistit x z rovnice y x e (mod n). Tomuto problému se obecně říká root finding (hledání odmocniny).

Root finding modulární odmocnina Pro neprvočíselné n je problém nalezení odmocniny už pro e = 2 (druhá odmocnina) stejně těžký jako faktorizace n. To že jsou stejně těžké znamená, že existuje (v tomto případě pravděpodobnostní) polynomiální algoritmus, který převádí jeden z těchto problémů na ten druhý. Vyřešit rovnici y x e (mod n). pro známé e, n a y umíme efektivně pouze pro případ, že n je prvočíslo nebo mocnina jednoho prvočísla.

Druhá odmocnina a kvadratická rezidua Naznačíme si, jak hledat druhou odmocninu pro n = p prvočíslo, kde navíc p 3 (mod 4). Hledáme x tak, aby pro dané y y x 2 (mod p).

Druhá odmocnina a kvadratická rezidua Naznačíme si, jak hledat druhou odmocninu pro n = p prvočíslo, kde navíc p 3 (mod 4). Hledáme x tak, aby pro dané y y x 2 (mod p). Aby řešení mohlo vůbec existovat, musí být y kvadratické reziduum a to platí právě když je Legendrův symbol roven 1, tedy y p 1 2 1 (mod p). Bud p = 4k + 3, potom (y k+1 ) 2 = y 2(k+1) = y p+1 2 y (mod p). a hledané x = y k+1 (mod p).

Druhá odmocnina a kvadratická rezidua příklad Bud p = 683 = 170 4 + 3, tedy k = 170. Necht y = 120, hledáme x tak, že 120 x 2 (mod 683). Je 120 kvadratické reziduum (tj. existuje vůbec řešení)? 120 683 1 2 = 120 341 1 (mod 683) a tedy 120 je kvadratické reziduum a řešení existuje. Položme x = 155 120 171 (mod 683), potom skutečně 155 2 = 24025 = 35 683 + 120!

Volba e pro RSA Jelikož na velikosti e nezáleží (je to těžké už pro e = 2), volí se e v RSA tak, aby se co nejvíce zkrátilo šifrování (mocnění na e) y = x e (mod n). To probíhá (samozřejmě) pomocí algoritmu square & multiply. Obvyklé volby jsou v násl. tabulce: veřejný klíč e binární zápis počet operací v S&M alg. 3 11 3 17 10001 5 2 16 + 1 1 0000 0000 0000 0001 17 Musí být stále splněno gcd(e, ϕ(n)) = 1!! To se kontroluje pomocí EA (Eukl. algoritmu), pokud to neplatí, musíme zvolit jiné e a opět otestovat pomocí EA.

Soukromý klíč d Volba soukromého klíče d závisí na volbě e. Chceme, aby pro všechna x Z n platilo x ed x (mod n) tj. musí jít dešifrovat jakákoli zpráva x. Takové d vždy existuje a získá se z této rovnice: e d 1 (mod ϕ(n)).

Soukromý klíč d trocha teorie Víme, že Z m \ {0} tvoří grupu pouze pokud je m prvočíslo. V takovém případě má každý prvek e inverzi d = e 1 tak, že e d 1 (mod m).

Soukromý klíč d trocha teorie Víme, že Z m \ {0} tvoří grupu pouze pokud je m prvočíslo. V takovém případě má každý prvek e inverzi d = e 1 tak, že e d 1 (mod m). Není-li ale m prvočíslo, Z m \ {0} grupu netvoří, nebot je-li m = s t, pak součin z množiny Z m \ {0} vyleze. s t 0 (mod m)

Soukromý klíč d trocha teorie Víme, že Z m \ {0} tvoří grupu pouze pokud je m prvočíslo. V takovém případě má každý prvek e inverzi d = e 1 tak, že e d 1 (mod m). Není-li ale m prvočíslo, Z m \ {0} grupu netvoří, nebot je-li m = s t, pak součin z množiny Z m \ {0} vyleze. s t 0 (mod m) Aby Z m byla grupa s násobením modulo m, musíme z ní vyjmout nulu a všechna čísla soudělná s m!

Soukromý klíč d příklad Je-li n v RSA rovno 33 a e = 3, hledáme d jako inverzi k e vůči násobení modulo ϕ(33) = 20, tj. chceme aby 3 d 1 (mod 20). Takové d existuje (d = 7), nebot 3 je nesoudělné s 20!!

Soukromý klíč d příklad Je-li n v RSA rovno 33 a e = 3, hledáme d jako inverzi k e vůči násobení modulo ϕ(33) = 20, tj. chceme aby 3 d 1 (mod 20). Takové d existuje (d = 7), nebot 3 je nesoudělné s 20!! Pro volbu e = 5 bychom takové d nenašli: 5 1 5 (mod 20), 5 2 10 (mod 20), 5 3 15 (mod 20), 5 4 0 (mod 20), 5 5 5 (mod 20)... tj. 5 nemá inverzi vzhledem k násobení modulo 20.

Soukromý klíč d příklad (pokrač.) Všechny volby e, pro které existuje inverze d jsou tyto: 1, 3, 7, 9, 11, 13, 17, 19. Tyto čísla s násobením modulo 20 tvoří grupu a jsou to jediné možné volby e pro RSA s n = 33. Inverze těchto prvků jsou e 1 3 7 9 11 13 17 19 d = e 1 1 7 3 9 11 17 13 19

Jak najít d, známe-li ϕ(n) Pro daný veřejný klíč k pub = (n, e) najdeme d pomocí (polynomiálního) EEA (rozšířený eukl. algoritmus): gcd(ϕ(n), e) = 1 = s ϕ(n) + t e, kde s a t dostaneme z EEA. Klademe d t (mod ϕ(n)).

Jak najít d, známe-li ϕ(n) Pro daný veřejný klíč k pub = (n, e) najdeme d pomocí (polynomiálního) EEA (rozšířený eukl. algoritmus): gcd(ϕ(n), e) = 1 = s ϕ(n) + t e, kde s a t dostaneme z EEA. Klademe d t (mod ϕ(n)). Tedy známe-li faktorizaci n = pq, snadno spočítáme ϕ(n) = (p 1)(q 1) a pomocí EEA i soukromý klíč d.

Jak najít d, neznáme-li ϕ(n) Neznáme-li ϕ(n), těžko spočítáme d. Naopak známe-li jej, získáme d snadno. Důležitá pro bezpečnost RSA je tedy násl. Otázka: Jak je složité zjistit hodnotu ϕ(n)?

Jak najít d, neznáme-li ϕ(n) Neznáme-li ϕ(n), těžko spočítáme d. Naopak známe-li jej, získáme d snadno. Důležitá pro bezpečnost RSA je tedy násl. Otázka: Jak je složité zjistit hodnotu ϕ(n)? Odpověd : Stejně složité, jako najít faktorizaci n. Důkaz. Známe-li faktorizaci n = pq, snadno spočítáme ϕ(n) = (p 1)(q 1).

Jak najít d, neznáme-li ϕ(n) Neznáme-li ϕ(n), těžko spočítáme d. Naopak známe-li jej, získáme d snadno. Důležitá pro bezpečnost RSA je tedy násl. Otázka: Jak je složité zjistit hodnotu ϕ(n)? Odpověd : Stejně složité, jako najít faktorizaci n. Důkaz. Známe-li faktorizaci n = pq, snadno spočítáme ϕ(n) = (p 1)(q 1). Známe-li hodnotu ϕ(n), dostávám pro p a q dvě rovnice: pq = n (p 1)(q 1) = pq (p + q) + 1 = ϕ(n) a z nich dostaneme snadno řešitelnou rovnici p 2 (n ϕ(n) + 1)p + n = 0.

Volba d v praxi Zatímco e může být zvolen krátký, aby se zkrátilo šifrování (= mocnění na e), d by měl být naopak dlouhý, aby odolal brute-force útokům. Doporučuje se alespoň třetina bitů čísla n, ale často se používá prostě srovnatelná délka. Dlouhé d ale zesložit uje dešifrování (= mocnění na d), existuje ale urychlující procedura založená na čínské větě o zbytcích (viz minulé přednášky).

Urychlení dešifrování čínská věta o zbytcích Věta (Čínská věta o zbytcích připomenutí) Necht n 1,..., n k jsou navzájem nesoudělná čísla a necht n = k i=1 n i. Pro libovolnou k-tici r 1 Z n1,..., r k Z nk existuje jednoznačně určený r Z n tak, že Platí r r i (mod n i ) for all i = 1,..., k. r = kde pro všechna i a j i k i=1 r i m i n n i (mod n) m i n n i 1 (mod n i ) a m i n n i 0 (mod n j ). Tzn. r lze spočítat v polynomiálním čase.

Urychlení dešifrování Počítáme x = y d (mod n). 1. najdi a podobně 2. vypočti y p y (mod p) a y q y (mod q), d p d (mod p 1) a d q d (mod q 1), x p y dp p (mod p) a x q y dq q (mod q), 3. platí kde x = (qc p )x p + (pc q )x q (mod n) c p q 1 (mod p) a c q p 1 (mod q).

Necht Urychlení dešifrování příklad p = 11, q = 13, n = 11 13, e = 7, d = 103. Zašifrovaný text je y = 15, máme a tedy y p = 4 15 (mod 11) a y q = 2 15 (mod 113), d p = 4 3 (mod 10) a d q = 7 103 (mod 12), x p = 9 4 3 y dp p (mod 11) a x q = 11 2 7 y dq q (mod q) a konečně c p = 13 1 2 1 6 (mod 11) a c p = 11 1 6 (mod 13) x (qc p )x p + (pc q )x q (13 6)9 + (11 6)11 141 (mod 143).

Urychlení dešifrování proč to funguje Použijeme čínskou větu o zbytcích pro n 1 = p, n 2 = q a pro r 1 = x p a r 2 = x q. Jistě dešifrovaná zpráva x splňuje x y d y k(p 1)+dp y dp x p (mod p) kde d = k(p 1) + d p. Využili jsme toho, že p je prvočíslo a tedy v multipl. grupě Z p je cokoli umocněno na p 1 rovno 1. Podobně se ukáže x x q (mod q) a tedy dešifrovaná zpráva hraje roli jednoznačně určeného r z čínské věty o zbytcích! A vzoreček pro výpočet r známe... (pořádně dorozmyslet!)

Urychlení dešifrování jak jsme to urychlili? Bud t počet bitů čísla n a tedy i d. V praxi se p a q volí cca t/2 bitové. Klasické použití S&M vyžaduje 1, 5t operací násobení a umocňování na 2. Pří použití urychlení, provádíme dvě umocnění x p y dp p (mod p) a x q y dq q (mod q), kde d p a d q mají cca t/2 bitů. Ostatní operace jsou vzhledem k tomuto mocnění zanedbatelné (nebo se dají předpočítat). Celkem tedy 2 1, 5 t 2 = 1, 5t. Tedy zdánlivě žádné zlepšení, ale násobení (se složitostí O(t 2 )) se provádí s o polovinu kratšími čísly, tedy výsledný čas je čtvrtinový! (opravdu se používá v praxi!!)

Dešifrování proč to funguje Věta Při volbě d popsané výše platí tj. RSA funguje. x y d (mod n),

Dešifrování proč to funguje Věta Při volbě d popsané výše platí tj. RSA funguje. x y d (mod n), Důkaz. Platí d e 1 (mod ϕ(n)), tedy d e = kϕ(n) + 1. První případ: je-li gcd(x, n) = 1, je dle Eulerovy věty x d e = x kϕ(n)+1 = x kϕ(n) x 1 x (mod n)

Dešifrování proč to funguje Důkaz. Platí d e 1 (mod ϕ(n)), tedy d e = kϕ(n) + 1. První případ: je-li gcd(x, n) = 1, je dle Eulerovy věty x d e = x kϕ(n)+1 = x kϕ(n) x 1 x (mod n) Druhý případ: je-li gcd(x, n) = gcd(x, p q) = 1, musí být x násobek p nebo q, necht x = r p a tedy gcd(x, q) = 1. Potom opět podle Eulerovy věty x ϕ(n)k = x (q 1)(p 1)k = (x ϕ(q) ) (p 1)k 1 (p 1)k (mod q), existuje tedy u Z tak, že x ϕ(n)k = 1 + u q a máme x d e = x x ϕ(n)k = x+x u q = x+r p u q = x+r u n x (mod n).

RSA shrnutí Ukázali jsme si: jak RSA funguje a jak musíme volit jeho parametry, že RSA funguje a proč, že všechny (matematické) útoky vyžadují faktorizaci n, nebo nějaký stejně složitý či ještě složitější úkon, jak urychlit šifrování (bezpečná volba malého e) a dešifrování (čínská věta o zbytcích).

Faktorizace n state of the art Díky obrovské rozšířenosti RSA se prudce navýšil zájem o problém faktorizace čísel na prvočíselný rozklad. Dokonce: RSA Laboratories vyhlásili RSA Factoring Challenge, kde můžete za faktorizaci jednoho n ze seznamu RSA-čísel získat slušné peníze. Poslední (12.12.2009) rozluštěné bylo číslo RSA-768 (768 bitů, 232 desetinných, 50 000 USD), využito ekvivalentu 2000 hodin single core 2.2 GHz AMD Opteron. [zdroj: wikipedia.org]

RSA poslední ingredience Poslední, co ještě neznáme a co nám chybí k tomu, abychom byli s to RSA implementovat, je nějaké efektivní generování velkých prvočísel p a q. Algoritmy, které si ukážeme, jsou pravděpodobnostní a fungují zhruba takto: 1. vyber náhodně číslo požadované velikosti, 2. otestuj jestli je to prvočíslo, 3. pokud ano, skonči, pokud ne, jdi zpět do kroku 1.

Testování prvočíselnosti obtížnost Řešíme dva spojené rozhodovací problémy PRIMALITY: je dané číslo prvočíslo? COMPOSITENESS: je dané číslo složené? Je snadno vidět, že COMPOSITENESS je NP a méně snadno se dá ukázat, že PRIMALITY je též NP. Z toho důvodu se neočekává, že by byli NP-úplné, spíše se věří, že obtížnost PRIMALITY je někde mezi P a NP-úplnými problémy.

Naivní přístup Pro dané číslo n: for k = 1,..., s 1. zvol náhodně a {2, 3,..., n 2}, 2. if gcd(a, n) 1, return n je složené return n je prvočíslo

Naivní přístup Pro dané číslo n: for k = 1,..., s 1. zvol náhodně a {2, 3,..., n 2}, 2. if gcd(a, n) 1, return n je složené return n je prvočíslo Analýza: Je-li výsledek n je složené, je n určitě složené číslo. Ovšem v případě výsledku n je prvočíslo se mohlo stát, že jsme ani jednou netrefili číslo soudělné se složeným n. Je-li n = p q, je čísel soudělných s n méně než p + q (násobky q plus násobky p) a tedy pravděpodobnost chyby je (p + q)/n 2/ n a to je příliš (s by muselo být obrovské).

Fermatův test myšlenka Díky Fermatově větě víme, že pro prvočíslo p a pro každé a {1,..., p 1} platí Fermatova kongruence a p 1 1 (mod p).

Fermatův test myšlenka Díky Fermatově větě víme, že pro prvočíslo p a pro každé a {1,..., p 1} platí Fermatova kongruence a p 1 1 (mod p). Bud nyní n libovolné číslo: Jistě platí, že pokud pak n je složené. a n 1 1 (mod n). Tj., kdyby byla relativně vysoká pravděpodobnost toho, že pro náh. vybrané a je Fermatova kongruence narušena, lze to použít jako klíčový krok pravděpodobnostního algoritmu.

Fermatův test algoritmus Algoritmus (Fermatův test) Input: číslo n, parametr s Output: n je složené nebo n je prvočíslo Algoritmus: (1) for k = 1,..., s (1.1) zvol náhodně a {2, 3,..., n 2}, (1.2) if a n 1 1 (mod n), return n je složené (2) return n je prvočíslo

Fermatův test Achillova pata Fermatův test funguje velmi dobře pro drtivou většinu n, ale existují bohužel čísla, pro která zcela selže: Definice Složené číslo n se nazývá Carmichaelovo, pokud pro všechna a nesoudělná s n. a n 1 1 (mod n)

Fermatův test Achillova pata Fermatův test funguje velmi dobře pro drtivou většinu n, ale existují bohužel čísla, pro která zcela selže: Definice Složené číslo n se nazývá Carmichaelovo, pokud pro všechna a nesoudělná s n. a n 1 1 (mod n) Pro Carmichaelova čísla Fermatův test selže, pokud (velkou) náhodou netrefíme a soudělné s n. Carmichaelových čísel je bohužel nekonečně mnoho, i když jsou velmi řídká: menších než 10 15 jich je cca 100 000.

Bez Carmichaelových čísel by to fungovalo... Označme množinu čísel nesoudělných s n jako Z n (je to mult. grupa!). Věta Bud n složené ne-carmichaelovo číslo. Potom počet čísel a Z n nesplňujících Fermatovu kongruenci je více než 0, 5 #Z n = 0, 5 ϕ(n).

Bez Carmichaelových čísel by to fungovalo... Označme množinu čísel nesoudělných s n jako Z n (je to mult. grupa!). Věta Bud n složené ne-carmichaelovo číslo. Potom počet čísel a Z n nesplňujících Fermatovu kongruenci je více než 0, 5 #Z n = 0, 5 ϕ(n). Důkaz. Označme F n = {a Z n a n 1 1 (mod n)}. Jistě F n Z n, jinak by n bylo Carmichaelovo nebo prvočíslo. Snadno se ukáže, že F n s násobením modulo n tvoří grupu a tedy i (vlastní) podgrupu Z n. Platí tedy, že řád F n dělí řád Z n a tedy musí být #Z n 2 a důkaz je hotov.

Fermatův test info Nebýt Carmichaelových čísel, byla by pravděpodobnost toho, že algoritmus vrátí n je prvočíslo pro n složené vždy menší než 2 s, n je složené je vždy správná odpověd, nejmenší Carmichaelovo číslo je 561 = 3 11 17, problém s Carmichaelovými čísly řeší Rabin-Millerův test...

Rabin-Miller myšlenka Věta Pro přirozené liché n označme čísla u a r tak, že n 1 = 2 u r (r liché). Pokud najdeme přirozené a takové, že a r 1 (mod n) a a r2j 1 (mod n) pro všechna j {0, 1,..., u 1}, je n složené. Jinak je n pravděpodobně prvočíslo. Jedná se o vylepšení kritéria daného Fermatovou větou, princip algoritmu zůstává stejný.

Rabin-Millerův test Algoritmus (Rabin-Millerův test) Input: číslo n, n 1 = 2 u r a parametr s Output: n je složené nebo n je prvočíslo Algoritmus: (1) for k = 1,..., s (1.1) zvol náhodně a {2, 3,..., n 2}, (1.2) z a r (mod n) (1.3) if z 1 and z n 1 for j = 0,..., u 1 z z 2 (mod n) if z = 1, return n je složené (1.5) if z = n 1, break % tj. začni s dalším náhodným a (2) return n je prvočíslo

Rabin-Millerův test příklad Bud n = 91 a tedy n 1 = 90 = 2 45. tj. r = 45 a u = 1. Volím náhodně a a počítám: 1. a = 12: z = 12 45 90 (mod 91) pokračuji 2. a = 17: z = 17 45 90 (mod 91) pokračuji 3. a = 38: z = 38 45 90 (mod 91) pokračuji 4. a = 39: z = 39 45 78 (mod 91) return n je složené

Rabin-Millerův test info n je složené je vždy správná odpověd, pravděpodobnost chybného výsledku n je prvočíslo pro n složené je (výrazně) menší než 4 n, Rabin-Millerův test může být zdeterminizován, pokud platí tzv. zobecněná Riemannova hypotéza (pak stačí projít cca 2(log n) 2 nejmenších a), i když se věří, že tato hypotéza platí, používá se v praxi pravděpodobnostní verze.

Odbočka Riemannova hypotéza Riemannova hypotéza je momentálně asi nejslavnější navyřešený matematický problém: Riemannova hypotéza: Všechny netriviální kořeny zeta-funkce ζ(s) = mají reálnou část 1/2. n=1 1 n s, s C \ {1}

Odbočka Riemannova hypotéza Riemannova hypotéza je momentálně asi nejslavnější navyřešený matematický problém: Riemannova hypotéza: Všechny netriviální kořeny zeta-funkce ζ(s) = mají reálnou část 1/2. n=1 1 n s, s C \ {1} Souvislost s prvočísly je dána Eulerovým výsledkem: ζ(s) = p prvoč. 1 1 p s.

Jacobiho symbol Definice (Legendrův symbol) Pro p prvočíslo 3 a a nenulové celé číslo klademe [ ] a = a p 1 2 (mod p). p

Jacobiho symbol Definice (Legendrův symbol) Pro p prvočíslo 3 a a nenulové celé číslo klademe [ ] a = a p 1 2 (mod p). p Zobecnění i pro složená čísla Definice (Jacobiho symbol) Pro n liché číslo s faktorizací n = p k 1 nesoudělné s n klademe [ a ] = n 1 pk 2 t [ ] a ki. i=1 p i 2 pk t t a pro a Steně jako pro Legendrův symbol platí, že hodnota Jacobiho

Vlastnosti Jacobiho symbolu Platí následující: 1. [ ] [ ab n = a ] [ n b ] n 2. pro a b (mod n) platí [ [ a n] = b ] n 3. Pro lichá a nesoudělná a a n platí [ a ] [ = ( 1) a 1 n 1 n 2 2 n a] 4. [ 1 n] = 1 5. [ 2 n ] = { 1 pro n 3 nebo 5 (mod 8) 1 pro n 1 nebo 7 (mod 8)

Výpočet Jacobiho symbolu Předchozí větu lze využít ke konstrukci polynomiálního algoritmu vyčíslujícího Jacobiho symbol. Example [ 191 ] 279 = ( 1) [ ] 279 191 = ( 1) [ ] 88 191 = ( 1) [ ] 2 3 [ 11 ] 191 191 = ( 1) 2 (+1) 3 [ ] 191 11 = [ ] 4 11 (3. vlastnost) (2. vlastnost) (1. vlastnost) (5. a 3. vlastnost) (2. vlastnost) = [ 2 11] 2 (1. vlastnost) = ( 1) 2 (5. vlastnost) = 1

Jacobiho symbol myšlenka Definice Pro liché číslo n definujeme množinu { [ a ] } J n = a Z n a n 1 2 (mod n) n Věta Platí: pro n prvočíslo je J n = Z n, pro n složené je #J n #Z n 1 2. Tedy opět můžeme zkonstruovat algoritmus s pravděpodobností chyby 2 s pro parametr s.

Jacobiho symbol algoritmus Algoritmus Input: číslo n, parametr s Output: n je složené nebo n je prvočíslo Algoritmus: (1) for k = 1,..., s (1.1) zvol náhodně a {2, 3,..., n 2}, (1.2) if gcd(a, n) 1, return n je složené (1.2) if [ ] n 1 a n a 2 (mod n), return n je složené (2) return n je prvočíslo

Testování prvočíselnosti obecně Problém: najděte prvočíslo velikosti cca 512 bitů. Obecné schéma: 1. vyber náhodně číslo n s příslušnou délkou, 2. použij nějaký z předchozích algoritmů ke zjištění, jestli je n (skoro jistě) prvočíslo, 3. pokud není, jdi zpět do 1. kroku. Zásadní otázka: jaká je pravděpodobnost, že v 1. kroku natrefím na prvočíslo?

Označme Rozložení prvočísel Platí: π(n) = počet prvočísel menších nebo rovných n. Věta (prime number theorem) lim n π(n) x/ ln x = 1 tj. π(n) se (pro velká n) chová jako n ln n. Ještě lepší aproximací π(n) je integrál logaritmu Li(n) = n d t.

Pravděpodobnost nalezení prvočísla Volíme-li náhodně liché číslo n, pak pravděpodobnost, že se jedná o prvočíslo, je P(n je prvočíslo) 2 ln n. Example Chceme-li najít prvočíslo dlouhé 512 bitů, dostaneme pravděpodobnost P(n je prvočíslo) 2 ln 2 512 1 177. Tedy můžeme čekat cca 177 běhů algoritmů pro testování prvočíselnosti. 177 je střední hodnota geometrického rozdělení pro pravděpodobnost 1/177.

Násobení n-místných celých čísel Problém: násobení dvou n-místných čísel x a y. Klasické násobení: Násobení vyžaduje vynásobit každou cifru čísla x s každou cifrou čísla y a pak provést n 1 součtů. Klasické sčítání čísel délky n vyžaduje zřejmě 2n operací. Proto má klasický algoritmus pro násobení časovou složitost O(n 2 ).

Karacubův algoritmus metoda Rozděl a panuj! Necht x, y jsou 2n místní čísla zapsané v desitkové soustavě: x = x 2n 1 x 2n 2... x 1 x 0 a y = y 2n 1 y 2n 2... y 1 y 0 Rozdělme je na úseky poloviční délky, zapsáno v decimální soustavě x = x 2n 1 10 2n 1 +... + x n 10 n }{{} + x n 1 10 } n 1 +... + x 1 10 + x {{ 0 } A 10 n B y = y 2n 1 10 2n 1 +... + y n 10 n }{{} + y n 1 10 } n 1 +... + y 1 10 + y {{ 0 } C 10 n D Pro součin platí x y = (A 10 n +B) (C 10 n +D) = AC 10 2n +(AD+BC) 10 n +BD

Karacubův algoritmus metoda Rozděl a panuj! x y = (A 10 n +B) (C 10 n +D) = AC 10 2n +(AD+BC) 10 n +BD Převedli jsme úlohu násobit 2n-místní čísla x y na 4 násobení AC, AD, BC a BD n-místních čísel. Potřebujeme provést jedno sčítání AD + BC. Další součty jsou časově nenáročné jedná se o součty u různých mocnin desítky. Pro součin AD + BC však taky platí x y = AC 10 2n + ( (A + B)(C + D) AC BD ) 10 n + BD Tedy provedeme nejdříve dvě sčítání A + B a C + D tři násobení AC, (A + B)(C + D) a BD. a pak dvě odčítání, abychom získali (A + B)(C + D) AC BD

Karacubův algoritmus složitost Oznčme počet T n počet kroků v Karacubově algoritmu. Sčítání vyžaduje Kn kroků pro n-místní čísla, kde K je konstanta nezávislá na n. Pro Karacubovo násobení dostaneme vztah T 2n = 3T n + 4Kn Věta Platí T n = O(n log 2 3 ).

Karacubův algoritmus výpočet složitosti Složitost vypočteme pomocí Master theoremu (mistrovská metoda): Věta (Master theorem) Necht ( n ) T (n) = at + f (n), kde a 1, b > 1. b Platí-li pro nějaké ɛ > 0 f (n) = O(n (log b a) ɛ ), potom T (n) = O(n log b a )

Karacubův algoritmus výpočet složitosti Pro nás platí a tedy T 2n = 3T n + 4Kn f (n) = 4Kn = O(n log b a ɛ), pro b = 2, a = 3, ɛ = (log 2 3) 1 znamená že T n = O(n log 2 3 ).

Bonusové přednáškové body Vymyslete polynomiální algoritmus pro výpočet Jacobiho symbolu a naprogramujte jej. Řešení i s (okomentovaným) zdrojákem a návodem jak to všechno zprovoznit mi pošlete na email karel.klouda@fit.cvut.cz

Literatura Ch. Paar a J. Pelzl, Understanding Cryptography vše o Diffie-Hellmanovi a AES a mnohé o konečných tělesech R. Montowani a P. Raghavan, Randomized algorithms pravděpodobnostní algoritmy nejen grafové