diff --git a/07-teorie-cisel/Makefile b/07-teorie-cisel/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..ba6c63ec5ded7d730418a9f14feceb7ebe02fa5e --- /dev/null +++ b/07-teorie-cisel/Makefile @@ -0,0 +1,3 @@ +TOP=.. + +include ../Makerules diff --git a/07-teorie-cisel/teorie-cisel.tex b/07-teorie-cisel/teorie-cisel.tex new file mode 100644 index 0000000000000000000000000000000000000000..35500c34ff1495c927723fb7a71b897bedd2d113 --- /dev/null +++ b/07-teorie-cisel/teorie-cisel.tex @@ -0,0 +1,317 @@ +\ifx\chapter\undefined +\input adsmac.tex +\singlechapter{7} +\fi + +\chapter[numth]{Teorie čísel} + +Nejběžnější asymetrické šifry a podpisy jsou založené na teorii čísel. +V~této kapitole si pro to připravíme půdu a potřebné části teorie čísel +vybudujeme. Budeme předpokládat, že čtenář už zná základy obecné algebry +(grupy, okruhy, tělesa). + +Nejprve připomeneme základní značení: + +\list{o} +\:Čísly budeme v~této kapitole obvykle myslet čísla celá. Pokud nebude + hrozit nedorozumění, budeme jim říkat prostě \em{čísla.} +\:$p$ a~$q$ budou typicky značit \em{prvočísla.} +\:$x\divs y$ značí, že číslo~$x$ je \em{dělitelem} čísla~$y$, tedy že existuje + $d$ takové, že $y=xd$. +\:$\gcd(x,y)$ je \em{největší společný dělitel} $x$ a~$y$.\foot{Zkratka podle + anglického \em{greatest common divisor.}} + Případu $x=y=0$ se chceme vyhnout, protože tam je každé číslo společným dělitelem. +\:$x\perp y$ značí, že $x$ a $y$ jsou \em{nesoudělná,} tedy $\gcd(x,y)=1$. +\:$x\equiv y\pmod n$ je \em{kongruence modulo~$n>0$,} která znamená, že $x$ a~$y$ + dávají stejný zbytek modulo~$n$. To je totéž, jako že $n\divs (x-y)$. + Pokud bude z~kontextu jasné, modulo čím počítáme, budeme psát prostě $x\equiv y$. +\endlist + +\section{Základní aritmetické algoritmy} + +Většinou nás bude zajímat nejen to, jak k~danému výsledku dojít, ale také jak rychle to dokážeme. +Zopakujme si proto složitost základních operací s~čísly vzhledem k~jejich délce~$b$ v~bitech: + +\list{o} +\:\em{Sčítání a odčítání} zvládneme v~čase $\O(b)$ algoritmem \uv{sčítání pod sebou} ze základní školy. +\:\em{Násobení} algoritmem ze základní školy trvá $\O(b^2)$, existují i efektivnější algoritmy -- + Karacubův-Ofmanův v~čase $\O(b^{1.59})$, použitím FFT dokonce v~$\O(b)$. Nám bude stačit $\O(b^2)$. +\:\em{Dělení se zbytkem} buď algoritmem ze základní školy v~čase $\O(b^2)$, nebo Newtonovou + iterací -- pokud násobíme v~čase $\O(b^{1+\varepsilon})$, trvá dělení také $\O(b^{1+\varepsilon})$; + pokud násobíme v~lineárním čase, trvá dělení $\O(b\log b)$. Každopádně nám bude stačit $\O(b^2)$. +\:\em{Modulární umocňování} $x^y \bmod n$ počítáme rekurzivním algoritmem: + pro $y$ sudé počítáme $(x^{y/2})^2$, pro $y$ liché $(x^{(y-1)/2})^2\cdot x$, vše modulo~$n$. + Kroků rekurze je $\log n\le b$, každý nás stojí $\O(1)$ aritmetických operací v~čase $\O(b^2)$. + Celkem tedy $\O(b^3)$. +\endlist + +\subsection{Euklidův algoritmus} + +K~výpočtu $\gcd(x,y)$ můžeme používat Euklidův algoritmus. Jeho základní varianta +opakovaně odečítá menší číslo od většího, než se vyrovnají. Vylepšená varianta místo +opakovaného odčítání počítá zbytek po dělení. + +Základní varianta je pomalá (představte si chování pro $x=10^9$, $y=1$). +Vylepšená varianta doběhne v~$\O(\log(\min(x,y))) \subseteq \O(b)$ krocích, +důkaz najdete například v~Průvodci labyrintem algoritmů. +Jeden krok přitom trvá $\O(b^2)$, takže celý algoritmus $\O(b^3)$. +Pečlivější analýzou, která bude brát v~úvahu, jak se během výpočtu vyvíjí velikosti +čísel, můžeme získat odhad $\O(b^2)$. + +Často se nám bude hodit \em{rozšířený Euklidův algoritmus,} který získáme následovně. + +\lemma{ +Všechny mezivýsledky v~Euklidově algoritmu jsou lineární kombinace vstupu~$x$ a~$y$. +Koeficienty této lineární kombinace můžeme během výpočtu udržovat bez asymptotického +zpomalení. +} + +\proof +Pro základní variantu algoritmu to snadno dokážeme indukcí podle počtu kroků. +Označíme $x'$ a $y'$ pracovní proměnné algoritmu. Na začátku je $x'=1\cdot x + 0\cdot y$ +a $y'=0\cdot x + 1\cdot y$. Kdykoliv odečteme od $x'=\alpha x + \beta y$ proměnnou +$y'=\gamma x + \delta y$, získáme $x-y = (\alpha-\gamma)x + (\beta-\delta)y$. + +Jeden krok vylepšené varianty je zkratkou za více kroků varianty základní. +Počítáme-li $x'\bmod y'$ pro $x'=\alpha x + \beta y$ a $y'=\gamma x + \delta y$, +provádíme vlastně $d=\lfloor x'/y'\rfloor$ odečtení $y'$ od~$x'$. Výsledek tedy bude +$(\alpha-d\gamma)x + (\beta-d\delta y)$. +\qed + +Finální výsledek $\gcd(x,y)$ je ovšem jedním z~mezivýsledků, takže dostáváme: + +\corr{ +Rozšířený Euklidův algoritmus v~čase $\O(b^2)$ spočítá $\gcd(x,y)$ a čísla $\alpha$ a~$\beta$ +taková, že $\gcd(x,y) = \alpha x + \beta y$. Těmto číslům se říká \em{Bèzoutovy +koeficienty.} +} + +\section{Algebraické minimum} + +V~tomto oddílu připomeneme základní pojmy z~obecné algebry. + +\defn{ +\em{Algebra} je tvořena nosnou množinou spolu s~nějakými operacemi. \hbox{$k$-ární} operací nazýváme +funkci, která $k$-ticím prvků z~nosné množiny přiřazuje opět prvky nosné množiny. Nulární operace +jsou {\I konstanty.} +} + +\defn{ +\em{Homomorfismus} mezi algebrami stejného typu (s~odpovídajícími si operacemi) je zobrazení +mezi jejich nosnými množinami, které je kompatibilní s~operacemi. Tedy $f(a+b) = f(a) + f(b)$ apod. +Pokud je zobrazení navíc bijektivní, mluvíme o~\em{izomorfismu.} +} + +\subsection{Grupy} + +\defn{ +\list{o} +\def\1{{\bf 1}} +\:\em{Grupa} je algebra $(G,\cdot,\1,{}\inv)$, kde $G$ je nosná množina, +$\cdot$ binární operace nad $G$, \1~konstanta, ${}\inv$ unární operace nad~$G$ +a platí následující axiomy: + \tightlist{n.} + \:$(a\cdot b)\cdot c = a\cdot (b\cdot c)$ {\quad \I (asociativita)} + \:$a\cdot \1 = a$ {\quad \I (prvek \/\1 je jednotkový)} + \:$a\cdot (a\inv)=(a^{\-1}\cdot a)=\1$ \em{($a\inv$ je prvek inverzní k~$a$)} + \endlist +\:V~\em{komutativní grupě} navíc platí $a\cdot b = b\cdot a$ \em{(komutativita)}. +\:$(H,\cdot,\1,{}\inv)$ je \em{podgrupou} grupy $(G,\cdot,\1,{}\inv)$ právě tehdy, když $H\subseteq G$ + a množina $H$ je uzavřená na~všechny tři operace (tj. provedeme-li operaci s~prvky z~$H$, musí opět + vyjít prvek z~$H$). $(H,\cdot,\1,{}\inv)$ je pak také grupou. +\:\em{Řád grupy} říkáme počtu prvků její nosné množiny. Značíme ho~$|G|$. +\:Pro prvek~$a$ a číslo $n\in\Z$ dále definujeme \em{mocninu} takto: $a^0=\1$, $a^{n+1}=a^n\cdot a$, $a^{n-1}=a^n\cdot a\inv$. + Platí obvyklé vlastnosti mocniny: $a^{m+n} = a^m \cdot a^n$, $a^{mn}=(a^m)^n$, $a^{-n} = (a^n)\inv$ apod. +\:Prvku $g$ říkáme \em{generátor} grupy, jestliže se každý prvek nosné množiny dá vyjádřit jako nějaká mocnina~$g$. + Grupa je \em{cyklická,} pokud má generátor. +\:Pro libovolný prvek~$a$ je $\{ a^n \mid n\in\Z \}$ cyklická podgrupa. \em{Řád prvku~$a$} definujeme jako řád této podgrupy. +\endlist +} + +\examples{ +\list{o} +\:$(\Z,+,0,-)$ (celá čísla spolu s~obvyklým sčítáním, nulou a změnou znaménka) tvoří cyklickou grupu (generátory +jsou 1 a $-1$). +\:$(2\Z,+,0,-)$ (sudá celá čísla spolu s~obvyklým sčítáním, nulou a změnou znaménka) tvoří podgrupu předchozí grupy, +která je také cyklická (rozmyslete si, že každá podgrupa cyklické grupy je cyklická), +\:$(\Z_n,+_{\bmod n},0,-)$ (čísla 0, 1, \dots, $n-1$ spolu se sčítáním modulo~$n$, nulou a změnou +znaménka) tvoří cyklickou grupu (generátorem je třeba~1; které jsou další?), +\:$({\bb Q},\cdot,1,?)$ (racionální čísla s~násobením) nemohou tvořit grupu, jelikož k~nule neexistuje inverzní prvek, +\:$({\bb Q}-\{0\},\cdot,1,1/x)$ (racionální čísla bez nuly s~násobením a převrácenou hodnotou) grupu tvoří, +není cyklická. +\:$(\Z_n-\{0\},\cdot_{\bmod n},?)$ (čísla 1\dots$n-1$ s~násobením modulo~$n$) pro některá $n$ grupou je, +pro jiná není, protože obecně nemusí existovat inverzní prvky. Za chvíli prozkoumáme, jak to přesně je. +\endlist +} + +\obs{ +Konečná cyklická grupa řádu~$n$ je vždy izomorfní se~$\Zn$, nekonečná je izomorfní se~$\Z$. +Je-li $g$ generátor, funkce $x \mapsto g^x$ je izomorfismem. +} + +\claimn{Langrangeova věta}{ +Pokud má konečná grupa $G$ nějakou podgrupu $H$, platí $|H| \divs |G|$. +} + +\subsection{Okruhy a tělesa} + +\defn{ +\list{o} +\def\0{{\bf 0}} +\def\1{{\bf 1}} +\:\em{Okruh} je algebra $(R,+,\cdot,\0,\1,-)$, kde: + + \tightlist{o} + \:$R$ je nosná množina. + \:$+$ a~$\cdot$ jsou binární operace, $\0$ a~$\1$ konstanty, $-$~je unární operace. + \:$(R,+,\0,-)$ je komutativní grupa (aditivní grupa okruhu). + \:Operace~$\cdot$ je komutativní a asociativní. + \:$a\1 = \1a = a$ pro všechna~$a$. + \:$(a+b)\cdot c = a\cdot c + b\cdot c$ \quad\em{(distributivita)}. + \endlist + + Algebraikové někdy připouští nekomutativní okruhy (s~nekomutativní operací~$+$), + naše okruhy budou vždy komutativní. + +\:Prvek $a\in R$ má \em{multiplikativní inverzi} $a\inv$, pokud platí $a\cdot a\inv = \1$. + Pokud multiplikativní inverze existuje, je jednoznačně určena. + +\:\em{Těleso} je okruh, v~němž má každý prvek $a\ne\0$ multiplikativní inverzi~$a\inv$. + Tedy $(R\setminus\{\0\},\cdot,\1,{}\inv)$ tvoří komutativní grupu. + Přitom ${}\inv$ považujeme za další unární operaci algebry, kterou musí zachovávat morfismy + (nenecháme se zmást tím, že pro~$\0$ není definovaná; třeba ji pevně dodefinujeme jako~$\0$). + +\endlist +} + +\examples{ +\list{o} +\:$(\Z,+,\cdot,0,1,-)$ (celá čísla spolu s~obvyklými operacemi) tvoří okruh, který není tělesem +(žádný prvek kromě~$\pm 1$ není invertibilní). +\:$(\Q,+,\cdot,0,1,-)$ (racionální čísla spolu s~obvyklými operacemi) tvoří těleso. +\:$(\R,+,\cdot,0,1,-)$ (reálná čísla spolu s~obvyklými operacemi) tvoří těleso. +\:$(\Z_n,+,\cdot,0,1,-)$ (čísla $\{0,\ldots,n-1\}$ se sčítáním, odčítáním a násobením modulo~$n$) +je také okruh, časem prozkoumáme, pro která~$n$ tvoří těleso. +\:$(\{0,1\},\oplus,\land,0,1,\<id>)$ (kde~$\oplus$ je \XOR) je okruh izomorfní se~$\Z_2$, +dokonce je to těleso. +\endlist +} + +\section{Počítání modulo n} + +\subsection{Invertibilní prvky} + +Okruh~$\Zn$ není vždy těleso -- často mu chybí inverzní prvky vzhledem k~násobení. + +\defn{ +\em{Multiplikativní inverze} čísla~$x\in\Zn$ je $x\inv\in\Zn$ takové, že $xx\inv\equiv 1$. +Číslo~$x$ je \em{invertibilní,} pokud má multiplikativní inverzi. +} + +\example{ +V~okruhu $\Z_6$ jsou čísla 1 a~$5\equiv -1$ invertibilní, protože +$1\cdot 1\equiv 1$ a $5\cdot 5\equiv 1$. Ostatní čísla invertibilní +nejsou: například každý násobek~2 je sudý, což je modulo~6 stále sudé, +takže to nemůže být~1. Naproti tomu v~$\Z_5$ jsou všechna nenulová +čísla invertibilní: $1\cdot 1\equiv 2\cdot 3\equiv 3\cdot 2\equiv 4\cdot 4\equiv 1$. +} + +Invertibilní prvky můžeme snadno charakterizovat: + +\lemma{ +$a\in\Zn$ je invertibilní právě tehdy, když $a\perp n$. +} + +\proof +Pro dané~$a$ hledáme~$x$ takové, že $ax\equiv 1$. Tedy $ax$ se liší od~1 +o~nějaký násobek~$n$. To znamená, že existuje $y$ takové, že $ax+ny=1$. +Pokud $\gcd(a,n)=1$, můžeme takové $x$ a~$y$ snadno najít -- jsou to totiž +Bèzoutovy koeficienty. Je-li naopak $\gcd(a,n) = d>1$, budou jak $ax$, +tak $ny$ násobky~$d$, takže bude násobkem~$d$ i $ax+ny$, zatímco 1 nikdy +není násobkem~$d$. +\qed + +\corr{ +Rozšířeným Euklidovým algoritmem můžeme v~čase $\O(b^2)$ rozhodnout, +zda multiplikativní inverze existuje, a~dokonce ji i najít. +} + +\defn{ +$\Zsn = \{x\in\Zn \mid x\perp n\}$ je množina všech invertibilních prvků ze~$\Zn$. +Spolu s~násobením modulo~$n$ a jednotkovým prvkem~1 tvoří +\em{multiplikativní grupu modulo~$n$.} +Její řád (počet prvků) udává \em{Eulerova funkce} $\varphi(n) = \vert\Zsn\vert$. +} + +Ověřme, že se opravdu jedná o~grupu. Musíme ukázat, že množina~$\Zsn$ je uzavřená +na všechny grupové operace: + +\tightlist{(n)} +\:Pro $x$ a~$y$ invertibilní je $xy$ též invertibilní. Jelikož $(xy)(y\inv x\inv) \equiv x1x\inv \equiv 1$, +máme $(xy)\inv = y\inv x\inv$. +\:$x\inv$ je invertibilní, jeho inverzí je zpět~$x$. +\:Prvek~1 je invertibilní, neboť $1\cdot 1\equiv 1$. +\endlist + +\corr{ +Počítáme-li modulo prvočíslo~$p$, pak všechna nenulová $x\in\Zp$ jsou +nesoudělná s~$p$, a~tedy invertibilní. +Proto $\Zsp = \{1,\ldots,p-1\}$ a $\varphi(p)=p-1$. +Z~toho plyne, že $\Zp$ je nejen okruh, ale dokonce těleso. +Sčítání, odčítání, násobení i dělení v~tomto tělese můžeme počítat v~čase $\O(b^2)$. +} + +\subsection{Malá Fermatova a Eulerova věta} + +\theoremn{malá Fermatova}{ +Pro každé prvočíslo~$p$ a číslo $x\perp p$ platí $x^{p-1}\equiv 1\pmod p$. +} + +\corr{ +$x^{p-2}\bmod p$ je multiplikativní inverze~$x$ modulo~$p$, neboť $x\cdot x^{p-2} \equiv x^{p-1} \equiv 1$. +} + +Malou Fermatovu větu nebudeme dokazovat přímo, plyne totiž z~následující +obecnější věty díky tomu, že pro prvočísla platí $\varphi(p) = p-1$. + +\theoremn{Eulerova}{ +Pro každé $n>1$ a $x\perp p$ platí $x^{\varphi(n)}\equiv 1\pmod n$. +} + +\proof +Uvažme množinu $H = \{x^0, x^1, x^2, \ldots\}$ (násobíme modulo~$n$). +Jelikož~$x$ je invertibilní prvek a ty jsou uzavřené na násobení, +je~$H$ podmnožínou~$\Zsn$. Dokážeme, že je dokonce podgrupou. + +Jelikož $x^i$ mohou nabývat jen konečně mnoha hodnot, musí se nějaká +hodnota zopakovat. Uvažme první takové opakování, tedy nejmenší~$j$ +takové, že $x^j$ je rovno nějakému $x^i$ pro $i<j$. Všimneme si, +že prvek, který se zopakoval, musí být~$x^0=1$. Kdyby tomu tak nebylo, +pak je $x^{j-i}=1$, takže~1 se zopakovala dřív. +Máme tedy $x^j = 1$, mocniny $x^0$ až $x^{j-1}$ jsou navzájem různé, +a~proto $|H| = j$. + +Nyní si všimneme, že množina~$H$ je uzavřená na násobení: +$x^a \cdot x^b \equiv x^{a+b}$. Je-li $a+b < j$, pak $x^{a+b}$ leží v~$H$. +Jinak je $x^{a+b} \equiv x^j \cdot x^{a+b-j}$, jenže $x^j\equiv 1$ +a $a+b-j < j$, takže $x^{a+b}$ opět leží v~$H$. +Podobně nahlédneme, že $H$ je uzavřená na inverzní prvky: +inverzním prvkem k~$x^a$ je $x^{j-a}$. + +Teď už víme, že $H$ je podgrupou~$\Zsn$, a~můžeme použít Lagrangeovu +větu. Podle ní platí $|H| \divs |\Zsn|$, tedy $j \divs \varphi(n)$. +Tím pádem je $\varphi(n) = jk$ pro nějaké~$k$, takže můžeme psát +$x^{\varphi(n)} \equiv x^{jk} \equiv (x^j)^k \equiv 1^k \equiv 1$. +\qed + +\subsection{Činská věta o~zbytcích} + +\subsection{Eulerova funkce} + +\section{Faktorizace versus prvočíselnost} + +\section{Diskrétní logaritmy} + +\section{Diskrétní odmocniny} + +\endchapter diff --git a/tex/adsmac.tex b/tex/adsmac.tex index 470c75f82a3ca34d7a8c97c21c45db204ef97d73..0a53e75ffe8773c89bc29a0cb93a23b31dad0d0d 100644 --- a/tex/adsmac.tex +++ b/tex/adsmac.tex @@ -146,11 +146,19 @@ % Konkatenace \def\concat{\mathop{\Vert}} -% Prirozena a realna cisla +% Číselné obory \def\N{{\bb N}} \def\R{{\bb R}} \def\Z{{\bb Z}} +\def\Q{{\bb Q}} + +% Teorie čísel \def\Zp{{\bb Z}_p} +\def\Zsp{{\bb Z}^*_p} +\def\Zn{{\bb Z}_n} +\def\Zsn{{\bb Z}^*_p} +\def\divs{\mathbin\backslash} +\def\inv{^{-1}} % Komplexni cisla \def\C{{\bb C}}