From 2ff34b7720a6e1d89548577e3b92edbeadcada7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?k=C3=A1men=20u=20cesty?= <79706070+kamen-u-cesty@users.noreply.github.com> Date: Tue, 23 May 2023 22:01:10 +0200 Subject: [PATCH] =?UTF-8?q?MPC-KRY:=20Dopln=C4=9Bn=C3=AD=20a=20roz=C5=A1?= =?UTF-8?q?=C3=AD=C5=99en=C3=AD=20ot=C3=A1zek=203+4+9+10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MPC-KRY/img/sha-construction.png | Bin 0 -> 49934 bytes MPC-KRY/img/sponge-construction.png | Bin 0 -> 24378 bytes MPC-KRY/main.tex | 2 +- MPC-KRY/text.tex | 487 +++++++++++++--------------- 4 files changed, 226 insertions(+), 263 deletions(-) create mode 100644 MPC-KRY/img/sha-construction.png create mode 100644 MPC-KRY/img/sponge-construction.png diff --git a/MPC-KRY/img/sha-construction.png b/MPC-KRY/img/sha-construction.png new file mode 100644 index 0000000000000000000000000000000000000000..ebab8136950b266cc8c12accdbc8f55dde24e232 GIT binary patch literal 49934 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 literal 0 HcmV?d00001 diff --git a/MPC-KRY/img/sponge-construction.png b/MPC-KRY/img/sponge-construction.png new file mode 100644 index 0000000000000000000000000000000000000000..c09e8e203cfe39f98b0d600741629bd36ff6e5d2 GIT binary patch literal 24378 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 B;|2f# literal 0 HcmV?d00001 diff --git a/MPC-KRY/main.tex b/MPC-KRY/main.tex index 9ded7b4..6f41027 100644 --- a/MPC-KRY/main.tex +++ b/MPC-KRY/main.tex @@ -3,7 +3,7 @@ % Pokud jste přidali otázku nebo její část, přidejte své jméno sem \newcommand{\authors}{Surtura, kámen u~cesty, dikubi} % Pokud jste opravili gramatickou, logickou nebo formátovací chybu, přidejte své jméno sem -\newcommand{\corrections}{--} +\newcommand{\corrections}{kámen u~cesty} \input{../shared} diff --git a/MPC-KRY/text.tex b/MPC-KRY/text.tex index c74704b..2ae3438 100644 --- a/MPC-KRY/text.tex +++ b/MPC-KRY/text.tex @@ -93,166 +93,144 @@ \subsection{Mechanismy} \clearpage -\section{Kryptograficky bezpečné generátory náhodných čísel –- požadavky, hodnocení bezpečnosti, příklady realizace.} +\section{Kryptograficky bezpečné generátory náhodných čísel: požadavky, hodnocení bezpečnosti, příklady realizace.} + \subsection{Požadavky} -\begin{itemize} - \item \uline{Next-bit test} -- je-li známo prvních $k$ bitů náhodné posloupnosti, neexistuje žádný algoritmus s~polynomiální složitostí, který by dokázal předpovědět $(k + 1)$ bit s~pravděpodobností vyšší než 1/2. - \item \uline{State compromise} -- i~když je zjištěn vnitřní stav generátoru (celý nebo z~části), nelze zpětně zrekonstruovat dosavadní vygenerovanou posloupnost. Navíc, pokud do~generátoru za~běhu vstupuje další entrope, nemělo by být možné ze~znalosti vnitřního stavu předpovědět vnitřní stav v~následujících iteracích - \item vetšina používaných PRNG tyto požadavky splňuje jen za~určitých podmínek -\end{itemize} + +\uline{Next-bit test}: je-li známo prvních $k$ bitů náhodné posloupnosti, neexistuje žádný algoritmus s~polynomiální složitostí, který by dokázal předpovědět $(k + 1)$ bit s~pravděpodobností vyšší než 1/2. + +\uline{State compromise}: i~když je zjištěn vnitřní stav generátoru (celý nebo z~části), nelze zpětně zrekonstruovat dosavadní vygenerovanou posloupnost. +Navíc, pokud do~generátoru za~běhu vstupuje další entrope, nemělo by být možné ze~znalosti vnitřního stavu předpovědět vnitřní stav v~následujících iteracích. + +Vetšina používaných PRNG tyto požadavky splňuje jen za~určitých podmínek. \subsection{Hodnocení bezpečnosti} -Entropie -\begin{itemize} - \item veličina entropie popisuje míru náhodnosti -- jak obtížné je hodnotu (náhodné číslo, náhodnou posloupnost, řetězec náhodných bitů) uhodnout - \item míra nejistoty (nepředvídatelnosti) hodnoty a závisí na~pravděpodobnostech možných výsledků procesu, který ji generuje - \item dána vztahem: -\end{itemize} -\begin{align*} - H(X) = - \displaystyle\sum\limits_{i-1}^n p_{i} \log_2 p_{i} -\end{align*} -\begin{itemize} - \item X - generovaná hodnota - \item $p_{1},..., p_{n}$ - pravděpodobnosti všech hodnot $X_{1},..., X_{n}$, které je daný generátor schopen vygenerovat - \item vztahuje se k~útočníkovu a jeho schopnosti předpovídat vygenerovanou hodnotu -- pokud útočník následující generovanou hodnotu s~jistotou zná, entropie je nulová = nulová bezpečnosti aplikace, která takto vygenerovanou náhodnou hodnotu využívá - \item vyjadřuje průměrný počet bitů nutných k~zakódování hodnoty při~použití optimálního kódování - \item vyjadřuje obsažené množství informace vyjádřené v~bitech - \item entropie generátoru je maximální, pokud se pro~danou délku (počet bitů) generují všechny možné posloupnosti, každá z~nich se stejnou pravděpodobností -\end{itemize} + +Entropie je veličina popisující míru náhodnosti: jak obtížné je hodnotu (číslo, posloupnost) uhodnout. +Míra nejistoty (nepředvídatelnosti) závisí na~pravděpodobnostech možných výsledků procesu který ji generuje. + +Je~dána vztahem +$$H(X) = -\sum_{i-1}^n p_{i} \log_2 p_{i}$$ +kde +$X$ je generovaná hodnota, +$p_1, \dots, p_n$ jsou pravděpodobnosti hodnot $X_1, \dots, X_n$ které je daný generátor schopen vygenerovat. + +Hodnota entropie vyjadřuje obsažené množství informace v~bitech. +Vztahuje se ke~schopnosti útočníka předpovídat vygenerovanou hodnotu: pokud ji zná s~jistotou, entropie je nulová. +Naopak má generátor entropii maximální tehdy, pokud se pro~danou délku výstupu generují všechny možné posloupnosti, každá se~stejnou pravděpodobností. + +% TODO Statistické testy? Obrázky period? + \subsection{Příklady realizace} -Generátor pseudonáhodných čísel (PRNG) -\begin{itemize} - \item algoritmicky řešení generátory, využívají výpočetních / SW metod - \item základní problém -- jakýkoliv v současnosti existující program je deterministický = existuje pouze jedna možnost, jak k~výsledku dojít - \item možnost se může jevit náhodná, ale není - \item pro~člověka pouze není snadné zjistit, jakým způsobem byla vytvořena - \item výhody: rychlé, snadno realizovatelné, lze nastavit odchylku rozložení - \item nevýhody: malá bezpečnost, periodicita -\end{itemize} -Kryptograficky bezpečené PRNG \begin{itemize} - \item pokud PRNG splňuje určité požadavky $\rightarrow$ považujeme na~kryptograficky bezpečné - \item vyžadují náhodný a tajný vstup (\emph{seed}) -- nelze se tedy obejít bez \enquote{skutečné náhody} - \item kvalita závisí na~kvalitě generování hodnoty \emph{seed} - \item entropie výstupu PRNG je dána entropií, která vstupuje (\emph{seed}), algoritmus samotný nikdy nemůže entropii zvyšovat - \item zdroj entropie např.: sběr událostí z~pohybu myši, klávesnice, HD a některých přerušení (Linux PRNG) - \item podmínky: - \begin{itemize} - \item Next-bit test - \item State compromise - \end{itemize} - \item příklady: - \begin{itemize} - \item bloková šifra v~režimu čítače -- náhodně se zvolí klíč / seed a počáteční hodnota čítače $i$. Zvoleným klíčem se postupně šifrují hodnoty $i$, $i+1$, atd. dokud nedojde k~překročení velikosti bloku -- perioda - \item hashovací funkce aplikovaná na~čítač -- náhodně se zvolí počáteční hodnota čítače $i$. Postupně se hashují hodnoty $i$, $i+1$ atd. Nesmí dojít k prozrazení počáteční hodnoty čítače - \item proudové šifry -- v~zásadě PRNG, s~jehož výstupem se provádí XOR s~otevřeným textem - \item algoritmy založené na~teorii čísel -- u~kterých byl proveden důkaz bezpečnosti - \end{itemize} + \item + Bloková šifra v~režimu čítače: náhodně se zvolí klíč (\emph{seed}) a~počáteční hodnota čítače $i$. + Zvoleným klíčem se postupně šifrují hodnoty $i$, $i+1$, atd. dokud nedojde k~překročení velikosti bloku (perioda). + \item + Hashovací funkce aplikovaná na~čítač: náhodně se zvolí počáteční hodnota čítače $i$. + Postupně se hashují hodnoty $i$, $i+1$ atd. + Nesmí dojít k prozrazení počáteční hodnoty čítače. + \item + Proudové šifry jsou v~zásadě PRNG, s~jehož výstupem se provádí XOR s~otevřeným textem. + \item + Algoritmy založené na~teorii čísel: specializované algoritmy generování u~kterých byl proveden důkaz bezpečnosti. \end{itemize} -Generátory skutečně náhodných čísel (TRNG) -\begin{itemize} - \item využívající fyzikální / HW metody - \item zdroj entropie -- klasický nebo kvantový fyzikální jev - \item výhody: vysoká bezpečnost, neopakovatelnost - \item nevýhody: pomalé, problémy s~realizací, ne vždy lze dosáhnout maximálně rovnoměrného rozložení -\end{itemize} +\subsubsection{Pseudonáhodné generátory} + +PRNG (\emph{Pseudorandom Number Generators}) jsou definované algoritmicky a~tedy i~deterministicky, a~náhodnost výsledku je tedy pouze zdánlivá. +Mezi jejich výhody patří velká rychlost, lehká realizovatelnost a dobrá nastavitelnost odchylky rozložení; jsou ale málo bezpečné a periodické. + + +\subsubsection{Kryptograficky bezpečné genrátory} + +Kryptograficky bezpečné genrátory vyžadují pro~generování výstupu skutečně náhodné vstupy (\emph{seed}), na~kterých závisí kvalita výstupu. +V~moderních operačních systémech (Linux) jde např. o~sběr událostí z~pohybu myši a~klávesnice, prodlevy pevných disků a některých přerušeních. + + +\subsubsection{Generátory skutečně náhodných čísel} + +TRNG (\emph{True Random Number Generators}) využívají fyzikální nebo hardwarové metody získávání vstupu. +Zdroje entropie jsou klasické nebo kvantové fyzikální jevy. +Mezi jejich výhody patří vysoká bezpečnost a neopakovatelnost; jsou ale pomalé, těžko realizovatelné a ne vždy je možné dostáhnout plně rovnoměrného rozložení. \clearpage -\section{Hašovací funkce, formální definice, požadované vlastnosti, hodnocení bezpečnosti, příklady algoritmů a použití.} +\section{Hašovací funkce: formální definice, požadované vlastnosti, hodnocení bezpečnosti, příklady algoritmů a použití.} -\begin{itemize} - \item hašovací funkce je matematická funkce (resp. algoritmus) pro~převod vstupních dat do~malého čísla - \item formálně jde o~funkci $h$, která převádí vstupní posloupnost bitů na~posloupnost pevné délky $n$ bitů - \item použití: - \begin{itemize} - \item tvorba digitálních podpisů -- otisky zprávy - \item kontrola integrity, porovnání souborů -- otisk souboru - \item jednoznačná identifikace dat - \item uložení hesel -- otisky hesel - \item uložení klíčů -- otisky klíčů - \item prokazování autorství - \item pseudonáhodné generátory - \end{itemize} -\end{itemize} +Hashovací funkce je algoritmus pro~převod vstupních dat do~malého čísla o~předem dané velikosti. +Formálně jde o~funkci $\mathcal{H}(M)$ která převádí libovolně velký vstup $M$ na~řetězec o~délce $n$ bitů. -\subsection{Požadavky} -\begin{itemize} - \item k~\enquote{libovolně} velkému vstupu $M$ -- pevná délka výstupu $h$ - \item jednocestnost (one-way) - \begin{itemize} - \item pro~danou zprávu $M$ lze snadno spočítat $h = h(M)$ - \item je-li dáno $h$, je velmi těžké spočítat $M$, ne však nemožné - \end{itemize} - \item bezkoliznost (collision-free) - \begin{itemize} - \item je velmi těžké nalézt různá $M$ a $M'$ tak, aby $h(M) = h(M')$ - \end{itemize} -\end{itemize} +Používají se v~digitálních podpisech (otisk zprávy), pro~kontrolu integrity a identifikaci (otisk souboru), uložení hesel a klíčů, prokázání autorství, jako způsob rychlého přístupu v~paměti (\emph{hashmap}) nebo jako~pseudonáhodné generátory. + + +\subsection{Vlastnosti hashovacích funkcí} + +Pevná délka výstupu. + +Jednocestnost: je jednoduché spočítat $h = \mathcal{H}(M)$, ale velmi složité zjistit $h$ při~znalosti $M$. + +Bezkoliznost: je velmi složité nalézt dvě rozdílná $M, M'$ taková že $\mathcal{H}(M) = \mathcal{H}(M')$. +Kolizí prvního řádu (\emph{preimage resistance}) se rozumí nalezení vzoru $M$. +Kolizí druhého řádu (\emph{collision resistance}) se rozumí nalezení dvou vzorů $M, M'$ produkujících stejný hash. -Odolnost proti kolizím -\begin{itemize} - \item kolize zákonitě existují, ale je oblížné je nalézt -\end{itemize} -\begin{enumerate} - \item kolize prvního řádu (preimage resistance) - \begin{itemize} - \item nalezení vzoru - \end{itemize} - \item kolize druhého řádu (second preimage resistance) - \begin{itemize} - \item k dané zprávě $M_{1}$ nalézt zprávu $M_{2}$ tak, aby platilo $h(M_{1}) = h(M_{2})$ - \end{itemize} - \item odolnost vůči kolizím (collistion resistance) - \begin{itemize} - \item nalezení dvou libovolných zpráv $M$ a $M'$, pro které platí $h(M) = h(M')$ - \end{itemize} -\end{enumerate} \subsection{Hodnocení bezpečnosti} -Útoky, cílem je nalezení kolize -\begin{itemize} - \item hrubou silou -- metoda totálních zkoušek -- závisí na~délce hašovacího kódu - \item kryptoanalýzou -- zaměřená především na vnitřní strukturu haš. fce, především na~kompresní funkci $f$ -\end{itemize} -\subsection{Princip konstrukce - iterační} -\begin{itemize} - \item tento princip používají drtivá většina dnes používaných hashovacích funkcí - \item algoritmus je založený na opakovaném použití kompresní funkce $f$ (= je jádrem hashovacích funkcí) - \item proces iteračního výpočtu hashového kódu $h$ je možné vyjádřit v~následujícím tvaru: -\end{itemize} -\begin{align*} - IV &= h_{0} \\ - h_{i} &= f (h_{i-1}, M_{i}), pro 1 \leq i \leq n \\ - h &= h_{n} \\ -\end{align*} -\begin{itemize} - \item tzn. kompresní funkce má dva vstupy a jeden výstup - \item ypracovává aktuální blok zprávy $M_{i}$ a hodnotu $h_{i-1}$ - \item Výstupem je určitá hodnota $h_{i-1}$ (= kontext) $\longrightarrow$ ten pak použit jako vstup do kompresní funkce v dalším kroku - \item počáteční hodnota kontextu $h_{0}$ - inicializační vektor IV - určuje blok bitů vstupující do první kompresní funkce a zahajuje tak vlastní hashování -\end{itemize} +Počítač s~velkým výpočetním výkonem může kolize hledat pomocí \uline{útoku hrubou silou}. +Protože jde o~prohledávání obrovského (prakticky nekonečného) prostoru, jde o~pomalý proces. +K~hledání hesel při~znalosti jejch hashů se používají předpřipravené slovníky které vstup řadí dle pravděpodobnosti výskytu. -\subsection{Pricip konstrukce - houba (SHA3)} -\begin{itemize} - \item kryptografické primitivum využívající se v~mnoha aplikacích - \item dvě fáze: absorpce a vymačkávání - \item původní zpráva se po~bitech absorbuje v~první části pomocí kompresních funkcí $f$ - \item následně je vymačkávána tolikrát, dokud nemáme odpovídající velikost výstupu - \item příklady: SHA-3 (algoritmus Keccak) - \begin{itemize} - \item SHA-3 hash -- digitální podpis, integrita dat, identifikace dat - \item SHA-3 MGF -- generování klíčů, hashování v~PKI - \item SHA-3 solená hash -- ukládání hesel - \item SHA-3 MAC -- jednodušší než HMAC - \item SHA-3 proudová šifra - \end{itemize} -\end{itemize} +\uline{Kryptoanalýza} je zaměřená na~vnitřní strukturu hashovací funkce, především na~její kompresní část. +Prolomení bezpečnosti komprese znamená diskreditaci hashovací funkce jako takové a nutnost nahrazení jinou, která bude bezpečnější. + + +\subsection{Princip iteračních hashovacích funkcí} + +Jde o~princip dnes nejčastěji používaný (MD, SHA). + +Je založený na~opakovaném použití kompresní funkce $h_i = f(h_{i-1}, M_i)$, kde +$M_i$ je aktuální zpracovávaný blok zprávy $M$, +$h_{i-1}$ je výstup předchozího bloku (případně iniciační vektor); +výstupem je nový částečný \emph{digest}. +Hash vzniká z~konečné hodnoty $h_i$ po~zpracování celé zprávy $M$ (viz obr.~\ref{sha}). + + +\subsection{Pricip hashovacích funkcí typu houba} + +Houba (formálně Keccak) je novější princip používaný rodinou SHA3. + +Funguje na~principu nasávání a mačkání (\emph{aborbing and squeezing}). +Při~absorbování se bloky dat XORují s~vnitřním stavem a poté transformují permutační funkcí $f$. +Při~vymačkování se tento stav střídavě čte a~znovu transformuje pomocí $f$ (viz obr.~\ref{keccak}). + +Bezpečnost a rychlost je dána parametry $r$ (\emph{rate}) a $c$ (\emph{capacity}): rychlost ovlivňuje velikost částečných vstupů a výstupů, kapacita je neměnná a je modifikována pouze permutací, ne XORováním. + +\begin{figure} + \centering + \includegraphics[width=0.6\textwidth]{img/sha-construction} + \caption{ + Princip zpracování bloku (jedné iterace) v~algoritmu SHA-2. + Značka $\boxplus$ je sčítání $\mod 2^{32}$ (SHA-256) nebo $\mod 2^{64}$ (SHA-512). + Modré komponenty reprezentují: + \\ + $\mathrm{Ch}(E,F,G) = (E \wedge F) \oplus (\neg E \wedge G)$, \\ + $\mathrm{Ma}(A,B,C) = (A \wedge B) \oplus (A \wedge C) \oplus (B \wedge C)$, \\ + $\mathrm{\Sigma_0}(A) = (A \ggg 2) \oplus (A \ggg 13) \oplus (A \ggg 22)$, \\ + $\mathrm{\Sigma_1}(E) = (E \ggg 6) \oplus (E \ggg 11) \oplus (E \ggg 25)$. + } + \label{sha} +\end{figure} + +\begin{figure} + \centering + \includegraphics[width=0.6\textwidth]{img/sponge-construction} + \caption{Princip nasávání a vymačkávání dat algoritmu Keccak.} + \label{keccak} +\end{figure} \clearpage @@ -433,145 +411,130 @@ \subsection{Lamport One Time Signature} \clearpage \section{V~souvislosti s~nařízením eIDAS vysvětlete pojmy -- elektronický podpis, zaručený elektronický podpis a kvalifikovaný elektronický podpis, elektronická pečeť, elektronické časové razítko.} + \subsection{Elektronický podpis} -\begin{itemize} - \item lze tak označit cokoliv, co je použito jako podpis dané osoby a co má elektronikcou podobu - \item např. napsání našeho jména na~konec mailu - \item je zřejmé, že není zaručeno jednoznačné spojení s~podepisující osobou -\end{itemize} + +Za~elektronický podpis může být označeno cokoliv, co má elektronickou podobu a co je použito jako podpis dané osoby. +Nezaručuje jednoznačné spojení s~podepisující osobou. + +Jde např. o~napsání jména na~konec e-mailu nebo vystupování pod~svou identitou na~Facebooku. + \subsection{Zaručený elektronický podpis} -\begin{itemize} - \item musí být jednoznačně spojen s~podepisující osobou a musí umožňovat její identifikaci - \item musí být vytvořen pomocí služeb pro~vytváření elektronických podpisů -- pomocí certifikátu (na~ten ale nejsou kladeny žádné požadavky) - \item nemusí se jednat o~certifikát vydaný kvalifikovaným poskytovatelem, může být jakýkoliv, i~vystavený svépomocí -\end{itemize} + +Zaručený elektronický podpis musí být jednoznačně spojen s~podepisující osobu a musí umožňit její identifikací. +Musí být vytvořen pomocí vydaného certifikátu (vydaného jakkoliv: ať kvalifikovaným poskytovatelem, tak svépomocí). + \subsection{Kvalifikovaný elektronický podpis} -\begin{itemize} - \item zaručený elektronický podpis vytvořený kvalifikovaným prostředkem pro vytváření elektronických podpisů a založen na kvalifikovaném certifikátu pro elektronické podpisy - \item kvalifikovaný certifikát = vydaný kvalifikovaných poskytovatelem služeb vytvořejícíh důvěru, tzn. poskytovatel, kterému orgán dohledu udělil status kvalifikovaného poskytovatele (v ČR v současnosti 3) -\end{itemize} + +Kvalifikovaný elektronický podpis je vytvořený kvalifikovaným prostředkem pro~vytváření elektronických podpisů a je založen na~kvalifikovaném certifikátu pro~elektronické podpisy. +Kvalifikovaný certifikát je vydaný kvalifikovaným poskytovatelem služeb vytvářejících důvěru (tj. mu byl státním orgánem udělen takový status; v~ČR jsou v~současnosti tři). +% TODO Kdo jsou ti tři? + \subsection{Elektronická pečeť} -\begin{itemize} - \item vydává se jen právnických osobám - \item p. o. nemůže pečetí opatřit cokoliv, ale jen to, čeho je původcem - \item proces pečetění totožný s podepisováním elektronických podpisem -\end{itemize} + +Elektronická pečeť se vydává pouze právnickým osobám. +PO může svou pečetí opatřit pouze to, čeho je původcem. +Princip zůstává totožný s~podepisováním elektronickým podpisem. + \subsection{Elektronické časové razítko} -\begin{itemize} - \item elektronický ekvivalent časového určení a místa vlastního podpisu na~listině - \item elektronický podpis dle znění zákona tento problém neřeší - \item řeší možné problémy vzniklé odvoláním certifikátu -- byl el. dokument podepsán před odvoláním? - \item zajišťuje důkaz o~existenci dokumentu v~daném čase - \item struktura podobná certifikátu, která svazuje kontrolní součet (hash) z~dokumentu s~časem - \item nutné pro poskytování elektronických notářských služeb a zajištění dlouhodobé archivace elektronicky podepsaných dokumentů - \item časové razítko je elektronicky podepsáno (vydáváno) autoritou pro vydávání časových razítek -- Time Stamping Authority (TSA) - \item elektronicky podepsaná struktura čas. razítka: - \begin{itemize} - \item jméno vydavatele (jméno TSA) - \item jedinečné sériové číslo razítka - \item kontrolní součet (hash) z~dokumentu a čas - \end{itemize} -\end{itemize} -Požadavky na zdroj času -\begin{itemize} - \item musí pocházet z oficiálního důvěryhodného zdroje -- např. od~náhodní časové autority - \item čas nesmí být možné cestou změnit - \item vždy musí být možné zpětně dosledovat zdroj času, tedy celou hierarchii časových serverů -\end{itemize} -Vydání časového razítka -\begin{itemize} - \item žádá se prostřednictvím klientské aplikace - \item klient vytvoří a odešle žádost o časové razítko ve standardizovaném formátu - \item žádost je datová struktura obsahující hash z~dokumentu - \item TSA v~případě kladné odpovědi odesílá odpověď na~žádost obsahující časové razítko -\end{itemize} + +Časové razítko je ekvivalent časového určení a místa vlastního podpisu na~listině (což elektronický podpis neřeší). +Zajišťuje důkaz o~existenci dokumentu a~validitu podepisujícího certifikátu v~daném čase (pomocí hashe dokumentu). + +Razítko je nutné pro~poskytování elektronických notářských služeb a zajištění dlouhodobé archivace elektronicky podepsaných dokumentů. +Je vydáváno autoritou pro~vydávání časových razítek (TSA, \emph{Time Stamping Authority}). + +Obsahem razítka je jméno vydavatele (autority), sériové číslo razítka, kontrolní součet dokumentu a čas. + +\subsubsection{Zdroj času} + +Zdroj času musí pocházet z~oficiálního a důvěryhodného zdroje, např. od~národní časové autority, nesmí být možné ho při~přenosu změnit a zdroj času musí být možné zpětně dohledat celou hierarchií. \clearpage \section{Autentizační protokoly -- na~jakém principu pracují, využívané proměnné parametry, hodnocení jejich bezpečnosti (BAN logika).} \subsection{Princip} -\begin{itemize} - \item výzva -- odpověď - \item mezi dvěma entitami nebo s~využitím třetí důvěryhodné strany - \item ověřují správnost a čerstvost autentizačního požadavku - \item výzva musí být čerstvá - využívají náhodná čísla, sekvenční čísla nebo časová razítka -\end{itemize} + +Autentizační protokoly fungují na~principu výzva--odpověď mezi dvěma entitami (klient, server), případně s~využitím třetí důvěryhodné strany. +Ověřují správnost a čerstvost autentizačního požadavku: pro~záruku čerstvosti se využívají náhodná nebo sekvenční čísla nebo časová razítka. + \subsection{Využívané proměnné parametry} -\begin{itemize} - \item sekvenční číslo - \begin{itemize} - \item tajné, nutné ukládat poslední použité číslo - \item při každém použití se sekvenční číslo inkrementuje o~1 - \item v~případě desynchronizace je nutné využít nějaký autentizační protokol k~synchronizaci - \end{itemize} - \item časové razítko - \begin{itemize} - \item využívá se maximálního povoleného zpoždění (acceptance-window) přijaté zprávy - \item přijatá časová razítka jsou ukládána pro~případ, kdyby útočník chtěl provést útok přehráním v~povoleném časovém okně nebo v~případě změny hodin u~ověřovatele - \end{itemize} - \item náhodné číslo použitelné pouze jednou (nonce = number used only once) - \begin{itemize} - \item nevyžaduje synchronizaci - \item ověřovatel ho zašle protstraně a ta jej použije v~autentizační odpovědi - \item po~použití je vyřazeno z databáze - \item pokud je nonce dostatečně velký (např. 128~b), tak náhodný výběr snižuje pravděpodobnost výběru stejného nonce na~zanedbatelnou úroveň - \end{itemize} -\end{itemize} -\subsection{Hodnocení bezpečnosti - BAN logika} -\begin{itemize} - \item BAN logika -- slouží k~formálnímu popisu bezpečnosti autentizačním protokolů - \item jedna z~prvních a nejpoužívanějších logik pro~formální ohodnocení autentizačních protokolů, určena pro~kryptografii se sdíleným i~veřejným klíčem - \item jedná se o~epistemickou a doxastickou logiku (poddruhy modální logiky zabývající se úvahami a znalosti a víře) -- logiky využívané v~PC vědě a umělé inteligenci - \item zabývá se autentizačními protokoly na~abstrajtní úrovni (neřeší konkrétní implementaci zkoumaného protokolu a problémy s tím spjaté) -\end{itemize} +\uline{Sekvenční číslo} je tajné; při~každém dalším požadavku se inkrementuje. +V~případě desynchronizace je nutné využít nějaký autentizační protokol k~synchronizaci zpět. -Otázky BAN logiky -\begin{itemize} - \item čeho chce zkoumaný protokol dosáhnout? - \item potřebuje zkoumaný protokol více předpokladů než jiný protokol? - \item vykonává zkoumaný protokol cokoliv nepotřebného, jenž by mohlo být vypuštěno bez~ohrožení bezpečnosti? - \item šifruje zkoumaný protokol něco, co by mohlo být zasláno v~otevřené formě bez~ohrožení bezpečnosti? \\ -\end{itemize} +\uline{Časové razítko} pracuje s~maximálním povoleným zpožděním (\emph{acceptance window}) přijaté zprávy. +Přijatá razítka jsou lokálně ukládána pro~případ útoku přehráním (během povoleného časového okna nebo při~změně času u~ověřovatele). -Definované konstrukce BAN logiky -\begin{itemize} - \item P věří X - \begin{itemize} - \item účastník P věří výroku X, nebo by měl být oprávněný věřit X - \item účastník P může jednat, jako by X bylo pravdivé - \item hlavní konstrukce logiky - \end{itemize} - \item P vidí X - \begin{itemize} - \item účastník P přijal zprávu obsahujcí výrok X, jenž může přečíst a zopakovat X (např. po dešifrování) - \end{itemize} - \item P vyslovil (jednou řekl) X - \begin{itemize} - \item účastník P v~určitém čase zaslal zprávu obsahující výrok X. - \item není známo, zda-li byla zpráva odeslána před dlouhou dobou nebo v~průběu současného běhu protokolu - \item je však známo, že účastník P věřil X, když odesílal zprávu \\ - \end{itemize} - \item pravidlo význam zprávy (message meaning) - \begin{itemize} - \item tato pravidla popisují, jakým způsobem lze odvodit důvěry o~původu zpráv - \end{itemize} - \item pravidlo ověření aktuálnosti zprávy (nonce verification) - \begin{itemize} - \item využívá se ke~kontrole aktuálnosti (novosti) zprávy - \item příjemce může předpokládat, že odesílatel věří jejímu obsahu a můžeme mu také věřit - \item zajišťuje ochranu proti útoku přehráním - \end{itemize} - \item pravidlo novosti celého výroku - \begin{itemize} - \item pokud je část výroku nová (fresh), pak je celý výrok nový - \end{itemize} - \item pravidlo jurisdikce (jurisdiction) - \item pravidla důvěry k množině výroků -\end{itemize} +\uline{Nonce} synchronizaci nezajišťuje; ověřovatel ho zašle protistraně a~ta ho vrátí zpět v~odpovědi, poté je vyřazeno aby nemohlo být použito znovu. +Pokud je dost velký (128~bit), náhodný výběr snižuje pravděpodobnost výběru na~zanedbatelnou úroveň. + + +\subsection{Hodnocení bezpečnosti -- BAN logika} + +BAN logika slouží k~formálnímu zápisu bezpečnosti autentizačních protokolů, je určena pro~symetrickou i asymetrickou kryptografii. +Zabývá se protokoly na~abstraktní úrovni: neřeší implementaci protokolu a~problémy s~tím spjaté. + +\subsubsection{Otázky BAN logiky} + +\begin{enumerate} + \item Čeho chce zkoumaný protokol dosáhnout? + \item Potřebuje zkoumaný protokol více předpokladů než jiný protokol? + \item Vykonává zkoumaný protokol cokoliv nepotřebného, jenž by mohlo být vypuštěno bez~ohrožení bezpečnosti? + \item Šifruje zkoumaný protokol něco, co by mohlo být zasláno v~otevřené formě bez~ohrožení bezpečnosti? +\end{enumerate} + +\subsubsection{Konstrukce BAN logiky} + +\begin{tabularx}{\textwidth}{lX} +$P$ věří $X$ & $P$ věří výroku $X$, může jednat jako by $X$ bylo pravdivé. \\ +$P$ vidí $X$ & $P$ přijal zprávu obsahující výrok $X$, jenž může přečíst a~zaopakovat. \\ +$P$ vyslovil $X$ & $P$ někdy zaslal zprávu obsahující výrok $X$. \\ +$P$ jurisdikce $X$ & $P$ je autorita k~$X$ a~měl by být důvěryhodný. \\ +& \emph{Např. servery generující klíče pro~další entity.} \\ +nový $X$ & $X$ nebylo nikdy odesláno. \\ +$P \stackrel{K}{\leftrightarrow} Q$ & $P$ a~$Q$ mohou použít sdílený klíč $K$ ke~komunikaci. \\ +$\stackrel{K}{\rightarrow} P$ & $P$ má veřejný klíč $K$. \\ +$P \stackrel{X}{\rightleftharpoons} Q$ & $X$ je tajemství známé pouze $P$ a~$Q$. \\ +$\{X\}_K$ & $X$ je zašifrován klíčem $K$ \\ +$\left_Y$ & $X$ je kombinovaný s~výrokem $Y$. $Y$ je tajné a~jeho přítomnost ověřuje identitu toho kdo vyslovil $Y$. Je to důkaz původu výroku $X$. \\ +\end{tabularx} + +\begin{tabular}{ll} +význam zprávy (sdílené klíče) +& $P$ věří $Q \stackrel{K}{\leftrightarrow} P$, $P$ vidí $\{X\}_K$ \\ +& $P$ věří $Q$ vyslovilo $X$ \\ +význam zprávy (veřejné klíče) & $P$ věří $\stackrel{K}{\rightarrow} Q$, $P$ vidí $\{X\}_{K^{-1}}$ \\ +& $P$ věří $Q$ vyslovilo $X$ \\ +význam zprávy (sdílená tajemství) & $P$ věří $Q \stackrel{Y}{\rightleftharpoons} P$, $P$ vidí $\left_Y$ \\ +& $P$ věří $Q$ vyslovilo $X$ \\ + +ověření aktuálnosti zprávy +& $P$ věří nový $X$, $P$ věří $Q$ vyslovilo $X$ \\ +& $P$ věří $Q$ věří $X$ \\ + +jurisdikce +& $P$ věří $Q$ jurisdikce $X$, $P$ věří $Q$ věří $X$ \\ +& $P$ věří $X$ \\ + +důvěra k~množině výroků +& $P$ věří množině výroku pokud věří každému zvlášť \\ + +novost celého výroku +& Pokud je část výroku nová, celý výrok je nový \\ +\end{tabular} + +\subsubsection{Analýza protokolů pomocí BAN logiky} + +\begin{enumerate} +\item Z~původního protokolu se odvodí idealizovaná verze protokolu. +\item Sepíší se předpoklady ohledně počátečního stavu. +\item Logické formule se připojí k~jednotlivým výrokům jako tvrzení o~stavu systému po~každém kroku. +\item Logické výchozí předpoklady (postuláty) se aplikují na~předpoklady a~tvrzení za~účelem zjištění toho, v~co věří jednotlivé strany. +\end{enumerate}