Updated documentation, added German translation
38
docs-de/.gitignore
vendored
Normal file
@ -0,0 +1,38 @@
|
||||
# Created by https://www.gitignore.io
|
||||
|
||||
### LaTeX ###
|
||||
*.acn
|
||||
*.acr
|
||||
*.alg
|
||||
*.aux
|
||||
*.bbl
|
||||
*.bcf
|
||||
*.blg
|
||||
*.dvi
|
||||
*.fdb_latexmk
|
||||
*.glg
|
||||
*.glo
|
||||
*.gls
|
||||
*.idx
|
||||
*.ilg
|
||||
*.ind
|
||||
*.ist
|
||||
*.lof
|
||||
*.log
|
||||
*.lot
|
||||
*.maf
|
||||
*.mtc
|
||||
*.mtc0
|
||||
*.nav
|
||||
*.nlo
|
||||
*.out
|
||||
*.pdfsync
|
||||
*.ps
|
||||
*.run.xml
|
||||
*.snm
|
||||
*.synctex.gz
|
||||
*.toc
|
||||
*.vrb
|
||||
*.xdy
|
||||
*.tdo
|
||||
|
15
docs-de/basics.tex
Normal file
@ -0,0 +1,15 @@
|
||||
\section{Einführung}
|
||||
|
||||
\subsection{Was sind Metadaten?}
|
||||
|
||||
Verschlüsselungstechnologie wie PGP oder S/MIME ermöglicht es zwar auf sichere Art und Weise Nachrichten vor neugierigen Augen zu schützen, doch seit Edward Snowden den NSA-Skandal aufgedeckt hat wissen wir dass Metadaten --- vor allem Informationen darüber wer mit wem kommuniziert -- genauso interessant und viel einfacher zu analysieren sind.
|
||||
|
||||
Es gibt einige Beispiele wie Sie durch Metadaten in Schwierigkeiten kommen können. Wenn Sie jemandem schreiben der in der IS ist, kann es durchaus sein dass Sie das nächste mal nicht in die USA fliegen können. Die No-Fly-Liste kümmert sich nicht darum dass Sie Journalist sind, oder keine Ahnung hatten dass diese Person ein Terrorist war.
|
||||
|
||||
Wenn Samsung erfährt, dass Apple ergiebig mit dem einzigen Produzent eines raffinierten kleinen Sensors ist, brauchen sie keine Details --- das S7 wird ebenfalls einen solchen enthalten. (Dass Apple ihn braucht um ein Auto zu bauen haben sie dabei übersehen.)
|
||||
|
||||
\subsection{Wie können wir Metadaten verstecken?}
|
||||
|
||||
Mit E-Mail können wir die Verbindung zu unserem Mail-Provider verschlüsseln, und dieser wiederum die Verbindung mit dem Provider unseres Gesprächspartners. Dabei können wir nur hoffen dass unser Anbieter und derjenige des Empfängers sowohl vertrauenswürdig als auch kompetent sind.\footnote{Gratis sollte er natürlich auch noch sein.}
|
||||
|
||||
Bei Bitmessage senden wir eine Nachricht and eine grosse Anzahl Teilnehmer, darunter den eigentlichen Empfänger. Die Nachricht ist dabei so verschlüsselt, dass nur die Person welche den privaten Schlüssel besitzt diese entschlüsseln kann. Alle Teilnehmer versuchen dies um die für sie bestimmten Nachrichten zu finden.
|
279
docs-de/bfh.cls
Normal file
@ -0,0 +1,279 @@
|
||||
\NeedsTeXFormat{LaTeX2e}
|
||||
\ProvidesClass{bfh}[2015/04/21 Atricle Class for my BFH reports]
|
||||
|
||||
\DeclareOption{a4paper}{\PassOptionsToClass{\CurrentOption}{scrartcl}}
|
||||
\DeclareOption{11pt}{\PassOptionsToClass{\CurrentOption}{scrartcl}}
|
||||
\DeclareOption{oneside}{\PassOptionsToClass{\CurrentOption}{scrartcl}}
|
||||
\DeclareOption{titlepage}{\PassOptionsToClass{\CurrentOption}{scrartcl}}
|
||||
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{scrartcl}}
|
||||
\ExecuteOptions{a4paper,11pt,oneside}
|
||||
\ProcessOptions
|
||||
|
||||
%\RequirePackage{cite}
|
||||
%\RequirePackage[backend=bibtex]{biblatex}
|
||||
% Literatur- und Bilderquellen trennen
|
||||
%\defbibheading{lit}{\section*{Literature}}
|
||||
%\defbibheading{pic}{\section*{Pictures}}
|
||||
|
||||
\LoadClass{scrartcl}
|
||||
\RequirePackage{remreset}
|
||||
|
||||
\RequirePackage[utf8]{inputenc}
|
||||
\RequirePackage{graphicx}
|
||||
\RequirePackage{color}
|
||||
\RequirePackage{lmodern}
|
||||
\RequirePackage{url}
|
||||
\RequirePackage{lastpage}
|
||||
|
||||
\RequirePackage{mathtools}
|
||||
\RequirePackage{amsfonts}
|
||||
%\RequirePackage{float}
|
||||
\RequirePackage{textgreek}
|
||||
%\RequirePackage{centernot}
|
||||
\RequirePackage{hyphenat}
|
||||
|
||||
\RequirePackage[T1]{fontenc}
|
||||
\RequirePackage[scaled]{helvet}
|
||||
|
||||
\RequirePackage{textcomp}
|
||||
\RequirePackage{eurosym}
|
||||
\RequirePackage{fancyhdr}
|
||||
\RequirePackage{alltt}
|
||||
\RequirePackage{verbatim}
|
||||
\RequirePackage{aeguill}
|
||||
%\RequirePackage{underscore}
|
||||
\RequirePackage{ctable}
|
||||
\RequirePackage[english]{babel}
|
||||
|
||||
\RequirePackage{tabularx}
|
||||
\RequirePackage{wrapfig}
|
||||
\RequirePackage{ifthen}
|
||||
\RequirePackage[usenames,dvipsnames,svgnames]{xcolor}
|
||||
\RequirePackage{hyperref}
|
||||
\RequirePackage{listings}
|
||||
\RequirePackage{attachfile}
|
||||
|
||||
\RequirePackage{enumitem}
|
||||
\RequirePackage{wasysym}
|
||||
|
||||
\RequirePackage[absolute]{textpos}
|
||||
|
||||
\definecolor{bfhblue}{rgb}{0.396,0.49,0.56} % Blue
|
||||
\definecolor{bfhorange}{rgb}{0.961,0.753,0.196} % Orange
|
||||
\definecolor{bfhorangelight}{RGB}{246,216,136} % Orange Light
|
||||
|
||||
\hypersetup{
|
||||
linkcolor=blue, % color of internal links
|
||||
citecolor=green, % color of links to bibliography
|
||||
filecolor=blue, % color of file links
|
||||
urlcolor=blue, % color of external links
|
||||
colorlinks=true
|
||||
}
|
||||
\urlstyle{same}
|
||||
|
||||
\typearea{12}
|
||||
%\bibliographystyle{alpha}
|
||||
\setcounter{secnumdepth}{4}
|
||||
\setlength{\parskip}{12pt}
|
||||
\setlength{\parindent}{0pt}
|
||||
|
||||
\renewcommand{\familydefault}{\sfdefault}
|
||||
|
||||
%\let\oldtoc\tableofcontents
|
||||
%\renewcommand{\tableofcontents} {
|
||||
% \oldtoc
|
||||
% \newpage
|
||||
%}
|
||||
\newcommand*{\tutor}[1]{\gdef\@tutor{#1}}
|
||||
\renewcommand{\maketitle} {
|
||||
\begin{titlepage}
|
||||
\newlength{\unitlengthtmp}
|
||||
\setlength{\unitlengthtmp}{\unitlength}
|
||||
\setlength{\unitlength}{1mm}
|
||||
\setlength{\TPHorizModule}{\textwidth}
|
||||
\setlength{\TPVertModule}{\textheight}
|
||||
%
|
||||
% BFH Logo
|
||||
\includegraphics[scale=1.25]{images/logo.pdf}
|
||||
%
|
||||
% Linien
|
||||
\begin{textblock}{1}[0,0](0,0)
|
||||
\begin{picture}(0,130)
|
||||
\put(20,0){\color{bfhblue}\rule{\textwidth}{1.2mm}}
|
||||
\put(20,40){\color{bfhblue}\rule{\textwidth}{1.2mm}} %28.5
|
||||
\end{picture}
|
||||
\end{textblock}
|
||||
%
|
||||
%Zentrierte Titel
|
||||
\begin{flushleft}
|
||||
\vspace*{4.08cm}
|
||||
\textsf{\textbf{\noindent{\Huge{\textcolor{bfhblue}{\@title}}}}}\\[0.4cm]
|
||||
\textsf{\huge{\textcolor{bfhblue}{\@subtitle}}}
|
||||
%
|
||||
%Angaben zum Dokument
|
||||
\begin{vfill}
|
||||
\begin{tabularx}{\textwidth}{lX}
|
||||
\textsf{Author} & \@author\\
|
||||
\textsf{Tutor} & \@tutor\\
|
||||
% \textsf{Expert} & \textsf\DozentA\\
|
||||
% \textsf{Studiengang} & \textsf{\Studiengang}\vspace{5pt}\\
|
||||
% \textsf{Autoren} & \textsf\AutorA\\
|
||||
% & \textsf\AutorB\vspace{5pt}\\
|
||||
% \textsf{Betreuer} & \textsf\DozentA\\
|
||||
% & \textsf\DozentB\vspace{5pt}\\
|
||||
% \textsf{Experten} & \textsf\ExpertA\\
|
||||
% & \textsf\ExpertB\vspace{5pt}\\
|
||||
\textsf{Date} & \textsf{\@date}\vspace{5pt}\\
|
||||
% &\\
|
||||
% &\\
|
||||
% \multicolumn{2}{p{\columnwidth-\tabcolsep}}{\textsf{\input{titlepage/titlepage_info}}}\\
|
||||
\end{tabularx}
|
||||
\end{vfill}
|
||||
\end{flushleft}
|
||||
\setlength{\unitlength}{\unitlengthtmp}
|
||||
\end{titlepage}
|
||||
}
|
||||
|
||||
\pagestyle{fancy}
|
||||
\fancyhf{}
|
||||
\fancyfoot[R]{\hrule\thepage/\pageref{LastPage}}
|
||||
\fancyfoot[L]{\hrule\today}
|
||||
\fancyhead[L]{\@title}
|
||||
|
||||
\fancyhead[R]{
|
||||
\includegraphics[height=1.5\baselineskip]{images/logo.png}
|
||||
}
|
||||
\addtolength{\headheight}{2\baselineskip}
|
||||
\addtolength{\headheight}{0.61pt}
|
||||
|
||||
\lstset{
|
||||
language=XML, % Code langugage
|
||||
basicstyle=\ttfamily\scriptsize,
|
||||
keywordstyle=\color{OliveGreen}, % Keywords font ('*' = uppercase)
|
||||
stringstyle=\color{blue}, % String font
|
||||
commentstyle=\color{gray}, % Comments font
|
||||
numbers=left, % Line nums position
|
||||
numberstyle=\tiny, % Line-numbers fonts
|
||||
stepnumber=1, % Step between two line-numbers
|
||||
numbersep=10pt, % How far are line-numbers from code
|
||||
backgroundcolor=\color{BackgroundBlue}, % Choose background color
|
||||
frame=none, % A frame around the code
|
||||
tabsize=4, % Default tab size
|
||||
captionpos=b, % Caption-position = bottom
|
||||
breaklines=true, % Automatic line breaking?
|
||||
breakatwhitespace=false, % Automatic breaks only at whitespace?
|
||||
%showspaces=false, % Dont make spaces visible
|
||||
%showtabs=false, % Dont make tabls visible
|
||||
columns=fixed, % Column format
|
||||
morekeywords={Server, Listener, GlobalNamingResources,
|
||||
Resource, ResourceLink, Service, Connector, Engine,
|
||||
Host, Context, Environment,
|
||||
beans, bean, broker, destinationPolicy, policyMap,
|
||||
policyEntries, policyEntry, dispatchPolicy,
|
||||
strictOrderDispatchPolicy, subscriptionRecoveryPolicy,
|
||||
lastImageSubscriptionRecoveryPolicy, managementContext,
|
||||
persistenceAdapter, systemUsage, memoryUsage,
|
||||
storeUsage, tempUsage, transportConnectors,
|
||||
transportConnector, property, jetty, connectors,
|
||||
nioConnector, handlers, webAppContext},
|
||||
}
|
||||
% Shows a listing and creates an attachment with the source
|
||||
\newcommand{\attachlisting}[2][]{
|
||||
\hspace{0.95\textwidth}
|
||||
\attachfile[icon=Paperclip]{#2}
|
||||
\vspace{-5ex}
|
||||
\lstinputlisting[#1]{#2}
|
||||
}
|
||||
% 1 line number(s)
|
||||
% 2 variable name
|
||||
% 3 description
|
||||
% 4 example values
|
||||
\newcommand{\listinginfo}[4]{
|
||||
\colorbox{WhiteSmoke}{
|
||||
\parbox[t]{0.25\textwidth}{
|
||||
\printifnotempty{#1}{\texttt{#1:}\\}
|
||||
\textit{#2}
|
||||
}
|
||||
\parbox[t]{0.715\textwidth}{
|
||||
\printifnotempty{#3}{#3
|
||||
}
|
||||
\printifnotempty{#4}{
|
||||
\par
|
||||
\vspace{1ex}
|
||||
\colorbox{BackgroundBlue}{
|
||||
\parbox{0.69\textwidth}{
|
||||
\vspace{-2ex}
|
||||
\ttfamily
|
||||
\flushleft{#4}
|
||||
}
|
||||
}
|
||||
\par
|
||||
\vspace{0.5ex}
|
||||
}
|
||||
}
|
||||
}
|
||||
\par
|
||||
\vspace{-1.7ex}
|
||||
}
|
||||
\newcommand{\printifnotempty}[2]{
|
||||
\ifthenelse{\equal{#1}{}}{}{#2}
|
||||
}
|
||||
|
||||
% Makes a red box that highlights errors or very important warnings
|
||||
\newcommand{\errorbox}[1]{
|
||||
\fcolorbox{Red}{LightPink}{
|
||||
\parbox{0.972\textwidth}{
|
||||
\begin{wrapfigure}[2]{l}{0.05\textwidth}
|
||||
\vspace{-12pt}
|
||||
\includegraphics[width=0.05\textwidth]{images/error.pdf}
|
||||
\vspace{12pt}
|
||||
\end{wrapfigure}
|
||||
#1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
% Makes a yellow box that highlights warnings
|
||||
\newcommand{\warningbox}[1]{
|
||||
\fcolorbox{Goldenrod}{LightYellow}{
|
||||
\parbox{0.972\textwidth}{
|
||||
\begin{wrapfigure}[2]{l}{0.05\textwidth}
|
||||
\vspace{-12pt}
|
||||
\includegraphics[width=0.05\textwidth]{images/warning.pdf}
|
||||
\vspace{12pt}
|
||||
\end{wrapfigure}
|
||||
#1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
% Makes a blue box that highlights special information
|
||||
\newcommand{\infobox}[1]{
|
||||
\fcolorbox{CornflowerBlue}{AliceBlue}{
|
||||
\parbox{0.972\textwidth}{
|
||||
\begin{wrapfigure}[2]{l}{0.05\textwidth}
|
||||
\vspace{-12pt}
|
||||
\includegraphics[width=0.05\textwidth]{images/info.pdf}
|
||||
\end{wrapfigure}
|
||||
#1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
\RequirePackage{listings}
|
||||
\definecolor{BackgroundBlue}{cmyk}{0.05,0,0,0}
|
||||
|
||||
\let\olditemize=\itemize
|
||||
\def\itemize{
|
||||
\olditemize
|
||||
\setlength{\itemsep}{-1.5ex}
|
||||
}
|
||||
|
||||
\newcommand{\leadingzero}[1]{\ifnum #1<10 0\the#1\else\the#1\fi}
|
||||
%YYYY-MM-DD
|
||||
\newcommand{\todayI}{\the\year-\leadingzero{\month}-\leadingzero{\day}}
|
||||
|
||||
\endinput
|
||||
|
||||
|
||||
|
29
docs-de/bibliography.bib
Normal file
@ -0,0 +1,29 @@
|
||||
@ONLINE{wiki:protocol,
|
||||
url = {https://bitmessage.org/wiki/Protocol_specification},
|
||||
title = {Bitmessage Wiki: Protocol Specification},
|
||||
publisher = {Bitmessage Wiki},
|
||||
urldate = {2015-04-24},
|
||||
author = {Warren, Jonathan 'Atheros' and Coe, Jonathan},
|
||||
note = {\url{https://bitmessage.org/wiki/Protocol_specification}},
|
||||
year = {2015},
|
||||
}
|
||||
|
||||
@ONLINE{wiki:prefixfilter,
|
||||
url = {https://bitmessage.org/wiki/Scalability_through_Prefix_Filtering},
|
||||
title = {Bitmessage Wiki: Scalability through Prefix Filtering},
|
||||
publisher = {Bitmessage Wiki},
|
||||
urldate = {2015-05-22},
|
||||
author = {Coe, Jonathan},
|
||||
note = {\url{https://bitmessage.org/wiki/Scalability_through_Prefix_Filtering}},
|
||||
year = {2015},
|
||||
}
|
||||
|
||||
@ONLINE{issue:112,
|
||||
url = {https://github.com/Bitmessage/PyBitmessage/issues/112},
|
||||
title = {BigInv and ping/pong},
|
||||
publisher = {github.com},
|
||||
urldate = {2015-05-22},
|
||||
author = {Warren, Jonathan 'Atheros' and ISibbol},
|
||||
note = {\url{https://github.com/Bitmessage/PyBitmessage/issues/112}},
|
||||
year = {2015},
|
||||
}
|
5844
docs-de/diagram.svg
Normal file
After Width: | Height: | Size: 477 KiB |
123
docs-de/images/logo-de.svg
Normal file
@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
width="116.25"
|
||||
height="67.5"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="logo.pdf"><metadata
|
||||
id="metadata8"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs6"><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath18"><path
|
||||
d="m 0,0 922.23,0 0,538.586 L 0,538.586 0,0 z"
|
||||
id="path20" /></clipPath></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="640"
|
||||
inkscape:window-height="480"
|
||||
id="namedview4"
|
||||
showgrid="false"
|
||||
inkscape:zoom="3.4962963"
|
||||
inkscape:cx="58.125"
|
||||
inkscape:cy="33.75"
|
||||
inkscape:window-x="271"
|
||||
inkscape:window-y="47"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="g10" /><g
|
||||
id="g10"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="logo"
|
||||
transform="matrix(1.25,0,0,-1.25,0,67.5)"><g
|
||||
id="g12"
|
||||
transform="scale(0.1,0.1)"><g
|
||||
id="g14"><g
|
||||
id="g16"
|
||||
clip-path="url(#clipPath18)"><path
|
||||
d="m 185.602,538.586 c 77.55,0 140.449,-62.867 140.449,-140.449 0,-52.102 -24.153,-97.317 -63.223,-121.828 -0.765,-0.485 -1.32,-1.211 -1.32,-2.161 0,-1.714 1.359,-2.152 1.453,-2.191 50.684,-19.617 82.488,-71.375 82.488,-131.484 C 345.449,62.875 282.535,0 204.977,0 L 19.4961,0.0390625 C 8.73047,0.0390625 0,8.77344 0,19.5156 L 0,519.094 c 0,10.769 8.73047,19.492 19.4961,19.492 l 166.1059,0"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path22" /><path
|
||||
d="m 117.695,95.3672 c -2.476,0 -4.593,2.1172 -4.593,4.5937 l 0,112.6291 c 0,2.469 2.117,4.594 4.593,4.594 l 7.071,0 c 2.468,0 4.613,-2.125 4.613,-4.594 l 0,-49.895 43.844,0 0,49.895 c 0,2.469 2.121,4.594 4.593,4.594 l 7.071,0 c 2.472,0 4.593,-2.125 4.593,-4.594 l 0,-112.6291 c 0,-2.4765 -2.121,-4.5937 -4.593,-4.5937 l -7.071,0 c -2.472,0 -4.593,2.1172 -4.593,4.5937 l 0,48.4181 -43.844,0 0,-48.4181 c 0,-2.4765 -2.145,-4.5937 -4.613,-4.5937 l -7.071,0"
|
||||
style="fill:#fcd205;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path24" /><path
|
||||
d="m 117.227,321.836 c -2.477,0 -4.594,2.117 -4.594,4.594 l 0,112.644 c 0,2.473 2.117,4.614 4.594,4.614 l 67.757,0 c 2.473,0 4.594,-2.141 4.594,-4.614 l 0,-4.773 c 0,-2.477 -2.121,-4.594 -4.594,-4.594 l -56.078,0 0,-39.148 47.754,0 c 2.488,0 4.613,-2.121 4.613,-4.598 l 0,-4.789 c 0,-2.477 -2.125,-4.594 -4.613,-4.594 l -47.754,0 0,-50.148 c 0,-2.477 -2.121,-4.594 -4.593,-4.594 l -7.086,0"
|
||||
style="fill:#fcd205;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path26" /><path
|
||||
d="m 410.621,489.852 8.406,0 c 7.207,0 9.758,2.777 9.758,9.086 0,6.226 -2.324,9.082 -9.461,9.082 l -8.703,0 0,-18.168 z m -0.078,24.027 8.559,0 c 6.078,0 7.429,2.547 7.429,7.957 0,5.398 -1.726,8.184 -7.804,8.184 l -8.184,0 0,-16.141 z m -4.879,-29.805 c -1.051,0 -1.953,0.895 -1.953,1.953 l 0,47.821 c 0,1.047 0.902,1.953 1.953,1.953 l 13.285,0 c 10.891,0 14.864,-5.711 14.864,-13.821 0,-5.398 -1.348,-8.328 -6.301,-10.429 5.027,-1.422 8.633,-5.332 8.633,-12.985 0,-10.285 -6.758,-14.492 -16.372,-14.492 l -14.109,0"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path28" /><path
|
||||
d="m 462.32,517.559 c -4.355,0 -7.054,-2.258 -7.586,-11.27 l 14.946,0 c 0,8.645 -1.953,11.27 -7.36,11.27 z m 0.825,-34.465 c -9.832,0 -15.391,5.703 -15.391,19.824 0,14.258 5.855,19.738 14.719,19.738 8.929,0 14.035,-5.097 14.035,-18.691 l 0,-1.348 c 0,-0.672 -0.528,-1.203 -1.199,-1.203 l -20.645,0 c 0.145,-10.281 2.402,-12.84 8.633,-12.84 3.226,0 5.332,0.977 7.277,2.332 0.906,0.676 2.18,0.449 2.781,-0.379 l 1.2,-1.57 c 0.601,-0.832 0.449,-2.113 -0.45,-2.707 -3.074,-2.176 -6.23,-3.156 -10.96,-3.156"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path30" /><path
|
||||
d="m 491.531,484.074 c -1.047,0 -1.953,0.895 -1.953,1.953 l 0,33.707 c 0,1.047 0.906,1.946 1.953,1.946 l 1.125,0 c 1.129,0 2.106,-0.821 2.328,-1.946 l 0.676,-3.379 c 2.778,3.45 6.231,6.008 10.586,6.008 0.223,0 0.527,0 0.75,-0.078 0.305,-0.078 0.602,-0.371 0.527,-0.676 l -0.527,-5.254 c -0.07,-0.523 -0.601,-0.972 -1.199,-0.906 -0.375,0.078 -0.824,0.078 -1.203,0.078 -3.449,0 -5.781,-1.277 -8.559,-3.828 l 0,-25.672 c 0,-1.058 -0.898,-1.953 -1.949,-1.953 l -2.555,0"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path32" /><path
|
||||
d="m 521.055,484.074 c -1.051,0 -1.953,0.895 -1.953,1.953 l 0,33.707 c 0,1.047 0.902,1.946 1.953,1.946 l 1.125,0 c 1.125,0 2.101,-0.821 2.328,-1.875 l 0.597,-2.774 c 3.309,3.301 7.059,5.625 11.489,5.625 5.402,0 9.086,-2.773 9.086,-9.16 l 0,-27.469 c 0,-1.058 -0.907,-1.953 -1.953,-1.953 l -2.555,0 c -1.051,0 -1.949,0.895 -1.949,1.953 l 0,25.446 c 0,4.281 -1.2,5.48 -4.578,5.48 -3.004,0 -6.383,-2.098 -9.086,-4.5 l 0,-26.426 c 0,-1.058 -0.903,-1.953 -1.95,-1.953 l -2.554,0"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path34" /><path
|
||||
d="m 573.313,517.559 c -4.36,0 -7.059,-2.258 -7.586,-11.27 l 14.941,0 c 0,8.645 -1.953,11.27 -7.355,11.27 z m 0.824,-34.465 c -9.836,0 -15.391,5.703 -15.391,19.824 0,14.258 5.859,19.738 14.715,19.738 8.934,0 14.039,-5.097 14.039,-18.691 l 0,-1.348 c 0,-0.672 -0.527,-1.203 -1.199,-1.203 l -20.649,0 c 0.153,-10.281 2.407,-12.84 8.633,-12.84 3.231,0 5.328,0.977 7.281,2.332 0.907,0.676 2.18,0.449 2.782,-0.379 l 1.199,-1.57 c 0.601,-0.832 0.449,-2.113 -0.449,-2.707 -3.082,-2.176 -6.231,-3.156 -10.961,-3.156"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path36" /><path
|
||||
d="m 602.527,484.074 c -1.047,0 -1.953,0.895 -1.953,1.953 l 0,33.707 c 0,1.047 0.906,1.946 1.953,1.946 l 1.125,0 c 1.129,0 2.106,-0.821 2.328,-1.946 l 0.676,-3.379 c 2.778,3.45 6.231,6.008 10.586,6.008 0.223,0 0.528,0 0.75,-0.078 0.305,-0.078 0.602,-0.371 0.528,-0.676 l -0.528,-5.254 c -0.07,-0.523 -0.597,-0.972 -1.199,-0.906 -0.375,0.078 -0.824,0.078 -1.203,0.078 -3.449,0 -5.781,-1.277 -8.559,-3.828 l 0,-25.672 c 0,-1.058 -0.898,-1.953 -1.949,-1.953 l -2.555,0"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path38" /><path
|
||||
d="m 406.41,394.07 c -1.051,0 -1.945,0.903 -1.945,1.953 l 0,47.825 c 0,1.047 0.894,1.953 1.945,1.953 l 21.852,0 c 1.051,0 1.949,-0.906 1.949,-1.953 l 0,-2.032 c 0,-1.043 -0.898,-1.953 -1.949,-1.953 l -16.895,0 0,-15.683 13.363,0 c 1.051,0 1.954,-0.91 1.954,-1.953 l 0,-2.032 c 0,-1.047 -0.903,-1.953 -1.954,-1.953 l -13.363,0 0,-22.219 c 0,-1.05 -0.898,-1.953 -1.949,-1.953 l -3.008,0"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path40" /><path
|
||||
d="m 450.371,398.203 c 3.676,0 6.453,2.481 8.258,4.5 l 0,9.992 -2.25,0 c -9.465,0 -11.266,-2.402 -11.266,-7.89 0,-4.95 1.575,-6.602 5.258,-6.602 z m -0.824,-5.105 c -7.207,0 -11.34,3.972 -11.34,11.707 0,8.562 5.031,12.539 17.344,12.539 l 3.078,0 0,2.929 c 0,4.2 -0.527,6.758 -5.406,6.758 -3.227,0 -6.383,-1.133 -9.235,-2.558 -0.976,-0.45 -2.175,-0.071 -2.625,0.91 l -0.754,1.426 c -0.449,0.972 -0.078,2.175 0.899,2.703 3.379,1.797 7.285,3.144 12.387,3.144 7.359,0 11.187,-3.301 11.187,-11.328 l 0,-25.305 c 0,-1.05 -0.898,-1.953 -1.953,-1.953 l -1.121,0 c -1.129,0 -2.18,0.754 -2.481,1.875 l -0.523,1.875 c -2.18,-2.398 -5.332,-4.722 -9.457,-4.722"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path42" /><path
|
||||
d="m 493.102,393.098 c -9.61,0 -14.942,6.304 -14.942,19.824 0,14.336 5.707,19.734 15.016,19.734 3.601,0 6.457,-0.82 9.16,-3 0.902,-0.672 0.977,-1.875 0.297,-2.703 l -1.203,-1.504 c -0.746,-0.82 -1.95,-0.898 -2.774,-0.222 -1.652,1.277 -3.23,1.953 -5.707,1.953 -5.703,0 -7.883,-2.473 -7.883,-14.258 0,-11.567 2.407,-14.348 8.411,-14.348 2.324,0 3.902,0.899 5.476,2.18 0.828,0.672 2.106,0.601 2.781,-0.227 l 1.352,-1.425 c 0.746,-0.75 0.676,-2.032 -0.152,-2.707 -2.473,-2.176 -5.555,-3.297 -9.832,-3.297"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path44" /><path
|
||||
d="m 517.891,394.07 c -1.051,0 -1.953,0.903 -1.953,1.953 l 0,50.45 c 0,1.047 0.902,1.953 1.953,1.953 l 2.554,0 c 1.047,0 1.95,-0.906 1.95,-1.953 l 0,-18.993 c 3.304,3.079 6.683,5.176 11.035,5.176 5.402,0 9.086,-2.773 9.086,-9.16 l 0,-27.473 c 0,-1.05 -0.907,-1.953 -1.953,-1.953 l -2.555,0 c -1.051,0 -1.949,0.903 -1.949,1.953 l 0,25.454 c 0,4.277 -1.2,5.476 -4.579,5.476 -3.003,0 -6.382,-2.098 -9.085,-4.504 l 0,-26.426 c 0,-1.05 -0.903,-1.953 -1.95,-1.953 l -2.554,0"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path46" /><path
|
||||
d="m 559.496,394.07 c -1.055,0 -1.953,0.903 -1.953,1.953 l 0,50.45 c 0,1.047 0.898,1.953 1.953,1.953 l 2.551,0 c 1.055,0 1.953,-0.906 1.953,-1.953 l 0,-18.993 c 3.305,3.079 6.684,5.176 11.035,5.176 5.403,0 9.086,-2.773 9.086,-9.16 l 0,-27.473 c 0,-1.05 -0.902,-1.953 -1.953,-1.953 l -2.555,0 c -1.05,0 -1.953,0.903 -1.953,1.953 l 0,25.454 c 0,4.277 -1.199,5.476 -4.574,5.476 -3.004,0 -6.383,-2.098 -9.086,-4.504 l 0,-26.426 c 0,-1.05 -0.898,-1.953 -1.953,-1.953 l -2.551,0"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path48" /><path
|
||||
d="m 612.621,398.203 c 5.707,0 8.41,3.074 8.41,14.641 0,11.629 -2.777,14.715 -8.48,14.715 -5.711,0 -8.41,-3.008 -8.41,-14.637 0,-11.567 2.777,-14.719 8.48,-14.719 z m 0,-5.105 c -9.16,0 -15.391,5.703 -15.391,19.824 0,14.109 6.086,19.734 15.243,19.734 9.16,0 15.465,-5.625 15.465,-19.734 0,-14.121 -6.157,-19.824 -15.317,-19.824"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path50" /><path
|
||||
d="m 654.23,393.098 c -9.613,0 -14.945,6.304 -14.945,19.824 0,14.336 5.711,19.734 15.016,19.734 3.605,0 6.457,-0.82 9.16,-3 0.898,-0.672 0.977,-1.875 0.305,-2.703 l -1.203,-1.504 c -0.75,-0.82 -1.954,-0.898 -2.778,-0.222 -1.656,1.277 -3.226,1.953 -5.707,1.953 -5.703,0 -7.883,-2.473 -7.883,-14.258 0,-11.567 2.403,-14.348 8.41,-14.348 2.325,0 3.903,0.899 5.477,2.18 0.824,0.672 2.106,0.601 2.777,-0.227 l 1.356,-1.425 c 0.75,-0.75 0.672,-2.032 -0.152,-2.707 -2.477,-2.176 -5.555,-3.297 -9.833,-3.297"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path52" /><path
|
||||
d="m 679.023,394.07 c -1.05,0 -1.953,0.903 -1.953,1.953 l 0,50.45 c 0,1.047 0.903,1.953 1.953,1.953 l 2.555,0 c 1.051,0 1.945,-0.906 1.945,-1.953 l 0,-18.993 c 3.309,3.079 6.688,5.176 11.04,5.176 5.402,0 9.085,-2.773 9.085,-9.16 l 0,-27.473 c 0,-1.05 -0.906,-1.953 -1.953,-1.953 l -2.554,0 c -1.051,0 -1.95,0.903 -1.95,1.953 l 0,25.454 c 0,4.277 -1.199,5.476 -4.578,5.476 -3.004,0 -6.383,-2.098 -9.09,-4.504 l 0,-26.426 c 0,-1.05 -0.894,-1.953 -1.945,-1.953 l -2.555,0"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path54" /><path
|
||||
d="m 727.582,393.098 c -4.129,0 -8.105,1.343 -10.883,2.925 -0.902,0.598 -1.203,1.797 -0.679,2.707 l 0.832,1.426 c 0.519,0.977 1.722,1.27 2.625,0.75 2.628,-1.504 5.328,-2.398 8.41,-2.398 5.101,0 6.679,2.019 6.679,5.547 0,4.207 -1.953,5.027 -7.961,6.687 -5.253,1.426 -9.609,4.199 -9.609,11.629 0,5.481 3.531,10.285 11.789,10.285 3.602,0 6.309,-0.593 8.711,-1.57 0.977,-0.449 1.426,-1.652 0.977,-2.629 l -0.68,-1.504 c -0.449,-0.976 -1.578,-1.504 -2.625,-1.055 -2.18,0.977 -3.902,1.282 -6.16,1.282 -4.051,0 -5.926,-1.426 -5.926,-4.653 0,-3.535 1.57,-4.429 6.754,-5.855 5.777,-1.574 11.039,-3.828 11.039,-12.317 0,-7.8 -4.434,-11.257 -13.293,-11.257"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path56" /><path
|
||||
d="m 766.797,393.098 c -9.609,0 -14.942,6.304 -14.942,19.824 0,14.336 5.708,19.734 15.016,19.734 3.602,0 6.453,-0.82 9.16,-3 0.899,-0.672 0.977,-1.875 0.301,-2.703 l -1.199,-1.504 c -0.754,-0.82 -1.953,-0.898 -2.778,-0.222 -1.656,1.277 -3.23,1.953 -5.71,1.953 -5.704,0 -7.879,-2.473 -7.879,-14.258 0,-11.567 2.402,-14.348 8.406,-14.348 2.324,0 3.902,0.899 5.48,2.18 0.825,0.672 2.106,0.601 2.778,-0.227 l 1.351,-1.425 c 0.754,-0.75 0.676,-2.032 -0.148,-2.707 -2.477,-2.176 -5.559,-3.297 -9.836,-3.297"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path58" /><path
|
||||
d="m 791.586,394.07 c -1.055,0 -1.953,0.903 -1.953,1.953 l 0,50.45 c 0,1.047 0.898,1.953 1.953,1.953 l 2.551,0 c 1.054,0 1.953,-0.906 1.953,-1.953 l 0,-18.993 c 3.305,3.079 6.683,5.176 11.035,5.176 5.402,0 9.086,-2.773 9.086,-9.16 l 0,-27.473 c 0,-1.05 -0.902,-1.953 -1.953,-1.953 l -2.555,0 c -1.051,0 -1.953,0.903 -1.953,1.953 l 0,25.454 c 0,4.277 -1.199,5.476 -4.574,5.476 -3.004,0 -6.383,-2.098 -9.086,-4.504 l 0,-26.426 c 0,-1.05 -0.899,-1.953 -1.953,-1.953 l -2.551,0"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path60" /><path
|
||||
d="m 840.68,393.098 c -5.41,0 -9.61,3.074 -9.61,9.605 l 0,27.031 c 0,1.047 0.899,1.946 1.95,1.946 l 2.55,0 c 1.051,0 1.953,-0.899 1.953,-1.946 l 0,-25 c 0,-4.429 1.5,-5.933 4.879,-5.933 3.004,0 6.231,2.027 9.008,4.512 l 0,26.421 c 0,1.047 0.903,1.946 1.953,1.946 l 2.555,0 c 1.051,0 1.949,-0.899 1.949,-1.946 l 0,-33.711 c 0,-1.05 -0.898,-1.953 -1.949,-1.953 l -1.129,0 c -1.129,0 -2.098,0.832 -2.328,1.875 l -0.602,2.785 c -3.148,-3.234 -6.754,-5.632 -11.179,-5.632"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path62" /><path
|
||||
d="m 880,393.32 c -4.805,0 -6.832,2.559 -6.832,9.16 l 0,43.993 c 0,1.047 0.898,1.953 1.953,1.953 l 2.551,0 c 1.055,0 1.953,-0.906 1.953,-1.953 l 0,-45.196 c 0,-1.875 0.824,-2.625 2.625,-2.625 0.305,0 0.602,0 0.824,0.078 0.379,0 0.754,-0.222 0.828,-0.605 l 0.375,-2.18 c 0.227,-1.043 -0.449,-2.097 -1.5,-2.324 -0.902,-0.144 -1.879,-0.301 -2.777,-0.301"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path64" /><path
|
||||
d="m 908.043,427.559 c -4.355,0 -7.059,-2.254 -7.582,-11.27 l 14.937,0 c 0,8.645 -1.953,11.27 -7.355,11.27 z m 0.824,-34.461 c -9.836,0 -15.39,5.703 -15.39,19.824 0,14.258 5.855,19.734 14.714,19.734 8.934,0 14.039,-5.097 14.039,-18.691 l 0,-1.348 c 0,-0.676 -0.527,-1.203 -1.199,-1.203 l -20.644,0 c 0.144,-10.281 2.402,-12.84 8.633,-12.84 3.226,0 5.332,0.977 7.281,2.332 0.902,0.676 2.176,0.449 2.777,-0.379 l 1.199,-1.574 c 0.602,-0.828 0.45,-2.105 -0.449,-2.703 -3.074,-2.18 -6.23,-3.152 -10.961,-3.152"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path66" /></g></g></g></g></svg>
|
After Width: | Height: | Size: 15 KiB |
84
docs-de/images/logo-en.svg
Normal file
@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
width="130.34865"
|
||||
height="67.32325"
|
||||
xml:space="preserve"
|
||||
sodipodi:docname="logo-en.svg"><metadata
|
||||
id="metadata8"><rdf:RDF><cc:Work
|
||||
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
|
||||
id="defs6"><clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath18"><path
|
||||
d="m 0,0 922.23,0 0,538.586 L 0,538.586 0,0 z"
|
||||
id="path20"
|
||||
inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="889"
|
||||
inkscape:window-height="781"
|
||||
id="namedview4"
|
||||
showgrid="false"
|
||||
inkscape:zoom="6.9925926"
|
||||
inkscape:cx="64.932998"
|
||||
inkscape:cy="68.072034"
|
||||
inkscape:window-x="271"
|
||||
inkscape:window-y="47"
|
||||
inkscape:window-maximized="0"
|
||||
inkscape:current-layer="g10"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" /><g
|
||||
id="g10"
|
||||
inkscape:groupmode="layer"
|
||||
inkscape:label="logo"
|
||||
transform="matrix(1.25,0,0,-1.25,0,67.32325)"><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path22"
|
||||
style="fill:#467d97;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 18.5602,53.8586 c 7.755,0 14.0449,-6.2867 14.0449,-14.0449 0,-5.2102 -2.4153,-9.7317 -6.3223,-12.1828 -0.0765,-0.0485 -0.132,-0.1211 -0.132,-0.2161 0,-0.1714 0.1359,-0.2152 0.1453,-0.2191 5.0684,-1.9617 8.2488,-7.1375 8.2488,-13.1484 C 34.5449,6.2875 28.2535,0 20.4977,0 L 1.94961,0.00390625 C 0.873047,0.00390625 0,0.877344 0,1.95156 L 0,51.9094 c 0,1.0769 0.873047,1.9492 1.94961,1.9492 l 16.61059,0" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path24"
|
||||
style="fill:#fcd205;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 11.7695,9.53672 c -0.2476,0 -0.4593,0.21172 -0.4593,0.45937 l 0,11.26291 c 0,0.2469 0.2117,0.4594 0.4593,0.4594 l 0.7071,0 c 0.2468,0 0.4613,-0.2125 0.4613,-0.4594 l 0,-4.9895 4.3844,0 0,4.9895 c 0,0.2469 0.2121,0.4594 0.4593,0.4594 l 0.7071,0 c 0.2472,0 0.4593,-0.2125 0.4593,-0.4594 l 0,-11.26291 c 0,-0.24765 -0.2121,-0.45937 -0.4593,-0.45937 l -0.7071,0 c -0.2472,0 -0.4593,0.21172 -0.4593,0.45937 l 0,4.84181 -4.3844,0 0,-4.84181 c 0,-0.24765 -0.2145,-0.45937 -0.4613,-0.45937 l -0.7071,0" /><path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path26"
|
||||
style="fill:#fcd205;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
d="m 11.7227,32.1836 c -0.2477,0 -0.4594,0.2117 -0.4594,0.4594 l 0,11.2644 c 0,0.2473 0.2117,0.4614 0.4594,0.4614 l 6.7757,0 c 0.2473,0 0.4594,-0.2141 0.4594,-0.4614 l 0,-0.4773 c 0,-0.2477 -0.2121,-0.4594 -0.4594,-0.4594 l -5.6078,0 0,-3.9148 4.7754,0 c 0.2488,0 0.4613,-0.2121 0.4613,-0.4598 l 0,-0.4789 c 0,-0.2477 -0.2125,-0.4594 -0.4613,-0.4594 l -4.7754,0 0,-5.0148 c 0,-0.2477 -0.2121,-0.4594 -0.4593,-0.4594 l -0.7086,0" /><text
|
||||
xml:space="preserve"
|
||||
style="font-size:11.55966663px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#467d97;fill-opacity:1;stroke:none;font-family:Constantia;-inkscape-font-specification:Constantia"
|
||||
x="40.459648"
|
||||
y="-47.22646"
|
||||
id="text3153"
|
||||
sodipodi:linespacing="125%"
|
||||
transform="scale(0.97670303,-1.0238527)"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3155"
|
||||
x="40.459648"
|
||||
y="-47.22646"
|
||||
style="font-size:7.06424141px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#467d97;fill-opacity:1;font-family:News Gothic MT;-inkscape-font-specification:News Gothic MT">Bern University</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
x="40.459648"
|
||||
y="-38.396156"
|
||||
id="tspan3157"
|
||||
style="font-size:7.06424141px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;fill:#467d97;fill-opacity:1;font-family:News Gothic MT;-inkscape-font-specification:News Gothic MT">of Applied Sciences</tspan></text>
|
||||
</g></svg>
|
After Width: | Height: | Size: 4.7 KiB |
BIN
docs-de/images/logo.pdf
Normal file
BIN
docs-de/images/logo.png
Normal file
After Width: | Height: | Size: 3.9 KiB |
BIN
docs-de/images/ports_and_adapters.pdf
Normal file
172
docs-de/images/ports_and_adapters.svg
Normal file
@ -0,0 +1,172 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="679.7655"
|
||||
height="591.2851"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.5 r10040"
|
||||
sodipodi:docname="ports_and_adapters.svg">
|
||||
<defs
|
||||
id="defs4" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.7"
|
||||
inkscape:cx="149.17872"
|
||||
inkscape:cy="85.139761"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1632"
|
||||
inkscape:window-height="1005"
|
||||
inkscape:window-x="48"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Ebene 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-18.678419,-26.216821)">
|
||||
<path
|
||||
inkscape:transform-center-y="-23.12416"
|
||||
inkscape:transform-center-x="10.947617"
|
||||
d="m 465.92439,509.82496 c -1.78891,1.03067 -204.67101,0.84709 -206.45806,-0.18682 -1.78704,-1.03391 -103.06911,-176.82675 -103.06724,-178.89133 0.002,-2.06458 101.6019,-177.67385 103.39081,-178.70452 1.78892,-1.03067 204.67102,-0.84709 206.45806,0.18682 1.78705,1.0339 103.06912,176.82675 103.06725,178.89133 -0.002,2.06458 -101.6019,177.67384 -103.39082,178.70452 z"
|
||||
inkscape:randomized="9.7491459e-16"
|
||||
inkscape:rounded="0.01"
|
||||
inkscape:flatsided="true"
|
||||
sodipodi:arg2="1.5717012"
|
||||
sodipodi:arg1="1.0481024"
|
||||
sodipodi:r2="214.49513"
|
||||
sodipodi:r1="206.45815"
|
||||
sodipodi:cy="330.93362"
|
||||
sodipodi:cx="362.85715"
|
||||
sodipodi:sides="6"
|
||||
id="path2997"
|
||||
style="fill:#5fbcd3;fill-opacity:1;stroke:none;stroke-width:0.10000000000000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
sodipodi:type="star"
|
||||
transform="matrix(1.645857,0,0,1.645857,-238.64982,-222.81004)" />
|
||||
<path
|
||||
sodipodi:type="star"
|
||||
style="fill:#ffd42a;fill-opacity:1;stroke:none;stroke-width:0.10000000000000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
||||
id="path2985"
|
||||
sodipodi:sides="6"
|
||||
sodipodi:cx="362.85715"
|
||||
sodipodi:cy="330.93362"
|
||||
sodipodi:r1="206.45815"
|
||||
sodipodi:r2="214.49513"
|
||||
sodipodi:arg1="1.0481024"
|
||||
sodipodi:arg2="1.5717012"
|
||||
inkscape:flatsided="true"
|
||||
inkscape:rounded="0.01"
|
||||
inkscape:randomized="9.7491459e-16"
|
||||
d="m 465.92439,509.82496 c -1.78891,1.03067 -204.67101,0.84709 -206.45806,-0.18682 -1.78704,-1.03391 -103.06911,-176.82675 -103.06724,-178.89133 0.002,-2.06458 101.6019,-177.67385 103.39081,-178.70452 1.78892,-1.03067 204.67102,-0.84709 206.45806,0.18682 1.78705,1.0339 103.06912,176.82675 103.06725,178.89133 -0.002,2.06458 -101.6019,177.67384 -103.39082,178.70452 z"
|
||||
inkscape:transform-center-x="6.6516253"
|
||||
inkscape:transform-center-y="-14.049918"
|
||||
transform="translate(-4.2959915,-9.0742422)" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Constantia;-inkscape-font-specification:Constantia"
|
||||
x="358.36584"
|
||||
y="218.6479"
|
||||
id="text2987"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
x="358.36584"
|
||||
y="218.6479"
|
||||
id="tspan2995"
|
||||
style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans">Application</tspan></text>
|
||||
<text
|
||||
sodipodi:linespacing="125%"
|
||||
id="text2999"
|
||||
y="94.647903"
|
||||
x="359.22522"
|
||||
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Constantia;-inkscape-font-specification:Constantia"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:32px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
|
||||
id="tspan3003"
|
||||
y="94.647903"
|
||||
x="359.22522"
|
||||
sodipodi:role="line">Adapters</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Constantia;-inkscape-font-specification:Constantia"
|
||||
x="-100.75645"
|
||||
y="246.52264"
|
||||
id="text3042"
|
||||
sodipodi:linespacing="125%"
|
||||
transform="matrix(0.47970506,-0.8774298,0.8774298,0.47970506,0,0)"><tspan
|
||||
sodipodi:role="line"
|
||||
x="-100.75645"
|
||||
y="246.52264"
|
||||
id="tspan3044"
|
||||
style="font-size:32px;font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Oblique">Storage</tspan></text>
|
||||
<text
|
||||
transform="matrix(0.53345366,0.84582929,-0.84582929,0.53345366,0,0)"
|
||||
sodipodi:linespacing="125%"
|
||||
id="text3046"
|
||||
y="-357.84464"
|
||||
x="471.47845"
|
||||
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Constantia;-inkscape-font-specification:Constantia"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:32px;font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Oblique"
|
||||
y="-357.84464"
|
||||
x="471.47845"
|
||||
sodipodi:role="line"
|
||||
id="tspan3050">Proof of Work</tspan></text>
|
||||
<text
|
||||
transform="matrix(-0.51536966,-0.85696798,0.85696798,-0.51536966,0,0)"
|
||||
sodipodi:linespacing="125%"
|
||||
id="text3054"
|
||||
y="-85.847336"
|
||||
x="-455.38437"
|
||||
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Constantia;-inkscape-font-specification:Constantia"
|
||||
xml:space="preserve"><tspan
|
||||
style="font-size:32px;font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Oblique"
|
||||
id="tspan3056"
|
||||
y="-85.847336"
|
||||
x="-455.38437"
|
||||
sodipodi:role="line">User Interface</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Constantia;-inkscape-font-specification:Constantia"
|
||||
x="92.095795"
|
||||
y="-700.29236"
|
||||
id="text3058"
|
||||
sodipodi:linespacing="125%"
|
||||
transform="matrix(-0.51365875,0.85799458,-0.85799458,-0.51365875,0,0)"><tspan
|
||||
id="tspan3060"
|
||||
sodipodi:role="line"
|
||||
x="92.095795"
|
||||
y="-700.29236"
|
||||
style="font-size:32px;font-style:oblique;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans Oblique">Network</tspan></text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.7 KiB |
BIN
docs-de/images/prefix-filter-binary-tree.pdf
Normal file
1252
docs-de/images/prefix-filter-binary-tree.svg
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
docs-de/logo.png
Normal file
After Width: | Height: | Size: 18 KiB |
BIN
docs-de/project2.pdf
Normal file
78
docs-de/project2.tex
Normal file
@ -0,0 +1,78 @@
|
||||
\documentclass{bfh}
|
||||
|
||||
\title{Project 2}
|
||||
\subtitle{Bitmessage -- Communication Without Metadata}
|
||||
\author{Christian Basler}
|
||||
\tutor{Kai Brünnler}
|
||||
\date{\today}
|
||||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
|
||||
\tableofcontents
|
||||
|
||||
\section{Synopsis}
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
% Section basics
|
||||
\input{basics}
|
||||
|
||||
The protocol is described in detail in my Seminar paper.
|
||||
|
||||
|
||||
\section{Goal}
|
||||
|
||||
At the moment, there aren't many implementations apart from the official clients. Especially two things are missing: a multi purpose Java library and a usable mobile client. My goal for my \textit{Project 2} is to create the library, to be used next semester as a starting point for an Android\textsuperscript{\texttrademark} client in my Bachelor Thesis.
|
||||
|
||||
|
||||
\section{Issues}
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
\subsection{Unsigned Numbers}
|
||||
|
||||
Java doesn't support unsigned number types. While Java 8 has some helper classes to address this issue, my goal is to support Java 7, which is needed for Android development, so I wasn't able to leverage them.
|
||||
|
||||
\subsection{Proof of Work}
|
||||
|
||||
Proof of work is needed for a message to be distributed within the Bitmessage network. This is to protect both the network itself from denial of service attacks and the users from spam.
|
||||
|
||||
|
||||
\section{Architecture}
|
||||
|
||||
\subsection{Ports and Adapters}
|
||||
|
||||
The library uses a ports and adapters architecture, which allows us to easily replace some implementations that might be platform dependent, such as storage or proof of work calculation.
|
||||
|
||||
\includegraphics[width=\textwidth]{images/ports_and_adapters.pdf}
|
||||
|
||||
The big advantage of this approach is that it's easy to test the core as well as each adapter by itself.
|
||||
|
||||
|
||||
\subsection{Network Management}
|
||||
|
||||
|
||||
\section{Usage}
|
||||
|
||||
TODO
|
||||
|
||||
|
||||
\section{Discussion}
|
||||
|
||||
|
||||
\appendix
|
||||
\addcontentsline{toc}{section}{Appendix}
|
||||
\section*{Appendix}
|
||||
\renewcommand{\thesubsection}{\Alph{subsection}}
|
||||
|
||||
|
||||
\subsection{JavaDoc Documentation}
|
||||
|
||||
|
||||
\subsection{Literature}
|
||||
|
||||
|
||||
\end{document}
|
11
docs-de/seminar-blx.bib
Normal file
@ -0,0 +1,11 @@
|
||||
@Comment{$ biblatex control file $}
|
||||
@Comment{$ biblatex version 1.7 $}
|
||||
Do not modify this file!
|
||||
|
||||
This is an auxiliary file used by the 'biblatex' package.
|
||||
This file may safely be deleted. It will be recreated as
|
||||
required.
|
||||
|
||||
@Control{biblatex-control,
|
||||
options = {1.7:0:0:1:0:0:1:1:0:0:0:0:1:1:3:1:79:+},
|
||||
}
|
BIN
docs-de/seminar.pdf
Normal file
229
docs-de/seminar.tex
Normal file
@ -0,0 +1,229 @@
|
||||
\documentclass{bfh}
|
||||
|
||||
\usepackage[numbers]{natbib}
|
||||
\usepackage{xfrac}
|
||||
|
||||
\title{Informatikseminar}
|
||||
\subtitle{Bitmessage -- Kommunikation ohne Metadaten}
|
||||
\author{Christian Basler}
|
||||
\tutor{Kai Brünnler}
|
||||
\date{\today}
|
||||
|
||||
\newcommand{\msg}[1]{\textit{\textcolor{RedOrange}{#1}}}
|
||||
\newcommand{\obj}[1]{\textbf{\textcolor{OliveGreen}{#1}}}
|
||||
\newcommand{\node}[1]{\textbf{\textcolor{MidnightBlue}{#1}}}
|
||||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
|
||||
\tableofcontents
|
||||
|
||||
\listoffigures
|
||||
|
||||
\newpage
|
||||
\section*{Abstract}
|
||||
|
||||
Sogar mit Verschlüsselung offenbaren wir viel über uns in den Metadaten welche wir unwissentlich produzieren. Bitmessage verhindert dies indem es eine Nachricht so verteilt, dass der eigentliche Empfänger daraus nicht erraten werden kann.
|
||||
|
||||
\newpage
|
||||
% Section basics
|
||||
\input{basics}
|
||||
|
||||
|
||||
\newpage
|
||||
\section{Protokoll}
|
||||
|
||||
Wir benutzen die folgende Konvention um zwischen verschiedenen Bestandteilen der Protokolls zu unterscheiden:
|
||||
|
||||
\begin{tabular}{@{}>{$}l<{$}l@{}}
|
||||
\msg{version} & für Meldungen zwischen Netzwerkknoten \\
|
||||
\obj{pubkey} & für Objekte welche im Netzwerk verteilt werden \\
|
||||
\node{A} & für einzelne Netzwerkknoten \\
|
||||
\end{tabular}
|
||||
|
||||
|
||||
\subsection{Nomenklatur}
|
||||
|
||||
Es gibt einige Begriffe welche schnell verwechselt werden können. Es folgt eine Liste der verwirrendsten.
|
||||
|
||||
\subsubsection{message, msg}
|
||||
Eine Nachricht oder \msg{message} wird von einem Netzwerkknoten zum anderen geschickt, z.B. um neue Objekte anzukündigen oder um die Verbindung aufzubauen.
|
||||
|
||||
Ein \obj{msg}-Objekt andererseits enthält die verschlüsselte Nachricht von einem Benutzer an einen anderen.
|
||||
|
||||
\subsubsection{payload}
|
||||
Payload werden die Nutzdaten eines Protokolls genannt. Es gibt drei Arten von Payload:
|
||||
\begin{enumerate}
|
||||
\item Der Payload von Meldungen, z.B. \textit{Inventory Vectors}.
|
||||
\item Der Payload von Objekten. Dieser wird im Netzwerk verteilt.\footnote{Und ist Teil vom Meldungs-Payload.}
|
||||
\item Verschlüsselter Payload, der Chiffretext mit einigen Zusatzinformationen welche für die Entschlüsselung benötigt werden.\footnote{Dieser wiederum ist Teil vom Objekt-Payload.}
|
||||
\end{enumerate}
|
||||
|
||||
\subsubsection{object}
|
||||
Ein Objekt ist einer Art von Meldung, deren Payload zwischen allen Netzwerkknoten verteilt wird. Manchmal wird auch nur der Payload gemeint. Um ein Objekt zu senden, wird ein \textit{Proof of Work} benötigt.
|
||||
|
||||
\subsection{Ablauf}
|
||||
|
||||
Der neu gestartete Netzwerkknoten \node{A} stellt die Verbindung zu einem zufälligen Knoten \node{B} ais seinem Knotenverzeichnis her und sendet eine \msg{version}-Meldung, die die aktuellste unterstützte Protokollversion ankündigt. Falls \node{B} die Version akzeptiert,\footnote{Eine Version wird normalerweise akzeptiert, wenn sie höher oder gleich der eigenen höchsten unterstützten Version ist. Knoten welche eine experimentelle Protokollversion implementieren können auch ältere Versionen akzeptieren.} antwerted er mit einer \msg{verack}-Meldung, gefolgt von der eigenen \msg{version} mit ihrer neusten unterstützten Protokollversion. Knoten \node{A} entscheidet nun ob er die Version von \node{B} akzeptiert und sendet in diesem Fall seine \msg{verack}-Meldung.
|
||||
|
||||
Wenn beide Knoten die Verbindung akzeptieren, senden sie je eine \msg{addr}-Meldung mit bis zu 1000 bekannten Knoten, gefolgt von einer oder mehreren \msg{inv}-Meldungen, welche alle bekannten gültigen Objekte mitteilt. Danach wird eine \msg{getobject}-Meldung für jedes noch fehlende Objekt gesendet.
|
||||
|
||||
Auf \msg{getobject} antwortet der Knoten mit einer \msg{object}-Meldung, welche dann das angeforderte Objekt enthält.
|
||||
|
||||
Ein Knoten verbindet sich aktiv mit acht anderen knoten und erlaubt beliebig viele eingehende Verbindungen. Wenn ein Benutzer an Knoten \node{A} ein neues Objekt erzeugt, wird es mittels \msg{inv}-Meldung bei acht der angebundenen Knoten angeboten. Diese fordern es an und bieten es wiederum bei acht Nachbarknoten an, bis es an alle Knoten verteilt ist.
|
||||
|
||||
\subsection{Meldungen}
|
||||
|
||||
Die Meldungen, Objekte und das Binärformat sind im Bitmessage-Wiki gut dokumentiert\cite{wiki:protocol}, die Beschreibungen hier sind deshalb darauf konzentriert um was es geht und wie man sie benutzt.
|
||||
|
||||
\subsubsection{version / verack}
|
||||
Die \msg{version}-Meldung enthält die aktuellste vom Knoten unterstützte Protokollversion, die Streams für die er sich interessiert und die unterstützten Features. Falls der andere Knoten akzeptiert, bestätigt er mitels \msg{verack}. Die Verbindung gilt als initialisiert wenn beide Knoten eine \msg{verack}-Meldung gesendet haben.
|
||||
|
||||
\subsubsection{addr}
|
||||
Enthält bis zu 1000 bekannte Knoten mit deren IP-Adresse, Port, Stream und unterstützten Features.
|
||||
|
||||
\subsubsection{inv}
|
||||
Eine \msg{inv}-Meldung enthält die Hashes von bis zu 50000 gültigen Objekten. Falls das Inventar mehr Objekte enthält können mehrere Meldungen gesendet werden.
|
||||
|
||||
\subsubsection{getdata}
|
||||
Kann bis zu 50000 Objekte anfordern, indem es deren Hashes sendet.
|
||||
|
||||
\subsubsection{object}
|
||||
Enthält ein angefordertes Objekt, das eines von folgenden sein kann:
|
||||
|
||||
\listinginfo{}{getpubkey}{Eine Aufforderung an eine Adresse, deren öffentlichen Schlüssel zu senden. Dieser wird benötigt um die Meldung an diese Adressen zu verschlüsseln.}{}
|
||||
\listinginfo{}{pubkey}{Ein öffentlicher Schlüssel. Siehe \ref{subsec:addr} \nameref{subsec:addr}}{}
|
||||
\listinginfo{}{msg}{Eine Nachricht an einen bestimmten Benutzer.}{}
|
||||
\listinginfo{}{broadcast}{Eine Nachricht welche so verschlüsselt wird, dass jeder, der die Adresse kennt, sie entschlüsseln kann.}{}
|
||||
|
||||
\subsubsection{ping / pong / getbiginv}
|
||||
Wer den Source Code von PyBitmessage untersucht, ist vielleicht über einige Meldungen irritiert welche implementiert zu sein scheinen, aber nirgends in der offiziellen Spezifikation zu finden sind. \msg{Ping} bringt einen Knoten (sofern implementiert) dazu ein \msg{pong} zurückzusenden. Verwendet wird das Feature jedoch nirgends. \msg{Getbiginv} scheint dafür gedacht zu sein das ganze Inventar abzufragen, aber soweit ich es verstehe wird es nirgends verwendet.\cite{issue:112}
|
||||
|
||||
\subsection{Adressen}
|
||||
\label{subsec:addr}
|
||||
|
||||
\textit{BM-2cXxfcSetKnbHJX2Y85rSkaVpsdNUZ5q9h}: Adressen beginnen mit "BM-" und sind, genau wie Bitcoin-Adressen, Base58 codiert.\footnote{Dieses verwendet die Zeichen 1-9, A-Z und a-z ohne die leicht verwechselbaren Zeichen I, l, 0 and O.}
|
||||
|
||||
\listinginfo{}{version}{Adressversion.}{}
|
||||
\listinginfo{}{stream}{Stream-Nummer.}{}
|
||||
\listinginfo{}{ripe}{Hash der aneinandergefügten öffentlichen Schlüssel zum signieren und verschlüsseln. Wichtig: in \obj{pubkey}-Objekten werden die Schlüssel ohne führendes 0x04 gesendet, doch um den Ripe zu berechnen muss dieses Byte vorangestellt werden. Da dies für fast alle Verwendungszwecke der Schlüssel nötig ist, lohnt es sich dies gleich beim erstellen des Objekts zu machen.}{ripemd160(sha512(pubSigKey + pubEncKey))}
|
||||
\listinginfo{}{checksum}{Die ersten vier Bytes eines doppelten SHA-512-Hashs der vorangehenden Daten.}{sha512(sha512(version + stream + ripe))}
|
||||
|
||||
\subsection{Verschlüsselung}
|
||||
|
||||
Bitmessage benutzt Elliptische-Kurven-Kryptographie zum signieren als auch zum verschlüsseln. Während die Matematik hinter elliptischen Korven sogar noch komplizierter zu verstehen ist all der ältere Ansatz, riesige Primzalen zu multiplizieren, so basiert es doch auf dem gleichen Prinzip, eine Mathematische Operation durchzuführen welche in eine Richtung sehr schnell, jedoch sehr schwierig umzukehren ist. An Stelle von zwei grossen Primzahlen werden hier ein Punkt auf der elliptischen Kurve mit einer sehr grossen Zahl multipliziert.\footnote{Bitte fragen Sie mich nicht wie das genau geht. Falls Sie es wirklich wissen möchten, beginnen Sie auf \url{http://de.wikipedia.org/wiki/Elliptische_Kurve} und \url{http://de.wikipedia.org/wiki/Elliptic_Curve_Cryptography}. Falls Sie etwas machen möchten das funktioniert, verwenden Sie lieber eine Bibliothek wie Bouncy Casle welche die harte Arbeit übernimmt.}
|
||||
|
||||
Die Benutzerin, nennen wir sie Alice, benötigt ein Schlüsselpaar, welches aus dem privaten Schlüssel
|
||||
$$k$$
|
||||
besteht, der eine riesige Zufallszahl darstellt, und einem öffentlichen Schlüssel
|
||||
$$K = G k$$
|
||||
der einen Punkt auf der vorher definierten Kurve repräsentiert.\footnote{Bitmessage benutzt eine Kurve namens \textit{secp256k1}.} Beachten Sie bitte dass dies keine einfache Multiplikation ist, sondern die skalare Multiplikation eines Punktes auf der elliptischen Kurve. $G$ ist der Startpunkt für alle Operationen auf einer spezifischen Kurve.
|
||||
|
||||
Ein anderer Benutzer, Bob, kennt den öffentlichen Schlüssel. Um eine Nachricht zu verschlüsselt erstellt er das temporäre Schlüsselpaar
|
||||
$$r$$
|
||||
und
|
||||
$$R = G r$$
|
||||
Danach berechnet er
|
||||
$$K r$$
|
||||
benutzt den daraus folgenden Punkt um die Meldung zu verschlüsseln\footnote{Genaugenommen wird ein doppelter SHA-512-Hash über der X-Koordinate benutzt um den symmetrischen Schlüssel zu erzeugen.} und sendet $K$ zusammen mit der verschlüsselten Nachricht.
|
||||
|
||||
Wenn Alice die Meldung empfängt, benutzt Sie die Tatsache dass
|
||||
$$K r = G k r = G r k = R k$$
|
||||
alse berechnet sie einfach $R k$ um die Meldung zu entschlüsseln.
|
||||
|
||||
Die genaue von Bitmessage verwendete Methode wird Elliptic Curve Integrated Encryption Scheme oder ECIES genannt, welche auf Wikipedia detailliert beschrieben wird (\url{http://de.wikipedia.org/wiki/Elliptic_Curve_Integrated_Encryption_Scheme}).
|
||||
|
||||
\subsubsection{Signatur}
|
||||
|
||||
Um Objekte zu signieren verwendet Bitmessage Elliptic Curve Digital Signature Algorithm oder ECDSA. Dies ist etwas komplizierter als ECIES. Wenn Sie Details wissen möchten ist Wikipedia einmal mehr eine gute Anlaufstelle: \url{http://de.wikipedia.org/wiki/Elliptic_Curve_DSA}.
|
||||
|
||||
Ein interessantes Detail für potentielle Entwickler von Bitmessage-Clients --- vor allem wenn sie es mit einem objektorientierten Ansatz machen möchten: die Signatur geht über alles aus dem Objekt-Header ohne das Nonce und alles aus dem Objekt-Payload ohne die Signatur selbst. Natürlich sind nicht alle Objekte signiert.\footnote{Mein Ansatz: zuerst denken, dann falsch implementieren, dann viel umschreiben.}
|
||||
|
||||
\newpage
|
||||
\section{Probleme}
|
||||
|
||||
\subsection{Skalierbarkeit}
|
||||
|
||||
Bitmessage skaliert nicht.\footnote{Noch nicht.} Gitb es sehr wenige Benutzer, so gibt es auch keine Anonymität. Mit nur einer handvoll Benutzern ist es einfach (beispielsweise für die NSA), den Verkehr zwischen Knoten zu analysieren um herauszufinden wer wem schreiben könnte. Oder man überwacht einfach mal alle.
|
||||
|
||||
Mit vielen Benutzern wächst der benötigte Traffic und Speicherplatz quadratisch. Dies geschieht, weil mit mehr Benutzern um eine Nachricht zu schreiben es auch mehr mögliche Gesprächspartner für bestehende Benutzer gibt.
|
||||
|
||||
\subsubsection{Proof of Work}
|
||||
Proof of work hat zwei zwecke. Es hilft, das Netzwerk zu schützen indem es verhindert dass einzelne Knoten es mit Objekten fluten, aber auch den einzelnen Benutzer vor Spam zu bewahren. Es gibt einen minimal nötigen Proof of Work um Objekte im Netzwerk zu verteilen, doch der Benutzer kann für seine Adressen höhere Anforderungen stellen, falls er mit Angeboten für billiges Viagra\texttrademark{} zugeschüttet wird. Der für eine Adresse nötige Proof of Work wird im \obj{pubkey}-Objekt mitgeteilt. Absender, welche in der Kontaktliste eines Benutzers sind sollten normalerweise kein höherer Proof of Work machen müssen.
|
||||
|
||||
Die Schwierigkeit wird mittels Nachrichtenlänge und Lebensdauer berechnet, das heisst eine grössere Meldung oder eine welche länger im Netzwerk gespeichert wird ist kostet mehr beim senden.
|
||||
$$ d = \frac{2^{64}}{n (l + \frac{t l}{2^{16}})} $$
|
||||
\begin{tabular}{@{}>{$}l<{$}l@{}}
|
||||
d & zielschwierigkeit \\
|
||||
n & nötige Versuche pro Byte \\
|
||||
l & Payload-Länge + Extra-Bytes (um es nicht zu einfach zu machen viele winzige Meldungen zu versenden) \\
|
||||
t & Lebensdauer \\
|
||||
\end{tabular}
|
||||
|
||||
Um den Proof of Work durchzuführen, muss ein Nonce\footnote{Number used once.} gefunden werden, so dass die ersten acht Bytes vom Hash des Objekts (inklusive Nonce) eine kleinere Zahl repräsentieren als die Zielschwierigkeit.
|
||||
|
||||
\subsubsection{Beschränkung der Meldungsgrösse}
|
||||
Um zu verhindern dass bösarige Benutzer einzelne Knoten blockieren, dürfen Meldungen nicht grösser als 256 KiB sein. Wegen des Proof of Work sind grössere Nachrichten für den Normalgebrauch sowieso nicht praktikabel, aber sie könnten benutzt werden um Knoten mit Müll-Meldungen zu beschäftigen.
|
||||
|
||||
\subsubsection{Streams}
|
||||
Die vorgesehene Lösung für das Skalierungsproblem ist, den Traffic -- genau genommen Adressen -- in Streams aufzuteilen. Ein Knoten liest nur auf den Streams, welche seine Adressen betreffen. Wenn er ein Objekt an einen anderen Stream schicken möchten, verbindet er sich einfach mit einem Knoten im gewünschten Stream, sendet sein Objekt und schliesst die Verbindung wieder. Wenn alle aktiven Streams voll sind, wird für neue Adressen ein neuer Stream verwendet.
|
||||
|
||||
Das ungelöste Problem ist, herauszufinden wann ein Stream voll ist. Ein weiteres Problem ist die Tatsache dass, währen das Netzwerk wächst, der Traffic auf den vollen Streams mitwächst, da es mehr Benutzer gibt welche jemandem auf dem vollen Stream schreiben möchten. Der Traffic auf dem vollen Stream wächst also linear mit der Netzwerkgrösse.
|
||||
|
||||
\subsubsection{Präfix-Filterung}
|
||||
Jonathan Coe schlägt diesen interessanten Ansatz vor, den Traffic aufzuteilen. Dies würde ein Protokoll-Update erfordern, würde aber eine viel genauere Kontrolle darüber erlauben, wie viel Traffic ein Knoten verarbeiten will.\cite{wiki:prefixfilter}
|
||||
|
||||
Anstelle von Streams stellen wir uns eine Adresse als Blatt eines Binärbaums der Höhe 65 vor. Die Position wird über die ersten 64 Bits des Ripe einer Adresse. Eine Präfix-Lenge $n$ definiert den Teilbaum ab welchem wir Meldungen lesen. Ein sendender Client setzt ein 64-Bit-Nonce bei welchem die ersten $n$ Bits vom Ripe der Empfängeradresse kopiert und der Rest zufällig gesetzt wird.
|
||||
|
||||
\begin{figure}[htp]
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{images/prefix-filter-binary-tree.pdf}
|
||||
\caption[Präfix-Filter: Binärbaum]{Die Pefix-Länge geht bis 64, jedes der gelben Dreiecke stellt folglich einen Teilbaum der Höhe 61 dar.}
|
||||
\label{fig:bintree}
|
||||
\end{figure}
|
||||
|
||||
Nehmen wir nun an, der Ripe von Bobs Adresse starte mit \texttt{00101001\ldots} und hat eine Präfix-Länge von 3. Alice sendet ihre Meldung mit dem Tag \texttt{00110100\ldots}. Die ersten drei Bits müssen gleich sein, aber der Rest ist zufällig gewählt. Bobs Client verarbeitet nun alle Meldungen welche seinem Präfix entsprechen, er muss also nur \sfrac{1}{8} des Gesamttraffics lesen.\footnote{Im Moment ist der Traffic insgesamt etwa 1 GiB im Monat.}
|
||||
|
||||
Wie Bitmessage populärer wird, wird es auch mehr und mehr Traffic generieren. Bob möchte deshalb möglicherweise seine Präfix-Länge auf 4 erhöhen, was den zu verarbeitenden Traffic weiter auf \sfrac{1}{16} des Gesamtvolumens reduziert. Um dies zu tun, publiziert er einfach seinen \obj{pubkey} mit seiner aktualisierten Präfix-Länge. Das heisst natürlich auch dass entweder immer ein \obj{pubkey} publiziert sein muss, oder Alice muss wenigstens einmal online sein während der \obj{pubkey} publiziert ist. Andernfalls gibt es in unserem Szenario eine 50\% Chance dass die Nachricht Bob nicht erreicht.
|
||||
|
||||
Dies würde es zwar einem Smartphone-Client erlauben nur seine eigenen Meldungen zu verarbeiten,\footnote{Ein Präfix von 64 würde höchstwahrscheinlich bedeuten dass man auf dem Stream aleine ist.} aber damit würde man auch seine Anonymität beinahe komplett aufgeben.
|
||||
|
||||
\subsection{Forward Secrecy}
|
||||
|
||||
Offensichtlich ist es für einen Angreifer trivial alle (verschlüsselten) Objekte zu sammeln welche durch das Bitmessage-Netzwerk verteilt werden --- sofern Speicherplatz kein Problem ist. Sollte dieser Angreifer irgendwie an den privaten Schlüssel eines Benutzers kommen, kann er alle gespeicherten Meldungen entschlüsseln welche für diesen Benutzer bestimmt sind und sich ausserdem als diesen ausgeben.\footnote{Das letztere ist schwieriger wenn der Schlüssel durch eine Bruteforce-Attacke erworben wurde.}
|
||||
|
||||
Glaubhafte Abstreitbarkeit (plausible deniability) kann, in einigen Szenarios, dagegen helfen. Bei dieser Aktion, auch "eine Adresse atomisieren"\footnote{"Nuking an address."} genannt, wird der private Schlüssel anonym veröffentlicht.\footnote{Siehe \url{https://bitmessage.ch/nuked/} für ein Beispiel.}
|
||||
|
||||
Perfect Forward Secrecy scheint nicht praktikabel implementierbar zu sein, da man dazu vor dem Senden der eigentlichen Nachricht Informationen austauschen muss. Diese brauchten wiederum Proof of Work um das Netzwerk zu schützen, was für den Sender die doppelte Arbeit bedeutet und dreimal solange dauert um sie zu senden --- das heisst, falls beide Clients online sind. Der Austausch von Nachrichten würde so gut wie unmöglich wenn beide Benutzer nur sporadisch online sind.
|
||||
|
||||
\newpage
|
||||
\section{Diskussion}
|
||||
|
||||
Anonymität hat ihren Preis. Bei Bitmessage ist es Traffic, Speicherplatz und Rechenpower. Bei E-Mail ist es Vertrauen. Wenn wir unserem E-Mail-Provider nicht vertrauen können (wer kann das?), ist Bitmessage eine alternative, wenn auch nicht vollständig ausgereift.
|
||||
|
||||
TODO
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
|
||||
\bibliographystyle{plain}
|
||||
\bibliography{bibliography}
|
||||
|
||||
\appendix
|
||||
\addcontentsline{toc}{section}{Appendix}
|
||||
\section*{Appendix}
|
||||
\renewcommand{\thesubsection}{\Alph{subsection}}
|
||||
|
||||
\subsection{TODO}
|
||||
|
||||
\end{document}
|
@ -1,7 +1,15 @@
|
||||
\section{Basics}
|
||||
\section{Introduction}
|
||||
|
||||
\subsection{What is Metadata?}
|
||||
|
||||
While encryption technology like PGP or S/MIME provides a secure way to protect content from prying eyes, ever since Edward Snowdens whistleblowing we learned that metadata --- most notably information about who communicates with whom --- is equally interesting and much easier to analyze.
|
||||
|
||||
With e-mail, we can only prevent this by encrypting the connection to the server as well as between servers. Therefore we can only hope that both our and the recipient's e-mail provider are both trustworthy as well as competent.
|
||||
There are a few examples where meta data might be enough to get you in trouble. If you write to someoune in the IS, you might not be able to fly the next time you want to visit the U.S. The no-fly list doesn't care if you're a journalist, or had no clue that this person was a terrorist.
|
||||
|
||||
If Samsung knows Apple talks excessively with the sole producer of this nifty little sensor, they don't need the details --- the S7 will sport one of those, too. (Failing to see that Apple used it to build a car.)
|
||||
|
||||
\subsection{How Can We Hide Metadata?}
|
||||
|
||||
With e-mail, we can only prevent this by encrypting the connection to the server as well as between servers. Therefore we can only hope that both our and the recipient's e-mail provider are both trustworthy as well as competent.\footnote{Of course they should be free as well.}
|
||||
|
||||
With Bitmessage we send a message to a sufficiently large number of participants, with the intended recipient among them. Content is encrypted such as only the person in possesion of the private key can decrypt it. All participants try to do this in order to find their messages.
|
10
docs/bfh.cls
@ -79,11 +79,11 @@
|
||||
|
||||
\renewcommand{\familydefault}{\sfdefault}
|
||||
|
||||
\let\oldtoc\tableofcontents
|
||||
\renewcommand{\tableofcontents} {
|
||||
\oldtoc
|
||||
\newpage
|
||||
}
|
||||
%\let\oldtoc\tableofcontents
|
||||
%\renewcommand{\tableofcontents} {
|
||||
% \oldtoc
|
||||
% \newpage
|
||||
%}
|
||||
\newcommand*{\tutor}[1]{\gdef\@tutor{#1}}
|
||||
\renewcommand{\maketitle} {
|
||||
\begin{titlepage}
|
||||
|
BIN
docs/images/prefix-filter-binary-tree.pdf
Normal file
1252
docs/images/prefix-filter-binary-tree.svg
Normal file
After Width: | Height: | Size: 76 KiB |
BIN
docs/seminar.pdf
114
docs/seminar.tex
@ -1,6 +1,7 @@
|
||||
\documentclass{bfh}
|
||||
|
||||
\usepackage[numbers]{natbib}
|
||||
\usepackage{xfrac}
|
||||
|
||||
\title{Informatikseminar}
|
||||
\subtitle{Bitmessage -- Communication Without Metadata}
|
||||
@ -8,45 +9,70 @@
|
||||
\tutor{Kai Brünnler}
|
||||
\date{\today}
|
||||
|
||||
\newcommand{\msg}[1]{\textit{#1}}
|
||||
\newcommand{\obj}[1]{\textbf{#1}}
|
||||
\newcommand{\node}[1]{\textbf{#1}}
|
||||
\newcommand{\key}[1]{\textbf{#1}}
|
||||
\newcommand{\msg}[1]{\textit{\textcolor{RedOrange}{#1}}}
|
||||
\newcommand{\obj}[1]{\textbf{\textcolor{OliveGreen}{#1}}}
|
||||
\newcommand{\node}[1]{\textbf{\textcolor{MidnightBlue}{#1}}}
|
||||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
|
||||
\tableofcontents
|
||||
|
||||
\section{Synopsis}
|
||||
\listoffigures
|
||||
|
||||
TODO
|
||||
\newpage
|
||||
\section*{Abstract}
|
||||
|
||||
Even if we use encryption, we reveal a lot about ourselves in the metadata we produce. Bitmessage prevents this by distributing a message in a way that it's not possible to find out which was the intended recipient.
|
||||
|
||||
\newpage
|
||||
% Section basics
|
||||
\input{basics}
|
||||
|
||||
|
||||
\newpage
|
||||
\section{Protocol}
|
||||
|
||||
We use the following convention to distinguish different parts of the protocol:
|
||||
|
||||
\begin{tabular}{@{}>{$}l<{$}l@{}}
|
||||
\msg{version} & for messages between nodes \\
|
||||
\obj{pubkey} & for objects that are spread throughout the network \\
|
||||
\node{A} & for individual nodes \\
|
||||
\end{tabular}
|
||||
|
||||
|
||||
\subsection{Nomenclature}
|
||||
|
||||
There are a few terms that are easily mixed up. Here's a list of the most confusing ones:
|
||||
|
||||
\listinginfo{}{message}{is sent from one node to another, i.e. to announce new objects or to initialize the network connection.}{}
|
||||
\listinginfo{}{msg}{is the object payload containing the actual message written by a user. The term 'message' is never used to describe information exchange between users in this document. 'Content' is mostly used instead.}{}
|
||||
\listinginfo{}{payload}{There are two kinds of payload: message payload for message types, e.g. containing inventory vectors, and object payload, which is distributed throughout the network.}{}
|
||||
\listinginfo{}{object}{is a kind of message whose payload is distributed among all nodes. Somtimes just the payload is meant.}{}
|
||||
\subsubsection{message, msg}
|
||||
A \msg{message} is sent from one node to another, i.e. to announce new objects or to initialize the network connection.
|
||||
|
||||
An \obj{msg} on the other hand is the object payload containing content written by a user.
|
||||
|
||||
In the protocol section, the term 'message' is never used to describe information exchange between users.
|
||||
|
||||
\subsubsection{payload}
|
||||
There are three kinds of payload:
|
||||
\begin{enumerate}
|
||||
\item Message payload for message types, e.g. containing inventory vectors.
|
||||
\item Object payload, which is distributed throughout the network.\footnote{And part of the message payload.}
|
||||
\item Encrypted payload, which is the ciphertext with some metadata needed for decryption.\footnote{Which, again, is part of the object payload.}
|
||||
\end{enumerate}
|
||||
|
||||
\subsubsection{object}
|
||||
An object is a kind of message whose payload is distributed among all nodes. Somtimes just the payload is meant. To send an object, proof of work is required.
|
||||
|
||||
\subsection{Process Flow}
|
||||
|
||||
The newly started node \node{A} connects to a random node \node{B} from its node registry and sends a \msg{version} message, announcing the latest supported protocol version. If \node{B} accepts the version\footnote{A version is accepted by default if it is higher or equal to a nodes latest supported version. Nodes supporting experimental protocol versions might accept older versions.}, it responds with a \msg{verack} message, followed by a \msg{version} message announcing its own latest supported protocol version. Node \node{A} then decides whether it supports \node{B}'s version and sends its \msg{verack} mesage.
|
||||
The newly started node \node{A} connects to a random node \node{B} from its node registry and sends a \msg{version} message, announcing the latest supported protocol version. If \node{B} accepts the version,\footnote{A version is accepted by default if it is higher or equal to a nodes latest supported version. Nodes supporting experimental protocol versions might accept older versions.} it responds with a \msg{verack} message, followed by a \msg{version} message announcing its own latest supported protocol version. Node \node{A} then decides whether it supports \node{B}'s version and sends its \msg{verack} message.
|
||||
|
||||
If both nodes accept the connection, they both send an \msg{addr} message containing up to 1000 of its known nodes, followed by one or more \msg{inv} messages announcing all valid objects they are aware of. They then send \msg{getobject} request for all objects still missing from their inventory.
|
||||
|
||||
\msg{Getobject} requests are answered by \msg{object} messages containing the requested objects.
|
||||
|
||||
A node actively connects to eight other nodes, allowing any number of incoming connections. If a user creates a new object on node \node{A}, it is offered via \msg{inv} to eight of the connected nodes. They will get the object and distribute it to up to eight of their connections, and so on.
|
||||
A node actively connects to eight other nodes, allowing any number of incoming connections. If a user creates a new object on node \node{A}, it is offered via \msg{inv} to eight of the connected nodes. They will get the object and distribute it to up to eight of their connections, and so on, until all nodes have it in their inventory.
|
||||
|
||||
\subsection{Messages}
|
||||
|
||||
@ -78,7 +104,7 @@
|
||||
\subsection{Addresses}
|
||||
\label{subsec:addr}
|
||||
|
||||
\textit{BM-2cXxfcSetKnbHJX2Y85rSkaVpsdNUZ5q9h}: Addresses start with "BM-" and are, like Bitcoin addresses, Base58 encoded\footnote{Which uses characters 1-9, A-Z and a-z without the easily confused characters I, l, 0 and O.}.
|
||||
\textit{BM-2cXxfcSetKnbHJX2Y85rSkaVpsdNUZ5q9h}: Addresses start with "BM-" and are, like Bitcoin addresses, Base58 encoded.\footnote{Which uses characters 1-9, A-Z and a-z without the easily confused characters I, l, 0 and O.}
|
||||
|
||||
\listinginfo{}{version}{Address version.}{}
|
||||
\listinginfo{}{stream}{Stream number.}{}
|
||||
@ -87,13 +113,13 @@
|
||||
|
||||
\subsection{Encryption}
|
||||
|
||||
Bitcoin uses Elliptic Curve Cryptography for both signing and encryption. While the mathematics behind elliptic curves is even harder to understand than the older approach of multiplying huge primes, it's based on the same principle of doing some mathematical operation that can be done fast one way but is very hard to reverse. Instead of two very large primes, we multiply a point on the elliptic curve by a very large number\footnote{Please don't ask me how to do it. If your're crazy enough, start at \url{http://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication} and \url{http://en.wikipedia.org/wiki/Elliptic_curve_cryptography}. If you're not that crazy, use a library like Bouncy Casle that does the hard work for you.}.
|
||||
Bitmessage uses Elliptic Curve Cryptography for both signing and encryption. While the mathematics behind elliptic curves is even harder to understand than the older approach of multiplying huge primes, it's based on the same principle of doing some mathematical operation that can be done fast one way but is very hard to reverse. Instead of two very large primes, we multiply a point on the elliptic curve by a very large number.\footnote{Please don't ask me how to do it. If you really want to know, start at \url{http://en.wikipedia.org/wiki/Elliptic_curve_point_multiplication} and \url{http://en.wikipedia.org/wiki/Elliptic_curve_cryptography}. If you want to make something that works, use a library like Bouncy Casle that does the heavy lifting for you.}
|
||||
|
||||
The user, let's call her Alice, needs a key pair, consisting of a private key
|
||||
$$k$$
|
||||
which represents a huge random number, and a public key
|
||||
$$K = G k$$
|
||||
which represents a point on the agreed on curve\footnote{Bitmessage uses a curve called \textit{secp256k1}.}. Please note that this is not a simple multiplication, but the multiplication of a point along an elliptic curve. $G$ is the starting point for all operations on a specific curve.
|
||||
which represents a point on the agreed on curve.\footnote{Bitmessage uses a curve called \textit{secp256k1}.} Please note that this is not a simple multiplication, but the multiplication of a point along an elliptic curve. $G$ is the starting point for all operations on a specific curve.
|
||||
|
||||
Another user, Bob, knows the public key. To encrypt a message, Bob creates a temporary key pair
|
||||
$$r$$
|
||||
@ -113,11 +139,16 @@ so she just uses $R k$ to decrypt the message.
|
||||
|
||||
To sign objects, Bitmessage uses Elliptic Curve Digital Signature Algorithm or ECDSA. This is slightly more complicated, if you want the details, Wikipedia is once again a fine starting point: \url{http://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm}.
|
||||
|
||||
A detail that's interesting for people who want to implement a Bitmessage client, particularly if they do it using some object oriented approach: the signature covers everything from the object header sans nonce, and everything from the object payload except for the signature itself. Of course, not all objects are signed.\footnote{My approach was: think first, do it wrong, then refactor a lot.}
|
||||
|
||||
\newpage
|
||||
\section{Issues}
|
||||
|
||||
\subsection{Scalability}
|
||||
|
||||
Bitmessage doen't really scale. If there are very few users, anonymity isn't given anymore, and with many users traffic and storage use grows quadratically.
|
||||
Bitmessage doen't scale.\footnote{Yet.} If there are very few users, anonymity isn't given anymore. With just a handful users, it's easy (for, let's say the NSA) to analyse traffic between nodes to find out who they might be writing to. Or let's just put them all under surveilance.
|
||||
|
||||
With many users, traffic and storage use grows quadratically. This, because with more users there are more people who write messages as well as more users to write to for existing users.
|
||||
|
||||
\subsubsection{Proof of Work}
|
||||
Proof of work has two uses. It helps to protect the network by preventing single nodes from flooding it with objects, and to protect users from spam. There's minimal proof of work required for the network to distribute objects, but users can define higher requirements for their addresses if they get spammed with cheap Viagra\texttrademark{} offers. The proof of work required for an address is defined in the \obj{pubkey}, and senders that are in a user's contacts should not be required to do the higher proof of work.
|
||||
@ -142,20 +173,64 @@ $$ d = \frac{2^{64}}{n (l + \frac{t l}{2^{16}})} $$
|
||||
The unsolved problem is to determine when a stream is full. Another issue is the fact that, as the overall network grows, traffic on full streams still grows, as there are more users who might wanto to write someone on the full stream.
|
||||
|
||||
\subsubsection{Prefix Filtering}
|
||||
TODO\cite{wiki:prefixfilter}
|
||||
Jonathan Coe proposed this interesting way of handling traffic. This would need an update to the protocol, but allows for much finer grained control of how much traffic a node wants to handle.\cite{wiki:prefixfilter}
|
||||
|
||||
Instead of streams, we imagine an address as a leave of a binary tree of height 65. The position is defined by the first 64 bits of the address' ripe. A prefix value $n$ defines the node at wich we start to listen. A client sending a message sets a 64 bit nonce where the first $n$ bits are copied from the recipient's ripe, and the rest is set randomly.
|
||||
|
||||
\begin{figure}[htp]
|
||||
\centering
|
||||
\includegraphics[width=\textwidth]{images/prefix-filter-binary-tree.pdf}
|
||||
\caption[prefix filter: binary tree]{Note that the prefix value goes up to 64, i.e. each yellow triangle is itself a subtree of height 61.}
|
||||
\label{fig:bintree}
|
||||
\end{figure}
|
||||
|
||||
Now let's assume Bob's address' ripe starts with \texttt{00101001\ldots} and his prefix value is 3. Alice sends a message tagged with \texttt{00110100\ldots}. The first three bits must be the same, but the rest is random. Bob's client now gets only objects that match his prefix, meaning he must only handle \sfrac{1}{8} of the overall traffic.\footnote{At the moment, the overall traffic is around 1 GiB per month.}
|
||||
|
||||
As Bitmessage might get more popular, it would produce more and more traffic. Bob therefore might want to raise his prefix value to 4, further reducing the traffic he handles to \sfrac{1}{16} of the overall traffic. To do this, he simply publishes his \obj{pubkey} with the updated prefix value. This means of course that either must there always be a pubkey published, or Alice needs to be online at least once while the pubkey is published. Otherwise there's a 50\% chance (in our scenario) that the message won't reach Bob.
|
||||
|
||||
While this would allow for a mobile client to only process messages meant for its addresses,\footnote{Choosing a prefix value of 64 would most certainly mean that it's alone on this stream.} this would mean to give up anonymity almost completely.
|
||||
|
||||
TODO
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
\subsection{Forward Secrecy}
|
||||
|
||||
Obviously it's trivial for an attacker to collect all (encrypted) objects distributed through the Bitmessage network -- as long as disk space is not an issue. If this attacker can somehow get the private key of a user, they can decrypt all stored messages intended for that user, as well as impersonate said user\footnote{The latter might be more difficult if they got the key through a brute force attack.}.
|
||||
Obviously it's trivial for an attacker to collect all (encrypted) objects distributed through the Bitmessage network -- as long as disk space is not an issue. If this attacker can somehow get the private key of a user, they can decrypt all stored messages intended for that user, as well as impersonate said user.\footnote{The latter might be more difficult if they got the key through a brute force attack.}
|
||||
|
||||
Plausible deniability can, in some scenarios, help against this. This action, called "nuking an address", is done by anonymously publishing the private keys somewhere publicly accessible\footnote{See \url{https://bitmessage.ch/nuked/} for an example.}.
|
||||
Plausible deniability can, in some scenarios, help against this. This action, called "nuking an address", is done by anonymously publishing the private keys somewhere publicly accessible.\footnote{See \url{https://bitmessage.ch/nuked/} for an example.}
|
||||
|
||||
Perfect forward secrecy seems impractical to implement, as it requires to exchange messages prior to sending encrypted content. That would in turn need proof of work to protect the network, resulting in twice the work for the sender and three times longer to send --- that is, if both clients are online. Exchanging messages would be all but impossible if both users are online sporadically.
|
||||
|
||||
\newpage
|
||||
\section{Discussion}
|
||||
|
||||
Anonymity has its price. With Bitmessage it's traffic and disk space, with E-Mail it's trust. If we can't trust our e-mail providers (who can?), Bitmessage is a very interesting alternative, albeit not fully matured.
|
||||
|
||||
TODO
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
.
|
||||
|
||||
|
||||
\bibliographystyle{plain}
|
||||
\bibliography{bibliography}
|
||||
@ -167,5 +242,4 @@ $$ d = \frac{2^{64}}{n (l + \frac{t l}{2^{16}})} $$
|
||||
|
||||
\subsection{TODO}
|
||||
|
||||
|
||||
\end{document}
|
@ -184,7 +184,7 @@ public class CryptoBox implements Streamable {
|
||||
}
|
||||
|
||||
public Builder curveType(int curveType) {
|
||||
if (curveType != 0x2CA) LOG.debug("Unexpected curve type " + curveType);
|
||||
if (curveType != 0x2CA) LOG.error("Unexpected curve type " + curveType);
|
||||
this.curveType = curveType;
|
||||
return this;
|
||||
}
|
||||
|
@ -21,15 +21,14 @@ import ch.dissem.bitmessage.InternalContext;
|
||||
import ch.dissem.bitmessage.entity.*;
|
||||
import ch.dissem.bitmessage.entity.valueobject.InventoryVector;
|
||||
import ch.dissem.bitmessage.entity.valueobject.NetworkAddress;
|
||||
import ch.dissem.bitmessage.exception.InsufficientProofOfWorkException;
|
||||
import ch.dissem.bitmessage.factory.Factory;
|
||||
import ch.dissem.bitmessage.ports.NetworkHandler.MessageListener;
|
||||
import ch.dissem.bitmessage.utils.Security;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.io.*;
|
||||
import java.net.Socket;
|
||||
import java.net.SocketTimeoutException;
|
||||
import java.util.List;
|
||||
@ -159,6 +158,14 @@ public class Connection implements Runnable {
|
||||
Security.checkProofOfWork(objectMessage, ctx.getNetworkNonceTrialsPerByte(), ctx.getNetworkExtraBytes());
|
||||
listener.receive(objectMessage);
|
||||
ctx.getInventory().storeObject(objectMessage);
|
||||
} catch (InsufficientProofOfWorkException e) {
|
||||
try {
|
||||
File f = new File(System.getProperty("user.home")+"/jabit.error/" + objectMessage.getInventoryVector() + ".inv");
|
||||
f.createNewFile();
|
||||
objectMessage.write(new FileOutputStream(f));
|
||||
} catch (IOException e1) {
|
||||
e1.printStackTrace();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
LOG.error("Stream " + objectMessage.getStream() + ", object type " + objectMessage.getType() + ": " + e.getMessage(), e);
|
||||
}
|
||||
|