diff --git a/fortuna-prez.tex b/fortuna-prez.tex index 8647eee..f54f6c5 100644 --- a/fortuna-prez.tex +++ b/fortuna-prez.tex @@ -113,7 +113,7 @@ \begin{document} -\frame{\titlepage} +\frame[plain]{\titlepage} \begin{frame} \frametitle{Obsah} @@ -122,94 +122,189 @@ \begin{frame} \frametitle{Úvod} - \begin{block}{} - V tejto prezentácii sa bude pojednávať o: + \begin{block}{Témy prezentácie} \begin{itemize} - \item konceptuálnej skladbe Fortuny - \item konkrétnych detailoch implementácie + \item kultúrny kontext + \item konceptuálna skladba Fortuny + \item konkrétne detaily implementácie + \item detaily použitých validačných metód \end{itemize} \end{block} \end{frame} \section{Fortuna CSPRNG} +\subsection{Kultúrny kontext} +\begin{frame}{Figurálne zobrazenia Fortuny v dejinách umenia} + \begin{columns}[b] + \begin{column}{0.6\textwidth} + \begin{figure}[b] + \includegraphics[height=.79\textheight]{La_Fortune} + \hfill + \caption{Charles Samuel: La Fortune (1894) \cite{ChSamuel}} + \label{lafortune} + \end{figure} + \end{column} + \begin{column}{0.4\textwidth} + \begin{exampleblock}{Fortuna} + \begin{itemize} + \item rímska bohyňa náhody, osudu, hojnosti a personifikácia šťastia + (alebo nešťastia), má v rukách moc ovplyvniť smerovanie ľudského + života + \item pôvod v gréckej Tyché, podobnosť s egyptskou Isis + \end{itemize} + \end{exampleblock} + % \vspace{5mm} + \medskip + \end{column} + \end{columns} +\end{frame} +\begin{frame}[plain] + \begin{figure}[hbt] + \centering + \includegraphics[width=.49\textwidth]{Fortuna_Vienna} + \caption{Fortuna auf der Neuen Burg, Wien \cite{NeuenBurg}} + \label{fortunavienna} + \end{figure} +\end{frame} + + \subsection{Intro} \begin{frame} -\frametitle{Fortuna - Intro} -\framesubtitle{súčasti} - \begin{block}{} +\frametitle{Fortuna} +\framesubtitle{Intro} + \begin{columns}[t] + \begin{column}{0.7\textwidth} + \begin{block}{Fortuna \cite{fortuna}} + \begin{itemize} + \item kryptograficky bezpečný generátor pseudo-náhodných čísel (CSPRNG) + definovaný v knihe \alert{\textit{Cryptography Engineering}}, resp. + prvom vydaní pod názvom \textit{Practical Cryptography} + \end{itemize} + \end{block} + \begin{block}{súčasti} \begin{itemize} \item generátor \item akumulátor \item manažér seed súborov \item zdroje entropie + \item vonkajšie rozhranie \end{itemize} \end{block} + \end{column} + \begin{column}{0.3\textwidth} + \begin{figure}[!hbt] + \centering + \includegraphics[width=.85\textwidth]{bookcover} + \caption{Cryptography Engineering: \textit{Design Principles and + Practical Applications}} + \label{bookcover} + \end{figure} + \end{column} + \end{columns} \end{frame} -\subsection{Generátor} +\section{Generátor} \begin{frame} \frametitle{Generátor} \framesubtitle{štruktúra} \begin{block}{stav generátora} - objekt, ktorý obsahuje: + interný objekt.\\ + implementovaný ako štruktúra (POD\footnotemark) \alert{\texttt{G\_state}}, ktorá + obsahuje: \begin{itemize} - \item 128 bitové počítadlo \texttt{ctr} - \item 256 bitový kľúč \texttt{k} + \item 256 bitový kľúč \alert{\texttt{k}} + \item 128 bitové počítadlo \alert{\texttt{ctr}}, v praxi pole bytov \end{itemize} + + \begin{figure}[!hbt] + \centering + \includegraphics[width=.7\textwidth]{g_state} + \caption{Štruktúra stavu generátora G\_state} + \label{gstate} + \end{figure} \end{block} + + \footnotetext[1]{\textit{angl.} Plain Old Data structure \rightarrow \texttt{struct}} \end{frame} \begin{frame} \frametitle{Generátor} -\framesubtitle{štruktúra} \begin{block}{úlohy} \begin{itemize} \item prijímať požiadavky na generovanie náhodných dát - \item generovať náhodné dáta za pomoci šifrovacej funkcie\\ + \item generovať náhodné dáta za pomoci šifrovacej funkcie \begin{itemize} \item na konci spracovania požiadavky vytvoriť nový kľúč, starý zničiť (najneskôr po $2^{20}$ bytoch náhodných dát) \end{itemize} \end{itemize} - konkrétna implementácia v triede UrandomEntropySrc + konkrétna implementácia v triede \texttt{Generator} \end{block} \end{frame} -\begin{frame} +\begin{frame}[t] \frametitle{Generátor} \framesubtitle{štruktúra} \begin{block}{využitie kryptografických primitív} - \begin{itemize} - \item bloková "AES-like" šifra (Serpent) v CTR móde - \begin{itemize} - \item G.ctr slúži ako IV - \item G.k slúži ako kľúč (256 bit) - \end{itemize} - \item SHA256 hashovacia funkcia - \end{itemize} + \vspace*{-1.5\baselineskip} + \begin{columns} + \begin{column}{0.8\textwidth} + \begin{itemize} + \item bloková "AES-like" \cite[143]{CryptEngi} šifra - + \alert{Serpent} - použitá v~CTR\footnotemark móde + \begin{itemize} + \item G.ctr slúži ako IV (inicializačný vektor, \textit{angl.} \textbf{I}nitialization \textbf{V}ector) + \item G.k slúži ako kľúč (256 bit) + \end{itemize} + \item SHA256 hashovacia funkcia + \end{itemize} + \end{column} + \begin{column}{0.2\textwidth} + \begin{figure}[hbt] + \centering + \includegraphics[width=1\textwidth]{serpent} + \caption{maskot šifry Serpent \cite{Serpent}} + \label{serpent} + \end{figure} + \end{column} + \end{columns} \end{block} + \begin{exampleblock}{CTR mód \cite[70]{CryptEngi}} + \vspace*{-3\baselineskip} + \[\flushleft + K_i := E(K, Nonce \| i) \quad \textrm{for} \: i = 1,...,k\\ + C_i := P_i \oplus K_i + \] + \vfill + \end{exampleblock} + + \footnotetext{Counter} \end{frame} \begin{frame} \frametitle{Generátor} -\framesubtitle{požiadavky} - \begin{block}{} +\framesubtitle{} + \begin{block}{požiadavky} \begin{itemize} - \item prístup k stavu generátora nie je možný z vonkajších funkcií (zapúzdrenie) + \item prístup k stavu generátora nie je možný z vonkajších funkcií + (\alert{zapúzdrenie}) \item generovanie náhodných dát je možné až po prvom zaseedovaní - \item reseed môže prebehnúť vždy keď: + \item reseed \cite[159]{CryptEngi} môže prebehnúť vždy keď: \begin{itemize} - \item má $P_{0}$ dĺžku aspoň 64 bytov - \item od posledného reseedu ubeho aspoň 100ms + \item $P_{0}$ má dĺžku aspoň \texttt{MIN\_POOL\_SIZE} + \cite[149]{CryptEngi} (\alert{64 bytov} \cite[154]{CryptEngi}) + \item od posledného reseedu ubeho aspoň \alert{100ms} + \cite[150]{CryptEngi} \end{itemize} - \item starý kľúč je pri obnove nenávratne zničený (forward secrecy) - \item s rovnakým kľúčom je vygenerovaných naraz vždy max $2^{20}$ bytov dát + \item starý kľúč je pri obnove nenávratne zničený ("forward secrecy") + \cite[147]{CryptEngi} + \item rovnaký kľúč je použitý na vygenerovanie vždy maximálne $2^{20}$ bytov dát \end{itemize} \end{block} \end{frame} -\subsection{Akumulátor} +\section{Akumulátor} \begin{frame} \frametitle{Akumulátor} \framesubtitle{štruktúra} @@ -218,59 +313,93 @@ \item pooly \begin{itemize} \item $Pool_{0-31}$ - \item počítadlo \texttt{reseed\_ctr} - \item zdroje entropie \end{itemize} + \item počítadlo \texttt{reseed\_ctr} + \item zdroj(e) entropie \end{itemize} \end{block} \begin{block}{úlohy} \begin{itemize} - \item zber udalostí s entropiou - \item distribúcia udalostí s entropiou na pooly - \item kontrola validity udalostí (minimálna/maximálna povolená dĺžka) - \item facilitácia prístupu ku generátoru pre SeedFileManager + \item \alert{zber} udalostí s entropiou + \item \alert{distribúcia} udalostí s entropiou na pooly + \item \alert{kontrola} validity udalostí (minimálna/maximálna povolená dĺžka) + \item facilitácia \alert{prístupu} ku generátoru pre SeedFileManager (\texttt{reseed()}, \texttt{random\_data()}) \end{itemize} - konkrétna implementácia v triede Accumulator + konkrétna implementácia v triede \texttt{Accumulator} \end{block} \end{frame} \begin{frame} \frametitle{Akumulátor} -\framesubtitle{Pool} +\begin{exampleblock}{\texttt{reseed\_ctr}} + \begin{itemize} + \item vynulovaný pri \alert{inicializácii PRNG} (pri štarte programu) + \item drží počet volaní \alert{\texttt{reseed()}} funkcie Generátora + \item ovplyvňuje voľbu poolov použitých pri reseede + \end{itemize} +\end{exampleblock} +\end{frame} + +\begin{frame}[plain] + \begin{figure}[!hbt] + \centering + \includegraphics[width=.70\textwidth]{reseed-ctr-incr} + \caption{Inkrementácia reseed\_ctr} + \label{reseedctr} + \end{figure} +\end{frame} + +\begin{frame} +\frametitle{Akumulátor} +% \framesubtitle{Pool} +\framesubtitle{} \begin{block}{Pool} \begin{itemize} \item obsahuje reťazec znakov potenciálne neobmedzenej dĺžky - \item identifikuje sa hodnotou id - \item reťazec poolu sa používa na jedinú vec: ako vstup do hashovacej - funkcie pred reseedom - \item po použití reťazca sa pool vždy "vyčistí" na prázdny reťazec - \item logika výberu poolov na žatvu (harvest) pred reseedom: + \cite[148]{CryptEngi} + \item identifikovaný na základe priradenej hodnoty \alert{id} + \item reťazec poolu - \alert{\texttt{s}} - sa používa na jedinú vec: ako + vstup do hashovacej funkcie pred reseedom \cite[148]{CryptEngi} + \item po použití reťazca je pool vždy "vyčistený" na prázdny reťazec + \item logika výberu poolov na žatvu (harvest) pred reseedom \cite[154]{CryptEngi}: \begin{itemize} - \item $P_{i}$ je použitý, ak $2^i$ je deliteľom \texttt{reseed\_ctr}, - teda $P_{0}$ je použitý zakaždým, $P_{1}$ každý druhý reseed ($2^1$), - $P_{2}$ ak \texttt{resed\_ctr==}$2^2$, etc. + \item $P_{i}$ je použitý ak $2^i$ je deliteľom + \texttt{\alert{reseed\_ctr}}, teda $P_{0}$ je použitý zakaždým, $P_{1}$ + každý druhý reseed ($2^1$), $P_{2}$ ak \texttt{resed\_ctr==}$2^2$, etc. \end{itemize} \end{itemize} - konkrétna implementácia v triede Pool + konkrétna implementácia v triede \texttt{Pool} \end{block} \end{frame} +\begin{frame}[plain] + \begin{figure}[hbt] + \centering + \includegraphics[width=.9\textwidth]{pool-append-fun} + \caption{Členská funkcia pre pridanie udalosti do reťazca poolu "s"} + \label{appendpool} + \end{figure} +\end{frame} + \begin{frame} \frametitle{Akumulátor} -\framesubtitle{Zdroj entropie} +\framesubtitle{Generický zdroj entropie} \begin{block}{EntropySrc} \begin{itemize} - \item má priradené id - \item generuje/z pohľadu Fortuny poskytuje udalosti s entropiou + \item má priradené \alert{id} + \item generuje/z pohľadu Fortuny poskytuje \alert{udalosti} s entropiou \item identifikuje sa svojím id z intervalu $<0,255>$ pri pridávaní udalostí do Poolu + \item udalosti distribuuje na pooly \alert{cyklickým} spôsobom + \cite[148]{CryptEngi} + \item dôležitá je \emph{nepredvídateľnosť} produkovaných udalostí \end{itemize} - dôležitá je nepredvídateľnosť produkovaných udalostí + definované v abstraktnej triede \texttt{EntropySrc} \begin{itemize} \item príklady vhodných zdrojov entropie: @@ -280,7 +409,6 @@ \item seek-time hláv magnetických diskov \end{itemize} \end{itemize} - konkrétna implementácia v triede UrandomEntropySrc \end{block} \end{frame} @@ -289,13 +417,14 @@ \framesubtitle{Udalosti s entropiou (a ich distribúcia)} \begin{block}{udalosť} \begin{itemize} - \item je náhodná postupnosť znakov o veľkosti $1-32$ bytov - generovaná/poskytovaná zdrojom - \item je pred pridaním do Poolu enkódovaná ako "source\_id + event\_size - + event" - \item je zahashovaná pomocou SHA256 + \item náhodná postupnosť znakov o veľkosti \alert{$1-32$ bytov} + generovaná/poskytovaná \textit{zdrojom entropie} + \item pred pridaním do Poolu je \alert{enkódovaná} ako "source\_id + + event\_size + event" + \item enkódovaná udalosť (metadáta + samotná udalosť s entropiou) je pred + pridaním do Poolu \alert{zahashovaná} pomocou SHA256 \end{itemize} - práve spomínaný hash je následne pridaný do reťazca Poolu + práve spomínaný hash \textit{digest} je následne pridaný do reťazca konkrétneho Poolu \end{block} \end{frame} @@ -316,70 +445,84 @@ spracovávať napr. temporálne hodnoty ako aktulny deň, mesiac, rok; tieto vedomosti bude mať jednoducho aj útočník \item použitie udalostí s dĺžkou $>$32bytov zvyšuje štatistickú deviáciu - od čistej náhodnosti, preto je \textbf{max. limit dĺžky udalosti} 32 - bytov - \item Fortuna by mala mať dostupných, pokiaľ možno, viacero zdrojov entropie + od čistej náhodnosti \cite[143]{CryptEngi}, preto je \textbf{max. limit + dĺžky udalosti} \alert{32 bytov} \end{itemize} + Fortuna by mala mať dostupných, pokiaľ možno, viacero zdrojov entropie \end{block} \end{frame} -\subsection{Správa seed súborov} +\section{Správa seed súborov} \begin{frame} \frametitle{Správa seed súborov} \begin{block}{úlohy} \begin{itemize} - \item periodický zápis nazbieranej entropie na disk - \item obnovenie entropie zo súboru na disku po opätovnom spustení - \item zaseedovanie generátora (skrze akumulátor) po obnovení prevádzky + \item periodický \alert{zápis} nazbieranej entropie na disk (pre neskoršie + použitie) + \item \alert{obnovenie} entropie zo súboru na disku po opätovnom spustení + \item \alert{zaseedovanie} generátora (skrze akumulátor) po obnovení + prevádzky programu \end{itemize} - implementované v triede SeedFileManager + implementované v triede \texttt{SeedFileManager} \end{block} \begin{block}{podmienky práce} \begin{itemize} - \item seed file má veľkosť 64 bytov (konfigurovateľné) + \item veľkosť seed súboru je \alert{64 bytov} (konfigurovateľné) \item používateľ má právo zapisovať do priečinka, kde má byť vytvorený seed súbor \end{itemize} \end{block} \end{frame} +\section{Fortuna} \begin{frame} \frametitle{Vonkajšie rozhranie Fortuny} \begin{block}{účel} \begin{itemize} - \item enkapsulovať interné súčasti (napr. Generátor a jeho stav) - \item spravovať vlákna služieb (napr. zdrojov entropie, SeedFileManager) + \item \alert{enkapsulovať} interné súčasti (napr. Generátor a jeho stav) + a členské funkcie + \item \alert{spravovať} vlákna služieb (napr. zdrojov entropie, SeedFileManager) \end{itemize} - implementované v triede Fortuna + implementované v triede \texttt{Fortuna} \end{block} \end{frame} -\subsection{Implementácia} +\section{Implementácia} \begin{frame} \frametitle{Implementácia} \framesubtitle{} - \begin{block}{verziovaný kód + CI} + \begin{block}{verziovaný kód + continuous builds} \begin{itemize} - \item \url{https://git.dotya.ml/ak-fortuna/fortuna} + \item \alert{\href{https://gitea.io/}{Gitea}} + \url{https://git.dotya.ml/ak-fortuna/fortuna} + \item \alert{\href{https://www.drone.io/}{Drone CI}} + \url{https://drone.dotya.ml/ak-fortuna/fortuna} \end{itemize} \end{block} \begin{block}{použité technológie} \begin{itemize} \item C++ 20 - \item \href{https://cryptopp.com}{Cryptopp} - \item \href{https://fmt.dev}{fmt} + \item \alert{\href{https://cryptopp.com}{Cryptopp}} (dep) + \item \alert{\href{https://fmt.dev}{\{fmt\}}} (dep) \end{itemize} tooling: \begin{itemize} - \item \texttt{CMake cmake version 3.22.1} + \texttt{Ninja 1.10.2} - \item \texttt{g++ (GCC) 11.2.1 20211203} + \texttt{lld LLD 13.0.0} - \item \texttt{vim: Vi IMproved 8.2, Included patches: 1-4068} - \item \texttt{Fedora Linux 35} - \item \texttt{The Linux Kernel with XanMod Patches and experimental - options version 5.16.2} + \item \texttt{\alert{\href{https://cmake.org/}{CMake}} cmake version + 3.22.2} + + \texttt{\alert{\href{https://ninja-build.org/}{Ninja}} 1.10.2} + \item \texttt{\alert{\href{https://gcc.gnu.org/}{g++}} (GCC) 11.2.1 + 20212701} + + \texttt{\alert{\href{https://lld.llvm.org/}{lld}} LLD 13.0.0} + + \item \texttt{\alert{\href{https://www.vim.org/}{Vim}} Vi IMproved 8.2, + Included patches: 1-4232} + \item \texttt{\alert{\href{https://getfedora.org/}{Fedora}} Linux 35} + \item \texttt{The Linux Kernel with + \alert{\href{https://copr.fedorainfracloud.org/coprs/rmnscnce/kernel-xanmod/}{XanMod + Patches}} and experimental options version 5.16.5} \end{itemize} \end{block} \end{frame} @@ -389,22 +532,30 @@ \begin{figure}[hbt] \centering \includegraphics[width=.9\textwidth]{gitea} - \caption{Zdrojový kód} + \caption{Zdrojový kód v repozitári} \label{gitea} \end{figure} \end{frame} \begin{frame} -\frametitle{Implementácia} +\frametitle{Implementácia - výzvy} \framesubtitle{} \begin{block}{Výzvy implementácie} \begin{itemize} \item paralelný beh viacerých častí programu - \item konkurentný prístup + \item konkurentný (súbežný) prístup \item spracovávanie signálov (\texttt{man 7 signal}) + \item kompilačné časy (C++) + \item čistý kód bez varovaní aj so zapnutím vysokých úrovní + diagnostiky:\\ \alert{\texttt{-Wall -Wextra -Wpedantic}} + \item kompilácia s \alert{\texttt{-pedantic}} pre kód vyhovujúci ISO C++ \end{itemize} \end{block} +\end{frame} +\begin{frame} +\frametitle{Implementácia - riešenia} +\framesubtitle{} \begin{block}{Riešenia} \begin{itemize} \item synchronizačné mechanizmy @@ -418,6 +569,8 @@ \begin{itemize} \item maskovanie signálov (\texttt{SIGTERM, SIGINT}) \end{itemize} + \item kompilácia v \texttt{/tmp} (ramdisk) + \item využívanie korektného C++ \end{itemize} \end{block} \end{frame} @@ -488,18 +641,22 @@ private: \end{frame} \begin{frame} -\frametitle{Zdroj entropie: /dev/urandom} +\frametitle{Zdroj entropie: UrandomEntropySrc} \begin{block}{} \begin{enumerate} + \item vytvorený ako preddefinovaný zdroj + \item spustený vo vlastnom vlákne v konštruktore \texttt{Fortuna} triedy \item beží ako služba na pozadí - \item pridáva udalosti každých 50 ms + \item pridáva udalosti každých {\raise.17ex\hbox{$\scriptstyle\sim$}}50 ms + \item de facto sekundárny zdroj: entropiu získava priamo z + \texttt{/dev/urandom} \end{enumerate} \end{block} \begin{figure}[!hbt] \centering - \includegraphics[width=1.00\textwidth]{ues.png} + \includegraphics[width=1.00\textwidth]{ues} \caption{Náhodná udalosť od UrandomEntropySrc} - \label{ues_event} + \label{uesevent} \end{figure} \end{frame} @@ -535,23 +692,203 @@ write_seed_file(); \end{lstlisting} \end{frame} - - -% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Referencie} +\section{Validácia} +\subsection{ENT} \begin{frame} -\frametitle{Referencie} - \begin{block}{Fortuna CSPRNG} +\frametitle{Analýza výstupu Fortuny - štatistické testy ent} +\framesubtitle{Generovanie dát} + \begin{block}{fortuna | dd} + \vspace*{-.5\baselineskip} + \begin{figure}[!hbt] + \centering + \includegraphics[width=1.0\textwidth]{fortuna2dd} + \label{fortuna2dd} + \end{figure} + \vspace*{-.5\baselineskip} + \begin{itemize} + \item získame \alert{1000MB} pseudo-náhodných dát pomocou príkazu + \texttt{./cmake-build-debug/fortuna | dd iflag=fullblock + of=/tmp/rand1000M bs=1M count=1000 status=progress}, (obr. + \ref{ddprepare}), kde výstup Fortuny vstupuje cez \alert{\texttt{|}} do + programu \alert{\texttt{dd}} + \item parameter \alert{\texttt{iflag=fullblock}} zaručuje, že + \alert{\texttt{dd}} + zapíše do súboru len plné bloky, čo znamená, že ak Fortuna nedodá naraz + plný blok o veľkosti \alert{\textit{bs}} (block size), \texttt{dd} bude + bufferovať a blok zapíše až vo chvíli, keď sa buffer naplní + \end{itemize} + \end{block} + \begin{figure}[!hbt] + \centering + \includegraphics[width=.80\textwidth]{ddprepare100M} + \caption{Príprava materiálu na testovanie - 1000MiB} + \label{ddprepare} + \end{figure} +\end{frame} + +\begin{frame} +\frametitle{Analýza výstupu Fortuny - štatistické testy ent} +\framesubtitle{Testovanie - ENT} + \begin{block}{ENT - A Pseudorandom Number Sequence Test Program \cite{ent}} + \begin{itemize} + \item spustíme testovanie príkazom \texttt{./ent /tmp/rand1000M} + (obr.~\ref{enttest1000M}), kde: + \begin{itemize} + \item spustiteľný súbor \alert{\texttt{ent}} sa nachádza v aktuálnom + adresári + \item \alert{\texttt{/tmp/rand1000M}} je cesta k súboru s výstupom + Fortuny, ktorý bol vytvorený v predchádzajúcom kroku (obr. + \ref{ddprepare}) + \end{itemize} + \end{itemize} + \end{block} + \begin{figure}[!hbt] + \centering + \includegraphics[width=.70\textwidth]{ent1000M} + \caption{ent test vzorky 1000MiB dát Fortuny} + \label{enttest1000M} + \end{figure} +\end{frame} + +\subsection{Dieharder} +\begin{frame}[t] +\frametitle{Analýza výstupu Fortuny - testovacia sada Dieharder} + \begin{block}{Dieharder - A Random Number Test Suite \cite{dieharder}} + sada testov \emph{generátorov náhodných čísel}. + \medskip + \\nástroj: + \begin{itemize} + \item určený pre generátory, nie \emph{"súbory možno-náhodných čísel"} + \cite{dieharder} + \item navrhnutý, aby pomohol \emph{slabý} generátor postrčiť k + jednoznačnému zlyhaniu (na napr. hladine 0.0001\%), mimo limbo 1\% + alebo 5\%-ného \emph{možno-zlyhania} + \item okrem originálnych testov obsahuje množstvo testov z STS\footnotemark + \footnotetext{Statistical Test Suite amerického National Institute for + Standards and Technology (NIST)} + \item napísaný v jazyku C + \item licencované s \alert{GPL}\footnotemark + \end{itemize} + \medskip + použitá verzia: \texttt{dieharder version 3.31.1} + \end{block} + + \footnotetext{GNU General Public License} +\end{frame} + +\begin{frame}[t,allowframebreaks] +\frametitle{Analýza výstupu Fortuny - testovacia sada Dieharder} +\framesubtitle{Testovanie - nastavenia, parametre} + \begin{block}{} + plný príkaz: \alert{\texttt{./cmake-build-release/fortuna | pv - | dieharder -a -g 200 -k 2 -Y 1}} + \medskip + \\použité \texttt{dieharder} parametre a ich význam: + \begin{description} + \item \alert{\texttt{-a}} spustí všetky testy + \item \alert{\texttt{-g 200}} špeciálny mód pre čítanie zo štandardného + vstupu (\texttt{-}) + \item \alert{\texttt{-k 2}} \textit{"ks\_flag"} - indikuje rýchlosť a + presnosť + čítania vzoriek + \item \alert{\texttt{-Y 1}} \textit{"Xtrategy"} v móde \alert{"resolve + ambiguity"} + (RA) (viď obr. \ref{dieharderxtrategy}) + \begin{itemize} + \label{dieharderRA} + \item úlohou je \emph{jednoznačne} rozhodnúť o výsledku ak test + skončí ako "WEAK" (slabý); RA mód opakovane pridáva \emph{psamples} + (väčšinou v blokoch po 100) dokiaľ nie je výsledok testu stabilne + silný alebo postupuje k jednoznačnému zlyhaniu + \end{itemize} + \end{description} + \end{block} + \begin{figure}[!hbt] + \centering + \includegraphics[width=.90\textwidth]{dieharder-xtrategy} + \caption{man dieharder, sekcia \texttt{-Y}} + \label{dieharderxtrategy} + \end{figure} +\end{frame} + +\begin{frame}[t] +\frametitle{Analýza výstupu Fortuny - testovacia sada Dieharder} +\framesubtitle{Testovanie - zapojenie komponent} + \begin{block}{} \begin{enumerate} - \item \url{https://www.schneier.com/academic/fortuna/} - \item \url{https://www.schneier.com/wp-content/uploads/2015/12/fortuna.pdf} + \item \alert{\texttt{fortuna}} (Release verzia) v móde + \emph{kontinuálneho výstupu} na \texttt{stdout}, poskytuje prúd + náhodných čísel + \item \alert{\texttt{pv -}} metrika rýchlosti výstupu + \item \alert{\texttt{dieharder}} analýza výstupu Fortuny \end{enumerate} \end{block} \end{frame} -\section{Záver} +\begin{frame}[t,allowframebreaks] +\frametitle{Analýza výstupu Fortuny - testovacia sada Dieharder} +\framesubtitle{Testovanie - výsledok} + \begin{block}{výsledok (obr.~\ref{dieharderfulltestsuite})} + \begin{itemize} + \item \alert{234GiB} pseudonáhodných dát vygenerovaných Fortunou + \item \alert{17h 36m 3s} testovania testovacou sadou Dieharder + \item \alert{PASSED} (úspešne prejdený) pre všetky testy v móde + \emph{resolve ambiguity} (viď s.~\ref{dieharderRA}) + \end{itemize} + \end{block} + + \begin{figure}[!hbt] + \centering + \includegraphics[width=.57\textwidth]{dieharder-full-testsuite-run-proof} + \caption{Dieharder - beh plnej testovacej sady; zobrazená len časť výsledkov} + \label{dieharderfulltestsuite} + \end{figure} +\end{frame} + \begin{frame} -\frametitle{Záver} +\frametitle{Analýza výstupu Fortuny - testovacia sada Dieharder} +\framesubtitle{Testovanie - výsledok - asciinema} + \begin{exampleblock}{asciicast\footnotemark} + \texttt{asciinema play}a + \alert{\url{https://dotya.ml/files/e/7wU3raPkP4DkzUeM-fortuna_dieharder_proof.cast}}\footnotemark + \bigskip + \\\alert{\url{https://asciinema.org/a/y5f7lLFWsDdztArXszCcseRIS}}\footnotemark^{\footnotemark\footnotemark} + \end{exampleblock} + + \footnotetext[5]{asciinema \emph{[as-kee-nuh-muh]} - "a free and open source + solution for recording terminal sessions...": \url{https://asciinema.org/}} + \footnotetext[6]{príkazom sa nahrávka prehrá lokálne (je potrebné mať + nainštalovaný program \texttt{asciinema})} + \footnotetext[7]{nahrávka sa prehrá vo webovom prehrávači} + \footnotetext[8]{pre neskreslené zhliadanie odporúčam režim FULLSCREEN} + \footnotetext[9]{nič\footnote{\protect\footnotemark}} + \footnotetext[10]{\url{https://xkcd.com/1208}} +\end{frame} + + +% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\section{Záver} + +\begin{frame} +\frametitle{Budúce výzvy projektu} +\begin{block}{} + \begin{itemize} + \item spracovávanie vstupných parametrov + \item "knižnicová" funkcionalita + \item logovanie do súboru + \end{itemize} +\end{block} +\end{frame} + +\begin{frame}[t,allowframebreaks] + \frametitle{Referencie} + \fontsize{7pt}{8pt}\selectfont + \bibliographystyle{plain} + \bibliography{refs} +\end{frame} + + +\begin{frame}[plain] +\centering Vďaka za pozornosť! \end{frame} diff --git a/img/Fortuna_Vienna.jpg b/img/Fortuna_Vienna.jpg new file mode 100644 index 0000000..67a0d95 Binary files /dev/null and b/img/Fortuna_Vienna.jpg differ diff --git a/img/La_Fortune.jpg b/img/La_Fortune.jpg new file mode 100644 index 0000000..082de41 Binary files /dev/null and b/img/La_Fortune.jpg differ diff --git a/img/bookcover.jpg b/img/bookcover.jpg new file mode 100644 index 0000000..6152217 Binary files /dev/null and b/img/bookcover.jpg differ diff --git a/img/ddprepare100M.png b/img/ddprepare100M.png new file mode 100644 index 0000000..ef3f2be Binary files /dev/null and b/img/ddprepare100M.png differ diff --git a/img/dieharder-full-testsuite-run-proof.png b/img/dieharder-full-testsuite-run-proof.png new file mode 100644 index 0000000..107899f Binary files /dev/null and b/img/dieharder-full-testsuite-run-proof.png differ diff --git a/img/dieharder-xtrategy.png b/img/dieharder-xtrategy.png new file mode 100644 index 0000000..843b796 Binary files /dev/null and b/img/dieharder-xtrategy.png differ diff --git a/img/ent1000M.png b/img/ent1000M.png new file mode 100644 index 0000000..be1e48f Binary files /dev/null and b/img/ent1000M.png differ diff --git a/img/fortuna2dd.png b/img/fortuna2dd.png new file mode 100644 index 0000000..f869dff Binary files /dev/null and b/img/fortuna2dd.png differ diff --git a/img/g_state.png b/img/g_state.png new file mode 100644 index 0000000..051fd70 Binary files /dev/null and b/img/g_state.png differ diff --git a/img/pool-append-fun.png b/img/pool-append-fun.png new file mode 100644 index 0000000..df8b86e Binary files /dev/null and b/img/pool-append-fun.png differ diff --git a/img/reseed-ctr-incr.png b/img/reseed-ctr-incr.png new file mode 100644 index 0000000..c5b74cc Binary files /dev/null and b/img/reseed-ctr-incr.png differ diff --git a/img/serpent.png b/img/serpent.png new file mode 100644 index 0000000..d840bfb Binary files /dev/null and b/img/serpent.png differ diff --git a/refs.bib b/refs.bib new file mode 100644 index 0000000..9c05cf4 --- /dev/null +++ b/refs.bib @@ -0,0 +1,71 @@ +% ============================================================================ % + +% img credits +@misc{ChSamuel, + title={{La Fortune, 1894}}, + author={Charles Samuel}, + publisher={}, + howpublished={\url{https://commons.wikimedia.org/wiki/File:Charles_Samuel,_La_Fortune_(1894),_KBS-FRB_03.jpg}}, + note={[online]: 2022-01-01}, +} + +@misc{NeuenBurg, + title={{Fortuna auf der Neuen Burg, Wien}}, + author={Johannes Benk}, + publisher={{Hubertl via Wikimedia Commons}}, + howpublished={\url{https://commons.wikimedia.org/wiki/File:2014-12-18_Fortuna,_Johannes_Benk_at_Neue_Burg,_Vienna_-hu-_6224.jpg}}, + address={Wien}, + note={[online]: 2022-01-01}, +} + + +% ======= +@misc{Serpent, + title={{Serpent block cipher mascot}}, + author={Serpent authors}, + publisher={}, + howpublished={\url{https://www.cl.cam.ac.uk/~rja14/serpent.html}}, + note={[online]: 2022-01-01}, +} + +@inbook{fortuna, + title={{Practical Cryptography}}, + author={Niels Fergusson and Bruce Schneier}, + publisher={John Wiley \& Sons}, + howpublished={\url{https://www.schneier.com/wp-content/uploads/2015/12/fortuna.pdf}}, + address={Indianapolis, Indiana}, + isbn={{978-0-471-22357-3}}, + chapter={{10: Generating Randomness}}, + pages={{137-161}}, + year=2003, + note={\url{https://www.schneier.com/wp-content/uploads/2015/12/fortuna.pdf}}, +} + +@book{CryptEngi, + title={{Cryptography Engineering: Design Principles and Practical Applications}}, + author={Niels Fergusson and Bruce Schneier and Tadayoshi Kohno}, + publisher={John Wiley \& Sons}, + address={Indianapolis, Indiana}, + isbn={{978-0-470-47424-2}}, + year=2010 +} + +@misc{ent, + title={{ENT: A Pseudorandom Number Sequence Test Program}}, + author={John Walker}, + publisher={Fourmilab}, + howpublished={\url{https://www.fourmilab.ch/random/}}, + year=2008, + note={[online]: 2022-01-01}, +} + +@misc{dieharder, + title={{Dieharder: A Random Number Test Suite}}, + author={Robert G. Brown (rgb) and Dirk Eddelbuettel and David Bauer}, + howpublished={\url{https://webhome.phy.duke.edu/~rgb/General/dieharder.php}}, + year=2003, + note={[online]: 2022-01-01}, +} + + +% ============================================================================ %