Merge pull request #124 from ivuk/fix-typos
[ach-master.git] / src / theory / cipher_suites / recommended.tex
1 %%\subsection{Recommended cipher suites}
2
3 In principle system administrators who want to improve their communication security
4 have to make a difficult decision between effectively locking out some users and 
5 keeping high cipher suite security while supporting as many users as possible.
6 The website \url{https://www.ssllabs.com/} gives administrators and security engineers
7 a tool to test their setup and compare compatibility with clients. The authors made 
8 use of ssllabs.com to arrive at a set of cipher suites which we will recommend 
9 throughout this document.
10
11 %\textbf{Caution: these settings can only represent a subjective
12 %choice of the authors at the time of writing. It might be a wise choice to
13 %select your own and review 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, our recommendation is to use 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 without restrictions.
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 MACs (SHA-2) or
32   \item GCM as Authenticated Encryption scheme
33 \end{itemize*}
34
35 This results in the OpenSSL string:
36 \ttbox{EDH+aRSA+AES256:EECDH+aRSA+AES256:!SSLv3'}
37
38 %$\implies$ resolves to 
39 %
40 %\begin{verbatim}
41 %openssl ciphers -V $string
42 %\end{verbatim}
43
44
45
46 %\todo{make a column for cipher chaining mode} --> not really important, is it?
47 \ctable[caption={Configuration A ciphers},label=tab:conf-a]{lllllll}{}{%
48 \FL \textbf{ID}   & \textbf{OpenSSL Name}       & \textbf{Version} & \textbf{KeyEx} & \textbf{Auth} & \textbf{Cipher} & \textbf{MAC}
49 \ML \texttt{0x009F} & DHE-RSA-AES256-GCM-SHA384   & TLSv1.2          & DH             &  RSA          & AESGCM(256)     & AEAD
50 \NN \texttt{0x006B} & DHE-RSA-AES256-SHA256       & TLSv1.2          & DH             &  RSA          & AES(256) (CBC)  & SHA256
51 \NN \texttt{0xC030} & ECDHE-RSA-AES256-GCM-SHA384 & TLSv1.2          & ECDH           &  RSA          & AESGCM(256)     & AEAD
52 \NN \texttt{0xC028} & ECDHE-RSA-AES256-SHA384     & TLSv1.2          & ECDH           &  RSA          & AES(256) (CBC)  & SHA384
53 \LL}
54
55 \paragraph*{Compatibility:}
56
57 At the time of this writing only Win 7 and Win 8.1 crypto stack,
58 OpenSSL $\ge$ 1.0.1e, Safari 6 / iOS 6.0.1 and Safar 7 / OS X 10.9
59 are covered by that cipher string.
60
61 % XXX author: (Adi) this depends on the chosing your own cipher chapter XXX
62 %In case you need to support other/different clients, see information
63 %about choosing your own cipher string in section
64 %\ref{section:ChoosingYourOwnCipherSuites}.
65
66 \subsubsection{Configuration B: Weaker ciphers but better compatibility}
67
68 In this section we propose a slightly weaker set of cipher suites.  For
69 example, there are known weaknesses for the SHA-1 hash function that is
70 included in this set.  The advantage of this set of cipher suites is not only
71 better compatibility with a broad range of clients, but also less computational
72 workload on the provisioning hardware.
73
74
75 \textbf{All examples in this publication use Configuration B}.\\
76
77 We arrived at this set of cipher suites by selecting:
78
79 \begin{itemize*}
80   \item TLS 1.2, TLS 1.1, TLS 1.0
81   \item allowing SHA-1 (see the comments on SHA-1 in section \ref{section:SHA})
82 \end{itemize*}
83
84 This results in the OpenSSL string:
85 %
86 %'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'
87 \ttbox{\cipherStringB}
88
89 \todo{make a column for cipher chaining mode}
90 \ctable[pos=ht,caption={Configuration B ciphers},label=tab:conf-b]{lllllll}{}{%
91 \FL \textbf{ID}   & \textbf{OpenSSL Name}       & \textbf{Version} & \textbf{KeyEx} & \textbf{Auth} & \textbf{Cipher} & \textbf{MAC}
92 \ML \texttt{0x009F} & DHE-RSA-AES256-GCM-SHA384   & TLSv1.2          & DH             & RSA           & AESGCM(256)     & AEAD
93 \NN \texttt{0x006B} & DHE-RSA-AES256-SHA256       & TLSv1.2          & DH             & RSA           & AES(256)        & SHA256
94 \NN \texttt{0xC030} & ECDHE-RSA-AES256-GCM-SHA384 & TLSv1.2          & ECDH           & RSA           & AESGCM(256)     & AEAD
95 \NN \texttt{0xC028} & ECDHE-RSA-AES256-SHA384     & TLSv1.2          & ECDH           & RSA           & AES(256)        & SHA384
96 \NN \texttt{0x009E} & DHE-RSA-AES128-GCM-SHA256   & TLSv1.2          & DH             & RSA           & AESGCM(128)     & AEAD
97 \NN \texttt{0x0067} & DHE-RSA-AES128-SHA256       & TLSv1.2          & DH             & RSA           & AES(128)        & SHA256
98 \NN \texttt{0xC02F} & ECDHE-RSA-AES128-GCM-SHA256 & TLSv1.2          & ECDH           & RSA           & AESGCM(128)     & AEAD
99 \NN \texttt{0xC027} & ECDHE-RSA-AES128-SHA256     & TLSv1.2          & ECDH           & RSA           & AES(128)        & SHA256
100 \NN \texttt{0x0088} & DHE-RSA-CAMELLIA256-SHA     & SSLv3            & DH             & RSA           & Camellia(256)   & SHA1
101 \NN \texttt{0x0039} & DHE-RSA-AES256-SHA          & SSLv3            & DH             & RSA           & AES(256)        & SHA1
102 \NN \texttt{0xC014} & ECDHE-RSA-AES256-SHA        & SSLv3            & ECDH           & RSA           & AES(256)        & SHA1
103 \NN \texttt{0x0045} & DHE-RSA-CAMELLIA128-SHA     & SSLv3            & DH             & RSA           & Camellia(128)   & SHA1
104 \NN \texttt{0x0033} & DHE-RSA-AES128-SHA          & SSLv3            & DH             & RSA           & AES(128)        & SHA1
105 \NN \texttt{0xC013} & ECDHE-RSA-AES128-SHA        & SSLv3            & ECDH           & RSA           & AES(128)        & SHA1
106 \NN \texttt{0x0084} & CAMELLIA256-SHA             & SSLv3            & RSA            & RSA           & Camellia(256)   & SHA1
107 \NN \texttt{0x0035} & AES256-SHA                  & SSLv3            & RSA            & RSA           & AES(256)        & SHA1
108 \NN \texttt{0x0041} & CAMELLIA128-SHA             & SSLv3            & RSA            & RSA           & Camellia(128)   & SHA1
109 \NN \texttt{0x002F} & AES128-SHA                  & SSLv3            & RSA            & RSA           & AES(128)        & SHA1
110 \LL}
111 \paragraph*{Compatibility: }
112
113 Note that these cipher suites will not work with Windows XP's crypto stack (e.g. IE, Outlook), 
114 %%Java 6, Java 7 and Android 2.3. Java 7 could be made compatible by installing the "Java 
115 %%Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files"
116 %%(JCE) \footnote{\url{http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html}}.
117 We could not verify yet if installing JCE also fixes the Java 7
118 DH-parameter length limitation (1024 bit). 
119 \todo{do that!}
120
121 \paragraph*{Explanation: }
122
123 For a detailed explanation of the cipher suites chosen, please see
124 \ref{section:ChoosingYourOwnCipherSuites}. In short, finding a single perfect cipher
125 string is practically impossible and there must be a tradeoff between compatibility and security. 
126 On the one hand there are mandatory and optional ciphers defined in a few RFCs, 
127 on the other hand there are clients and servers only implementing subsets of the 
128 specification.
129
130 Straight forward, the authors wanted strong ciphers, forward secrecy
131 \footnote{\url{http://nmav.gnutls.org/2011/12/price-to-pay-for-perfect-forward.html}}
132 and the best client compatibility possible while still ensuring a cipher string that can be
133 used on legacy installations (e.g. OpenSSL 0.9.8). 
134
135 Our recommended cipher strings are meant to be used via copy and paste and need to work
136 "out of the box".
137
138 \begin{itemize*}
139   \item TLSv1.2 is preferred over TLSv1.0 (while still providing a useable cipher
140       string for TLSv1.0 servers).
141   \item AES256 and CAMELLIA256 count as very strong ciphers at the moment.
142   \item AES128 and CAMELLIA128 count as strong ciphers at the moment
143   \item DHE or ECDHE for forward secrecy
144   \item RSA as this will fit most of today's setups
145   \item AES256-SHA as a last resort: with this cipher at the end, even server
146       systems with very old OpenSSL versions will work out of the box (version 0.9.8 for example does not
147       provide support for ECC and TLSv1.1 or above). \newline
148       Note however that this cipher suite will not provide forward secrecy. It
149       is meant to provide the same client coverage (eg. support Microsoft crypto
150       libraries) on legacy setups.
151 \end{itemize*}