Skip to content
Snippets Groups Projects
Commit 34c279b1 authored by Martin Mareš's avatar Martin Mareš
Browse files

První kousky teorie čísel

parent 46a002e5
Branches
No related tags found
No related merge requests found
TOP=..
include ../Makerules
\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$\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$$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
...@@ -146,11 +146,19 @@ ...@@ -146,11 +146,19 @@
% Konkatenace % Konkatenace
\def\concat{\mathop{\Vert}} \def\concat{\mathop{\Vert}}
% Prirozena a realna cisla % Číselné obory
\def\N{{\bb N}} \def\N{{\bb N}}
\def\R{{\bb R}} \def\R{{\bb R}}
\def\Z{{\bb Z}} \def\Z{{\bb Z}}
\def\Q{{\bb Q}}
% Teorie čísel
\def\Zp{{\bb Z}_p} \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 % Komplexni cisla
\def\C{{\bb C}} \def\C{{\bb C}}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment