commit 1ad2f0e3ab6a0f831b12825bcfa8b41291a22fdb Author: Valentin Brandl Date: Sat Oct 13 13:23:37 2018 +0200 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..378eac2 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +build diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d15744a --- /dev/null +++ b/Makefile @@ -0,0 +1,32 @@ +.PHONY: default clean + +MD_SOURCES=$(shell find . -name '*.md' -not -path "./templates/*") +HTML_TARGETS=$(MD_SOURCES:%.md=build/%.html) +PDF_TARGETS=$(MD_SOURCES:%.md=build/%.pdf) + +DOT_SOURCES=$(shell find . -name '*.dot' -not -path "./templates/*") +DOT_TARGETS=$(DOT_SOURCES:%.dot=build/%.png) + +TEX_SOURCES=$(shell find . -not -path "./templates/*" -name '*.tex') +TEX_TARGETS=$(TEX_SOURCES:%.tex=build/%.pdf) + +default: $(DOT_TARGETS) $(HTML_TARGETS) $(PDF_TARGETS) $(TEX_TARGETS) + +build/%.html: %.md + @mkdir -p $$(dirname $@) + pandoc -s --mathjax --template ./templates/mindoc.html --toc --toc-depth=2 -o $@ $< + +build/%.pdf: %.md + @mkdir -p $$(dirname $@) + pandoc --resource-path=$$(dirname $@) --template ./templates/eisvogel.tex --toc --toc-depth=2 -o $@ $< + +build/%.png: %.dot + @mkdir -p $$(dirname $@) + dot -Tpng -o $@ $< + +build/%.pdf: %.tex + @mkdir -p $$(dirname $@) + latexmk -pdf -outdir=$$(dirname $@) $< + +clean: + rm -r build diff --git a/index.md b/index.md new file mode 100644 index 0000000..d9fca51 --- /dev/null +++ b/index.md @@ -0,0 +1,10 @@ +--- +title: My Knowledge Wiki +subtitle: > + Things to know, learn and remember +--- +## University + +- [Diskrete Mathematik](school/di-ma) +- [Einführung in die Kryptographie](school/intro-crypto) +- [Netzsicherheit 1](school/netsec1) diff --git a/school/di-ma.md b/school/di-ma.md new file mode 100644 index 0000000..34e432a --- /dev/null +++ b/school/di-ma.md @@ -0,0 +1,9 @@ +--- +title: Diskrete Mathematik +subtitle: > + Notizen und Mitschrift zur Vorlesung Diskrete Mathematik +--- + +- [2018-10-09 Intro](di-ma/20181009_1-intro) +- [2018-10-09 Kombinatorik](di-ma/20181009_2-kombinatorik) +- [2018-10-10 Binomialkoeffizient](di-ma/20181010_1-binomialkoeffizient) diff --git a/school/di-ma/20181009-graph1.dot b/school/di-ma/20181009-graph1.dot new file mode 100644 index 0000000..81b4dc7 --- /dev/null +++ b/school/di-ma/20181009-graph1.dot @@ -0,0 +1,24 @@ +digraph undirected { + edge [ arrowhead="none" ]; + node [ shape="circle" ]; + { + rank=same; + 2; + 4; + } + { + rank=same; + 3; + } + { + rank=same; + 1; + 5; + } + 1 -> 2; + 3 -> 2; + 3 -> 4; + 2 -> 4; + 4 -> 5; + 5 -> 6; +} diff --git a/school/di-ma/20181009_1-intro.md b/school/di-ma/20181009_1-intro.md new file mode 100644 index 0000000..14a0324 --- /dev/null +++ b/school/di-ma/20181009_1-intro.md @@ -0,0 +1,56 @@ +--- +title: Intro Veranstalting +date: 2018-10-09 +--- + +# Organisatorisches + +## Moodle + +Passwort: `gauss` + +## Übungen + +- Bis zu 10% Bonus für Prüfung +- Bearbeitung von Dienstag bis Dienstag +- Abgabe in Kästen in NA? +- 3er Gruppen erlaubt +- Anmeldung ab 11.10. 12:00 Uhr + +# Themen + +1. Kombinatorik +2. Graphentheorie +3. Zahlentheorie/Algebra + + +## Beispiel zu 1. + +### Gegeben + +$n$ Bälle + +$m$ Urnen + +### Frage + +Wieviele Möglichkeiten gibt es, die Bälle auf die Urnen zu verteilen? + +#### Nebenbedingungen + +1. Bälle/Urnen sind (nicht) Unterscheidbar +2. Mindestens in jeder Urne 1 Ball (surjektiv) +3. Höchstens 1 Ball pro Urne (injektiv) +4. Genau 1 Ball je Urne + +## Beispiel zu 2. + +![Ungerichteter Graph](./20181009-graph1.png) + +### Gegeben + +Ungerichteter Graph G + +### Frage + +Für 2 Knoten aus G. Was ist der kürzeste Weg zwischen den Knoten? diff --git a/school/di-ma/20181009_2-kombinatorik.md b/school/di-ma/20181009_2-kombinatorik.md new file mode 100644 index 0000000..3513c3d --- /dev/null +++ b/school/di-ma/20181009_2-kombinatorik.md @@ -0,0 +1,238 @@ +--- +title: Kombinatorik +date: 2018-10-09 +--- + +# Kombinatorik + +## Elementare Zählprobleme und Grundlegende Regeln + +### Beispiel + +#### Gegeben + +- 3 elementige Menge $M = \{1, 2, 3\}$ + +#### Frage + +Wie viele Möglichkeiten gibt es, 2 Elemente azs M zu ziehen? + +#### Antwort + +It depends + + --- | geordnet | ungeordnet +--- | --- | --- +mit zurücklegen | A:
$(1,1),(1,2),(1,3)$
$(2,1),(2,2),(2,3)$
$(3,1),(3,2),(3,3)$ | D:
$\{1,1\},\{1,2\}\{1,2\}$
$\{2,2\},\{3,2\}$
$\{3,3\}$ +ohne zurücklegen | B:
$(1,2),(1,3)$
$(2,1),(2,3)$
$(3,1),(3,2)$ | C:
$\{1,2\},\{1,3\}$
$\{2,3\}$
+ + +Wie viele Möglichkeiten gibt es allgemein, aus einer $n$-elementingen Menge $k$ elemente zu ziehen? + +## *Zuerst:* Einfache Grundregeln + +### Summenregel + +Seien $S$, $T$ endliche Mengen, disjunkt, d.h. $S \cap T = \emptyset$ (Notation $S \dot\cup T$, disjunkte Vereinigung), +dann gilt + +$$ +| S \dot\cup T | = | S | + | T | +$$ + +Allgemeiner: Gegeben $S_1, S_2, ... S_n$, endliche, disjunkte Mengen, dann gilt + +$$ +| \dot\cup^n_{i=1} S_i | = | S_1 | + | S_2 | + ... + | S_n | = \sum\limits^n_{i=1} | S_i | +$$ + + +### Produktregel + +Seien $S$, $T$ endliche Mengen, dann gilt +$$ +| S \times T | = | S | \cdot | T | +$$ +wobei +$$ +S \times T = \{(s,t) \mid s \in S, t \in T \} +$$ + +Allgemeiner: Gegeben $S_1, S_2, ... S_n$ endliche Mengen, dann gilt + +$$ +\vert S_1 \times S_2 \times ... S_n \vert = \vert S_1 \vert \cdot \vert S_2 \vert \cdot ... \vert S_n \vert +$$ + +#### Beispiel + +$$ +S_1, ..., S_n = \{0, 1\}, n = 64 \\ +\vert S^n \vert = \vert \{0,1\}^{64} \vert = 2^{64} +$$ + +Anzahl der Zustände eines 64-bit Registers. + + +### Gleichheitsregel + +Seien $S$, $T$ endliche Mengen und $f: S \to T$ eine bijektive Abbildung, dann gilt +$$ +\vert S \vert = \vert T \vert +$$ + +(eigentlich: Definition von "gleich groß") + +Allgemeiner: Seien $S$, $T$ endliche Mengen und $f: S \to T$ eine $k$ auf $1$ Abbildung, d.h. $\forall t \in T$ gilt +$\vert\{s \in S \mid f(s) = t \}\vert = \vert f^{-1}(t) \vert = k$ dann gilt +$$ +\vert S \vert = k \cdot \vert T \vert +$$ + +Damit können wir nun die Fälle A - D untersuchen. + +### Fall A + +In Fall A zählen wir $k$-Tupel mit Komponenten aus der $n$-elementigen Menge $M$, d.h. Elemente aus +$M \times M \times ... M = M^k$ + +Aus der Produktregel folgt: Es gibt $\vert M \vert^k = n^k$ Möglichkeiten + + +#### Satz + +Die Anzahl der $k$-Tupel mit Komponenten aus einer $n$-elementigen Menge ist +$$ +n^k\\ +\Box +$$ + + +### Fall B + +Wir ziehen aus einer $n$-elementigen Menge ohne zurücklegen +- Für die erste Komponente haben wir $n$ Möglichkeiten +- Für die zweite Komponente haben wir $n - 1$ Möglichkeiten +- usw. + +D.h. insgesamt haben wir $n(n-1)(n-2)...(n-k+1) = n^{\underline{k}}$ Möglichkeiten ($k$-te absteigende Faktorielle). + +#### Satz + +Die Anzahl der $k$-Tupel mit paarweise verschiedenen Komponenten aus einer $n$-elementigen Menge ist +$$ +n^{\underline{k}} = n\cdot(n-1)\cdot...\cdot(n-k+1) +$$ + +**Wichtiger Spezialfall**: +$$ +n = k +$$ +Dann ist das nichts anderes als die Anzahl der Permutationen von $n$ Elementen + +##### Beispiel + +$$ +n = 3 \\ +M = \{1,2,3\} +$$ + +Mögliche Permutationen: $(123), (132), (213), (231), (312), (321)$ + +$3! = 3\cdot2\cdot1$ Möglichkeiten + +$n! = n\cdot(n-1)\cdot...\cdot2\cdot1$ Möglichkeiten + +**Bemerkung:** Es gilt +$$ +n^{\underline{k}} = \frac{n!}{(n-1)!} +$$ + +### Fall C + +Wir zählen die Anzahl der $k$-elementigen Teilmengen einer $n$-elementigen Menge. + +Von fall B zu Fall c durch ignorieren der Reihenfolge. + +Beachte die Abbildung die einem $k$-Tupel mit paarweise verschiedenen Komponenten $(i_1, ..., i_k)$ die $k$-elementige +Teilmenge $\{i_1, ..., i_k\}$ zuordnet. Diese Abbildung ist $k!$ - auf $-1$ da jede $k$-elementige Teilmenge auf $k!$ +Arten angeordnet werden kann. + +Damit folgt (Gleichheitsregel) + +#### Satz + +Die Anzahl der $k$-elementigen Teilmengen einer $n$-elementigen Menge ist +$$ +\binom{n}{k} = \frac{n^{\underline{k}}}{k!} = \frac{n!}{k!(n-k)!} +$$ + +$\binom{n}{k}$ ist der Binomialkoeffizient. + + +##### Beispiel + +$$ +n = 3, k = 2 \\ +\binom{3}{2} = \frac{3!}{2! \cdot 1!} = \frac{3\cdot2}{2} = 3 +$$ + +### Fall D + +Hier zählen wir Multimengen. In einer Multimenge können Elemente mehrfach vorkommen, mit Vielfachheit. + +In $k$-elementigen Multimengen addieren sich die Vielfachkeiten zu $k$. + +Wir wollen die Gleichheitsregel anwenden. Dazu folgende Kodierung einer Multimenge: + +- Zwei Symbole `*` und `|` +- Wir schreiben $t$ Sterne `*` falls ein Element $i$ Vielfachkeit $t$ hat +- Übergang von $i$ zu $i-1$ wird gekennzeichnet durch `|` + +#### Beispiel 1 + +$M = \{1,2,3,4,5\}$ und Multimenge $S = \{1,1,1,3,3,4,4,4\}$ wird kodiert als + +``` +*** | | ** | *** | +``` + +#### Beispiel 2 + +$T = \{1,1,5,5\}$ wird kodiert als + +``` +** | | | | ** +``` + + +Jede $k$-elementige Multimenge einer $n$-elementigen Menge entspricht eindeutig einer Sequenz aus $k$ `*` Symbolen und +$n-1$ `|` Symbolen. + +Jede Sequenz von $k$ `*` Symbolen und $n-1$ `|` Symbolen entspricht genau einer $k$-elementigen Multimenge. + +Abbildung Multimenge $\to$ Kodierungssequenz ist bijektiv. + +Wegen der Gleichheitsregel können wir also genausogut die Anzahl der möglichen Kodierungssequenzen zählen. + +Kodierungssequenz hat die Länge $(n-1)+k$ und an $k$ Stellen steht ein `*`. Dann gibt es genau $\binom{n-1+k}{k}$ +solcher Sequenzen. + +#### Satz + +Die Anzahl der $k$-elementigen Multimengen einer $n$-elementigen Menge ist + +$$ +\binom{n-1+k}{k} +$$ + +##### Beispiel + +25 Eissorten. Wie viele mögliche Eisbecher mit 5 Kugeln gibt es? + +**Antwort**: + +$$ +n = 25, k = 5 \\ +\binom{25-1+5}{5} = \binom{29}{5} = 118755 +$$ diff --git a/school/di-ma/20181010-personen.dot b/school/di-ma/20181010-personen.dot new file mode 100644 index 0000000..862ea3a --- /dev/null +++ b/school/di-ma/20181010-personen.dot @@ -0,0 +1,22 @@ +digraph personen { + edge [ arrowhead="none" ]; + node [ shape="circle" ]; + 1; + { + rank=same; + 2; + 3; + } + { + rank=same; + 4; + 5; + } + 1 -> 2; + 1 -> 3; + 1 -> 4; + 1 -> 5; + 4 -> 5; + 5 -> 3; + 2 -> 3; +} diff --git a/school/di-ma/20181010_1-binomialkoeffizient.md b/school/di-ma/20181010_1-binomialkoeffizient.md new file mode 100644 index 0000000..3d5ae8b --- /dev/null +++ b/school/di-ma/20181010_1-binomialkoeffizient.md @@ -0,0 +1,223 @@ +--- +title: Binomialkoeffizient +date: 2018-10-10 +--- + +# Wiederholung + +$n$ Elemente, $k$ mal ziehen: + + --- | geordnet | ungeordnet +:---: | :---: | :---: +mit zurücklegen | $n^k$ | $\binom{n+k-1}{k}$ +ohne zurücklegen | $n^{\underline{k}}$ | $\binom{n}{k} = \frac{n!}{k!\cdot(n-k)!}$ + +## Beispiel a + +**Frage**: Wie viele 10-elementige Teilmengen von der 100-elementigen Menge $M = \{1,2,...100\}$ + +1. gibt es? +2. die entweder die 1 oder die 2 enthalten gibt es? + +### Zu 1) + +$$ +\binom{100}{10} +$$ + +### Zu 2) + +Zwei Teile: + +* Die Anzahl der 10 elementingen Teilmengen, die 1 aber nicht 2 enthalten +* Die Anzahl der 10 elementingen Teilmengen, die 2 aber nicht 1 enthalten + +In beiden Fällen gibt es $\binom{98}{9}$ Möglichkeiten. + +Die Fälle sind disjunkt $\Rightarrow$ es gibt $2 \cdot \binom{98}{9}$ Möglichkeiten + + +## Beispiel b + +Wahl mit 100 Wahlberechtigten und 2 Kandidaten. Jede Stimme hat 4 Möglichkeiten (Kandidat 1, Kandidat 2, enthalten oder +ungültig). + +**Frage**: Wie viele Ergebnisse kann es geben? + +Dies entspricht der Anzahl der 100 elementigen Multimengen einer 4-elementigen Menge + +$$ +\binom{100+4-1}{100} = \binom{103}{100} = 353702 +$$ + + +# Eigenschaften von Binomialkoeffizienten + +**Satz**: Seien $n, k \in \mathbb{N}$ $k \leq n$ dann gilt + +1. $\binom{n}{k} = \binom{n}{n-k}$ +2. $\binom{n}{k} = \binom{n-1}{k} + \binom{n-1}{k-1}$ +3. $\binom{n}{k} = \sum\limits^k_{l=0} \binom{n}{l} \cdot \binom{n}{k-l}$ +4. $(a+b)^n = \sum\limits^n_{k=0} \binom{n}{k} \cdot a^k \cdot b^{n-k}$ + +## Beweis + +Wir wollen kombinatorische Beweise geben. Wir zählen auf beiden Seiten der Gleichung die gleichen Objekte aber auf +verschiedene Weise. + +**zu 1)** Sei $M$ eine $n$-elementige Menge + +* $\binom{n}{k}$ zählt die $k$-elementigen Teilmengen von $M$ +* $\binom{n}{n-k}$ zählt die $(n-k)$-elementigen Teilmengen von $M$ + +Wir betrachten die Abbildung + +$$ +f: \text{Teilmenge von M} \to \text{Teilmenge von M} \\ +f(A) = M \setminus A = \{x \in M \mid x \notin A\} = A^{\mathrm{C}} +$$ + +Es gilt: + +1. $\vert A \vert = k \Rightarrow \vert f(A) \vert = n-k$ +2. $f$ ist bijektiv (die Umkehrabbildung ist $f$ selbst) + +Damit folgt aus dem Gleichheitsprinzip + +$$ +\binom{n}{k} = \binom{n}{n-k} +$$ + +**zu 2)** Sei $M = \{1, ... n\}$ und $\mathbb{T} = \{A \subseteq M \mid \vert A \vert = k\}$ + +Es gilt $\vert\mathbb{T}\vert = \binom{n}{k}$ + +Wir teilen die Menge $\mathbb{T}$ auf in zwei disjunkte Teile + +$$ +\mathbb{T}_1 = \{ A \subseteq M \mid \vert A \vert = k, n \notin A\} \\ +\mathbb{T}_2 = \{ A \subseteq M \mid \vert A \vert = k, n \in A\} +$$ + +Dann gilt (Summenregel) + +$$ +\binom{n}{k} = \vert \mathbb{T} \vert = \vert \mathbb{T}_1 \vert + \vert \mathbb{T}_2 \vert +$$ + +* $\vert \mathbb{T}_1 \vert = \binom{n-1}{k}$, denn Elemente aus $\mathbb{T}_1$ entsprechen $k$-elementigen Teilmengen +aus $M^\prime = \{1,... n-1\}$ +* $\vert \mathbb{T}_2 \vert = \binom{n-1}{k-1}$, denn für jedes $A \in \mathbb{T}_2$, d.h. +$A \subseteq M, \vert A \vert = k$ und $n \in A$ betrachte + +$$ +A^\prime = A \setminus \{n\} +$$ + +$A^\prime$ ist eine $(k-1)$-elementige Teilmenge von $M^\prime = \{1,... n-1\}$ + +**zu 3)** Seien $A$, $B$ Mengen mit $\vert A \vert = n$ und $\vert B \vert = m$ mit $A \cap B = \emptyset$ (disjunkt) + +$\binom{n+m}{k}$ ist die Anzahl der $k$-elementigen Teilmengen von $A \dot\cup B$ ($\vert A \dot\cup B \vert = n + m$). + +Wir teilen die $k$-elementigen Teilmengen von $A \dot\cup B$ in $k+1$ disjunkte Fälle auf + +** hier wäre ein Venn Diagramm. Mach das mal + +**Fall l** (für $l \in \{0,...k\}$) + + +Betrachte die $k$-elementigen Teilmengen $S$ von $A \cup B$, so dass $\vert A \cap S \vert = l$ +($\Leftrightarrow \vert B \cap S \vert = k - l$), d.h. wir betrachten die Anzahl der $l$-elemeniigen Teilmengen von $A$ +und der $(k-l)$-elementigen Teilmenge von $B$. + +Mit der Produktregel ergeben sich $\binom{n}{l} \cdot \binom{m}{k-l}$. + +Mit der Summenformel ergibt sich + +$$ +\binom{n+m}{k} = \sum\limits^k_{l=0} \binom{n}{l} \cdot \binom{m}{k-l} +$$ + +**zu 4)** + +$$ +(a+b)^n = (a+b) \cdot (a+b) \cdot ... (a+b) +$$ + +Beim Ausmultiplizieren "entscheiden" wir uns für jede der $n$ Klammern for $a$ oder $b$. Für einen Term +$a^k\cdot b^{n-k}$ wählen wir aus den $n$ Klammern genau $k$-mal das $a$. Damit haben wir genau $\binom{n}{k}$ +Möglichkeiten den Term $a^k \cdot b^{n-k}$ zu erhalten. + +# Kombinatorische Prinzipien + +## Schubfachprinzip + +**Beispiel**: Wir haben 9 Schubladen und 10 Objekte, die wir auf die Schubladen verteilen wollen. Dann gibt es eine +Schublade, in der mindestens 2 Objekte landen. + +### Satz + +Seien $X$, $Y$ endliche Mengen mit $\vert X \vert \geq \vert Y \vert + 1$ und $f: X \to Y$ eine Abbildung dann + +$$ +\exists y \in Y \text{ so dass } \vert f^{-1}(y) \vert = \vert \{x\in X \mid f(x) = y\} \vert \geq 2 +$$ + +### Beweis + +Statt $A \Rightarrow B$ zeigen wir $\lnot B \Rightarrow \lnot A$ + +Sei $f: X \to Y$ gegeben so dass $\forall y \in Y$ gilt $\vert f^{-1}(y) \vert \leq 1$, dann gilt + +$$ +\vert X \vert = \sum\limits_{y \in Y} \vert f^{-1}(y) \vert \leq \sum\limits_{y \in Y} 1 = \vert Y \vert +$$ + +Allgemeiner gilt: Seien $X$, $Y$ endliche Mengen und $f: X \to Y$ eine Abbildung, dann $\exists y \in Y$ so dass + +$$ +\vert f^{-1}(y) \vert \geq \left\lceil \frac{\vert X \vert}{\vert Y \vert} \right\rceil +$$ + +($\lceil \cdot \rceil$ ist die obere Gaussklammer, das heißt die kleinste natürliche Zahl größer als $x$). + +**Beispiel 1**: *Gegeben*: $n$ Personen $1,...n$ mit Bekanntschaftsrelationen, darstellbar als Graph mit Personen als +Konten und Kanten zwischen Knoten, falls sich die Personen kennen. + +![Personen Graph](./20181010-personen.png) + +* 1 kennt 4 Personen +* 2 kennt 2 Personen +* 3 kennt 3 Personen +* 4 kennt 2 Personen +* 5 kennt 3 Personen + +Es gibt (mindestens) 2 Personen, die die gleiche Anzahl von Personen kennen. Dies gilt **immer**. + +### Satz + +Unter $n$ Personen gibt es immer mindestens 2, die die selbe Anzahl von Personen kennen. + +### Beweis + +Wir wollen das Schubfachprinzip nutzen. Für die Personen $P = \{1, ... n\}$ betrachte die Abbildung +$f: P \to \{0, ... n-1\}$, die jeder dieser Personen die Anzahl der Personen, die sie kennt, zuweist. + +Problem: $\vert P \vert = n = \vert \{1, ... n\} \vert$ + +Betrachte 2 Fälle: + +1. Es gibt eine Person, die niemanden kennt, das heißt $\exists i \in P$ so dass $f(i) = 0$. Dann gilt + $\forall j \in P \neq n - 1$ da "kennen" symmetrisch ist. Damit ist $f(P) \subseteq \{0, ... n-2\}$ und das + Schubfachprinzip ist anwendbar. +2. Es gibt keine Person, die niemanden kennt, dann $f(P) \subseteq \{1, ... n-1\}$ und auch hier ist das + Schubfachprinzip anwendbar. + +$$ +\Box +$$ + +**Beispiel 2**: In Bochum wohnen ca $350000$ Menschen, jeder Mensch hat zwischen $0$ und $150000$ Kopfhaare. + +$\Rightarrow$ es gibt mindestens 2 Menschen in Bochum mit der gleichen Anzahl Haare. diff --git a/school/intro-crypto.md b/school/intro-crypto.md new file mode 100644 index 0000000..8350478 --- /dev/null +++ b/school/intro-crypto.md @@ -0,0 +1,8 @@ +--- +title: Einführung in die Kryptographie +subtitle: > + Notizen und Mitschrift zur Vorlesung Einführung in die Kryptographie +--- + +- [2018-10-11 Intro](intro-crypto/20181011_1-intro) +- [2018-10-11 Klassifikation, Kerckhoffs' Prinzip, Substitutionschiffre](intro-crypto/20181011_2-klassifikation) diff --git a/school/intro-crypto/20181011-classification.dot b/school/intro-crypto/20181011-classification.dot new file mode 100644 index 0000000..0baf07a --- /dev/null +++ b/school/intro-crypto/20181011-classification.dot @@ -0,0 +1,28 @@ +digraph classification { + edge [ arrowhead="none" ]; + 1 [ label="Kryptologie" ]; + 2 [ label="Kryptographie" ]; + 3 [ label="Kryptoanalyse" ]; + 4 [ label="symmetrische\nChiffren" ]; + 5 [ label="asymmetrische\nChiffren" ]; + 6 [ label="Protokolle\n& Sonstiges" ]; + + { + rank=same; + 2; + 3; + } + { + rank=same; + 4; + 5; + 6; + } + + 1 -> 2; + 1 -> 3; + + 2 -> 4; + 2 -> 5; + 2 -> 6; +} diff --git a/school/intro-crypto/20181011_1-intro.md b/school/intro-crypto/20181011_1-intro.md new file mode 100644 index 0000000..b84fc89 --- /dev/null +++ b/school/intro-crypto/20181011_1-intro.md @@ -0,0 +1,26 @@ +--- +title: Intro +date: 2018-10-11 +--- + +# Moodle + +**Kursnummer**: 141022 + +**Passwort** : krypto1819 + +# Klausur + +* 10% Bonus durch Übungen, nur wenn bestanden (>49%) +* Anmeldung im Prüfungsamt + +## Hilfsmittel + +* Taschenrechner +* 1 Seite handschriftlich + +# Übungen + +**Abgabe**: Donnerstag 12:14 Uhr + +Handschriftlich oder LaTeX (Vorlage vorhanden) diff --git a/school/intro-crypto/20181011_2-klassifikation.md b/school/intro-crypto/20181011_2-klassifikation.md new file mode 100644 index 0000000..4a4d757 --- /dev/null +++ b/school/intro-crypto/20181011_2-klassifikation.md @@ -0,0 +1,59 @@ +--- +title: Klassifikation, Grundlagen, Substitutionschiffre +date: 2018-10-11 +--- + +# Klassifikation der "Kryptographie" + +![Klassifikation](./20181011-classification.png) + +## Anwendungen + +* WhatsApp +* Auto +* Mensa Karte +* Medizinische Geräte +* Kreditkarten +* mobile Kommunikation +* IoT +* BitCoin +* Flugzeuge +* E-Mail +* (Schadsoftware) + +# Grundlagen symmetrischer Chiffren + +Einfache Ausgangssituation: + +![Ausgangssituation](./20181011_situation.png) + +* $e \widehat{=}$ Verschlüsselung oder Chiffrierung +* $d \widehat{=}$ Entschlüsselung oder Dechiffrierung +* $x \widehat{=}$ Klartext +* $y \widehat{=}$ Chiffrat +* $k \widehat{=}$ Schlüssel +* $\vert k \vert \widehat{=}$ Schlüsselraum + +## Kerckhoffs' Prinzip + +> Ein Kryptosystem muss auch dann sicher sein, wenn der Angreifer alle Deteils kennt, bis auf den Schlüssel. + +Bei Verletzung der Prinzips: `Security by Obscurity`. + +# Substitutionschiffre + +* operiert auf Buchstaben +* Prinzip: + $$ + A \to l \\ + B \to d \\ + C \to w \\ + ... + $$ + +**Beispiel**: $ABBA \to^e lddl$ + +## Angriffe + +1. Häufigkeitsanalyse (Übung) +2. Vollständige Schlüsselsuche (Bruteforce): $\vert k \vert = 26! \approx 2^{88}$ Möglichkeiten diff --git a/school/intro-crypto/20181011_situation.dot b/school/intro-crypto/20181011_situation.dot new file mode 100644 index 0000000..bfe0f25 --- /dev/null +++ b/school/intro-crypto/20181011_situation.dot @@ -0,0 +1,51 @@ +digraph situation { + rankdir=LR; + a [ label="Alice" shape="none" ]; + b [ label="Bob" shape="none" ]; + o [ label="Oscar" shape="none" ]; + i [ label="unsicherer\nKanal" ]; + e [ label="e" shape="box" ]; + d [ label="d" shape="box" ]; + g [ label="Gen" shape="box"]; + 1 [ style="invisible" shape="point" width=0 ]; + 2 [ style="invisible" shape="point" width=0 ]; + 3 [ style="invisible" shape="point" width=0 ]; + 4 [ style="invisible" shape="point" width=0 ]; + + { + rank=same; + a; + g; + } + + { + rank=same; + e; + 1; + } + + { + rank=same; + d; + 2; + } + + { + rank=same; + i; o; + } + + a -> e [ label="x" ]; + e -> i [ label="y" ]; + i -> d [ label="y" ]; + d -> b [ label="x" ]; + + g -> 1 [ arrowhead="none" ]; + 1 -> e [ label="k" ]; + 1 -> 3 [ arrowhead="none" ]; + 3 -> 4 [ arrowhead="none"; penwidth=10; label="sicherer Kanal\n " ]; + 4 -> 2 [ arrowhead="none" ]; + 2 -> d [ label="k" ]; + + i -> o [ label="y" ]; +} diff --git a/school/intro-crypto/aufgaben/1/20181011_situation.dot b/school/intro-crypto/aufgaben/1/20181011_situation.dot new file mode 100644 index 0000000..bfe0f25 --- /dev/null +++ b/school/intro-crypto/aufgaben/1/20181011_situation.dot @@ -0,0 +1,51 @@ +digraph situation { + rankdir=LR; + a [ label="Alice" shape="none" ]; + b [ label="Bob" shape="none" ]; + o [ label="Oscar" shape="none" ]; + i [ label="unsicherer\nKanal" ]; + e [ label="e" shape="box" ]; + d [ label="d" shape="box" ]; + g [ label="Gen" shape="box"]; + 1 [ style="invisible" shape="point" width=0 ]; + 2 [ style="invisible" shape="point" width=0 ]; + 3 [ style="invisible" shape="point" width=0 ]; + 4 [ style="invisible" shape="point" width=0 ]; + + { + rank=same; + a; + g; + } + + { + rank=same; + e; + 1; + } + + { + rank=same; + d; + 2; + } + + { + rank=same; + i; o; + } + + a -> e [ label="x" ]; + e -> i [ label="y" ]; + i -> d [ label="y" ]; + d -> b [ label="x" ]; + + g -> 1 [ arrowhead="none" ]; + 1 -> e [ label="k" ]; + 1 -> 3 [ arrowhead="none" ]; + 3 -> 4 [ arrowhead="none"; penwidth=10; label="sicherer Kanal\n " ]; + 4 -> 2 [ arrowhead="none" ]; + 2 -> d [ label="k" ]; + + i -> o [ label="y" ]; +} diff --git a/school/intro-crypto/aufgaben/1/Präsenzübung_1_EK1_WS1819.pdf b/school/intro-crypto/aufgaben/1/Präsenzübung_1_EK1_WS1819.pdf new file mode 100644 index 0000000..2ae2bb6 Binary files /dev/null and b/school/intro-crypto/aufgaben/1/Präsenzübung_1_EK1_WS1819.pdf differ diff --git a/school/intro-crypto/aufgaben/1/a1.tex b/school/intro-crypto/aufgaben/1/a1.tex new file mode 100644 index 0000000..f37f9db --- /dev/null +++ b/school/intro-crypto/aufgaben/1/a1.tex @@ -0,0 +1,99 @@ +\documentclass[12pt,a4paper,german]{article} +\usepackage{url} +%\usepackage{graphics} +\usepackage{times} +\usepackage[T1]{fontenc} +\usepackage{ngerman} +\usepackage[latin1]{inputenc} +\usepackage{geometry} +\usepackage{amsfonts} +\usepackage{amsmath} +\usepackage{graphicx} +\usepackage{epsfig} +\usepackage{paralist} +\geometry{left=2.0cm,textwidth=17cm,top=3.5cm,textheight=23cm} + +%%%%%%%%%% Fill out the the definitions %%%%%%%%% +\def \name {Valentin Brandl} % +\def \matrikel {108018274494} % +\def \gruppe {VB} % +\def \uebung {1} % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % DO NOT MODIFY THIS HEADER +\newcommand{\hwsol}{ +\vspace*{-2cm} +\noindent \matrikel \quad \name \hfill Gruppe:\gruppe \\ +% \noindent \pmatrikel \quad \pname \\ +\begin{center}{\Large \bf L\"osung f\"ur \"Ubung \# \uebung}\end{center} +} + +\begin{document} +%Import header +\hwsol + + +\section*{Aufgabe 1} +\begin{enumerate}[(a)] +\item + \begin{itemize} + \item Algorithmen sollen offengelegt werden, nur Schlssel werden geheim gehalten + \item Es ist schwer, einen Algorithmus geheim zu halten + \item Prinzip def vielen Augen: ein ffentlicher Algorithmus wird ggf. analysiert und Schwachstellen gefunden + \end{itemize} +\item + \begin{itemize} + \item Kryptographie: Entwerfen von Algorithmen und Protokollen + \item Kryptoanalyse: Schwachstellen in existierenden Verfahren suchen + \end{itemize} + +\item + \parbox{\linewidth}{\centering + \includegraphics[width=\textwidth]{20181011_situation.png} + } + Ein Angreifer (Eve) kann die ausgetauschten Nachrichten mitlesen und verndern +\item + \begin{itemize} + \item Schlssel: $k$ + \item Verschlsselung $e(\cdot)$ + \item Schlsselraum $\#k = \vert k \vert$ + \item Chiffrat $y$ + \item Entschlsselung $d(\cdot)$ + \item Klartext $x$ + \end{itemize} +\end{enumerate} + +\section*{Aufgabe 2} +\begin{enumerate}[(a)] + \item $2^{128}$. Mit $2^{10} \approx 10^3 \to 2^{130} \approx 10^{39}$ + + \item + \begin{itemize} + \item 80 Eur pro ASIC + \item $10^6$ Eur Kapital + \item $7 \cdot 10^8 \frac{k}{s}$ Leistung + \end{itemize} + \begin{eqnarray*} + 10^6 / 80 &=& 12500 \\ + 7 \cdot 10^8 \cdot 12500 &=& 8.75 \cdot 10^{12} \frac{k}{s} \\ + \frac{2^{128}k}{8.75 \cdot 10^{12} \frac{k}{s}} &\approx{}& 3.89 \cdot 10^{25} s \\ + &\approx{}& 1.23 \cdot 10^{18} y + \end{eqnarray*} + + \item + \begin{eqnarray*} + 24 h &=& 86400 s \\ + \frac{2^{128}}{x} &=& 86400 \\ + \frac{2^{128}}{86400} &=& x \\ + x &\approx{}& 3.94 \cdot 10^{33} \text{ gesuchte $\frac{k}{s}$} \\ + \frac{x}{12500} &\approx{}& 3.15 \cdot 10^{29} \text{ gesuchte $\frac{k}{s}$ pro ASIC} \\ + \\ + (7 \cdot 10^8) \cdot 2^n &\geq{}& 3.15 \cdot 10^{29} \\ + n &\geq{}& 68.6 \approx 69 \text{ (Leistung muss sich 69 mal verdoppeln)} \\ + 69 * 18m &=& 1242m = 103.5 y + \end{eqnarray*} + In $103.5$ Jahren wre man in der Lage alle $2^{128}$ Schlssel innerhlab von 24h durch zu probieren. +\end{enumerate} + +\end{document} + diff --git a/school/intro-crypto/aufgaben/template.tex b/school/intro-crypto/aufgaben/template.tex new file mode 100644 index 0000000..a989ca3 --- /dev/null +++ b/school/intro-crypto/aufgaben/template.tex @@ -0,0 +1,67 @@ +\documentclass[12pt,a4paper,german]{article} +\usepackage{url} +%\usepackage{graphics} +\usepackage{times} +\usepackage[T1]{fontenc} +\usepackage{ngerman} +\usepackage[latin1]{inputenc} +\usepackage{geometry} +\usepackage{amsfonts} +\usepackage{graphicx} +\usepackage{epsfig} +\usepackage{paralist} +\geometry{left=2.0cm,textwidth=17cm,top=3.5cm,textheight=23cm} + +%%%%%%%%%% Fill out the the definitions %%%%%%%%% +\def \name {Vorname1 Nachname1} % +\def \matrikel {Matrikelnummer1} % +\def \pname {Vorname2 Nachname2} % +\def \pmatrikel {Matrikelnummer2} % +\def \gruppe {Gruppenkuerzel} % +\def \uebung {1} % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % DO NOT MODIFY THIS HEADER +\newcommand{\hwsol}{ +\vspace*{-2cm} +\noindent \matrikel \quad \name \hfill Gruppe:\gruppe \\ +\noindent \pmatrikel \quad \pname \\ +\begin{center}{\Large \bf L\"osung f\"ur \"Ubung \# \uebung}\end{center} +} + +\begin{document} +%Import header +\hwsol + + +\section*{Aufgabe 1} +\begin{enumerate}[(a)] +\item Beispielantwort +\item Hier k\"onnte deine Antwort auf diese Teilaufgabe stehen. +\item Fr das Beispiel gilt $b_1=2^4+1=17=(10001)_2$ und $b_2=2^4-1=15=(1111)_2$. +\end{enumerate} + +\section*{Aufgabe 2} +Notation von mathematischen L\"osungen: +\begin{eqnarray*} +r_{0} &=& \beta^{K_{X}} \bmod n\\ +r_{1} &=& \alpha^{K_{X}+1} = \alpha \cdot \alpha^{K_{n}} = \alpha \cdot r_{1} \bmod p\\ +r_{2} &=& (a_{1}-d \cdot q_{1}) \cdot z_{E}^{-1} \bmod p-1 \Leftrightarrow d = (x_{1}-s_{1} \cdot o_{E}) \cdot r_{1}^{-1} \bmod p-1\\ +\end{eqnarray*} + +\section*{Aufgabe 3} +\begin{center} +\begin{tabular}{|c|c|c|c|} +\hline +Tabellenzeile & Tabellenzeile & Tabellenzeile & Tabellenzeile \\ +\hline +e & f & g & h \\ +\hline +i & j & k & l \\ +\hline +m & n & o & p \\ +\hline +\end{tabular} +\end{center} +\end{document} + diff --git a/school/intro-crypto/uebung/01/01.tex b/school/intro-crypto/uebung/01/01.tex new file mode 100644 index 0000000..b36f008 --- /dev/null +++ b/school/intro-crypto/uebung/01/01.tex @@ -0,0 +1,248 @@ +\documentclass[12pt,a4paper,german]{article} +\usepackage{url} +%\usepackage{graphics} +\usepackage{times} +\usepackage[T1]{fontenc} +\usepackage{ngerman} +\usepackage{float} +\usepackage{diagbox} +\usepackage[latin1]{inputenc} +\usepackage{geometry} +\usepackage{amsfonts} +\usepackage{amsmath} +\usepackage{csquotes} +\usepackage{graphicx} +\usepackage{epsfig} +\usepackage{paralist} +\geometry{left=2.0cm,textwidth=17cm,top=3.5cm,textheight=23cm} + +%%%%%%%%%% Fill out the the definitions %%%%%%%%% +\def \name {Valentin Brandl} % +\def \matrikel {108018274494} % +% \def \pname {Vorname2 Nachname2} % +% \def \pmatrikel {Matrikelnummer2} % +\def \gruppe {Gruppenkuerzel} % +\def \uebung {1} % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % DO NOT MODIFY THIS HEADER +\newcommand{\hwsol}{ +\vspace*{-2cm} +\noindent \matrikel \quad \name \hfill Gruppe:\gruppe \\ +% \noindent \pmatrikel \quad \pname \\ +\begin{center}{\Large \bf L\"osung f\"ur \"Ubung \# \uebung}\end{center} +} + +\begin{document} +%Import header +\hwsol + + +\section*{Aufgabe 2} +\begin{enumerate}[(a)] + \item + \begin{eqnarray*} +A &\text{:}& 23 \to{} 0.02 \\ +B &\text{:}& 5 \to{} 0.00 \\ +C &\text{:}& 22 \to{} 0.02 \\ +D &\text{:}& 8 \to{} 0.01 \\ +E &\text{:}& 17 \to{} 0.02 \\ +F &\text{:}& 2 \to{} 0.00 \\ +G &\text{:}& 80 \to{} 0.07 \\ +J &\text{:}& 66 \to{} 0.06 \\ +K &\text{:}& 39 \to{} 0.04 \\ +L &\text{:}& 47 \to{} 0.04 \\ +M &\text{:}& 2 \to{} 0.00 \\ +N &\text{:}& 17 \to{} 0.02 \\ +O &\text{:}& 63 \to{} 0.06 \\ +P &\text{:}& 80 \to{} 0.07 \\ +Q &\text{:}& 62 \to{} 0.06 \\ +R &\text{:}& 57 \to{} 0.05 \\ +S &\text{:}& 136 \to{} 0.12 \\ +T &\text{:}& 6 \to{} 0.01 \\ +U &\text{:}& 57 \to{} 0.05 \\ +V &\text{:}& 6 \to{} 0.01 \\ +W &\text{:}& 76 \to{} 0.07 \\ +X &\text{:}& 25 \to{} 0.02 \\ +Y &\text{:}& 8 \to{} 0.01 \\ +Z &\text{:}& 83 \to{} 0.08 \\ +\text{\"A} &\text{:}& 43 \to{} 0.04 \\ +\text{\"O} &\text{:}& 14 \to{} 0.01 \\ +\text{\"U} &\text{:}& 28 \to{} 0.03 \\ +\text{} &\text{:}& 18 \to{} 0.02 \\ +sum &\text{:}& 1090 + \end{eqnarray*} + + \item + \begin{displayquote} + grndlich durchgecheckt steht sie da \\ + und wartet auf den start - alles klar! \\ + experten streiten sich um ein paar daten \\ + die crew hat da noch ein paar fragen \\ + doch der countdown luft \\ + \end{displayquote} + + \item + \begin{tabular}{|c|c|} + \hline + von & zu \\\hline + A & f \\ + B & \\ + C & g \\ + D & j \\ + E & \\ + F & x \\ + G & n \\ + J & i \\ + K & m \\ + L & c \\ + M & \\ + N & v \\ + O & d \\ + P & r \\ + Q & a \\ + R & l \\ + S & e \\ + T & \\ + U & h \\ + V & z \\ + W & t \\ + X & w \\ + Y & p \\ + Z & s \\ + & o \\ + & b \\ + & u \\ + & k \\ + H/I & q/y \\ + \hline + \end{tabular} + + Weder H noch I kommen im Ciphertext vor, daher ist es nicht mglich, die Substitution von H/I eindeutig zu + bestimmen. Da jedoch auch weder q noch y im Plaintext vorkommen, muss entweder $H \to q \text{ und } I \to y$ + oder $H \to y \text{ und } I \to q$ gelten. + + \item $30! = \vert \{A,B,...Z,\text{},\text{},\text{},\text{}\} \vert!$ + + \item Name des Textes: Major Tom (vllig losgelst) \\ + Erscheinungsjahr: 1982 + +\end{enumerate} + +\section*{Aufgabe 3} +\begin{enumerate}[(a)] + \item $2^{63} = 9,223,372,036,854,775,808$ + \item $2^{63} * 0.03g = 276,701,161,105,643,260g \approx 276,701,161,106t$ \\ + $277 \cdot 10^9 / 460 \cdot 10^6 \approx 602 \Rightarrow$ mehr als das 600-fache der jhrlichen Reisernte + + \item $2^{10} * 0.1mm = 102.4mm = 1.204m$ + + \item + \begin{eqnarray*} + 2^n * 0.1mm &\geq{}& 1,000,000mm \\ + 2^n &\geq{}& 10000000 \\ + n &\geq{}& 24 + \end{eqnarray*} + Man muss das Blatt 24 mal falten. + + \item + \begin{eqnarray*} + 2^n * 0.1mm &\geq{}& 384,400,000,000mm \\ + 2^n &\geq{}& 3,844,000,000,000 \\ + n &\geq{}& 42 + \end{eqnarray*} + Man muss das Blatt 42 mal falten. + + \item + \begin{eqnarray*} + 2^n * 0.1mm &\geq{}& 9,460,730,472,580,800,000mm \\ + 2^n &\geq{}& 94,607,304,725,808,000,000mm \\ + n &\geq{}& 67 + \end{eqnarray*} + Man muss das Blatt 67 mal falten. +\end{enumerate} + +\section*{Aufgabe 4} +\begin{enumerate}[(a)] + \item $2^n$ + + \item $\frac{2^n}{2}$ + + \item Gerechnet mit $1y = 365d$ + \begin{figure}[h] + \begin{tabular}{|l|l|l|l|} + \hline + \diagbox{Case}{$n$} & 80 & 112 & 192 \\\hline + Worst Case & $2.50 * 10^8y$ & $1.08 * 10^{18}y$ & $1.30 * 10^{42}y$ \\\hline + Average Case & $1.25 * 10^8y$ & $5.38 * 10^{17}y$ & $6.50 * 10^{41}y$ \\\hline + \end{tabular} + \caption{GPU} + \end{figure} + + \begin{figure}[h] + \begin{tabular}{|l|l|l|l|} + \hline + \diagbox{Case}{$n$} & 80 & 112 & 192 \\\hline + Worst Case & $5.81 * 10^7y$ & $2.49 * 10^{17}y$ & $3.02 * 10^{41}y$ \\\hline + Average Case & $2.90 * 10^7y$ & $1.25 * 10^{17}y$ & $1.51 * 10^{41}y$ \\\hline + \end{tabular} + \caption{Amazon Cloud} + \end{figure} + + \begin{figure}[h] + \begin{tabular}{|l|l|l|l|} + \hline + \diagbox{Case}{$n$} & 80 & 112 & 192 \\\hline + Worst Case & $3.41 * 10^7y$ & $1.46 * 10^{17}y$ & $1.77 * 10^{41}y$ \\\hline + Average Case & $1.70 * 10^7y$ & $7.32 * 10^{16}y$ & $8.85 * 10^{40}y$ \\\hline + \end{tabular} + \caption{FPGA} + \end{figure} + + \item Unter Anwendung der Erkenntnisse aus e): + \begin{eqnarray*} + n &=& 80 \\ + n + w &=& 112 \\ + w &=& 32 \\ + x &=& \frac{2^{112} - 2^{80}}{r} \\ + \end{eqnarray*} + + \begin{itemize} + \item $r_{GPU} = 15.3 * 10^7 \frac{k}{s}$ + \item $r_{Amazon} = 66 * 10^7 \frac{k}{s}$ + \item $r_{FPGA} = 11.25 * 10^8 \frac{k}{s}$ + \end{itemize} + + \begin{eqnarray*} + x_{GPU} &=& 1.06 * 10^{18}y \\ + x_{Amazon} &=& 2.49 * 10^{17}y \\ + x_{FPGA} &=& 1.46 * 10^{17}y \\ + \end{eqnarray*} + + \item + \begin{itemize} + \item $r$: Anzahl der Versuche pro Sekunde + \item $n$: Aktuelle Bit Lnge der Schlssel + \item $w$: Verlngerung der Schlssellnge um $w$ Bit + \item $x$: Gesucht: Wie viel langsamer der Angriff wird + \end{itemize} + \begin{eqnarray*} + \frac{2^n}{r} + x &=& \frac{2^{n+w}}{r} \\ + x &=& \frac{2^{n+w} - 2^n}{r} \\ + x &=& \frac{2^n(2^w-1)}{r} + \end{eqnarray*} + + \item + \begin{eqnarray*} + 183d &=& 4392h \\\\ + \frac{4392}{2^n} &\leq{}& 1 \\ + n &\geq{}& 13 \Rightarrow \text{ 13 Verdoppelungen der Rechenleistung} \\\\ + 13 * 18m &=& 234 m = 19.5y \approx 20y \\ + 1992 + 20 &=& 2012 + \end{eqnarray*} + + Seit dem Jahr 2012 sollte es mglich sein, 50-bit Keys in weniger als 1 Stunde zu Bruteforcen. +\end{enumerate} + +\end{document} + diff --git a/school/intro-crypto/uebung/01/chiffrat.txt b/school/intro-crypto/uebung/01/chiffrat.txt new file mode 100644 index 0000000..cb57e2d --- /dev/null +++ b/school/intro-crypto/uebung/01/chiffrat.txt @@ -0,0 +1,60 @@ +CPTGORJLU OÜPLUCSLUSLßW ZWSUW ZJS OQ +ÜGO XQPWSW QÜA OSG ZWQPW - QRRSZ ßRQP! +SFYSPWSG ZWPSJWSG ZJLU ÜK SJG YQQP OQWSG +OJS LPSX UQW OQ GÄLU SJG YQQP APQCSG +OÄLU OSP LÄÜGWOÄXG RBÜAW + +SAASßWJNJWBW ÖSZWJKKW OQZ UQGOSRG +KQG NSPRBZZW ZJLU ÖRJGO QÜA OSG QGOSP'G +DSOSP XSJM CSGQÜ, XQZ NÄG JUK QÖUBGCW +DSOSP JZW JK ZWPSZZ, OÄLU KQDÄP WÄK +KQLUW SJGSG ZLUSPV +OQGG USÖW SP QÖ ÜGO + +NERRJC RÄZCSREZW +NÄG OSP SPOS +ZLUXSÖW OQZ PQÜKZLUJAA +NERRJC ZLUXSPSRÄZ + + +OJS SPOQGVJSUÜGCZßPQAW JZW TÖSPXÜGOSG +QRRSZ RBÜAW YSPASßW, ZLUÄG ZSJW ZWÜGOSG +XJZZSGZLUQAWRJLUS SFYSPJKSGWS +OÄLU XQZ GTWVSG OJS QK SGOS, OSGßW +ZJLU KQDÄP WÄK + +JK ßÄGWPÄRRVSGWPÜK, OQ XJPO KQG YQGJZLU +OSP ßÜPZ OSP ßQYZSR, OSP ZWJKKW DQ CQP GJLUW +"UQRRÄ KQDÄP WÄK, ßEGGSG ZJS UEPSG +XÄRR'G ZJS OQZ YPÄDSßW OSGG ZÄ VSPZWEPSG?" +OÄLU SP ßQGG GJLUWZ UEP'G +SP ZLUXSÖW XSJWSP + +NERRJC RÄZCSREZW +NÄG OSP SPOS +ZLUXSÖW OQZ PQÜKZLUJAA +NERRJC ZLUXSPSRÄZ + +OJS SPOS ZLUJKKSPW ÖRQÜ, ZSJG RSWVWSP AÜGß ßÄKKW +"CPTMW KJP KSJGS APQÜ", ÜGO SP NSPZWÜKKW + +ÜGWSG WPQÜSPG GÄLU OJS SCÄJZWSG +KQDÄP WÄK OSGßW ZJLU, XSGG OJS XTZZWSG +KJLU ATUPW UJSP SJG RJLUW OÜPLU OQZ QRR +OQZ ßSGGW JUP GÄLU GJLUW, JLU ßÄKKS ÖQRO +KJP XJPO ßQRW + +NERRJC RÄZCSREZW +NÄG OSP SPOS +ZLUXSÖW OQZ PQÜKZLUJAA +ZLUXSPSRÄZ + +NERRJC RÄZCSREZW +NÄG OSP SPOS +ZLUXSÖW OQZ PQÜKZLUJAA +ZLUXSPSRÄZ + +NERRJC RÄZCSREZW +NÄG OSP SPOS +ZLUXSÖW OQZ PQÜKZLUJAA +NERRJC ZLUXSPSRÄZ \ No newline at end of file diff --git a/school/intro-crypto/uebung/01/table.txt b/school/intro-crypto/uebung/01/table.txt new file mode 100644 index 0000000..eb36ff5 --- /dev/null +++ b/school/intro-crypto/uebung/01/table.txt @@ -0,0 +1,30 @@ +A & f \\ +B & ä \\ +C & g \\ +D & j \\ +E & ö \\ +F & x \\ +G & n \\ +J & i \\ +K & m \\ +L & c \\ +M & ß \\ +N & v \\ +O & d \\ +P & r \\ +Q & a \\ +R & l \\ +S & e \\ +T & ü \\ +U & h \\ +V & z \\ +W & t \\ +X & w \\ +Y & p \\ +Z & s \\ +Ä & o \\ +Ö & b \\ +Ü & u \\ +ß & k \\ +? & q \\ +? & y \\ diff --git a/school/intro-crypto/uebung/01/u01/.gitignore b/school/intro-crypto/uebung/01/u01/.gitignore new file mode 100644 index 0000000..53eaa21 --- /dev/null +++ b/school/intro-crypto/uebung/01/u01/.gitignore @@ -0,0 +1,2 @@ +/target +**/*.rs.bk diff --git a/school/intro-crypto/uebung/01/u01/Cargo.lock b/school/intro-crypto/uebung/01/u01/Cargo.lock new file mode 100644 index 0000000..9f89cec --- /dev/null +++ b/school/intro-crypto/uebung/01/u01/Cargo.lock @@ -0,0 +1,32 @@ +[[package]] +name = "countmap" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-traits" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "num-traits" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" + +[[package]] +name = "u01" +version = "0.1.0" +dependencies = [ + "countmap 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[metadata] +"checksum countmap 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1ef2a403c4af585607826502480ab6e453f320c230ef67255eee21f0cc72c0a6" +"checksum num-traits 0.1.43 (registry+https://github.com/rust-lang/crates.io-index)" = "92e5113e9fd4cc14ded8e499429f396a20f98c772a47cc8622a736e1ec843c31" +"checksum num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0b3a5d7cc97d6d30d8b9bc8fa19bf45349ffe46241e8816f50f62f6d6aaabee1" diff --git a/school/intro-crypto/uebung/01/u01/Cargo.toml b/school/intro-crypto/uebung/01/u01/Cargo.toml new file mode 100644 index 0000000..39987db --- /dev/null +++ b/school/intro-crypto/uebung/01/u01/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "u01" +version = "0.1.0" +authors = ["Valentin Brandl "] + +[dependencies] +countmap = "0.2.0" diff --git a/school/intro-crypto/uebung/01/u01/src/main.rs b/school/intro-crypto/uebung/01/u01/src/main.rs new file mode 100644 index 0000000..f694f4b --- /dev/null +++ b/school/intro-crypto/uebung/01/u01/src/main.rs @@ -0,0 +1,81 @@ +extern crate countmap; + +use countmap::CountMap; +use std::{ + fs::File, + io::{BufRead, BufReader}, +}; + +fn count() { + let args: Vec<_> = std::env::args().collect(); + let file = args.get(1).unwrap(); + let mut map: CountMap = CountMap::new(); + let read = BufReader::new(File::open(file).unwrap()); + for line in read.lines() { + if let Ok(line) = line { + line.chars().filter(|c| c.is_alphabetic()).for_each(|c| { + map.insert_or_increment(c); + }); + } + } + let sum: u32 = map + .iter() + .filter(|(k, _)| k.is_alphabetic()) + .map(|(_, v)| v) + .sum(); + let mut vec: Vec<_> = map.into_iter().collect(); + vec.sort_unstable(); + vec.into_iter().for_each(|(k, v)| { + println!( + "{} &\\text{{:}}& {:3} \\to{{}} {:.2} \\\\", + k, + v, + v as f64 / sum as f64 + ) + }); + println!("sum &\\text{{:}}& {}", sum); +} + +fn main() { + let args: Vec<_> = std::env::args().collect(); + let file = args.get(1).unwrap(); + let read = BufReader::new(File::open(file).unwrap()); + for line in read.lines() { + if let Ok(line) = line { + let s: String = line + .chars() + .map(|c| match c { + 'A' => 'f', + 'B' => 'ä', + 'C' => 'g', + 'D' => 'j', + 'E' => 'ö', + 'F' => 'x', + 'G' => 'n', + 'J' => 'i', + 'K' => 'm', + 'L' => 'c', + 'M' => 'ß', + 'N' => 'v', + 'O' => 'd', + 'P' => 'r', + 'Q' => 'a', + 'R' => 'l', + 'S' => 'e', + 'T' => 'ü', + 'U' => 'h', + 'V' => 'z', + 'W' => 't', + 'X' => 'w', + 'Y' => 'p', + 'Z' => 's', + 'Ä' => 'o', + 'Ö' => 'b', + 'Ü' => 'u', + 'ß' => 'k', + c => c, + }).collect(); + println!("{}", s); + } + } +} diff --git a/school/intro-crypto/uebung/01/Übung_1_EK1_WS1819.pdf b/school/intro-crypto/uebung/01/Übung_1_EK1_WS1819.pdf new file mode 100644 index 0000000..8ac9b57 Binary files /dev/null and b/school/intro-crypto/uebung/01/Übung_1_EK1_WS1819.pdf differ diff --git a/school/intro-crypto/uebung/template.tex b/school/intro-crypto/uebung/template.tex new file mode 100644 index 0000000..a989ca3 --- /dev/null +++ b/school/intro-crypto/uebung/template.tex @@ -0,0 +1,67 @@ +\documentclass[12pt,a4paper,german]{article} +\usepackage{url} +%\usepackage{graphics} +\usepackage{times} +\usepackage[T1]{fontenc} +\usepackage{ngerman} +\usepackage[latin1]{inputenc} +\usepackage{geometry} +\usepackage{amsfonts} +\usepackage{graphicx} +\usepackage{epsfig} +\usepackage{paralist} +\geometry{left=2.0cm,textwidth=17cm,top=3.5cm,textheight=23cm} + +%%%%%%%%%% Fill out the the definitions %%%%%%%%% +\def \name {Vorname1 Nachname1} % +\def \matrikel {Matrikelnummer1} % +\def \pname {Vorname2 Nachname2} % +\def \pmatrikel {Matrikelnummer2} % +\def \gruppe {Gruppenkuerzel} % +\def \uebung {1} % +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + % DO NOT MODIFY THIS HEADER +\newcommand{\hwsol}{ +\vspace*{-2cm} +\noindent \matrikel \quad \name \hfill Gruppe:\gruppe \\ +\noindent \pmatrikel \quad \pname \\ +\begin{center}{\Large \bf L\"osung f\"ur \"Ubung \# \uebung}\end{center} +} + +\begin{document} +%Import header +\hwsol + + +\section*{Aufgabe 1} +\begin{enumerate}[(a)] +\item Beispielantwort +\item Hier k\"onnte deine Antwort auf diese Teilaufgabe stehen. +\item Fr das Beispiel gilt $b_1=2^4+1=17=(10001)_2$ und $b_2=2^4-1=15=(1111)_2$. +\end{enumerate} + +\section*{Aufgabe 2} +Notation von mathematischen L\"osungen: +\begin{eqnarray*} +r_{0} &=& \beta^{K_{X}} \bmod n\\ +r_{1} &=& \alpha^{K_{X}+1} = \alpha \cdot \alpha^{K_{n}} = \alpha \cdot r_{1} \bmod p\\ +r_{2} &=& (a_{1}-d \cdot q_{1}) \cdot z_{E}^{-1} \bmod p-1 \Leftrightarrow d = (x_{1}-s_{1} \cdot o_{E}) \cdot r_{1}^{-1} \bmod p-1\\ +\end{eqnarray*} + +\section*{Aufgabe 3} +\begin{center} +\begin{tabular}{|c|c|c|c|} +\hline +Tabellenzeile & Tabellenzeile & Tabellenzeile & Tabellenzeile \\ +\hline +e & f & g & h \\ +\hline +i & j & k & l \\ +\hline +m & n & o & p \\ +\hline +\end{tabular} +\end{center} +\end{document} + diff --git a/school/netsec/20181012_0-intro.md b/school/netsec/20181012_0-intro.md new file mode 100644 index 0000000..828856a --- /dev/null +++ b/school/netsec/20181012_0-intro.md @@ -0,0 +1,65 @@ +--- +title: Intro +date: 2018-10-12 +--- + +# Intro + +**Prof**: Jörg Schwenk + +Beteiligt an EFAIL? + +## Moodle + +Nächste Vorlesung + +## Klausur + +### Hilfsmittel + +* Buch + +## Übungen + +Erst ab 2018-10-19. + +## Links + +* [Blog](https://web-in-security.blogspot.com) + +## Buch + +Wird überarbeitet. + + + + +> Wir werden kein Blockchain machen, in dieser Vorlesung + + +**Schwerpunkt in Netsec 2**: TLS + + +## Notzizen + +* **Starker Angriff**: Wenig Voraussetzungen +* **Schwacher Angriff**: Viele Voraussetzungen + +**EC**: + +$$ +y^2 = x^3 + \underline{a}x + \underline{b} +$$ + +$b$ ggf nicht geprüft + +## Nachschlagen + +* DNSSEC schwache Schlüssel +* Bleichenbacher +* Chinesischer Restsatz +* Small Subgroup Attack (TLS) +* TLS Attacher +* DOMParator +* Professos +* WS-Attacker diff --git a/school/netsec/20181012_1-kryptographie_und_das_internet.md b/school/netsec/20181012_1-kryptographie_und_das_internet.md new file mode 100644 index 0000000..c1e695b --- /dev/null +++ b/school/netsec/20181012_1-kryptographie_und_das_internet.md @@ -0,0 +1,10 @@ +--- +title: Kryptographie und das Internet +date: 2018-10-12 +--- + +# Kryptographie und das Internet + +**AE**: Authenticated Encryption + +**AEAD**: AE with Additional Data diff --git a/school/netsec1.md b/school/netsec1.md new file mode 100644 index 0000000..4cfa759 --- /dev/null +++ b/school/netsec1.md @@ -0,0 +1,8 @@ +--- +title: Netzsicherheit 1 +--- + +# Netzsicherheit 1 + +- [2018-10-12 Intro](netsec/20181012_0-intro) +- [2018-10-12 Kryptographie und das Internet](netsec/20181012_1-kryptographie_und_das_internet) diff --git a/templates/eisvogel.tex b/templates/eisvogel.tex new file mode 100644 index 0000000..1986732 --- /dev/null +++ b/templates/eisvogel.tex @@ -0,0 +1,805 @@ +%% +% Copyright (c) 2018, Pascal Wagler; +% Copyright (c) 2014--2018, John MacFarlane +% +% All rights reserved. +% +% Redistribution and use in source and binary forms, with or without +% modification, are permitted provided that the following conditions +% are met: +% +% - Redistributions of source code must retain the above copyright +% notice, this list of conditions and the following disclaimer. +% +% - Redistributions in binary form must reproduce the above copyright +% notice, this list of conditions and the following disclaimer in the +% documentation and/or other materials provided with the distribution. +% +% - Neither the name of John MacFarlane nor the names of other +% contributors may be used to endorse or promote products derived +% from this software without specific prior written permission. +% +% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +% "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +% LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +% FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +% COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +% INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +% BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +% LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +% CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +% LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +% ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +% POSSIBILITY OF SUCH DAMAGE. +%% + +%% +% For usage information and examples visit the GitHub page of this template: +% https://github.com/Wandmalfarbe/pandoc-latex-template +%% + +\PassOptionsToPackage{unicode=true}{hyperref} % options for packages loaded elsewhere +\PassOptionsToPackage{hyphens}{url} +\PassOptionsToPackage{dvipsnames,svgnames*,table}{xcolor} +$if(dir)$$if(latex-dir-rtl)$ +\PassOptionsToPackage{RTLdocument}{bidi} +$endif$$endif$% +\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$else$a4paper,$endif$$if(beamer)$ignorenonframetext,$if(handout)$handout,$endif$$if(aspectratio)$aspectratio=$aspectratio$,$endif$$endif$$for(classoption)$$classoption$$sep$,$endfor$,tablecaptionabove]{$if(book)$scrbook$else$scrartcl$endif$} +$if(beamer)$ +$if(background-image)$ +\usebackgroundtemplate{% +\includegraphics[width=\paperwidth]{$background-image$}% +} +$endif$ +\usepackage{pgfpages} +\setbeamertemplate{caption}[numbered] +\setbeamertemplate{caption label separator}{: } +\setbeamercolor{caption name}{fg=normal text.fg} +\beamertemplatenavigationsymbols$if(navigation)$$navigation$$else$empty$endif$ +$for(beameroption)$ +\setbeameroption{$beameroption$} +$endfor$ +% Prevent slide breaks in the middle of a paragraph: +\widowpenalties 1 10000 +\raggedbottom +$if(section-titles)$ +\setbeamertemplate{part page}{ +\centering +\begin{beamercolorbox}[sep=16pt,center]{part title} + \usebeamerfont{part title}\insertpart\par +\end{beamercolorbox} +} +\setbeamertemplate{section page}{ +\centering +\begin{beamercolorbox}[sep=12pt,center]{part title} + \usebeamerfont{section title}\insertsection\par +\end{beamercolorbox} +} +\setbeamertemplate{subsection page}{ +\centering +\begin{beamercolorbox}[sep=8pt,center]{part title} + \usebeamerfont{subsection title}\insertsubsection\par +\end{beamercolorbox} +} +\AtBeginPart{ + \frame{\partpage} +} +\AtBeginSection{ + \ifbibliography + \else + \frame{\sectionpage} + \fi +} +\AtBeginSubsection{ + \frame{\subsectionpage} +} +$endif$ +$endif$ +$if(beamerarticle)$ +\usepackage{beamerarticle} % needs to be loaded first +$endif$ +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +\setstretch{$linestretch$} +$else$ +\usepackage{setspace} +\setstretch{1.2} +$endif$ +\usepackage{amssymb,amsmath} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} + \usepackage{textcomp} % provides euro and other symbols +\else % if luatex or xelatex +$if(mathspec)$ + \ifxetex + \usepackage{mathspec} + \else + \usepackage{unicode-math} + \fi +$else$ + \usepackage{unicode-math} +$endif$ + \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$fontfamilies.options$]{$fontfamilies.font$} +$endfor$ +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$} +$endif$ +$if(mathfont)$ +$if(mathspec)$ + \ifxetex + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \ifxetex + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +$if(luatexjapresetoptions)$ + \ifluatex + \usepackage[$for(luatexjapresetoptions)$$luatexjapresetoptions$$sep$,$endfor$]{luatexja-preset} + \fi +$endif$ +$if(CJKmainfont)$ + \ifluatex + \usepackage[$for(luatexjafontspecoptions)$$luatexjafontspecoptions$$sep$,$endfor$]{luatexja-fontspec} + \setmainjfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} + \fi +$endif$ +\fi +$if(beamer)$ +$if(theme)$ +\usetheme[$for(themeoptions)$$themeoptions$$sep$,$endfor$]{$theme$} +$endif$ +$if(colortheme)$ +\usecolortheme{$colortheme$} +$endif$ +$if(fonttheme)$ +\usefonttheme{$fonttheme$} +$endif$ +$if(mainfont)$ +\usefonttheme{serif} % use mainfont rather than sansfont for slide text +$endif$ +$if(innertheme)$ +\useinnertheme{$innertheme$} +$endif$ +$if(outertheme)$ +\useoutertheme{$outertheme$} +$endif$ +$endif$ +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +% use microtype if available +\IfFileExists{microtype.sty}{% +\usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} +\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +$if(indent)$ +$else$ +\IfFileExists{parskip.sty}{% +\usepackage{parskip} +}{% else +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +} +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +$if(colorlinks)$ +\usepackage{xcolor} +\definecolor{default-linkcolor}{HTML}{A50000} +\definecolor{default-filecolor}{HTML}{A50000} +\definecolor{default-citecolor}{HTML}{4077C0} +\definecolor{default-urlcolor}{HTML}{4077C0} +$endif$ +\usepackage{hyperref} +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(subject)$ + pdfsubject={$subject$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$default-linkcolor$endif$, + filecolor=$if(filecolor)$$filecolor$$else$default-filecolor$endif$, + citecolor=$if(citecolor)$$citecolor$$else$default-citecolor$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$default-urlcolor$endif$, +$else$ + pdfborder={0 0 0}, +$endif$ + breaklinks=true} +\urlstyle{same} % don't use monospace font for urls +$if(verbatim-in-note)$ +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(geometry)$ +\usepackage[margin=2.5cm,includehead=true,includefoot=true,centering,$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$else$ +\usepackage[margin=2.5cm,includehead=true,includefoot=true,centering]{geometry} +$endif$ +$if(logo)$ +\usepackage[export]{adjustbox} +\usepackage{graphicx} +$endif$ +$if(beamer)$ +\newif\ifbibliography +$endif$ +$if(listings)$ +\usepackage{listings} +\newcommand{\passthrough}[1]{#1} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +$if(beamer)$ +\usepackage{caption} +% These lines are needed to make table captions work with longtable: +\makeatletter +\def\fnum@table{\tablename~\thetable} +\makeatother +$else$ +% Fix footnotes in tables (requires footnote package) +\IfFileExists{footnote.sty}{\usepackage{footnote}\makesavenoteenv{longtable}}{} +$endif$ +$endif$ +$if(graphics)$ +\usepackage{graphicx,grffile} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +$endif$ +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\DeclareRobustCommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(beamer)$ +$else$ +$if(subparagraph)$ +$else$ +% Redefines (sub)paragraphs to behave more like sections +\ifx\paragraph\undefined\else +\let\oldparagraph\paragraph +\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else +\let\oldsubparagraph\subparagraph +\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$endif$ +$if(pagestyle)$ +\pagestyle{$pagestyle$} +$endif$ + +% Make use of float-package and set default placement for figures to H +\usepackage{float} +\floatplacement{figure}{H} + +$for(header-includes)$ +$header-includes$ +$endfor$ +$if(lang)$ +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\else + $if(mainfont)$ + $else$ + % See issue https://github.com/reutenauer/polyglossia/issues/127 + \renewcommand*\familydefault{\sfdefault} + $endif$ + % load polyglossia as late as possible as it *could* call bidi if RTL lang (e.g. Hebrew or Arabic) + \usepackage{polyglossia} + \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} +$endfor$ +\fi +$endif$ +$if(dir)$ +\ifxetex + % load bidi as late as possible as it modifies e.g. graphicx + \usepackage{bidi} +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ +$if(natbib)$ +\usepackage[$natbiboptions$]{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ + +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +$endif$ +$if(subtitle)$ +\providecommand{\subtitle}[1]{} +\subtitle{$subtitle$} +$endif$ +$if(author)$ +\author{$for(author)$$author$$sep$ \and $endfor$} +$endif$ +$if(institute)$ +\providecommand{\institute}[1]{} +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +\date{$date$} +$if(beamer)$ +$if(titlegraphic)$ +\titlegraphic{\includegraphics{$titlegraphic$}} +$endif$ +$if(logo)$ +\logo{\includegraphics{$logo$}} +$endif$ +$endif$ + + + + + +%% +%% added +%% + +% +% No language specified? take American English. +% +$if(lang)$$else$ +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=english]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\else + $if(mainfont)$ + $else$ + % See issue https://github.com/reutenauer/polyglossia/issues/127 + \renewcommand*\familydefault{\sfdefault} + $endif$ + % load polyglossia as late as possible as it *could* call bidi if RTL lang (e.g. Hebrew or Arabic) + \usepackage{polyglossia} + \setmainlanguage[]{english} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} +$endfor$ +\fi +$endif$ + +% +% colors +% +\usepackage[]{xcolor} + +% +% listing colors +% +\definecolor{listing-background}{HTML}{F7F7F7} +\definecolor{listing-rule}{HTML}{B3B2B3} +\definecolor{listing-numbers}{HTML}{B3B2B3} +\definecolor{listing-text-color}{HTML}{000000} +\definecolor{listing-keyword}{HTML}{435489} +\definecolor{listing-identifier}{HTML}{435489} +\definecolor{listing-string}{HTML}{00999A} +\definecolor{listing-comment}{HTML}{8E8E8E} +\definecolor{listing-javadoc-comment}{HTML}{006CA9} + +%\definecolor{listing-background}{rgb}{0.97,0.97,0.97} +%\definecolor{listing-rule}{HTML}{B3B2B3} +%\definecolor{listing-numbers}{HTML}{B3B2B3} +%\definecolor{listing-text-color}{HTML}{000000} +%\definecolor{listing-keyword}{HTML}{D8006B} +%\definecolor{listing-identifier}{HTML}{000000} +%\definecolor{listing-string}{HTML}{006CA9} +%\definecolor{listing-comment}{rgb}{0.25,0.5,0.35} +%\definecolor{listing-javadoc-comment}{HTML}{006CA9} + +% +% for the background color of the title page +% +$if(titlepage)$ +\usepackage{pagecolor} +\usepackage{afterpage} +$endif$ + +% +% TOC depth and +% section numbering depth +% +\setcounter{tocdepth}{3} +$if(numbersections)$ +\setcounter{secnumdepth}{3} +$endif$ + +% +% break urls +% +\PassOptionsToPackage{hyphens}{url} + +% +% When using babel or polyglossia with biblatex, loading csquotes is recommended +% to ensure that quoted texts are typeset according to the rules of your main language. +% +\usepackage{csquotes} + +% +% captions +% +\definecolor{caption-color}{HTML}{777777} +\usepackage[font={stretch=1.2}, textfont={color=caption-color}, position=top, skip=4mm, labelfont=bf, singlelinecheck=false, justification=$if(caption-justification)$$caption-justification$$else$raggedright$endif$]{caption} +\setcapindent{0em} +\captionsetup[longtable]{position=above} + +% +% blockquote +% +\definecolor{blockquote-border}{RGB}{221,221,221} +\definecolor{blockquote-text}{RGB}{119,119,119} +\usepackage{mdframed} +\newmdenv[rightline=false,bottomline=false,topline=false,linewidth=3pt,linecolor=blockquote-border,skipabove=\parskip]{customblockquote} +\renewenvironment{quote}{\begin{customblockquote}\list{}{\rightmargin=0em\leftmargin=0em}% +\item\relax\color{blockquote-text}\ignorespaces}{\unskip\unskip\endlist\end{customblockquote}} + +% +% Source Sans Pro as the de­fault font fam­ily +% Source Code Pro for monospace text +% +% 'default' option sets the default +% font family to Source Sans Pro, not \sfdefault. +% +$if(mainfont)$ +$else$ +\usepackage[default]{sourcesanspro} +\usepackage{sourcecodepro} +$endif$ + +% +% heading color +% +\definecolor{heading-color}{RGB}{40,40,40} +\addtokomafont{section}{\color{heading-color}} +% When using the classes report, scrreprt, book, +% scrbook or memoir, uncomment the following line. +%\addtokomafont{chapter}{\color{heading-color}} + +% +% variables for title and author +% +\usepackage{titling} +\title{$title$} +\author{$for(author)$$author$$sep$, $endfor$} + +% +% tables +% +$if(tables)$ + +\definecolor{table-row-color}{HTML}{F5F5F5} +\definecolor{table-rule-color}{HTML}{999999} + +%\arrayrulecolor{black!40} +\arrayrulecolor{table-rule-color} % color of \toprule, \midrule, \bottomrule +\setlength\heavyrulewidth{0.3ex} % thickness of \toprule, \bottomrule +\renewcommand{\arraystretch}{1.3} % spacing (padding) + +% Reset rownum counter so that each table +% starts with the same row colors. +% https://tex.stackexchange.com/questions/170637/restarting-rowcolors +\let\oldlongtable\longtable +\let\endoldlongtable\endlongtable +\renewenvironment{longtable}{ +\rowcolors{3}{}{table-row-color!100} % row color +\oldlongtable} { +\endoldlongtable +\global\rownum=0\relax} + +% Unfortunately the colored cells extend beyond the edge of the +% table because pandoc uses @-expressions (@{}) like so: +% +% \begin{longtable}[]{@{}ll@{}} +% \end{longtable} +% +% https://en.wikibooks.org/wiki/LaTeX/Tables#.40-expressions +$endif$ + +% +% remove paragraph indention +% +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +\setlength{\emergencystretch}{3em} % prevent overfull lines + +% +% +% Listings +% +% + +$if(listings)$ +\lstdefinestyle{eisvogel_listing_style}{ + language = java, +$if(listings-disable-line-numbers)$ + xleftmargin = 0.6em, + framexleftmargin = 0.4em, +$else$ + numbers = left, + xleftmargin = 2.7em, + framexleftmargin = 2.5em, +$endif$ + backgroundcolor = \color{listing-background}, + basicstyle = \color{listing-text-color}\small\ttfamily{}\linespread{1.15}, % print whole listing small + breaklines = true, + frame = single, + framesep = 0.6mm, + rulecolor = \color{listing-rule}, + frameround = ffff, + tabsize = 4, + numberstyle = \color{listing-numbers}, + aboveskip = 1.0em, + belowcaptionskip = 1.0em, + keywordstyle = \color{listing-keyword}\bfseries, + classoffset = 0, + sensitive = true, + identifierstyle = \color{listing-identifier}, + commentstyle = \color{listing-comment}, + morecomment = [s][\color{listing-javadoc-comment}]{/**}{*/}, + stringstyle = \color{listing-string}, + showstringspaces = false, + escapeinside = {/*@}{@*/}, % Allow LaTeX inside these special comments + literate = + {á}{{\'a}}1 {é}{{\'e}}1 {í}{{\'i}}1 {ó}{{\'o}}1 {ú}{{\'u}}1 + {Á}{{\'A}}1 {É}{{\'E}}1 {Í}{{\'I}}1 {Ó}{{\'O}}1 {Ú}{{\'U}}1 + {à}{{\`a}}1 {è}{{\'e}}1 {ì}{{\`i}}1 {ò}{{\`o}}1 {ù}{{\`u}}1 + {À}{{\`A}}1 {È}{{\'E}}1 {Ì}{{\`I}}1 {Ò}{{\`O}}1 {Ù}{{\`U}}1 + {ä}{{\"a}}1 {ë}{{\"e}}1 {ï}{{\"i}}1 {ö}{{\"o}}1 {ü}{{\"u}}1 + {Ä}{{\"A}}1 {Ë}{{\"E}}1 {Ï}{{\"I}}1 {Ö}{{\"O}}1 {Ü}{{\"U}}1 + {â}{{\^a}}1 {ê}{{\^e}}1 {î}{{\^i}}1 {ô}{{\^o}}1 {û}{{\^u}}1 + {Â}{{\^A}}1 {Ê}{{\^E}}1 {Î}{{\^I}}1 {Ô}{{\^O}}1 {Û}{{\^U}}1 + {œ}{{\oe}}1 {Œ}{{\OE}}1 {æ}{{\ae}}1 {Æ}{{\AE}}1 {ß}{{\ss}}1 + {ç}{{\c c}}1 {Ç}{{\c C}}1 {ø}{{\o}}1 {å}{{\r a}}1 {Å}{{\r A}}1 + {€}{{\EUR}}1 {£}{{\pounds}}1 {«}{{\guillemotleft}}1 + {»}{{\guillemotright}}1 {ñ}{{\~n}}1 {Ñ}{{\~N}}1 {¿}{{?`}}1 + {…}{{\ldots}}1 {≥}{{>=}}1 {≤}{{<=}}1 {„}{{\glqq}}1 {“}{{\grqq}}1 + {”}{{''}}1 +} +\lstset{style=eisvogel_listing_style} + +\lstdefinelanguage{XML}{ + morestring = [b]", + moredelim = [s][\bfseries\color{listing-keyword}]{<}{\ }, + moredelim = [s][\bfseries\color{listing-keyword}]{}, + moredelim = [l][\bfseries\color{listing-keyword}]{/>}, + moredelim = [l][\bfseries\color{listing-keyword}]{>}, + morecomment = [s]{}, + morecomment = [s]{}, + commentstyle = \color{listing-comment}, + stringstyle = \color{listing-string}, + identifierstyle = \color{listing-identifier} +} +$endif$ + +% +% header and footer +% +$if(disable-header-and-footer)$ +$else$ +\usepackage{fancyhdr} +\pagestyle{fancy} +\fancyhead{} +\fancyfoot{} +\lhead[$if(header-right)$$header-right$$else$$date$$endif$]{$if(header-left)$$header-left$$else$$title$$endif$} +\chead[$if(header-center)$$header-center$$else$$endif$]{$if(header-center)$$header-center$$else$$endif$} +\rhead[$if(header-left)$$header-left$$else$$title$$endif$]{$if(header-right)$$header-right$$else$$date$$endif$} +\lfoot[$if(footer-right)$$footer-right$$else$\thepage$endif$]{$if(footer-left)$$footer-left$$else$$for(author)$$author$$sep$, $endfor$$endif$} +\cfoot[$if(footer-center)$$footer-center$$else$$endif$]{$if(footer-center)$$footer-center$$else$$endif$} +\rfoot[$if(footer-left)$$footer-left$$else$$for(author)$$author$$sep$, $endfor$$endif$]{$if(footer-right)$$footer-right$$else$\thepage$endif$} +\renewcommand{\headrulewidth}{0.4pt} +\renewcommand{\footrulewidth}{0.4pt} +$endif$ + +%% +%% end added +%% + +\begin{document} + +%% +%% begin titlepage +%% + +$if(titlepage)$ +\begin{titlepage} +\newgeometry{left=6cm} +$if(titlepage-color)$ +\definecolor{titlepage-color}{HTML}{$titlepage-color$} +\newpagecolor{titlepage-color}\afterpage{\restorepagecolor} +$endif$ +\newcommand{\colorRule}[3][black]{\textcolor[HTML]{#1}{\rule{#2}{#3}}} +\begin{flushleft} +\noindent +\\[-1em] +\color[HTML]{$if(titlepage-text-color)$$titlepage-text-color$$else$5F5F5F$endif$} +\makebox[0pt][l]{\colorRule[$if(titlepage-rule-color)$$titlepage-rule-color$$else$435488$endif$]{1.3\textwidth}{$if(titlepage-rule-height)$$titlepage-rule-height$$else$4$endif$pt}} +\par +\noindent + +{ \setstretch{1.4} +\vfill +\noindent {\huge \textbf{\textsf{$title$}}} +$if(subtitle)$ +\vskip 1em +{\Large \textsf{$subtitle$}} +$endif$ +\vskip 2em +\noindent +{\Large \textsf{$for(author)$$author$$sep$, $endfor$} +\vfill +} + +$if(logo)$ +\noindent +\includegraphics[width=$if(logo-width)$$logo-width$$else$100$endif$pt, left]{$logo$} +$endif$ + +\textsf{$date$}} +\end{flushleft} +\end{titlepage} +\restoregeometry +$endif$ + +%% +%% end titlepage +%% + +$if(title)$ +$if(beamer)$ +\frame{\titlepage} +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +$if(toc-title)$ +\renewcommand*\contentsname{$toc-title$} +$endif$ +$if(beamer)$ +\begin{frame} +$if(toc-title)$ +\frametitle{$toc-title$} +$endif$ +\tableofcontents[hideallsubsections] +\end{frame} +$if(toc-own-page)$ +\newpage +$endif$ +$else$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +$if(toc-own-page)$ +\newpage +$endif$ +} +$endif$ +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$body$ + +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(book-class)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} +\bibliographytrue +$endif$ +\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} +$if(beamer)$ +\end{frame} +$endif$ + +$endif$ +$endif$ +$if(biblatex)$ +$if(beamer)$ +\begin{frame}[allowframebreaks]{$biblio-title$} +\bibliographytrue +\printbibliography[heading=none] +\end{frame} +$else$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ +$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} diff --git a/templates/mindoc.html b/templates/mindoc.html new file mode 100644 index 0000000..06983de --- /dev/null +++ b/templates/mindoc.html @@ -0,0 +1,122 @@ + + + + + + +$if(description)$ + +$endif$ +$for(author-meta)$ + +$endfor$ +$if(date-meta)$ + +$endif$ +$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$ + + + + + + + +$if(quotes)$ + +$endif$ +$if(highlighting-css)$ + +$endif$ +$for(css)$ + +$endfor$ +$if(math)$ +$math$ +$endif$ +$for(header-includes)$ +$header-includes$ +$endfor$ + + +
+
+
+ + + +$for(include-before)$ +$include-before$ +$endfor$ +$if(headnote)$ +
$headnote$
+$endif$ +$if(published)$ +
$published$
+$endif$ +$if(license)$ +
$license$
$endif$ +$if(title)$ +
+

$title$

+$if(subtitle)$ +

$subtitle$

+$endif$ +$if(author)$ +$for(author)$ +$if(author.name)$ +

$author.name$

+$else$ +

$author$

+$endif$ +$if(author.affiliation)$ +
$author.affiliation$
+$endif$ +$if(author.email)$ + +$endif$ +$endfor$ +$endif$ +$if(version)$ +

Version $version$

+$endif$ +$if(date)$ +

$date$

+$endif$ +
+$endif$ +$if(abstract)$ +
+

Abstract

+$abstract$ +
+$endif$ +$if(toc)$ + +$endif$ +$body$ +$for(include-after)$ +$include-after$ +$endfor$ + + + +
+
+
+
+ +
+ + + + + +