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} \begin{document}
\frame{\titlepage} \frame[plain]{\titlepage}
\begin{frame} \begin{frame}
\frametitle{Obsah} \frametitle{Obsah}
@ -122,94 +122,189 @@
\begin{frame} \begin{frame}
\frametitle{Úvod} \frametitle{Úvod}
\begin{block}{} \begin{block}{Témy prezentácie}
V tejto prezentácii sa bude pojednávať o:
\begin{itemize} \begin{itemize}
\item konceptuálnej skladbe Fortuny \item kultúrny kontext
\item konkrétnych detailoch implementácie \item konceptuálna skladba Fortuny
\item konkrétne detaily implementácie
\item detaily použitých validačných metód
\end{itemize} \end{itemize}
\end{block} \end{block}
\end{frame} \end{frame}
\section{Fortuna CSPRNG} \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} \subsection{Intro}
\begin{frame} \begin{frame}
\frametitle{Fortuna - Intro} \frametitle{Fortuna}
\framesubtitle{súčasti} \framesubtitle{Intro}
\begin{block}{} \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} \begin{itemize}
\item generátor \item generátor
\item akumulátor \item akumulátor
\item manažér seed súborov \item manažér seed súborov
\item zdroje entropie \item zdroje entropie
\item vonkajšie rozhranie
\end{itemize} \end{itemize}
\end{block} \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} \end{frame}
\subsection{Generátor} \section{Generátor}
\begin{frame} \begin{frame}
\frametitle{Generátor} \frametitle{Generátor}
\framesubtitle{štruktúra} \framesubtitle{štruktúra}
\begin{block}{stav generátora} \begin{block}{stav generátora}
objekt, ktorý obsahuje: interný objekt.\\
implementovaný ako štruktúra (POD\footnotemark) \alert{\texttt{G\_state}}, ktorá
obsahuje:
\begin{itemize} \begin{itemize}
\item 128 bitové počítadlo \texttt{ctr} \item 256 bitový kľúč \alert{\texttt{k}}
\item 256 bitový kľúč \texttt{k} \item 128 bitové počítadlo \alert{\texttt{ctr}}, v praxi pole bytov
\end{itemize} \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} \end{block}
\footnotetext[1]{\textit{angl.} Plain Old Data structure \rightarrow \texttt{struct}}
\end{frame} \end{frame}
\begin{frame} \begin{frame}
\frametitle{Generátor} \frametitle{Generátor}
\framesubtitle{štruktúra}
\begin{block}{úlohy} \begin{block}{úlohy}
\begin{itemize} \begin{itemize}
\item prijímať požiadavky na generovanie náhodných dát \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} \begin{itemize}
\item na konci spracovania požiadavky vytvoriť nový kľúč, starý zničiť \item na konci spracovania požiadavky vytvoriť nový kľúč, starý zničiť
(najneskôr po $2^{20}$ bytoch náhodných dát) (najneskôr po $2^{20}$ bytoch náhodných dát)
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
konkrétna implementácia v triede UrandomEntropySrc konkrétna implementácia v triede \texttt{Generator}
\end{block} \end{block}
\end{frame} \end{frame}
\begin{frame} \begin{frame}[t]
\frametitle{Generátor} \frametitle{Generátor}
\framesubtitle{štruktúra} \framesubtitle{štruktúra}
\begin{block}{využitie kryptografických primitív} \begin{block}{využitie kryptografických primitív}
\vspace*{-1.5\baselineskip}
\begin{columns}
\begin{column}{0.8\textwidth}
\begin{itemize} \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} \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) \item G.k slúži ako kľúč (256 bit)
\end{itemize} \end{itemize}
\item SHA256 hashovacia funkcia \item SHA256 hashovacia funkcia
\end{itemize} \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} \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} \end{frame}
\begin{frame} \begin{frame}
\frametitle{Generátor} \frametitle{Generátor}
\framesubtitle{požiadavky} \framesubtitle{}
\begin{block}{} \begin{block}{požiadavky}
\begin{itemize} \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 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} \begin{itemize}
\item$P_{0}$ dĺžku aspoň 64 bytov \item $P_{0}$ má dĺžku aspoň \texttt{MIN\_POOL\_SIZE}
\item od posledného reseedu ubeho aspoň 100ms \cite[149]{CryptEngi} (\alert{64 bytov} \cite[154]{CryptEngi})
\item od posledného reseedu ubeho aspoň \alert{100ms}
\cite[150]{CryptEngi}
\end{itemize} \end{itemize}
\item starý kľúč je pri obnove nenávratne zničený (forward secrecy) \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 \cite[147]{CryptEngi}
\item rovnaký kľúč je použitý na vygenerovanie vždy maximálne $2^{20}$ bytov dát
\end{itemize} \end{itemize}
\end{block} \end{block}
\end{frame} \end{frame}
\subsection{Akumulátor} \section{Akumulátor}
\begin{frame} \begin{frame}
\frametitle{Akumulátor} \frametitle{Akumulátor}
\framesubtitle{štruktúra} \framesubtitle{štruktúra}
@ -218,59 +313,93 @@
\item pooly \item pooly
\begin{itemize} \begin{itemize}
\item $Pool_{0-31}$ \item $Pool_{0-31}$
\item počítadlo \texttt{reseed\_ctr}
\item zdroje entropie
\end{itemize} \end{itemize}
\item počítadlo \texttt{reseed\_ctr}
\item zdroj(e) entropie
\end{itemize} \end{itemize}
\end{block} \end{block}
\begin{block}{úlohy} \begin{block}{úlohy}
\begin{itemize} \begin{itemize}
\item zber udalostí s entropiou \item \alert{zber} udalostí s entropiou
\item distribúcia udalostí s entropiou na pooly \item \alert{distribúcia} udalostí s entropiou na pooly
\item kontrola validity udalostí (minimálna/maximálna povolená dĺžka) \item \alert{kontrola} validity udalostí (minimálna/maximálna povolená dĺžka)
\item facilitácia prístupu ku generátoru pre SeedFileManager \item facilitácia \alert{prístupu} ku generátoru pre SeedFileManager
(\texttt{reseed()}, \texttt{random\_data()}) (\texttt{reseed()}, \texttt{random\_data()})
\end{itemize} \end{itemize}
konkrétna implementácia v triede Accumulator konkrétna implementácia v triede \texttt{Accumulator}
\end{block} \end{block}
\end{frame} \end{frame}
\begin{frame} \begin{frame}
\frametitle{Akumulátor} \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{block}{Pool}
\begin{itemize} \begin{itemize}
\item obsahuje reťazec znakov potenciálne neobmedzenej dĺžky \item obsahuje reťazec znakov potenciálne neobmedzenej dĺžky
\item identifikuje sa hodnotou id \cite[148]{CryptEngi}
\item reťazec poolu sa používa na jedinú vec: ako vstup do hashovacej \item identifikovaný na základe priradenej hodnoty \alert{id}
funkcie pred reseedom \item reťazec poolu - \alert{\texttt{s}} - sa používa na jedinú vec: ako
\item po použití reťazca sa pool vždy "vyčistí" na prázdny reťazec vstup do hashovacej funkcie pred reseedom \cite[148]{CryptEngi}
\item logika výberu poolov na žatvu (harvest) pred reseedom: \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} \begin{itemize}
\item $P_{i}$ je použitý, ak $2^i$ je deliteľom \texttt{reseed\_ctr}, \item $P_{i}$ je použitý ak $2^i$ je deliteľom
teda $P_{0}$ je použitý zakaždým, $P_{1}$ každý druhý reseed ($2^1$), \texttt{\alert{reseed\_ctr}}, teda $P_{0}$ je použitý zakaždým, $P_{1}$
$P_{2}$ ak \texttt{resed\_ctr==}$2^2$, etc. každý druhý reseed ($2^1$), $P_{2}$ ak \texttt{resed\_ctr==}$2^2$, etc.
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
konkrétna implementácia v triede Pool konkrétna implementácia v triede \texttt{Pool}
\end{block} \end{block}
\end{frame} \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} \begin{frame}
\frametitle{Akumulátor} \frametitle{Akumulátor}
\framesubtitle{Zdroj entropie} \framesubtitle{Generický zdroj entropie}
\begin{block}{EntropySrc} \begin{block}{EntropySrc}
\begin{itemize} \begin{itemize}
\item má priradené id \item má priradené \alert{id}
\item generuje/z pohľadu Fortuny poskytuje udalosti s entropiou \item generuje/z pohľadu Fortuny poskytuje \alert{udalosti} s entropiou
\item identifikuje sa svojím id z intervalu $<0,255>$ pri pridávaní \item identifikuje sa svojím id z intervalu $<0,255>$ pri pridávaní
udalostí do Poolu 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} \end{itemize}
dôležitá je nepredvídateľnosť produkovaných udalostí definované v abstraktnej triede \texttt{EntropySrc}
\begin{itemize} \begin{itemize}
\item príklady vhodných zdrojov entropie: \item príklady vhodných zdrojov entropie:
@ -280,7 +409,6 @@
\item seek-time hláv magnetických diskov \item seek-time hláv magnetických diskov
\end{itemize} \end{itemize}
\end{itemize} \end{itemize}
konkrétna implementácia v triede UrandomEntropySrc
\end{block} \end{block}
\end{frame} \end{frame}
@ -289,13 +417,14 @@
\framesubtitle{Udalosti s entropiou (a ich distribúcia)} \framesubtitle{Udalosti s entropiou (a ich distribúcia)}
\begin{block}{udalosť} \begin{block}{udalosť}
\begin{itemize} \begin{itemize}
\item je náhodná postupnosť znakov o veľkosti $1-32$ bytov \item náhodná postupnosť znakov o veľkosti \alert{$1-32$ bytov}
generovaná/poskytovaná zdrojom generovaná/poskytovaná \textit{zdrojom entropie}
\item je pred pridaním do Poolu enkódovaná ako "source\_id + event\_size \item pred pridaním do Poolu je \alert{enkódovaná} ako "source\_id +
+ event" event\_size + event"
\item je zahashovaná pomocou SHA256 \item enkódovaná udalosť (metadáta + samotná udalosť s entropiou) je pred
pridaním do Poolu \alert{zahashovaná} pomocou SHA256
\end{itemize} \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{block}
\end{frame} \end{frame}
@ -316,70 +445,84 @@
spracovávať napr. temporálne hodnoty ako aktulny deň, mesiac, rok; spracovávať napr. temporálne hodnoty ako aktulny deň, mesiac, rok;
tieto vedomosti bude mať jednoducho aj útočník tieto vedomosti bude mať jednoducho aj útočník
\item použitie udalostí s dĺžkou $>$32bytov zvyšuje štatistickú deviáciu \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 od čistej náhodnosti \cite[143]{CryptEngi}, preto je \textbf{max. limit
bytov dĺžky udalosti} \alert{32 bytov}
\item Fortuna by mala mať dostupných, pokiaľ možno, viacero zdrojov entropie
\end{itemize} \end{itemize}
Fortuna by mala mať dostupných, pokiaľ možno, viacero zdrojov entropie
\end{block} \end{block}
\end{frame} \end{frame}
\subsection{Správa seed súborov} \section{Správa seed súborov}
\begin{frame} \begin{frame}
\frametitle{Správa seed súborov} \frametitle{Správa seed súborov}
\begin{block}{úlohy} \begin{block}{úlohy}
\begin{itemize} \begin{itemize}
\item periodický zápis nazbieranej entropie na disk \item periodický \alert{zápis} nazbieranej entropie na disk (pre neskoršie
\item obnovenie entropie zo súboru na disku po opätovnom spustení použitie)
\item zaseedovanie generátora (skrze akumulátor) po obnovení prevádzky \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} \end{itemize}
implementované v triede SeedFileManager implementované v triede \texttt{SeedFileManager}
\end{block} \end{block}
\begin{block}{podmienky práce} \begin{block}{podmienky práce}
\begin{itemize} \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ý \item používateľ má právo zapisovať do priečinka, kde má byť vytvorený
seed súbor seed súbor
\end{itemize} \end{itemize}
\end{block} \end{block}
\end{frame} \end{frame}
\section{Fortuna}
\begin{frame} \begin{frame}
\frametitle{Vonkajšie rozhranie Fortuny} \frametitle{Vonkajšie rozhranie Fortuny}
\begin{block}{účel} \begin{block}{účel}
\begin{itemize} \begin{itemize}
\item enkapsulovať interné súčasti (napr. Generátor a jeho stav) \item \alert{enkapsulovať} interné súčasti (napr. Generátor a jeho stav)
\item spravovať vlákna služieb (napr. zdrojov entropie, SeedFileManager) a členské funkcie
\item \alert{spravovať} vlákna služieb (napr. zdrojov entropie, SeedFileManager)
\end{itemize} \end{itemize}
implementované v triede Fortuna implementované v triede \texttt{Fortuna}
\end{block} \end{block}
\end{frame} \end{frame}
\subsection{Implementácia} \section{Implementácia}
\begin{frame} \begin{frame}
\frametitle{Implementácia} \frametitle{Implementácia}
\framesubtitle{} \framesubtitle{}
\begin{block}{verziovaný kód + CI} \begin{block}{verziovaný kód + continuous builds}
\begin{itemize} \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{itemize}
\end{block} \end{block}
\begin{block}{použité technológie} \begin{block}{použité technológie}
\begin{itemize} \begin{itemize}
\item C++ 20 \item C++ 20
\item \href{https://cryptopp.com}{Cryptopp} \item \alert{\href{https://cryptopp.com}{Cryptopp}} (dep)
\item \href{https://fmt.dev}{fmt} \item \alert{\href{https://fmt.dev}{\{fmt\}}} (dep)
\end{itemize} \end{itemize}
tooling: tooling:
\begin{itemize} \begin{itemize}
\item \texttt{CMake cmake version 3.22.1} + \texttt{Ninja 1.10.2} \item \texttt{\alert{\href{https://cmake.org/}{CMake}} cmake version
\item \texttt{g++ (GCC) 11.2.1 20211203} + \texttt{lld LLD 13.0.0} 3.22.2} +
\item \texttt{vim: Vi IMproved 8.2, Included patches: 1-4068} \texttt{\alert{\href{https://ninja-build.org/}{Ninja}} 1.10.2}
\item \texttt{Fedora Linux 35} \item \texttt{\alert{\href{https://gcc.gnu.org/}{g++}} (GCC) 11.2.1
\item \texttt{The Linux Kernel with XanMod Patches and experimental 20212701} +
options version 5.16.2} \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{itemize}
\end{block} \end{block}
\end{frame} \end{frame}
@ -389,22 +532,30 @@
\begin{figure}[hbt] \begin{figure}[hbt]
\centering \centering
\includegraphics[width=.9\textwidth]{gitea} \includegraphics[width=.9\textwidth]{gitea}
\caption{Zdrojový kód} \caption{Zdrojový kód v repozitári}
\label{gitea} \label{gitea}
\end{figure} \end{figure}
\end{frame} \end{frame}
\begin{frame} \begin{frame}
\frametitle{Implementácia} \frametitle{Implementácia - výzvy}
\framesubtitle{} \framesubtitle{}
\begin{block}{Výzvy implementácie} \begin{block}{Výzvy implementácie}
\begin{itemize} \begin{itemize}
\item paralelný beh viacerých častí programu \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 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{itemize}
\end{block} \end{block}
\end{frame}
\begin{frame}
\frametitle{Implementácia - riešenia}
\framesubtitle{}
\begin{block}{Riešenia} \begin{block}{Riešenia}
\begin{itemize} \begin{itemize}
\item synchronizačné mechanizmy \item synchronizačné mechanizmy
@ -418,6 +569,8 @@
\begin{itemize} \begin{itemize}
\item maskovanie signálov (\texttt{SIGTERM, SIGINT}) \item maskovanie signálov (\texttt{SIGTERM, SIGINT})
\end{itemize} \end{itemize}
\item kompilácia v \texttt{/tmp} (ramdisk)
\item využívanie korektného C++
\end{itemize} \end{itemize}
\end{block} \end{block}
\end{frame} \end{frame}
@ -488,18 +641,22 @@ private:
\end{frame} \end{frame}
\begin{frame} \begin{frame}
\frametitle{Zdroj entropie: /dev/urandom} \frametitle{Zdroj entropie: UrandomEntropySrc}
\begin{block}{} \begin{block}{}
\begin{enumerate} \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 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{enumerate}
\end{block} \end{block}
\begin{figure}[!hbt] \begin{figure}[!hbt]
\centering \centering
\includegraphics[width=1.00\textwidth]{ues.png} \includegraphics[width=1.00\textwidth]{ues}
\caption{Náhodná udalosť od UrandomEntropySrc} \caption{Náhodná udalosť od UrandomEntropySrc}
\label{ues_event} \label{uesevent}
\end{figure} \end{figure}
\end{frame} \end{frame}
@ -535,23 +692,203 @@ write_seed_file();
\end{lstlisting} \end{lstlisting}
\end{frame} \end{frame}
\section{Validácia}
\subsection{ENT}
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\section{Referencie}
\begin{frame} \begin{frame}
\frametitle{Referencie} \frametitle{Analýza výstupu Fortuny - štatistické testy ent}
\begin{block}{Fortuna CSPRNG} \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} \begin{enumerate}
\item \url{https://www.schneier.com/academic/fortuna/} \item \alert{\texttt{fortuna}} (Release verzia) v móde
\item \url{https://www.schneier.com/wp-content/uploads/2015/12/fortuna.pdf} \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{enumerate}
\end{block} \end{block}
\end{frame} \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} \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ť! Vďaka za pozornosť!
\end{frame} \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},
}
% ============================================================================ %