Merge branch 'master' of github.com:BetterCrypto/Applied-Crypto-Hardening
authorsebix <szebi@gmx.at>
Wed, 25 Dec 2013 20:27:25 +0000 (21:27 +0100)
committersebix <szebi@gmx.at>
Wed, 25 Dec 2013 20:27:25 +0000 (21:27 +0100)
Conflicts:
src/acknowledgements.tex
src/practical_settings/DBs.tex
src/practical_settings/im.tex
src/practical_settings/vpn.tex
src/practical_settings/webserver.tex

1  2 
src/acknowledgements.tex
src/applied-crypto-hardening.tex
src/disclaimer.tex
src/practical_settings/DBs.tex
src/practical_settings/im.tex
src/practical_settings/mailserver.tex
src/practical_settings/ssh.tex
src/practical_settings/vpn.tex
src/security.bib
src/theory/PKIs.tex
src/theory/cipher_suites/recommended.tex

diff --combined src/acknowledgements.tex
@@@ -1,8 -1,11 +1,11 @@@
  \newpage
- \section*{Acknowledgements}
+ \section{Acknowledgements}
  \label{section:Reviewers}
  
  
+ %\todo{refs to this section do not work, see methods and disclaimer}
+ % fixed! it was "section*{" versus "section{"
  We would like to express our thanks to the following reviewers and people who have generously offered their time and interest (in alphabetical order):
  
  
  \begin{minipage}[b]{0.5\linewidth}
  \center
  Brown, Scott \\
 -G\"uhring Philipp  \\
 +Gühring Philipp  \\
  Grigg, Ian  \\
  Horenbeck, Maarten \\
  Kovacic, Daniel \\
  Lenzhofer, Stefan \\
+ Lor\"unser, Thomas \\
  Mendel, Florian \\
  Millauer, Tobias \\
  \end{minipage}
  \begin{minipage}[b]{0.5\linewidth}
  \center
+ Pacher, Christoph \\
+ Palfrader, Peter \\
  Pichler, Patrick \\
  Petukhova, Anna (Logo) \\
 -P\"oschl, Ulrich \\
 +Pöschl, Ulrich \\
  San, Berg \\
  Schreck, Thomas  \\
  Seidl, Eva (PDF layout) \\
 -Wagner, Sebastian (``sebix'') \\
 +Wagner, Sebastian («sebix») \\
+ Zangerl, Alexander \\
  \end{minipage}
  
  \vline{}
@@@ -17,7 -17,6 +17,7 @@@
  
  
  \usepackage[english]{babel}                                                                           % English language/hyphenation
 +\usepackage[utf8]{inputenc}                                                                           % UTF-8 as input-encoding
  \usepackage[protrusion=true,expansion=true]{microtype}                                % Better typography
  \usepackage{amsmath,amsfonts,amsthm}                                  % Math packages
  \usepackage[pdftex]{graphicx}                                         % Enable pdflatex 
@@@ -25,7 -24,6 +25,6 @@@
  \usepackage[hang, small,labelfont=bf,up,textfont=it,up]{caption}      % Custom captions under/above floats
  \usepackage{epstopdf}                                                                                         % Converts .eps to .pdf
  \usepackage{subfig}                                                                                                   % Subfigures
- \usepackage{booktabs}                                                                                         % Nicer tables
  \usepackage{fix-cm}                                                                                                   % Custom fontsizes
  
  \usepackage[usenames,dvipsnames]{color}
@@@ -35,7 -33,6 +34,7 @@@
  \usepackage{acronym}
  \usepackage{amsthm}
  \usepackage{fancyvrb}
 +\usepackage{upquote}                                                                                          % For correct single quotes in listings
  \usepackage{listings}
  \usepackage{longtable}
  
  \newcommand{\yes}{\textcolor{green}{\ding{51}}}
  \newcommand{\no}{\textcolor{red}{\ding{55}}}
  
- % human tables
- \usepackage{booktabs}
- \renewcommand{\arraystretch}{1.25}
  
+ % Colours
  \definecolor{green}{RGB}{32,113,10}
  \definecolor{orange}{RGB}{251,111,16}
  \definecolor{red}{RGB}{247,56,0}
  % \usepackage[T1]{fontenc}
  % \usepackage{textcomp}
  
 +% This block is for listings
 +\usepackage[framemethod=TikZ]{mdframed} % mdframed is used to draw a grey box
 +\mdfdefinestyle{listingstyle}{
 +  backgroundcolor=black!10,outerlinewidth=0,outerlinecolor=black,
 +  innerleftmargin=0,innerrightmargin=0,innertopmargin=0pt,innerbottommargin=0pt
 +}
 +\usepackage{amssymb}% for \curvearrowright
 +% Insert a grey box behind the listing for uniform background color (The \cipherstring would the listing and the background would turn white)
 +\BeforeBeginEnvironment{lstlisting}{\vspace{0.2cm}\begin{mdframed}[style=listingstyle]}
 +\AfterEndEnvironment{lstlisting}{\end{mdframed}}
  \lstset{
  %language=Bash,                             % Code langugage
  basicstyle=\ttfamily,                   % Code font, Examples: \footnotesize, \ttfamily
@@@ -139,13 -123,9 +135,13 @@@ captionpos=b
  breaklines=true,                        % Automatic line breaking?
  breakatwhitespace=false,                % Automatic breaks only at whitespace?
  showspaces=false,                       % Dont make spaces visible
 +showstringspaces=false,
  showtabs=false,                         % Dont make tabls visible
 -columns=fixed,                          % Column format
 +columns=fullflexible,                   % Column format: no spaces are inserted for monospaced appearance
  morekeywords={__global__, __device__},  % 
 +escapeinside={\%*}{*)},                 % Escape TeX commands inside %* and *)
 +prebreak=\mbox{$\curvearrowright$},     % Disply curved arrow before linebreak
 +xrightmargin=1.8pt,
  }
  
  
  %%% Custom sectioning (sectsty package)
  \usepackage{sectsty}                                                                                                  % Custom sectioning (see below)
  \allsectionsfont{%                                                                                                                    % Change font of al section commands
-       \usefont{OT1}{phv}{b}{n}%                                                                               % bch-b-n: CharterBT-Bold font
+       %\usefont{OT1}{phv}{b}{n}%                                                                              % bch-b-n: CharterBT-Bold font 
+ \bfseries                                                                                                                     % should make it Open Sans Bold
        }
  
  \sectionfont{%                                                                                                                                % Change font of \section command
-       \usefont{OT1}{phv}{b}{n}%                                                                               % bch-b-n: CharterBT-Bold font
+       %\usefont{OT1}{phv}{b}{n}%                                                                              % bch-b-n: CharterBT-Bold font
+ \bfseries     
        }
  
  % use more of the page
  
  
  \pretitle{\vspace{-30pt} \begin{flushleft} \HorRule 
-                               \fontsize{36}{36}  \color{darkblue} \selectfont 
+                               \fontsize{35}{36} \bfseries \color{darkblue} \selectfont 
                                }
                        \title{Applied Crypto Hardening}% \\ \vskip 0.5em \large www.bettercrypto.org}
  \posttitle{\par\end{flushleft}\vskip 0.5em}
  
  \preauthor{\begin{flushleft}
-                                       \large \lineskip 0.5em  \color{intersectgreen}}
+                                       \large \lineskip 0.5em  
+                                       \color{intersectgreen}}
+                                       %\vskip 0.5em
                                        \author{Wolfgang Breyha, David Durvaux, Tobias Dussa, L. Aaron
                                        Kaplan, Florian Mendel, Christian Mock, Manuel Koschuch, Adi
 -                                      Kriegisch, Ulrich P\"oschl, Ramin Sabet, Berg San, Ralf Schlatterbeck, 
 +                                      Kriegisch, Ulrich Pöschl, Ramin Sabet, Berg San, Ralf Schlatterbeck, 
                                        Thomas Schreck, Aaron Zauner, Pepi Zawodsky}
  %\institute{
  %FH Campus Wien
  
  \setlength{\parindent}{0cm}
  
- \postauthor{\footnotesize  \color{Black} 
\\ \vskip 0.5em  (University of Vienna, CERT.be, KIT-CERT, CERT.at, IAIK, coretec.at, FH Campus Wien, VRVis, MilCERT Austria, A-Trust, , Runtux.com, Friedrich-Alexander University Erlangen-Nuremberg, azet.org, maclemon.at)
+ \postauthor{\footnotesize  \color{Black}  \vskip 2.5em
  (University of Vienna, CERT.be, KIT-CERT, CERT.at, IAIK, coretec.at, FH Campus Wien, VRVis, MilCERT Austria, A-Trust, Runtux.com, Friedrich-Alexander University Erlangen-Nuremberg, azet.org, maclemon.at)
                                        \par\end{flushleft}\HorRule}
  
  \date{\today}
  
+ %tell TeX where to look for graphics/logos
+ \graphicspath{ {/img/} }
  % hyperref needs to be the last package you load.
  \usepackage[pdftex,breaklinks,colorlinks,linkcolor=darkblue,citecolor=blue,urlcolor=blue]{hyperref}
  
 +% CIPHERSTRING
 +\usepackage{seqsplit} % Use Sequence split. Basically it inserts between every character pair a box with zero width to allow linebreaks everywhere. Better solution wanted, but is there any better?
 +\newcommand{\cipherstringB}{\seqsplit{EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA}}
  
  %%% Begin document
  \begin{document}
  % The first character should be within \initial{}
  %\initial{H}\textbf{ere is some sample text to show the initial in the introductory paragraph of this template article. The color and lineheight of the initial can be modified in the preamble of this document.}
  
+ % add logo graphic
+ %\includegraphics{img/logo}
  \input{neboltai}
  \input{acknowledgements}
  \input{abstract}
diff --combined src/disclaimer.tex
@@@ -6,7 -6,7 +6,7 @@@
  
  \epigraph{``Encryption works. Properly implemented strong crypto systems are
  one of the few things that you can rely on. Unfortunately, endpoint security is
 -so terrifically weak that NSA can frequently find ways around it.''}{- Edward
 +so terrifically weak that NSA can frequently find ways around it.''}{--- Edward
  Snowden, answering questions live on the Guardian's
  website\cite{snowdenGuardianGreenwald}}
  
@@@ -56,7 -56,7 +56,7 @@@ This guide can only describe what the a
  \emph{believe} to be the best settings based on their personal experience and
  after intensive cross checking with literature and experts. For a complete list
  of people who reviewed this paper, see the section \ref{section:Reviewers}.
- Even though, multiple specialists reviewed the guide, the authors can give
+ Even though multiple specialists reviewed the guide, the authors can give
  \emph{no guarantee whatsoever} that they made the right recommendations. Keep in
  mind that tomorrow there might be new attacks on some ciphers and many of the
  recommendations in this guide might turn out to be wrong. Security is a
@@@ -2,32 -2,35 +2,31 @@@
  % This list is based on : http://en.wikipedia.org/wiki/Relational_database_management_system#Market_share
  
  %% ---------------------------------------------------------------------- 
 -\subsubsection{Oracle}
 -\begin{description}
 -\item[Tested with Version:] not tested
 +\subsection{Oracle}
 +%\subsubsection{Tested with Version}
 +\todo{not tested yet}
  
 -\item[References:] (German)
 -{\small \url{http://www.telekom.com/static/-/155996/7/technische-sicherheitsanforderungen-si}}
 +\subsubsection{References}
 +\begin{itemize}
 +  \item Technical safety requirements by \emph{Deutsche Telekom AG} (German). Please read section 17.12 or pages 129 and following (Req 396 and Req 397) about SSL and ciphersuites \url{http://www.telekom.com/static/-/155996/7/technische-sicherheitsanforderungen-si}
 +\end{itemize}
  
 -Please read the following pages about SSL and ciphersuites:\\
 -p. 129 -Req 396 and Req 397 \\
 -
 -\end{description}
  
  %% ---------------------------------------------------------------------- 
- \subsection{SQL Server}
 -\subsubsection{SQL Server}
 -
 -
 +\todo{write this}
  
  
  %% ---------------------------------------------------------------------- 
 -\subsubsection{MySQL}
 -
 -\begin{description}
 -\item[Tested with Version:] Debian 7.0 and MySQL 5.5
 -
 -\item[Settings:] \mbox{}
 +\subsection{MySQL}
 +\subsubsection{Tested with Version}
 +\begin{itemize}
 +  \item Debian 7.0 and MySQL 5.5
 +\end{itemize}
  
 -\paragraph*{my.cnf}\mbox{}\\
  
 -\begin{lstlisting}[breaklines]
 +\subsubsection{Settings}
 +\paragraph*{my.cnf}
 +\begin{lstlisting}
  [mysqld]
  ssl
  ssl-ca=/etc/mysql/ssl/ca-cert.pem
@@@ -36,42 -39,40 +35,42 @@@ ssl-key=/etc/mysql/ssl/client-key.pe
  ssl-cipher=EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256:EECDH:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128:!ECDSA:AES256-SHA
  \end{lstlisting}
  
 -\item[Additional settings:]
 +%\subsubsection{Additional settings}
  
  
 -\item[Justification for special settings (if needed):]
 -
 +%\subsubsection{Justification for special settings (if needed)}
  % in case you have the need for further justifications why you chose this and that setting or if the settings do not fit into the standard Variant A or Variant B schema, please document this here
  
 -\item[References:]
 -{\small \url{https://dev.mysql.com/doc/refman/5.5/en/ssl-connections.html}}
  
 +\subsubsection{References}
 +\begin{itemize}
 +  \item MySQL Documentation on SSl Connections: \url{https://dev.mysql.com/doc/refman/5.5/en/ssl-connections.html}
 +\end{itemize}
  
 -\item[How to test:]
  
 +\subsubsection{How to test}
  After restarting the server run the following query to see if the ssl settings are correct:
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  show variables like '%ssl%';
  \end{lstlisting}
  
  
 -\end{description}
 -
 -
  %% ---------------------------------------------------------------------- 
 -\subsubsection{DB2}
 -\begin{description}
 -\item[Tested with Version:] not tested
 +\subsection{DB2}
 +\subsubsection{Tested with Version}
 +\todo{not tested}
 +
  
 -\item[References:]
 -{\small \url{http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.sec.doc%2Fdoc%2Fc0053544.html}}
 +\subsubsection{References}
 +\begin{itemize}
 +  \item IMB Db2 Documentation on \emph{Supported cipher suites} \url{http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=\%2Fcom.ibm.db2.luw.admin.sec.doc\%2Fdoc\%2Fc0053544.html}
 +\end{itemize}
  
  
 -\paragraph*{ssl\_cipherspecs}\mbox{}\\
 -In the link above the whole SSL-configuration is described in-depth. The following command shows only how to set the recommended ciphersuites.
 -\begin{lstlisting}[breaklines]
 +\subsubsection{Settings}
 +\paragraph*{ssl\_cipherspecs}
 +In the link above the whole SSL-configuration is described in-depth. The following command shows only how to set the recommended ciphersuites:
 +\begin{lstlisting}
  # recommended and supported ciphersuites 
  
  db2 update dbm cfg using SSL_CIPHERSPECS 
@@@ -93,48 -94,53 +92,48 @@@ TLS_RSA_WITH_AES_256_CBC_SHA
  TLS_RSA_WITH_AES_128_CBC_SHA,
  TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
  TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
 -
  \end{lstlisting}
  
 -\end{description}
  
  %% ---------------------------------------------------------------------- 
 +\subsection{PostgreSQL}
 +\subsubsection{Tested with Versions}
 +\begin{itemize}
 +  \item Debian 7.0 and PostgreSQL 9.1
 +  \item Linux Mint 14 nadia / Ubuntu 12.10 quantal with PostgreSQL 9.1+136 and OpenSSL 1.0.1c
 +\end{itemize}
  
 -\subsubsection{PostgreSQL}
 -
 -\begin{description}
 -\item[Tested with Version:] Debian 7.0 and PostgreSQL 9.1
 -
 -\item[References:]
 -
 -It's recommended to read 
 -
 -{\small \url{http://www.postgresql.org/docs/X.X/interactive/runtime-config-connection.html\#RUNTIME-CONFIG-CONNECTION-SECURITY}}
 -(please change X.X with your preferred version e.g. 9.1).
  
 -\item[Settings:] \mbox{}
 +\subsubsection{References}
 +\begin{itemize}
 +  \item It's recommended to read {\small \url{http://www.postgresql.org/docs/9.1/interactive/runtime-config-connection.html\#RUNTIME-CONFIG-CONNECTION-SECURITY}} (please edit the version with your preferred one).
 +  \item PostgreSQL Documentation on \emph{Secure TCP/IP Connections with SSL}: \url{http://www.postgresql.org/docs/9.1/static/ssl-tcp.html}
 +\end{itemize}
  
  
 -To start in SSL mode the server.crt and server.key must exist in the server's data directory \$PGDATA. 
 +\subsubsection{Settings}
 +To start in SSL mode the server.crt and server.key must exist in the server's data directory \$PGDATA.
  
 -Starting with version 9.2, you have the possibility to set the path.
 +Starting with version 9.2, you have the possibility to set the path manually.
  
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  ssl_key_file = '/your/path/server.key'
  ssl_cert_file = '/your/path/server.crt'
  ssl_ca_file = '/your/path/root.crt'
  \end{lstlisting}
  
 -\paragraph*{postgresql.conf}\mbox{}\\
  
 -\begin{lstlisting}[breaklines]
 +\paragraph*{postgresql.conf}\mbox{}\\
 +\begin{lstlisting}
  #>=8.3
  ssl = on 
  ssl_ciphers = 'EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256:EECDH:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128:!ECDSA:AES256-SHA'
  \end{lstlisting}
  
  
 -
 -\item[How to test:]
 +\subsubsection{How to test}
  To test your ssl settings, run psql with the sslmode parameter:
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  psql "sslmode=require host=postgres-server dbname=database" your-username
  \end{lstlisting}
  
 -\end{description}
 -
@@@ -1,8 -1,8 +1,8 @@@
  %%\subsection{Instant Messaging Systems}
 -\subsubsection{XMPP / Jabber}
 +%\subsubsection{XMPP / Jabber}
  
  
 -\subsubsection{General server configuration recommendations}
 +\subsection{General server configuration recommendations}
  
  For servers, we mostly recommend to apply what's proposed by the {\it Peter's manifesto}\footnote{https://github.com/stpeter/manifesto}.
  
@@@ -15,19 -15,18 +15,19 @@@ In short
  
  The last point being out-of-scope for this section, we will only cover the first two points.
  
 -\paragraph{ejabberd}
  
 -\begin{description}
 -\item[Tested with Version:] Debian Wheezy 2.1.10-4+deb7u1
 -
 -\item[Settings:] \mbox{}
 +%%---------------------------------------------------------------------- 
 +\subsection{ejabberd}
 +\subsubsection{Tested with Version}
 +\begin{itemize}
 +  \item Debian Wheezy 2.1.10-4+deb7u1
 +\end{itemize}
  
  
 -ejabberd is one of the popular Jabber server.  In order to be compliant
 -with the manifesto, you should adapt your
 -configuration\footnote{\url{http://www.process-one.net/docs/ejabberd/guide_en.html}}:
 -\begin{lstlisting}[breaklines]
 +\subsubsection{Settings}
 +ejabberd is one of the popular Jabber server. In order to be compliant
 +with the manifesto, you should adapt your configuration\footnote{\url{http://www.process-one.net/docs/ejabberd/guide_en.html}}:
 +\begin{lstlisting}
  {listen,
   [
    {5222, ejabberd_c2s, [
  {s2s_certfile, "/etc/ejabberd/ejabberd.pem"}.
  \end{lstlisting}
  
 -\item[Additional settings:]
  
 +\subsubsection{Additional settings}
  Older Versions of ejabberd ($ < $ 2.0.0) need to be patched\footnote{\url{http://hyperstruct.net/2007/06/20/installing-the-startcom-ssl-certificate-in-ejabberd/}} to be able to parse all of the certificates in the CA chain.
  
  Newer versions of ejabberd now support specifying the cipher string in the config file. See the commit message: \url{https://github.com/processone/ejabberd/commit/1dd94ac0d06822daa8c394ea2da20d91c8209124}. However, this change did not yet make it into the stable release at the time of this writing. 
  
  
 -\item[References:] 
 +\subsubsection{References}
  
 -\item[How to test:] \url{https://xmpp.net} is a practical website to test Jabber Server configurations.
  
 -\end{description}
 +\subsubsection{How to test}
 +\url{https://xmpp.net} is a practical website to test Jabber Server configurations.
  
  
 -\subsubsection{Chat privacy - Off-the-Record Messaging (OTR)}
 +%%---------------------------------------------------------------------- 
 +\subsection{Chat privacy - Off-the-Record Messaging (OTR)}
  
  The OTR protocol works on top of the Jabber protocol\footnote{\url{https://otr.cypherpunks.ca/Protocol-v3-4.0.0.html}}.  
  It adds to popular chat clients (Adium, Pidgin...) the following properties for encrypted chats:
  
  It basically uses Diffie-Hellman, AES and SHA1. Communicating over an insecure instant messaging network, OTR can be used for end to end encryption.
  
 -There are no specific configurations required but the protocol itself is worth to be mentioned.
 +There are no specific configurations required but the protocol itself is worth being mentioned.
 +
  
 -\subsubsection{IRC}
 +%%---------------------------------------------------------------------- 
 +\subsection{Charybdis}
  
- \todo{Quick draft -- to complete / review / validate}
- There are numerous implementations of IRC servers.  In this section, we choose \emph{Charybdis} which serve as basis for \emph{ircd-seven}\footnote{https://dev.freenode.net/redmine/projects/ircd-seven}, developed and used by freenode. Freenode is actually the biggest IRC network\footnote{http://irc.netsplit.de/networks/top10.php}. \emph{Charybdis} is being part of the \emph{Debian} \& \emph{Ubuntu} distributions.
 -There are numerous implementations of IRC servers.  In this section, we choose {\it Charybdis} which serves as basis for {\it ircd-seven}\footnote{https://dev.freenode.net/redmine/projects/ircd-seven}, developed and used by freenode. Freenode is actually the biggest IRC network\footnote{http://irc.netsplit.de/networks/top10.php}.  {\it Charybdis} is part of the {\it Debian} \& {\it Ubuntu} distributions.
++There are numerous implementations of IRC servers.  In this section, we choose \emph{Charybdis} which serves as basis for \emph{ircd-seven}\footnote{https://dev.freenode.net/redmine/projects/ircd-seven}, developed and used by freenode. Freenode is actually the biggest IRC network\footnote{http://irc.netsplit.de/networks/top10.php}. \emph{Charybdis} is part of the \emph{Debian} \& \emph{Ubuntu} distributions.
  
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  /* Extensions */
  # Some modules 
  #loadmodule "extensions/chm_sslonly_compat.so";
@@@ -113,8 -107,7 +111,8 @@@ listen 
  \end{lstlisting}
  
  
 -\subsubsection{SILC}
 +%%---------------------------------------------------------------------- 
 +\subsection{SILC}
  
  SILC\footnote{\url{http://www.silcnet.org/} and
  \url{https://en.wikipedia.org/wiki/SILC_(protocol)}} is instant messaging
@@@ -61,8 -61,8 +61,8 @@@ mode, because the alternative is plain 
  \subsubsection{Settings}
  % Example: http://dovecot.org/list/dovecot/2013-October/092999.html
  
 -\begin{lstlisting}[breaklines]
 -  ssl_cipher_list = '@@@CIPHERSTRINGB@@@'
 +\begin{lstlisting}
 +  ssl_cipher_list = '%*\cipherstringB*)'
    ssl_prefer_server_ciphers = yes
  \end{lstlisting}
  
@@@ -88,22 -88,23 +88,23 @@@ parameters greater than 1024bit are no
  
  \subsubsection{How to test}
  % describe here or point the admin to tools (can be a simple footnote or \ref{} to  the tools section) which help the admin to test his settings.
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
   openssl s_client -crlf -connect SERVER.TLD:993
  \end{lstlisting}
  
  
  %% ---------------------------------------------------------------------- 
  
- \subsection{cyrus-imapd (based on 2.4.17)}
+ \subsection{cyrus-imapd}
  
- \subsubsection{Tested with Version} \todo{FIXME: add}
+ \subsubsection{Tested with Version}
+ 2.4.17
  
  \subsubsection{Settings}
  \paragraph*{imapd.conf}\mbox{}\\
  
  To activate SSL/TLS configure your certificate with
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    tls_cert_file: .../cert.pem
    tls_key_file: .../cert.key
  \end{lstlisting}
@@@ -113,14 -114,14 +114,14 @@@ Do not forget to add necessary intermed
  Limiting the ciphers provided may force (especially older) clients to connect without encryption at all! Sticking to the defaults is recommended.\\
  
  If you still want to force strong encryption use
 -\begin{lstlisting}[breaklines]
 -  tls_cipher_list: @@@CIPHERSTRINGB@@@
 +\begin{lstlisting}
 +  tls_cipher_list: %*\cipherstringB*)
  \end{lstlisting}
  
  cyrus-imapd loads hardcoded 1024 bit DH parameters using get\_rfc2409\_prime\_1024() by default. If you want to load your own DH parameters add them PEM encoded to the certificate file given in tls\_cert\_file. Do not forget to re-add them after updating your certificate.\\
  
  To prevent unencrypted connections on the STARTTLS ports you can set
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    allowplaintext: 0
  \end{lstlisting}
  This way MUAs can only authenticate after STARTTLS if you only provide plaintext and SASL PLAIN login methods. Therefore providing CRAM-MD5 or DIGEST-MD5 methods is not recommended.\\
  \paragraph*{cyrus.conf}\mbox{}\\
  
  To support POP3/IMAP on ports 110/143 with STARTTLS add
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    imap         cmd="imapd" listen="imap" prefork=3
    pop3         cmd="pop3d" listen="pop3" prefork=1
  \end{lstlisting}
  to the SERVICES section.\\
  
  To support POP3S/IMAPS on ports 995/993 add
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    imaps        cmd="imapd -s" listen="imaps" prefork=3
    pop3s        cmd="pop3d -s" listen="pop3s" prefork=1
  \end{lstlisting}
@@@ -151,7 -152,7 +152,7 @@@ There is a working patch for all three 
  \url{https://bugzilla.cyrusimap.org/show_bug.cgi?id=3823}\\
  
  \subsubsection{How to test}
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    openssl s_client -crlf -connect SERVER.TLD:993
  \end{lstlisting}
  
  %% First, you need to generate Diffie Hellman parameters (please first take a look at the section \ref{section:RNGs}):
  
  %% \todo{FIXME: this is a really weak setting! See also: http://postfix.1071664.n5.nabble.com/postfix-hardening-what-can-we-do-td61874.html}
 -%% \begin{lstlisting}[breaklines]
 +%% \begin{lstlisting}
  %%   % openssl gendh -out /etc/postfix/dh_param_512.pem -2 512
  %%   % openssl gendh -out /etc/postfix/dh_param_1024.pem -2 1024
  %% \end{lstlisting}
  
  %% Next, we specify these DH parameters in \verb|main.cf|:
  
 -%% \begin{lstlisting}[breaklines]
 +%% \begin{lstlisting}
  %%   smtpd_tls_dh512_param_file = /etc/postfix/dh_param_512.pem
  %%   smtpd_tls_dh1024_param_file = /etc/postfix/dh_param_1024.pem
  %% \end{lstlisting}
@@@ -204,7 -205,7 +205,7 @@@ As discussed in section \ref{subsection
  restrict the list of ciphers. There are still some steps needed to
  enable TLS, all in \verb|main.cf|:
  
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    smtpd_tls_cert_file = /etc/postfix/server.pem
    smtpd_tls_key_file = /etc/postfix/server.key
    # use 0 for Postfix >= 2.9, and 1 for earlier versions
@@@ -223,22 -224,22 +224,22 @@@ For the MSA \verb|smtpd| process, we fi
  acceptable for the ``mandatory'' security level, again in
  \verb|main.cf|:
  
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
    smtpd_tls_mandatory_ciphers=high
 -  tls_high_cipherlist=@@@CIPHERSTRINGB@@@
 +  tls_high_cipherlist=%*\cipherstringB*)
  \end{lstlisting}
  
  Then, we configure the MSA smtpd in \verb|master.cf| with two
  additional options that are only used for this instance of smtpd:
  
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  587       inet  n       -       -       -       -       smtpd 
          -o smtpd_tls_security_level=encrypt -o tls_preempt_cipherlist = yes
  \end{lstlisting}
  
  For those users who want to use ECC key exchange, it is possible to specify this via:
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    smtpd_tls_eecdh_grade = ultra
  \end{lstlisting}
  
@@@ -276,7 -277,7 +277,7 @@@ interoperability risk, but we have not 
  \subsubsection{How to test}
  
  You can check the effect of the settings with the following command:
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  $ zegrep "TLS connection established from.*with cipher" | /var/log/mail.log | awk '{printf("%s %s %s %s\n", $12, $13, $14, $15)}' | sort | uniq -c | sort -n
        1 SSLv3 with cipher DHE-RSA-AES256-SHA
       23 TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384
      335 TLSv1 with cipher DHE-RSA-AES256-SHA
  \end{lstlisting}
  
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
   openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
  \end{lstlisting}
  
- \subsubsection{References} \todo{FIXME}
  %% ---------------------------------------------------------------------- 
  
  \subsection{Exim (based on 4.82)}
@@@ -303,31 -302,31 +302,31 @@@ first
  
  In the main config section of Exim add:
  
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    tls_certificate = ..../cert.pem
    tls_privatekey = ..../cert.key
  \end{lstlisting}
  don't forget to add intermediate certificates to the .pem file if needed.\\
  \\
  Tell Exim to advertise STARTTLS in the EHLO answer to everyone:
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    tls_advertise_hosts = *
  \end{lstlisting}
  
  If you want to support legacy SMTPS on port 465, and STARTTLS on smtp(25)/submission(587) ports set
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    daemon_smtp_ports = smtp : smtps : submission
    tls_on_connect_ports = 465
  \end{lstlisting}
  \mbox{}\\
  It is highly recommended to limit SMTP AUTH to SSL connections only. To do so add
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}
  \end{lstlisting}
  to every authenticator defined.\\
  
  Add the following rules on top of your acl\_smtp\_mail:
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    warn    hosts           = *
            control         = submission/sender_retain
  \end{lstlisting}
@@@ -337,12 -336,12 +336,12 @@@ It is not advisable to restrict the def
  % Exim maintainers do not recommend to change default ciphers
  % I think we shouldn't, too
  %use:
 -%\begin{lstlisting}[breaklines]
 +%\begin{lstlisting}
  %  tls_require_ciphers = <...recommended ciphersuite...>
  %\end{lstlisting}
  
  The cipher used is written to the logfiles by default. You may want to add
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    log_selector = <....whatever your log_selector already contains...> \
     +tls_certificate_verified +tls_peerdn +tls_sni
  \end{lstlisting}
@@@ -353,19 -352,19 +352,19 @@@ to get even more TLS information logged
  
  In the main config section of Exim add:
  
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    tls_certificate = ..../cert.pem
    tls_privatekey = ..../cert.key
  \end{lstlisting}
  don't forget to add intermediate certificates to the .pem file if needed.\\
  \\
  Tell Exim to advertise STARTTLS in the EHLO answer to everyone:
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    tls_advertise_hosts = *
  \end{lstlisting}
  
  Listen on smtp(25) port only
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    daemon_smtp_ports = smtp
  \end{lstlisting}
  
@@@ -373,23 -372,23 +372,23 @@@ It is not advisable to restrict the def
  % Exim maintainers do not recommend to change default ciphers
  % We shouldn't, too
  %use:
 -%\begin{lstlisting}[breaklines]
 +%\begin{lstlisting}
  %  tls_require_ciphers = <...recommended ciphersuite...>
  %\end{lstlisting}
  
  If you want to request and verify client certificates from sending hosts set
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    tls_verify_certificates = /etc/pki/tls/certs/ca-bundle.crt
    tls_try_verify_hosts = *
  \end{lstlisting}
  
  tls\_try\_verify\_hosts only reports the result to your logfile. If you want to disconnect such clients you have to use
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    tls_verify_hosts = *
  \end{lstlisting}
  
  The cipher used is written to the logfiles by default. You may want to add
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    log_selector = <....whatever your log_selector already contains...> \
     +tls_certificate_verified +tls_peerdn +tls_sni
  \end{lstlisting}
@@@ -402,14 -401,14 +401,14 @@@ Exim uses opportunistic encryption in t
  Client mode settings have to be done in the configuration section of the smtp transport (driver = smtp).
  
  If you want to use a client certificate (most server certificates can be used as client certificate, too) set
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    tls_certificate   = .../cert.pem
    tls_privatekey    = .../cert.key
  \end{lstlisting}
  This is recommended for MTA-MTA traffic.\\
  
  %If you want to limit used ciphers set
 -%\begin{lstlisting}[breaklines]
 +%\begin{lstlisting}
  %  tls_require_ciphers = <...recommended ciphersuite...>
  %\end{lstlisting}
  % Exim Maintainers do not recommend ciphers. We shouldn't do so, too.
@@@ -417,7 -416,7 +416,7 @@@ Do not limit ciphers without a very goo
  
  \paragraph*{OpenSSL}\mbox{}\\
  Exim already disables SSLv2 by default. We recommend to add
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
    openssl_options = +all +no_sslv2 +no_compression +cipher_server_preference
  \end{lstlisting}
  to the main configuration.\\
@@@ -447,15 -446,15 +446,15 @@@ There already is a working patch to pro
  \url{http://bugs.exim.org/show_bug.cgi?id=1397}
  
  \paragraph*{How to test}\mbox{}\\
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
   openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
  \end{lstlisting}
  
  
  %% ----------------------------------------------------------------------
- \subsection{Exchange}
%\subsection{Exchange}
  
- \todo{FIXME: write this section}
%\todo{FIXME: write this section}
  
  
  
@@@ -2,8 -2,8 +2,8 @@@
  \subsection{OpenSSH}
  \subsubsection{Tested with Version} OpenSSH 6.1
  \subsubsection{Settings}
 -\paragraph*{sshd_config}
 -\begin{lstlisting}[breaklines]
 +\paragraph*{sshd\_config}
 +\begin{lstlisting}
        # ...
  
        Protocol 2
@@@ -17,8 -17,7 +17,7 @@@
        KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1
  \end{lstlisting}
  
- % XXX: curve25519-sha256@libssh.org only available upstream(!)
- Note: Older Linux systems won't support SHA2. PuTTY (Windows) does not support
+ \textbf{Note:} Older Linux systems won't support SHA2. PuTTY (Windows) does not support
  RIPE-MD160. Curve25519, AES-GCM and UMAC are only available upstream (OpenSSH
  6.1). DSA host keys have been removed on purpose, the DSS standard does not
  support for DSA keys stronger than 1024bit
@@@ -27,13 -26,13 +26,13 @@@ below current standards (see section \r
  can use this configuration and simply omit unsupported ciphers, key exchange
  algorithms and MACs.  
  \subsubsection{Additional settings}
Note that the setting \texttt{ServerKeyBits 4096}  has no effect until you re-generate new ssh host keys. There might be issues if you have users which rely on the fingerprint of the old ssh host key being stored in their clients' \texttt{.ssh/known\_hosts} file.
The setting \texttt{ServerKeyBits 4096}  has no effect until you re-generate new ssh host keys. There might be issues if you have users which rely on the fingerprint of the old ssh host key being stored in their clients' \texttt{.ssh/known\_hosts} file.
  %\subsubsection{Justification for special settings (if needed)}
  \subsubsection{References}
  The openssh sshd\_config  man page is the best reference: \url{http://www.openssh.org/cgi-bin/man.cgi?query=sshd_config}
  \subsubsection{How to test}
  Connect a client with verbose logging enabled to the SSH server \\
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  $ ssh -vvv myserver.com
  \end{lstlisting}and observe the key exchange in the output.
  
@@@ -42,7 -41,7 +41,7 @@@
  \subsection{Cisco ASA}
  \subsubsection{Tested with Version} 9.1(3)
  \subsubsection{Settings}
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  crypto key generate rsa modulus 2048
  ssh version 2
  ssh key-exchange group dh-group14-sha1
@@@ -54,7 -53,7 +53,7 @@@ Note: When the ASA is configured for SS
  \url{http://www.cisco.com/en/US/docs/security/asa/asa91/configuration/general/admin\_management.html }
  \subsubsection{How to test}
  Connect a client with verbose logging enabled to the SSH server \\
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  $ ssh -vvv myserver.com
  \end{lstlisting}and observe the key exchange in the output.
  
@@@ -63,7 -62,7 +62,7 @@@
  \subsection{Cisco IOS}
  \subsubsection{Tested with Version} 15.0, 15.1, 15.2
  \subsubsection{Settings}
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  crypto key generate rsa modulus 2048 label SSH-KEYS
  ip ssh rsa keypair-name SSH-KEYS
  ip ssh version 2
@@@ -76,6 -75,6 +75,6 @@@ In IOS, a dedicated Key-pair can be bou
  % add any further references or best practice documents here
  \subsubsection{How to test}
  Connect a client with verbose logging enabled to the SSH server \\
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  $ ssh -vvv myserver.com
  \end{lstlisting}and observe the key exchange in the output.
  \subsubsection{Settings}
  
  \paragraph*{Assumptions}\mbox{}\\
 -
  We assume the use of IKE (v1 or v2) and ESP for this document.
  
  \paragraph*{Authentication}\mbox{}\\
 -
  IPSEC authentication should optimally be performed via RSA signatures,
  with a key size of 2048 bits or more. Configuring only the trusted CA
  that issued the peer certificate provides for additional protection
@@@ -52,6 -54,7 +52,6 @@@ table~\ref{tab:IPSEC_psk_len} gives th
  \end{table}
  
  \paragraph*{Cryptographic Suites}\mbox{}\\
 -
  IPSEC Cryptographic Suites are pre-defined settings for all the items
  of a configuration; they try to provide a balanced security level and
  make setting up VPNs easier.
@@@ -101,7 -104,7 +101,7 @@@ vulnerabilities \footnote{\url{http://i
      Mode & Main Mode & Main Mode \\
      Encryption & AES-256 & AES, CAMELLIA (-256 or -128) \\
      Hash & SHA2-* & SHA2-*, SHA1 \\
-     DH Group & Group 14, 18 & Group 14, 18 \\
+     DH Group & Group 14-18 & Group 14-18 \\
  %    Lifetime & \todo{need recommendations; 1 day seems to be common
  %      practice} & \\
      \bottomrule
@@@ -147,15 -150,16 +147,15 @@@ parameters are shown in table \ref{tab:
  
  %---------------------------------------------------------------------- 
  \subsection{Check Point FireWall-1}
 -   
 -\begin{description}
 -\item[Tested with Version:] \mbox{}
  
 +
 +\subsubsection{Tested with Version}
  \begin{itemize}
 -\item R77 (should work with any currently supported version)
 +  \item R77 (should work with any currently supported version)
  \end{itemize}
  
 -\item[Settings:] \mbox{}
  
 +\subsubsection{Settings}
  Please see section \ref{section:IPSECgeneral} for guidance on
  parameter choice. In this section, we will configure a strong setup
  according to ``Configuration A''.
@@@ -194,8 -198,8 +194,8 @@@ found under ``Advanced Settings'' / ``A
    \label{fig:checkpoint_3}
  \end{figure}
  
 -\item[Additional settings:] \mbox{}
  
 +\subsubsection{Additional settings}
  For remote Dynamic IP Gateways, the settings are not taken from the
  community, but set in the ``Global Properties'' dialog under ``Remote
  Access'' / ``VPN Authentication and Encryption''. Via the ``Edit...''
@@@ -212,34 -216,45 +212,34 @@@ button, you can configure sets of algor
  Please note that these settings restrict the available algorithms for
  \textbf{all} gateways, and also influence the VPN client connections.
  
 -%\item[Justification for special settings (if needed):]
 +%\subsubsection{Justification for special settings (if needed)}
  
 -%\item[Limitations:]
 -
 -\item[References:]\mbox{}
 +%\subsubsectionLimitations}
  
 +\subsubsection{References}
  \begin{itemize}
 -
  \item Check Point
 -  \href{https://sc1.checkpoint.com/documents/R77/CP_R77_VPN_AdminGuide/html_frameset.htm}{VPN
 -    R77 Administration Guide} (may require a
 -  UserCenter account to access)
 -
 +  \href{https://sc1.checkpoint.com/documents/R77/CP_R77_VPN_AdminGuide/html_frameset.htm}{VPN R77 Administration Guide} (may require a UserCenter account to access)
  \end{itemize}
  
 -% \item[How to test:]
 -
 -\end{description}
 +% \subsubsection{How to test}
  
  
  %% cipherstrings current 2013-12-09
  % ---------------------------------------------------------------------- 
  \subsection{OpenVPN}
  
 -\begin{description}
 -
 -\item[Tested with Version:] \mbox{}\\
  
 +\subsubsection{Tested with Version}
  \begin{itemize}
 -\item OpenVPN 2.3.2 from Debian ``wheezy-backports'' linked against openssl (libssl.so.1.0.0) 
 -\item OpenVPN 2.2.1 from Debian 7.0 linked against openssl
 -    (libssl.so.1.0.0) 
 -\item OpenVPN 2.3.2 for Windows
 +  \item OpenVPN 2.3.2 from Debian ``wheezy-backports'' linked against openssl (libssl.so.1.0.0) 
 +  \item OpenVPN 2.2.1 from Debian 7.0 linked against openssl (libssl.so.1.0.0) 
 +  \item OpenVPN 2.3.2 for Windows
  \end{itemize}
  
 -\item[Settings:] \mbox{}
 -
 -\paragraph{General}\mbox{}
  
 +\subsubsection{Settings}
 +\paragraph{General}\mbox{}\\
  We describe a configuration with certificate-based authentication; see
  below for details on the \verb|easyrsa| tool to help you with that.
  
@@@ -252,7 -267,8 +252,7 @@@ that is then negotiated as usual with T
  and \verb|auth| options both take a single argument that must match on
  client and server.
  
 -\paragraph{Server Configuration}\mbox{}
 -
 +\paragraph{Server Configuration}\mbox{}\\
  % this is only a DoS-protection, out of scope:
  % # TLS Authentication
  % tls-auth ta.key
  % ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-CAMELLIA256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:AES256-SHA
  % the cipherlist here is config B without the ECDHE strings, because
  % it must fit in 256 bytes...
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  tls-cipher DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
  cipher AES-256-CBC
  auth SHA384
  \end{lstlisting}
  
 -\paragraph{Client Configuration}\mbox{}
 -
 +\paragraph{Client Configuration}\mbox{}\\
  Client and server have to use compatible configurations, otherwise they can't communicate.
  The \verb|cipher| and \verb|auth| directives have to be identical.
  
- \todo{FIXME: we should use the CIPHERSTRINGB  macro here}
 -\begin{lstlisting}[breaklines]
 -tls-cipher @@@CIPHERSTRINGB@@@
 +\begin{lstlisting}
- tls-cipher DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-CAMELLIA256-SHA:DHE-RSA-AES256-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-RSA-AES128-SHA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
++tls-cipher %*CIPHERSTRINGB*)
  cipher AES-256-CBC
  auth SHA384
  
@@@ -284,7 -300,8 +283,7 @@@ remote-cert-tls serve
  tls-remote server.example.com
  \end{lstlisting}
  
 -\item[Justification for special settings (if needed):] \mbox{}\\
 -
 +\subsubsection{Justification for special settings}
  OpenVPN 2.3.1 changed the values that the \verb|tls-cipher| option
  expects from OpenSSL to IANA cipher names. That means from that
  version on you will get ``Deprecated TLS cipher name'' warnings for
@@@ -298,31 -315,31 +297,31 @@@ ECDHE suites
  
  The configuration shown above is compatible with all tested versions.
  
 -\item[References:] \mbox{}\\
  
 -\url{http://openvpn.net/index.php/open-source/documentation/security-overview.html}
 -
 -%\item[How to test:]
 +\subsubsection{References}
 +\begin{itemize}
 +  \item OpenVPN Documentation: \emph{Security Overview} \url{http://openvpn.net/index.php/open-source/documentation/security-overview.html}
 +\end{itemize}
  
 +%\subsubsection{How to test}
  
 -\item[Additional settings:] \mbox{}
  
 -\paragraph{Key renegotiation interval}\mbox{}
 +\subsubsection{Additional settings}
  
 +\paragraph{Key renegotiation interval}\mbox{}\\
  The default for renegotiation of encryption keys is one hour
  (\verb|reneg-sec 3600|). If you
  transfer huge amounts of data over your tunnel, you might consider
  configuring a shorter interval, or switch to a byte- or packet-based
  interval (\verb|reneg-bytes| or \verb|reneg-pkts|).
  
 -\paragraph{Fixing ``easy-rsa''}\mbox{}
 -
 +\paragraph{Fixing ``easy-rsa''}\mbox{}\\
  When installing an OpenVPN server instance, you are probably using
  {\it easy-rsa} to generate keys and certificates.
  The file \verb|vars| in the easyrsa installation directory has a
  number of settings that should be changed to secure values:
  
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  export KEY_SIZE=4096
  export KEY_EXPIRE=365
  export CA_EXPIRE=1826
@@@ -336,8 -353,8 +335,8 @@@ In addition, edit the \verb|pkitool| sc
  of \verb|sha1| with \verb|sha256|, to sign the certificates with
  SHA256.
  
 -\item[Limitations:] \mbox{}
  
 +\subsubsection{Limitations}
  Note that the ciphersuites shown by \verb|openvpn --show-tls| are {\it
  known}, but not necessarily {\it
  supported} \footnote{\url{https://community.openvpn.net/openvpn/ticket/304}}.
@@@ -346,6 -363,8 +345,6 @@@ Which cipher suite is actually used ca
  
  \verb|Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-CAMELLIA256-SHA, 2048 bit RSA|
  
 -\end{description}
 -
  
  % ---------------------------------------------------------------------- 
  \subsection{PPTP}
@@@ -365,7 -384,7 +364,7 @@@ The following settings reflect our reco
  \item[Tested with Version:] 
  9.1(3) - X-series model
  \item[Settings:] \mbox{}
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  crypto ipsec ikev2 ipsec-proposal AES-Fallback
   protocol esp encryption aes-256 aes-192 aes
   protocol esp integrity sha-512 sha-384 sha-256
diff --combined src/security.bib
  
  @techreport{TR02102,
    title      = {BSI TR-02102 Kryptographische Verfahren},
 -  author     = {Bundesamt f\"ur Sicherheit in der Informationstechnik (BSI)},
 +  author     = {Bundesamt für Sicherheit in der Informationstechnik (BSI)},
    year       = {2013},
    month      = {Jan},
    url        = {https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102_pdf}
    title      = {Security engineering},
    author     = {Anderson, Ross},
    year       = {2008},
-   publisher  = {Wiley. com}
+   publisher  = {Wiley.com},
+   url        = {http://www.cl.cam.ac.uk/~rja14/book.html},
  }
  
  @misc{tschofenig-webpki,
    month = 07,
    day = 17,
  }
+ @InProceedings{https13,
+       author = {Zakir Durumeric and James Kasten and Michael Bailey and J. Alex Halderman},
+       title = {Analysis of the {HTTPS} Certificate Ecosystem},
+       booktitle = {Proceedings of the 13th Internet Measurement Conference},
+       month = oct,
+       year = {2013},
+         url = {https://jhalderm.com/pub/papers/https-imc13.pdf},
+ }
+ @techreport{Wikipedia:TinyCA,
+    key       = {Wikipedia:TinyCA},
+    title     = {TinyCA},
+    institution = I_Wikipedia,
+    year      = {2013},
+    month     = Dec,
+    type      = {Wikipedia},
+    url       = {http://en.wikipedia.org/wiki/TinyCA},
+    note      = {Accessed 2013-12-24},
+ }
diff --combined src/theory/PKIs.tex
@@@ -1,15 -1,33 +1,33 @@@
  \section{Public Key Infrastructures}
  \label{section:PKIs}
  
- Public-Key Infrastructures aim to provide a way to simplify the verification of
- a certificate's trustworthiness.  For this, certificate authorities (CAs) are
- used to create a signature chain from the root CA down to the server (or client).
- Accepting a CA as a generally-trusted mediator solves the trust-scaling problem
- at the cost of introducing an actor that magically is more trustworthy.
+ Public-Key Infrastructures try to solve the problem of verifying
+ whether a public key belongs to a given entity, so as to prevent Man
+ In The Middle attacks.
  
- The first part of this section addresses how to obtain a certificate.  The
- second part offers recommendations on how to improve the security of your
- PKI.
+ There are two approaches to achieve that: {\it Certificate Authorities}
+ and the {\it Web of Trust}.
+ Certificate Authorities (CAs) sign end-entities' certificates, thereby
+ associating some kind of identity (e.g. a domain name or an email
+ address) with a public key. CAs are used with TLS and S/MIME
+ certificates, and the CA system has a big list of possible and real
+ problems which are summarized in section \ref{sec:hardeningpki} and
+ \cite{https13}.
+ The Web of Trust is a decentralized system where people sign each
+ others keys, so that there is a high chance that there is a ``trust
+ path'' from one key to another. This is used with PGP keys, and while
+ it avoids most of the problems of the CA system, it is more
+ cumbersome.
+ As alternatives to these public systems, there are two more choices:
+ running a private CA, and manually trusting keys (as it is used with
+ SSH keys or manually trusted keys in web browsers).
+ The first part of this section addresses how to obtain a certificate
+ in the CA system. The second part offers recommendations on how to
+ improve the security of your PKI.
  
  \subsection{Certificate Authorities}
  \label{sec:cas}
@@@ -31,6 -49,11 +49,11 @@@ for issuing certificates.  Finally, in 
  number of CAs exist that are generally well-known and well-accepted within
  the higher-education community.
  
+ A large number of CAs is pre-installed in client software's or
+ operating system's``trust stores''; depending on your application, you
+ have to select your CA according to this, or have a mechanism to
+ distribute the chosen CA's root certificate to the clients.
  When requesting a certificate from a CA, it is vital that you generate the
  key pair yourself.  In particular, the private key should never be known to
  the CA.  If a CA offers to generate the key pair for you, you should not
@@@ -41,7 -64,7 +64,7 @@@ tools.  On Unix-like systems, it is lik
  to you.  In this case, you can generate a private key and a corresponding
  certificate request as follows:
  
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  % openssl req -new -nodes -keyout <servername>.key -out <servername>.csr -newkey rsa:<keysize>
  Country Name (2 letter code) [AU]:DE
  State or Province Name (full name) [Some-State]:Bavaria
@@@ -82,6 -105,10 +105,10 @@@ issued a new root certificate, you can 
  % sudo ./CA.pl -newreq
  \end{lstlisting}
  
+ Alternatively, software such as TinyCA\cite{Wikipedia:TinyCA} that
+ acts as a ``wrapper'' around OpenSSL and tries to make life easier is
+ available.
  \subsubsection{Creating a Self-Signed Certificate}
  \label{sec:pki:selfsignedcert}
  If the desired trust level is very high and the number of systems involved
@@@ -16,11 -16,11 +16,11 @@@ throughout this document.\
  
  \subsubsection{Configuration A: Strong ciphers, fewer clients}
  
- At the time of writing we recommend the following set of strong cipher
+ At the time of writing, our recommendation is to use the following set of strong cipher
  suites which may be useful in an environment where one does not depend on many,
  different clients and where compatibility is not a big issue.  An example
  of such an environment might be machine-to-machine communication or corporate
- deployments where software that is to be used can be defined freely.
+ deployments where software that is to be used can be defined without restrictions.
  
  
  We arrived at this set of cipher suites by selecting:
@@@ -34,7 -34,7 +34,7 @@@
  
  This results in the OpenSSL string:
  
 -\begin{lstlisting}[breaklines]
 +\begin{lstlisting}
  'EDH+aRSA+AES256:EECDH+aRSA+AES256:!SSLv3'
  \end{lstlisting}
  
@@@ -69,12 -69,12 +69,12 @@@ Win 7 and Win 8.1 crypto stack, Opera 1
  
  
  
- \subsubsection{Configuration B: Weaker ciphers, more compatibility}
+ \subsubsection{Configuration B: Weaker ciphers but better compatibility}
  
  In this section we propose a slightly weaker set of cipher suites.  For
- example, there are some known weaknesses for the SHA-1 hash function that is
+ example, there are known weaknesses for the SHA-1 hash function that is
  included in this set.  The advantage of this set of cipher suites is not only
the compatibility with a broad range of clients, but also less computational
better compatibility with a broad range of clients, but also less computational
  workload on the provisioning hardware.
  \\
  
@@@ -91,8 -91,8 +91,8 @@@ We arrived at this set of cipher suite
  This results in the OpenSSL string:
  
  %'EDH+CAMELLIA:EDH+aRSA:EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EECDH:+CAMELLIA256:+AES256:+CAMELLIA128:+AES128:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA'
 -\begin{lstlisting}[breaklines]
 -@@@CIPHERSTRINGB@@@
 +\begin{lstlisting}
 +%*\cipherstringB*)
  \end{lstlisting}
  
  \todo{make a column for cipher chaining mode}
@@@ -135,8 -135,8 +135,8 @@@ DH-parameter length limitation (1024 bi
  \paragraph*{Explanation: }
  
  For a detailed explanation of the cipher suites chosen, please see
- \ref{section:ChoosingYourOwnCipherSuites}. In short, finding the perfect cipher
- string is impossible and must be a tradeoff between compatibility and security. 
+ \ref{section:ChoosingYourOwnCipherSuites}. In short, finding a single perfect cipher
+ string is practically impossible and there must be a tradeoff between compatibility and security. 
  On the one hand there are mandatory and optional ciphers defined in a few RFCs, 
  on the other hand there are clients and servers only implementing subsets of the 
  specification.