780b4311eb0960d23373e83fe12262efea381648
[ach-master.git] / src / cipher_suites.tex
1 \section{Cipher suites}
2
3
4 \subsection{Recommended cipher suites}
5
6 In principle, system administrators who want to improve their servers need to
7 make a hard decision between locking out some users while keeping very high
8 cipher suite security levels or supporting as many users as possible while
9 lowering some settings. \url{https://www.ssllabs.com/} gives administrators a
10 tool to test out different settings. The authors used ssllabs.com to arrive at
11 a set of cipher suites which we will recommend throught this document.
12 \textbf{Caution: these settings can only represent a subjective choice of the
13 authors at the time of this writing. It might be a wise choice to select your
14 own ciper suites based on the instructions in section
15 \ref{section:ChosingYourOwnCipherSuites}}.
16
17
18 \subsubsection{Configuration A: strong ciphers, fewer clients}
19
20 At the time of this writing, we recommend the following set of strong cipher
21 suites which may be useful in an environment where you do not depend on many,
22 diverse external clients and where compatibility is not an issue.  An example
23 of such an environment might be machine 2 machine communications or corporate
24 environments where you can define the software which must be used.
25
26
27 We arrived at this set of cipher suites by selecting
28
29 \begin{itemize}
30 \item TLS 1.2
31 \item Perfect forward secrecy / ephemeral Diffie Hellman
32 \item strong Hashes (SHA-2)
33 \item GCM as chaining mode if possible 
34 \end{itemize}
35
36 This results in the string:
37
38 \begin{lstlisting}[breaklines]
39 'EECDH+aRSA+AES256:EDH+aRSA+AES256:!SSLv3'
40 \end{lstlisting}
41
42 %$\implies$ resolves to 
43 %
44 %\begin{verbatim}
45 %openssl ciphers -V $string
46 %\end{verbatim}
47
48
49
50 \begin{center}
51 \begin{tabular}{| l | l | l | l | l| l | l |}
52 \hline
53 ID        & OpenSSL name                & Version & KeyEx & Auth & Cipher & Hash \\ \hline
54 0xC030 & ECDHE-RSA-AES256-GCM-SHA384 & TLSv1.2 & ECDH  &  RSA &AESGCM(256)  & AEAD   \\ \hline
55 0xC028 & ECDHE-RSA-AES256-SHA384     & TLSv1.2 & ECDH  &  RSA &AES(256)     & SHA384 \\ \hline
56 0x009F & DHE-RSA-AES256-GCM-SHA384   & TLSv1.2 & DH    &  RSA &AESGCM(256)  & AEAD   \\ \hline
57 0x006B & DHE-RSA-AES256-SHA256       & TLSv1.2 & DH    &  RSA &AES(256)     & SHA256 \\ \hline
58 \end{tabular}
59 \end{center}
60
61
62 \textbf{Compatibility}
63
64 Only clients which support TLS1.2 are covered by this 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 slighly "weaker" set of cipher suites. There are
73 some known weaknesses of for example SHA-1 which is included in this 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 \end{itemize}
87
88 This results in the string:
89
90 \begin{lstlisting}[breaklines]
91 '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'
92 \end{lstlisting}
93
94
95
96 \begin{center}
97 \begin{tabular}{| l | l | l | l | l| l | l |}
98 \hline
99 ID        & OpenSSL name                            & Version & KeyEx & Auth & Cipher & Hash \\ \hline
100 0xC030 & ECDHE-RSA-AES256-GCM-SHA384 & TLSv1.2 & ECDH  &  RSA &AESGCM(256)  & AEAD   \\ \hline
101 0xC028 & ECDHE-RSA-AES256-SHA384     & TLSv1.2 & ECDH  &  RSA &AES(256)     & SHA384 \\ \hline
102 0x009F & DHE-RSA-AES256-GCM-SHA384   & TLSv1.2 & DH    &  RSA &AESGCM(256)  & AEAD   \\ \hline
103 0x006B & DHE-RSA-AES256-SHA256       & TLSv1.2 & DH    &  RSA &AES(256)     & SHA256 \\ \hline
104 0x0088 & DHE-RSA-CAMELLIA256-SHA     & SSLv3   & DH    &  RSA &Camellia(256)& SHA1   \\ \hline
105 0xC014 & ECDHE-RSA-AES256-SHA        & SSLv3   & ECDH  &  RSA &AES(256)     & SHA1   \\ \hline
106 0x0039 & DHE-RSA-AES256-SHA          & SSLv3   & DH    &  RSA &AES(256)     & SHA1   \\ \hline
107 0x0035 & AES256-SHA                  & SSLv3   & RSA   &  RSA &AES(256)     & SHA1   \\ \hline
108
109 \end{tabular}
110 \end{center}
111
112 \textbf{Compatibility}
113
114 Note that this cipher suites will not work with anything using Windows XP's
115 crypto stack (IE, Outlook), Java 6, Java 7 and Android 2.3. Java 7 could be
116 made compatible by installing the "Java Cryptography Extension (JCE) Unlimited
117 Strength Jurisdiction Policy Files" (JCE). We could not verify yet if
118 installing JCE also fixes the Java 7 DH-parameter length limitation (1024 bit). 
119
120
121
122 \subsection{Chosing your own cipher suites}
123 \label{section:ChosingYourOwnCipherSuites}
124 \todo{ Adi... }
125
126 %%% NOTE: we do not need to list this all here, can move to an appendix
127 %At the time of this writing, SSL is defined in RFCs:   
128 %
129 %\begin{itemize}
130 %\item RFC2246 - TLS1.0         
131 %\item RFC3268 - AES            
132 %\item RFC4132 - Camelia                
133 %\item RFC4162 - SEED           
134 %\item RFC4279 - PSK            
135 %\item RFC4346 - TLS 1.1                
136 %\item RFC4492 - ECC            
137 %\item RFC4785 - PSK\_NULL              
138 %\item RFC5246 - TLS 1.2                
139 %\item RFC5288 - AES\_GCM               
140 %\item RFC5289 - AES\_GCM\_SHA2\_ECC            
141 %\item RFC5430 - Suite B                
142 %\item RFC5487 - GCM\_PSK               
143 %\item RFC5489 - ECDHE\_PSK             
144 %\item RFC5932 - Camelia                
145 %\item RFC6101 - SSL 3.0                
146 %\item RFC6209 - ARIA           
147 %\item RFC6367 - Camelia                
148 %\item RFC6655 - AES\_CCM               
149 %\item RFC7027 - Brainpool Curves               
150 %\end{itemize}
151
152 \subsubsection{Overview of SSL Server settings}
153
154
155 Most Server software (Webservers, Mail servers, etc.) can be configured to prefer certain cipher suites over others. 
156 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.
157
158 Following Ivan Ristic's adivce we arrived at a categorisation of cipher suites.
159
160 \begin{center}
161 \begin{tabular}{| l | l | l | l | l|}
162 \hline
163 & Version   & Key\_Exchange  & Cipher    & MAC       \\ \hline
164 \cellcolor{green}prefer  & TLS 1.2   & DHE\_DSS   & AES\_256\_GCM   & SHA384        \\ \hline
165     &   & DHE\_RSA   & AES\_256\_CCM   & SHA256        \\ \hline
166     &   & ECDHE\_ECDSA   & AES\_256\_CBC   &       \\ \hline
167     &   & ECDHE\_RSA &   &       \\ \hline
168     &   &   &   &       \\ \hline
169 \cellcolor{orange}consider    & TLS 1.1   & DH\_DSS    & AES\_128\_GCM   & SHA       \\ \hline
170     & TLS 1.0   & DH\_RSA    & AES\_128\_CCM   &       \\ \hline
171     &   & ECDH\_ECDSA    & AES\_128\_CBC   &       \\ \hline
172     &   & ECDH\_RSA  & CAMELLIA\_256\_CBC  &       \\ \hline
173     &   & RSA   & CAMELLIA\_128\_CBC  &       \\ \hline
174     &   &   &   &       \\ \hline
175 \cellcolor{red}avoid   
176 & SSL 3.0   & NULL  & NULL  & NULL      \\ \hline
177     &   & DH\_anon   & RC4\_128   & MD5       \\ \hline
178     &   & ECDH\_anon & 3DES\_EDE\_CBC  &       \\ \hline
179     &   &   & DES\_CBC   &       \\ \hline
180     &   &   &   &       \\ \hline
181 \cellcolor{blue}{\color{white}special }
182 &   & PSK   & CAMELLIA\_256\_GCM  &       \\ \hline
183     &   & DHE\_PSK   & CAMELLIA\_128\_GCM  &       \\ \hline
184     &   & RSA\_PSK   & ARIA\_256\_GCM  &       \\ \hline
185     &   & ECDHE\_PSK & ARIA\_256\_CBC  &       \\ \hline
186     &   &   & ARIA\_128\_GCM  &       \\ \hline
187     &   &   & ARIA\_128\_CBC  &       \\ \hline
188     &   &   & SEED  &       \\ \hline
189 \end{tabular}
190 \end{center}
191
192 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.
193
194 %% NOTE: s/forward secrecy/perfect forward secrecy???
195
196 Note that the entries marked as ``special'' are cipher suites which are not common to all clients (webbrowsers etc).
197
198
199 \subsubsection{Tested clients}
200  
201 Next we tested the cipher suites above on the following clients:
202
203 %% NOTE: we need to test with more systems!!
204 \begin{itemize}
205 \item Chrome 30.0.1599.101 Mac OS X 10.9
206 \item Safari 7.0 Mac OS X 10.9
207 \item Firefox 25.0 Mac OS X 10.9
208 \item Internet Explorer 10 Windows 7
209 \item Apple iOS 7.0.3
210 \end{itemize}
211
212
213 The result of testing the cipher suites with these clients gives us a preference order as shown in table \ref{table:prefOrderCipherSuites}. 
214 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.
215
216 \begin{center}
217 \begin{table}[h]
218 \small
219     \begin{tabular}{|l|l|l|l|l|}
220     \hline
221     Pref & Cipher Suite                                   & ID         & Browser                     \\ \hline
222     1    & TLS\_DHE\_RSA\_WITH\_AES\_256\_GCM\_SHA384     &     0x009f & OpenSSL command line client \\ \hline
223     2    & TLS\_ECDHE\_ECDSA\_WITH\_AES\_256\_CBC\_SHA384 &     0xC024 & Safari                      \\ \hline
224     3    & TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA384   &     0xC028 & Safari                      \\ \hline
225     4    & TLS\_DHE\_RSA\_WITH\_AES\_256\_CBC\_SHA256     &     0x006B & Safari, Chrome              \\ \hline
226     5    & TLS\_ECDHE\_ECDSA\_WITH\_AES\_256\_CBC\_SHA    &     0xC00A & Safari, Chrome, Firefox, IE \\ \hline
227     6    & TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA      &     0xC014 & Safari, Chrome, Firefox, IE \\ \hline
228     7    & TLS\_DHE\_RSA\_WITH\_AES\_256\_CBC\_SHA        &     0x0039 & Safari, Chrome, Firefox     \\ \hline
229     8    & TLS\_DHE\_DSS\_WITH\_AES\_256\_CBC\_SHA        &     0x0038 & Firefox, IE                 \\ \hline
230     9    & TLS\_DHE\_RSA\_WITH\_CAMELLIA\_256\_CBC\_SHA   &     0x0088 & Firefox                     \\ \hline
231     10   & TLS\_DHE\_DSS\_WITH\_CAMELLIA\_256\_CBC\_SHA   &     0x0087 & Firefox                     \\ \hline
232     \end{tabular}
233 \caption{Preference order of cipher suites}
234 \label{table:prefOrderCipherSuites}
235 \end{table}
236 \end{center}
237
238
239 Table \ref{table:prefOrderOpenSSLNames} shows the same data again with specifying the corresponding OpenSSL name.
240
241 \begin{center}
242 \begin{table}[h]
243 \small
244     \begin{tabular}{|l|l|l|}
245     \hline
246     Cipher Suite                                   & ID         & OpenSSL Name                  \\ \hline
247     TLS\_DHE\_RSA\_WITH\_AES\_256\_GCM\_SHA384     &     0x009f &         DHE-RSA-AES256-GCM-SHA384 \\ \hline
248     TLS\_ECDHE\_ECDSA\_WITH\_AES\_256\_CBC\_SHA384 &     0xC024 &     ECDHE-ECDSA-AES256-SHA384 \\ \hline
249     TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA384   &     0xC028 &     ECDHE-RSA-AES256-SHA384   \\ \hline
250     TLS\_DHE\_RSA\_WITH\_AES\_256\_CBC\_SHA256     &     0x006B &     DHE-RSA-AES256-SHA256     \\ \hline
251     TLS\_ECDHE\_ECDSA\_WITH\_AES\_256\_CBC\_SHA    &     0xC00A &     ECDHE-ECDSA-AES256-SHA    \\ \hline
252     TLS\_ECDHE\_RSA\_WITH\_AES\_256\_CBC\_SHA      &     0xC014 &     ECDHE-RSA-AES256-SHA      \\ \hline
253     TLS\_DHE\_RSA\_WITH\_AES\_256\_CBC\_SHA        &     0x0039 &     DHE-RSA-AES256-SHA        \\ \hline
254     TLS\_DHE\_DSS\_WITH\_AES\_256\_CBC\_SHA        &     0x0038 &     DHE-DSS-AES256-SHA        \\ \hline
255     TLS\_DHE\_RSA\_WITH\_CAMELLIA\_256\_CBC\_SHA   &     0x0088 &     DHE-RSA-CAMELLIA256-SHA   \\ \hline
256     TLS\_DHE\_DSS\_WITH\_CAMELLIA\_256\_CBC\_SHA   &     0x0087 &     DHE-DSS-CAMELLIA256-SHA   \\ \hline
257     \end{tabular}
258 \caption{Preference order of cipher suites, with OpenSSL names}
259 \label{table:prefOrderOpenSSLNames}
260 \end{table}
261 \end{center}
262
263 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.
264 If unsure, remove the cipher suites starting with ECDHE in the table above.
265
266
267 Based on this ordering, we can now define the corresponding settings for servers. We will start with the most common web servers.
268