add content + pics + refs.bib

...in a one bad huge commit, I know...
This commit is contained in:
surtur 2022-02-08 00:06:16 +01:00
parent 1b0eb19dfc
commit 53294f9e34
Signed by: wanderer
GPG Key ID: 19CE1EC1D9E0486D
14 changed files with 509 additions and 101 deletions

@ -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}
\vspace*{-1.5\baselineskip}
\begin{columns}
\begin{column}{0.8\textwidth}
\begin{itemize}
\item bloková "AES-like" šifra (Serpent) v CTR móde
\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
\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$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}

BIN
img/Fortuna_Vienna.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.0 MiB

BIN
img/La_Fortune.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 KiB

BIN
img/bookcover.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 505 KiB

BIN
img/ddprepare100M.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 KiB

BIN
img/dieharder-xtrategy.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 332 KiB

BIN
img/ent1000M.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 KiB

BIN
img/fortuna2dd.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

BIN
img/g_state.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

BIN
img/pool-append-fun.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

BIN
img/reseed-ctr-incr.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 KiB

BIN
img/serpent.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

71
refs.bib Normal file

@ -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},
}
% ============================================================================ %