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