Merge remote-tracking branch 'upstream/master'
authorsebix <szebi@gmx.at>
Sat, 11 Jan 2014 20:24:55 +0000 (21:24 +0100)
committersebix <szebi@gmx.at>
Sat, 11 Jan 2014 20:24:55 +0000 (21:24 +0100)
34 files changed:
src/Makefile
src/acknowledgements.tex
src/applied-crypto-hardening.bib
src/cipherStringB.txt [deleted file]
src/common/cipherStringB.tex [new file with mode: 0644]
src/common/commands.tex
src/common/style.tex
src/disclaimer.tex
src/further_research.tex
src/iacr_cryptodb.bib
src/links.tex
src/perlify.pl [deleted file]
src/practical_settings.tex
src/practical_settings/DBs.tex
src/practical_settings/GPG.tex
src/practical_settings/im.tex
src/practical_settings/mailserver.tex
src/practical_settings/proxy_solutions.tex
src/practical_settings/ssh.tex
src/practical_settings/vpn.tex
src/practical_settings/webserver.tex
src/scope.tex
src/security.bib
src/suggested_reading.tex
src/template.tex
src/theory/PKIs.tex
src/theory/RNGs.tex
src/theory/cipher_suites.tex
src/theory/cipher_suites/architecture.tex
src/theory/cipher_suites/choosing.tex
src/theory/cipher_suites/recommended.tex
src/theory/keylengths.tex
src/title.tex
src/tools.tex

index 98ead94..b236929 100644 (file)
@@ -2,12 +2,11 @@ NOW := $(shell date)
 
 all:   pdf html md
 
-%_generated.tex: %.tex
-       ./perlify.pl
+once:
+       pdflatex applied-crypto-hardening
 
 pdf: 
        ./update-metadata-for-gitinfo
-       ./perlify.pl
        pdflatex applied-crypto-hardening
        bibtex applied-crypto-hardening
        while grep -s "Rerun to get cross-references right" \
@@ -48,7 +47,6 @@ clean:
             applied-crypto-hardening.log applied-crypto-hardening.pdf   \
             applied-crypto-hardening.toc applied-crypto-hardening.markdown \
                        applied-crypto-hardening.out
-       find . -name "*_generated.tex" -exec rm \{\} \;
        rm -rf applied-crypto-hardening/
        rm -rf gitHeadInfo.gin
-       rm applied-crypto-hardening.txt
+       if [ -f "applied-crypto-hardening.txt" ]; then rm "applied-crypto-hardening.txt"; fi
index 401e9a3..181565b 100644 (file)
@@ -1,4 +1,4 @@
-\newpage
+\clearpage
 \section*{Acknowledgements}
 \label{section:Reviewers}
 
@@ -9,13 +9,13 @@ Brown, Scott \\
 Brulebois, Cyril \\
 Dirksen-Thedens, Mathis \\
 Dulaunoy, Alexandre \\
-G\"uhring Philipp  \\
+Gühring Philipp  \\
 Grigg, Ian  \\
 Horenbeck, Maarten \\
 Huebl, Axel \\
 Kovacic, Daniel \\
 Lenzhofer, Stefan \\
-Lor\"unser, Thomas \\
+Lorünser, Thomas \\
 Millauer, Tobias \\
 O'Brien, Hugh \\
 Pacher, Christoph \\
@@ -25,7 +25,7 @@ Petukhova, Anna (Logo) \\
 Pichler, Patrick \\
 Roeckx, Kurt \\
 Seidl, Eva (PDF layout) \\
-Wagner, Sebastian (``sebix'') \\
+Wagner, Sebastian («sebix») \\
 Zangerl, Alexander \\
 }\end{multicols}
 
index ba07a36..244d026 100644 (file)
@@ -26,7 +26,7 @@
 }
 
 @misc{muenz-compression,
-  author = {{G. M\"unz and L. Braun}},
+  author = {{G. Münz and L. Braun}},
   title = {Lossless Compression for IP Flow Information Export (IPFIX)},
   howpublished = {https://tools.ietf.org/html/draft-muenz-ipfix-compression-00},
   year = 2008,
diff --git a/src/cipherStringB.txt b/src/cipherStringB.txt
deleted file mode 100644 (file)
index 2380901..0000000
+++ /dev/null
@@ -1 +0,0 @@
-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:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA
diff --git a/src/common/cipherStringB.tex b/src/common/cipherStringB.tex
new file mode 100644 (file)
index 0000000..eb5e55f
--- /dev/null
@@ -0,0 +1 @@
+\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:!DSS:!RC4:!SEED:!ECDSA:CAMELLIA256-SHA:AES256-SHA:CAMELLIA128-SHA:AES128-SHA}
index 689ed13..5456ba2 100644 (file)
   \rule{\linewidth}{1pt}%
 }
 
-\CatchFileDef{\CIPHERSTRINGB}{cipherStringB.txt}{\endlinechar=-1 }%
+\newcommand*{\paragraphDiamond}[1]{\paragraph{#1} \hspace{-6pt} \ensuremath{\diamond} }
+
+%%% 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?
+\CatchFileDef{\cipherStringB}{common/cipherStringB.tex}{\endlinechar=-1 }%
+
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "../applied-crypto-hardening"
index cce0075..1f7ba1e 100644 (file)
@@ -61,8 +61,6 @@
 \ofoot%
 [page \thepage\ of \pageref{LastPage}]%
 {page \thepage\ of \pageref{LastPage}}
-\renewcommand*{\chapterpagestyle}{scrheadings}
-\pagestyle{scrheadings}
 
 % Epigraph / dictum
 \newcommand*{\epigraph}[3][]{\dictum[#3]{#2}\bigskip}
 %tell TeX where to look for graphics/logos
 \graphicspath{ {/img/} }
 
+% 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=9pt,innerrightmargin=0,innertopmargin=3pt,innerbottommargin=2pt
+}
+%\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}}
 % Listings
 \lstset{
-%  literate={###CIPHERSTRINGB###}{{\CIPHERSTRINGB}}254,
   basicstyle=\ttfamily,
   keywordstyle=\color{OliveGreen},
   commentstyle=\color{gray},
   backgroundcolor=\color{lightlightgray},
   upquote=true,
+  showstringspaces=false,
   tabsize=2,
   captionpos=b,
   breaklines=true,
   breakatwhitespace=false,
   inputencoding=utf8,
-  prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}},
+  breakatwhitespace=false,
+  showspaces=false,
+  columns=fullflexible,                   % Column format: no spaces are inserted for monospaced appearance
+  breakindent=10pt,
   morekeywords={__global__, __device__},% 
   escapechar=\`,
+  escapeinside={\%*}{*)},                 % Escape TeX commands inside %* and *)
+%  prebreak=\mbox{$\curvearrowright$},     % Disply curved arrow before linebreak
+  prebreak=\small\symbol{'134},
 }
 
 
 \setcounter{totalnumber}{20}
 \setcounter{dbltopnumber}{9}
 
+% Starred lists (\begin{itemize*}) for less space between items
+\usepackage{mdwlist}
+
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "../applied-crypto-hardening"
index 577945c..632e263 100644 (file)
@@ -70,21 +70,21 @@ secure.  We the authors, need this document as much as the reader needs it.
 \label{section:Scope}
 
 In this guide, we restricted ourselves to:
-\begin{itemize}
-\item Internet-facing services
-\item Commonly used services
-\item Devices which are used in business environments (this specifically excludes XBoxes, Playstations and similar consumer devices)
-\item OpenSSL 
-\end{itemize}
+\begin{itemize*}
+  \item Internet-facing services
+  \item Commonly used services
+  \item Devices which are used in business environments (this specifically excludes XBoxes, Playstations and similar consumer devices)
+  \item OpenSSL 
+\end{itemize*}
 
 We explicitly excluded:
-\begin{itemize}
-\item Specialized systems (such as medical devices, most embedded systems, etc.)
-\item Wireless Access Points
-\item Smart-cards/chip cards
-%\item Advice on running a PKI or a CA
-%\item Services which should be run only in an internal network and never face the Internet.
-\end{itemize}
+\begin{itemize*}
+  \item Specialized systems (such as medical devices, most embedded systems, etc.)
+  \item Wireless Access Points
+  \item Smart-cards/chip cards
+%  \item Advice on running a PKI or a CA
+%  \item Services which should be run only in an internal network and never face the Internet.
+\end{itemize*}
 
 
 %%% Local Variables: 
index ba07165..cd5aab7 100644 (file)
@@ -3,48 +3,48 @@
 The following is a list of services, software packages, hardware devices or protocols that we considered documenting but either did not manage to document yet or might be able to document later. We encourage input from the Internet community. 
 
 \begin{multicols}{3}
-\begin{itemize}
-\item whatsapp (might be problematic\\ since a user/admin can't change anything)
-\item Lync
-\item Skype (might be problematic since a user/admin can't change anything)
-\item Wi-Fi APs, 802.1X
-\item Tomcat
-\item SIP 
-\item SRTP 
-\item DNSSec (mention BCPs) 
-\item DANE
-\item TOR 
-\item S/Mime (check are there any BCPs? )
-\item TrueCrypt, LUKS, FileVault
-\item AFS 
-\item Kerberos 
-\item NNTP 
-\item NTPs tlsdate 
-\item BGP / OSPF 
-\item SILC
-\item LDAP
-\item seclayer-tcp
-\item Commerical network equipment vendors
-\item RADIUS 
-\item Moxa , APC, und co... ICS . Ethernet to serial 
-\item telnet (only sensible recommendation: \emph{DON't!!})
-\item rsyslog 
-\item v6 spoofing (look at work by Ferndo Gont, Marc Heuse, et. al.)
-\item tinc
-\item racoon
-\item l2tp
-\item rsync 
-\item telnets 
-\item ftps 
-\item webmin (probably the same recommendations as with Apache apply, but where does that need to be configured?)
-\item plesk (same as webmin)
-\item phpmyadmin (same as webmin)
-\item DSL modems (where to start?)
-\item UPnP, natPmp 
-\item SAML federated auth providers \footnote{e.g., all the REFEDS folks (\url{https://refeds.org/})), including InCommon (\url{http://www.incommon.org/federation/metadata.html}
+\begin{itemize*}
+  \item whatsapp (might be problematic since a user/admin can't change anything)
+  \item Lync
+  \item Skype (might be problematic since a user/admin can't change anything)
+  \item Wi-Fi APs, 802.1X
+  \item Tomcat
+  \item SIP
+  \item SRTP
+  \item DNSSec (mention BCPs)
+  \item DANE
+  \item TOR
+  \item S/Mime (check are there any BCPs? )
+  \item TrueCrypt, LUKS, FileVault
+  \item AFS
+  \item Kerberos
+  \item NNTP
+  \item NTPs tlsdate
+  \item BGP / OSPF
+  \item SILC
+  \item LDAP
+  \item seclayer-tcp
+  \item Commerical network equipment vendors
+  \item RADIUS
+  \item Moxa , APC, und co... ICS . Ethernet to serial
+  \item telnet (only sensible recommendation: \emph{DON't!!})
+  \item rsyslog
+  \item v6 spoofing (look at work by Ferndo Gont, Marc Heuse, et. al.)
+  \item tinc
+  \item racoon
+  \item l2tp
+  \item rsync
+  \item telnets
+  \item ftps
+  \item webmin (probably the same recommendations as with Apache apply, but where does that need to be configured?)
+  \item plesk (same as webmin)
+  \item phpmyadmin (same as webmin)
+  \item DSL modems (where to start?)
+  \item UPnP, natPmp
+  \item SAML federated auth providers \footnote{e.g., all the REFEDS folks (\url{https://refeds.org/})), including InCommon (\url{http://www.incommon.org/federation/metadata.html}
   \url{https://wiki.shibboleth.net/confluence/display/SHIB2/TrustManagement} }
-\item Microsoft SQL Server
-\end{itemize}
+  \item Microsoft SQL Server
+\end{itemize*}
 \end{multicols}
 
 %%% Local Variables: 
index 715582a..a83e4f4 100644 (file)
@@ -15,7 +15,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{ches-2013-24751,
  title = {Fides: Lightweight Authenticated Cipher with Side-Channel Resistance for Constrained Hardware},
- author = {Beg&uuml;l Bilgin and Andrey Bogdanov and Miroslav Knezevic and Florian Mendel and Qingju Wang},
+ author = {Begül Bilgin and Andrey Bogdanov and Miroslav Knezevic and Florian Mendel and Qingju Wang},
  booktitle = {CHES},
  pages = {142--158},
  doi = {10.1007/978-3-642-40349-1_9},
@@ -274,7 +274,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{ches-2013-24777,
  title = {Smaller Keys for Code-Based Cryptography: QC-MDPC McEliece Implementations on Embedded Devices},
- author = {Stefan Heyse and Ingo von Maurich and Tim G&uuml;neysu},
+ author = {Stefan Heyse and Ingo von Maurich and Tim Güneysu},
  booktitle = {CHES},
  pages = {273--292},
  doi = {10.1007/978-3-642-40349-1_16},
@@ -324,7 +324,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{crypto-2013-24602,
  title = {On the Function Field Sieve and the Impact of Higher Splitting Probabilities - Application to Discrete Logarithms in and},
- author = {Faruk G&ouml;loglu and Robert Granger and Gary McGuire and Jens Zumbr&auml;gel},
+ author = {Faruk Göloglu and Robert Granger and Gary McGuire and Jens Zumbrägel},
  booktitle = {CRYPTO},
  pages = {109--128},
  doi = {10.1007/978-3-642-40084-1_7},
@@ -723,7 +723,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{crypto-2013-24642,
  title = {Efficient Multiparty Protocols via Log-Depth Threshold Formulae - (Extended Abstract)},
- author = {Gil Cohen and Ivan Damgård and Yuval Ishai and Jonas K&ouml;lker and Peter Bro Miltersen and Ran Raz and Ron D. Rothblum},
+ author = {Gil Cohen and Ivan Damgård and Yuval Ishai and Jonas Kölker and Peter Bro Miltersen and Ran Raz and Ron D. Rothblum},
  booktitle = {CRYPTO},
  pages = {185--202},
  doi = {10.1007/978-3-642-40084-1_11},
@@ -2267,7 +2267,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{asiacrypt-2012-24431,
  title = {A Mix-Net from Any CCA2 Secure Cryptosystem},
- author = {Shahram Khazaei and Tal Moran and Douglas Wikstr&ouml;m},
+ author = {Shahram Khazaei and Tal Moran and Douglas Wikström},
  booktitle = {ASIACRYPT},
  volume = {7658},
  pages = {607--625},
@@ -2377,7 +2377,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{asiacrypt-2012-24441,
  title = {PRINCE - A Low-Latency Block Cipher for Pervasive Computing Applications - Extended Abstract},
- author = {Julia Borghoff and Anne Canteaut and Tim G&uuml;neysu and Elif Bilge Kavun and Miroslav Knezevic and Lars R. Knudsen and Gregor Leander and Ventzislav Nikov and Christof Paar and Christian Rechberger and Peter Rombouts and S&oslash;ren S. Thomsen and Tolga Yal&ccedil;in},
+ author = {Julia Borghoff and Anne Canteaut and Tim Güneysu and Elif Bilge Kavun and Miroslav Knezevic and Lars R. Knudsen and Gregor Leander and Ventzislav Nikov and Christof Paar and Christian Rechberger and Peter Rombouts and S&oslash;ren S. Thomsen and Tolga Yal&ccedil;in},
  booktitle = {ASIACRYPT},
  volume = {7658},
  pages = {208--225},
@@ -2410,7 +2410,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{asiacrypt-2012-24444,
  title = {Understanding Adaptivity: Random Systems Revisited},
- author = {Dimitar Jetchev and Onur &Ouml;zen and Martijn Stam},
+ author = {Dimitar Jetchev and Onur Özen and Martijn Stam},
  booktitle = {ASIACRYPT},
  volume = {7658},
  pages = {313--330},
@@ -2573,7 +2573,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{ches-2012-24380,
  title = {Towards One Cycle per Bit Asymmetric Encryption: Code-Based Cryptography on Reconfigurable Hardware},
- author = {Stefan Heyse and Tim G&uuml;neysu},
+ author = {Stefan Heyse and Tim Güneysu},
  booktitle = {CHES},
  volume = {7428},
  pages = {340--355},
@@ -2584,7 +2584,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{ches-2012-24381,
  title = {Practical Security Analysis of PUF-Based Two-Player Protocols},
- author = {Ulrich R&uuml;hrmair and Marten van Dijk},
+ author = {Ulrich Rührmair and Marten van Dijk},
  booktitle = {CHES},
  volume = {7428},
  pages = {251--267},
@@ -2617,7 +2617,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{ches-2012-24384,
  title = {Simple Photonic Emission Analysis of AES - Photonic Side Channel Analysis for the Rest of Us},
- author = {Alexander Schl&ouml;sser and Dmitry Nedospasov and Juliane Kr&auml;mer and Susanna Orlic and Jean-Pierre Seifert},
+ author = {Alexander Schlösser and Dmitry Nedospasov and Juliane Krämer and Susanna Orlic and Jean-Pierre Seifert},
  booktitle = {CHES},
  volume = {7428},
  pages = {41--57},
@@ -2650,7 +2650,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{ches-2012-24387,
  title = {On the Design of Hardware Building Blocks for Modern Lattice-Based Encryption Schemes},
- author = {Norman G&ouml;ttert and Thomas Feller and Michael Schneider 0002 and Johannes Buchmann and Sorin A. Huss},
+ author = {Norman Göttert and Thomas Feller and Michael Schneider 0002 and Johannes Buchmann and Sorin A. Huss},
  booktitle = {CHES},
  volume = {7428},
  pages = {512--529},
@@ -2738,7 +2738,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{ches-2012-24395,
  title = {Threshold Implementations of All 3 \&times;3 and 4 \&times;4 S-Boxes},
- author = {Beg&uuml;l Bilgin and Svetla Nikova and Ventzislav Nikov and Vincent Rijmen and Georg St&uuml;tz},
+ author = {Begül Bilgin and Svetla Nikova and Ventzislav Nikov and Vincent Rijmen and Georg Stütz},
  booktitle = {CHES},
  volume = {7428},
  pages = {76--91},
@@ -2749,7 +2749,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{ches-2012-24396,
  title = {Practical Lattice-Based Cryptography: A Signature Scheme for Embedded Systems},
- author = {Tim G&uuml;neysu and Vadim Lyubashevsky and Thomas P&ouml;ppelmann},
+ author = {Tim Güneysu and Vadim Lyubashevsky and Thomas Pöppelmann},
  booktitle = {CHES},
  volume = {7428},
  pages = {530--547},
@@ -2892,7 +2892,7 @@ COMMENT{IACR BibTeX file created by Kevin McCurley.  This work is
 
 @inproceedings{ches-2012-24409,
  title = {PUFs: Myth, Fact or Busted? A Security Evaluation of Physically Unclonable Functions (PUFs) Cast in Silicon},
- author = {Stefan Katzenbeisser and &Uuml;nal Ko&ccedil;abas and Vladimir Rozic and Ahmad-Reza Sadeghi and Ingrid Verbauwhede and Christian Wachsmann},
+ author = {Stefan Katzenbeisser and Ünal Ko&ccedil;abas and Vladimir Rozic and Ahmad-Reza Sadeghi and Ingrid Verbauwhede and Christian Wachsmann},
  booktitle = {CHES},
  volume = {7428},
  pages = {283--301},
index ef59353..275b317 100644 (file)
@@ -2,27 +2,27 @@
 \label{cha:links}
 %% NOTE: this should re restructured...
 
-\begin{itemize}
-\item IANA official list of Transport Layer Security (TLS) Parameters: \url{https://www.iana.org/assignments/tls-parameters/tls-parameters.txt}
-\item SSL cipher settings: \url{http://www.skytale.net/blog/archives/22-SSL-cipher-setting.html}
-\item Elliptic curves and their implementation (04 Dec 2010): \url{https://www.imperialviolet.org/2010/12/04/ecc.html}
-\item A (relatively easy to understand) primer on elliptic curve cryptography: \url{http://arstechnica.com/security/2013/10/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography}
-\item Duraconf, A collection of hardened configuration files for SSL/TLS services (Jacob Appelbaum's github): \url{https://github.com/ioerror/duraconf}
-\item Attacks on SSL a comprehensive study of BEAST, CRIME, TIME, BREACH, LUCKY 13 \& RC4 Biases: \url{https://www.isecpartners.com/media/106031/ssl_attacks_survey.pdf}
-\item EFF How to deploy HTTPS correctly: \url{https://www.eff.org/https-everywhere/deploying-https}
-\item Bruce Almighty: Schneier preaches security to Linux faithful (on not recommending to use Blowfish anymore in favor of Twofish): \url{https://www.computerworld.com.au/article/46254/bruce_almighty_schneier_preaches_security_linux_faithful/?pp=3}
-\item Implement FIPS 183-3 for DSA keys (1024bit constraint): \url{https://bugzilla.mindrot.org/show_bug.cgi?id=1647}
-\item Elliptic Curve Cryptography in Practice: \url{http://eprint.iacr.org/2013/734.pdf}
-\item Factoring as a Service: \url{http://crypto.2013.rump.cr.yp.to/981774ce07e51813fd4466612a78601b.pdf}
-\item Black Ops of TCP/IP 2012: \url{http://dankaminsky.com/2012/08/06/bo2012/}
-\item SSL and the Future of Authenticity, Moxie Marlinspike - Black Hat USA 2011: \url{http://www.youtube.com/watch?v=Z7Wl2FW2TcA}
-\item ENISA - Algorithms, Key Sizes and Parameters Report (Oct.'13) \url{http://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-sizes-and-parameters-report}
-\item Diffie-Hellman Groups \url{http://ibm.co/18lslZf}
-\item Diffie-Hellman Groups standardized in RFC3526~\cite{rfc3526} \url{http://datatracker.ietf.org/doc/rfc3526/}
-\item ECC-enabled GnuPG per RFC6637~\cite{rfc6637} \url{https://code.google.com/p/gnupg-ecc}
-\item TLS Security (Survey + Lucky13 + RC4 Attack) by Kenny Paterson \url{https://www.cosic.esat.kuleuven.be/ecc2013/files/kenny.pdf}
-\item Ensuring High-Quality Randomness in Cryptographic Key Generation \url{http://arxiv.org/abs/1309.7366v1}
-\item Wikipedia: Ciphertext Stealing \url{http://en.wikipedia.org/wiki/Ciphertext_stealing}
-\item Wikipedia: Malleability (Cryptography) \url{http://en.wikipedia.org/wiki/Malleability_(cryptography)}
-\item Ritter's Crypto Glossary and Dictionary of Technical Cryptography \url{http://www.ciphersbyritter.com/GLOSSARY.HTM}
-\end{itemize}
+\begin{itemize*}
+  \item IANA official list of Transport Layer Security (TLS) Parameters: \url{https://www.iana.org/assignments/tls-parameters/tls-parameters.txt}
+  \item SSL cipher settings: \url{http://www.skytale.net/blog/archives/22-SSL-cipher-setting.html}
+  \item Elliptic curves and their implementation (04 Dec 2010): \url{https://www.imperialviolet.org/2010/12/04/ecc.html}
+  \item A (relatively easy to understand) primer on elliptic curve cryptography: \url{http://arstechnica.com/security/2013/10/a-relatively-easy-to-understand-primer-on-elliptic-curve-cryptography}
+  \item Duraconf, A collection of hardened configuration files for SSL/TLS services (Jacob Appelbaum's github): \url{https://github.com/ioerror/duraconf}
+  \item Attacks on SSL a comprehensive study of BEAST, CRIME, TIME, BREACH, LUCKY 13 \& RC4 Biases: \url{https://www.isecpartners.com/media/106031/ssl_attacks_survey.pdf}
+  \item EFF How to deploy HTTPS correctly: \url{https://www.eff.org/https-everywhere/deploying-https}
+  \item Bruce Almighty: Schneier preaches security to Linux faithful (on not recommending to use Blowfish anymore in favor of Twofish): \url{https://www.computerworld.com.au/article/46254/bruce_almighty_schneier_preaches_security_linux_faithful/?pp=3}
+  \item Implement FIPS 183-3 for DSA keys (1024bit constraint): \url{https://bugzilla.mindrot.org/show_bug.cgi?id=1647}
+  \item Elliptic Curve Cryptography in Practice: \url{http://eprint.iacr.org/2013/734.pdf}
+  \item Factoring as a Service: \url{http://crypto.2013.rump.cr.yp.to/981774ce07e51813fd4466612a78601b.pdf}
+  \item Black Ops of TCP/IP 2012: \url{http://dankaminsky.com/2012/08/06/bo2012/}
+  \item SSL and the Future of Authenticity, Moxie Marlinspike - Black Hat USA 2011: \url{http://www.youtube.com/watch?v=Z7Wl2FW2TcA}
+  \item ENISA - Algorithms, Key Sizes and Parameters Report (Oct.'13) \url{http://www.enisa.europa.eu/activities/identity-and-trust/library/deliverables/algorithms-key-sizes-and-parameters-report}
+  \item Diffie-Hellman Groups \url{http://ibm.co/18lslZf}
+  \item Diffie-Hellman Groups standardized in RFC3526~\cite{rfc3526} \url{http://datatracker.ietf.org/doc/rfc3526/}
+  \item ECC-enabled GnuPG per RFC6637~\cite{rfc6637} \url{https://code.google.com/p/gnupg-ecc}
+  \item TLS Security (Survey + Lucky13 + RC4 Attack) by Kenny Paterson \url{https://www.cosic.esat.kuleuven.be/ecc2013/files/kenny.pdf}
+  \item Ensuring High-Quality Randomness in Cryptographic Key Generation \url{http://arxiv.org/abs/1309.7366v1}
+  \item Wikipedia: Ciphertext Stealing \url{http://en.wikipedia.org/wiki/Ciphertext_stealing}
+  \item Wikipedia: Malleability (Cryptography) \url{http://en.wikipedia.org/wiki/Malleability_(cryptography)}
+  \item Ritter's Crypto Glossary and Dictionary of Technical Cryptography \url{http://www.ciphersbyritter.com/GLOSSARY.HTM}
+\end{itemize*}
diff --git a/src/perlify.pl b/src/perlify.pl
deleted file mode 100755 (executable)
index c1caca3..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/usr/bin/env perl
-
-use strict;
-use File::Basename;
-
-my $debug=1;
-my @exclude=('DH.tex', 'ECC.tex', 'LATER.tex', 'PKIs.tex', 'RNGs.tex', 'abstract.tex', 'acknowledgements.tex', 'applied-crypto-hardening.tex', 'bib.tex', 'cipher_suites.tex', 'disclaimer.tex', 'further_research.tex', 'howtoread.tex', 'keylengths.tex', 'links.tex', 'methods.tex', 'motivation.tex', 'practical_settings.tex', 'scope.tex', 'ssllibs.tex', 'suggested_reading.tex', 'template.tex', 'tools.tex');
-
-my $cipherStrB=`cat cipherStringB.txt`;
-chomp $cipherStrB;
-
-my @files=`find . -name "*.tex" -a \! -name "*_generated.tex" -print`;
-my $f;
-
-foreach  $f ( @files)  {
-       chomp $f;
-       $f =~ /(.*)\.tex/;
-       my $fbasename = basename($f);
-       my $ftex = "$1_generated.tex";
-
-       system("grep", "-q", "\@\@\@CIPHERSTRINGB\@\@\@" , $f);
-       if ($? eq 0 ) { #and not (/$fbasename/ ~~ @exclude)) {
-
-               print "file = $f\n" if $debug;
-               print "ftex = $ftex\n" if $debug;
-
-               open(FH,    "<", $f ) or die "could not open file $f: $!";
-               open(FHOUT, ">", $ftex ) or die "could not open file $ftex: $!";
-               
-               while (<FH>) {
-                       $_ =~ s/\@\@\@CIPHERSTRINGB\@\@\@/$cipherStrB/g;
-                       print FHOUT $_;
-               }
-       }
-       else {
-               print "skipping file $f\n" if $debug;
-       }
-}
index d588f97..0ba7045 100644 (file)
@@ -1,12 +1,12 @@
 \section{Webservers}
 \label{sec:webservers}
-\input{practical_settings/webserver_generated}
+\input{practical_settings/webserver}
 \section{SSH}
 \label{sec:ssh}
 \input{practical_settings/ssh}
 \section{Mail Servers}
 \label{sec:mail-servers}
-\input{practical_settings/mailserver_generated}
+\input{practical_settings/mailserver}
 \section{VPNs}
 \label{sec:vpns}
 \input{practical_settings/vpn}
 \input{practical_settings/im}
 \section{Database Systems}
 \label{sec:database-systems}
-\input{practical_settings/DBs_generated}
+\input{practical_settings/DBs}
 \section{Intercepting proxy solutions and reverse proxies}
 \label{sec:interc-proxy-solut}
-\input{practical_settings/proxy_solutions_generated}
+\input{practical_settings/proxy_solutions}
 
 %%% Local Variables: 
 %%% mode: latex
index 5508396..427142a 100644 (file)
@@ -2,77 +2,76 @@
 % 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 Versions}
+\todo{not tested yet}
 
-\item[References:] (German)
-{\small \url{http://www.telekom.com/static/-/155996/7/technische-sicherheitsanforderungen-si}}
 
-Please read the following pages about SSL and ciphersuites:\\
-p. 129 -Req 396 and Req 397 \\
+\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*}
+
 
-\end{description}
 
 %% ---------------------------------------------------------------------- 
-%%\subsubsection{SQL Server}
+%%\subsection{SQL Server}
 %%\todo{write this}
 
 
 
-
 %% ---------------------------------------------------------------------- 
-\subsubsection{MySQL}
+\subsection{MySQL}
 
-\begin{description}
-\item[Tested with Version:] Debian Wheezy and MySQL 5.5
 
-\item[Settings:] \mbox{}
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item Debian Wheezy 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
 ssl-cert=/etc/mysql/ssl/server-cert.pem
 ssl-key=/etc/mysql/ssl/server-key.pem
-ssl-cipher=@@@CIPHERSTRINGB@@@
+ssl-cipher=%*\cipherStringB*)
 \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}}
 
-\item[How to test:]
+\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*}
 
+
+\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
-
-\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}}
+\subsection{DB2}
+\subsubsection{Tested with Version}
+\todo{not tested}
 
 
-\paragraph*{ssl\_cipherspecs}\mbox{}\\
+\subsubsection{Settings}
+\paragraphDiamond{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}[breaklines]
+\begin{lstlisting}
 # recommended and supported ciphersuites 
 
 db2 update dbm cfg using SSL_CIPHERSPECS 
@@ -94,54 +93,54 @@ 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}
-
-%% ---------------------------------------------------------------------- 
-
-\subsubsection{PostgreSQL}
-
-\begin{description}
-\item[Tested with Version:] Debian Wheezy and PostgreSQL 9.1
-
-\item[References:]
 
-It's recommended to read 
+\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*}
 
-{\small \url{http://www.postgresql.org/docs/current/static/runtime-config-connection.html#RUNTIME-CONFIG-CONNECTION-SECURITY}}
-{\small \url{http://www.postgresql.org/docs/current/static/ssl-tcp.html}}
-{\small \url{http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html}}
+%% ---------------------------------------------------------------------- 
 
-\item[Settings:] \mbox{}
+\subsection{PostgreSQL}
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item Debian Wheezy 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*}
 
 
-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}
+\begin{lstlisting}
 #>=8.3
 ssl = on 
-ssl_ciphers = '@@@CIPHERSTRINGB@@@'
+ssl_ciphers = '%*\cipherStringB*)'
 \end{lstlisting}
 
 
+\subsubsection{References}
+\begin{itemize*}
+  \item It's recommended to read \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}
+  \item PostgreSQL Documentation on \emph{host-based authentication}: \url{http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html}
+\end{itemize*}
 
-\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}
-
index dabaf4d..d5811a1 100644 (file)
@@ -5,12 +5,12 @@ Research on SHA-1 conducted back in 2005\footnote{\url{https://www.schneier.com/
 
 
 When using PGP, there are a couple of things to take care of:
-\begin{itemize}
-\item keylengths (see section \ref{section:keylengths})
-\item randomness (see section \ref{section:RNGs})
-\item preference of symmetric encryption algorithm (see section \ref{section:CipherSuites})
-\item preference of hash function (see section \ref{section:CipherSuites})
-\end{itemize}
+\begin{itemize*}
+  \item keylengths (see section \ref{section:keylengths})
+  \item randomness (see section \ref{section:RNGs})
+  \item preference of symmetric encryption algorithm (see section \ref{section:CipherSuites})
+  \item preference of hash function (see section \ref{section:CipherSuites})
+\end{itemize*}
 
 Properly dealing with key material, passphrases and the web-of-trust is outside of the scope of this document. The GnuPG website\footnote{\url{http://www.gnupg.org/}} has a good tutorial on PGP.
 
@@ -19,7 +19,7 @@ This \href{https://www.debian-administration.org/users/dkg/weblog/48}{Debian How
 \subsubsection{Hashing}
 Avoid SHA-1 in GnuPG. Edit \$HOME/.gnupg/gpg.conf:
 
-\begin{lstlisting}[breaklines]
+\begin{lstlisting}
 personal-digest-preferences SHA256
 cert-digest-algo SHA256
 default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
index 67f2d5c..8a42c05 100644 (file)
@@ -1,32 +1,28 @@
-%%\subsection{Instant Messaging Systems}
-\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 \emph{Peter's manifesto}\footnote{\url{https://github.com/stpeter/manifesto}}.
 
 In short:
-\begin{itemize}
+\begin{itemize*}
     \item require the use of TLS for both client-to-server and server-to-server connections
     \item prefer or require TLS cipher suites that enable forward secrecy
     \item deploy certificates issued by well-known and widely-deployed certification authorities (CAs)
-\end{itemize}
+\end{itemize*}
 
 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, version 2.1.10-4+deb7u1
-
-\item[Settings:] \mbox{}
+\subsection{ejabberd}
 
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item Debian Wheezy 2.1.10-4+deb7u1
+\end{itemize*}
 
-ejabberd is one of the popular Jabber servers.  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, [
@@ -48,40 +44,43 @@ configuration\footnote{\url{http://www.process-one.net/docs/ejabberd/guide_en.ht
 {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}
+\begin{itemize*}
+  \item \url{https://xmpp.net} is a practical website to test Jabber server configurations.
+\end{itemize*}
 
 
-\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:
-\begin{itemize}
-    \item Authentication
-    \item Integrity
-    \item Confidentiality
-    \item Forward secrecy
-\end{itemize}
+\begin{itemize*}
+  \item Authentication
+  \item Integrity
+  \item Confidentiality
+  \item Forward secrecy
+\end{itemize*}
 
 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.
 
-\subsubsection{IRC}
 
-There are numerous implementations of IRC servers.  In this section, we choose \emph{Charybdis} which serves as basis for \emph{ircd-seven}\footnote{\url{https://dev.freenode.net/redmine/projects/ircd-seven}}, developed and used by freenode. Freenode is actually the biggest IRC network\footnote{\url{http://irc.netsplit.de/networks/top10.php}}.  \emph{Charybdis} is part of the \emph{Debian} \& \emph{Ubuntu} distributions.
+%%---------------------------------------------------------------------- 
+\subsection{Charybdis}
+There are numerous implementations of IRC servers.  In this section, we choose \emph{Charybdis} which serves as basis for \emph{ircd-seven}\footnote{\url{https://dev.freenode.net/redmine/projects/ircd-seven}}, developed and used by freenode. Freenode is actually the biggest IRC network\footnote{\url{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";
@@ -107,7 +106,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
@@ -117,6 +117,3 @@ the server meaning that if compromised, communication could be compromised.
 
 The protocol is not really popular anymore.
 
-
-
-
index 87999a1..f046416 100644 (file)
@@ -1,45 +1,39 @@
-%%\subsection{Mail Servers}
-
 This section documents the most common mail (SMTP) and IMAPs/POPs servers. Another option to secure IMAPs/POPs servers is to place them behind an stunnel server. 
 
 
-%% ---------------------------------------------------------------------- 
-
+%% ----------------------------------------------------------------------
 \subsection{SMTP in general}
 \label{subsection:smtp_general}
-
-SMTP usually makes use of opportunistic TLS. This means that an MTA will accept TLS connections when asked for it during handshake but will not require it. One should always support incoming opportunistic TLS and always try TLS handshake outgoing.\\
+SMTP usually makes use of opportunistic TLS. This means that an MTA will accept TLS connections when asked for it during handshake but will not require it. One should always support incoming opportunistic TLS and always try TLS handshake outgoing.
 
 Furthermore a mailserver can operate in three modes:
-\begin{itemize}
-\item As MSA (Mail Submission Agent) your mailserver receives mail from your clients MUAs (Mail User Agent).
-\item As receiving MTA (Mail Transmission Agent, MX)
-\item As sending MTA (SMTP client)
-\end{itemize}
-\mbox{}\\
+\begin{itemize*}
+  \item As MSA (Mail Submission Agent) your mailserver receives mail from your clients MUAs (Mail User Agent).
+  \item As receiving MTA (Mail Transmission Agent, MX)
+  \item As sending MTA (SMTP client)
+\end{itemize*}
 We recommend the following basic setup for all modes:
-\begin{itemize}
-\item correctly setup MX, A and PTR RRs without using CNAMEs at all.
-\item enable encryption (opportunistic TLS)
-\item do not use self signed certificates
-\end{itemize}
+\begin{itemize*}
+  \item correctly setup MX, A and PTR RRs without using CNAMEs at all.
+  \item enable encryption (opportunistic TLS)
+  \item do not use self signed certificates
+\end{itemize*}
 
 For SMTP client mode we additionally recommend:
-\begin{itemize}
-\item the hostname used as HELO must match the PTR RR
-\item setup a client certificate (most server certificates are client certificates as well)
-\item either the common name or at least an alternate subject name of your certificate must match the PTR RR
-\item do not modify the cipher suite for client mode
-\end{itemize}
+\begin{itemize*}
+  \item the hostname used as HELO must match the PTR RR
+  \item setup a client certificate (most server certificates are client certificates as well)
+  \item either the common name or at least an alternate subject name of your certificate must match the PTR RR
+  \item do not modify the cipher suite for client mode
+\end{itemize*}
 
 For MSA operation we recommend:
-\begin{itemize}
-\item listen on submission port 587
-\item enforce SMTP AUTH even for local networks
-\item do not allow SMTP AUTH on unencrypted connections
-\item optionally use the recommended cipher suites if (and only if) all your connecting MUAs support them
-\end{itemize}
-
+\begin{itemize*}
+  \item listen on submission port 587
+  \item enforce SMTP AUTH even for local networks
+  \item do not allow SMTP AUTH on unencrypted connections
+  \item optionally use the recommended cipher suites if (and only if) all your connecting MUAs support them
+\end{itemize*}
 
 
 % Note that (with the exception of MSA mode), it might be better to allow any cipher suite -- since any encryption is better than no encryption when it comes to opportunistic TLS.
@@ -47,130 +41,128 @@ For MSA operation we recommend:
 We strongly recommend to allow all cipher suites for anything but MSA
 mode, because the alternative is plain text transmission.
 
-%% ---------------------------------------------------------------------- 
-
+%% ----------------------------------------------------------------------
 \subsection{Dovecot}
 
 
 \subsubsection{Tested with Version} 
-\begin{itemize}
-\item Dovecot 2.1.17, Debian Wheezy (without ``ssl\_prefer\_server\_ciphers'' setting)
-\item Dovecot 2.2
-\item 2.0.19apple1 on OS X Server 10.8.5 (without ``ssl\_prefer\_server\_ciphers'' setting)
-\end{itemize}
+\begin{itemize*}
+  \item Dovecot 2.1.17, Debian Wheezy (without ``ssl\_prefer\_server\_ciphers'' setting)
+  \item Dovecot 2.2
+  \item 2.0.19apple1 on OS X Server 10.8.5 (without ``ssl\_prefer\_server\_ciphers'' setting)
+\end{itemize*}
 
 \subsubsection{Settings}
 % Example: http://dovecot.org/list/dovecot/2013-October/092999.html
 
-\begin{lstlisting}[breaklines]
-  ssl_cipher_list = '@@@CIPHERSTRINGB@@@'
-  ssl_prefer_server_ciphers = yes
+\begin{lstlisting}
+ssl_cipher_list = '%*\cipherStringB*)'
+ssl_prefer_server_ciphers = yes
 \end{lstlisting}
 
 \subsubsection{Additional info}
-
 Dovecot 2.0, 2.1: Almost as good as dovecot 2.2. Dovecot does not ignore unknown configuration parameters. Does not support
 ssl\_prefer\_server\_ciphers
 
 \subsubsection{Limitations}
-
 Dovecot currently does not support disabling TLS compression. Furthermore, DH
 parameters greater than 1024bit are not supported. The most recent version
 2.2.7 of Dovecot implements configurable DH parameter length
 \footnote{\url{http://hg.dovecot.org/dovecot-2.2/rev/43ab5abeb8f0}}.
 
-%\item[Justification for special settings (if needed):] \mbox{}
+%\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
 
-\subsubsection{References} \url{http://wiki2.dovecot.org/SSL}
+\subsubsection{References}
+\begin{itemize*}
+  \item \url{http://wiki2.dovecot.org/SSL}
+\end{itemize*}
 
 % add any further references or best practice documents here
 
 \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]
- openssl s_client -crlf -connect SERVER.TLD:993
+\begin{lstlisting}
+openssl s_client -crlf -connect SERVER.TLD:993
 \end{lstlisting}
 
 
-%% ---------------------------------------------------------------------- 
-
+%% ----------------------------------------------------------------------
 \subsection{cyrus-imapd}
-
-\subsubsection{Tested with Version}
-2.4.17
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item 2.4.17
+\end{itemize*}
 
 \subsubsection{Settings}
-\paragraph*{imapd.conf}\mbox{}\\
-
+\paragraphDiamond{imapd.conf}
 To activate SSL/TLS configure your certificate with
-\begin{lstlisting}[breaklines]
-  tls_cert_file: .../cert.pem
-  tls_key_file: .../cert.key
+\begin{lstlisting}
+tls_cert_file: .../cert.pem
+tls_key_file: .../cert.key
 \end{lstlisting}
 
-Do not forget to add necessary intermediate certificates to the .pem file.\\
+Do not forget to add necessary intermediate certificates to the .pem file.
 
-Limiting the ciphers provided may force (especially older) clients to connect without encryption at all! Sticking to the defaults is recommended.\\
+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.\\
+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]
-  allowplaintext: 0
+\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{}\\
+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.
 
+\paragraphDiamond{cyrus.conf}
 To support POP3/IMAP on ports 110/143 with STARTTLS add
-\begin{lstlisting}[breaklines]
-  imap         cmd="imapd" listen="imap" prefork=3
-  pop3         cmd="pop3d" listen="pop3" prefork=1
+\begin{lstlisting}
+imap         cmd="imapd" listen="imap" prefork=3
+pop3         cmd="pop3d" listen="pop3" prefork=1
 \end{lstlisting}
-to the SERVICES section.\\
+to the SERVICES section.
 
 To support POP3S/IMAPS on ports 995/993 add
-\begin{lstlisting}[breaklines]
-  imaps        cmd="imapd -s" listen="imaps" prefork=3
-  pop3s        cmd="pop3d -s" listen="pop3s" prefork=1
+\begin{lstlisting}
+imaps        cmd="imapd -s" listen="imaps" prefork=3
+pop3s        cmd="pop3d -s" listen="pop3s" prefork=1
 \end{lstlisting}
 
 
 \subsubsection{Limitations}
+cyrus-imapd currently (2.4.17, trunk) does not support elliptic curve cryptography. Hence, ECDHE will not work even if defined in your cipher list.
 
-cyrus-imapd currently (2.4.17, trunk) does not support elliptic curve cryptography. Hence, ECDHE will not work even if defined in your cipher list.\\
-
-Currently there is no way to prefer server ciphers or to disable compression.\\
+Currently there is no way to prefer server ciphers or to disable compression.
 
 There is a working patch for all three features:
-\url{https://bugzilla.cyrusimap.org/show_bug.cgi?id=3823}\\
+\url{https://bugzilla.cyrusimap.org/show_bug.cgi?id=3823}
 
 \subsubsection{How to test}
-\begin{lstlisting}[breaklines]
-  openssl s_client -crlf -connect SERVER.TLD:993
+\begin{lstlisting}
+openssl s_client -crlf -connect SERVER.TLD:993
 \end{lstlisting}
 
-
-
 % XXX config von Adi?
 % sslVersion = TLSv1
 % ciphers = EDH+CAMELLIA256:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:-AES128:!CAMELLIA128:!ECDSA:AES256-SHA:EDH+AES128;
 % options = CIPHER_SERVER_PREFERENCE
 % TIMEOUTclose = 1
 
+
+%% ----------------------------------------------------------------------
 \subsection{Postfix}
 
-\subsubsection{Tested with Version}
-\begin{itemize}
-\item Postfix 2.9.6, Debian Wheezy
-\end{itemize}
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item Postfix 2.9.6, Debian Wheezy
+\end{itemize*}
+
 
 \subsubsection{Settings}
 
@@ -192,64 +184,61 @@ There is a working patch for all three features:
 %% 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}
 
-\paragraph*{MX and SMTP client configuration}\mbox{}\\
-
+\paragraphDiamond{MX and SMTP client configuration}
 As discussed in section \ref{subsection:smtp_general}, because of opportunistic encryption we do not
 restrict the list of ciphers. There are still some steps needed to
 enable TLS, all in \verb|main.cf|:
 
-\begin{lstlisting}[breaklines]
-  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
-  smtpd_tls_loglevel = 0
-  # enable opportunistic TLS support in the SMTP server and client
-  smtpd_tls_security_level = may
-  smtp_tls_security_level = may
-  # if you have authentication enabled, only offer it after STARTTLS
-  smtpd_tls_auth_only = yes
-  tls_ssl_options = NO_COMPRESSION
+\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
+smtpd_tls_loglevel = 0
+# enable opportunistic TLS support in the SMTP server and client
+smtpd_tls_security_level = may
+smtp_tls_security_level = may
+# if you have authentication enabled, only offer it after STARTTLS
+smtpd_tls_auth_only = yes
+tls_ssl_options = NO_COMPRESSION
 \end{lstlisting}
 
-\paragraph*{MSA}\mbox{}\\
-
+\paragraphDiamond{MSA}
 For the MSA \verb|smtpd| process, we first define the ciphers that are
 acceptable for the ``mandatory'' security level, again in
 \verb|main.cf|:
 
-\begin{lstlisting}[breaklines]
-  smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
-  smtpd_tls_mandatory_ciphers=high
-  tls_high_cipherlist=@@@CIPHERSTRINGB@@@
+\begin{lstlisting}
+smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
+smtpd_tls_mandatory_ciphers=high
+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]
-  smtpd_tls_eecdh_grade = ultra
+\begin{lstlisting}
+smtpd_tls_eecdh_grade = ultra
 \end{lstlisting}
 
 \subsubsection{Limitations}
-
 tls\_ssl\_options is supported from Postfix 2.11 onwards. You can
 leave the statement in the configuration for older versions, it will
 be ignored.
@@ -258,12 +247,10 @@ tls\_preempt\_cipherlist is supported from Postfix 2.8 onwards. Again,
 you can leave the statement in for older versions.
 
 \subsubsection{References}
-
 Refer to \url{http://www.postfix.org/TLS_README.html} for an in-depth
 discussion.
 
 \subsubsection{Additional settings}
-
 Postfix has two sets of built-in DH parameters that can be overridden
 with the \verb|smtpd_tls_dh512_param_file|
 and \verb|smtpd_tls_dh1024_param_file| options. The ``dh512''
@@ -275,14 +262,13 @@ could use stronger parameter sets; it should be possible to e.g. use the
 IKE Group14 parameters (see section \ref{section:DH}) without much
 interoperability risk, but we have not tested this yet.
 
-% \item[Justification for special settings (if needed):]
+% \subsubsection{Justification for special settings (if needed)}
 % no special settings
 
 
 \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
@@ -291,168 +277,159 @@ $ zegrep "TLS connection established from.*with cipher" /var/log/mail.log | awk
     335 TLSv1 with cipher DHE-RSA-AES256-SHA
 \end{lstlisting}
 
-\begin{lstlisting}[breaklines]
- openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
+\begin{lstlisting}
+openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
 \end{lstlisting}
 
-%% ---------------------------------------------------------------------- 
+%% ----------------------------------------------------------------------
 
 \subsection{Exim (based on 4.82)}
-
 It is highly recommended to read
 \url{http://exim.org/exim-html-current/doc/html/spec_html/ch-encrypted_smtp_connections_using_tlsssl.html}
 first.
 
-\paragraph*{MSA mode (submission)}\mbox{}\\
-
+\paragraphDiamond{MSA mode (submission)}
 In the main config section of Exim add:
 
-\begin{lstlisting}[breaklines]
-  tls_certificate = ..../cert.pem
-  tls_privatekey = ..../cert.key
+\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.\\
-\\
+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]
-  tls_advertise_hosts = *
+\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]
-  daemon_smtp_ports = smtp : smtps : submission
-  tls_on_connect_ports = 465
+\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]
-  server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}
+\begin{lstlisting}
+server_advertise_condition = ${if eq{$tls_cipher}{}{no}{yes}}
 \end{lstlisting}
-to every authenticator defined.\\
+to every authenticator defined.
 
 Add the following rules on top of your acl\_smtp\_mail:
-\begin{lstlisting}[breaklines]
-  warn    hosts           = *
-          control         = submission/sender_retain
+\begin{lstlisting}
+warn    hosts           = *
+        control         = submission/sender_retain
 \end{lstlisting}
-This switches Exim to submission mode and allows addition of missing ``Message-ID'' and ``Date'' headers.\\
+This switches Exim to submission mode and allows addition of missing ``Message-ID'' and ``Date'' headers.
 
-It is not advisable to restrict the default cipher list for MSA mode if you don't know all connecting MUAs. If you still want to define one please consult the Exim documentation or ask on the exim-users mailinglist.\\
+It is not advisable to restrict the default cipher list for MSA mode if you don't know all connecting MUAs. If you still want to define one please consult the Exim documentation or ask on the exim-users mailinglist.
 % 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]
-  log_selector = <whatever your log_selector already contains> \
-   +tls_certificate_verified +tls_peerdn +tls_sni
+\begin{lstlisting}
+log_selector = <whatever your log_selector already contains> +tls_certificate_verified +tls_peerdn +tls_sni
 \end{lstlisting}
 to get even more TLS information logged.
 
 
-\paragraph*{server mode (incoming)}\mbox{}\\
-
+\paragraphDiamond{server mode (incoming)}
 In the main config section of Exim add:
 
-\begin{lstlisting}[breaklines]
-  tls_certificate = ..../cert.pem
-  tls_privatekey = ..../cert.key
+\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.\\
-\\
+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]
-  tls_advertise_hosts = *
+\begin{lstlisting}
+tls_advertise_hosts = *
 \end{lstlisting}
 
 Listen on smtp(25) port only
-\begin{lstlisting}[breaklines]
-  daemon_smtp_ports = smtp
+\begin{lstlisting}
+daemon_smtp_ports = smtp
 \end{lstlisting}
 
-It is not advisable to restrict the default cipher list for opportunistic encryption as used by SMTP. Do not use cipher lists recommended for HTTPS! If you still want to define one please consult the Exim documentation or ask on the exim-users mailinglist.\\
+It is not advisable to restrict the default cipher list for opportunistic encryption as used by SMTP. Do not use cipher lists recommended for HTTPS! If you still want to define one please consult the Exim documentation or ask on the exim-users mailinglist.
 % 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]
-  tls_verify_certificates = /etc/pki/tls/certs/ca-bundle.crt
-  tls_try_verify_hosts = *
+\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]
-  tls_verify_hosts = *
+\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]
-  log_selector = <whatever your log_selector already contains> \
-   +tls_certificate_verified +tls_peerdn +tls_sni
+\begin{lstlisting}
+log_selector = <whatever your log_selector already contains> +tls_certificate_verified +tls_peerdn +tls_sni
 \end{lstlisting}
 to get even more TLS information logged.
 
-\paragraph*{client mode (outgoing)}\mbox{}\\
-
+\paragraphDiamond{client mode (outgoing)}
 Exim uses opportunistic encryption in the SMTP transport by default.
 
 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]
-  tls_certificate   = .../cert.pem
-  tls_privatekey    = .../cert.key
+\begin{lstlisting}
+tls_certificate   = .../cert.pem
+tls_privatekey    = .../cert.key
 \end{lstlisting}
-This is recommended for MTA-MTA traffic.\\
+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.
 Do not limit ciphers without a very good reason. In the worst case you end up without encryption at all instead of some weak encryption. Please consult the Exim documentation if you really need to define ciphers.
 
-\paragraph*{OpenSSL}\mbox{}\\
+\paragraphDiamond{OpenSSL}
 Exim already disables SSLv2 by default. We recommend to add
-\begin{lstlisting}[breaklines]
-  openssl_options = +all +no_sslv2 +no_compression +cipher_server_preference
+\begin{lstlisting}
+openssl_options = +all +no_sslv2 +no_compression +cipher_server_preference
 \end{lstlisting}
-to the main configuration.\\
-Note: +all is misleading here since OpenSSL only activates the most common workarounds. But that's how SSL\_OP\_ALL is defined.\\
-
-You do not need to set dh\_parameters. Exim with OpenSSL by default uses parameter initialization with the "2048-bit MODP Group with 224-bit Prime Order Subgroup" defined in section 2.2 of RFC 5114~\cite{rfc5114} (ike23).
-If you want to set your own DH parameters please read the TLS documentation of exim.\\
+to the main configuration.
 
+Note: +all is misleading here since OpenSSL only activates the most common workarounds. But that's how SSL\_OP\_ALL is defined.
 
+You do not need to set dh\_parameters. Exim with OpenSSL by default uses parameter initialization with the "2048-bit MODP Group with 224-bit Prime Order Subgroup" defined in section 2.2 of RFC 5114~\cite{rfc5114} (ike23).
+If you want to set your own DH parameters please read the TLS documentation of exim.
 
-\paragraph*{GnuTLS}\mbox{}\\
 
+\paragraphDiamond{GnuTLS}
 GnuTLS is different in only some respects to OpenSSL:
-\begin{itemize}
-\item tls\_require\_ciphers needs a GnuTLS priority string instead of a cipher list. It is recommended to use the defaults by not defining this option. It highly depends on the version of GnuTLS used. Therefore it is not advisable to change the defaults.
-\item There is no option like openssl\_options
-\end{itemize}
-
-\paragraph*{Exim string expansion}\mbox{}\\
+\begin{itemize*}
+  \item tls\_require\_ciphers needs a GnuTLS priority string instead of a cipher list. It is recommended to use the defaults by not defining this option. It highly depends on the version of GnuTLS used. Therefore it is not advisable to change the defaults.
+  \item There is no option like openssl\_options
+\end{itemize*}
 
+\paragraphDiamond{Exim string expansion}
 Note that most of the options accept expansion strings. This way you can e.g. set cipher lists or STARTTLS advertisement conditionally. Please follow the link to the official Exim documentation to get more information.
 
-\paragraph*{Limitations}\mbox{}\\
-
+\paragraphDiamond{Limitations}
 Exim currently (4.82) does not support elliptic curves with OpenSSL. This means that ECDHE is not used even if defined in your cipher list.
-There already is a working patch to provide support:\\
+There already is a working patch to provide support:
 \url{http://bugs.exim.org/show_bug.cgi?id=1397}
 
-\paragraph*{How to test}\mbox{}\\
-\begin{lstlisting}[breaklines]
- openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
+\subsubsection{How to test}
+\begin{lstlisting}
+openssl s_client -starttls smtp -crlf -connect SERVER.TLD:25
 \end{lstlisting}
 
 
@@ -461,5 +438,3 @@ There already is a working patch to provide support:\\
 
 %\todo{FIXME: write this section}
 
-
-
index 425a81d..827c019 100644 (file)
@@ -2,42 +2,37 @@
 
 Within enterprise networks and corporations with increased levels of paranoia or at least some defined security requirements it is common \textbf{not} to allow direct connections to the public internet.
 
-For this reason proxy solutions are deployed on corporate networks to intercept and scan the traffic for potential threats within sessions.\\
+For this reason proxy solutions are deployed on corporate networks to intercept and scan the traffic for potential threats within sessions.
 
 For encrypted traffic there are four options:
 
-\begin{itemize}
-\item Block the connection because it cannot be scanned for threats.
-\item Bypass the threat-mitigation and pass the encrypted session to the client, which results in a situation where malicious content is transferred directly to the client without visibility to the security system.
-\item Intercept (i.e. terminate) the session at the proxy, scan there and re-encrypt the session towards the client (effectively MITM).
-\item Deploy special Certificate Authorities to enable Deep Packet Inspection on the wire.
-\end{itemize}
+\begin{itemize*}
+  \item Block the connection because it cannot be scanned for threats.
+  \item Bypass the threat-mitigation and pass the encrypted session to the client, which results in a situation where malicious content is transferred directly to the client without visibility to the security system.
+  \item Intercept (i.e. terminate) the session at the proxy, scan there and re-encrypt the session towards the client (effectively MITM).
+  \item Deploy special Certificate Authorities to enable Deep Packet Inspection on the wire.
+\end{itemize*}
 
 While the latest solution might be the most "up to date", it arises a new front in the context of this paper, because the most secure part of a client's connection could only be within the corporate network, if the proxy-server handles the connection to the destination server in an insecure manner.
 
 Conclusion: Don't forget to check your proxy solutions SSL-capabilities. Also do so for your reverse proxies!
 
-\subsubsection{squid}
-
-
+%% ---------------------------------------------------------------------- 
+\subsection{squid}
 As of squid-3.2.7 (01 Feb 2013) there is support for the OpenSSL NO\_Compression option within squid config (CRIME attack) and if you combine that in the config file, with an enforcement of the server cipher preferences (BEAST Attack) you are safe.
 
-\paragraph*{squid.conf}\mbox{}\\
 
+\paragraph*{squid.conf}
 \todo{UNTESTED!}
-\begin{lstlisting}[breaklines]
+\begin{lstlisting}
 options=NO_SSLv2,NO_TLSv1,NO_Compression,CIPHER_SERVER_PREFERENCE 
-cipher=@@@CIPHERSTRINGB@@@
+cipher=%*\cipherStringB*)
 \end{lstlisting}
 
-
-
-\paragraph*{squid.conf}\mbox{}\\
-
+\paragraph*{squid.conf}
 %% http://forum.pfsense.org/index.php?topic=63262.0
-
 \todo{UNTESTED!}
-\begin{lstlisting}[breaklines]
+\begin{lstlisting}
                NO_SSLv2    Disallow the use of SSLv2
                NO_SSLv3    Disallow the use of SSLv3
                NO_TLSv1    Disallow the use of TLSv1.0
@@ -51,7 +46,7 @@ cipher=@@@CIPHERSTRINGB@@@
 \todo{Patch here? Definitely working for 3.2.6!}
 For squid Versions before 3.2.7 use this patch against a vanilla source-tree:
 
-\begin{lstlisting}[breaklines]
+\begin{lstlisting}
 --- support.cc.ini      2013-01-09 02:41:51.000000000 +0100
 +++ support.cc  2013-01-21 16:13:32.549383848 +0100
 @@ -400,6 +400,11 @@
@@ -69,17 +64,18 @@ For squid Versions before 3.2.7 use this patch against a vanilla source-tree:
 \end{lstlisting}
 
 
-
+%% ---------------------------------------------------------------------- 
 \subsubsection{Bluecoat}
 %% https://kb.bluecoat.com/index?page=content&id=KB5549
-\begin{description}
-\item[Tested with Version:] SGOS 6.5.x
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item SGOS 6.5.x
+\end{itemize*}
 
 BlueCoat Proxy SG Appliances can be used as forward and reverse proxies. The reverse proxy feature is rather under-developed, and while it is possible and supported, there only seems to be limited use of this feature "in the wild" - nonetheless there are a few cipher suites to choose from, when enabling SSL features.
 
-\item[Only allow TLS 1.0,1.1 and 1.2 protocols:] \mbox{}
-
-\begin{lstlisting}[breaklines]
+\paragraph*{Only allow TLS 1.0,1.1 and 1.2 protocols:}
+\begin{lstlisting}
 $conf t
 $(config)ssl
 $(config ssl)edit ssl-device-profile default
@@ -87,9 +83,8 @@ $(config device-profile default)protocol tlsv1 tlsv1.1 tlsv1.2
   ok
 \end{lstlisting}
 
-\item[Select your accepted cipher-suites:] \mbox{}
-
-\begin{lstlisting}[breaklines]
+\paragraph*{Select your accepted cipher-suites:}
+\begin{lstlisting}
 $conf t
 Enter configuration commands, one per line.  End with CTRL-Z.
 $(config)proxy-services
@@ -112,25 +107,26 @@ Select cipher numbers to use, separated by commas: 2,5,6
 
 The same protocols are available for forward proxy settings and should be adjusted accordingly:
 In your local policy file add the following section:
-\begin{lstlisting}[breaklines]
+\begin{lstlisting}
 <ssl>
     DENY server.connection.negotiated_ssl_version=(SSLV2, SSLV3)
 \end{lstlisting}
 
 Disabling protocols and ciphers in a forward proxy environment could lead to unexpected results on certain (misconfigured?) webservers (i.e. ones accepting only SSLv2/3 protocol connections)
 
-\end{description} 
-
-
 
-
-\subsubsection{Pound}
+%% ---------------------------------------------------------------------- 
+\subsection{Pound}
 % See http://www.apsis.ch/pound
 % See https://help.ubuntu.com/community/Pound
 
-Pound 2.6
-       
-\begin{lstlisting}[breaklines]
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item Pound 2.6
+\end{itemize*}
+
+\subsubsection{Settings}
+\begin{lstlisting}
 # HTTP Listener, redirects to HTTPS
 ListenHTTP
     Address 10.10.0.10
@@ -146,7 +142,7 @@ ListenHTTPS
     AddHeader    "Front-End-Https: on"
     Cert         "/path/to/your/cert.pem"
     ## See 'man ciphers'.
-    Ciphers      "TLSv1.2:TLSv1.1:!SSLv3:!SSLv2:@@@CIPHERSTRINGB@@@"
+    Ciphers      "TLSv1.2:TLSv1.1:!SSLv3:!SSLv2:%*\cipherStringB*)"
     Service
         BackEnd
             Address 10.20.0.10
@@ -155,3 +151,4 @@ ListenHTTPS
     End
 End
 \end{lstlisting}
+
index de88318..1929d11 100644 (file)
@@ -1,34 +1,34 @@
 %%---------------------------------------------------------------------- 
 \subsection{OpenSSH}
-\subsubsection{Tested with Version} OpenSSH 6.4 (Debian jessie)
+\subsubsection{Tested with Version} OpenSSH 6.4 (Debian Jessie)
 \subsubsection{Settings}
 \paragraph*{sshd\_config}
 \begin{lstlisting}[breaklines]
-       # ...
-
-       Protocol 2
-       PermitEmptyPasswords no
-       PermitRootLogin no # or 'without-password' to allow SSH key based login
-       StrictModes yes
-       HostKey /etc/ssh/ssh_host_rsa_key
-       Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes128-ctr
-       MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160
-       KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1
+# ...
+
+Protocol 2
+PermitEmptyPasswords no
+PermitRootLogin no # or 'without-password' to allow SSH key based login
+StrictModes yes
+HostKey /etc/ssh/ssh_host_rsa_key
+Ciphers aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes128-ctr
+MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,hmac-ripemd160
+KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1
 \end{lstlisting}
 \subsubsection{Tested with Version} OpenSSH 6.0p1 (Debian wheezy)
 \subsubsection{Settings}
 \paragraph*{sshd\_config}
 \begin{lstlisting}[breaklines]
-       # ...
-
-       Protocol 2
-       PermitEmptyPasswords no
-       PermitRootLogin no # or 'without-password' to allow SSH key based login
-       StrictModes yes
-       HostKey /etc/ssh/ssh_host_rsa_key
-       Ciphers aes256-ctr,aes128-ctr
-       MACs hmac-sha2-512,hmac-sha2-256,hmac-ripemd160
-       KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1
+# ...
+
+Protocol 2
+PermitEmptyPasswords no
+PermitRootLogin no # or 'without-password' to allow SSH key based login
+StrictModes yes
+HostKey /etc/ssh/ssh_host_rsa_key
+Ciphers aes256-ctr,aes128-ctr
+MACs hmac-sha2-512,hmac-sha2-256,hmac-ripemd160
+KexAlgorithms diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1
 \end{lstlisting}
 
 \textbf{Note:} Older Linux systems won't support SHA2. PuTTY (Windows) does not support
@@ -39,40 +39,56 @@ support for DSA keys stronger than 1024bit
 below current standards (see section \ref{section:keylengths}). Legacy systems
 can use this configuration and simply omit unsupported ciphers, key exchange
 algorithms and MACs.  
+
 %\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]
+Connect a client with verbose logging enabled to the SSH server
+\begin{lstlisting}
 $ ssh -vvv myserver.com
 \end{lstlisting}and observe the key exchange in the output.
 
 
 %%---------------------------------------------------------------------- 
 \subsection{Cisco ASA}
-\subsubsection{Tested with Version} 9.1(3)
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item 9.1(3)
+\end{itemize*}
+
+
 \subsubsection{Settings}
-\begin{lstlisting}[breaklines]
+\begin{lstlisting}
 crypto key generate rsa modulus 2048
 ssh version 2
 ssh key-exchange group dh-group14-sha1
 \end{lstlisting}
 Note: When the ASA is configured for SSH, by default both SSH versions 1 and 2 are allowed. In addition to that, only a group1 DH-key-exchange is used. This should be changed to allow only SSH version 2 and to use a key-exchange with group14. The generated RSA key should be 2048 bit (the actual supported maximum). A non-cryptographic best practice is to reconfigure the lines to only allow SSH-logins.
+
 \subsubsection{References}
-\url{http://www.cisco.com/en/US/docs/security/asa/asa91/configuration/general/admin\_management.html }
+\begin{itemize*}
+  \item \url{http://www.cisco.com/en/US/docs/security/asa/asa91/configuration/general/admin\_management.html }
+\end{itemize*}
+
 \subsubsection{How to test}
-Connect a client with verbose logging enabled to the SSH server \\
-\begin{lstlisting}[breaklines]
+Connect a client with verbose logging enabled to the SSH server
+\begin{lstlisting}
 $ ssh -vvv myserver.com
 \end{lstlisting}and observe the key exchange in the output.
 
 
 %---------------------------------------------------------------------- 
 \subsection{Cisco IOS}
-\subsubsection{Tested with Version} 15.0, 15.1, 15.2
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item 15.0, 15.1, 15.2
+\end{itemize*}
+
+
 \subsubsection{Settings}
-\begin{lstlisting}[breaklines]
+\begin{lstlisting}
 crypto key generate rsa modulus 4096 label SSH-KEYS
 ip ssh rsa keypair-name SSH-KEYS
 ip ssh version 2
@@ -80,16 +96,20 @@ ip ssh dh min size 2048
 
 line vty 0 15
 transport input ssh
-
 \end{lstlisting}
 Note: Same as with the ASA, also on IOS by default both SSH versions 1 and 2 are allowed and the DH-key-exchange only use a DH-group of 768 Bit.
 In IOS, a dedicated Key-pair can be bound to SSH to reduce the usage of individual keys-pairs.
 From IOS Version 15.0 onwards, 4096 Bit rsa keys are supported and should be used according to the paradigm "use longest supported key". Also, do not forget to disable telnet vty access.
+
+
 \subsubsection{References}
-\url{http://www.cisco.com/en/US/docs/ios/sec\_user\_services/configuration/guide/sec\_cfg\_secure\_shell.html }
+\begin{itemize*}
+  \item \url{http://www.cisco.com/en/US/docs/ios/sec\_user\_services/configuration/guide/sec\_cfg\_secure\_shell.html}
+\end{itemize*}
 % 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]
+Connect a client with verbose logging enabled to the SSH server
+\begin{lstlisting}
 $ ssh -vvv myserver.com
 \end{lstlisting}and observe the key exchange in the output.
index 95512e1..b753c50 100644 (file)
@@ -1,20 +1,15 @@
-%%\subsection{VPNs}
-
 % ---------------------------------------------------------------------- 
 \subsection{IPSec}
 \label{section:IPSECgeneral}
 
 % ciphersuites current 2013-12-09
-%\begin{description}
 
 \subsubsection{Settings}
 
-\paragraph*{Assumptions}\mbox{}\\
-
+\paragraphDiamond{Assumptions}
 We assume the use of IKE (v1 or v2) and ESP for this document.
 
-\paragraph*{Authentication}\mbox{}\\
-
+\paragraphDiamond{Authentication}
 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
@@ -23,9 +18,9 @@ against fake certificates.
 If you need to use Pre-Shared Key authentication:
 
 \begin{enumerate}
-\item Choose a \textbf{random}, \textbf{long enough} PSK (see below)
-\item Use a \textbf{separate} PSK for any IPSEC connection
-\item Change the PSKs regularly
+  \item Choose a \textbf{random}, \textbf{long enough} PSK (see below)
+  \item Use a \textbf{separate} PSK for any IPSEC connection
+  \item Change the PSKs regularly
 \end{enumerate}
 
 The size of the PSK should not be shorter than the output size of
@@ -53,8 +48,7 @@ table~\ref{tab:IPSEC_psk_len} gives the minimum lengths in characters.
   \label{tab:IPSEC_psk_len}
 \end{table}
 
-\paragraph*{Cryptographic Suites}\mbox{}\\
-
+\paragraphDiamond{Cryptographic Suites}
 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.
@@ -83,7 +77,7 @@ table~\ref{tab:IPSEC_suites}.
   \label{tab:IPSEC_suites}
 \end{table}
 
-\paragraph*{IKE or Phase 1}\mbox{}\\
+\paragraphDiamond{IKE or Phase 1}
 
 Alternatively to the pre-defined cipher suites, you can define your
 own, as described in this and the next section.
@@ -113,8 +107,7 @@ vulnerabilities \footnote{\url{http://ikecrack.sourceforge.net/}}.
   \label{tab:IPSEC_ph1_params}
 \end{table}
 
-\paragraph*{ESP or Phase 2}\mbox{}\\
-
+\paragraphDiamond{ESP or Phase 2}
 ESP or Phase 2 is where the actual data are protected; recommended
 parameters are shown in table \ref{tab:IPSEC_ph2_params}.
 
@@ -142,24 +135,21 @@ parameters are shown in table \ref{tab:IPSEC_ph2_params}.
 \end{table}
 
 \subsubsection{References}
-
-
-``A Cryptographic Evaluation of IPsec'', Niels Ferguson and Bruce
-  Schneier: \url{https://www.schneier.com/paper-ipsec.pdf}
+\begin{itemize*}
+  \item ``A Cryptographic Evaluation of IPsec'', Niels Ferguson and Bruce
+    Schneier: \url{https://www.schneier.com/paper-ipsec.pdf}
+\end{itemize*}
 
 
 %---------------------------------------------------------------------- 
 \subsection{Check Point FireWall-1}
-   
-\begin{description}
-\item[Tested with Version:] \mbox{}
-
-\begin{itemize}
-\item R77 (should work with any currently supported version)
-\end{itemize}
 
-\item[Settings:] \mbox{}
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item R77 (should work with any currently supported version)
+\end{itemize*}
 
+\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''.
@@ -198,8 +188,8 @@ found under ``Advanced Settings'' / ``Advanced VPN Properties''
   \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...''
@@ -216,45 +206,32 @@ button, you can configure sets of algorithms that all gateways support
 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):]
-
-%\item[Limitations:]
+%\subsubsection{Justification for special settings (if needed)}
 
-\item[References:]\mbox{}
+%\subsubsection{Limitations}
 
-\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)
-
-\end{itemize}
-
-% \item[How to test:]
-
-\end{description}
+\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)
+\end{itemize*}
 
+%\subsubsection{How to test}
 
 %% cipherstrings current 2013-12-09
 % ---------------------------------------------------------------------- 
 \subsection{OpenVPN}
 
-\begin{description}
-
-\item[Tested with Version:] \mbox{}\\
-
-\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 Wheezy linked against openssl
+\subsubsection{Tested with Versions}
+\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 Wheezy linked against openssl
     (libssl.so.1.0.0) 
-\item OpenVPN 2.3.2 for Windows
-\end{itemize}
+  \item OpenVPN 2.3.2 for Windows
+\end{itemize*}
 
-\item[Settings:] \mbox{}
-
-\paragraph{General}\mbox{}
+\subsubsection{Settings}
 
+\paragraphDiamond{General}
 We describe a configuration with certificate-based authentication; see
 below for details on the \verb|easyrsa| tool to help you with that.
 
@@ -267,26 +244,24 @@ that is then negotiated as usual with TLS, the \verb|cipher|
 and \verb|auth| options both take a single argument that must match on
 client and server.
 
-\paragraph{Server Configuration}\mbox{}
-
+\paragraph*{Server Configuration}
 % the cipherlist here is config B without the ECDHE strings, because
 % it must fit in 256 bytes...
 % DO NOT CHANGE TO THE CIPHERSTRING MACRO!
-\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{}
-
+\paragraphDiamond{Client Configuration}
 Client and server have to use compatible configurations, otherwise they can't communicate.
 The \verb|cipher| and \verb|auth| directives have to be identical.
 
 % the cipherlist here is config B without the ECDHE strings, because
 % it must fit in 256 bytes...
 % DO NOT CHANGE TO THE CIPHERSTRING MACRO!
-\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
@@ -297,8 +272,7 @@ remote-cert-tls server
 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
@@ -312,31 +286,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}
 
+\paragraphDiamond{Key renegotiation interval}
 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{}
-
+\paragraphDiamond{Fixing ``easy-rsa''}
 When installing an OpenVPN server instance, you are probably using
 \emph{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
@@ -350,18 +324,13 @@ In addition, edit the \verb|pkitool| script and replace all occurences
 of \verb|sha1| with \verb|sha256|, to sign the certificates with
 SHA256.
 
-\item[Limitations:] \mbox{}
-
-  Note that the ciphersuites shown by \verb|openvpn --show-tls| are
-  \emph{known}, but not necessarily \emph{supported}
-  \footnote{\url{https://community.openvpn.net/openvpn/ticket/304}}.
+\subsubsection{Limitations}
+Note that the ciphersuites shown by \verb|openvpn --show-tls| are \emph{known}, but not necessarily \emph{supported} \footnote{\url{https://community.openvpn.net/openvpn/ticket/304}}.
 
 Which cipher suite is actually used can be seen in the logs:
 
 \verb|Control Channel: TLSv1, cipher TLSv1/SSLv3 DHE-RSA-CAMELLIA256-SHA, 2048 bit RSA|
 
-\end{description}
-
 
 % ---------------------------------------------------------------------- 
 \subsection{PPTP}
@@ -377,11 +346,15 @@ be decrypted.
 % ---------------------------------------------------------------------- 
 \subsection{Cisco ASA}
 The following settings reflect our recommendations as best as possible on the Cisco ASA platform. These are - of course - just settings regarding SSL/TLS (i.e. Cisco AnyConnect) and IPSec. For further security settings regarding this platform the appropriate Cisco guides should be followed.
-\begin{description}
-\item[Tested with Version:] 
-9.1(3) - X-series model
-\item[Settings:] \mbox{}
-\begin{lstlisting}[breaklines]
+
+
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item 9.1(3) - X-series model
+\end{itemize*}
+
+\subsubsection{Settings}
+\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
@@ -446,7 +419,7 @@ ssl encryption dhe-aes256-sha1 dhe-aes128-sha1 aes256-sha1 aes128-sha1
 ssl trust-point ASDM_TrustPoint0 Outside-DMZ
 \end{lstlisting}
 
-\item[Justification for special settings (if needed):] \mbox{}
+\subsubsection{Justification for special settings}
 New IPsec policies have been defined which do not make use of ciphers that may be cause for concern. Policies have a "Fallback" option to support legacy devices.
 
 3DES has been completely disabled as such Windows XP AnyConnect Clients will no longer be able to connect.
@@ -455,21 +428,17 @@ The Cisco ASA platform does not currently support RSA Keys above 2048bits.
 
 Legacy ASA models (e.g. 5505, 5510, 5520, 5540, 5550) do not offer the possibility to configure for SHA256/SHA384/SHA512 nor AES-GCM for IKEv2 proposals.
 
-\item[References:] 
-\url{http://www.cisco.com/en/US/docs/security/asa/roadmap/asaroadmap.html}\\
-\url{http://www.cisco.com/web/about/security/intelligence/nextgen_crypto.html}
+\subsubsection{References}
+\begin{itemize*}
+  \item \url{http://www.cisco.com/en/US/docs/security/asa/roadmap/asaroadmap.html}
+  \item \url{http://www.cisco.com/web/about/security/intelligence/nextgen_crypto.html}
+\end{itemize*}
 
 % add any further references or best practice documents here
 
-%%\item[How to test:] 
+%%\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.
 
-\end{description}
-
-
-
-
-
 
 
 % ---------------------------------------------------------------------- 
index 4619d7a..2c2bc5a 100644 (file)
-%%\subsection{Webservers}
-
 %%---------------------------------------------------------------------- 
 \subsection{Apache}
 
-\subsubsection{Tested with Versions} 
-\begin{itemize}
-\item Apache 2.2.22 linked against OpenSSL 1.0.1e, Debian Wheezy
-\item Apache 2.4.6 linked against OpenSSL 1.0.1e, Debian Jessie
-\end{itemize}
-
+Note that any cipher suite starting with EECDH can be omitted, if in doubt.
+(Compared to the theory section, EECDH in Apache and ECDHE in OpenSSL are
+synonyms~\footnote{https://www.mail-archive.com/openssl-dev@openssl.org/msg33405.html})
 
-\subsubsection{Settings} 
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item Apache 2.2.22 linked against OpenSSL 1.0.1e, Debian Wheezy
+  \item Apache 2.4.6 linked against OpenSSL 1.0.1e, Debian Jessie
+\end{itemize*}
 
+\subsubsection{Settings}
 Enabled modules \emph{SSL} and \emph{Headers} are required.
 
-%-All +TLSv1.1 +TLSv1.2
-\begin{lstlisting}[breaklines]
-  SSLCertificateFile server.crt
-  SSLCertificateKeyFile server.key
-  SSLProtocol All -SSLv2 -SSLv3 
-  SSLHonorCipherOrder On
-  SSLCompression off
-  # Add six earth month HSTS header for all users...
-  Header add Strict-Transport-Security "max-age=15768000"
-  # If you want to protect all subdomains, use the following header
-  # ALL subdomains HAVE TO support https if you use this!
-  # Strict-Transport-Security: max-age=15768000 ; includeSubDomains
-
-  SSLCipherSuite '@@@CIPHERSTRINGB@@@'
-
+\begin{lstlisting}
+SSLCertificateFile server.crt
+SSLCertificateKeyFile server.key
+SSLProtocol All -SSLv2 -SSLv3 
+SSLHonorCipherOrder On
+SSLCompression off
+# Add six earth month HSTS header for all users...
+Header add Strict-Transport-Security "max-age=15768000"
+# If you want to protect all subdomains, use the following header
+# ALL subdomains HAVE TO support https if you use this!
+# Strict-Transport-Security: max-age=15768000 ; includeSubDomains
+
+SSLCipherSuite '%*\cipherStringB*)'
 \end{lstlisting}
 
-Note that any cipher suite starting with EECDH can be omitted, if in doubt.
-(Compared to the theory section, EECDH in Apache and ECDHE in OpenSSL are
-synonyms~\footnote{https://www.mail-archive.com/openssl-dev@openssl.org/msg33405.html})
-
 \subsubsection{Additional settings}
-
-You might want to redirect everything to http\textbf{s}:// if possible. In Apache you can do this with the following setting inside of a VirtualHost environment:
-
-\begin{lstlisting}[breaklines]
-  <VirtualHost *:80>
-   #...
-   RewriteEngine On
-        RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=permanent]
-   #...
-  </VirtualHost>
+You might want to redirect everything to \emph{https://} if possible. In Apache
+you can do this with the following setting inside of a VirtualHost environment:
+
+\begin{lstlisting}
+<VirtualHost *:80>
+  RewriteEngine On
+  RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=permanent]
+</VirtualHost>
 \end{lstlisting}
 
 %\subsubsection{Justification for special settings (if needed)}
 
 \subsubsection{References}
-\url{https://httpd.apache.org/docs/2.4/ssl/}
+\begin{itemize*}
+  \item Apache2 Docs on SSL and TLS: \url{https://httpd.apache.org/docs/2.4/ssl/}
+\end{itemize*}
 
 
 \subsubsection{How to test}
-
 See appendix \ref{cha:tools}
 
-%%\end{description}
-
 
 %%---------------------------------------------------------------------- 
 \subsection{lighttpd}
 
 \todo{sebix: add/test ssl.ec-curve and ssl.dh-file; see \url{http://redmine.lighttpd.net/projects/1/wiki/Docsr\_SSL\#Diffie-Hellman-and-Elliptic-Curve-Diffie-Hellman-parameters}}
 
-%%\begin{description}
-\subsubsection{Tested with Version}
-\begin{itemize}
-\item lighttpd/1.4.31-4 with OpenSSL 1.0.1e on Debian Wheezy
-\item lighttpd/1.4.33 with OpenSSL 0.9.8o on Debian Squeeze (note that TLSv1.2 does not work in openssl 0.9.8 thus not all ciphers actually work)
-\item lighttpd/1.4.28-2 with OpenSSL 0.9.8o on Debian Squeeze (note that TLSv1.2 does not work in openssl 0.9.8 thus not all ciphers actually work)
-\end{itemize}
+\subsubsection{Tested with Versions}
+\begin{itemize*}
+  \item lighttpd/1.4.31-4 with OpenSSL 1.0.1e on Debian Wheezy
+  \item lighttpd/1.4.33 with OpenSSL 0.9.8o on Debian Squeeze (note that TLSv1.2 does not work in openssl 0.9.8 thus not all ciphers actually work)
+  \item lighttpd/1.4.28-2 with OpenSSL 0.9.8o on Debian Squeeze (note that TLSv1.2 does not work in openssl 0.9.8 thus not all ciphers actually work)
+\end{itemize*}
 
 
 \subsubsection{Settings}
-
-
-%% Complete ssl.cipher-list with same algo than Apache
-\todo{FIXME: this string seems to be wrongly formatted??}
-
-\begin{lstlisting}[breaklines]
-  $SERVER["socket"] == "0.0.0.0:443" {
-    ssl.engine  = "enable"
-    ssl.use-sslv2 = "disable"
-    ssl.use-sslv3 = "disable"
-    #ssl.use-compression obsolete >= 1.4.3.1
-    ssl.pemfile = "/etc/lighttpd/server.pem"
-    ssl.cipher-list = "@@@CIPHERSTRINGB@@@"
-    ssl.honor-cipher-order = "enable"
-    setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=31536000")
-  }
+\begin{lstlisting}
+$SERVER["socket"] == "0.0.0.0:443" {
+  ssl.engine  = "enable"
+  ssl.use-sslv2 = "disable"
+  ssl.use-sslv3 = "disable"
+  ssl.pemfile = "/etc/lighttpd/server.pem"
+  ssl.cipher-list = "%*\cipherStringB*)"
+  ssl.honor-cipher-order = "enable"
+  setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=15768000") # six months
+  # use this only if all subdomains support HTTPS!
+  # setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=15768000; includeSubDomains")
+}
 \end{lstlisting}
 
 
 \subsubsection{Additional settings}
-
-As for any other webserver, you might want to automatically redirect http
-traffic toward http\textbf{s}:// It is also recommended to set the environment variable
-\emph{HTTPS}, so the applications run by the webserver can easily detect, that
-HTTPS is in use.
-
-
-
-\begin{lstlisting}[breaklines]
-  $HTTP["scheme"] == "http" {
-    # capture vhost name with regex conditiona -> %0 in redirect pattern
-    # must be the most inner block to the redirect rule
-    $HTTP["host"] =~ ".*" {
-        url.redirect = (".*" => "https://%0$0")
-    }
+As for any other webserver, you might want to automatically redirect \emph{http://}
+traffic toward \emph{https://}. It is also recommended to set the environment variable
+\emph{HTTPS}, so the PHP applications run by the webserver can easily detect,
+that HTTPS is in use.
+
+\begin{lstlisting}
+$HTTP["scheme"] == "http" {
+  # capture vhost name with regex conditiona -> %0 in redirect pattern
+  # must be the most inner block to the redirect rule
+  $HTTP["host"] =~ ".*" {
+    url.redirect = (".*" => "https://%0$0")
+  }
   # Set the environment variable properly
   setenv.add-environment = (
-            "HTTPS" => "on"
-        )
-  }
+    "HTTPS" => "on"
+  )
+}
 \end{lstlisting}
 
 
 \subsubsection{Additional information} 
 The config option \emph{honor-cipher-order} is available since 1.4.30, the
-supported ciphers depend on the used OpenSSL-version (at runtime). ECDH has to
+supported ciphers depend on the used OpenSSL-version (at runtime). ECDHE has to
 be available in OpenSSL at compile-time, which should be default. SSL
 compression should by deactivated by default at compile-time (if not, it's
 active).
@@ -131,94 +114,82 @@ Support for other SSL-libraries like GnuTLS will be available in the upcoming
 
 
 \subsubsection{References} 
-
-\begin{itemize}
-        \item HTTPS redirection: \url{http://redmine.lighttpd.net/projects/1/wiki/HowToRedirectHttpToHttps}
-        \item Lighttpd Docs SSL: \url{http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs\_SSL}
-        \item Release 1.4.30 (How to mitigate BEAST attack) \url{http://redmine.lighttpd.net/projects/lighttpd/wiki/Release-1\_4\_30}
-        \item SSL Compression disabled by default: \url{http://redmine.lighttpd.net/issues/2445}
-\end{itemize}
-
-
+\begin{itemize*}
+  \item HTTPS redirection: \url{http://redmine.lighttpd.net/projects/1/wiki/HowToRedirectHttpToHttps}
+  \item Lighttpd Docs SSL: \url{http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs\_SSL}
+  \item Release 1.4.30 (How to mitigate BEAST attack) \url{http://redmine.lighttpd.net/projects/lighttpd/wiki/Release-1\_4\_30}
+  \item SSL Compression disabled by default: \url{http://redmine.lighttpd.net/issues/2445}
+\end{itemize*}
 
 
 \subsubsection{How to test} 
 See appendix \ref{cha:tools}
 
 
-
 %%---------------------------------------------------------------------- 
 \subsection{nginx}
 
-%\begin{description}
 \subsubsection{Tested with Version} 
-\begin{itemize}
-\item 1.4.4 with OpenSSL 1.0.1e on OS X Server 10.8.5
-\item 1.2.1-2.2+wheezy2 with OpenSSL 1.0.1e on Debian Wheezy
-\item 1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
-\item 1.2.1-2.2~bpo60+2 with OpenSSL 0.9.8o on Debian Squeeze (note that TLSv1.2 does not work in openssl 0.9.8 thus not all ciphers actually work)
-\end{itemize}
+\begin{itemize*}
+  \item 1.4.4 with OpenSSL 1.0.1e on OS X Server 10.8.5
+  \item 1.2.1-2.2+wheezy2 with OpenSSL 1.0.1e on Debian Wheezy
+  \item 1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
+  \item 1.2.1-2.2~bpo60+2 with OpenSSL 0.9.8o on Debian Squeeze (note that TLSv1.2 does not work in openssl 0.9.8 thus not all ciphers actually work)
+\end{itemize*}
 
 
 \subsubsection{Settings}
-
-\begin{lstlisting}[breaklines]
-  ssl_prefer_server_ciphers on;
-  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # not possible to do exclusive
-  ssl_ciphers '@@@CIPHERSTRINGB@@@';
-  add_header Strict-Transport-Security max-age=2592000;
+\begin{lstlisting}
+ssl_prefer_server_ciphers on;
+ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # not possible to do exclusive
+ssl_ciphers '%*\cipherStringB*)';
+add_header Strict-Transport-Security max-age=15768000; # six months
+# use this only if all subdomains support HTTPS!
+# add_header Strict-Transport-Security "max-age=15768000; includeSubDomains"
 \end{lstlisting}
 
 If you absolutely want to specify your own DH parameters, you can specify them via
 
-\begin{lstlisting}[breaklines]
-  ssl_dhparam file;
+\begin{lstlisting}
+ssl_dhparam file;
 \end{lstlisting}
 
-However, we advise you to read section \ref{section:DH} and stay with the standard IKE/IETF parameters (as long as they are $ > 1024 $ bits).
+However, we advise you to read section \ref{section:DH} and stay with the standard IKE/IETF parameters (as long as they are \textgreater bits).
 
 \subsubsection{Additional settings}
-
 If you decide to trust NIST's ECC curve recommendation, you can add the following line to nginx's configuration file to select special curves:
 
-\begin{lstlisting}[breaklines]
-  ssl_ecdh_curve          secp384r1;
+\begin{lstlisting}
+ssl_ecdh_curve          secp384r1;
 \end{lstlisting}
 
-You might want to redirect everything to http\textbf{s}:// if possible. In Nginx you can do this with the following setting:
+You might want to redirect everything to \emph{https://} if possible. In Nginx you can do this with the following setting:
 
-\begin{lstlisting}[breaklines]
-  return 301 https://$host$request_uri;
+\begin{lstlisting}
+return 301 https://$host$request_uri;
 \end{lstlisting}
 
 
 \subsubsection{References} 
-\begin{itemize}
-\item \url{http://nginx.org/en/docs/http/ngx_http_ssl_module.html}
-\item \url{http://wiki.nginx.org/HttpSslModule}
-\end{itemize}
+\begin{itemize*}
+  \item \url{http://nginx.org/en/docs/http/ngx_http_ssl_module.html}
+  \item \url{http://wiki.nginx.org/HttpSslModule}
+\end{itemize*}
 
 \subsubsection{How to test}
 See appendix \ref{cha:tools}
 
 
-
-
-
 %%---------------------------------------------------------------------- 
 \subsection{MS IIS}
 \label{sec:ms-iis}
-
-
 \todo{Daniel: add screenshots and registry keys}
 
-%\begin{description}
 
 \subsubsection{Tested with Version} \todo{Daniel: add tested version}
 
-\subsubsection{Settings}
-
 
+\subsubsection{Settings}
 When trying to avoid RC4 and CBC (BEAST-Attack) and requiring perfect
 forward secrecy, Microsoft Internet Information Server (IIS) supports
 ECDSA, but does not support RSA for key exchange (consider ECC suite
@@ -230,9 +201,9 @@ elliptic curves needs to be used.
 The configuration of cipher suites MS IIS will use, can be configured in one
 of the following ways:
 \begin{enumerate}
-\item Group Policy \footnote{\url{http://msdn.microsoft.com/en-us/library/windows/desktop/bb870930(v=vs.85).aspx}}
-\item Registry
-\item IIS Crypto~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
+  \item Group Policy \footnote{\url{http://msdn.microsoft.com/en-us/library/windows/desktop/bb870930(v=vs.85).aspx}}
+  \item Registry
+  \item IIS Crypto~\footnote{\url{https://www.nartac.com/Products/IISCrypto/}}
 \end{enumerate}
 
 
@@ -254,7 +225,7 @@ tested using https://www.ssllabs.com.
     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| & Chrome 30, Opera 17, Safari 6+ \\
     \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| & FF 10-24, IE 8+, Safari 5, Java 7\\
     \bottomrule 
- \end{tabular}
 \end{tabular}
   \caption{Client support}
   \label{tab:MS_IIS_Client_Support}
 \end{table}
@@ -271,39 +242,35 @@ MS Terminal Server Connection is used (make sure to use this only in a
 trusted environment). This suite will not be used for SSL, since we do
 not use a RSA Key.
 
-
 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| ... only supported by: IE 10,11, OpenSSL 1.0.1e
 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| ... Chrome 30, Opera 17, Safari 6+
 % \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| ... Firefox 10-24, IE 8+, Safari 5, Java 7
 
-
 Clients not supported:
 \begin{enumerate}
-\item Java 6
-\item WinXP
-\item Bing
+  \item Java 6
+  \item WinXP
+  \item Bing
 \end{enumerate}
 
-\subsubsection{Additional settings}
 
+\subsubsection{Additional settings}
 %Here you can add additional settings
 
-\subsubsection{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
 
-\subsubsection{References}
 
+\subsubsection{References}
 \todo{add references}
 
 % add any further references or best practice documents here
 
+
 \subsubsection{How to test}
 See appendix \ref{cha:tools}
 
-
-%\end{description}
-
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "../applied-crypto-hardening"
index 9f719b7..db6c50f 100644 (file)
@@ -1,20 +1,20 @@
 \section{Scope}
 \label{section:Scope}
 \newline In this guide, we restricted ourselves to:
-\begin{itemize}
-\item Internet-facing services
-\item Commonly used services
-\item Devices which are used in business environments (this specifically excludes XBoxes, Playstations and similar consumer devices)
-\item OpenSSL 
-\end{itemize}
+\begin{itemize*}
+  \item Internet-facing services
+  \item Commonly used services
+  \item Devices which are used in business environments (this specifically excludes XBoxes, Playstations and similar consumer devices)
+  \item OpenSSL 
+\end{itemize*}
 
 We explicitly excluded:
-\begin{itemize}
-\item Specialized systems (such as medical devices, most embedded systems, etc.)
-\item Wireless Access Points
-\item Smart-cards/chip cards
-%\item Services which should be run only in an internal network and never face the Internet.
-\end{itemize}
+\begin{itemize*}
+  \item Specialized systems (such as medical devices, most embedded systems, etc.)
+  \item Wireless Access Points
+  \item Smart-cards/chip cards
+%  \item Services which should be run only in an internal network and never face the Internet.
+\end{itemize*}
 
 %% * whatsapp --> man kann nichts machen, out of scope
 %* Lync: == SIP von M$.
index 98a663d..9b93099 100644 (file)
 
 @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}
index 14f3b83..1d1f6af 100644 (file)
@@ -2,13 +2,13 @@
 \label{cha:suggested-reading}
 This section contains suggested reading material.
 
-\begin{itemize}
+\begin{itemize*}
        \item Cryptography Engineering: Design Principles and Practical Applications, Ferguson, N. and Schneier, B. and Kohno, T. (ISBN-13: 978-0470474242)
        \item Security Engineering: A Guide to Building Dependable Distributed Systems, Anderson, R.J. (ISBN-13: 978-0470068526)
        \item Applied cryptography: protocols, algorithms, and source code in C, Schneier, B. (ISBN-13: 978-0471117094)
        \item Guide to Elliptic Curve Cryptography, Hankerson, D. and Vanstone, S. and Menezes, A.J. (ISBN-13: 978-0387952734)
        \item A Introduction To The Theory of Numbers, Godfrey Harold Hardy, E. M. Wrigh (ISBN-13: 978-0199219865)
        \item Malicious Cryptography: Exposing Cryptovirology, Young A., Yung, M. (ISBN-13: 978-0764549755)
-\end{itemize}
+\end{itemize*}
 
 %% should we include bibtex instead? can be downloaded from books.google.com
index 8515de6..5d83bac 100644 (file)
@@ -1,32 +1,38 @@
 \subsection{myservice}
 
 
-\begin{description}
-\item[Tested with Version:] \todo{version?}
+\subsubsection{Tested with Versions}
+\todo{testing}
+\begin{itemize*}
+  \item Version 0.1, Distro Version
+\end{itemize*}
 
-\item[Settings:] \mbox{}
+\subsubsection{Settings}
 
-\begin{lstlisting}[breaklines]
+\begin{lstlisting}
     %Here goes your setting string
 \end{lstlisting}
 
-\item[Additional settings:] \mbox{}
+\subsubsection{Additional settings}
 
 %Here you can add additional settings
 
-\begin{lstlisting}[breaklines]
+\begin{lstlisting}
     %copy \& paste additional settings
 \end{lstlisting}
 
-\item[Justification for special settings (if needed):] \mbox{}
+\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:] \todo{add references}
+\subsubsection{References}
+\todo{add references}
+\begin{itemize*}
+  \item short description: \url{http://example.com/doc/ssl}
+\end{itemize*}
 
 % add any further references or best practice documents here
 
-\item[How to test:]
+\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.
 
-\end{description}
index 4710bd3..aa3be91 100644 (file)
@@ -63,7 +63,7 @@ tools.  On Unix-like systems, it is likely that the OpenSSL suite is available
 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
@@ -117,12 +117,17 @@ CA at all, but is signed by the entity that it is issued to.  Thus, the
 organizational overhead of running a CA is eliminated at the expense of
 having to establish all trust relationships between entities manually.
 
-With OpenSSL, a self-signed certificate may be created with this command:
+With OpenSSL, you can self-sign a previously created certificate with this command:
 
 \begin{lstlisting}
 % openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
 \end{lstlisting}
 
+You can also create a self-signed certificate in just one command:
+\begin{lstlisting}
+openssl req -new -x509 -keyout privkey.pem -out cacert.pem -days 1095 -nodes -newkey rsa:<keysize>
+\end{lstlisting}
+
 The resulting certificate will by default not be trusted by anyone at all,
 so in order to be useful, the certificate will have to be made known a
 priori to all parties that may encounter it.
index 4cc18c9..2f25277 100644 (file)
@@ -36,12 +36,12 @@ be generated.
 This typically occurs for embedded devices and virtual machines.
 Embedded devices lack some entropy sources other devices have, e.g.:
 
-\begin{itemize}
-\item No persistent clock, so boot-time is not contributing to the
+\begin{itemize*}
+  \item No persistent clock, so boot-time is not contributing to the
     initial RNG state
-\item No hard-disk: No entropy from hard-disk timing, no way to store
+  \item No hard-disk: No entropy from hard-disk timing, no way to store
     entropy between reboots
-\end{itemize}
+\end{itemize*}
 
 Virtual machines emulate some hardware components so that the
 generated entropy is over-estimated. The most critical component that
index b1096f5..22494be 100644 (file)
@@ -16,7 +16,7 @@
 
 \subsection{Recommended cipher suites}
 \label{section:recommendedciphers}
-\input{"./theory/cipher_suites/recommended_generated.tex"}
+\input{"./theory/cipher_suites/recommended.tex"}
 
 
 %\subsection{Known insecure and weak cipher suites}
index 4d40709..c797065 100644 (file)
@@ -9,7 +9,7 @@ authenticated encryption schemes. It consists of the following components:
 
 \begin{description}
 
-\item[Key exchange protocol:]
+  \item[Key exchange protocol:]
 ``An (interactive) key exchange protocol is a method whereby parties who do not 
 share any secret information can generate a shared, secret key by communicating 
 over a public channel. The main property guaranteed here is that an 
@@ -18,24 +18,24 @@ line does not learn anything about the resulting secret key.''~\cite{katz2008int
 
 Example: \texttt{DHE}
 
-\item[Authentication:]
+  \item[Authentication:]
 The client authenticates the server by its certificate. Optionally the server 
 may authenticate the client certificate.
 
 Example: \texttt{RSA}
 
-\item[Cipher:]
+  \item[Cipher:]
 The cipher is used to encrypt the message stream. It also contains the key size
 and mode used by the suite.
 
 Example: \texttt{AES256}
 
-\item[Message authentication code (MAC):]
+  \item[Message authentication code (MAC):]
 A MAC ensures that the message has not been tampered with (integrity).
 
 Examples: \texttt{SHA256}
 
-\item[Authenticated Encryption with Associated Data (AEAD):]
+  \item[Authenticated Encryption with Associated Data (AEAD):]
 AEAD is a class of authenticated encryption block-cipher modes
 which take care of encryption as well as authentication (e.g. GCM, CCM mode). 
 
index 6749ef3..2147b7e 100644 (file)
@@ -44,15 +44,14 @@ from the server's public key.
    ECDSA  & DSA           & yes          & no                 \\
 \bottomrule
 \end{tabular}
-%\\
-%\\
 %disabled: \texttt{!PSK:!SRP}
 \end{center}
 
 \textbf{Ephemeral Key Exchange} uses different keys for authentication (the server's RSA
 key) and encryption (a randomly created key). This advantage is called ``Forward
 Secrecy'' and means that even recorded traffic cannot be decrypted later when someone
-obtains the server key. \\
+obtains the server key.
+
 All ephemeral key exchange schemes are based on the Diffie-Hellman algorithm and require
 pre-generated Diffie-Hellman parameter (which allow fast ephemeral key generation). It
 is important to note that the Diffie-Hellman parameter settings need to reflect at least 
@@ -119,7 +118,7 @@ Other hash functions like MD2, MD4 or MD5 are unsafe and broken: \texttt{!MD2:!M
 %%% NOTE: we do not need to list this all here, can move to an appendix
 %At the time of this writing, SSL is defined in RFCs:  
 %
-%\begin{itemize}
+%\begin{itemize*}
 %\item RFC2246 - TLS1.0                
 %\item RFC3268 - AES           
 %\item RFC4132 - Camelia               
@@ -140,7 +139,7 @@ Other hash functions like MD2, MD4 or MD5 are unsafe and broken: \texttt{!MD2:!M
 %\item RFC6367 - Camelia               
 %\item RFC6655 - AES\_CCM              
 %\item RFC7027 - Brainpool Curves              
-%\end{itemize}
+%\end{itemize*}
 
 %\subsubsection{Overview of SSL Server settings}
 %
@@ -195,13 +194,13 @@ Other hash functions like MD2, MD4 or MD5 are unsafe and broken: \texttt{!MD2:!M
 %Next we tested the cipher suites above on the following clients:
 %
 %%% NOTE: we need to test with more systems!!
-%\begin{itemize}
+%\begin{itemize*}
 %\item Chrome 30.0.1599.101 Mac OS X 10.9
 %\item Safari 7.0 Mac OS X 10.9
 %\item Firefox 25.0 Mac OS X 10.9
 %\item Internet Explorer 10 Windows 7
 %\item Apple iOS 7.0.3
-%\end{itemize}
+%\end{itemize*}
 %
 %
 %The result of testing the cipher suites with these clients gives us a preference order as shown in table \ref{table:prefOrderCipherSuites}. 
index 1282137..1078f31 100644 (file)
@@ -6,7 +6,7 @@ keeping high cipher suite security while supporting as many users as possible.
 The website \url{https://www.ssllabs.com/} gives administrators and security engineers
 a tool to test their setup and compare compatibility with clients. The authors made 
 use of ssllabs.com to arrive at a set of cipher suites which we will recommend 
-throughout this document.\\
+throughout this document.
 
 %\textbf{Caution: these settings can only represent a subjective
 %choice of the authors at the time of writing. It might be a wise choice to
@@ -25,16 +25,16 @@ deployments where software that is to be used can be defined without restriction
 
 We arrived at this set of cipher suites by selecting:
 
-\begin{itemize}
-\item TLS 1.2
-\item Perfect forward secrecy / ephemeral Diffie Hellman
-\item strong MACs (SHA-2) or
-\item GCM as Authenticated Encryption scheme
-\end{itemize}
+\begin{itemize*}
+  \item TLS 1.2
+  \item Perfect forward secrecy / ephemeral Diffie Hellman
+  \item strong MACs (SHA-2) or
+  \item GCM as Authenticated Encryption scheme
+\end{itemize*}
 
 This results in the OpenSSL string:
 
-\begin{lstlisting}[breaklines]
+\begin{lstlisting}
 'EDH+aRSA+AES256:EECDH+aRSA+AES256:!SSLv3'
 \end{lstlisting}
 
@@ -76,23 +76,22 @@ 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
 better compatibility with a broad range of clients, but also less computational
 workload on the provisioning hardware.
-\\
+
 
 \textbf{All further examples in this publication use Configuration B}.\\
 
 We arrived at this set of cipher suites by selecting:
 
-\begin{itemize}
-\item TLS 1.2, TLS 1.1, TLS 1.0
-\item allowing SHA-1 (see the comments on SHA-1 in section \ref{section:SHA})
-
-\end{itemize}
+\begin{itemize*}
+  \item TLS 1.2, TLS 1.1, TLS 1.0
+  \item allowing SHA-1 (see the comments on SHA-1 in section \ref{section:SHA})
+\end{itemize*}
 
 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}
@@ -149,17 +148,17 @@ used on legacy installations (e.g. OpenSSL 0.9.8).
 Our recommended cipher strings are meant to be used via copy and paste and need to work
 "out of the box".
 
-\begin{itemize}
-\item TLSv1.2 is preferred over TLSv1.0 (while still providing a useable cipher
+\begin{itemize*}
+  \item TLSv1.2 is preferred over TLSv1.0 (while still providing a useable cipher
       string for TLSv1.0 servers).
-\item AES256 and CAMELLIA256 count as very strong ciphers at the moment.
-\item AES128 and CAMELLIA128 count as strong ciphers at the moment
-\item DHE or ECDHE for forward secrecy
-\item RSA as this will fit most of today's setups
-\item AES256-SHA as a last resort: with this cipher at the end, even server
+  \item AES256 and CAMELLIA256 count as very strong ciphers at the moment.
+  \item AES128 and CAMELLIA128 count as strong ciphers at the moment
+  \item DHE or ECDHE for forward secrecy
+  \item RSA as this will fit most of today's setups
+  \item AES256-SHA as a last resort: with this cipher at the end, even server
       systems with very old OpenSSL versions will work out of the box (version 0.9.8 for example does not
-      provide support for ECC and TLSv1.1 or above). \\
+      provide support for ECC and TLSv1.1 or above). \newline
       Note however that this cipher suite will not provide forward secrecy. It
       is meant to provide the same client coverage (eg. support Microsoft crypto
       libraries) on legacy setups.
-\end{itemize}
+\end{itemize*}
index 2b450b1..d0724de 100644 (file)
@@ -46,21 +46,17 @@ this web site.
 
 
 \paragraph{Summary}
-\begin{itemize}
-
-\item For asymmetric public-key cryptography we consider any key length below
+\begin{itemize*}
+  \item For asymmetric public-key cryptography we consider any key length below
 3248 bits to be deprecated at the time of this writing (for long term
 protection).
-
-\item For elliptic curve cryptography we consider key lengths below 256 bits to
+  \item For elliptic curve cryptography we consider key lengths below 256 bits to
 be inadequate for long term protection.  
-
-\item For symmetric algorithms we consider anything below 128 bits to be
+  \item For symmetric algorithms we consider anything below 128 bits to be
 inadequate for long term protection.
+\end{itemize*}
 
-\end{itemize}
-
-\paragraph{Special remark on 3DES} \mbox{} \\
+\paragraphDiamond{Special remark on 3DES}
 We want to note that 3DES theoretically has 168 bits of security, however based
 on the NIST Special Publication 800-57
 \footnote{\url{http://csrc.nist.gov/publications/PubsSPs.html\#800-57-part1},
index 1068e1f..daeb761 100644 (file)
@@ -10,7 +10,7 @@
   \begin{flushleft}
     {\large \color{intersectgreen} 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
+      Adi Kriegisch, Ulrich Pöschl, Ramin Sabet, Berg San, Ralf
       Schlatterbeck, Thomas Schreck, Aaron Zauner, Pepi Zawodsky
       \par}
     \bigskip
index 39642da..2f97baf 100644 (file)
@@ -5,53 +5,53 @@ This section lists tools for checking the security settings.
 \section{SSL \& TLS}
 
 Server checks via the web
-\begin{itemize}
-\item \href{http://ssllabs.com}{ssllabs.com} offers a great way to check your webserver for misconfigurations. See \url{https://www.ssllabs.com/ssltest/}. Furthermore, ssllabs.com has a good best practices tutorial, which focuses on avoiding the most common mistakes in SSL.
-\item SSL Server certificate installation issues \url{http://www.sslshopper.com/ssl-checker.html}
-\item Check SPDY protocol support and basic TLS setup \url{http://spdycheck.org/}
-\item XMPP/Jabber Server check (Client-to-Server and Server-to-Server) \url{https://xmpp.net/}
-\item Luxsci SMTP TLS Checker \url{https://luxsci.com/extranet/tlschecker.html}
-\item \url{http://checktls.com} is a tool for testing arbitrary TLS services.
-\item TLS and SSH key check \url{https://factorable.net/keycheck.html}
-\item \url{http://tls.secg.org} is a tool for testing interoperability of HTTPS implementations for ECC cipher suites.
-\item \url{http://www.whynopadlock.com/} Testing for mixed SSL parts loaded via http that can totally lever your https.
-\end{itemize}
+\begin{itemize*}
+  \item \href{http://ssllabs.com}{ssllabs.com} offers a great way to check your webserver for misconfigurations. See \url{https://www.ssllabs.com/ssltest/}. Furthermore, ssllabs.com has a good best practices tutorial, which focuses on avoiding the most common mistakes in SSL.
+  \item SSL Server certificate installation issues \url{http://www.sslshopper.com/ssl-checker.html}
+  \item Check SPDY protocol support and basic TLS setup \url{http://spdycheck.org/}
+  \item XMPP/Jabber Server check (Client-to-Server and Server-to-Server) \url{https://xmpp.net/}
+  \item Luxsci SMTP TLS Checker \url{https://luxsci.com/extranet/tlschecker.html}
+  \item \url{http://checktls.com} is a tool for testing arbitrary TLS services.
+  \item TLS and SSH key check \url{https://factorable.net/keycheck.html}
+  \item \url{http://tls.secg.org} is a tool for testing interoperability of HTTPS implementations for ECC cipher suites.
+  \item \url{http://www.whynopadlock.com/} Testing for mixed SSL parts loaded via http that can totally lever your https.
+\end{itemize*}
 
 Browser checks
-\begin{itemize}
-\item Check your browser's SSL capabilities: \url{https://cc.dcsec.uni-hannover.de/} and \url{https://www.ssllabs.com/ssltest/viewMyClient.html}.
-\item Check Browsers SSL/TLS support and vulnerability to attacks: \url{https://www.howsmyssl.com}
-\end{itemize}
+\begin{itemize*}
+  \item Check your browser's SSL capabilities: \url{https://cc.dcsec.uni-hannover.de/} and \url{https://www.ssllabs.com/ssltest/viewMyClient.html}.
+  \item Check Browsers SSL/TLS support and vulnerability to attacks: \url{https://www.howsmyssl.com}
+\end{itemize*}
 
 
 Command line tools
-\begin{itemize}
-\item \url{http://sourceforge.net/projects/sslscan} connects to a given SSL service and shows the cipher suites that are offered.
-\item \url{http://checktls.com} is a tool for testing arbitrary TLS services. 
-\item \url{http://www.bolet.org/TestSSLServer/} tests for BEAST and CRIME vulnerabilities.
-\item \url{https://github.com/iSECPartners/sslyze} Fast and full-featured SSL scanner
-\item \url{http://nmap.org/} nmap security scanner
-\item \url{http://www.openssl.net} OpenSSL s\_client
-\end{itemize}
+\begin{itemize*}
+  \item \url{http://sourceforge.net/projects/sslscan} connects to a given SSL service and shows the cipher suites that are offered.
+  \item \url{http://checktls.com} is a tool for testing arbitrary TLS services. 
+  \item \url{http://www.bolet.org/TestSSLServer/} tests for BEAST and CRIME vulnerabilities.
+  \item \url{https://github.com/iSECPartners/sslyze} Fast and full-featured SSL scanner
+  \item \url{http://nmap.org/} nmap security scanner
+  \item \url{http://www.openssl.net} OpenSSL s\_client
+\end{itemize*}
 
 
 \section{Keylength}
-\begin{itemize}
-\item \url{http://www.keylength.com} comprehensive online resource for comparison of keylengths according to common recommendations and standards in cryptography.
-\end{itemize}
+\begin{itemize*}
+  \item \url{http://www.keylength.com} comprehensive online resource for comparison of keylengths according to common recommendations and standards in cryptography.
+\end{itemize*}
 
 
 \section{RNGs}
 
 %% NOTE: should we merge that with chapter 6.6??
-\begin{itemize}
-\item \href{http://www.fourmilab.ch/random/}{ENT} is a pseudo random number generator sequence tester.
-\item \href{http://www.issihosts.com/haveged/}{HaveGE} is a tool which increases the Entropy of the Linux random number generator devices. It is based on the HAVEGE algorithm. \url{http://dl.acm.org/citation.cfm?id=945516}
-\item \href{http://www.phy.duke.edu/~rgb/General/dieharder.php}{Dieharder} a random number generator testing tool.
-\item \href{http://www.cacert.at/random/}{CAcert Random} another random number generator testing service.
-\end{itemize}
+\begin{itemize*}
+  \item \href{http://www.fourmilab.ch/random/}{ENT} is a pseudo random number generator sequence tester.
+  \item \href{http://www.issihosts.com/haveged/}{HaveGE} is a tool which increases the Entropy of the Linux random number generator devices. It is based on the HAVEGE algorithm. \url{http://dl.acm.org/citation.cfm?id=945516}
+  \item \href{http://www.phy.duke.edu/~rgb/General/dieharder.php}{Dieharder} a random number generator testing tool.
+  \item \href{http://www.cacert.at/random/}{CAcert Random} another random number generator testing service.
+\end{itemize*}
 
 \section{Guides}
-\begin{itemize}
-\item See: \url{https://www.ssllabs.com/downloads/SSL_TLS_Deployment_Best_Practices_1.3.pdf}.
-\end{itemize}
+\begin{itemize*}
+  \item See: \url{https://www.ssllabs.com/downloads/SSL_TLS_Deployment_Best_Practices_1.3.pdf}.
+\end{itemize*}