Merge branch 'master' of https://git.bettercrypto.org/ach-master
authorEva Seidl <eva@booksinthefridge.at>
Sun, 22 Dec 2013 12:51:11 +0000 (13:51 +0100)
committerEva Seidl <eva@booksinthefridge.at>
Sun, 22 Dec 2013 12:51:11 +0000 (13:51 +0100)
63 files changed:
.gitignore
TODO.txt
src/.gitignore
src/DH.tex
src/Makefile
src/PKIs.tex
src/SHA.tex [new file with mode: 0644]
src/abstract.tex
src/acknowledgements.tex
src/applied-crypto-hardening.bib
src/applied-crypto-hardening.tex
src/cipher_suite_names.tex [new file with mode: 0644]
src/cipher_suites.tex
src/cipher_suites/architecture.tex
src/cipher_suites/choosing.tex
src/cipher_suites/recommended.tex
src/disclaimer.tex
src/further_research.tex
src/gitinfo.sty [new file with mode: 0644]
src/gitsetinfo.sty [new file with mode: 0644]
src/howtoread.tex
src/img/howtoread.dot [new file with mode: 0644]
src/img/howtoread.eps [new file with mode: 0644]
src/img/howtoread.pdf [new file with mode: 0644]
src/keylengths.tex
src/keylengths_com.png [new file with mode: 0644]
src/links.tex
src/methods.tex
src/neboltai.png [new file with mode: 0644]
src/perlify.pl
src/practical_settings.tex
src/practical_settings/DBs.tex
src/practical_settings/im.tex
src/practical_settings/ipmi.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/practical_settings/webserver.tex.template [deleted file]
src/reviewers.tex
src/scope.tex
src/security.bib
src/ssllibs.tex
src/suite_names.tex [new file with mode: 0644]
src/tools.tex
tools/dhparams/Makefile [new file with mode: 0644]
tools/dhparams/README [new file with mode: 0644]
tools/dhparams/group14.pem [new file with mode: 0644]
tools/dhparams/group14.txt [new file with mode: 0644]
tools/dhparams/group15.pem [new file with mode: 0644]
tools/dhparams/group15.txt [new file with mode: 0644]
tools/dhparams/group16.pem [new file with mode: 0644]
tools/dhparams/group16.txt [new file with mode: 0644]
tools/dhparams/group17.pem [new file with mode: 0644]
tools/dhparams/group17.txt [new file with mode: 0644]
tools/dhparams/group18.pem [new file with mode: 0644]
tools/dhparams/group18.txt [new file with mode: 0644]
tools/dhparams/parse.pl [new file with mode: 0755]
tools/suitenames/Makefile [new file with mode: 0644]
tools/suitenames/README [new file with mode: 0644]
tools/suitenames/buildsuites.pl [new file with mode: 0644]
tools/suitenames/template.tex [new file with mode: 0644]

index e43b0f9..19cac69 100644 (file)
@@ -1 +1,5 @@
 .DS_Store
+old
+old/*
+foo
+src/foo
\ No newline at end of file
index 0e56015..63feb77 100644 (file)
--- a/TODO.txt
+++ b/TODO.txt
@@ -6,33 +6,40 @@ BIG TOPICS
 ==========
 
 
-* DDOS possibilities when we increase cyrpto security?? What about that?
+* clean up 9.5 "chossing your own cipher"
 
-* write a Justification section to every setting, maybe have that later in the document. 
+* DDOS possibilities when we increase cyrpto security?? What about that? (--> LATER)
 
-* move the explanations to a later part of the document. Code snippets go *first* . The target group is sysadmins, must be easily copy & paste-able. Or find a different way so that they can easily use/read the document
+* write a Justification section to every setting, maybe have that later in the document. 
 
-* Write section 7.3 (-> Adi . How to chose your own cipher string + screenshots)
+DONE * move the explanations to a later part of the document. Code snippets go *first* . The target group is sysadmins, must be easily copy & paste-able. Or find a different way so that they can easily use/read the document
 
-* Decide/Discuss recommended ciphers:
+DONE * Decide/Discuss recommended ciphers:
   - DH parameters: what is our recommendation? >2048? >=2048? leave default (aka 1024)?
+  --> answer: we trust IETF/IKE  as described in ECRYPT2
 
-* comments from IAIK integrate (--> Aaron)
-* SHA-1 section: write why it is a problem
-* include OpenSSL names/IANA names into appendix
+* comments from IAIK integrate (--> Aaron, check again if it was done)
+* SHA-1 section: write why it is a problem (--> Florian Mendel)
+* PKI section (--> Thomas Schreck)
+DONE * include OpenSSL names/IANA names into appendix (--> cm)
 * Document RNG problem in Apache (--> Pepi)
-* Oracle ?? (--> Berg?? maybe . Or aaron: ask nic.at. Or link to T-Systems paper)
-* DB2 (--> Berg. Or ask MLeyrer)
+DONE * Oracle ?? (--> Berg?? maybe . Or aaron: ask nic.at. Or link to T-Systems paper) --> T-Systems paper
+DONE * DB2 (--> Berg. Or ask MLeyrer)
+* Add AES128 to cipherStringA ?
+* re-work chapter 2 (practical settings). Add lots of references to chapter 3 to get people interested in reading the theory.
+
 
 Formatting
 ==========
+
 DONE * one-column layout: make page margins smaller
 DONE * add large "DRAFT" letters on top of every page.
-  make the git version number part of the document
-* Layout of sample code (lstisting format) : make it pretty!
+DONE  make the git version number part of the document
+DONE * Layout of sample code (lstisting format) : make it pretty!
+Rendering in Firefox (inline) on Windows seems to be really messed up. What happenened?
 
+* make every section like the Apache section (--> Aaron)
 
-* make every section like the Apache section
 
 Workflow
 ========
@@ -79,7 +86,7 @@ Contents
 
 * document (cite) EVERYTHING! Why we chose certain values. Referneces, references, references. Otherwise it does not count!
   Srsly!!
-* .bib file is completely wrong. Make good citations/references. Add books: Schneier, ...
+DONE * .bib file is completely wrong. Make good citations/references. Add books: Schneier, ...
 * !! important: add the version string to everything that we tested!!
 
 * two target groups:
@@ -88,17 +95,17 @@ Contents
 * look at TLS1.2 specs and really check if we want all of these settings
 
 
-Section 6
+Practical settings section
 ----------
 Definitely still missing these subsubsections:
 * Exchange Server ??  (--> bei M$ angefragt, Evtl. Beitrag von A-Trust)
   - SMTP, POP, IMAP
 DONE * Exim4 (-> Adi & Wolfgang Breya)
-* Checkpoint (-> cm)
+DONE * Checkpoint (-> cm)
 * Asa / Palo Alto (-> Azet)
 * Terminal Server (VNC ), ??
-* Squid
-* XMPP
+DONE * Squid
+DONE * XMPP
   --> verweise auf die xmpp community bzw. auf xmpp.net verweisen.
   Empfehlung: unbedingt ejabberd updaten!!  
 
@@ -114,7 +121,7 @@ DONE * Exim4 (-> Adi & Wolfgang Breya)
   * Cisco IPSec
   * Juniper VPN
   * L2TP over IPSec -> egal
-* SIP   -> Klaus???
+* SIP   -> Klaus
 * SRTP  -> Klaus???
 * DNSSec ??    Verweis auf BCPxxx      --> out of scope
    - DANE
@@ -147,6 +154,9 @@ seclayer-tcp    3495/tcp    # securitylayer over tcp
 * phpmyadmin --> haengt am apache, out of scope
 * DSL modems -> out of scope
 * UPnP, natPmp --> out of scope
+* SAML federated auth providers (e.g., all the REFEDS folks (https://refeds.org/)), including InCommon (http://www.incommon.org/federation/metadata.html)
+  https://wiki.shibboleth.net/confluence/display/SHIB2/TrustManagement (idea by Joe St. Sauver)
+* 
 ----- snip ---- all protocols that we looked at --- snip ----
 
 
@@ -156,9 +166,9 @@ seclayer-tcp    3495/tcp    # securitylayer over tcp
 
 RNDG section
 ------------
-- add two, three sentences
-- mention HaveGED 
-- embedded devices are a problem
+DONE - add two, three sentences
+DONE - mention HaveGED 
+DONE - embedded devices are a problem
 
 
 
@@ -175,6 +185,6 @@ LATER / further
 * Radius
 * Windows Active Directory
 * SRP: not part of this document
-* \cipherA , \cipherB setting ---> does not work in our \begin{listing} environment --> maybe there is a different listing environment or use awk/sed/make/perl/python
+DONE * \cipherA , \cipherB setting ---> does not work in our \begin{listing} environment --> maybe there is a different listing environment or use awk/sed/make/perl/python
 * What about 3270 terminal emulation? How to do crypto there? Can we? ( --> IBM sec. Stammtisch. Aaron)
 
index c5aa1e9..5a2230a 100644 (file)
@@ -11,3 +11,7 @@ applied-crypto-hardening.markdown
 *.swp
 applied-crypto-hardening/
 gitHeadInfo.gin
+old/*
+practical_settings/*_generated.tex
+cipher_suites/*_generated.tex
+*_generated.tex
index c9ae226..4a869a5 100644 (file)
@@ -3,3 +3,10 @@
 
 A common question is which Diffie Hellman (DH) Parameters  should be used for Diffie Hellman key exchanges\footnote{\url{http://crypto.stackexchange.com/questions/1963/how-large-should-a-diffie-hellman-p-be}}. We follow the recommendations in ECRYPT II, chapter 16.\cite{ii2011ecrypt}
 
+Where configurable, we recommend using the Diffie Hellman groups
+defined for IKE, specifically groups 14-18 (for MODP, \cite{rfc3526})
+and 19-21 (for elliptic curve DH, \cite{rfc5903}). These groups have
+been checked by many eyes and can be assumed to be secure.
+
+For convenience, we provide these parameters as PEM files. \todo{put
+  them on the server and insert URL here}.
index 0060240..79584c9 100644 (file)
@@ -2,8 +2,12 @@ NOW := $(shell date)
 
 all:   pdf html md
 
-pdf:
+%_generated.tex: %.tex
+       ./perlify.pl
+
+pdf: 
        ./update-metadata-for-gitinfo
+       ./perlify.pl
        pdflatex applied-crypto-hardening
        bibtex applied-crypto-hardening
        while grep -s "Rerun to get cross-references right" \
@@ -38,5 +42,6 @@ clean:
             applied-crypto-hardening.blg applied-crypto-hardening.dvi   \
             applied-crypto-hardening.log applied-crypto-hardening.pdf   \
             applied-crypto-hardening.toc applied-crypto-hardening.markdown
+       find . -name "*_generated.tex" -exec rm \{\} \;
        rm -rf applied-crypto-hardening/
        rm -rf gitHeadInfo.gin
index c149879..a5b87ac 100644 (file)
 \label{section:PKIs}
 
 Public-Key Infrastructures aim to provide a way to simplify the verification of
-a certificates trustworthiness.  For this, certificate authorities (CAs) are
+a certificate's trustworthiness.  For this, certificate authorities (CAs) are
 used to create a signature chain from the root CA down to the server (or client).
 Accepting a CA as a generally-trusted mediator solves the trust-scaling problem
 at the cost of introducing an actor that magically is more trustworthy.
 
-This section deals with settings related to trusting CAs. However, our main
-recommendations for PKIs is: if you are able to run your own PKI and disable
-any other CA, do so. This makes sense most in environments where any machine-to-machine
-communication system compatibility with external entities is not an issue.
-%% azet:
-%% this needs discussion! self-signed certificates simply do not work in practices
-%% for real-world scenarios - i.e. websites that actually serve a lot of people
+The first part of this section addresses how to obtain a certificate.  The
+second part offers recommendations on how to improve the security of your
+PKI.
 
-A good background on PKIs can be found in 
-\footnote{\url{https://developer.mozilla.org/en/docs/Introduction_to_Public-Key_Cryptography}}
-\footnote{\url{http://cacr.uwaterloo.ca/hac/about/chap8.pdf}}
-\footnote{\url{http://www.verisign.com.au/repository/tutorial/cryptography/intro1.shtml}}
-.
+\subsection{Certificate Authorities}
+\label{sec:cas}
+In order to get a certificate, you can find an external CA willing to issue
+a certificate for you, run your own CA, or use self-signed certificates.
+As always, there are advantages and disadvantages for every one of these
+options; a balance of security versus usability needs to be found.
 
-\todo{ts: Background and Configuration (EMET) of Certificate Pinning, TLSA integration, 
-  When to use self-signed certificates, how to get certificates from public CA authorities 
-  (CACert, StartSSL), Best-practices how to create a CA and how to generate private keys/CSRs, 
-  Discussion about OCSP and CRLs. TD: Useful Firefox plugins: CipherFox, Conspiracy, Perspectives.}
+\subsubsection{Certificates From an External Certificate Authority}
+\label{sec:signcertfromca}
 
+There is a fairly large number of commercial CAs that will issue
+certificates for money.  Some of the most ubiquitous commercial CAs are
+Verisign, GoDaddy, and Teletrust.  However, there are also CAs that offer
+certificates for free.  The most notable examples are StartSSL, which is a
+company that offers some types of certificates for free, and CAcert, which
+is a non-profit volunteer-based organisation that does not charge at all
+for issuing certificates.  Finally, in the research and education field, a
+number of CAs exist that are generally well-known and well-accepted within
+the higher-education community.
 
-%``Certificate Policy''\cite{Wikipedia:Certificate_Policy}
-%(CA)
+When requesting a certificate from a CA, it is vital that you generate the
+key pair yourself.  In particular, the private key should never be known to
+the CA.  If a CA offers to generate the key pair for you, you should not
+trust that CA.
+
+Generating a key pair and a certificate request can be done with a number
+of tools.  On Unixoid 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]
+% 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
+Locality Name (eg, city) []:Munich
+Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example
+Organizational Unit Name (eg, section) []:Example Section
+Common Name (e.g. server FQDN or YOUR name) []:example.com
+Email Address []:admin@example.com
+
+Please enter the following 'extra' attributes
+to be sent with your certificate request
+A challenge password []:
+An optional company name []:
+\end{lstlisting}
+
+\subsubsection{Setting Up Your Own Certificate Authority}
+\label{sec:setupownca}
+In some situations it is advisable to run your own certificate authority.
+Whether this is a good idea depends on the exact circumstances.  Generally
+speaking, the more centralized the control of the systems in your
+environment, the fewer pains you will have to go through to deploy your own
+CA.  On the other hand, running your own CA maximizes the trust level that
+you can achieve because it minimizes external trust dependencies.
+
+Again using OpenSSL as an example, you can set up your own CA with the
+following commands on a Debian system:
+
+\begin{lstlisting}
+% cd /usr/lib/ssl/misc
+% sudo ./CA.pl -newca
+\end{lstlisting}
+
+Answer the questions according to your setup. Now that you have configured your basic settings and 
+issued a new root certificate, you can issue new certificates as follows:
+
+\begin{lstlisting}
+% cd /usr/lib/ssl/misc
+% sudo ./CA.pl -newreq
+\end{lstlisting}
+
+\subsubsection{Creating a Self-Signed Certificate}
+\label{sec:pki:selfsignedcert}
+If the desired trust level is very high and the number of systems involved
+is limited, the easiest way to set up a secure environment may be to use
+self-signed certificates.  A self-signed certificate is not issued by any
+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:
+
+\begin{lstlisting}
+% openssl req -new -x509 -key privkey.pem -out cacert.pem -days 1095
+\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.
+
+
+\subsection{Hardening PKI}
+\label{sec:hardeningpki}
+In recent years several CAs were compromised by attackers in order to
+get ahold of trusted certificates for malicious activities. In 2011 
+the Dutch CA Diginotar was hacked and all certificates were
+revoked~\cite{diginotar-hack}. Recently Google found certificates
+issued to them, which were not used by the
+company~\cite{googlecahack}. The concept of PKIs heavily depends on the
+security of CAs.  If they get compromised the whole PKI system will
+fail. Some CAs tend to incorrectly issue certificates that were designated
+to do a different job than what they were intended to by the CA~\cite{gocode}.
+
+Therefore several security enhancements were introduced by different
+organisations and vendors~\cite{tschofenig-webpki}. Currently two
+methods are used, DANE~\cite{rfc6698} and Certificate
+Pinning~\cite{draft-ietf-websec-key-pinning}. Google recently proposed
+a new system to detect malicous CAs and certificates  called Certificate 
+Transparency~\cite{certtransparency}.
+
+% \subsubsection{DANE}
+% \label{sec:dane}
+
+% \subsubsection{Certificate Pinning}
+% \label{sec:certpinning}
+
+
+
+% This section deals with settings related to trusting CAs. However,
+% our main recommendations for PKIs is: if you are able to run your
+% own PKI and disable any other CA, do so. This makes sense most in
+% environments where any machine-to-machine communication system
+% compatibility with external entities is not an issue.
+%% azet: this needs discussion! self-signed certificates simply do not
+%% work in practices for real-world scenarios - i.e. websites that
+%% actually serve a lot of people
+
+% A good background on PKIs can be found in
+% \footnote{\url{https://developer.mozilla.org/en/docs/Introduction_to_Public-Key_Cryptography}}
+% \footnote{\url{http://cacr.uwaterloo.ca/hac/about/chap8.pdf}}
+% \footnote{\url{http://www.verisign.com.au/repository/tutorial/cryptography/intro1.shtml}}
+% .
+
+% \todo{ts: Background and Configuration (EMET) of Certificate Pinning,
+%   TLSA integration, When to use self-signed certificates, how to get
+%   certificates from public CA authorities (CACert, StartSSL),
+%   Best-practices how to create a CA and how to generate private
+%   keys/CSRs, Discussion about OCSP and CRLs. TD: Useful Firefox
+%   plugins: CipherFox, Conspiracy, Perspectives.}
+
+
+% ``Certificate Policy''\cite{Wikipedia:Certificate_Policy} (CA)
diff --git a/src/SHA.tex b/src/SHA.tex
new file mode 100644 (file)
index 0000000..fb88353
--- /dev/null
@@ -0,0 +1,21 @@
+\section{A note on SHA-1}
+\label{section:SHA}
+
+
+In the last years several weaknesses have been shown for SHA-1. In
+particular, collisions on SHA-1 can be found using $2^{63}$ operations, and
+recent results even indicate a lower complexity. Therefore,
+ECRYPT II and NIST recommend against using SHA-1 for generating digital
+signatures and for other applications that require collision resistance.
+The use of SHA-1 in message authentication, e.g. HMAC, is not
+immediately threatened.
+
+We recommend using SHA-2 whenever available. Since SHA-2 is not
+supported by older versions of TLS, SHA-1 can be used for message
+authentication if a higher compatibility with a more diverse set of
+clients is needed.
+
+
+Our configurations A and B reflect this. While configuration A does not include
+SHA-1, configuration B does and thus is more compatible with a wider range of
+clients.
index 7e76064..f1160a4 100644 (file)
@@ -1,5 +1,23 @@
+\begin{figure}[H]
+% move this to a fitting place. I don't see why it fits here inside of the begin figure env. ~~ AK
+%\epigraph{``[...] be conservative in what you do, be liberal in what
+%you accept from others.''}{-- The robustness priciple or "Postel's Law"\cite{rfc761}}
+  \centering
+  \includegraphics[width=0.9\textwidth]{neboltai.png}
+  \caption*{Do not talk unencrypted}
+  \label{fig:neboltai}
+\end{figure}
+
+\begin{abstract}
 \section*{Abstract}
 
+
+\vskip 2em
+
+\epigraph{``Unfortunately, the computer security and cryptology communities have drifted apart over the last 25 years. Security people don't always understand the available crypto tools, and crypto people don't always understand the real-world problems.``}{-- Ross Anderson in \cite{anderson2008security}}
+
+\vskip 2em
+
 This guide arose out of the need for system administrators to have an
 updated, solid, well researched and thought-through guide for configuring SSL,
 PGP, SSH and other cryptographic tools in the post-Snowden age. Triggered by the NSA
@@ -9,37 +27,46 @@ This guide is specifically written for these system administrators.
 
 \vskip 0.5em
 
-As Schneier noted\cite{Sch13},
-it seems that intelligence agencies and adversaries on the Internet are not
-breaking so much the mathematics of encryption per se, but rather use software
-and hardware weaknesses, subvert standardization processes, plant backdoors,
-rig random number generators and most of all exploit careless settings in
-server configurations and encryption systems to listen in on private
-communications. 
+As Schneier noted in \cite{Sch13}, it seems that intelligence agencies and
+adversaries on the Internet are not breaking so much the mathematics of
+encryption per se, but rather use software and hardware weaknesses, subvert
+standardization processes, plant backdoors, rig random number generators and
+most of all exploit careless settings in server configurations and encryption
+systems to listen in on private communications.  Worst of all, most
+communication on the internet is not encrypted at all by default 
+(for SMTP, opportunistic TLS would be a solution). 
 
 \vskip 0.5em
 
-This guide can only address one aspect of securing our information
-systems: getting the crypto settings right to the best of the authors' current
+This guide can only address one aspect of securing our information systems:
+getting the crypto settings right to the best of the authors' current
 knowledge. Other attacks, as the above mentioned, require different protection
-schemes which are not covered in this guide. This guide is
-not an introduction to cryptography on how to use PGP nor SSL. For
-background information on cryptography, cryptoanalysis, PGP and SSL we would
-like to refer the reader to the the chapters \ref{section:Tools},
+schemes which are not covered in this guide. This guide is not an introduction
+to cryptography. For background information on cryptography and cryptoanalysis
+we would like to refer the reader to the the references in chapter
 \ref{section:Links} and \ref{section:Suggested_Reading} at the end of this
 document.
 
 \vskip 0.5em
 
-The focus of this guide is merely to give current best practices for
-configuring complex cipher suites and related parameters in a \textbf{copy \&
+The focus of this guide is merely to give current \emph{best practices for
+configuring complex cipher suites} and related parameters in a \emph{copy \&
 paste-able manner}. The guide tries to stay as concise as is possible for such
-a complex topic as cryptography. There are many guides and best practice
-documents available when it comes to cryptography. However none of them focuses
-specifically on what an average system administrator needs for hardening his or
-her systems' crypto settings.
+a complex topic as cryptography. Naturaly, it can not be complete. Instead,
+there are many excellent guides (\cite{ii2011ecrypt},\cite{TR02102}) and best
+practice documents available when it comes to cryptography. However none of
+them focuses specifically on what an average system administrator needs for
+hardening his or her systems' crypto settings.
 
+\vskip 0.5em
 This guide tries to fill this gap.
 
 
+%\vskip 3.5em
+%\tiny
+%The guide was produced in an open source manner: every step of editing can be
+%traced back to a specific author via our version control system.
+
+
 
+\end{abstract}
index 15c54d9..cefbf7f 100644 (file)
@@ -1,3 +1,3 @@
-\section{Acknowledgements}
+%\section{Acknowledgements}
 
 %% add something useful
index 271c2ac..ba07a36 100644 (file)
@@ -45,3 +45,4 @@
   year={2008},
   publisher={Chapman \& Hall/CRC}
 }
+
index ed94e16..96a3a42 100644 (file)
@@ -8,7 +8,9 @@
 \documentclass[        DIV=calc,%
                                paper=a4,%
                                fontsize=9pt,%
-                               onecolumn]{scrartcl}                                            % KOMA-article class
+                               %onecolumn]{scrartcl}                                           % KOMA-article class
+                               onecolumn]{scrreprt}                                            % KOMA-article class
+                               %onecolumn]{report}                                             % KOMA-article class
 
 \usepackage{lipsum}                                                                                                    % Package to create dummy text
 
 \usepackage{amsthm}
 \usepackage{fancyvrb}
 \usepackage{listings}
+\usepackage{longtable}
+
+%% Epigraph patching
+\usepackage{epigraph}
+% \epigraphsize{\small}% Default
+\setlength\epigraphwidth{8cm}
+\setlength\epigraphrule{0pt}
+\usepackage{etoolbox}
+\makeatletter
+\patchcmd{\epigraph}{\@epitext{#1}}{\itshape\@epitext{#1}}{}{}
+\makeatother
+
+
 
 
 \usepackage{gitinfo}
@@ -48,7 +63,7 @@
 
 % side box
 \usepackage{wrapfig}
-\usepackage{tcolorbox}
+%\usepackage{tcolorbox}
 \newenvironment{WrapText}[1][r]
   {\wrapfigure{#1}{0.5\textwidth}\tcolorbox}
   {\endtcolorbox\endwrapfigure}
@@ -181,8 +196,9 @@ morekeywords={__global__, __device__},  %
                                        \large \lineskip 0.5em  \color{intersectgreen}}
 
                                        \author{Wolfgang Breyha, David Durvaux, Tobias Dussa, L. Aaron
-                                       Kaplan, Christian Mock, Manuel Koschuch, Adi
-                                       Kriegisch, Ramin Sabet, Berg San, Ralf Schlatterbeck, Aaron Zauner, Pepi Zawodsky}
+                                       Kaplan, Florian Mendel, Christian Mock, Manuel Koschuch, Adi
+                                       Kriegisch, Ulrich P\"oschl, Ramin Sabet, Berg San, Ralf Schlatterbeck, 
+                                       Thomas Schreck, Aaron Zauner, Pepi Zawodsky}
 %\institute{
 %FH Campus Wien
 %\and
@@ -197,7 +213,7 @@ morekeywords={__global__, __device__},  %
 \setlength{\parindent}{0cm}
 
 \postauthor{\footnotesize \usefont{OT1}{phv}{m}{sl} \color{Black} 
-\\ \vskip 0.5em  (University of Vienna, CERT.be, KIT-CERT, CERT.at, coretec.at, FH Campus Wien, VRVis, A-Trust, Runtux.com, azet.org, maclemon.at)
+\\ \vskip 0.5em  (University of Vienna, CERT.be, KIT-CERT, CERT.at, IAIK, coretec.at, FH Campus Wien, VRVis, MilCERT Austria, A-Trust, , Runtux.com, Friedrich-Alexander University Erlangen-Nuremberg, azet.org, maclemon.at)
                                        \par\end{flushleft}\HorRule}
 
 \date{\today}
@@ -205,6 +221,7 @@ morekeywords={__global__, __device__},  %
 % hyperref needs to be the last package you load.
 \usepackage[pdftex,breaklinks,colorlinks,citecolor=blue,urlcolor=blue]{hyperref}
 
+
 %%% Begin document
 \begin{document}
 \maketitle
@@ -214,26 +231,34 @@ morekeywords={__global__, __device__},  %
 %\initial{H}\textbf{ere is some sample text to show the initial in the introductory paragraph of this template article. The color and lineheight of the initial can be modified in the preamble of this document.}
 
 \input{abstract}
-\newpage
 \tableofcontents
-\newpage
+\chapter{Introduction}
+\label{chapter:Intro}
 \input{howtoread}
 \input{disclaimer}
 \input{motivation}
 \input{methods}
-\input{scope}
+%%
+\chapter{Practical recommendations}
+\label{chapter:PracticalSettings}
+\input{practical_settings}
+%%
+\chapter{Theory}
+\label{chapter:Theory}
 \input{PKIs}
 \input{ECC}
+\input{SHA}
 \input{DH}
 \input{keylengths}
 \input{RNGs}
 \input{cipher_suites}
 \input{ssllibs}
-\input{practical_settings}
+\chapter{Appendix}
 \input{tools}
-\input{further_research}
 \input{links}
 \input{suggested_reading}
+\input{cipher_suite_names}
+\input{further_research}
 \input{acknowledgements}
 \input{reviewers}
 \input{bib}
diff --git a/src/cipher_suite_names.tex b/src/cipher_suite_names.tex
new file mode 100644 (file)
index 0000000..a4898b2
--- /dev/null
@@ -0,0 +1,9 @@
+\section{Cipher Suite Name Cross-Reference}
+\label{section:cipher_suite_names}
+
+This table shows the cipher suite names as IANA defined them, the
+names OpenSSL uses, and the respective codes.
+
+%% include auto-generated file
+\input{suite_names}
+
index d9c9ca3..a03e33f 100644 (file)
@@ -1,4 +1,3 @@
-\newpage
 
 \section{Cipher suites}
 \label{section:CipherSuites}
index dbd9b9b..e4e8bca 100644 (file)
@@ -4,8 +4,8 @@ This section defines some terms which will be used throughout this guide.
 
 
 A cipher suite is a standardised collection of key exchange algorithms, encryption 
-algorithms (ciphers) and Message authentication codes (MAC) that provides authenticated 
-encryption schemes. It consists of the following components:
+algorithms (ciphers) and Message authentication codes (MAC) algortihm that provides
+authenticated encryption schemes. It consists of the following components:
 
 \begin{description}
 
index d76a346..b31a23b 100644 (file)
@@ -8,24 +8,26 @@
 %%mechanism.
 %% ^^ commented out due to duplication (see previous section on architecture) - azet
 
-Many of the parts in a ciphersuite are interchangeable. Like the key exchange algorithm in this example:
-\texttt{ECDHE-RSA-AES256-GCM-SHA384} and \texttt{DHE-RSA-AES256-GCM-SHA384}.
-To provide a decent level of security, all algorithms need to be safe (subject to
-the disclaimer in section \ref{section:disclaimer}).
+Many of the parts in a ciphersuite are interchangeable. Like the key exchange
+algorithm in this example: \texttt{ECDHE-RSA-AES256-GCM-SHA384} and
+\texttt{DHE-RSA-AES256-GCM-SHA384}.  To provide a decent level of security, all
+algorithms need to be safe (subject to the disclaimer in section
+\ref{section:disclaimer}).
 
 Note: There are some very weak cipher suites in every crypto library, most of
 them for historic reasons or due to legacy standards. The crypto export embargo
-is a good example\cite{Wikipedia:ExportCipher}.
-For the following chapter support of these low-security algorithms is disabled by setting
+is a good example\cite{Wikipedia:ExportCipher}.  For the following chapter
+support of these low-security algorithms is disabled by setting
 \texttt{!EXP:!LOW:!NULL} as part of the cipher string.
 
 \todo{Team: do we need references for all cipher suites considered weak?}
 
 \subsubsection{Key Exchange}
 
-Many algorithms allow secure key exchange. Among those are RSA, DH, EDH, ECDSA,
-ECDH, EECDH among others. During the key exchange, keys for authentication and for
-encryption are exchanged. %%For RSA and DSA those keys are the same. %% WHAT?
+Many algorithms allow secure key exchange.  Those are RSA, DH, EDH, ECDSA,
+ECDH, EECDH amongst others. During the key exchange, keys used for authentication
+and symmetric encryption are exchanged. For RSA, DSA and ECDSA those keys are derived
+from the server's public key.
 
 \todo{explain this section}
 
@@ -52,29 +54,44 @@ 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. \\
 All ephemeral key exchange schemes are based on the Diffie-Hellman algorithm and require
-pre-generated Diffe-Hellman parameter (which allow fast ephemeral key generation). It
+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 
 the security (speaking in number of bits) as the RSA host key. \todo{TODO: reference!}
 
 
-\textbf{Elliptic Curves}\ref{section:EllipticCurveCryptography} required by current TLS
-standards only consist of the so-called NIST-curves (\texttt{secp256r1} and
-\texttt{secp384r1}) which may be weak because the parameters that led to their generation
-weren't properly explained (by the NSA)\cite{DJBSC}. \\
-Disabling support for Elliptic Curves leads to no ephemeral key exchange being available
-for the Windows platform. When you decide to use Elliptic Curves despite the uncertainty,
-make sure to at least use the stronger curve of the two supported by all clients
+\textbf{Elliptic Curves} (see section \ref{section:EllipticCurveCryptography})
+required by current TLS standards only consist of the so-called NIST-curves
+(\texttt{secp256r1} and \texttt{secp384r1}) which may be weak because the
+parameters that led to their generation weren't properly explained by the
+authors\cite{DJBSC}. \\ Disabling support for Elliptic Curves leads to no
+ephemeral key exchange being available for the Windows platform. When you
+decide to use Elliptic Curves despite the uncertainty, make sure to at least
+use the stronger curve of the two supported by all clients
 (\texttt{secp384r1}).
 
 
-Other key exchange mechanisms like Pre-Shared Key (PSK) or Secure Remote Password
-(SRP) are irrelevant for regular SSL/TLS use.
+Other key exchange mechanisms like Pre-Shared Key (PSK) are irrelevant for
+regular SSL/TLS use.
 
 \subsubsection{Authentication}
 
-RSA, DSA, DSS, ECDSA, ECDH, FORTEZZA(?).
+RSA, DSA, DSS, ECDSA, ECDH
 
-Other authentication mechanisms like Pre Shared Keys aren't used in SSL/TLS: \texttt{!PSK:!aNULL}
+During Key Exchange the server proved that he is in control of the private key
+associated with a certain public key (the server's certificate). The client
+verifies the server's identity by comparing the signature on the certificate
+and matching it with its trust database. For details about the trust model of
+SSL/TLS please see \ref{section:PKIs}.
+
+In addition to the server providing its identity, a client might do so as well.
+That way mutual trust can be established. Another mechanism providing client
+authentication is Secure Remote Password (SRP)\todo{reference}. All those
+mechanisms require special configuration.
+
+Other authentication mechanisms like Pre Shared Keys aren't used in SSL/TLS.
+Anonymous sessions will not be discussed in this paper.
+
+\texttt{!PSK:!aNULL}
 
 \subsubsection{Encryption}
 
index 0e703b0..dd84b85 100644 (file)
@@ -1,7 +1,7 @@
 %%\subsection{Recommended cipher suites}
 
 In principle system administrators who want to improve their communication security
-have ton make a difficult decision between effectively locking out some users and 
+have to make a difficult decision between effectively locking out some users and 
 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 
@@ -35,7 +35,7 @@ We arrived at this set of cipher suites by selecting:
 This results in the OpenSSL string:
 
 \begin{lstlisting}[breaklines]
-'EECDH+aRSA+AES256:EDH+aRSA+AES256:!SSLv3'
+'EDH+aRSA+AES256:EECDH+aRSA+AES256:!SSLv3'
 \end{lstlisting}
 
 %$\implies$ resolves to 
@@ -52,10 +52,10 @@ This results in the OpenSSL string:
 \begin{tabular}{lllllll}
 \toprule
 \textbf{ID}   & \textbf{OpenSSL Name}       & \textbf{Version} & \textbf{KeyEx} & \textbf{Auth} & \textbf{Cipher} & \textbf{MAC}\\\cmidrule(lr){1-7}
-\verb|0xC030| & ECDHE-RSA-AES256-GCM-SHA384 & TLSv1.2          & ECDH           &  RSA          & AESGCM(256)     & AEAD         \\
-\verb|0xC028| & ECDHE-RSA-AES256-SHA384     & TLSv1.2          & ECDH           &  RSA          & AES(256) (CBC)  & SHA384       \\
 \verb|0x009F| & DHE-RSA-AES256-GCM-SHA384   & TLSv1.2          & DH             &  RSA          & AESGCM(256)     & AEAD         \\
 \verb|0x006B| & DHE-RSA-AES256-SHA256       & TLSv1.2          & DH             &  RSA          & AES(256) (CBC)  & SHA256       \\
+\verb|0xC030| & ECDHE-RSA-AES256-GCM-SHA384 & TLSv1.2          & ECDH           &  RSA          & AESGCM(256)     & AEAD         \\
+\verb|0xC028| & ECDHE-RSA-AES256-SHA384     & TLSv1.2          & ECDH           &  RSA          & AES(256) (CBC)  & SHA384       \\
 \bottomrule
 \end{tabular}
 \end{center}
@@ -71,11 +71,12 @@ Win 7 and Win 8.1 crypto stack, Opera 17, OpenSSL $\ge$ 1.0.1e, Safari 6 / iOS
 
 \subsubsection{Configuration B: Weaker ciphers, more compatability}
 
-In this section we propose a slightly weaker set of cipher suites. 
-For example, there are some known weaknesses for the SHA-1 hash function that
-is included in this set. However, the advantage of this set of cipher suites 
-is it's higher compatibility with a more diverse set of clients as well as 
-less computational overhead.\\ 
+In this section we propose a slightly weaker set of cipher suites.  For
+example, there are some known weaknesses for the SHA-1 hash function that is
+included in this set.  The advantage of this set of cipher suites is not only
+the compatibility with a broad range of clients, but also less computational
+workload on the provisioning hardware.
+\\
 
 \textbf{All further examples in this publication use Configuration B}.\\
 
@@ -150,18 +151,16 @@ Our recommended cipher strings are meant to be used via copy and paste and need
 "out of the box".
 
 \begin{itemize}
-\item TLS1.2 is preferred over TLSv1.0/SSLv3 (while still providing a useable cipher
+\item TLSv1.2 is preferred over TLSv1.0/SSLv3 (while still providing a useable cipher
       string for SSLv3).
-\item AES256 and CAMELLIA256 count as very strong ciphers at the moment; preferrably in
-      GCM mode.\\
-         \todo{add a reference here please}
-\item AES128 and CAMELLIA128 count as strong enough ciphers at the moment
+\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 todays setup
-\item AES256-SHA as a last ressort (with this cipher at the end, even systems with
-      very old versions of openssl like 0.9.8 will just work. Just forward secrecy
-      will not be used. On systems that do not support elliptic curves, that cipher
-      offers support for the Microsoft crypto libraries that only support ECDHE.
+\item RSA as this will fit most of todays setups
+\item AES256-SHA as a last resort (with this cipher at the end, even systems with
+      legacy distributions of OpenSSL will work out of the box. Forward secrecy
+      will not be available. On systems that do not support elliptic curves, that cipher
+      offers support for the Microsoft crypto libraries that only support ECDHE. \todo{what does that mean?! inconclusive!}
 \end{itemize}
 
 \todo{Adi: review "justification" when next section is written}
index 45c4068..138a63a 100644 (file)
@@ -1,18 +1,82 @@
-\section{Disclaimer}
+\section{Disclaimer and scope}
 \label{section:disclaimer}
-This guide specifically does not address physical security, protecting
-software and hardware against exploits, basic IT security housekeeping,
-anti-tempest\cite{Wikipedia:Tempest} attack techniques, protecting
-against side-channel attacks, downgrade attacks, jamming the encrypted
-channel or other similar attacks which are typically employed to
-circumvent strong encryption. The authors can not overstate the
-importance of these other techniques.
 
-This guide can only describe what the authors currently \emph{believe} to be the best settings based on their personal experience. This guide was cross checked by multiple people. For a complete list, see the section \ref{section:Reviewers}. Even though, multiple specialists reviewed the guide, the authors can give \emph{no guarantee} whatsover that they made the right recommendations. Keep in mind that tomorrow there might be new attacks on some ciphers and many of the recommendations in this guide might turn out to be wrong.
+\epigraph{``A chain is no stronger than its weakest link, and life is after all a chain``}{-- William James}
 
 
-%% should we keep that sentence?
-%% The authors do not know XXX FIXME XXX list things we don't know which affect the guide? XXX
+This guide specifically does not address physical security, protecting software
+and hardware against exploits, basic IT security housekeeping, information
+assurance techniques, traffic analysis attacks, issues with key-roll over and
+key management, securing client PCs and mobile devices (theft, loss), proper
+OPSec\footnote{\url{http://en.wikipedia.org/wiki/Operations_security}}, social
+engineering attacks, anti-tempest\cite{Wikipedia:Tempest} attack techniques,
+protecting against different side-channel attacks (timing--, cache timing--,
+differential fault analysis, differential power analysis or power monitoring
+attacks), downgrade attacks, jamming the encrypted channel or other similar
+attacks which are typically employed to circumvent strong encryption.  The
+authors can not overstate the importance of these other techniques.  Interested
+readers are advised to read about these attacks in detail since they give a lot
+of insight into other parts of cryptography engineering which need to be dealt
+with.\footnote{An easy to read yet very insightful recent example is the
+"FLUSH+RELOAD" technique \cite{yarom2013flush+} for leaking cryptographic keys
+from one virtual machine to another via L3 cache timing attacks.}
 
-Nevertheless, ignoring the problem at hand and keeping outdated settings for SSL, SSH, PGP is not an option. We the authors, need this document as much as the gentle reader needs it.
+This guide does not talk much about the well-known insecurities of trusting a
+public-key infrastructure (PKI)\footnote{Interested readers are referred to
+\url{https://bugzilla.mozilla.org/show_bug.cgi?id=647959} or
+\url{http://www.heise.de/security/meldung/Der-ehrliche-Achmed-bittet-um-Vertrauen-1231083.html}
+(german) which brings the problem of trusting PKIs right to the point}. Nor
+does this text fully explain how to run your own Certificate Authority (CA). 
+
+Most of this zoo of information security issues are addressed in the very
+comprehensive book ``Security Engineering'' by Ross Anderson
+\cite{anderson2008security}. 
+
+For some experts in cryptography this text might seem too informal. However, we
+strive to keep the language as non-technical as possible and fitting for our
+target audience: system administrators who can collectively improve the
+security level for all of their users. 
+
+
+
+\epigraph{``Security is a process, not a product.``}{-- Bruce Schneier}
+
+This guide can only describe what the authors currently
+\emph{believe} to be the best settings based on their personal experience and
+after intensive cross checking with literature and experts. For a complete list
+of people who reviewed this paper, see the section \ref{section:Reviewers}.
+Even though, multiple specialists reviewed the guide, the authors can give
+\emph{no guarantee whatsover} that they made the right recommendations. Keep in
+mind that tomorrow there might be new attacks on some ciphers and many of the
+recommendations in this guide might turn out to be wrong. Security is a
+process.
+
+
+We therefore recommend that system administrators keep up to date with recent
+topics in IT security and cryptography. 
+
+
+In this sense, this guide is very focused on getting the cipher strings done
+right even though there is much more to do in order to make a system more
+secure.  We the authors, need this document as much as the reader needs it.
+
+\paragraph{Scope:}
+\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}
+
+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}
 
index b221f44..fcb7f47 100644 (file)
@@ -1,3 +1,56 @@
-%\section{Further research and unanswered questions}
+\newpage
+\section{Further research}
+\label{section:furtherresearch}
+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. 
+
+\vline{}
+
+\begin{minipage}[b]{0.5\linewidth}
+\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 Commerical network equipment vendors
+\end{itemize}
+\end{minipage}
+\begin{minipage}[b]{0.5\linewidth}
+\begin{itemize}
+\item RADIUS 
+\item Moxa , APC, und co... ICS . Ethernet to serial 
+\item telnet (only sensible reocmmendation: \emph{DON't!!}
+\item rsyslog 
+\item v6 spoofing (look at work by Ferndo Gont, Marc Heuse, et. al.)
+\item tinc
+\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 (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} 
+\end{itemize}
+\end{minipage}
+
+
+
 
 
diff --git a/src/gitinfo.sty b/src/gitinfo.sty
new file mode 100644 (file)
index 0000000..1be5197
--- /dev/null
@@ -0,0 +1,83 @@
+% gitinfo.sty   
+% Copyright 2011 Brent Longborough
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%   http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+% The Current Maintainer of this work is Brent Longborough.
+%
+% This work consists of these files: 
+%     gitinfo.sty, gitsetinfo.sty, gitinfo.tex, gitinfo.pdf,
+%     post-git-sample.txt, and gitHeadInfo.gin
+% -----------------------------------------------------
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gitinfo}[2011/08/10 v1.00 git revision information]
+\RequirePackage{etoolbox}
+\RequirePackage{kvoptions}
+\SetupKeyvalOptions{%
+       family=gitInfo,
+       prefix=gitInf@
+       }
+\DeclareBoolOption{grumpy}
+\DeclareBoolOption{pcount}
+\DeclareBoolOption{footinfo}
+\DeclareStringOption[(None)]{missing}
+\ProcessKeyvalOptions*
+\newcommand{\gitAbbrevHash}{\gitInf@missing}
+\newcommand{\gitHash}{\gitInf@missing}
+\newcommand{\gitAuthorName}{\gitInf@missing}
+\newcommand{\gitAuthorEmail}{\gitInf@missing}
+\newcommand{\gitAuthorDate}{\gitInf@missing}
+\newcommand{\gitAuthorIsoDate}{\gitInf@missing}
+\newcommand{\gitAuthorUnixDate}{\gitInf@missing}
+\newcommand{\gitCommitterName}{\gitInf@missing}
+\newcommand{\gitCommitterEmail}{\gitInf@missing}
+\newcommand{\gitCommitterDate}{\gitInf@missing}
+\newcommand{\gitCommitterIsoDate}{\gitInf@missing}
+\newcommand{\gitCommitterUnixDate}{\gitInf@missing}
+\newcommand{\gitReferences}{\gitInf@missing}
+\newcommand{\gitVtag}{}
+\newcommand{\gitVtags}{}
+\newcommand{\gitVtagn}{\space\gitInf@missing}
+\InputIfFileExists{./gitHeadInfo.gin}{}{%
+       \ifbool{gitInf@grumpy}{%
+               \PackageError{gitinfo}{I can't find the file `gitHeadInfo.gin`.\MessageBreak
+               Please check the manual (gitinfo.pdf) \MessageBreak 
+               if you need more details.}{}
+       }{%
+               \PackageWarning{gitInfo}{I can't find the file `gitHeadInfo.gin`.\MessageBreak
+               All git metadata has been set to ``\gitInf@missing''.}
+       }
+}
+\@ifclassloaded{memoir}{%
+       \ifbool{gitInf@footinfo}{%
+               \ifbool{gitInf@pcount}{
+                       \newcommand{\@gitPage}{\thepage/\thelastpage}
+                       \addtodef{\frontmatter}{\renewcommand{\@gitPage}{\thepage}}{}
+                       \addtodef{\mainmatter}{}{\renewcommand{\@gitPage}{\thepage/\thelastpage}}
+               }{%
+                       \newcommand{\@gitPage}{\thepage}
+               }
+               \newcommand{\@gitFootRev}{Revision\gitVtags: \gitAbbrevHash{} (\gitAuthorDate)}
+               \newcommand{\@gitrFootRev}{%
+                       \tiny\textsf{\raggedleft \@gitFootRev}%
+                       }
+               \newcommand{\@gitlFootRev}{%
+                       \tiny\textsf{\@gitFootRev}%
+                       }
+               \makeevenfoot{plain}{\@gitPage}{}{\@gitrFootRev}
+               \makeoddfoot{plain}{\@gitlFootRev}{}{\@gitPage}
+               \makeevenfoot{ruled}{\@gitPage}{}{\@gitrFootRev}
+               \makeoddfoot{ruled}{\@gitlFootRev}{}{\@gitPage}
+               \makeevenfoot{headings}{\@gitPage}{}{\@gitrFootRev}
+               \makeoddfoot{headings}{\@gitlFootRev}{}{\@gitPage}
+               \makeevenhead{headings}{}{}{\slshape\leftmark}
+               \makeoddhead{headings}{\slshape\rightmark}{}{}
+       }{}
+}{}
diff --git a/src/gitsetinfo.sty b/src/gitsetinfo.sty
new file mode 100644 (file)
index 0000000..7d63b19
--- /dev/null
@@ -0,0 +1,66 @@
+% gitsetinfo.sty   
+% Copyright 2011 Brent Longborough
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%   http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+% The Current Maintainer of this work is Brent Longborough.
+%
+% This work consists of these files: 
+%     gitinfo.sty, gitsetinfo.sty, gitinfo.tex, gitinfo.pdf,
+%     post-git-sample.txt, and gitHeadInfo.gin
+% -----------------------------------------------------
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gitsetinfo}[2011/08/10 v1.00 Auxiliary package for gitinfo]
+\RequirePackage{kvoptions}
+\RequirePackage{xstring}
+\RequirePackage{etoolbox}
+\SetupKeyvalOptions{%
+       family=gitinfo,
+       prefix=gitInf@
+       }
+\DeclareStringOption{shash}
+\DeclareStringOption{lhash}
+\DeclareStringOption{authname}
+\DeclareStringOption{authemail}
+\DeclareStringOption{authsdate}
+\DeclareStringOption{authidate}
+\DeclareStringOption{authudate}
+\DeclareStringOption{commname}
+\DeclareStringOption{commemail}
+\DeclareStringOption{commsdate}
+\DeclareStringOption{commidate}
+\DeclareStringOption{commudate}
+\DeclareStringOption{refnames}
+\ProcessKeyvalOptions*
+\renewcommand{\gitAbbrevHash}{\gitInf@shash}
+\renewcommand{\gitHash}{\gitInf@lhash}
+\renewcommand{\gitAuthorName}{\gitInf@authname}
+\renewcommand{\gitAuthorEmail}{\gitInf@authemail}
+\renewcommand{\gitAuthorDate}{\gitInf@authsdate}
+\renewcommand{\gitAuthorIsoDate}{\gitInf@authidate}
+\renewcommand{\gitAuthorUnixDate}{\gitInf@authudate}
+\renewcommand{\gitCommitterName}{\gitInf@commname}
+\renewcommand{\gitCommitterEmail}{\gitInf@commemail}
+\renewcommand{\gitCommitterDate}{\gitInf@commsdate}
+\renewcommand{\gitCommitterIsoDate}{\gitInf@commidate}
+\renewcommand{\gitCommitterUnixDate}{\gitInf@commudate}
+\renewcommand{\gitReferences}{\gitInf@refnames}
+\newcommand{\git@vtag}[1]{%
+       \def\do##1{%
+               \IfDecimal{##1}{%
+                       \renewcommand{\gitVtag}{##1}
+                       \renewcommand{\gitVtags}{\space##1}
+                       \renewcommand{\gitVtagn}{\space##1}
+                       \listbreak
+               }{}%
+       }%
+       \expandafter\docsvlist\expandafter{#1}%
+}%
+\git@vtag{\gitInf@refnames}
index 1e95126..46b2395 100644 (file)
@@ -1,5 +1,20 @@
 \section{How to read this guide}
 
-If you are a system administrator and want to quickly update your services, jump right to section \ref{section:PracticalSettings}. However, we recommend that you take some time and read through the background information we provide in this publication, especially on how to choose your own cipher string in section \ref{section:CipherSuites} and then adapt the settings in section \ref{section:PracticalSettings} to your own needs.
+%This guide starts with some general remarks in sections \ref{section:DH},\ref{section:EllipticCurveCryptography},\ref{section:keylengths} on 
+
+
+If you are a system administrator and want to quickly update your services, jump right to section \ref{section:PracticalSettings}. However, we recommend that you take some time and first read through the theory part (chapter \ref{chapter:Theory}), especially section \ref{section:CipherSuites} on how to choose your own cipher string and then adapt the settings in section \ref{section:PracticalSettings} to your own needs.
+
+\vskip 1.5em
+
+\begin{figure}[h]
+  \centering
+  \includegraphics[width=0.55\textwidth]{img/howtoread}
+  %\caption{Screenshot of \url{http://www.keylength.com} for 128 bit symmetric key size equivalents}
+  \label{fig:howtoread}
+\end{figure}
+
+\vskip 2em
+
 
 
diff --git a/src/img/howtoread.dot b/src/img/howtoread.dot
new file mode 100644 (file)
index 0000000..55a836b
--- /dev/null
@@ -0,0 +1,24 @@
+digraph {
+start [label="Start"];
+
+start -> intro; 
+
+intro [shape=box, label="Introduction"];
+intro -> decision;
+
+decision [shape=diamond, label="I just want\nto copy & paste?"];
+Practical [shape=box, label="read chapter: Practical recommendations"];
+Theory [shape=box, label="To understand why\nwe chose certain settings,\n read the chapter 'Theory' first"];
+
+decision -> Practical [label="Yes", labelfloat="Yes", labeldistance=2];
+decision -> Theory [label="No", labelfloat="Yes", labeldistance=2];
+Theory -> Appendix;
+Practical -> Appendix;
+Practical -> Theory [constraint=false];
+
+Appendix [shape=box, label="Appendix: references, links"]
+
+{ rank=same; decision; Practical }
+{ rank=max; Theory; Appendix }
+
+}
diff --git a/src/img/howtoread.eps b/src/img/howtoread.eps
new file mode 100644 (file)
index 0000000..9105bec
--- /dev/null
@@ -0,0 +1,425 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: graphviz version 2.34.0 (20131122.1926)
+%%Title: %3
+%%Pages: 1
+%%BoundingBox: 36 36 550 360
+%%EndComments
+save
+%%BeginProlog
+/DotDict 200 dict def
+DotDict begin
+
+/setupLatin1 {
+mark
+/EncodingVector 256 array def
+ EncodingVector 0
+
+ISOLatin1Encoding 0 255 getinterval putinterval
+EncodingVector 45 /hyphen put
+
+% Set up ISO Latin 1 character encoding
+/starnetISO {
+        dup dup findfont dup length dict begin
+        { 1 index /FID ne { def }{ pop pop } ifelse
+        } forall
+        /Encoding EncodingVector def
+        currentdict end definefont
+} def
+/Times-Roman starnetISO def
+/Times-Italic starnetISO def
+/Times-Bold starnetISO def
+/Times-BoldItalic starnetISO def
+/Helvetica starnetISO def
+/Helvetica-Oblique starnetISO def
+/Helvetica-Bold starnetISO def
+/Helvetica-BoldOblique starnetISO def
+/Courier starnetISO def
+/Courier-Oblique starnetISO def
+/Courier-Bold starnetISO def
+/Courier-BoldOblique starnetISO def
+cleartomark
+} bind def
+
+%%BeginResource: procset graphviz 0 0
+/coord-font-family /Times-Roman def
+/default-font-family /Times-Roman def
+/coordfont coord-font-family findfont 8 scalefont def
+
+/InvScaleFactor 1.0 def
+/set_scale {
+       dup 1 exch div /InvScaleFactor exch def
+       scale
+} bind def
+
+% styles
+/solid { [] 0 setdash } bind def
+/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def
+/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def
+/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def
+/bold { 2 setlinewidth } bind def
+/filled { } bind def
+/unfilled { } bind def
+/rounded { } bind def
+/diagonals { } bind def
+/tapered { } bind def
+
+% hooks for setting color 
+/nodecolor { sethsbcolor } bind def
+/edgecolor { sethsbcolor } bind def
+/graphcolor { sethsbcolor } bind def
+/nopcolor {pop pop pop} bind def
+
+/beginpage {   % i j npages
+       /npages exch def
+       /j exch def
+       /i exch def
+       /str 10 string def
+       npages 1 gt {
+               gsave
+                       coordfont setfont
+                       0 0 moveto
+                       (\() show i str cvs show (,) show j str cvs show (\)) show
+               grestore
+       } if
+} bind def
+
+/set_font {
+       findfont exch
+       scalefont setfont
+} def
+
+% draw text fitted to its expected width
+/alignedtext {                 % width text
+       /text exch def
+       /width exch def
+       gsave
+               width 0 gt {
+                       [] 0 setdash
+                       text stringwidth pop width exch sub text length div 0 text ashow
+               } if
+       grestore
+} def
+
+/boxprim {                             % xcorner ycorner xsize ysize
+               4 2 roll
+               moveto
+               2 copy
+               exch 0 rlineto
+               0 exch rlineto
+               pop neg 0 rlineto
+               closepath
+} bind def
+
+/ellipse_path {
+       /ry exch def
+       /rx exch def
+       /y exch def
+       /x exch def
+       matrix currentmatrix
+       newpath
+       x y translate
+       rx ry scale
+       0 0 1 0 360 arc
+       setmatrix
+} bind def
+
+/endpage { showpage } bind def
+/showpage { } def
+
+/layercolorseq
+       [       % layer color sequence - darkest to lightest
+               [0 0 0]
+               [.2 .8 .8]
+               [.4 .8 .8]
+               [.6 .8 .8]
+               [.8 .8 .8]
+       ]
+def
+
+/layerlen layercolorseq length def
+
+/setlayer {/maxlayer exch def /curlayer exch def
+       layercolorseq curlayer 1 sub layerlen mod get
+       aload pop sethsbcolor
+       /nodecolor {nopcolor} def
+       /edgecolor {nopcolor} def
+       /graphcolor {nopcolor} def
+} bind def
+
+/onlayer { curlayer ne {invis} if } def
+
+/onlayers {
+       /myupper exch def
+       /mylower exch def
+       curlayer mylower lt
+       curlayer myupper gt
+       or
+       {invis} if
+} def
+
+/curlayer 0 def
+
+%%EndResource
+%%EndProlog
+%%BeginSetup
+14 default-font-family set_font
+1 setmiterlimit
+% /arrowlength 10 def
+% /arrowwidth 5 def
+
+% make sure pdfmark is harmless for PS-interpreters other than Distiller
+/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse
+% make '<<' and '>>' safe on PS Level 1 devices
+/languagelevel where {pop languagelevel}{1} ifelse
+2 lt {
+    userdict (<<) cvn ([) cvn load put
+    userdict (>>) cvn ([) cvn load put
+} if
+
+%%EndSetup
+setupLatin1
+%%Page: 1 1
+%%PageBoundingBox: 36 36 550 360
+%%PageOrientation: Portrait
+0 0 1 beginpage
+gsave
+36 36 514 324 boxprim clip newpath
+1 1 set_scale 0 rotate 40 40 translate
+% start
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+111 298 27.42 18 ellipse_path stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+97.5 294.3 moveto 27 (Start) alignedtext
+grestore
+% intro
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 154 242 moveto
+68 242 lineto
+68 206 lineto
+154 206 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+76 220.3 moveto 70 (Introduction) alignedtext
+grestore
+% start->intro
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 111 279.94 moveto
+111 271.81 111 261.88 111 252.7 curveto
+stroke
+0 0 0 edgecolor
+newpath 114.5 252.44 moveto
+111 242.44 lineto
+107.5 252.44 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 114.5 252.44 moveto
+111 242.44 lineto
+107.5 252.44 lineto
+closepath stroke
+grestore
+% decision
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 111 168 moveto
+0 130 lineto
+111 92 lineto
+222 130 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+81 133.8 moveto 60 (I just want) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+63.5 118.8 moveto 95 (to copy & paste?) alignedtext
+grestore
+% intro->decision
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 111 205.7 moveto
+111 197.81 111 188.06 111 178.24 curveto
+stroke
+0 0 0 edgecolor
+newpath 114.5 178.04 moveto
+111 168.04 lineto
+107.5 178.04 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 114.5 178.04 moveto
+111 168.04 lineto
+107.5 178.04 lineto
+closepath stroke
+grestore
+% Practical
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 506.25 148 moveto
+261.75 148 lineto
+261.75 112 lineto
+506.25 112 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+269.5 126.3 moveto 229 (read chapter: Practical recommendations) alignedtext
+grestore
+% decision->Practical
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 222.04 130 moveto
+231.68 130 241.5 130 251.29 130 curveto
+stroke
+0 0 0 edgecolor
+newpath 251.47 133.5 moveto
+261.47 130 lineto
+251.47 126.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 251.47 133.5 moveto
+261.47 130 lineto
+251.47 126.5 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+230.75 136.8 moveto 22 (Yes) alignedtext
+grestore
+% Theory
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 203 53.5 moveto
+19 53.5 lineto
+19 .5 lineto
+203 .5 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+56.5 38.3 moveto 109 (To understand why) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+39 23.3 moveto 144 (we chose certain settings,) alignedtext
+0 0 0 nodecolor
+14 /Times-Roman set_font
+27 8.3 moveto 168 ( read the chapter 'Theory' first) alignedtext
+grestore
+% decision->Theory
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 111 91.96 moveto
+111 82.82 111 73.04 111 63.95 curveto
+stroke
+0 0 0 edgecolor
+newpath 114.5 63.67 moveto
+111 53.67 lineto
+107.5 63.67 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 114.5 63.67 moveto
+111 53.67 lineto
+107.5 63.67 lineto
+closepath stroke
+0 0 0 edgecolor
+14 /Times-Roman set_font
+111 69.3 moveto 18 (No) alignedtext
+grestore
+% Practical->Theory
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 338 111.98 moveto
+297.47 96.99 237.56 74.82 189.47 57.03 curveto
+stroke
+0 0 0 edgecolor
+newpath 190.61 53.72 moveto
+180.02 53.53 lineto
+188.18 60.29 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 190.61 53.72 moveto
+180.02 53.53 lineto
+188.18 60.29 lineto
+closepath stroke
+grestore
+% Appendix
+gsave
+1 setlinewidth
+0 0 0 nodecolor
+newpath 469.25 45 moveto
+298.75 45 lineto
+298.75 9 lineto
+469.25 9 lineto
+closepath stroke
+0 0 0 nodecolor
+14 /Times-Roman set_font
+306.5 23.3 moveto 155 (Appendix: references, links) alignedtext
+grestore
+% Practical->Appendix
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 384 111.87 moveto
+384 96.41 384 73.42 384 55.41 curveto
+stroke
+0 0 0 edgecolor
+newpath 387.5 55.22 moveto
+384 45.22 lineto
+380.5 55.22 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 387.5 55.22 moveto
+384 45.22 lineto
+380.5 55.22 lineto
+closepath stroke
+grestore
+% Theory->Appendix
+gsave
+1 setlinewidth
+0 0 0 edgecolor
+newpath 203.24 27 moveto
+231.67 27 260.09 27 288.51 27 curveto
+stroke
+0 0 0 edgecolor
+newpath 288.56 30.5 moveto
+298.56 27 lineto
+288.56 23.5 lineto
+closepath fill
+1 setlinewidth
+solid
+0 0 0 edgecolor
+newpath 288.56 30.5 moveto
+298.56 27 lineto
+288.56 23.5 lineto
+closepath stroke
+grestore
+endpage
+showpage
+grestore
+%%PageTrailer
+%%EndPage: 1
+%%Trailer
+end
+restore
+%%EOF
diff --git a/src/img/howtoread.pdf b/src/img/howtoread.pdf
new file mode 100644 (file)
index 0000000..b68e294
Binary files /dev/null and b/src/img/howtoread.pdf differ
index 94a7a2c..23b7607 100644 (file)
@@ -1,27 +1,70 @@
 \section{Keylengths}
 \label{section:keylengths}
 
+
+\epigraph{``On the choice between AES256 and AES128: I would never consider
+using AES256, just like I don't wear a helmet when I sit inside my car. It's
+too much bother for the epsilon improvement in security.''}{-- Vincent Rijmen
+in a personal mail exchange Dec 2013}
+
 Recommendations on keylengths need to be adapted regularly. Since this document
-is static, we rather want refer to existing publications and websites.
-Recommending a safe key length is a hit-and-miss issue.
+first of all is static and second of all, does not consider itself to be
+authoritative on keylengths, we would rather refer to existing publications and
+websites.  Recommending a safe key length is a hit-and-miss issue.
+
+Furthermore, when chosing an encryption algorithm and keylength, the
+designer/sysadmin always needs to consider the value of the information and how
+long it must be protected.  In other words: consider the number of years the
+data needs to stay confidential.
+
+
+The ECRYPT II publication (\cite{ii2011ecrypt}) gives a fascinating overview of
+strenghts of symmetric keys in chapter 5 and chapter 7. Summarizing ECRYPT II, we
+recommend 128 bit of key strenght for symmetric keys. In ECRYPT II, this is
+considered safe for security level 7, long term protection.
+
+In the same ECRYPT II publication you can find a practical comparison of key size
+equivalence between symmetric key sizes and RSA, discrete log (DLOG) and EC
+keylengths. ECRYPT II arrives at the interesting conclusion that for an
+equivalence of 128 bit symmetric size, you will need to use an 3248 bit RSA
+key. See chapter 7 of \cite{ii2011ecrypt}, page 30.
+
 
-The website \url{http://www.keylength.com/} offers a good overview of approximations for
-key lenght security based on recommendations by different standardization bodies and
-academic publications.
+There are a couple of other studies comparing keylengths and their respective
+strengths.  The website \url{http://www.keylength.com/} compares these papers
+and offers a good overview of approximations for key lengths based on
+recommendations by different standardization bodies and academic publications.
+Figure \ref{fig:keylengths.com} shows a typical comparison of keylengths on
+this web site.
 
+\begin{figure}[h]
+  \centering
+  \includegraphics[width=0.65\textwidth]{keylengths_com.png}
+  \caption{Screenshot of \url{http://www.keylength.com} for 128 bit symmetric key size equivalents}
+  \label{fig:keylengths.com}
+\end{figure}
+
+
+\paragraph{Summary}
 \begin{itemize}
-\item For traditional asymmetric public-key cryptography we consider any key length below 2048 bits to be
-deprectated at the time of this writing.  
-\item For elliptic curve cryptography we consider key lengths below 224 bits to be deprectated.  
-\item For symmetric algorithms we consider anything below 128 bits to be deprecated.
-\end{itemize}
 
+\item For traditional asymmetric public-key cryptography we consider any key
+length below 2048 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
+be inadequate for long term protection.  
+
+\item For symmetric algorithms we consider anything below 128 bits to be
+inadequate for long term protection.
+
+\end{itemize}
 
-One special remark is necessary for 3DES: here we want to note that 3DES
-theoretically has 168 bit security, however based on the NIST Special
-Publication 800-57
+\paragraph{Special remark on 3DES} \mbox{} \\
+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},
-pages 63 and 64}, it is clear that 3DES can only be considered to provide for 
+pages 63 and 64}, it is clear that 3DES can only be considered to provide for
 80 bits / 112 bits security.
 
 
diff --git a/src/keylengths_com.png b/src/keylengths_com.png
new file mode 100644 (file)
index 0000000..202e5db
Binary files /dev/null and b/src/keylengths_com.png differ
index 42d3e56..db07040 100644 (file)
 \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 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 standardised 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)}
 \end{itemize}
index e058a45..e608eb6 100644 (file)
@@ -1,16 +1,24 @@
 \section{Methods}
 \label{section:Methods}
 
-For writing this guide, we chose to collect the most well researched facts about 
-cryptography settings and let as many trusted specialists as possible review those settings.  
-The review process is completely open and done on a public mailing list. The
-document is available (read-only) to the public Internet on a git server, GitHub (mirror) 
-and open for public scrutiny. However, write permissions to the document are only
-granted to vetted people. The list of editors can be found in section \ref{section:Reviewers}.  
-Every write operation to the document is logged via the ``git'' version control system 
-and can thus be traced to a specific author.  We do not trust an unknown git server. 
+\epigraph{``C.O.S.H.E.R - completely open source, headers, engineering and research}{-- A. Kaplan's mail signature for many years}
+% proof: http://www.mavetju.org/mail/view_message.php?list=freebsd-current&id=947899&raw=yes
 
-Public peer-review and ``multiple eyes'' checking of our publication is the best
-strategy we can imagine at the present moment
+
+For writing this guide, we chose to collect the most well researched facts
+about cryptography settings and let as many trusted specialists as possible
+review those settings.  The review process is completely open and done on a
+public mailing list. The document is available (read-only) to the public
+Internet on a git server, GitHub (mirror) and open for public scrutiny.
+However, write permissions to the document are only granted to vetted people.
+The list of reviewers can be found in section \ref{section:Reviewers}.  Every
+write operation to the document is logged via the ``git'' version control
+system and can thus be traced to a specific author.  We accept ``git pull
+requests'' on the github
+mirror\footnote{\url{https://github.com/BetterCrypto/Applied-Crypto-Hardening}}
+for this paper.
+
+Public peer-review and ``multiple eyes'' checking of our publication is the
+best strategy we can imagine at the present moment
 \footnote{\url{http://www.wired.com/opinion/2013/10/how-to-design-and-defend-against-the-perfect-backdoor/}}.
 
diff --git a/src/neboltai.png b/src/neboltai.png
new file mode 100644 (file)
index 0000000..5fa7340
Binary files /dev/null and b/src/neboltai.png differ
index 83cf2bc..ec512d0 100755 (executable)
@@ -1,29 +1,38 @@
 #!/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', 'reviewers.tex', 'scope.tex', 'ssllibs.tex', 'suggested_reading.tex', 'template.tex', 'tools.tex');
 
 my $cipherStrB=`cat cipherStringB.txt`;
 chomp $cipherStrB;
 
-my @files=`find . -name "*.tex.template" -print`;
+my @files=`find . -name "*.tex" -a \! -name "*_generated.tex" -print`;
 my $f;
 
 foreach  $f ( @files)  {
        chomp $f;
-       $f =~ /(.*\.tex)\.template/;
-       my $ftex = $1;
-
-       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 $_;
+       $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 cc75a4c..878497c 100644 (file)
@@ -1,48 +1,57 @@
-\newpage
-\section{Recommendations on practical settings}
-\label{section:PracticalSettings}
+%\newpage
+%\section{Recommendations on practical settings}
 
+\label{section:PracticalSettings}
 
-\subsection{Webservers}
-\input{"./practical_settings/webserver.tex"}
+\section{Webservers}
+\input{"./practical_settings/webserver_generated.tex"}
 
-\subsection{SSH}
+%\newpage
+\section{SSH}
 \input{"./practical_settings/ssh.tex"}
 
-\subsection{Mail Servers}
-\input{"./practical_settings/mailserver.tex"}
+%\newpage
+\section{Mail Servers}
+\input{"./practical_settings/mailserver_generated.tex"}
 
 
-\subsection{VPNs}
+%\newpage
+\section{VPNs}
 \input{"./practical_settings/vpn.tex"}
 
 
-\subsection{PGP/GPG - Pretty Good Privacy}
+%\newpage
+\section{PGP/GPG - Pretty Good Privacy}
 \input{"./practical_settings/GPG.tex"}
 
 
-\subsection{seclayer-tcp}
+%\newpage
+\section{seclayer-tcp}
 \input{"./practical_settings/seclayer_tcp.tex"}
 
 
-\subsection{IPMI, ILO and other lights out management solutions}
+%\newpage
+\section{IPMI, ILO and other lights out management solutions}
 \input{"./practical_settings/ipmi.tex"}
 
 
-\subsection{SIP}
-\todo{AK: ask Klaus. Write this section, Klaus??? }
+%%\section{SIP}
+%%\todo{AK: ask Klaus. Write this section, Klaus??? }
 
 
-\subsection{Instant Messaging Systems}
+%\newpage
+\section{Instant Messaging Systems}
 \input{"./practical_settings/im.tex"}
 
 
-\subsection{Database Systems}
+%\newpage
+\section{Database Systems}
 \input{"./practical_settings/DBs.tex"}
 
 
-\subsection{Intercepting proxy solutions and reverse proxies}
-\input{"./practical_settings/proxy_solutions.tex"} 
+%\newpage
+\section{Intercepting proxy solutions and reverse proxies}
+\input{"./practical_settings/proxy_solutions_generated.tex"} 
 
 
 
index 06c5c83..d8aca8b 100644 (file)
@@ -1,16 +1,27 @@
-
 %%\subsection{Database Systems}
 % This list is based on : http://en.wikipedia.org/wiki/Relational_database_management_system#Market_share
 
+%% ---------------------------------------------------------------------- 
 \subsubsection{Oracle}
-\todo{write this}
+\begin{description}
+\item[Tested with Version:] not tested
 
+\item[References:] (German)
+{\small \url{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 \\
+
+\end{description}
+
+%% ---------------------------------------------------------------------- 
 \subsubsection{SQL Server}
 \todo{write this}
 
 
 
 
+%% ---------------------------------------------------------------------- 
 \subsubsection{MySQL}
 
 \begin{description}
@@ -37,10 +48,8 @@ ssl-cipher=EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256
 % 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}}
 
-\todo{add references}
-
-% add any further references or best practice documents here
 
 \item[How to test:]
 
@@ -53,18 +62,47 @@ show variables like '%ssl%';
 \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}}
 
 
+\paragraph*{ssl\_cipherspecs}\mbox{}\\
+In the link above the whole SSL-configuration is described in-depth. The following command shows only how to set the recommended ciphersuites.
+\begin{lstlisting}[breaklines]
+# recommended and supported ciphersuites 
+
+db2 update dbm cfg using SSL_CIPHERSPECS 
+TLS_RSA_WITH_AES_256_CBC_SHA256,
+TLS_RSA_WITH_AES_128_GCM_SHA256,
+TLS_RSA_WITH_AES_128_CBC_SHA256,
+TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
+TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,
+TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,
+TLS_RSA_WITH_AES_256_GCM_SHA384,
+TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
+TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,
+TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
+TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
+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
 
-\subsubsection{DB2}
-\todo{write this}
-
-
+\end{lstlisting}
 
+\end{description}
 
+%% ---------------------------------------------------------------------- 
 
-\subsubsection{Postgresql}
+\subsubsection{PostgreSQL}
 
 \begin{description}
 \item[Tested with Version:] Debian 7.0 and PostgreSQL 9.1
@@ -107,8 +145,3 @@ psql "sslmode=require host=postgres-server dbname=database" your-username
 
 \end{description}
 
-
-
-
-\subsubsection{Informix}
-\todo{write this}
index 48d7921..a7f27a5 100644 (file)
@@ -52,6 +52,8 @@ configuration\footnote{\url{http://www.process-one.net/docs/ejabberd/guide_en.ht
 
 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:] 
 
@@ -63,7 +65,7 @@ Older Versions of ejabberd ($ < $ 2.0.0) need to be patched\footnote{\url{http:/
 \subsubsection{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 add to popular chat clients (Adium, Pidgin...) the following propoerties for chiffered chats:
+It add to popular chat clients (Adium, Pidgin...) the following properties for chiffered chats:
 \begin{itemize}
     \item Authentification
     \item Integrity
@@ -109,5 +111,10 @@ listen {
 
 \subsubsection{SILC}
 
+SILC is instant messaging protocol publicly released in 2000. SILC is a per-default secure chat protocol thanks to a generalized usage of symmetric encryption. Keys are generated by the server meaning that if compromised, communication could be compromised.
+
+The protocol is not really popular anymore.
+
+
 
 
index 6685d99..2e4646c 100644 (file)
@@ -1,5 +1,5 @@
 %%\subsection{IPMI, ILO and other lights out management solutions}
 
 
-We \textbf{strongly} recommend that any remote management system for servers such as ILO, iDRAC, IPMI based solutions and similar systems never be connected to the public internet.
+We \emph{strongly} recommend that any remote management system for servers such as ILO, iDRAC, IPMI based solutions and similar systems \emph{never} be connected to the public internet.
 Consider creating an unrouted management VLAN and access that only via VPN.
index 4d44119..693d11e 100644 (file)
@@ -5,24 +5,46 @@ This section documents the most common mail (SMTP) and IMAPs/POPs servers. Anoth
 \subsubsection{Dovecot}
 
 
-Dovecot 2.2:
+\begin{description}
+\item[Tested with Version:] Dovecot 2.2:
 
+\item[Settings:] \mbox{}
 % Example: http://dovecot.org/list/dovecot/2013-October/092999.html
 
 \begin{lstlisting}[breaklines]
-  ssl_cipher_list = 'EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256:EECDH:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128:!ECDSA:AES256-SHA'
+  ssl_cipher_list = '@@@CIPHERSTRINGB@@@'
   ssl_prefer_server_ciphers = yes
 \end{lstlisting}
 
-Dovecot 2.1: Almost as good as dovecot 2.2. Does not support ssl\_prefer\_server\_ciphers
+\item[Additional info:] \mbox{}
 
-\paragraph*{Limitations}\mbox{}\\
+Dovecot 2.1: Almost as good as dovecot 2.2. Does not support
+ssl\_prefer\_server\_ciphers
 
-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
+\item[Limitations:] \mbox{}
+
+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{}
+
+% 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:] \url{http://wiki2.dovecot.org/SSL}
+
+% add any further references or best practice documents here
+
+\item[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.
+
+\todo{FIXME}
+
+\end{description}
+
+%% ---------------------------------------------------------------------- 
+
 \subsubsection{cyrus-imapd (based on 2.4.17)}
 
 \paragraph*{imapd.conf}\mbox{}\\
@@ -39,7 +61,7 @@ Limiting the ciphers provided may force (especially older) clients to connect wi
 
 If you still want to force strong encryption use
 \begin{lstlisting}[breaklines]
-  tls_cipher_list: <...recommended ciphersuite...>
+  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.\\
@@ -85,6 +107,8 @@ There is a working patch for all three features:
 % options = CIPHER_SERVER_PREFERENCE
 % TIMEOUTclose = 1
 
+%% ---------------------------------------------------------------------- 
+
 \subsubsection{SMTP in general}
 \label{subsection:smtp_general}
 
@@ -127,6 +151,8 @@ 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.
 
+%% ---------------------------------------------------------------------- 
+
 \subsubsection{Postfix}
 
 \begin{description}
@@ -196,7 +222,7 @@ acceptable for the ``mandatory'' security level, again in
 \begin{lstlisting}[breaklines]
   smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3
   smtpd_tls_mandatory_ciphers=high
-  tls_high_cipherlist=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
+  tls_high_cipherlist=@@@CIPHERSTRINGB@@@
 \end{lstlisting}
 
 Then, we configure the MSA smtpd in \verb|master.cf| with two
@@ -226,8 +252,18 @@ you can leave the statement in for older versions.
 Refer to \url{http://www.postfix.org/TLS_README.html} for an in-depth
 discussion.
 
-% \item[Additional settings:]
-% no additional settings
+\item[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''
+parameters are used for export ciphers, while the ``dh1024'' ones are
+used for all other ciphers.
+
+The ``bit lenght'' in those parameter names is just a name, so one
+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):]
 % no special settings
@@ -246,6 +282,9 @@ $ zegrep "TLS connection established from.*with cipher" | /var/log/mail.log | aw
 
 \end{description}
 
+
+%% ---------------------------------------------------------------------- 
+
 \subsubsection{Exim (based on 4.82)}
 
 It is highly recommended to read
@@ -378,7 +417,7 @@ Exim already disables SSLv2 by default. We recommend to add
 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 (ike23).
+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.\\
 
 
@@ -393,7 +432,7 @@ GnuTLS is different in only some respects to OpenSSL:
 
 \paragraph*{Exim string expansion}\mbox{}\\
 
-Note that most of the options accept expansion strings. This way you can eg. set cipher lists or STARTTLS advertisment conditionally. Please follow the link to the official Exim documentation to get more information.
+Note that most of the options accept expansion strings. This way you can eg. set cipher lists or STARTTLS advertisement conditionally. Please follow the link to the official Exim documentation to get more information.
 
 \paragraph*{Limitations}\mbox{}\\
 
@@ -405,3 +444,38 @@ There already is a working patch to provide support:\\
 % do we need to documment starttls in detail?
 %\subsubsection{starttls?}
 
+%% ----------------------------------------------------------------------
+\subsubsection{Exchange}
+
+\todo{FIXME: write this section}
+
+\begin{description}
+\item[Tested with Version:] \todo{version?}
+
+\item[Settings:] \mbox{}
+
+\begin{lstlisting}[breaklines]
+    %Here goes your setting string
+\end{lstlisting}
+
+\item[Additional settings:] \mbox{}
+
+%Here you can add additional settings
+
+\begin{lstlisting}[breaklines]
+    %copy \& paste additional settings
+\end{lstlisting}
+
+\item[Justification for special settings (if needed):] \mbox{}
+
+% 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}
+
+% add any further references or best practice documents here
+
+\item[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 1d9b003..b686232 100644 (file)
@@ -1,15 +1,16 @@
 %%\subsection{Intercepting proxy solutions and reverse proxies}
 
-Within enterprise networks and corporations with increased levels of paranoia or at least some defined security requirements it is common NOT to allow direct connections to the public internet.
+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 reasons proxy solutions are installed to intercept and scan the traffic for potential threats within the sessions.
+For this reason proxy solutions are deployed on corporate networks to intercept and scan the traffic for potential threats within sessions.\\
 
-As soon as one wants to establish an encrypted connection to a server, there are three choices:
+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 for the security system.
-\item Intercept (i.e. terminate) the session at the proxy, scan there and re-encrypt the session towards the client.
+\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.
@@ -27,15 +28,7 @@ squid.conf
 \todo{UNTESTED!}
 \begin{lstlisting}[breaklines]
 options=NO_SSLv2,NO_TLSv1,NO_Compression,CIPHER_SERVER_PREFERENCE 
-cipher=ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH [...]
-\end{lstlisting}
-
-
-
-\todo{UNTESTED!}
-\begin{lstlisting}[breaklines]
-options=NO_SSLv2,NO_TLSv1,NO_Compression,CIPHER_SERVER_PREFERENCE 
-cipher=EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256:EECDH:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128:!ECDSA:AES256-SHA
+cipher=@@@CIPHERSTRINGB@@@
 \end{lstlisting}
 
 
@@ -155,7 +148,7 @@ ListenHTTPS
     AddHeader    "Front-End-Https: on"
     Cert         "/path/to/your/cert.pem"
     ## See 'man ciphers'.
-    Ciphers     "      TLSv1.2:!SSLv3:!SSLv2:AES256:!aNULL:!eNULL:!NULL"
+    Ciphers      "TLSv1.2:TLSv1.1:!SSLv3:!SSLv2:@@@CIPHERSTRINGB@@@"
     Service
         BackEnd
             Address 10.20.0.10
index b127ffc..960c14e 100644 (file)
@@ -1,4 +1,12 @@
-\subsubsection{OpenSSH}
+\subsection{OpenSSH}
+
+
+\begin{description}
+\item[Tested with Version:] OpenSSH 6.1
+
+\item[Settings:] \mbox{}
+
+
 \paragraph*{sshd_config}
 \begin{lstlisting}[breaklines]
        # ...
 \end{lstlisting}
 
 % XXX: curve25519-sha256@libssh.org only available upstream(!)
-Note: Older linux systems won't support SHA2. PuTTY (Windows) does not support RIPE-MD160. Curve25519, AES-GCM and UMAC are only available upstream (OpenSSH 6.1). DSA host keys have been removed on purpose, the DSS standard does not support for DSA keys stronger than 1024bit
-\footnote{\url{https://bugzilla.mindrot.org/show_bug.cgi?id=1647}} 
-which is far below current standards (see section \ref{section:keylengths}). Legacy systems can use this configuration and simply omit unsupported ciphers, key exchange algorithms and MACs.
-\\
+
+Note: Older linux systems won't support SHA2. PuTTY (Windows) does not support
+RIPE-MD160. Curve25519, AES-GCM and UMAC are only available upstream (OpenSSH
+6.1). DSA host keys have been removed on purpose, the DSS standard does not
+support for DSA keys stronger than 1024bit
+\footnote{\url{https://bugzilla.mindrot.org/show_bug.cgi?id=1647}} which is far
+below current standards (see section \ref{section:keylengths}). Legacy systems
+can use this configuration and simply omit unsupported ciphers, key exchange
+algorithms and MACs.  
+
+\item[Additional settings:] \mbox{}
+
+Note that the setting \texttt{ServerKeyBits 4096}  has no effect until you re-generate new ssh host keys. There might be issues if you have users which rely on the fingerprint of the old ssh host key being stored in their clients' \texttt{.ssh/known\_hosts} file.
+
+\item[References:]
+The openssh sshd\_config  man page is the best reference: \url{http://www.openssh.org/cgi-bin/man.cgi?query=sshd_config}
+
+
+\item[How to test:]
+Connect a client with verbose logging enabled to the SSH server \\
+\begin{lstlisting}[breaklines]
+$ ssh -vvv myserver.com
+\end{lstlisting}and observe the key exchange in the output.
+\end{description}
+
+\subsection{Cisco ASA}
+
+
+\begin{description}
+\item[Tested with Version:]9.1(3) 
+
+\item[Settings:] \mbox{}
+\begin{lstlisting}[breaklines]
+crypto key generate rsa modulus 2048
+ssh version 2
+ssh key-exchange group dh-group14-sha1
+line vty 0 4
+ transport input ssh
+\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-exchnage 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.
+\item[References:]
+http://www.cisco.com/en/US/docs/security/asa/asa91/configuration/general/admin\_management.html 
+
+
+\item[How to test:]
+Connect a client with verbose logging enabled to the SSH server \\
+\begin{lstlisting}[breaklines]
+$ ssh -vvv myserver.com
+\end{lstlisting}and observe the key exchange in the output.
+\end{description}
+
+
+\subsection{Cisco IOS}
+
+
+\begin{description}
+\item[Tested with Version:] 15.0, 15.1, 15.2
+
+\item[Settings:] \mbox{}
+\begin{lstlisting}[breaklines]
+crypto key generate rsa modulus 2048 label SSH-KEYS
+ip ssh rsa keypair-name SSH-KEYS
+ip ssh version 2
+ip ssh dh min size 2048
+\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.
+
+\item[References:]
+http://www.cisco.com/en/US/docs/ios/sec\_user\_services/configuration/guide/sec\_secure\_shell\_v2.html 
+
+% add any further references or best practice documents here
+
+\item[How to test:]
+Connect a client with verbose logging enabled to the SSH server \\
+\begin{lstlisting}[breaklines]
+$ ssh -vvv myserver.com
+\end{lstlisting}and observe the key exchange in the output.
+\end{description}
index d542cee..a572ada 100644 (file)
@@ -28,7 +28,8 @@ If you need to use Pre-Shared Key authentication:
 
 The size of the PSK should not be shorter than the output size of
 the hash algorithm used in IKE \footnote{It is used in a HMAC, see
-  \url{http://www.ietf.org/rfc/rfc2104.txt}.}.
+RFC2104\cite{rfc2104} and the discussion starting
+in \url{http://www.vpnc.org/ietf-ipsec/02.ipsec/msg00268.html}.}.
 
 For a key composed of upper- and lowercase letters, numbers, and two
 additional symbols\footnote{64 possible values = 6 bits},
@@ -55,8 +56,7 @@ table~\ref{tab:IPSEC_psk_len} gives the minimum lengths in characters.
 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.
-\footnote{\url{http://tools.ietf.org/html/rfc6379}}
-\footnote{\url{http://tools.ietf.org/html/rfc4308}}
+\footnote{RFC6379\cite{rfc6379}, RFC4308\cite{rfc4308}}
 
 When using any of those suites, make sure to enable ``Perfect Forward
 Secrecy`` for Phase 2, as this is not specified in the suites. The
@@ -71,8 +71,8 @@ table~\ref{tab:IPSEC_suites}.
     \toprule
     Configuration A & Configuration B & Notes\\
     \midrule
-    \verb|Suite-B-GCM-256| \newline \verb|Suite-B-GMAC-256| &
-    \verb|Suite-B-GCM-128| \newline \verb|Suite-B-GMAC-128| \newline
+    \verb|Suite-B-GCM-256| &
+    \verb|Suite-B-GCM-128| \newline
     \verb|VPN-B| 
     & All Suite-B variants use NIST elliptic curves\\
     \bottomrule
@@ -102,7 +102,7 @@ vulnerabilities \footnote{\url{http://ikecrack.sourceforge.net/}}.
     Mode & Main Mode & Main Mode \\
     Encryption & AES-256 & AES, CAMELLIA (-256 or -128) \\
     Hash & SHA2-* & SHA2-*, SHA1 \\
-    DH Group & Group 14--18, 19--21 & Group 14--21 \\
+    DH Group & Group 14, 18 & Group 14, 18 \\
 %    Lifetime & \todo{need recommendations; 1 day seems to be common
 %      practice} & \\
     \bottomrule
@@ -130,7 +130,7 @@ parameters are shown in table \ref{tab:IPSEC_ph2_params}.
     &
     \parbox[t]{5cm}{\raggedright
     \mbox{AES-GCM-16}, \mbox{AES-CTR}, \mbox{AES-CCM-16}, \mbox{AES-256}, \mbox{CAMELLIA-256}, \mbox{AES-128}, \mbox{CAMELLIA-128}} \\
-    Hash & SHA2-* (or none for AES-GCM) & SHA2-*, SHA1 (or none for AES-GCM) \\
+    Hash & SHA2-* (or none for AEAD) & SHA2-*, SHA1 (or none for AEAD) \\
     DH Group & Same as Phase 1 & Same as Phase 1 \\
 %    Lifetime & \todo{need recommendations; 1-8 hours is common} & \\
     \bottomrule
@@ -278,8 +278,6 @@ client and server.
 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
-# generate with 'openssl dhparam -out dh2048.pem 2048':
-dh dh2048.pem
 \end{lstlisting}
 
 \paragraph{Client Configuration}\mbox{}
@@ -378,7 +376,7 @@ be decrypted.
 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)
+9.1(3) - X-series model
 \item[Settings:] \mbox{}
 \begin{lstlisting}[breaklines]
 crypto ipsec ikev2 ipsec-proposal AES-Fallback
@@ -415,25 +413,25 @@ crypto map Outside-DMZ_map interface Outside-DMZ
 crypto ikev2 policy 1
  encryption aes-gcm-256
  integrity null
- group 24 14
+ group 14
  prf sha512 sha384 sha256 sha
  lifetime seconds 86400
 crypto ikev2 policy 2
  encryption aes-gcm-256 aes-gcm-192 aes-gcm
  integrity null
- group 24 14 5
+ group 14
  prf sha512 sha384 sha256 sha
  lifetime seconds 86400
 crypto ikev2 policy 3
  encryption aes-256 aes-192 aes
  integrity sha512 sha384 sha256
- group 24 14
+ group 14
  prf sha512 sha384 sha256 sha
  lifetime seconds 86400
 crypto ikev2 policy 4
  encryption aes-256 aes-192 aes
  integrity sha512 sha384 sha256 sha
- group 24 14 5
+ group 14
  prf sha512 sha384 sha256 sha
  lifetime seconds 86400
 crypto ikev2 enable Outside-DMZ client-services port 443
@@ -448,10 +446,15 @@ ssl trust-point ASDM_TrustPoint0 Outside-DMZ
 \item[Justification for special settings (if needed):] \mbox{}
 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.
 
-% 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
+3DES has been completely disabled as such Windows XP AnyConnect Clients will no longer be able to connect.
+
+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/en/US/docs/security/asa/roadmap/asaroadmap.html}\\
+\url{http://www.cisco.com/web/about/security/intelligence/nextgen_crypto.html}
 
 % add any further references or best practice documents here
 
index d88d3f7..4eb1eba 100644 (file)
@@ -1,11 +1,11 @@
 %%\subsection{Webservers}
 
-\subsubsection{Apache}
+%%---------------------------------------------------------------------- 
+\subsection{Apache}
 
-\begin{description}
-\item[Tested with Version:]
+\subsubsection{Tested with Version}
 
-\item[Settings:] \mbox{}
+\subsubsection{Settings} 
 
 %-All +TLSv1.1 +TLSv1.2
 \begin{lstlisting}[breaklines]
   # ALL subdomains HAVE TO support https if you use this!
   # Strict-Transport-Security: max-age=15768000 ; includeSubDomains
 
-old:
-  SSLCipherSuite 'EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256:EECDH:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128:!ECDSA:AES256-SHA'
-new:
-  SSLCipherSuite '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'
+  SSLCipherSuite '@@@CIPHERSTRINGB@@@'
 
 \end{lstlisting}
 
 Note again, that any cipher suite starting with ECDHE can be omitted, if in doubt.
-%% XXX NOTE TO SELF: remove from future automatically generated lists!
 
-\item[Additional settings:]
+
+\subsubsection{Additional settings}
 
 You should redirect everything to httpS:// if possible. In Apache you can do this with the following setting inside of a VirtualHost environment:
 
@@ -41,28 +38,28 @@ You should redirect everything to httpS:// if possible. In Apache you can do thi
   </VirtualHost>
 \end{lstlisting}
 
-\item[Justification for special settings (if needed):]
+\subsubsection{Justification for special settings (if needed)}
 
-\item[References:]
+\subsubsection{References}
 
-\item[How to test:]
+\subsubsection{How to test}
 
-See ssllabs in section \ref{section:Tools}
+See section \ref{section:Tools}
 
-\end{description}
-%XXXX   ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS
+%%\end{description}
 
 
-\subsubsection{lighttpd}
+%%---------------------------------------------------------------------- 
+\subsection{lighttpd}
 
 
 
-\begin{description}
-\item[Tested with Version:]
+%%\begin{description}
+\subsubsection{Tested with Version}
 
 \todo{version?}
 
-\item[Settings:] \mbox{}
+\subsubsection{Settings}
 
 
 %% Complete ssl.cipher-list with same algo than Apache
@@ -75,14 +72,14 @@ See ssllabs in section \ref{section:Tools}
     ssl.use-sslv3 = "disable"
     #ssl.use-compression obsolete >= 1.4.3.1
     ssl.pemfile = "/etc/lighttpd/server.pem"
-    ssl.cipher-list = 'EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256:EECDH:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128:!ECDSA:AES256-SHA'
+    ssl.cipher-list = '@@@CIPHERSTRINGB@@@'
     ssl.honor-cipher-order = "enable"
     setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=31536000")
   }
 \end{lstlisting}
 
 
-\item[Additional settings:]
+\subsubsection{Additional settings}
 
 As for any other webserver, you should automatically redirect http traffic toward httpS://
 
@@ -97,49 +94,50 @@ As for any other webserver, you should automatically redirect http traffic towar
 \end{lstlisting}
 
 
-\item[References:] 
-\todo{add references}.
+\subsubsection{References} \todo{add references to lighttpd SSL settins documentation}.
+
 lighttpd httpS:// redirection: \url{http://redmine.lighttpd.net/projects/1/wiki/HowToRedirectHttpToHttps}
 
-% add any further references or best practice documents here
 
-\item[How to test:] See ssllabs in section \ref{section:Tools}
+\subsubsection{How to test} 
+See section \ref{section:Tools}
 
 % 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}
+%\end{description}
 
 
-\subsubsection{nginx}
+%%---------------------------------------------------------------------- 
+\subsection{nginx}
 
-\begin{description}
-\item[Tested with Version:] 1.4.4 with OpenSSL 1.0.1e on OS X Server 10.8.5
+%\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}
 
-1.2.1-2.2+wheezy2 with OpenSSL 1.0.1e on Debian Wheezy
-1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
-1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
-1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
-1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
 
-\todo{version?}
-
-\item[Settings:] \mbox{}
+\subsubsection{Settings}
 
 \begin{lstlisting}[breaklines]
   ssl_prefer_server_ciphers on;
-  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
-  ssl_ciphers 'EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256:EECDH:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128:!ECDSA:AES256-SHA';
+  ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # not possible to do exclusive
+  ssl_ciphers '@@@CIPHERSTRINGB@@@';
   add_header Strict-Transport-Security max-age=2592000;
 \end{lstlisting}
 
-%% XXX FIXME: do we need to specify dhparams? Parameter: ssl_dhparam = file. See: http://wiki.nginx.org/HttpSslModule#ssl_protocols
+If you absolutely want to specify your own DH parameters, you can specify them via
 
-It is recommended to specify your own Diffie-Hellman Parameters file of at least the same bit size as your RSA key. E.g. use no less than 2048bit DH parameters with a 2048bit RSA key.
 \begin{lstlisting}[breaklines]
   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).
+
 
-\item[Additional settings:]
+\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:
 
@@ -154,27 +152,29 @@ You should redirect everything to httpS:// if possible. In Nginx you can do this
 \end{lstlisting}
 
 
-\item[References:] \todo{add references}
+\subsubsection{References} \todo{add references}
 
-\item[How to test:] See ssllabs in section \ref{section:Tools}
+\subsubsection{How to test}
+See section \ref{section:Tools}
 
-\end{description}
+%\end{description}
 
 
 
 
 
-\subsubsection{MS IIS}
+%%---------------------------------------------------------------------- 
+\subsection{MS IIS}
 \label{sec:ms-iis}
 
 
 \todo{Daniel: add screenshots and registry keys}
 
-\begin{description}
+%\begin{description}
 
-\item[Tested with Version:] \todo{Daniel: add tested version}
+\subsubsection{Tested with Version} \todo{Daniel: add tested version}
 
-\item[Settings:] \mbox{}
+\subsubsection{Settings}
 
 
 When trying to avoid RC4 and CBC (BEAST-Attack) and requiring perfect
@@ -242,21 +242,22 @@ Clients not supported:
 \item Bing
 \end{enumerate}
 
-\item[Additional settings:]
+\subsubsection{Additional settings}
 
 %Here you can add 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:]
+\subsubsection{References}
 
 \todo{add references}
 
 % add any further references or best practice documents here
 
-\item[How to test:] See ssllabs in section \ref{section:Tools}
+\subsubsection{How to test}
+See section \ref{section:Tools}
 
 
-\end{description}
+%\end{description}
diff --git a/src/practical_settings/webserver.tex.template b/src/practical_settings/webserver.tex.template
deleted file mode 100644 (file)
index 393fe5f..0000000
+++ /dev/null
@@ -1,262 +0,0 @@
-%%\subsection{Webservers}
-
-\subsubsection{Apache}
-
-\begin{description}
-\item[Tested with Version:]
-
-\item[Settings:] \mbox{}
-
-%-All +TLSv1.1 +TLSv1.2
-\begin{lstlisting}[breaklines]
-  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
-
-old:
-  SSLCipherSuite 'EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256:EECDH:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128:!ECDSA:AES256-SHA'
-new:
-  SSLCipherSuite '@@@CIPHERSTRINGB@@@'
-
-\end{lstlisting}
-
-Note again, that any cipher suite starting with ECDHE can be omitted, if in doubt.
-%% XXX NOTE TO SELF: remove from future automatically generated lists!
-
-\item[Additional settings:]
-
-You should redirect everything to httpS:// 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>
-\end{lstlisting}
-
-\item[Justification for special settings (if needed):]
-
-\item[References:]
-
-\item[How to test:]
-
-See ssllabs in section \ref{section:Tools}
-
-\end{description}
-%XXXX   ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AES:RSA+3DES:!ADH:!AECDH:!MD5:!DSS
-
-
-\subsubsection{lighttpd}
-
-
-
-\begin{description}
-\item[Tested with Version:]
-
-\todo{version?}
-
-\item[Settings:] \mbox{}
-
-
-%% 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 = 'EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256:EECDH:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128:!ECDSA:AES256-SHA'
-    ssl.honor-cipher-order = "enable"
-    setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=31536000")
-  }
-\end{lstlisting}
-
-
-\item[Additional settings:]
-
-As for any other webserver, you should automatically redirect http traffic toward httpS://
-
-\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")
-    }
-  }
-\end{lstlisting}
-
-
-\item[References:] 
-\todo{add references}.
-lighttpd httpS:// redirection: \url{http://redmine.lighttpd.net/projects/1/wiki/HowToRedirectHttpToHttps}
-
-% add any further references or best practice documents here
-
-\item[How to test:] See ssllabs in section \ref{section:Tools}
-
-% 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}
-
-
-\subsubsection{nginx}
-
-\begin{description}
-\item[Tested with Version:] 1.4.4 with OpenSSL 1.0.1e on OS X Server 10.8.5
-
-1.2.1-2.2+wheezy2 with OpenSSL 1.0.1e on Debian Wheezy
-1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
-1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
-1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
-1.4.4 with OpenSSL 1.0.1e on Debian Wheezy
-
-\todo{version?}
-
-\item[Settings:] \mbox{}
-
-\begin{lstlisting}[breaklines]
-  ssl_prefer_server_ciphers on;
-  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
-  ssl_ciphers 'EECDH+aRSA+AESGCM:EECDH+aRSA+SHA384:EECDH+aRSA+SHA256:EDH+CAMELLIA256:EECDH:EDH+aRSA:+SSLv3:!aNULL:!eNULL:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED:!AES128:!CAMELLIA128:!ECDSA:AES256-SHA';
-  add_header Strict-Transport-Security max-age=2592000;
-\end{lstlisting}
-
-%% XXX FIXME: do we need to specify dhparams? Parameter: ssl_dhparam = file. See: http://wiki.nginx.org/HttpSslModule#ssl_protocols
-
-It is recommended to specify your own Diffie-Hellman Parameters file of at least the same bit size as your RSA key. E.g. use no less than 2048bit DH parameters with a 2048bit RSA key.
-\begin{lstlisting}[breaklines]
-  ssl_dhparam file;
-\end{lstlisting}
-
-
-\item[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;
-\end{lstlisting}
-
-You should redirect everything to httpS:// if possible. In Nginx you can do this with the following setting:
-
-\begin{lstlisting}[breaklines]
-  rewrite     ^(.*)   https://$host$1 permanent;
-\end{lstlisting}
-
-
-\item[References:] \todo{add references}
-
-\item[How to test:] See ssllabs in section \ref{section:Tools}
-
-\end{description}
-
-
-
-
-
-\subsubsection{MS IIS}
-\label{sec:ms-iis}
-
-
-\todo{Daniel: add screenshots and registry keys}
-
-\begin{description}
-
-\item[Tested with Version:] \todo{Daniel: add tested version}
-
-\item[Settings:] \mbox{}
-
-
-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
-B doubts\footnote{\url{http://safecurves.cr.yp.to/rigid.html}}).
-
-Since \verb|ECDHE_RSA_*| is not supported, a SSL certificate based on
-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/}}
-\end{enumerate}
-
-
-Table~\ref{tab:MS_IIS_Client_Support} shows the process of turning on
-one algorithm after another and the effect on the supported clients
-tested using https://www.ssllabs.com.
-
-\verb|SSL 3.0|, \verb|SSL 2.0| and \verb|MD5| are turned off.
-\verb|TLS 1.0| and \verb|TLS 2.0| are turned on.
-
-\begin{table}[h]
-  \centering
-  \small
-  \begin{tabular}{ll}
-    \toprule
-    Cipher Suite & Client \\
-    \midrule
-    \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| & only 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| & FF 10-24, IE 8+, Safari 5, Java 7\\
-    \bottomrule 
- \end{tabular}
-  \caption{Client support}
-  \label{tab:MS_IIS_Client_Support}
-\end{table}
-
-Table~\ref{tab:MS_IIS_Client_Support} shows the algoriths from
-strongest to weakest and why they need to be added in this order. For
-example insisting on SHA-2 algorithms (only first two lines) would
-eliminate all versions of Firefox, so the last line is needed to
-support this browser, but should be placed at the bottom, so capable
-browsers will choose the stronger SHA-2 algorithms.
-
-\verb|TLS_RSA_WITH_RC4_128_SHA| or equivalent should also be added if
-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
-\end{enumerate}
-
-\item[Additional settings:]
-
-%Here you can add additional settings
-
-\item[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}
-
-% add any further references or best practice documents here
-
-\item[How to test:] See ssllabs in section \ref{section:Tools}
-
-
-\end{description}
index f0c439d..d020cc5 100644 (file)
@@ -1,3 +1,4 @@
+\newpage
 \section{Reviewers}
 \label{section:Reviewers}
 
@@ -19,6 +20,7 @@ Lenzhofer, Stefan \\
 \center
 Mendel, Florian \\
 Millauer, Tobias \\
+Pichler, Patrick \\
 P\"oschl, Ulrich \\
 San, Berg \\
 Schreck, Thomas  \\
index 5859ca3..9f719b7 100644 (file)
@@ -1,7 +1,6 @@
 \section{Scope}
 \label{section:Scope}
-
-In this guide, we restricted ourselves to:
+\newline In this guide, we restricted ourselves to:
 \begin{itemize}
 \item Internet-facing services
 \item Commonly used services
index b0182b3..9dbd614 100644 (file)
    note      = {Accessed 2013-12-12},
 }
 
+@misc{yarom2013flush+,
+  title      = {Flush+ Reload: a high resolution, low noise, L3 cache side-channel attack},
+  author     = {Yarom, Yuval and Falkner, Katrina},
+  year       = {2013},
+  publisher  = {Cryptology ePrint Archive, Report 2013/448, 2013. http://eprint. iacr. org/2013/448/. 3},
+  url        = {http://eprint.iacr.org/2013/448.pdf}
+}
+
+@techreport{TR02102,
+  title      = {BSI TR-02102 Kryptographische Verfahren},
+  author     = {Bundesamt f\"ur 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}
+}
+
+  
+@book{anderson2008security,
+  title      = {Security engineering},
+  author     = {Anderson, Ross},
+  year       = {2008},
+  publisher  = {Wiley. com}
+}
+
+@misc{tschofenig-webpki,
+  author = {{H. Tschofenig and E. Lear}},
+  title = {{Evolving the Web Public Key Infrastructure}},
+  howpublished = {\url{http://tools.ietf.org/html/draft-tschofenig-iab-webpki-evolution-01.txt}},
+  year = 2013,
+  month = Nov,
+}
+
+@misc{diginotar-hack,
+  author = {{Elinor Mills}},
+  title = {{Fraudulent Google certificate points to Internet attack}},
+  howpublished = {\url{http://news.cnet.com/8301-27080\_3-20098894-245/fraudulent-google-certificate-points-to-internet-attack/}},
+  year = 2011,
+  month = Aug,
+}
+
+@misc{googlecahack,
+  author = {{Damon Poeter}},
+  title = {{Fake Google Certificate Puts Gmail at Risk}},
+  howpublished = {\url{http://www.pcmag.com/article2/0,2817,2392063,00.asp}},
+  year = 2011,
+  month = Aug,
+}
+
+@misc{draft-ietf-websec-key-pinning,
+  author = {{C. Evans and C. Palmer}},
+  title = {{Public Key Pinning Extension for HTTP}},
+  howpublished = {\url{http://tools.ietf.org/html/draft-ietf-websec-key-pinning-09}},
+  year = 2013,
+  month = Nov,
+}
+
+@misc{gocode,
+  author = {{Adam Langley, et. al.}},
+  title = {{Go X.509 Verification Source Code}},
+  howpublished = {\url{https://code.google.com/p/go/source/browse/src/pkg/crypto/x509/verify.go#173}},
+  year = 2013,
+  month = 12,
+}
+
+@misc{certtransparency,
+  author = {{Adam Langley, Ben Laurie, Emilia Kasper}},
+  title = {{Certificate Transparency}},
+  howpublished = "\url{http://www.certificate-transparency.org}
+               \url{http://datatracker.ietf.org/doc/rfc6962/}",
+  year = 2013,
+  month = 07,
+}
index a561309..bee8583 100644 (file)
@@ -1,8 +1,6 @@
 \section{SSL libraries}
 \label{section:ssllibs}
 
-\todo{write down that everything here is very SSL lib dependent. You might have to recompile everythign if you need to change the ssl lib}
-
 Most if not all of the cryptographic work is done by the SSL libraries installed on
 your system. Supported protocols, cipher suites and more depend on the version of
 the SSL library in use. Whenever you upgrade the SSL library, a recompile of all
@@ -30,35 +28,26 @@ in RFC5932\cite{rfc5932}.
 In any way, as a sysadmin you are required to check what the SSL libraries on
 your systems support on how you may get the most security out of your systems.
 
-\todo{anyone? How about Java? What exists here?}
-
-\todo{Anyone? Windows crypto API?}
-
-\todo{Mac OSX /iOS crypto API? MacLemon?}
-
-%%azet: 
-% I think we should neglect this section since we do 
-% not need to provide an overview of cryptography libraries 
-% ourselves. but we  should point to concise guides
-% for those libraries - which most of them do not have
-% in place.
-%\subsection{OpenSSL}
-%
-%\todo{adi?}
-%
-%\subsection{GnuTLS}
-%
-%\todo{adi?}
-%
-%\subsection{NaCL}
-%
-%\todo{adi?}
-%
-%\subsection{polarSSL}
-%
-%\todo{adi?}
-%
-%\subsection{matrixSSL}
-%
-%\todo{adi?}
-
+\subsection{priority strings}
+
+Choosing cipher strings requires the use of an intermediate language that allows selection
+and deselection of ciphers, key exchange mechanisms, MACs and combinations of those.
+Common combinators consist of \texttt{+}, \texttt{-} and \texttt{!}
+
+\begin{center}
+\begin{tabular}{rll}
+\toprule
+\textbf{combinator} & \textbf{effect}                   & \textbf{example}\\\cmidrule(lr){1-3}
+           \verb|+| & add at this position              & \verb|ALL:+SHA256|        \\
+           \verb|-| & remove at the current position    & \verb|ALL:-SSLv3|         \\
+           \verb|!| & permanently remove from selection & \verb|ALL:!3DES:!RC4|     \\
+ (OpenSSL) \verb|@| & special command                   & \verb|ALL:@STRENGTH|       \\
+  (GnuTLS) \verb|%| & special command                   & \verb|NORMAL:%NEW_PADDING| \\
+\bottomrule
+\end{tabular}
+\end{center}
+
+A list of special strings to use can be found in
+\url{http://www.gnutls.org/manual/html_node/Priority-Strings.html} for GnuTLS or
+\url{https://www.openssl.org/docs/apps/ciphers.html} for OpenSSL. There is, however, no
+common syntax for a cipher string throughout different SSL libraries.
diff --git a/src/suite_names.tex b/src/suite_names.tex
new file mode 100644 (file)
index 0000000..b6e7d6e
--- /dev/null
@@ -0,0 +1,650 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% AUTOMATICALLY GENERATED
+%% DO NOT EDIT
+%%
+%% This was generated by .../tools/suitenames
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The list of IANA cipher suite names was retrieved from
+\url{https://www.iana.org/assignments/tls-parameters/tls-parameters-4.csv}
+on Tue Dec 17 00:18:51 2013.
+
+The list of OpenSSL Ciphers was generated with OpenSSL 1.0.1e 11 Feb 2013.
+
+\begin{longtable}{lll}
+  \toprule
+  Code & IANA Name & OpenSSL Name \\
+  \midrule\endhead
+  
+  \verb|0x00,0x00| & \verb|TLS_NULL_WITH_NULL_NULL| & \verb|| \\
+  
+  \verb|0x00,0x01| & \verb|TLS_RSA_WITH_NULL_MD5| & \verb|NULL-MD5| \\
+  
+  \verb|0x00,0x02| & \verb|TLS_RSA_WITH_NULL_SHA| & \verb|NULL-SHA| \\
+  
+  \verb|0x00,0x03| & \verb|TLS_RSA_EXPORT_WITH_RC4_40_MD5| & \verb|EXP-RC4-MD5| \\
+  
+  \verb|0x00,0x04| & \verb|TLS_RSA_WITH_RC4_128_MD5| & \verb|RC4-MD5| \\
+  
+  \verb|0x00,0x05| & \verb|TLS_RSA_WITH_RC4_128_SHA| & \verb|RC4-SHA| \\
+  
+  \verb|0x00,0x06| & \verb|TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5| & \verb|EXP-RC2-CBC-MD5| \\
+  
+  \verb|0x00,0x07| & \verb|TLS_RSA_WITH_IDEA_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x08| & \verb|TLS_RSA_EXPORT_WITH_DES40_CBC_SHA| & \verb|EXP-DES-CBC-SHA| \\
+  
+  \verb|0x00,0x09| & \verb|TLS_RSA_WITH_DES_CBC_SHA| & \verb|DES-CBC-SHA| \\
+  
+  \verb|0x00,0x0A| & \verb|TLS_RSA_WITH_3DES_EDE_CBC_SHA| & \verb|DES-CBC3-SHA| \\
+  
+  \verb|0x00,0x0B| & \verb|TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x0C| & \verb|TLS_DH_DSS_WITH_DES_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x0D| & \verb|TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x0E| & \verb|TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x0F| & \verb|TLS_DH_RSA_WITH_DES_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x10| & \verb|TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x11| & \verb|TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA| & \verb|EXP-EDH-DSS-DES-CBC-SHA| \\
+  
+  \verb|0x00,0x12| & \verb|TLS_DHE_DSS_WITH_DES_CBC_SHA| & \verb|EDH-DSS-DES-CBC-SHA| \\
+  
+  \verb|0x00,0x13| & \verb|TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA| & \verb|EDH-DSS-DES-CBC3-SHA| \\
+  
+  \verb|0x00,0x14| & \verb|TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA| & \verb|EXP-EDH-RSA-DES-CBC-SHA| \\
+  
+  \verb|0x00,0x15| & \verb|TLS_DHE_RSA_WITH_DES_CBC_SHA| & \verb|EDH-RSA-DES-CBC-SHA| \\
+  
+  \verb|0x00,0x16| & \verb|TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA| & \verb|EDH-RSA-DES-CBC3-SHA| \\
+  
+  \verb|0x00,0x17| & \verb|TLS_DH_anon_EXPORT_WITH_RC4_40_MD5| & \verb|EXP-ADH-RC4-MD5| \\
+  
+  \verb|0x00,0x18| & \verb|TLS_DH_anon_WITH_RC4_128_MD5| & \verb|ADH-RC4-MD5| \\
+  
+  \verb|0x00,0x19| & \verb|TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA| & \verb|EXP-ADH-DES-CBC-SHA| \\
+  
+  \verb|0x00,0x1A| & \verb|TLS_DH_anon_WITH_DES_CBC_SHA| & \verb|ADH-DES-CBC-SHA| \\
+  
+  \verb|0x00,0x1B| & \verb|TLS_DH_anon_WITH_3DES_EDE_CBC_SHA| & \verb|ADH-DES-CBC3-SHA| \\
+  
+  \verb|0x00,0x1E| & \verb|TLS_KRB5_WITH_DES_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x1F| & \verb|TLS_KRB5_WITH_3DES_EDE_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x20| & \verb|TLS_KRB5_WITH_RC4_128_SHA| & \verb|| \\
+  
+  \verb|0x00,0x21| & \verb|TLS_KRB5_WITH_IDEA_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x22| & \verb|TLS_KRB5_WITH_DES_CBC_MD5| & \verb|| \\
+  
+  \verb|0x00,0x23| & \verb|TLS_KRB5_WITH_3DES_EDE_CBC_MD5| & \verb|| \\
+  
+  \verb|0x00,0x24| & \verb|TLS_KRB5_WITH_RC4_128_MD5| & \verb|| \\
+  
+  \verb|0x00,0x25| & \verb|TLS_KRB5_WITH_IDEA_CBC_MD5| & \verb|| \\
+  
+  \verb|0x00,0x26| & \verb|TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA| & \verb|| \\
+  
+  \verb|0x00,0x27| & \verb|TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA| & \verb|| \\
+  
+  \verb|0x00,0x28| & \verb|TLS_KRB5_EXPORT_WITH_RC4_40_SHA| & \verb|| \\
+  
+  \verb|0x00,0x29| & \verb|TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5| & \verb|| \\
+  
+  \verb|0x00,0x2A| & \verb|TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5| & \verb|| \\
+  
+  \verb|0x00,0x2B| & \verb|TLS_KRB5_EXPORT_WITH_RC4_40_MD5| & \verb|| \\
+  
+  \verb|0x00,0x2C| & \verb|TLS_PSK_WITH_NULL_SHA| & \verb|| \\
+  
+  \verb|0x00,0x2D| & \verb|TLS_DHE_PSK_WITH_NULL_SHA| & \verb|| \\
+  
+  \verb|0x00,0x2E| & \verb|TLS_RSA_PSK_WITH_NULL_SHA| & \verb|| \\
+  
+  \verb|0x00,0x2F| & \verb|TLS_RSA_WITH_AES_128_CBC_SHA| & \verb|AES128-SHA| \\
+  
+  \verb|0x00,0x30| & \verb|TLS_DH_DSS_WITH_AES_128_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x31| & \verb|TLS_DH_RSA_WITH_AES_128_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x32| & \verb|TLS_DHE_DSS_WITH_AES_128_CBC_SHA| & \verb|DHE-DSS-AES128-SHA| \\
+  
+  \verb|0x00,0x33| & \verb|TLS_DHE_RSA_WITH_AES_128_CBC_SHA| & \verb|DHE-RSA-AES128-SHA| \\
+  
+  \verb|0x00,0x34| & \verb|TLS_DH_anon_WITH_AES_128_CBC_SHA| & \verb|ADH-AES128-SHA| \\
+  
+  \verb|0x00,0x35| & \verb|TLS_RSA_WITH_AES_256_CBC_SHA| & \verb|AES256-SHA| \\
+  
+  \verb|0x00,0x36| & \verb|TLS_DH_DSS_WITH_AES_256_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x37| & \verb|TLS_DH_RSA_WITH_AES_256_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x38| & \verb|TLS_DHE_DSS_WITH_AES_256_CBC_SHA| & \verb|DHE-DSS-AES256-SHA| \\
+  
+  \verb|0x00,0x39| & \verb|TLS_DHE_RSA_WITH_AES_256_CBC_SHA| & \verb|DHE-RSA-AES256-SHA| \\
+  
+  \verb|0x00,0x3A| & \verb|TLS_DH_anon_WITH_AES_256_CBC_SHA| & \verb|ADH-AES256-SHA| \\
+  
+  \verb|0x00,0x3B| & \verb|TLS_RSA_WITH_NULL_SHA256| & \verb|NULL-SHA256| \\
+  
+  \verb|0x00,0x3C| & \verb|TLS_RSA_WITH_AES_128_CBC_SHA256| & \verb|AES128-SHA256| \\
+  
+  \verb|0x00,0x3D| & \verb|TLS_RSA_WITH_AES_256_CBC_SHA256| & \verb|AES256-SHA256| \\
+  
+  \verb|0x00,0x3E| & \verb|TLS_DH_DSS_WITH_AES_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0x3F| & \verb|TLS_DH_RSA_WITH_AES_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0x40| & \verb|TLS_DHE_DSS_WITH_AES_128_CBC_SHA256| & \verb|DHE-DSS-AES128-SHA256| \\
+  
+  \verb|0x00,0x41| & \verb|TLS_RSA_WITH_CAMELLIA_128_CBC_SHA| & \verb|CAMELLIA128-SHA| \\
+  
+  \verb|0x00,0x42| & \verb|TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x43| & \verb|TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x44| & \verb|TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA| & \verb|DHE-DSS-CAMELLIA128-SHA| \\
+  
+  \verb|0x00,0x45| & \verb|TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA| & \verb|DHE-RSA-CAMELLIA128-SHA| \\
+  
+  \verb|0x00,0x46| & \verb|TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA| & \verb|ADH-CAMELLIA128-SHA| \\
+  
+  \verb|0x00,0x67| & \verb|TLS_DHE_RSA_WITH_AES_128_CBC_SHA256| & \verb|DHE-RSA-AES128-SHA256| \\
+  
+  \verb|0x00,0x68| & \verb|TLS_DH_DSS_WITH_AES_256_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0x69| & \verb|TLS_DH_RSA_WITH_AES_256_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0x6A| & \verb|TLS_DHE_DSS_WITH_AES_256_CBC_SHA256| & \verb|DHE-DSS-AES256-SHA256| \\
+  
+  \verb|0x00,0x6B| & \verb|TLS_DHE_RSA_WITH_AES_256_CBC_SHA256| & \verb|DHE-RSA-AES256-SHA256| \\
+  
+  \verb|0x00,0x6C| & \verb|TLS_DH_anon_WITH_AES_128_CBC_SHA256| & \verb|ADH-AES128-SHA256| \\
+  
+  \verb|0x00,0x6D| & \verb|TLS_DH_anon_WITH_AES_256_CBC_SHA256| & \verb|ADH-AES256-SHA256| \\
+  
+  \verb|0x00,0x84| & \verb|TLS_RSA_WITH_CAMELLIA_256_CBC_SHA| & \verb|CAMELLIA256-SHA| \\
+  
+  \verb|0x00,0x85| & \verb|TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x86| & \verb|TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x87| & \verb|TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA| & \verb|DHE-DSS-CAMELLIA256-SHA| \\
+  
+  \verb|0x00,0x88| & \verb|TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA| & \verb|DHE-RSA-CAMELLIA256-SHA| \\
+  
+  \verb|0x00,0x89| & \verb|TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA| & \verb|ADH-CAMELLIA256-SHA| \\
+  
+  \verb|0x00,0x8A| & \verb|TLS_PSK_WITH_RC4_128_SHA| & \verb|PSK-RC4-SHA| \\
+  
+  \verb|0x00,0x8B| & \verb|TLS_PSK_WITH_3DES_EDE_CBC_SHA| & \verb|PSK-3DES-EDE-CBC-SHA| \\
+  
+  \verb|0x00,0x8C| & \verb|TLS_PSK_WITH_AES_128_CBC_SHA| & \verb|PSK-AES128-CBC-SHA| \\
+  
+  \verb|0x00,0x8D| & \verb|TLS_PSK_WITH_AES_256_CBC_SHA| & \verb|PSK-AES256-CBC-SHA| \\
+  
+  \verb|0x00,0x8E| & \verb|TLS_DHE_PSK_WITH_RC4_128_SHA| & \verb|| \\
+  
+  \verb|0x00,0x8F| & \verb|TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x90| & \verb|TLS_DHE_PSK_WITH_AES_128_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x91| & \verb|TLS_DHE_PSK_WITH_AES_256_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x92| & \verb|TLS_RSA_PSK_WITH_RC4_128_SHA| & \verb|| \\
+  
+  \verb|0x00,0x93| & \verb|TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x94| & \verb|TLS_RSA_PSK_WITH_AES_128_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x95| & \verb|TLS_RSA_PSK_WITH_AES_256_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x96| & \verb|TLS_RSA_WITH_SEED_CBC_SHA| & \verb|SEED-SHA| \\
+  
+  \verb|0x00,0x97| & \verb|TLS_DH_DSS_WITH_SEED_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x98| & \verb|TLS_DH_RSA_WITH_SEED_CBC_SHA| & \verb|| \\
+  
+  \verb|0x00,0x99| & \verb|TLS_DHE_DSS_WITH_SEED_CBC_SHA| & \verb|DHE-DSS-SEED-SHA| \\
+  
+  \verb|0x00,0x9A| & \verb|TLS_DHE_RSA_WITH_SEED_CBC_SHA| & \verb|DHE-RSA-SEED-SHA| \\
+  
+  \verb|0x00,0x9B| & \verb|TLS_DH_anon_WITH_SEED_CBC_SHA| & \verb|ADH-SEED-SHA| \\
+  
+  \verb|0x00,0x9C| & \verb|TLS_RSA_WITH_AES_128_GCM_SHA256| & \verb|AES128-GCM-SHA256| \\
+  
+  \verb|0x00,0x9D| & \verb|TLS_RSA_WITH_AES_256_GCM_SHA384| & \verb|AES256-GCM-SHA384| \\
+  
+  \verb|0x00,0x9E| & \verb|TLS_DHE_RSA_WITH_AES_128_GCM_SHA256| & \verb|DHE-RSA-AES128-GCM-SHA256| \\
+  
+  \verb|0x00,0x9F| & \verb|TLS_DHE_RSA_WITH_AES_256_GCM_SHA384| & \verb|DHE-RSA-AES256-GCM-SHA384| \\
+  
+  \verb|0x00,0xA0| & \verb|TLS_DH_RSA_WITH_AES_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xA1| & \verb|TLS_DH_RSA_WITH_AES_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0x00,0xA2| & \verb|TLS_DHE_DSS_WITH_AES_128_GCM_SHA256| & \verb|DHE-DSS-AES128-GCM-SHA256| \\
+  
+  \verb|0x00,0xA3| & \verb|TLS_DHE_DSS_WITH_AES_256_GCM_SHA384| & \verb|DHE-DSS-AES256-GCM-SHA384| \\
+  
+  \verb|0x00,0xA4| & \verb|TLS_DH_DSS_WITH_AES_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xA5| & \verb|TLS_DH_DSS_WITH_AES_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0x00,0xA6| & \verb|TLS_DH_anon_WITH_AES_128_GCM_SHA256| & \verb|ADH-AES128-GCM-SHA256| \\
+  
+  \verb|0x00,0xA7| & \verb|TLS_DH_anon_WITH_AES_256_GCM_SHA384| & \verb|ADH-AES256-GCM-SHA384| \\
+  
+  \verb|0x00,0xA8| & \verb|TLS_PSK_WITH_AES_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xA9| & \verb|TLS_PSK_WITH_AES_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0x00,0xAA| & \verb|TLS_DHE_PSK_WITH_AES_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xAB| & \verb|TLS_DHE_PSK_WITH_AES_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0x00,0xAC| & \verb|TLS_RSA_PSK_WITH_AES_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xAD| & \verb|TLS_RSA_PSK_WITH_AES_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0x00,0xAE| & \verb|TLS_PSK_WITH_AES_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xAF| & \verb|TLS_PSK_WITH_AES_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0x00,0xB0| & \verb|TLS_PSK_WITH_NULL_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xB1| & \verb|TLS_PSK_WITH_NULL_SHA384| & \verb|| \\
+  
+  \verb|0x00,0xB2| & \verb|TLS_DHE_PSK_WITH_AES_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xB3| & \verb|TLS_DHE_PSK_WITH_AES_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0x00,0xB4| & \verb|TLS_DHE_PSK_WITH_NULL_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xB5| & \verb|TLS_DHE_PSK_WITH_NULL_SHA384| & \verb|| \\
+  
+  \verb|0x00,0xB6| & \verb|TLS_RSA_PSK_WITH_AES_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xB7| & \verb|TLS_RSA_PSK_WITH_AES_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0x00,0xB8| & \verb|TLS_RSA_PSK_WITH_NULL_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xB9| & \verb|TLS_RSA_PSK_WITH_NULL_SHA384| & \verb|| \\
+  
+  \verb|0x00,0xBA| & \verb|TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xBB| & \verb|TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xBC| & \verb|TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xBD| & \verb|TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xBE| & \verb|TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xBF| & \verb|TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xC0| & \verb|TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xC1| & \verb|TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xC2| & \verb|TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xC3| & \verb|TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xC4| & \verb|TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xC5| & \verb|TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256| & \verb|| \\
+  
+  \verb|0x00,0xFF| & \verb|TLS_EMPTY_RENEGOTIATION_INFO_SCSV| & \verb|| \\
+  
+  \verb|0xC0,0x01| & \verb|TLS_ECDH_ECDSA_WITH_NULL_SHA| & \verb|ECDH-ECDSA-NULL-SHA| \\
+  
+  \verb|0xC0,0x02| & \verb|TLS_ECDH_ECDSA_WITH_RC4_128_SHA| & \verb|ECDH-ECDSA-RC4-SHA| \\
+  
+  \verb|0xC0,0x03| & \verb|TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA| & \verb|ECDH-ECDSA-DES-CBC3-SHA| \\
+  
+  \verb|0xC0,0x04| & \verb|TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA| & \verb|ECDH-ECDSA-AES128-SHA| \\
+  
+  \verb|0xC0,0x05| & \verb|TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA| & \verb|ECDH-ECDSA-AES256-SHA| \\
+  
+  \verb|0xC0,0x06| & \verb|TLS_ECDHE_ECDSA_WITH_NULL_SHA| & \verb|ECDHE-ECDSA-NULL-SHA| \\
+  
+  \verb|0xC0,0x07| & \verb|TLS_ECDHE_ECDSA_WITH_RC4_128_SHA| & \verb|ECDHE-ECDSA-RC4-SHA| \\
+  
+  \verb|0xC0,0x08| & \verb|TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA| & \verb|ECDHE-ECDSA-DES-CBC3-SHA| \\
+  
+  \verb|0xC0,0x09| & \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA| & \verb|ECDHE-ECDSA-AES128-SHA| \\
+  
+  \verb|0xC0,0x0A| & \verb|TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA| & \verb|ECDHE-ECDSA-AES256-SHA| \\
+  
+  \verb|0xC0,0x0B| & \verb|TLS_ECDH_RSA_WITH_NULL_SHA| & \verb|ECDH-RSA-NULL-SHA| \\
+  
+  \verb|0xC0,0x0C| & \verb|TLS_ECDH_RSA_WITH_RC4_128_SHA| & \verb|ECDH-RSA-RC4-SHA| \\
+  
+  \verb|0xC0,0x0D| & \verb|TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA| & \verb|ECDH-RSA-DES-CBC3-SHA| \\
+  
+  \verb|0xC0,0x0E| & \verb|TLS_ECDH_RSA_WITH_AES_128_CBC_SHA| & \verb|ECDH-RSA-AES128-SHA| \\
+  
+  \verb|0xC0,0x0F| & \verb|TLS_ECDH_RSA_WITH_AES_256_CBC_SHA| & \verb|ECDH-RSA-AES256-SHA| \\
+  
+  \verb|0xC0,0x10| & \verb|TLS_ECDHE_RSA_WITH_NULL_SHA| & \verb|ECDHE-RSA-NULL-SHA| \\
+  
+  \verb|0xC0,0x11| & \verb|TLS_ECDHE_RSA_WITH_RC4_128_SHA| & \verb|ECDHE-RSA-RC4-SHA| \\
+  
+  \verb|0xC0,0x12| & \verb|TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA| & \verb|ECDHE-RSA-DES-CBC3-SHA| \\
+  
+  \verb|0xC0,0x13| & \verb|TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA| & \verb|ECDHE-RSA-AES128-SHA| \\
+  
+  \verb|0xC0,0x14| & \verb|TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA| & \verb|ECDHE-RSA-AES256-SHA| \\
+  
+  \verb|0xC0,0x15| & \verb|TLS_ECDH_anon_WITH_NULL_SHA| & \verb|AECDH-NULL-SHA| \\
+  
+  \verb|0xC0,0x16| & \verb|TLS_ECDH_anon_WITH_RC4_128_SHA| & \verb|AECDH-RC4-SHA| \\
+  
+  \verb|0xC0,0x17| & \verb|TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA| & \verb|AECDH-DES-CBC3-SHA| \\
+  
+  \verb|0xC0,0x18| & \verb|TLS_ECDH_anon_WITH_AES_128_CBC_SHA| & \verb|AECDH-AES128-SHA| \\
+  
+  \verb|0xC0,0x19| & \verb|TLS_ECDH_anon_WITH_AES_256_CBC_SHA| & \verb|AECDH-AES256-SHA| \\
+  
+  \verb|0xC0,0x1A| & \verb|TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA| & \verb|SRP-3DES-EDE-CBC-SHA| \\
+  
+  \verb|0xC0,0x1B| & \verb|TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA| & \verb|SRP-RSA-3DES-EDE-CBC-SHA| \\
+  
+  \verb|0xC0,0x1C| & \verb|TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA| & \verb|SRP-DSS-3DES-EDE-CBC-SHA| \\
+  
+  \verb|0xC0,0x1D| & \verb|TLS_SRP_SHA_WITH_AES_128_CBC_SHA| & \verb|SRP-AES-128-CBC-SHA| \\
+  
+  \verb|0xC0,0x1E| & \verb|TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA| & \verb|SRP-RSA-AES-128-CBC-SHA| \\
+  
+  \verb|0xC0,0x1F| & \verb|TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA| & \verb|SRP-DSS-AES-128-CBC-SHA| \\
+  
+  \verb|0xC0,0x20| & \verb|TLS_SRP_SHA_WITH_AES_256_CBC_SHA| & \verb|SRP-AES-256-CBC-SHA| \\
+  
+  \verb|0xC0,0x21| & \verb|TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA| & \verb|SRP-RSA-AES-256-CBC-SHA| \\
+  
+  \verb|0xC0,0x22| & \verb|TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA| & \verb|SRP-DSS-AES-256-CBC-SHA| \\
+  
+  \verb|0xC0,0x23| & \verb|TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256| & \verb|ECDHE-ECDSA-AES128-SHA256| \\
+  
+  \verb|0xC0,0x24| & \verb|TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384| & \verb|ECDHE-ECDSA-AES256-SHA384| \\
+  
+  \verb|0xC0,0x25| & \verb|TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256| & \verb|ECDH-ECDSA-AES128-SHA256| \\
+  
+  \verb|0xC0,0x26| & \verb|TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384| & \verb|ECDH-ECDSA-AES256-SHA384| \\
+  
+  \verb|0xC0,0x27| & \verb|TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256| & \verb|ECDHE-RSA-AES128-SHA256| \\
+  
+  \verb|0xC0,0x28| & \verb|TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384| & \verb|ECDHE-RSA-AES256-SHA384| \\
+  
+  \verb|0xC0,0x29| & \verb|TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256| & \verb|ECDH-RSA-AES128-SHA256| \\
+  
+  \verb|0xC0,0x2A| & \verb|TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384| & \verb|ECDH-RSA-AES256-SHA384| \\
+  
+  \verb|0xC0,0x2B| & \verb|TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256| & \verb|ECDHE-ECDSA-AES128-GCM-SHA256| \\
+  
+  \verb|0xC0,0x2C| & \verb|TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384| & \verb|ECDHE-ECDSA-AES256-GCM-SHA384| \\
+  
+  \verb|0xC0,0x2D| & \verb|TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256| & \verb|ECDH-ECDSA-AES128-GCM-SHA256| \\
+  
+  \verb|0xC0,0x2E| & \verb|TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384| & \verb|ECDH-ECDSA-AES256-GCM-SHA384| \\
+  
+  \verb|0xC0,0x2F| & \verb|TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256| & \verb|ECDHE-RSA-AES128-GCM-SHA256| \\
+  
+  \verb|0xC0,0x30| & \verb|TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384| & \verb|ECDHE-RSA-AES256-GCM-SHA384| \\
+  
+  \verb|0xC0,0x31| & \verb|TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256| & \verb|ECDH-RSA-AES128-GCM-SHA256| \\
+  
+  \verb|0xC0,0x32| & \verb|TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384| & \verb|ECDH-RSA-AES256-GCM-SHA384| \\
+  
+  \verb|0xC0,0x33| & \verb|TLS_ECDHE_PSK_WITH_RC4_128_SHA| & \verb|| \\
+  
+  \verb|0xC0,0x34| & \verb|TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA| & \verb|| \\
+  
+  \verb|0xC0,0x35| & \verb|TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA| & \verb|| \\
+  
+  \verb|0xC0,0x36| & \verb|TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA| & \verb|| \\
+  
+  \verb|0xC0,0x37| & \verb|TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x38| & \verb|TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x39| & \verb|TLS_ECDHE_PSK_WITH_NULL_SHA| & \verb|| \\
+  
+  \verb|0xC0,0x3A| & \verb|TLS_ECDHE_PSK_WITH_NULL_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x3B| & \verb|TLS_ECDHE_PSK_WITH_NULL_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x3C| & \verb|TLS_RSA_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x3D| & \verb|TLS_RSA_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x3E| & \verb|TLS_DH_DSS_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x3F| & \verb|TLS_DH_DSS_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x40| & \verb|TLS_DH_RSA_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x41| & \verb|TLS_DH_RSA_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x42| & \verb|TLS_DHE_DSS_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x43| & \verb|TLS_DHE_DSS_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x44| & \verb|TLS_DHE_RSA_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x45| & \verb|TLS_DHE_RSA_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x46| & \verb|TLS_DH_anon_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x47| & \verb|TLS_DH_anon_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x48| & \verb|TLS_ECDHE_ECDSA_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x49| & \verb|TLS_ECDHE_ECDSA_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x4A| & \verb|TLS_ECDH_ECDSA_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x4B| & \verb|TLS_ECDH_ECDSA_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x4C| & \verb|TLS_ECDHE_RSA_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x4D| & \verb|TLS_ECDHE_RSA_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x4E| & \verb|TLS_ECDH_RSA_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x4F| & \verb|TLS_ECDH_RSA_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x50| & \verb|TLS_RSA_WITH_ARIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x51| & \verb|TLS_RSA_WITH_ARIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x52| & \verb|TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x53| & \verb|TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x54| & \verb|TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x55| & \verb|TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x56| & \verb|TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x57| & \verb|TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x58| & \verb|TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x59| & \verb|TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x5A| & \verb|TLS_DH_anon_WITH_ARIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x5B| & \verb|TLS_DH_anon_WITH_ARIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x5C| & \verb|TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x5D| & \verb|TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x5E| & \verb|TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x5F| & \verb|TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x60| & \verb|TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x61| & \verb|TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x62| & \verb|TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x63| & \verb|TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x64| & \verb|TLS_PSK_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x65| & \verb|TLS_PSK_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x66| & \verb|TLS_DHE_PSK_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x67| & \verb|TLS_DHE_PSK_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x68| & \verb|TLS_RSA_PSK_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x69| & \verb|TLS_RSA_PSK_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x6A| & \verb|TLS_PSK_WITH_ARIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x6B| & \verb|TLS_PSK_WITH_ARIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x6C| & \verb|TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x6D| & \verb|TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x6E| & \verb|TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x6F| & \verb|TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x70| & \verb|TLS_ECDHE_PSK_WITH_ARIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x71| & \verb|TLS_ECDHE_PSK_WITH_ARIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x72| & \verb|TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x73| & \verb|TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x74| & \verb|TLS_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x75| & \verb|TLS_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x76| & \verb|TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x77| & \verb|TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x78| & \verb|TLS_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x79| & \verb|TLS_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x7A| & \verb|TLS_RSA_WITH_CAMELLIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x7B| & \verb|TLS_RSA_WITH_CAMELLIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x7C| & \verb|TLS_DHE_RSA_WITH_CAMELLIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x7D| & \verb|TLS_DHE_RSA_WITH_CAMELLIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x7E| & \verb|TLS_DH_RSA_WITH_CAMELLIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x7F| & \verb|TLS_DH_RSA_WITH_CAMELLIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x80| & \verb|TLS_DHE_DSS_WITH_CAMELLIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x81| & \verb|TLS_DHE_DSS_WITH_CAMELLIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x82| & \verb|TLS_DH_DSS_WITH_CAMELLIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x83| & \verb|TLS_DH_DSS_WITH_CAMELLIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x84| & \verb|TLS_DH_anon_WITH_CAMELLIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x85| & \verb|TLS_DH_anon_WITH_CAMELLIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x86| & \verb|TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x87| & \verb|TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x88| & \verb|TLS_ECDH_ECDSA_WITH_CAMELLIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x89| & \verb|TLS_ECDH_ECDSA_WITH_CAMELLIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x8A| & \verb|TLS_ECDHE_RSA_WITH_CAMELLIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x8B| & \verb|TLS_ECDHE_RSA_WITH_CAMELLIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x8C| & \verb|TLS_ECDH_RSA_WITH_CAMELLIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x8D| & \verb|TLS_ECDH_RSA_WITH_CAMELLIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x8E| & \verb|TLS_PSK_WITH_CAMELLIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x8F| & \verb|TLS_PSK_WITH_CAMELLIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x90| & \verb|TLS_DHE_PSK_WITH_CAMELLIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x91| & \verb|TLS_DHE_PSK_WITH_CAMELLIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x92| & \verb|TLS_RSA_PSK_WITH_CAMELLIA_128_GCM_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x93| & \verb|TLS_RSA_PSK_WITH_CAMELLIA_256_GCM_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x94| & \verb|TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x95| & \verb|TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x96| & \verb|TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x97| & \verb|TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x98| & \verb|TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x99| & \verb|TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x9A| & \verb|TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256| & \verb|| \\
+  
+  \verb|0xC0,0x9B| & \verb|TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384| & \verb|| \\
+  
+  \verb|0xC0,0x9C| & \verb|TLS_RSA_WITH_AES_128_CCM| & \verb|| \\
+  
+  \verb|0xC0,0x9D| & \verb|TLS_RSA_WITH_AES_256_CCM| & \verb|| \\
+  
+  \verb|0xC0,0x9E| & \verb|TLS_DHE_RSA_WITH_AES_128_CCM| & \verb|| \\
+  
+  \verb|0xC0,0x9F| & \verb|TLS_DHE_RSA_WITH_AES_256_CCM| & \verb|| \\
+  
+  \verb|0xC0,0xA0| & \verb|TLS_RSA_WITH_AES_128_CCM_8| & \verb|| \\
+  
+  \verb|0xC0,0xA1| & \verb|TLS_RSA_WITH_AES_256_CCM_8| & \verb|| \\
+  
+  \verb|0xC0,0xA2| & \verb|TLS_DHE_RSA_WITH_AES_128_CCM_8| & \verb|| \\
+  
+  \verb|0xC0,0xA3| & \verb|TLS_DHE_RSA_WITH_AES_256_CCM_8| & \verb|| \\
+  
+  \verb|0xC0,0xA4| & \verb|TLS_PSK_WITH_AES_128_CCM| & \verb|| \\
+  
+  \verb|0xC0,0xA5| & \verb|TLS_PSK_WITH_AES_256_CCM| & \verb|| \\
+  
+  \verb|0xC0,0xA6| & \verb|TLS_DHE_PSK_WITH_AES_128_CCM| & \verb|| \\
+  
+  \verb|0xC0,0xA7| & \verb|TLS_DHE_PSK_WITH_AES_256_CCM| & \verb|| \\
+  
+  \verb|0xC0,0xA8| & \verb|TLS_PSK_WITH_AES_128_CCM_8| & \verb|| \\
+  
+  \verb|0xC0,0xA9| & \verb|TLS_PSK_WITH_AES_256_CCM_8| & \verb|| \\
+  
+  \verb|0xC0,0xAA| & \verb|TLS_PSK_DHE_WITH_AES_128_CCM_8| & \verb|| \\
+  
+  \verb|0xC0,0xAB| & \verb|TLS_PSK_DHE_WITH_AES_256_CCM_8| & \verb|| \\
+  
+  \bottomrule
+\end{longtable}
index 7ea2e25..3d3f6db 100644 (file)
@@ -1,4 +1,3 @@
-\newpage
 \section{Tools}
 \label{section:Tools}
 This section lists tools for checking the security settings.
@@ -7,7 +6,7 @@ This section lists tools for checking the security settings.
 
 Serverchecks 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 \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/}
@@ -36,7 +35,7 @@ Command line tools
 
 \subsection{Keylength}
 \begin{itemize}
-\item \url{http://www.keylength.com} comprehensive online resource for comparison of keylengths according to common recommendatons and standards in cryptography.
+\item \url{http://www.keylength.com} comprehensive online resource for comparison of keylengths according to common recommendations and standards in cryptography.
 \end{itemize}
 
 
diff --git a/tools/dhparams/Makefile b/tools/dhparams/Makefile
new file mode 100644 (file)
index 0000000..0633a0f
--- /dev/null
@@ -0,0 +1,9 @@
+INFILES = $(wildcard *.txt)
+OUTFILES = $(patsubst %.txt, %.pem, $(INFILES))
+
+.DELETE_ON_ERROR:
+
+all: $(OUTFILES)
+
+%.pem: %.txt
+       gen_pkcs3 `perl parse.pl $<` > $@
diff --git a/tools/dhparams/README b/tools/dhparams/README
new file mode 100644 (file)
index 0000000..161052c
--- /dev/null
@@ -0,0 +1,39 @@
+Tools to convert the RFC-defined IKE DH groups into OpenSSL compatible
+PEM files that we can distribute.
+
+The files in this directory have been generated (as described below)
+from the RFCs and compared with the ones in Exim's "std-crypto.c".
+
+Prerequisite: gen_pkcs3 from the Exim sources, which we don't include
+here due to duplication and licensing issues (ACH is under CC, Exim
+under GPLv2).
+
+Limitations: since gen_pkcs3 only supports MODP DH parameters, we
+don't process the ECP variation.
+
+Sources: RFC3526 (Groups 14-18)
+
+Works as follows:
+
+- produce an input file for each group named <group>.txt by copying
+  the relevant sections from the RFCs:
+
+--- cut ---
+      FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
+      29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
+      EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
+      E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
+      EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D
+      C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F
+      83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D
+      670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B
+      E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9
+      DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510
+      15728E5A 8AACAA68 FFFFFFFF FFFFFFFF
+
+   The generator is: 2.
+--- cut ---
+
+- run "make" (and make sure gen_pkcs3 is in $PATH)
+
+- collect <group>.pem files
diff --git a/tools/dhparams/group14.pem b/tools/dhparams/group14.pem
new file mode 100644 (file)
index 0000000..b150715
--- /dev/null
@@ -0,0 +1,8 @@
+-----BEGIN DH PARAMETERS-----
+MIIBCAKCAQEA///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxOb
+IlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjft
+awv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXT
+mmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhgh
+fDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq
+5RXSJhiY+gUQFXKOWoqsqmj//////////wIBAg==
+-----END DH PARAMETERS-----
diff --git a/tools/dhparams/group14.txt b/tools/dhparams/group14.txt
new file mode 100644 (file)
index 0000000..2077a4e
--- /dev/null
@@ -0,0 +1,13 @@
+FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
+      29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
+      EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
+      E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
+      EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D
+      C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F
+      83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D
+      670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B
+      E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9
+      DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510
+      15728E5A 8AACAA68 FFFFFFFF FFFFFFFF
+
+   The generator is: 2.
diff --git a/tools/dhparams/group15.pem b/tools/dhparams/group15.pem
new file mode 100644 (file)
index 0000000..f27b778
--- /dev/null
@@ -0,0 +1,11 @@
+-----BEGIN DH PARAMETERS-----
+MIIBiAKCAYEA///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxOb
+IlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjft
+awv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXT
+mmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhgh
+fDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq
+5RXSJhiY+gUQFXKOWoqqxC2tMxcNBFB6M6hVIavfHLpk7PuFBFjb7wqK6nFXXQYM
+fbOXD4Wm4eTHq/WujNsJM9cejJTgSiVhnc7j0iYa0u5r8S/6BtmKCGTYdgJzPshq
+ZFIfKxgXeyAMu+EXV3phXWx3CYjAutlG4gjiT6B05asxQ9tb/OD9EI5LgtEgqTrS
+yv//////////AgEC
+-----END DH PARAMETERS-----
diff --git a/tools/dhparams/group15.txt b/tools/dhparams/group15.txt
new file mode 100644 (file)
index 0000000..29af92d
--- /dev/null
@@ -0,0 +1,22 @@
+FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
+      29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
+      EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
+      E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
+      EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D
+      C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F
+      83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D
+      670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B
+      E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9
+      DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510
+      15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64
+      ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7
+      ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B
+      F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C
+      BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31
+      43DB5BFC E0FD108E 4B82D120 A93AD2CA FFFFFFFF FFFFFFFF
+
+   The generator is: 2.
+
+
+
+
diff --git a/tools/dhparams/group16.pem b/tools/dhparams/group16.pem
new file mode 100644 (file)
index 0000000..a734b90
--- /dev/null
@@ -0,0 +1,13 @@
+-----BEGIN DH PARAMETERS-----
+MIICCAKCAgEA///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxOb
+IlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjft
+awv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXT
+mmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhgh
+fDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq
+5RXSJhiY+gUQFXKOWoqqxC2tMxcNBFB6M6hVIavfHLpk7PuFBFjb7wqK6nFXXQYM
+fbOXD4Wm4eTHq/WujNsJM9cejJTgSiVhnc7j0iYa0u5r8S/6BtmKCGTYdgJzPshq
+ZFIfKxgXeyAMu+EXV3phXWx3CYjAutlG4gjiT6B05asxQ9tb/OD9EI5LgtEgqSEI
+ARpyPBKnh+bXiHGaEL26WyaZwycYavTiPBqUaDS2FQvaJYPpyirUTOjbu8LbBN6O
++S6O/BQfvsqmKHxZR05rwF2ZspZPoJDDoiM7oYZRW+ftH2EpcM7i16+4G912IXBI
+HNAGkSfVsFqpk7TqmI2P3cGG/7fckKbAj030Nck0BjGZ//////////8CAQI=
+-----END DH PARAMETERS-----
diff --git a/tools/dhparams/group16.txt b/tools/dhparams/group16.txt
new file mode 100644 (file)
index 0000000..15503fb
--- /dev/null
@@ -0,0 +1,24 @@
+FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
+      29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
+      EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
+      E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
+      EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D
+      C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F
+      83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D
+      670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B
+      E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9
+      DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510
+      15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64
+      ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7
+      ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B
+      F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C
+      BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31
+      43DB5BFC E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7
+      88719A10 BDBA5B26 99C32718 6AF4E23C 1A946834 B6150BDA
+      2583E9CA 2AD44CE8 DBBBC2DB 04DE8EF9 2E8EFC14 1FBECAA6
+      287C5947 4E6BC05D 99B2964F A090C3A2 233BA186 515BE7ED
+      1F612970 CEE2D7AF B81BDD76 2170481C D0069127 D5B05AA9
+      93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34063199
+      FFFFFFFF FFFFFFFF
+
+   The generator is: 2.
diff --git a/tools/dhparams/group17.pem b/tools/dhparams/group17.pem
new file mode 100644 (file)
index 0000000..d8307bd
--- /dev/null
@@ -0,0 +1,19 @@
+-----BEGIN DH PARAMETERS-----
+MIIDCAKCAwEA///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxOb
+IlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjft
+awv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXT
+mmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhgh
+fDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq
+5RXSJhiY+gUQFXKOWoqqxC2tMxcNBFB6M6hVIavfHLpk7PuFBFjb7wqK6nFXXQYM
+fbOXD4Wm4eTHq/WujNsJM9cejJTgSiVhnc7j0iYa0u5r8S/6BtmKCGTYdgJzPshq
+ZFIfKxgXeyAMu+EXV3phXWx3CYjAutlG4gjiT6B05asxQ9tb/OD9EI5LgtEgqSEI
+ARpyPBKnh+bXiHGaEL26WyaZwycYavTiPBqUaDS2FQvaJYPpyirUTOjbu8LbBN6O
++S6O/BQfvsqmKHxZR05rwF2ZspZPoJDDoiM7oYZRW+ftH2EpcM7i16+4G912IXBI
+HNAGkSfVsFqpk7TqmI2P3cGG/7fckKbAj030Nck0AoSSNsP6tNJ8cCbB1NyyYCZG
+3sl1HnY9uje9+P+UBq2eUw7l2zgvQTABrrBqU+2QJ9gxF5cnsIZaiRjaPtvrz5sU
+7UTObLrO1Lsb238UR+bMJUszIFFRK9evQm+49AE3jNK/WYPKAcZLkuzwMuoV0XId
+A/SC185udP721V5wL0aYDIK1qEAxkAscnlnnyX++x+jzI6l6fjbMiL4PHUW3/1ha
+xUvUB7IrQVSqzI9tfr9I4dgUzF7SD4A34KeXFe7ym+MoBqHVi7fF2nb1UKo9ih+/
+8OsZzLGjE9Vc2lbJ7C7yljI4f+jXbjwEaAQ+j2Y/SGDuEr8tWwt0dNbmlPkebcxA
+JP//////////AgEC
+-----END DH PARAMETERS-----
diff --git a/tools/dhparams/group17.txt b/tools/dhparams/group17.txt
new file mode 100644 (file)
index 0000000..1f34ef2
--- /dev/null
@@ -0,0 +1,30 @@
+FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1 29024E08
+   8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD EF9519B3 CD3A431B
+   302B0A6D F25F1437 4FE1356D 6D51C245 E485B576 625E7EC6 F44C42E9
+   A637ED6B 0BFF5CB6 F406B7ED EE386BFB 5A899FA5 AE9F2411 7C4B1FE6
+   49286651 ECE45B3D C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8
+   FD24CF5F 83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D
+   670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B E39E772C
+   180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9 DE2BCBF6 95581718
+   3995497C EA956AE5 15D22618 98FA0510 15728E5A 8AAAC42D AD33170D
+   04507A33 A85521AB DF1CBA64 ECFB8504 58DBEF0A 8AEA7157 5D060C7D
+   B3970F85 A6E1E4C7 ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226
+   1AD2EE6B F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C
+   BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31 43DB5BFC
+   E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7 88719A10 BDBA5B26
+   99C32718 6AF4E23C 1A946834 B6150BDA 2583E9CA 2AD44CE8 DBBBC2DB
+   04DE8EF9 2E8EFC14 1FBECAA6 287C5947 4E6BC05D 99B2964F A090C3A2
+   233BA186 515BE7ED 1F612970 CEE2D7AF B81BDD76 2170481C D0069127
+   D5B05AA9 93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34028492
+   36C3FAB4 D27C7026 C1D4DCB2 602646DE C9751E76 3DBA37BD F8FF9406
+   AD9E530E E5DB382F 413001AE B06A53ED 9027D831 179727B0 865A8918
+   DA3EDBEB CF9B14ED 44CE6CBA CED4BB1B DB7F1447 E6CC254B 33205151
+   2BD7AF42 6FB8F401 378CD2BF 5983CA01 C64B92EC F032EA15 D1721D03
+   F482D7CE 6E74FEF6 D55E702F 46980C82 B5A84031 900B1C9E 59E7C97F
+   BEC7E8F3 23A97A7E 36CC88BE 0F1D45B7 FF585AC5 4BD407B2 2B4154AA
+   CC8F6D7E BF48E1D8 14CC5ED2 0F8037E0 A79715EE F29BE328 06A1D58B
+   B7C5DA76 F550AA3D 8A1FBFF0 EB19CCB1 A313D55C DA56C9EC 2EF29632
+   387FE8D7 6E3C0468 043E8F66 3F4860EE 12BF2D5B 0B7474D6 E694F91E
+   6DCC4024 FFFFFFFF FFFFFFFF
+
+   The generator is: 2.
diff --git a/tools/dhparams/group18.pem b/tools/dhparams/group18.pem
new file mode 100644 (file)
index 0000000..af54dd6
--- /dev/null
@@ -0,0 +1,24 @@
+-----BEGIN DH PARAMETERS-----
+MIIECAKCBAEA///////////JD9qiIWjCNMTGYouA3BzRKQJOCIpnzHQCC76mOxOb
+IlFKCHmONATd75UZs806QxswKwpt8l8UN0/hNW1tUcJF5IW1dmJefsb0TELppjft
+awv/XLb0Brft7jhr+1qJn6WunyQRfEsf5kkoZlHs5Fs9wgB8uKFjvwWY2kg2HFXT
+mmkWP6j9JM9fg2VdI9yjrZYcYvNWIIVSu57VKQdwlpZtZww1Tkq8mATxdGwIyhgh
+fDKQXkYuNs474553LBgOhgObJ4Oi7Aeij7XFXfBvTFLJ3ivL9pVYFxg5lUl86pVq
+5RXSJhiY+gUQFXKOWoqqxC2tMxcNBFB6M6hVIavfHLpk7PuFBFjb7wqK6nFXXQYM
+fbOXD4Wm4eTHq/WujNsJM9cejJTgSiVhnc7j0iYa0u5r8S/6BtmKCGTYdgJzPshq
+ZFIfKxgXeyAMu+EXV3phXWx3CYjAutlG4gjiT6B05asxQ9tb/OD9EI5LgtEgqSEI
+ARpyPBKnh+bXiHGaEL26WyaZwycYavTiPBqUaDS2FQvaJYPpyirUTOjbu8LbBN6O
++S6O/BQfvsqmKHxZR05rwF2ZspZPoJDDoiM7oYZRW+ftH2EpcM7i16+4G912IXBI
+HNAGkSfVsFqpk7TqmI2P3cGG/7fckKbAj030Nck0AoSSNsP6tNJ8cCbB1NyyYCZG
+3sl1HnY9uje9+P+UBq2eUw7l2zgvQTABrrBqU+2QJ9gxF5cnsIZaiRjaPtvrz5sU
+7UTObLrO1Lsb238UR+bMJUszIFFRK9evQm+49AE3jNK/WYPKAcZLkuzwMuoV0XId
+A/SC185udP721V5wL0aYDIK1qEAxkAscnlnnyX++x+jzI6l6fjbMiL4PHUW3/1ha
+xUvUB7IrQVSqzI9tfr9I4dgUzF7SD4A34KeXFe7ym+MoBqHVi7fF2nb1UKo9ih+/
+8OsZzLGjE9Vc2lbJ7C7yljI4f+jXbjwEaAQ+j2Y/SGDuEr8tWwt0dNbmlPkebb4R
+WXSjkm8S/uXkOHd8tqky34zYvsTQc7kxujvIMraNndMAdB+nv4r8R+0ldvaTa6Qk
+ZjqrY5xa5PVoNCO0dCvxyXgjjxbL451lLeP9uL78hIrZIiIuBKQDfAcT61eoGiPw
+xzRz/GRs6jBrS8vIhi+Dhd36nUt/osCH6HloMwPtW906Bis89bOieKZtKhP4P0T4
+Ld8xDuB0q2o2RZfomaAlXcFk8xzFCEaFHfmrSBld7X6hsdUQvX7nTXP682vDHs+i
+aDWQRvTrh5+SQAlDi0gcbNeImgAu1e44K8kZDab8Am5HlVjkR1Z36aqeMFDidlaU
+38gfVuiAuW5xYMmA3Zjt09///////////wIBAg==
+-----END DH PARAMETERS-----
diff --git a/tools/dhparams/group18.txt b/tools/dhparams/group18.txt
new file mode 100644 (file)
index 0000000..c3500d2
--- /dev/null
@@ -0,0 +1,45 @@
+FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
+      29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
+      EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
+      E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
+      EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D
+      C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F
+      83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D
+      670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B
+      E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9
+      DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510
+      15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64
+      ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7
+      ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B
+      F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C
+      BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31
+      43DB5BFC E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7
+      88719A10 BDBA5B26 99C32718 6AF4E23C 1A946834 B6150BDA
+      2583E9CA 2AD44CE8 DBBBC2DB 04DE8EF9 2E8EFC14 1FBECAA6
+      287C5947 4E6BC05D 99B2964F A090C3A2 233BA186 515BE7ED
+      1F612970 CEE2D7AF B81BDD76 2170481C D0069127 D5B05AA9
+      93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34028492
+      36C3FAB4 D27C7026 C1D4DCB2 602646DE C9751E76 3DBA37BD
+      F8FF9406 AD9E530E E5DB382F 413001AE B06A53ED 9027D831
+      179727B0 865A8918 DA3EDBEB CF9B14ED 44CE6CBA CED4BB1B
+      DB7F1447 E6CC254B 33205151 2BD7AF42 6FB8F401 378CD2BF
+      5983CA01 C64B92EC F032EA15 D1721D03 F482D7CE 6E74FEF6
+      D55E702F 46980C82 B5A84031 900B1C9E 59E7C97F BEC7E8F3
+      23A97A7E 36CC88BE 0F1D45B7 FF585AC5 4BD407B2 2B4154AA
+      CC8F6D7E BF48E1D8 14CC5ED2 0F8037E0 A79715EE F29BE328
+      06A1D58B B7C5DA76 F550AA3D 8A1FBFF0 EB19CCB1 A313D55C
+      DA56C9EC 2EF29632 387FE8D7 6E3C0468 043E8F66 3F4860EE
+      12BF2D5B 0B7474D6 E694F91E 6DBE1159 74A3926F 12FEE5E4
+      38777CB6 A932DF8C D8BEC4D0 73B931BA 3BC832B6 8D9DD300
+      741FA7BF 8AFC47ED 2576F693 6BA42466 3AAB639C 5AE4F568
+      3423B474 2BF1C978 238F16CB E39D652D E3FDB8BE FC848AD9
+      22222E04 A4037C07 13EB57A8 1A23F0C7 3473FC64 6CEA306B
+      4BCBC886 2F8385DD FA9D4B7F A2C087E8 79683303 ED5BDD3A
+      062B3CF5 B3A278A6 6D2A13F8 3F44F82D DF310EE0 74AB6A36
+      4597E899 A0255DC1 64F31CC5 0846851D F9AB4819 5DED7EA1
+      B1D510BD 7EE74D73 FAF36BC3 1ECFA268 359046F4 EB879F92
+      4009438B 481C6CD7 889A002E D5EE382B C9190DA6 FC026E47
+      9558E447 5677E9AA 9E3050E2 765694DF C81F56E8 80B96E71
+      60C980DD 98EDD3DF FFFFFFFF FFFFFFFF
+
+   The generator is: 2.
diff --git a/tools/dhparams/parse.pl b/tools/dhparams/parse.pl
new file mode 100755 (executable)
index 0000000..de21f90
--- /dev/null
@@ -0,0 +1,20 @@
+#!/usr/bin/perl -w
+use strict;
+
+# parse RFC-style DH params into two parameters for gen_pkcs3's
+# command line
+
+my ($p,$g) = ('',undef);
+while(<>) {
+  chomp;
+  if(/^\s*((?:[\da-f]{8}\s*)+)\s*$/i) {
+    $p .= "$1";
+  }
+  if(/The generator is:\s+(\d+)/) {
+    $g = $1;
+  }
+}
+
+$p =~ s/\s+//g;
+
+printf "%s %d\n", $p, $g;
diff --git a/tools/suitenames/Makefile b/tools/suitenames/Makefile
new file mode 100644 (file)
index 0000000..ed7d3e5
--- /dev/null
@@ -0,0 +1,16 @@
+all: suite_names.tex
+
+install: all
+       cp suite_names.tex ../../src/
+
+.DELETE_ON_ERROR:
+
+suite_names.tex: tls-parameters-4.csv openssl-ciphers.txt template.tex buildsuites.pl
+       perl buildsuites.pl template.tex tls-parameters-4.csv openssl-ciphers.txt > $@
+
+tls-parameters-4.csv:
+       wget https://www.iana.org/assignments/tls-parameters/tls-parameters-4.csv
+
+openssl-ciphers.txt:
+       (openssl ciphers -V 'ALL:COMPLEMENTOFALL'; openssl version) > $@
+
diff --git a/tools/suitenames/README b/tools/suitenames/README
new file mode 100644 (file)
index 0000000..4665955
--- /dev/null
@@ -0,0 +1,2 @@
+This Makefile builds a comparison table of IANA and OpenSSL
+ciphersuite names.
diff --git a/tools/suitenames/buildsuites.pl b/tools/suitenames/buildsuites.pl
new file mode 100644 (file)
index 0000000..26448ac
--- /dev/null
@@ -0,0 +1,62 @@
+#!/usr/bin/perl -w
+use strict;
+use autodie;
+use Text::CSV;
+use Template;
+
+my $usage = "usage: $0 template csv-file openssl-file\n";
+
+my $template = shift;
+my $iana_csv = shift;
+my $openssl_txt = shift;
+
+my $ossl_version;
+
+
+my $iana = parse_csv($iana_csv);
+#print Dumper($iana);
+my $ossl = parse_openssl($openssl_txt);
+#print Dumper($ossl);
+
+my @merged;
+for my $id (sort keys {map { $_ => 1 } (keys %$iana, keys %$ossl)}) {
+  push(@merged, [$id, $iana->{$id}, $ossl->{$id}]);
+}
+
+my $tt = Template->new();
+$tt->process($template, {table => \@merged,
+                        openssl_version => $ossl_version,
+                        timestamp => scalar localtime time,
+                       });
+
+sub parse_csv {
+  my $fn = shift;
+
+  my $d = {};
+
+  my $csv = Text::CSV->new({binary => 1})
+    or die "CSV open error: " . Text::CSV->error_diag();
+  open my $fh, "<:encoding(utf8)", $fn or die "$fn: $!";
+  while(my $row = $csv->getline($fh)) {
+    $row->[1] =~ /^TLS_/ or next;
+    $d->{$row->[0]} = $row->[1];
+  }
+  $d;
+}
+sub parse_openssl {
+  my $fn = shift;
+
+  my $d = {};
+  open(F, "<$fn");
+  while(<F>) {
+    chomp;
+    if(/^OpenSSL/) {
+      $ossl_version = $_;
+      next;
+    }
+    /^\s*([\da-fx,]+)\s*-\s*(\S+)\s/i || next;
+    $d->{$1} = $2;
+  }
+  close(F);
+  $d;
+}
diff --git a/tools/suitenames/template.tex b/tools/suitenames/template.tex
new file mode 100644 (file)
index 0000000..66a1316
--- /dev/null
@@ -0,0 +1,24 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% AUTOMATICALLY GENERATED
+%% DO NOT EDIT
+%%
+%% This was generated by .../tools/suitenames
+%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+The list of IANA cipher suite names was retrieved from
+\url{https://www.iana.org/assignments/tls-parameters/tls-parameters-4.csv}
+on [% timestamp %].
+
+The list of OpenSSL Ciphers was generated with [% openssl_version %].
+
+\begin{longtable}{lll}
+  \toprule
+  Code & IANA Name & OpenSSL Name \\
+  \midrule\endhead
+  [% FOREACH row IN table %]
+  \verb|[% row.0 %]| & \verb|[% row.1 %]| & \verb|[% row.2 %]| \\
+  [% END %]
+  \bottomrule
+\end{longtable}