218ccba16a5da8538f2a5b350bd87162ded33a02
[ach-master.git] / src / cipher_suites / recommended.tex
1 %%\subsection{Recommended cipher suites}
2 \label{section:recommendedciphers}
3
4 In principle, system administrators who want to improve their servers need to
5 make a hard decision between locking out some users while keeping very high
6 cipher suite security levels or supporting as many users as possible while
7 lowering some settings. \url{https://www.ssllabs.com/} gives administrators a
8 tool to test out different settings. The authors of this guide used ssllabs.com
9 to arrive at a set of cipher suites which we will recommend throughout this
10 document.  \textbf{Caution: these settings can only represent a subjective
11 choice of the authors at the time of this writing. It might be a wise choice to
12 select your own cipher suites based on the instructions in section
13 \ref{section:ChoosingYourOwnCipherSuites}}.
14
15
16 \subsubsection{Configuration A: strong ciphers, fewer clients}
17
18 At the time of this writing, we recommend the following set of strong cipher
19 suites which may be useful in an environment where you do not depend on many,
20 diverse external clients and where compatibility is not an issue.  An example
21 of such an environment might be machine 2 machine communications or corporate
22 environments where you can define the software which must be used.
23
24
25 We arrived at this set of cipher suites by selecting
26
27 \begin{itemize}
28 \item TLS 1.2
29 \item Perfect forward secrecy / ephemeral Diffie Hellman
30 \item strong Hashes (SHA-2)
31 \item GCM as Authenticated Encryption scheme where possible
32 \end{itemize}
33
34 This results in the string:
35
36 \begin{lstlisting}[breaklines]
37 'EECDH+aRSA+AES256:EDH+aRSA+AES256:!SSLv3'
38 \end{lstlisting}
39
40 %$\implies$ resolves to 
41 %
42 %\begin{verbatim}
43 %openssl ciphers -V $string
44 %\end{verbatim}
45
46
47
48 \todo{make a column for cipher chaining mode}
49 \begin{center}
50
51 \begin{tabular}{lllllll}
52 \toprule
53 \textbf{ID}   & \textbf{OpenSSL Name}       & \textbf{Version} & \textbf{KeyEx} & \textbf{Auth} & \textbf{Cipher} & \textbf{MAC}\\\cmidrule(lr){1-7}
54 \verb|0xC030| & ECDHE-RSA-AES256-GCM-SHA384 & TLSv1.2          & ECDH           &  RSA          & AESGCM(256)     & AEAD         \\
55 \verb|0xC028| & ECDHE-RSA-AES256-SHA384     & TLSv1.2          & ECDH           &  RSA          & AES(256) (CBC)  & SHA384       \\
56 \verb|0x009F| & DHE-RSA-AES256-GCM-SHA384   & TLSv1.2          & DH             &  RSA          & AESGCM(256)     & AEAD         \\
57 \verb|0x006B| & DHE-RSA-AES256-SHA256       & TLSv1.2          & DH             &  RSA          & AES(256) (CBC)  & SHA256       \\
58 \bottomrule
59 \end{tabular}
60 \end{center}
61
62
63 \textbf{Compatibility}
64
65 Only clients which support TLS1.2 are covered by these cipher suites (Chrome 30,
66 Win 7 and Win 8.1 crypto stack, Opera 17, OpenSSL $\ge$ 1.0.1e, Safari 6 / iOS
67 6.0.1, Safari 7 / OS X 10.9).
68
69
70
71 \subsubsection{Configuration B: weaker ciphers, many clients}
72
73 In this section we propose a slightly "weaker" set of cipher suites. For example, there are
74 some known weaknesses for SHA-1 which is included in this set.
75 However, the advantage of this set of cipher suites is its wider compatibility
76 with clients. 
77
78
79 \textbf{In the following document, all further examples in this paper will use Configuration B}.
80
81
82 We arrived at this set of cipher suites by selecting
83
84 \begin{itemize}
85 \item TLS 1.2, TLS 1.1, TLS 1.0
86 \item allowing SHA-1
87 \todo{AK: Note that SHA1 is considered broken but if we are in DHE, we might get around it as long as you can not calculate a SHA1 collision ``live'' on the wire}
88
89 \end{itemize}
90
91 This results in the string:
92
93 \begin{lstlisting}[breaklines]
94 old (pre 20131202): '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'
95
96 newest 20131202:
97 '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'
98
99 \end{lstlisting}
100
101 \todo{adapt this table to the "newest" cipher string} \\
102 \todo{make a column for cipher chaining mode}
103 \begin{center}
104 \begin{tabular}{lllllll}
105 \toprule
106 \textbf{ID}   & \textbf{OpenSSL Name}       & \textbf{Version} & \textbf{KeyEx} & \textbf{Auth} & \textbf{Cipher} & \textbf{MAC}\\\cmidrule(lr){1-7}
107 \verb|0xC030| & ECDHE-RSA-AES256-GCM-SHA384 & TLSv1.2          & ECDH           &  RSA          & AESGCM(256)     & AEAD         \\ 
108 \verb|0xC028| & ECDHE-RSA-AES256-SHA384     & TLSv1.2          & ECDH           &  RSA          & AES(256) (CBC)  & SHA384       \\ 
109 \verb|0x009F| & DHE-RSA-AES256-GCM-SHA384   & TLSv1.2          & DH             &  RSA          & AESGCM(256)     & AEAD         \\ 
110 \verb|0x006B| & DHE-RSA-AES256-SHA256       & TLSv1.2          & DH             &  RSA          & AES(256) (CBC)  & SHA256       \\ 
111 \verb|0x0088| & DHE-RSA-CAMELLIA256-SHA     & SSLv3            & DH             &  RSA          & Camellia(256)   & SHA1         \\ 
112 \verb|0xC014| & ECDHE-RSA-AES256-SHA        & SSLv3            & ECDH           &  RSA          & AES(256) (CBC)  & SHA1         \\ 
113 \verb|0x0039| & DHE-RSA-AES256-SHA          & SSLv3            & DH             &  RSA          & AES(256) (CBC)  & SHA1         \\ 
114 \verb|0x0035| & AES256-SHA                  & SSLv3            & RSA            &  RSA          & AES(256) (CBC)  & SHA1         \\
115 \bottomrule
116 \end{tabular}
117 \end{center}
118
119 \textbf{Compatibility}
120
121 Note that these cipher suites will not work with anything using Windows XP's
122 crypto stack (IE, Outlook), Java 6, Java 7 and Android 2.3. Java 7 could be
123 made compatible by installing the "Java Cryptography Extension (JCE) Unlimited
124 Strength Jurisdiction Policy Files"
125 (JCE) \footnote{\url{http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html}}.
126 We could not verify yet if installing JCE also fixes the Java 7
127 DH-parameter length limitation (1024 bit). 
128
129 \textbf{Explanation}
130
131 For a detailed explanation of the cipher suites chosen, please see
132 \ref{section:ChoosingYourOwnCipherSuites}. In short, finding the perfect cipher
133 string is impossible and must be a tradeoff. On the one hand
134 there are mandatory and optional ciphers defined in a few RFCs, on the other hand
135 there are clients and servers only implementing subsets of the specification.
136
137 Straight forward, we wanted strong ciphers, forward secrecy
138 \footnote{\url{http://nmav.gnutls.org/2011/12/price-to-pay-for-perfect-forward.html}}
139 and the most clients we could get while still having a cipher string that can be
140 used on older servers too (think OpenSSL 0.9.8). This cipher string is meant to be used
141 by copy and paste and needs to just work.
142
143 \begin{itemize}
144 \item TLS1.2 is preferred over TLSv1.0/SSLv3 (while still providing a useable cipher
145       string for SSLv3).
146 \item AES256 and CAMELLIA256 count as strong ciphers at the moment; preferrably in
147       GCM mode.\\
148           \todo{add a reference here please}
149 \item AES128 and CAMELLIA128 still count as strong enough ciphers at the moment
150 \item DHE or ECDHE for forward secrecy
151 \item RSA as this will fit most of todays setup
152 \item AES256-SHA as a last ressort (with this cipher at the end, even systems with
153       very old versions of openssl like 0.9.8 will just work. Just forward secrecy
154       will not be used. On systems that do not support elliptic curves, that cipher
155       offers support for the Microsoft crypto libraries that only support ECDHE.
156 \end{itemize}
157
158 \todo{Adi: review "justification" when next section is written}