add content + pics + refs.bib
...in a one bad huge commit, I know...
527
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}
|
||||
\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 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}
|
||||
|
||||
|
BIN
img/Fortuna_Vienna.jpg
Normal file
After Width: | Height: | Size: 4.0 MiB |
BIN
img/La_Fortune.jpg
Normal file
After Width: | Height: | Size: 610 KiB |
BIN
img/bookcover.jpg
Normal file
After Width: | Height: | Size: 505 KiB |
BIN
img/ddprepare100M.png
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
img/dieharder-full-testsuite-run-proof.png
Normal file
After Width: | Height: | Size: 689 KiB |
BIN
img/dieharder-xtrategy.png
Normal file
After Width: | Height: | Size: 332 KiB |
BIN
img/ent1000M.png
Normal file
After Width: | Height: | Size: 314 KiB |
BIN
img/fortuna2dd.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
img/g_state.png
Normal file
After Width: | Height: | Size: 118 KiB |
BIN
img/pool-append-fun.png
Normal file
After Width: | Height: | Size: 175 KiB |
BIN
img/reseed-ctr-incr.png
Normal file
After Width: | Height: | Size: 386 KiB |
BIN
img/serpent.png
Normal file
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},
|
||||
}
|
||||
|
||||
|
||||
% ============================================================================ %
|