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