Merge branch 'master' of https://git.bettercrypto.org/ach-master
authorThomas Schreck <tom@schreck-thomas.de>
Mon, 16 Dec 2013 21:14:18 +0000 (22:14 +0100)
committerThomas Schreck <tom@schreck-thomas.de>
Mon, 16 Dec 2013 21:14:18 +0000 (22:14 +0100)
Conflicts:
src/PKIs.tex

42 files changed:
TODO.txt
src/.gitignore
src/DH.tex
src/Makefile
src/PKIs.tex
src/abstract.tex
src/applied-crypto-hardening.bib
src/applied-crypto-hardening.tex
src/cipher_suites/architecture.tex
src/cipher_suites/choosing.tex
src/cipher_suites/recommended.tex
src/disclaimer.tex
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/ssh.tex
src/practical_settings/webserver.tex
src/practical_settings/webserver.tex.template [deleted file]
src/reviewers.tex
src/ssllibs.tex
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]

index 0e56015..a31b0d1 100644 (file)
--- a/TODO.txt
+++ b/TODO.txt
@@ -6,33 +6,38 @@ BIG TOPICS
 ==========
 
 
-* DDOS possibilities when we increase cyrpto security?? What about that?
+* clean up 9.5 "chossing your own cipher"
+
+* DDOS possibilities when we increase cyrpto security?? What about that? (--> LATER)
 
 * write a Justification section to every setting, maybe have that later in the document. 
 
 * 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 section 7.3 (-> Adi . How to chose your own cipher string + screenshots)
-
-* 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)
+* 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)
+* Oracle ?? (--> Berg?? maybe . Or aaron: ask nic.at. Or link to T-Systems paper) --> T-Systems paper
 * DB2 (--> Berg. Or ask MLeyrer)
 
+
 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
 ========
@@ -114,7 +119,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
index da1e51a..5a2230a 100644 (file)
@@ -12,3 +12,6 @@ applied-crypto-hardening.markdown
 applied-crypto-hardening/
 gitHeadInfo.gin
 old/*
+practical_settings/*_generated.tex
+cipher_suites/*_generated.tex
+*_generated.tex
index c9ae226..252f14e 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) and 19-21 (for
+elliptic curve DH). 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..2a1b7b7 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" \
index bd2b323..c747213 100644 (file)
@@ -2,7 +2,7 @@
 \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.
@@ -46,8 +46,22 @@ An optional company name []:
 
 \subsubsection{Setting up your own Certificate Authority}
 \label{sec:setupownca}
-In some situations 
+In some situations it is sufficient to use your own CA certificates. An example is a own OpenVPN
+installation or if only systems communicate with each other, which do not act with users. Creating
+a own CA can be accomplished using OpenSSL:
 
+\begin{lstlisting}
+\% cd /usr/lib/ssl/misc
+\% sudo ./CA.pl -newca
+\end{lstlisting}
+
+Answer the questions according to your setup. Now you have configured your basic settings and 
+issued a new root certificate. Now you can issue new certificates as follows:
+
+\begin{lstlisting}
+\% cd /usr/lib/ssl/misc
+\% sudo ./CA.pl -newreq
+\end{lstlisting}
 
 \subsection{Hardening PKI}
 \label{sec:hardeningpki}
@@ -58,13 +72,13 @@ were not used by the company. The concept of PKIs heavily depends on the securit
 If they get compromised the whole PKI system will fail.
 
 Therefore several security enhancements were introduced by different organisations and
-vendors TODO ref auf IETF draft. Two, already used, concepts will be explained here.
+vendors~\ref{tschofenig-webpki}. Currently two methods are used, DANE and Certificate Pinning.
 
-\subsubsection{DANE}
-\label{sec:dane}
+\subsubsection{DANE}
+\label{sec:dane}
 
-\subsubsection{Certificate Pinning}
-\label{sec:certpinning}
+\subsubsection{Certificate Pinning}
+\label{sec:certpinning}
 
 
 
index c3d8edc..a314fd5 100644 (file)
@@ -1,8 +1,12 @@
+\begin{abstract}
 \section*{Abstract}
 
 
-\epigraph{``Unfortunately, the computer security and cryptology communities have drivted 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
 
+\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,
@@ -13,13 +17,14 @@ 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
 
@@ -27,23 +32,39 @@ 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 references (see chapter \ref{section:Links} and
-\ref{section:Suggested_Reading}) at the end of this document.
+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 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.
+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.
+
+
+
+\begin{figure}[H]
+  \centering
+  \includegraphics[width=0.9\textwidth]{neboltai.png}
+  \caption*{Do not talk unencrypted}
+  \label{fig:neboltai}
+\end{figure}
+
 
+\end{abstract}
index 271c2ac..c9bda80 100644 (file)
   year={2008},
   publisher={Chapman \& Hall/CRC}
 }
+
+@misc{tschofenig-webpki,
+  author = {{H. Tschofenig and E. Lear}},
+  title = {{Evolving the Web Public Key Infrastructure}},
+  howpublished = {http://tools.ietf.org/html/draft-tschofenig-iab-webpki-evolution-01.txt},
+  year = 2013,
+  month = Nov,
+}
\ No newline at end of file
index d1a366b..45777b4 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
 
@@ -201,6 +203,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
@@ -210,13 +213,17 @@ 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}
 \input{howtoread}
 \input{disclaimer}
 \input{motivation}
 \input{methods}
+%%
+\chapter{Practical recommendations}
+\input{practical_settings}
+%%
+\chapter{Theory}
 \input{PKIs}
 \input{ECC}
 \input{DH}
@@ -224,7 +231,7 @@ morekeywords={__global__, __device__},  %
 \input{RNGs}
 \input{cipher_suites}
 \input{ssllibs}
-\input{practical_settings}
+\chapter{Appendix}
 \input{tools}
 \input{further_research}
 \input{links}
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..159ae6d 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 for authentication and
+for encryption are exchanged. %%For RSA and DSA those keys are the same. %%
+WHAT?
 
 \todo{explain this section}
 
@@ -52,18 +54,19 @@ 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
+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
 (\texttt{secp384r1}).
 
 
index 0e703b0..cf7263f 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,15 +151,15 @@ 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 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
+\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
       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.
index 7ad6c44..15d7aa1 100644 (file)
@@ -6,18 +6,20 @@
 
 This guide specifically does not address physical security, protecting software
 and hardware against exploits, basic IT security housekeeping, complete
-information assurance, issues with key-roll over and key management, securing client PCs and mobile devices, 
-anti-tempest\cite{Wikipedia:Tempest} attack techniques,
+information assurance, 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 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.}
+differential fault analysis, differntial 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.}
 
 This guide does not talk about the well-known insecurities of trusting a
 public-key infrastructure (PKI)\footnote{Interested readers are referred to
@@ -26,6 +28,9 @@ public-key infrastructure (PKI)\footnote{Interested readers are referred to
 (german) which brings the problem of trusting PKIs right to the point}. Nor
 does this text 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
@@ -34,7 +39,7 @@ security level for all of their users.
 
 
 
-\epigraph{``Security is a process, not a product.``}{Bruce Schneier}
+\epigraph{``Security is a process, not a product.``}{-- Bruce Schneier}
 
 A note on the contents: this guide can only describe what the authors currently
 \emph{believe} to be the best settings based on their personal experience and
@@ -71,7 +76,7 @@ We explicitly excluded:
 \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 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 94a7a2c..2c48a75 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 rather want 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, discreet 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..d97eba6 100644 (file)
@@ -17,7 +17,7 @@
 \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}
index 4056e95..8ca247a 100644 (file)
@@ -1,7 +1,7 @@
 \section{Methods}
 \label{section:Methods}
 
-\epigraph{``C.O.S.H.E.R - completely open source, headers, engineering and research}{A. Kaplan's mail signature for many years}
+\epigraph{``C.O.S.H.E.R - completely open source, headers, engineering and research}{-- A. Kaplan's mail signature for many years}
 
 For writing this guide, we chose to collect the most well researched facts
 about cryptography settings and let as many trusted specialists as possible
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..8228fa4 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";
+
+       my $rc=` grep -q "\@\@\@CIPHERSTRINGB\@\@\@" $f`;
+       if ($rc 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..c187040 100644 (file)
@@ -1,47 +1,56 @@
-\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}
+%\newpage
+\section{Mail Servers}
 \input{"./practical_settings/mailserver.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}
+%\newpage
+\section{Intercepting proxy solutions and reverse proxies}
 \input{"./practical_settings/proxy_solutions.tex"} 
 
 
index 06c5c83..68a8974 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,16 +62,45 @@ 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}
 
@@ -107,8 +145,3 @@ psql "sslmode=require host=postgres-server dbname=database" your-username
 
 \end{description}
 
-
-
-
-\subsubsection{Informix}
-\todo{write this}
index 1b846da..2f38dbe 100644 (file)
@@ -65,7 +65,7 @@ Newer versions of ejabberd now support specifying the cipher string in the confi
 \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
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..7f5472b 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{}\\
@@ -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
@@ -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 b127ffc..ffeae84 100644 (file)
@@ -1,4 +1,12 @@
 \subsubsection{OpenSSH}
+
+
+\begin{description}
+\item[Tested with Version:] \todo{version?}
+
+\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:]
+% 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.
+
+Connect with a client to an ssh server like this: \\
+\begin{lstlisting}[breaklines]
+$ ssh -vv myserver.com
+\end{lstlisting}
+and observe the key exchange in the verbose output.
+
+\end{description}
index d88d3f7..2c02d3b 100644 (file)
@@ -1,11 +1,11 @@
 %%\subsection{Webservers}
 
-\subsubsection{Apache}
+\subsection{Apache}
 
-\begin{description}
-\item[Tested with Version:]
+\subsubsection{description}
+\subsubsection[Tested with Version:]
 
-\item[Settings:] \mbox{}
+\subsubsection[Settings:] \mbox{}
 
 %-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,19 +38,18 @@ 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}
 
-\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}
 
 
 
@@ -109,7 +105,7 @@ lighttpd httpS:// redirection: \url{http://redmine.lighttpd.net/projects/1/wiki/
 \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
@@ -132,12 +128,16 @@ lighttpd httpS:// redirection: \url{http://redmine.lighttpd.net/projects/1/wiki/
 \end{lstlisting}
 
 %% XXX FIXME: do we need to specify dhparams? Parameter: ssl_dhparam = file. See: http://wiki.nginx.org/HttpSslModule#ssl_protocols
+%% NO, use IETF/IKE
+
+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:]
 
@@ -164,7 +164,7 @@ You should redirect everything to httpS:// if possible. In Nginx you can do this
 
 
 
-\subsubsection{MS IIS}
+\subsection{MS IIS}
 \label{sec:ms-iis}
 
 
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..362ed37 100644 (file)
@@ -19,6 +19,7 @@ Lenzhofer, Stefan \\
 \center
 Mendel, Florian \\
 Millauer, Tobias \\
+Pichler, Patrick \\
 P\"oschl, Ulrich \\
 San, Berg \\
 Schreck, Thomas  \\
index a561309..04a41c5 100644 (file)
@@ -36,6 +36,30 @@ your systems support on how you may get the most security out of your systems.
 
 \todo{Mac OSX /iOS crypto API? MacLemon?}
 
+\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.
+
 %%azet: 
 % I think we should neglect this section since we do 
 % not need to provide an overview of cryptography libraries 
index 7ea2e25..5b0fee0 100644 (file)
@@ -7,7 +7,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 +36,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;