Finish lab

This commit is contained in:
Florian Hoss 2022-06-08 16:26:04 +02:00
parent 88c32093a3
commit 6da3e784cd
9 changed files with 101 additions and 78 deletions

View file

@ -34,15 +34,14 @@ func (l letterList) Swap(i, j int) {
l[i], l[j] = l[j], l[i]
}
const LettersInTheAlphabet = 26
const startUpperCase = 65
const lettersInTheAlphabet = 'Z' - 'A' + 1
var letters = make([]letter, LettersInTheAlphabet)
var letters = make([]letter, lettersInTheAlphabet)
func initLetterStruct() {
for i := 0; i < LettersInTheAlphabet; i++ {
letters[i].upperCase = string(rune(startUpperCase + i))
letters[i].lowerCase = string(rune(startUpperCase + i + 32))
for i := 0; i < lettersInTheAlphabet; i++ {
letters[i].upperCase = string(rune('A' + i))
letters[i].lowerCase = string(rune('A' + i + 32))
}
}
@ -56,7 +55,7 @@ func readFile(relativePath string) string {
func countLetters(inputText string) int {
totalCount := 0
for i := 0; i < LettersInTheAlphabet; i++ {
for i := 0; i < lettersInTheAlphabet; i++ {
letters[i].count +=
strings.Count(inputText, letters[i].lowerCase) +
strings.Count(inputText, letters[i].upperCase)
@ -66,13 +65,13 @@ func countLetters(inputText string) int {
}
func calculateFrequency(totalCount int) {
for i := 0; i < LettersInTheAlphabet; i++ {
for i := 0; i < lettersInTheAlphabet; i++ {
letters[i].frequency = percent.PercentOf(letters[i].count, totalCount)
}
}
func printResult() {
for i := 0; i < LettersInTheAlphabet; i++ {
for i := 0; i < lettersInTheAlphabet; i++ {
l := letters[i]
fmt.Printf(
"The letter %s (%s) occurs %d times in the text and the frequencyArray in percent is %0.2f\n",
@ -83,14 +82,14 @@ func printResult() {
func plotResult() {
var count plotter.Values
for i := 0; i < LettersInTheAlphabet; i++ {
for i := 0; i < lettersInTheAlphabet; i++ {
count = append(count, float64(letters[i].count))
}
p := plot.New()
p.Title.Text = "Letter count"
p.X.Label.Text = "letter"
p.Y.Label.Text = "count"
countBars, err := plotter.NewBarChart(count, vg.Points(LettersInTheAlphabet/2))
countBars, err := plotter.NewBarChart(count, vg.Points(lettersInTheAlphabet/2))
countBars.Color = plotutil.Color(2)
if err != nil {
log.Fatalln(err)

View file

@ -10,11 +10,7 @@ import (
"unicode"
)
const lettersInTheAlphabet = 26
const startUpperCase = 65
const endUpperCase = startUpperCase + lettersInTheAlphabet
const startLowerCase = 97
const endLowerCase = startLowerCase + lettersInTheAlphabet
const lettersInTheAlphabet = 'Z' - 'A' + 1
type keyLetter struct {
upperCase string
@ -76,8 +72,8 @@ func encryptMessage(keyWord []keyLetter, message string) string {
} else {
keyWordIndex := index % len(keyWord)
newLetter := letter + keyWord[keyWordIndex].position
if (unicode.IsLower(letter) && newLetter >= endLowerCase) ||
(unicode.IsUpper(letter) && newLetter >= endUpperCase) {
if (unicode.IsLower(letter) && newLetter > 'z') ||
(unicode.IsUpper(letter) && newLetter > 'Z') {
newLetter -= lettersInTheAlphabet
}
encrypted += string(newLetter)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

View file

@ -38,28 +38,11 @@
commentchar=* % comment character
}
\lstdefinestyle{mystyle}{
backgroundcolor=\color{backcolour},
commentstyle=\color{codegreen},
keywordstyle=\color{magenta},
numberstyle=\tiny\color{codegray},
stringstyle=\color{codepurple},
emph={int,char,double,float,unsigned,void,bool},
emphstyle={\color{weborange}},
basicstyle=\ttfamily\footnotesize,
breakatwhitespace=false,
breaklines=true,
captionpos=b,
keepspaces=true,
numbers=left,
numbersep=5pt,
showspaces=false,
showstringspaces=false,
showtabs=false,
tabsize=2,
firstnumber=1,
}
\lstset{style=mystyle}
\lstset{language=Go,
basicstyle=\ttfamily\scriptsize,
keywordstyle=\color{blue}\ttfamily,
stringstyle=\color{red}\ttfamily,
commentstyle=\color{green}\ttfamily}
\setuptoc{toc}{totoc}

View file

@ -4,23 +4,61 @@
Als Programmiersprache wurde Go\footnote{\href{https://go.dev/}{https://go.dev/}} ausgewählt. Das Analysetool soll jeden Buchstaben eines Textes auf Häufigkeit untersuchen.
Im Prgram wird mit einem Strukt Array gearbeitet. Darin wird der Buchstabe swowohl groß, als auch klein als String abgespeichert. Außerdem wird die dazugehörige Anzahl mit der Häufigkeit abgespeichert. Dadurch kann nach dem Durchlauf der Datensatz einfach sortiert werden.
Im Prgram wird mit einem Array aus Buchstaben-Strukts gearbeitet.
Das Alphabet wird im “Unicode Code Point” genutzt damit es einfach verglichen werden kann. Zum Start des Programmes wird das Alphabet in dem ``letters''-Array initialisiert (Abb. \ref{fig:Initialisierung mit Unicode}).
\begin{lstlisting}
type letter struct {
upperCase string
lowerCase string
count int
frequency float64
}
type letterList []letter
\begin{figure}[H]
\begin{center}
\includegraphics[width=0.6\textwidth]{part1/initAlphabet}
\caption{Initialisierung mit Unicode}
\label{fig:Initialisierung mit Unicode}
\end{center}
\end{figure}
func (l letterList) Len() int {
return len(l)
}
func (l letterList) Less(i, j int) bool {
return l[i].frequency > l[j].frequency
}
func (l letterList) Swap(i, j int) {
l[i], l[j] = l[j], l[i]
}
\end{lstlisting}
Darin wird der Buchstabe swowohl groß, als auch klein als String abgespeichert. Außerdem wird die dazugehörige Anzahl mit der Häufigkeit abgespeichert. Dadurch kann nach dem Durchlauf der Datensatz einfach sortiert werden.
Das Alphabet wird im “Unicode Code Point” genutzt damit es einfach verglichen werden kann. Zum Start des Programmes wird das Alphabet in dem ``letters''-Array initialisiert.
\begin{lstlisting}
var letters = make([]letter, lettersInTheAlphabet)
func initLetterStruct() {
for i := 0; i < lettersInTheAlphabet; i++ {
letters[i].upperCase = string(rune('A' + i))
letters[i].lowerCase = string(rune('A' + i + 32))
}
}
\end{lstlisting}
Danach wird die angegebene Datei gelesen und als String geparsed. Der String wird anschließend mit der ``strings.Count''-Funktion gelesen und die gelesene Anzahl im Struct gespeichert.
Wenn alle Buchstaben gelesen wurden, kann die totale Anzahl an Buchstaben genommen werden um die Häufigkeit zu berechnen.
\begin{lstlisting}
func countLetters(inputText string) int {
totalCount := 0
for i := 0; i < lettersInTheAlphabet; i++ {
letters[i].count +=
strings.Count(inputText, letters[i].lowerCase) +
strings.Count(inputText, letters[i].upperCase)
totalCount += letters[i].count
}
return totalCount
}
\end{lstlisting}
Bevor die sortierte Ausgabe erfolgt werden die Daten mit einem Plotter in einer ``barChart.png'' datei gezeichnet (Abb. \ref{fig:Visualisierung von plaintext.txt}).
Wenn alle Buchstaben gelesen wurden, kann die totale Anzahl an Buchstaben genommen werden um die Häufigkeit zu berechnen. Bevor die sortierte Ausgabe erfolgt werden die Daten mit gonum.org/v1/plot/plotter\footnote{\href{https://pkg.go.dev/gonum.org/v1/plot/plotter}{https://pkg.go.dev/gonum.org/v1/plot/plotter}} in einer ``barChart.png'' Datei gezeichnet (Abb. \ref{fig:Visualisierung von plaintext.txt}).
\begin{figure}[H]
\begin{center}
@ -44,7 +82,11 @@ Zuletzt wird das soriterte Ergebnis ausgegeben (Abb. \ref{fig:Ergebnis von plain
\subsection{Verschlüsselung}
Zur verschlüsselung wird ebenfalls “Unicode Code Point” genutzt. Dadurch kann der jeweilige Text einfach um die angegeben Zahl verschoben werden. Dabei zu beachten ist das Ende des Alphabetes, da von vorne begonnen werden muss. Außerdem sind sollten Kleinbuchstaben und Großbuchstaben beachtet werden. Alle Zeichen die keine Buchstaben sind, werden ohne verschlüsselung ausgegeben. Der key lautet ``florianhoss''.
Zur verschlüsselung wird ebenfalls “Unicode Code Point” genutzt. Dadurch kann der jeweilige Text einfach um die angegeben Zahl verschoben werden. Dabei zu beachten ist das Ende des Alphabetes, da von vorne begonnen werden muss. Außerdem sind sollten Kleinbuchstaben und Großbuchstaben beachtet werden. Alle Zeichen die keine Buchstaben sind, werden ohne verschlüsselung ausgegeben. Nach dem Lompilieren kann die Verschlüsselung einfach mit Parametern gestartet werden:
\begin{verbatim}
./tool -k florianhoss -f input.txt
\end{verbatim}
\subsubsection{Originaler Text (input.txt)}
@ -60,7 +102,7 @@ Zur verschlüsselung wird ebenfalls “Unicode Code Point” genutzt. Dadurch ka
\newpage
Das erneute Ausführen der Analyse ergibt eine komplett unterschiedliche Verteilung der Buchstaben (Abb. \ref*{fig:Visualisierung von input.txt} und Abb. \ref*{fig:Visualisierung von output.txt}).
Das erneute Ausführen der Analyse ergibt eine gleichmäßigere Verteilung der Buchstaben (Abb. \ref*{fig:Visualisierung von input.txt} und Abb. \ref*{fig:Visualisierung von output.txt}). Damit ist eine Häufigkeitsanalyse auf den ersten Blick nicht mehr möglich.
\begin{figure}[H]
\begin{center}
@ -78,4 +120,4 @@ Das erneute Ausführen der Analyse ergibt eine komplett unterschiedliche Verteil
\end{center}
\end{figure}
Eine Häufigkeitsanalyse kann Hilfreich sein, da in unterschiedlichen Sprachen andere Häufigkeiten auftreten können und damit der Text einfacher analysiert werden kann.
Eine Häufigkeitsanalyse kann Hilfreich sein, da in unterschiedlichen Sprachen andere Häufigkeiten auftreten können und damit der Text einfacher analysiert werden kann. Wenn bei einem Cipher eine Häufigkeitsanalyse erfolgreich durchgeführt werden kann, können Wörter oder Sätze erkannt und entschlüsselt werden.

View file

@ -1,32 +1,28 @@
\section{Part 3: Symmetric Encryption}
\subsection{Plaintext}
\begin{verbatim}
This is a small plaintext
\end{verbatim}
\subsection{Verschlüsselter Plaintext}
\begin{verbatim}
Plaintext: This is a small plaintext
\end{verbatim}
\begin{figure}[H]
\begin{center}
\includegraphics[width=0.8\textwidth]{part3/plaintext}
\includegraphics[width=0.7\textwidth]{part3/plaintext}
\caption{Verschlüsselter Plaintext}
\label{fig:Verschlüsselter Plaintext}
\end{center}
\end{figure}
\subsection{Wort mit 8 Zeichen}
\subsection{8 Zeichen Verschlüsselt mit DES}
\begin{verbatim}
FLORIANH x45
8 Zeichen: FLORIANH x45
\end{verbatim}
\subsection{Verschlüsselt mit DES}
\begin{figure}[H]
\begin{center}
\includegraphics[width=0.7\textwidth]{part3/des}
\includegraphics[width=0.65\textwidth]{part3/des}
\caption{Verschlüsselt mit DES}
\label{fig:Verschlüsselt mit DES}
\end{center}

View file

@ -7,7 +7,7 @@ openssl prime -generate -bits 8
\end{verbatim}
\begin{verbatim}
prime1 = 211, prime2 = 223, prime3 = 227, e=11
prime1 = 211, prime2 = 223, e=11
\end{verbatim}
\subsection{Berechnungen}
@ -18,29 +18,36 @@ prime1 = 211, prime2 = 223, prime3 = 227, e=11
\end{align}
\begin{verbatim}
g = 9, x = 2, y = 3
g = 9, x = 2, y = 3, n = 227 (prime3)
\end{verbatim}
\begin{align}
a = g^{x}\ (mod\ prime3) = 9^{2} (mod\ 227) = 81 \\
b = g^{y}\ (mod\ prime3) = 9^{3} (mod\ 227) = 48 \\
k_{1} = b^{x}\ (mod\ prime3) = 48^{2}\ (mod\ 227) = 34 \\
k_{2} = a^{y}\ (mod\ prime3) = 81^{3}\ (mod\ 227) = 34 \\
k = k_{1} = k_{2} = 34
a = g^{x}\ (mod\ n) = 9^{2} (mod\ 227) = 81\ (public\ a) \\
b = g^{y}\ (mod\ n) = 9^{3} (mod\ 227) = 48\ (public\ b) \\
k_{1} = b^{x}\ (mod\ n) = 48^{2}\ (mod\ 227) = 34\ (private) \\
k_{2} = a^{y}\ (mod\ n) = 81^{3}\ (mod\ 227) = 34\ (private) \\
k = k_{1} = k_{2} = 34\ (private)
\end{align}
\subsection{Fragen und Antworten}
1. What attack is the Diffie-Hellman key exchange vulnerable to?
Man in the Middle
- Man in the Middle
2. What measures can be taken to prevent this type of attack?
Encryption, Authentication over QR code or 2Factor-Authentication
- Encryption, Authentication over QR code or 2Factor-Authentication
3. For the Diffie-Hellman, a generator g is used. Explain what a generator is and how can it be found
- A generator is a number that will be the base of the calculation and is shared between the 2 parties. G is a small prime number.
\begin{align}
g^{a}\ (mod\ n) \neq g^{b}\ (mod\ n) \\
g^{(a\ *\ b)}\ (mod\ n) = g^{(b\ *\ a)}\ (mod\ n)
\end{align}
4. Show why for the primes 61,23 and the public key e=60 no private key d can be found
\begin{align}

View file

@ -17,7 +17,7 @@ pony-ca, admin@pony-ca.de
\begin{figure}[H]
\begin{center}
\includegraphics[width=0.7\textwidth]{part6/private}
\includegraphics[width=0.8\textwidth]{part6/private}
\caption{Private Key}
\label{fig:Private Key}
\end{center}
@ -25,7 +25,7 @@ pony-ca, admin@pony-ca.de
\begin{figure}[H]
\begin{center}
\includegraphics[width=0.7\textwidth]{part6/public}
\includegraphics[width=0.9\textwidth]{part6/public}
\caption{Public Key}
\label{fig:Public Key}
\end{center}

View file

@ -20,6 +20,6 @@
\vfill
\raggedright{}
\HRule{13pt}{1pt} \\
\titleemph{Datum:} 30.05.2022 \\
\titleemph{Datum:} 08.06.2022 \\
\titleemph{Git:} \href{https://git.unjx.de/flo/SWB6-ITSec/src/branch/master/Lab04}{https://git.unjx.de/flo/SWB6-ITSec/src/branch/master/Lab04}
\end{titlepage}