added (draft) section about cipher suites
[ach-master.git] / src / cipher_suites.tex
1 \section{Cipher suites}
2
3 Cipher suites are a combination of algorithms to provide for 
4 Confidentiality, Integrity and Authenticity
5 \footnote{\url{http://en.wikipedia.org/wiki/Information\_security}} of 
6 communication. For example: sending encrypted data over the wire does not 
7 ensure that the data can not be modified (message integrity), similarly
8 encrypted data can be sent from an adversary. It is therefore paramount to
9 prove that data has been sent from the desired source (message authenticity).
10 This concept is known as authenticated encryption
11 \footnote{\url{http://en.wikipedia.org/wiki/Authenticated\_encryption}}
12 \footnote{\url{http://www.cs.jhu.edu/~astubble/dss/ae.pdf}}.
13
14 \subsection{Forward Secrecy}
15 Forward Secrecy or Perfect Forward Secrecy is a property of a cipher suite 
16 that ensures confidentiality even if the server key has been compromised.
17 Thus if traffic has been recorded it can not be decrypted even if an adversary
18 has got hold of the decryption key
19 \footnote{\url{http://en.wikipedia.org/wiki/Forward\_secrecy}}
20 \footnote{\url{https://www.eff.org/deeplinks/2013/08/pushing-perfect-forward-secrecy-important-web-privacy-protection}}. 
21
22 \subsection{Recommended cipher suites}
23
24 In principle, system administrators who want to improve their servers need to
25 make a hard decision between locking out some users while keeping very high
26 cipher suite security levels or supporting as many users as possible while
27 lowering some settings. \url{https://www.ssllabs.com/} gives administrators a
28 tool to test out different settings. The authors used ssllabs.com to arrive at
29 a set of cipher suites which we will recommend throught this document.
30 \textbf{Caution: these settings can only represent a subjective choice of the
31 authors at the time of this writing. It might be a wise choice to select your
32 own cipher suites based on the instructions in section
33 \ref{section:ChosingYourOwnCipherSuites}}.
34
35
36 \subsubsection{Configuration A: strong ciphers, fewer clients}
37
38 At the time of this writing, we recommend the following set of strong cipher
39 suites which may be useful in an environment where you do not depend on many,
40 diverse external clients and where compatibility is not an issue.  An example
41 of such an environment might be machine 2 machine communications or corporate
42 environments where you can define the software which must be used.
43
44
45 We arrived at this set of cipher suites by selecting
46
47 \begin{itemize}
48 \item TLS 1.2
49 \item Perfect forward secrecy / ephemeral Diffie Hellman
50 \item strong Hashes (SHA-2)
51 \item GCM as chaining mode if possible 
52 \end{itemize}
53
54 This results in the string:
55
56 \begin{lstlisting}[breaklines]
57 'EECDH+aRSA+AES256:EDH+aRSA+AES256:!SSLv3'
58 \end{lstlisting}
59
60 %$\implies$ resolves to 
61 %
62 %\begin{verbatim}
63 %openssl ciphers -V $string
64 %\end{verbatim}
65
66
67
68 \begin{center}
69
70 \begin{tabular}{| l | l | l | l | l| l | l |}
71 \hline
72 ID        & OpenSSL name                & Version & KeyEx & Auth & Cipher & Hash \\ \hline
73 \verb|0xC030| & ECDHE-RSA-AES256-GCM-SHA384 & TLSv1.2 & ECDH  &  RSA &AESGCM(256)  & AEAD   \\ \hline
74 \verb|0xC028| & ECDHE-RSA-AES256-SHA384     & TLSv1.2 & ECDH  &  RSA &AES(256)     & SHA384 \\ \hline
75 \verb|0x009F| & DHE-RSA-AES256-GCM-SHA384   & TLSv1.2 & DH    &  RSA &AESGCM(256)  & AEAD   \\ \hline
76 \verb|0x006B| & DHE-RSA-AES256-SHA256       & TLSv1.2 & DH    &  RSA &AES(256)     & SHA256 \\ \hline
77 \end{tabular}
78 \end{center}
79
80
81 \textbf{Compatibility}
82
83 Only clients which support TLS1.2 are covered by these cipher suites (Chrome 30,
84 Win 7 and Win 8.1 crypto stack, Opera 17, OpenSSL $\ge$ 1.0.1e, Safari 6 / iOS
85 6.0.1, Safari 7 / OS X 10.9).
86
87
88
89 \subsubsection{Configuration B: weaker ciphers, many clients}
90
91 In this section we propose a slighly "weaker" set of cipher suites. There are
92 some known weaknesses of for example SHA-1 which is included in this set.
93 However, the advantage of this set of cipher suites is its wider compatibility
94 with clients. 
95
96
97 \textbf{In the following document, all further examples in this paper will use Configuration B}.
98
99
100 We arrived at this set of cipher suites by selecting
101
102 \begin{itemize}
103 \item TLS 1.2, TLS 1.1, TLS 1.0
104 \item allowing SHA-1
105 \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}
106
107 \end{itemize}
108
109 This results in the string:
110
111 \begin{lstlisting}[breaklines]
112 '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'
113 \end{lstlisting}
114
115
116
117 \begin{center}
118 \begin{tabular}{| l | l | l | l | l| l | l |}
119 \hline
120 ID        & OpenSSL name                            & Version & KeyEx & Auth & Cipher & Hash \\ \hline
121 0xC030 & ECDHE-RSA-AES256-GCM-SHA384 & TLSv1.2 & ECDH  &  RSA &AESGCM(256)  & AEAD   \\ \hline
122 0xC028 & ECDHE-RSA-AES256-SHA384     & TLSv1.2 & ECDH  &  RSA &AES(256)     & SHA384 \\ \hline
123 0x009F & DHE-RSA-AES256-GCM-SHA384   & TLSv1.2 & DH    &  RSA &AESGCM(256)  & AEAD   \\ \hline
124 0x006B & DHE-RSA-AES256-SHA256       & TLSv1.2 & DH    &  RSA &AES(256)     & SHA256 \\ \hline
125 0x0088 & DHE-RSA-CAMELLIA256-SHA     & SSLv3   & DH    &  RSA &Camellia(256)& SHA1   \\ \hline
126 0xC014 & ECDHE-RSA-AES256-SHA        & SSLv3   & ECDH  &  RSA &AES(256)     & SHA1   \\ \hline
127 0x0039 & DHE-RSA-AES256-SHA          & SSLv3   & DH    &  RSA &AES(256)     & SHA1   \\ \hline
128 0x0035 & AES256-SHA                  & SSLv3   & RSA   &  RSA &AES(256)     & SHA1   \\ \hline
129
130 \end{tabular}
131 \end{center}
132
133 \textbf{Compatibility}
134
135 Note that these cipher suites will not work with anything using Windows XP's
136 crypto stack (IE, Outlook), Java 6, Java 7 and Android 2.3. Java 7 could be
137 made compatible by installing the "Java Cryptography Extension (JCE) Unlimited
138 Strength Jurisdiction Policy Files"
139 (JCE) \footnote{\url{http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html}}.
140 We could not verify yet if installing JCE also fixes the Java 7
141 DH-parameter length limitation (1024 bit). 
142
143 \textbf{Explanation}
144
145 For a detailed explanation of the cipher suites chosen, please see
146 \ref{section:ChoosingYourOwnCipherSuites}. In short, finding the perfect cipher
147 string is impossible and must be a tradeoff. On the one hand
148 there are mandatory and optional ciphers defined in a few RFCs, on the other hand
149 there are clients and servers only implementing subsets of the specification.
150
151 Straight forward, we wanted strong ciphers, forward secrecy
152 \footnote{\url{http://nmav.gnutls.org/2011/12/price-to-pay-for-perfect-forward.html}}
153 and the most clients we could get while still having a cipher string that can be
154 used on older servers too (think OpenSSL 0.9.8). This cipher string is meant to be used
155 by copy and paste and needs to just work.
156
157 \begin{itemize}
158 \item TLS1.2 is preferred over TLSv1.0/SSLv3 (while still providing a useable cipher
159       string for SSLv3).
160 \item AES256 and CAMELLIA256 count as strong ciphers at the moment; preferrably in
161       GCM mode.\\
162           \todo{add a reference here please}
163       \todo{Adi: add 128bit ciphers too} \\
164       \todo{Team: discuss ordering of keys (256 $\rightarrow$ 128 or vice versa?)}
165 \item DHE or ECDHE for forward secrecy
166 \item RSA as this will fit most of todays setup
167 \item AES256-SHA as a last ressort (with this cipher at the end, even systems with
168       very old versions of openssl like 0.9.8 will just work. Just forward secrecy
169       will not be used. On systems that do not support elliptic curves, that cipher
170       offers support for the Microsoft crypto libraries that only support ECDHE.
171 \end{itemize}
172 \todo{Adi: review "justification" when next section is written}
173
174
175
176 \subsection{Known insecure and weak cipher suites}
177 \todo{PG: please write this section. List all known broken, obsolete, weak and insecure cipher suites . Or even better: find the best site which keeps track of outdated cipher suites and simply reference it. We do not want to maintain such a list ourselves!}
178
179 \subsection{Compatibility}
180 \todo{write this section. The idea here is to first document which server (and openssl) version we assumed. Once these parameters are fixe, we then list all clients which are supported for Variant A) and B). Therefore we can document compatibilities to some extent. The sysadmin can then chose roughly what he looses or gains by omitting certain cipher suites.}
181
182
183 \subsection{Choosing your own cipher suites}
184 \label{section:ChoosingYourOwnCipherSuites}
185
186 \todo{ Adi...  you want to describe how to make your own selection of cipher suites here.}
187
188 SSL/TLS cipher suites consist of a key exchange mechanism, an authentication, a
189 stream cipher (or a block cipher with a chaining mode) and a message authentication
190 mechanism.
191
192 Many of those mechanisms are interchangeable like the key exchange in this example:
193 \texttt{ECDHE-RSA-AES256-GCM-SHA384} and \texttt{DHE-RSA-AES256-GCM-SHA384}.
194 To provide a decent level of security, all algorithms need to be safe (subject to
195 the disclaimer in section \ref{section:disclaimer}).
196
197 Note: There are some very weak cipher suites in about every crypto library, most of
198 them for historic reasons like the crypto export embargo
199 \footnote{\url{http://en.wikipedia.org/wiki/Export_of_cryptography_in_the_United_States}}.
200 For the following chapter support of those is assumed to be disabled by having
201 \texttt{!EXP:!LOW:!NULL} as part of the cipher string.
202
203 \todo{Adi: add boxes for summaries like here \\ \url{http://tex.stackexchange.com/questions/99809/box-or-sidebar-for-additional-text}}
204
205 \todo{Team: do we need references for all cipher suites considered weak?}
206
207 \subsubsection{key exchange}
208
209 RSA, DSA, DH, EDH, ECDSA, ECDH, EECDH, FORTEZZA(?).
210
211 Note that Elliptic Curves in current TLS standards (up to and including TLSv1.2) are
212 questioned by many experts due to the lack of documentation on how the parameters
213 specifying those curves were chosen. Without the EC mechanisms many clients, especially
214 those using the Windows crypto libraries will not be able to use Forward Secrecy as these
215 libraries only implement the elliptic curve variant of ephemeral DH key exchange. The
216 curves in question are SECP256, SECP384, SECP521 and SECP571 of which the first two
217 are the only ones implemented in the Windows crypto stack and they're the only listed
218 as a requirement in the RFC. %%TODO: add link to RFC
219
220 Other key exchange mechanisms like Pre-Shared Key (PSK) or Secure Remote Password
221 (SRP) are irrelevant for regular SSL/TLS use. \texttt{!PSK:!SRP}
222
223 \subsubsection{authentication}
224
225 RSA, DSA, DSS, ECDSA, ECDH, FORTEZZA(?).
226
227 Other authentication mechanisms like Pre Shared Keys aren't used in SSL/TLS: \texttt{!PSK:!aNULL}
228
229 \subsubsection{encryption}
230
231 AES, CAMELLIA, SEED, ARIA(?), FORTEZZA(?)...
232
233 Other ciphers like IDEA, RC2, RC4, 3DES or DES are weak and therefor not recommended:
234 \texttt{!DES:!3DES:!RC2:!RC4:!eNULL}
235
236 \subsubsection{message authentication}
237
238 SHA-1 (SHA), SHA-2 (SHA256, SHA384), AEAD
239
240 Note that SHA-1 is considered broken and should not be used. SHA-1 is however a the
241 only still available message authentication mechanism supporting TLS1.0/SSLv3. Without
242 SHA-1 most clients will be locked out.
243
244 Other hash functions like MD2, MD4 or MD5 are unsafe and broken: \texttt{!MD2:!MD4:!MD5}
245
246 \subsubsection{combining cipher strings}
247 %% reference 'man ciphers' and 'openssl ciphers' and show some simple examples
248 %% VERY IMPORTANT: hint at the IANA-list and the differences in implementations
249
250 \todo{ Adi...  The text below was simply the old text, still left here for reference.}
251
252 %%% NOTE: we do not need to list this all here, can move to an appendix
253 %At the time of this writing, SSL is defined in RFCs:   
254 %
255 %\begin{itemize}
256 %\item RFC2246 - TLS1.0         
257 %\item RFC3268 - AES            
258 %\item RFC4132 - Camelia                
259 %\item RFC4162 - SEED           
260 %\item RFC4279 - PSK            
261 %\item RFC4346 - TLS 1.1                
262 %\item RFC4492 - ECC            
263 %\item RFC4785 - PSK\_NULL              
264 %\item RFC5246 - TLS 1.2                
265 %\item RFC5288 - AES\_GCM               
266 %\item RFC5289 - AES\_GCM\_SHA2\_ECC            
267 %\item RFC5430 - Suite B                
268 %\item RFC5487 - GCM\_PSK               
269 %\item RFC5489 - ECDHE\_PSK             
270 %\item RFC5932 - Camelia                
271 %\item RFC6101 - SSL 3.0                
272 %\item RFC6209 - ARIA           
273 %\item RFC6367 - Camelia                
274 %\item RFC6655 - AES\_CCM               
275 %\item RFC7027 - Brainpool Curves               
276 %\end{itemize}
277
278 \subsubsection{Overview of SSL Server settings}
279
280
281 Most Server software (Webservers, Mail servers, etc.) can be configured to prefer certain cipher suites over others. 
282 We followed the recommendations by Ivan Ristic's SSL/TLS Deployment Best Practices\footnote{\url{https://www.ssllabs.com/projects/best-practices/index.html}} document (see section 2.2 "Use Secure Protocols") and arrived at a list of recommended cipher suites for SSL enabled servers.
283
284 Following Ivan Ristic's adivce we arrived at a categorisation of cipher suites.
285
286 \begin{center}
287 \begin{tabular}{| l | l | l | l | l|}
288 \hline
289 & Version   & Key\_Exchange  & Cipher    & MAC       \\ \hline
290 \cellcolor{green}prefer  & TLS 1.2   & DHE\_DSS   & AES\_256\_GCM   & SHA384        \\ \hline
291     &   & DHE\_RSA   & AES\_256\_CCM   & SHA256        \\ \hline
292     &   & ECDHE\_ECDSA   & AES\_256\_CBC   &       \\ \hline
293     &   & ECDHE\_RSA &   &       \\ \hline
294     &   &   &   &       \\ \hline
295 \cellcolor{orange}consider    & TLS 1.1   & DH\_DSS    & AES\_128\_GCM   & SHA       \\ \hline
296     & TLS 1.0   & DH\_RSA    & AES\_128\_CCM   &       \\ \hline
297     &   & ECDH\_ECDSA    & AES\_128\_CBC   &       \\ \hline
298     &   & ECDH\_RSA  & CAMELLIA\_256\_CBC  &       \\ \hline
299     &   & RSA   & CAMELLIA\_128\_CBC  &       \\ \hline
300     &   &   &   &       \\ \hline
301 \cellcolor{red}avoid   
302 & SSL 3.0   & NULL  & NULL  & NULL      \\ \hline
303     &   & DH\_anon   & RC4\_128   & MD5       \\ \hline
304     &   & ECDH\_anon & 3DES\_EDE\_CBC  &       \\ \hline
305     &   &   & DES\_CBC   &       \\ \hline
306     &   &   &   &       \\ \hline
307 \cellcolor{blue}{\color{white}special }
308 &   & PSK   & CAMELLIA\_256\_GCM  &       \\ \hline
309     &   & DHE\_PSK   & CAMELLIA\_128\_GCM  &       \\ \hline
310     &   & RSA\_PSK   & ARIA\_256\_GCM  &       \\ \hline
311     &   & ECDHE\_PSK & ARIA\_256\_CBC  &       \\ \hline
312     &   &   & ARIA\_128\_GCM  &       \\ \hline
313     &   &   & ARIA\_128\_CBC  &       \\ \hline
314     &   &   & SEED  &       \\ \hline
315 \end{tabular}
316 \end{center}
317
318 A remark on the ``consider'' section: the BSI (Federal office for information security, Germany) recommends in its technical report TR-02102-2\footnote{\url{https://www.bsi.bund.de/SharedDocs/Downloads/DE/BSI/Publikationen/TechnischeRichtlinien/TR02102/BSI-TR-02102-2_pdf.html}} to \textbf{avoid} non-ephemeral\footnote{Ephemeral keys are session keys which are destroyed upon termination of the encrypted session. In TLS/SSL, they are realized by the DHE cipher suites. } keys for any communication which might contain personal or sensitive data. In this document, we follow BSI's advice and therefore only keep cipher suites containing (EC)DH\textbf{E} (ephemeral) variants. System administrators, who can not use forward secrecy can still use the cipher suites in the ``consider'' section. We however, do not recommend them in this document.
319
320 %% NOTE: s/forward secrecy/perfect forward secrecy???
321
322 Note that the entries marked as ``special'' are cipher suites which are not common to all clients (webbrowsers etc).
323
324
325 \subsubsection{Tested clients}
326  
327 Next we tested the cipher suites above on the following clients:
328
329 %% NOTE: we need to test with more systems!!
330 \begin{itemize}
331 \item Chrome 30.0.1599.101 Mac OS X 10.9
332 \item Safari 7.0 Mac OS X 10.9
333 \item Firefox 25.0 Mac OS X 10.9
334 \item Internet Explorer 10 Windows 7
335 \item Apple iOS 7.0.3
336 \end{itemize}
337
338
339 The result of testing the cipher suites with these clients gives us a preference order as shown in table \ref{table:prefOrderCipherSuites}. 
340 Should a client not be able to use a specific cipher suite, it will fall back to the next possible entry as given by the ordering.
341
342 \begin{center}
343 \begin{table}[h]
344 \small
345     \begin{tabular}{|l|l|l|l|l|}
346     \hline
347     Pref & Cipher Suite                                   & ID         & Browser                     \\ \hline
348     1    & TLS\_DHE\_RSA\_WITH\_AES\_256\_GCM\_SHA384     &     0x009f & OpenSSL command line client \\ \hline
349     2    & TLS\_ECDHE\_ECDSA\_WITH\_AES\_256\_CBC\_SHA384 &     0xC024 & Safari                      \\ \hline
350     3    & TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA384   &     0xC028 & Safari                      \\ \hline
351     4    & TLS\_DHE\_RSA\_WITH\_AES\_256\_CBC\_SHA256     &     0x006B & Safari, Chrome              \\ \hline
352     5    & TLS\_ECDHE\_ECDSA\_WITH\_AES\_256\_CBC\_SHA    &     0xC00A & Safari, Chrome, Firefox, IE \\ \hline
353     6    & TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA      &     0xC014 & Safari, Chrome, Firefox, IE \\ \hline
354     7    & TLS\_DHE\_RSA\_WITH\_AES\_256\_CBC\_SHA        &     0x0039 & Safari, Chrome, Firefox     \\ \hline
355     8    & TLS\_DHE\_DSS\_WITH\_AES\_256\_CBC\_SHA        &     0x0038 & Firefox, IE                 \\ \hline
356     9    & TLS\_DHE\_RSA\_WITH\_CAMELLIA\_256\_CBC\_SHA   &     0x0088 & Firefox                     \\ \hline
357     10   & TLS\_DHE\_DSS\_WITH\_CAMELLIA\_256\_CBC\_SHA   &     0x0087 & Firefox                     \\ \hline
358     \end{tabular}
359 \caption{Preference order of cipher suites}
360 \label{table:prefOrderCipherSuites}
361 \end{table}
362 \end{center}
363
364
365 Table \ref{table:prefOrderOpenSSLNames} shows the same data again with specifying the corresponding OpenSSL name.
366
367 \begin{center}
368 \begin{table}[h]
369 \small
370     \begin{tabular}{|l|l|l|}
371     \hline
372     Cipher Suite                                   & ID         & OpenSSL Name                  \\ \hline
373     TLS\_DHE\_RSA\_WITH\_AES\_256\_GCM\_SHA384     &     0x009f &         DHE-RSA-AES256-GCM-SHA384 \\ \hline
374     TLS\_ECDHE\_ECDSA\_WITH\_AES\_256\_CBC\_SHA384 &     0xC024 &     ECDHE-ECDSA-AES256-SHA384 \\ \hline
375     TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA384   &     0xC028 &     ECDHE-RSA-AES256-SHA384   \\ \hline
376     TLS\_DHE\_RSA\_WITH\_AES\_256\_CBC\_SHA256     &     0x006B &     DHE-RSA-AES256-SHA256     \\ \hline
377     TLS\_ECDHE\_ECDSA\_WITH\_AES\_256\_CBC\_SHA    &     0xC00A &     ECDHE-ECDSA-AES256-SHA    \\ \hline
378     TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA      &     0xC014 &     ECDHE-RSA-AES256-SHA      \\ \hline
379     TLS\_DHE\_RSA\_WITH\_AES\_256\_CBC\_SHA        &     0x0039 &     DHE-RSA-AES256-SHA        \\ \hline
380     TLS\_DHE\_DSS\_WITH\_AES\_256\_CBC\_SHA        &     0x0038 &     DHE-DSS-AES256-SHA        \\ \hline
381     TLS\_DHE\_RSA\_WITH\_CAMELLIA\_256\_CBC\_SHA   &     0x0088 &     DHE-RSA-CAMELLIA256-SHA   \\ \hline
382     TLS\_DHE\_DSS\_WITH\_CAMELLIA\_256\_CBC\_SHA   &     0x0087 &     DHE-DSS-CAMELLIA256-SHA   \\ \hline
383     \end{tabular}
384 \caption{Preference order of cipher suites, with OpenSSL names}
385 \label{table:prefOrderOpenSSLNames}
386 \end{table}
387 \end{center}
388
389 Note: the tables \ref{table:prefOrderOpenSSLNames} and \ref{table:prefOrderCipherSuites} contain Elliptic curve key exchanges. There are currently strong doubts\footnote{\url{http://safecurves.cr.yp.to/rigid.html}} concerning ECC.
390 If unsure, remove the cipher suites starting with ECDHE in the table above.
391
392
393 Based on this ordering, we can now define the corresponding settings for servers. We will start with the most common web servers.
394