From 402cf7f6707e8ec0944d22ed6c8966a6293c85a6 Mon Sep 17 00:00:00 2001 From: mr171hg Date: Thu, 10 Jun 2021 11:12:52 +0200 Subject: [PATCH] update --- README.md | 26 ++++++++++++++++++++++++++ chapters/analysis.tex | 6 +++--- chapters/evaluation.tex | 8 ++++---- thesis.pdf | Bin 1227877 -> 1227862 bytes 4 files changed, 33 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 9e1835e..93aba9b 100644 --- a/README.md +++ b/README.md @@ -18,4 +18,30 @@ Spustením tohto príkazu dôjde k vytvoreniu výsledného dokumentu vo formáte Projekt si samozrejme môžete otvoriť v ktoromkoľvek _LaTeX_ editore alebo IDE, ako je napr. _TeX Studio_ +## Source codes & programs +Všetky zdrojové kódy a odladené programy sú dostupné v priečinku: + + appendixes --> BC_ZK + +Viac informácií je možné násť v tomto priečinku alebo v bakalárskej práci (Obsah Prílohy A). + +# Author +Organization: Technical University of Kosice (TUKE), + +Department: Department of Electronics and Multimedia Telecommunications (DEMT/KEMT), + +Faculties: Faculty of Electrical Engineering and Informatics (FEI), + +Feld of study: Informatics, + +Study program: Computer Networks, + +School year: 3., Bachelor study, 2020/2021, + +Author: Marek Rohac -- MR, + +Kontakt: marek.rohac@student.tuke.sk + marroh004@gmail.com + +ALL RIGHTS RESERVED. diff --git a/chapters/analysis.tex b/chapters/analysis.tex index 5472ffb..9da6b0e 100644 --- a/chapters/analysis.tex +++ b/chapters/analysis.tex @@ -218,13 +218,13 @@ Nasledujúci opis vychádza z~dokumentu \cite[str. 6]{win10rng}. Dodanie náhodn \begin{itemize} \item zdroje náhodnosti -- z~ang. \textit{Entropy sources}, - \item uložiská náhodnosti -- z~ang. \textit{Entropy pools}, slúžia ako úložisko dát zdrojov entropie, ktoré sa následne používajú ako~seed hodnota pre \acrshort{prng}. + \item úložiská náhodnosti -- z~ang. \textit{Entropy pools}, slúžia ako úložisko dát zdrojov entropie, ktoré sa následne používajú ako~seed hodnota pre \acrshort{prng}. \item obnovovacia, resp. resetovacia logiky seed-u \footnote{Z~ang. \textit{Reseed logic}.}. Jej úlohou je rozhodovať ako a~kedy dôjde k~aktualizácii seed hodnoty v~zdrojovom \acrshort{prng} z~polí náhodnosti. \end{itemize} Proces reseed-u zdrojového generátora sa~opakuje periodicky pomocou časového plánovača. Spúšťa sa jednu sekundu po~inicializácii OS a~následne každým troj-násobkom predchádzajúcej hodnoty (3, 9, 27, ...). Koniec nastane po~dosiahnutí časového limitu. Ten je nastavený na jednu hodinu teda 3600 sekúnd. Plánovanie je nastavené tak,~aby k~reseed-u došlo iba v prípade, ak je CPU prebudený. Dôvodom sú~vysoké energetické nároky na prebudenie. \subsection{Zdroje náhodnosti} -Ich~úlohou je~poskytovať náhodné dáta. Výstup je~následne uložený v~uložiskách entropie. +Ich~úlohou je~poskytovať náhodné dáta. Výstup je~následne uložený v~úložiskách entropie. Súčasťou jadra rozhrania systému je~rozhranie na~vytváranie nových zdrojov entropie. \acrshort{api} vo~všeobecnosti podporuje dva typy zdrojov: \begin{itemize} @@ -233,7 +233,7 @@ Súčasťou jadra rozhrania systému je~rozhranie na~vytváranie nových zdrojov \end{itemize} Rozdiely v~ich~spracovaní sú~minimálne. Nízke zdroje označujú nepodmienené udalosti ako je~napríklad pohyb myši. Tie~však môžu byť reprodukovateľné. Vysokokvalitné náhodné dáta zabezpečujú vysoké zdroje. V prípade potreby dokážu ihneď (okamžite) poskytnúť entropiu všetky z uvedených zdrojov. Rozdiel medzi typom \textbf{pull} a~\textbf{push} je v~tom, že~prvý spomenutý neobsahuje vlastnú logiku časovania na~obnovu entropie. Tieto zdroje sú dodatočne informované pri~každom použití zdrojovým \acrshort{rng}. -Prerozdelenie dát v rámci jednotlivých uložísk entropie sa~riadi pomocou tzv. z~ang. \textit{Round-Robin\footnote{\url{https://en.wikipedia.org/wiki/Round-robin\_scheduling}.}} plánovania. Pri vysokých zdrojoch sa~vždy prvých 32 bajtov ukladá do~prvého úložiska entropie a~zvyšné sa~uložia do~poľa, ktoré nasleduje podľa plánu. Viac informácii k zdrojom náhodnosti je dostupných v \cite[str. 8]{win10rng}. +Prerozdelenie dát v rámci jednotlivých úložísk entropie sa~riadi pomocou tzv. z~ang. \textit{Round-Robin\footnote{\url{https://en.wikipedia.org/wiki/Round-robin\_scheduling}.}} plánovania. Pri vysokých zdrojoch sa~vždy prvých 32 bajtov ukladá do~prvého úložiska entropie a~zvyšné sa~uložia do~poľa, ktoré nasleduje podľa plánu. Viac informácii k zdrojom náhodnosti je dostupných v \cite[str. 8]{win10rng}. \subsubsection{Použité zdroje náhodnosti v OS Windows 10 \cite[str. 8]{win10rng}} Windows 10 používa viacero zdrojov entropie za~účelom poskytnúť dostatočnú entropiu v~každej situácii. V odbornej literatúre sa uvádzajú tieto zdroje. diff --git a/chapters/evaluation.tex b/chapters/evaluation.tex index 3477446..2fb41b0 100644 --- a/chapters/evaluation.tex +++ b/chapters/evaluation.tex @@ -113,16 +113,16 @@ int main(){ \end{minipage}\\ \subsection*{Experiment s knižnicou OpenSSL v.1.1.1k} -Po úspešnom prvom experimente so systémovými rozhraniami je overená i~knižnica OpenSSL. Pri generovaní náhodných dát je použitý ako \textbf{zdroj náhodnosti} výstup z CSPRNG API systému, na ktorom je naimplementová zvolená funkcionalita. Teda ak je niektorá z funkcií na RNG implementovaná v OS Windows, tak vstupom OpenSSL generátora \textbf{je výstup funkcie BCryptGenRandom}. Periodicky dochádza k reseed procesu, pričom prvotná inicializácia OpenSSL generátora prebehne pri spustení. +Po úspešnom prvom experimente so systémovými rozhraniami je overená i~knižnica OpenSSL. Pri generovaní náhodných dát je použitý ako \textbf{zdroj náhodnosti} výstup z CSPRNG API systému, na ktorom je naimplementovaná zvolená funkcionalita. Teda ak je niektorá z funkcií na RNG implementovaná v OS Windows, tak vstupom OpenSSL generátora \textbf{je výstup funkcie BCryptGenRandom}. Periodicky dochádza k reseed procesu, pričom prvotná inicializácia OpenSSL generátora prebehne pri spustení. Pri experimente boli aplikované rovnaké metódy ako pri softvérových rozhraniach. -Generovanie sme vykonali v rozhraní OpenSSL, konkrétne cez prostredie \verb|Command Prompt| (ďalej \verb|cmd|). Knižnicu OpenSSL sme spustili prikazom \verb|openssl| v prostredí \verb|cmd|. V~spustenej aplikácii sme použili príkaz: +Generovanie sme vykonali v rozhraní OpenSSL, konkrétne cez prostredie \verb|Command Prompt| (ďalej \verb|cmd|). Knižnicu OpenSSL sme spustili príkazom \verb|openssl| v prostredí \verb|cmd|. V~spustenej aplikácii sme použili príkaz: \verb|rand -out result.txt -base64 100|.\\ Pred vykonaním sme vytvorili snímku obrazu. Úlohou príkazu je vygenerovať náhodné dáta s veľkosťou 100 bajtov a~uložiť ich do textového súboru \verb|result.txt| vo~formáte \textit{Base64} \cite{base}. Pokus sme zopakovali 30-krát avšak ani raz sa nám pri experimente nepodarilo zreprodukovať výstup z generovania. \section{Vyhodnotenie výsledkov testovania} -Vzhľadom k dobe, ktorá ubehla od uverejnenia článku \cite{vm1}, bolo očakávané úplné vyriešenie tohto bezpečnostného rizika. Počas experimentu sa podarilo vyvrátiť túto hypotézu. Dôkazom je videozáznam, ktorý demonštruje postup od 4. do 7 kroku experimentu. Záznam je obsahom prenosného média prílohy A, spoločne so zdrojovými kódmi použítými pri experimente. Videozáznam je možné vyhľadať aj na webovej platforme Youtube pomocou odkazu \cite{yt1}. Vďaka videu je zrejmé, že pri používaní systémových \acrshort{rng} rozhraní isté bezpečnostný problém pretrváva. +Vzhľadom k dobe, ktorá ubehla od uverejnenia článku \cite{vm1}, bolo očakávané úplné vyriešenie tohto bezpečnostného rizika. Počas experimentu sa podarilo vyvrátiť túto hypotézu. Dôkazom je videozáznam, ktorý demonštruje postup od 4. do 7 kroku experimentu. Záznam je obsahom prenosného média prílohy A, spoločne so zdrojovými kódmi použitými pri experimente. Videozáznam je možné vyhľadať aj na webovej platforme Youtube pomocou odkazu \cite{yt1}. Vďaka videu je zrejmé, že pri používaní systémových \acrshort{rng} rozhraní isté bezpečnostný problém pretrváva. Je však nutné poukázať na skutočnosť, že zopakovať výstup generovania pomocou systémových RNG API s rovnakým výsledkom, vyžaduje splnenie podmienok, ktoré užívateľ pri bežnej práci nevykonáva. Viď vyššie uvedený postup. Obdobne bolo potrebné počas testovania vykonať veľké množstvo pokusov. Niekedy bolo nutné počas generovaní konkrétnej postupnosti absolvovať reštart obrazu aj 20-krát. @@ -142,7 +142,7 @@ Zmeny sa týkajú: \end{enumerate} Testovanie bolo vykonané aj pomocou aktualizovaných nástrojov. Bezpečnostné riziko aj napriek uvedeným zmenám stále pretrváva. Aktualizovaný videozáznam (\cite{yt2}) spoločne s údajmi o nástrojoch je taktiež obsahom prílohy A. -Je nutné informovať čitateľa o možnom probléme pri realizácii vyššie uvedených experimentov. Ak je na natívnom OS Windows použitý Windows Subsystem pre Linux vo verzii 2 (WSL2), tak je vysoko pravdepodobné, že nedosiahnete výsledky uvedené v tejto publikácií. Pred aplikovaním metód je potrebné deaktivovať túto funkciu. Dôvodom je interferencia medzi Hyper-V a týmto systémom. Občasne môže spôsobovať aj pády, respektíve nespoľahlivý výkon systému. +Je nutné informovať čitateľa o možnom probléme pri realizácii vyššie uvedených experimentov. Ak je na natívnom OS Windows použitý Windows Subsystém pre Linux vo verzii 2 (WSL2), tak je vysoko pravdepodobné, že nedosiahnete výsledky uvedené v tejto publikácií. Pred aplikovaním metód je potrebné deaktivovať túto funkciu. Dôvodom je interferencia medzi Hyper-V a týmto systémom. Občasne môže spôsobovať aj pády, respektíve nespoľahlivý výkon systému. \chapter{Vyhodnotenie dosiahnutých výsledkov} \label{evaluation} diff --git a/thesis.pdf b/thesis.pdf index 29a41a49f4dac585831093417e1c6e4891e1a5d5..ede23b01eeb6572cd8ff25dc55b1f093836516b3 100644 GIT binary patch delta 14696 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