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