1=pod
2
3=head1 NAME
4
5Modes of DES - the variants of DES and other crypto algorithms of OpenSSL
6
7=head1 DESCRIPTION
8
9Several crypto algorithms for OpenSSL can be used in a number of modes.  Those
10are used for using block ciphers in a way similar to stream ciphers, among
11other things.
12
13=head1 OVERVIEW
14
15=head2 Electronic Codebook Mode (ECB)
16
17Normally, this is found as the function I<algorithm>_ecb_encrypt().
18
19=over 2
20
21=item *
22
2364 bits are enciphered at a time.
24
25=item *
26
27The order of the blocks can be rearranged without detection.
28
29=item *
30
31The same plaintext block always produces the same ciphertext block
32(for the same key) making it vulnerable to a 'dictionary attack'.
33
34=item *
35
36An error will only affect one ciphertext block.
37
38=back
39
40=head2 Cipher Block Chaining Mode (CBC)
41
42Normally, this is found as the function I<algorithm>_cbc_encrypt().
43Be aware that des_cbc_encrypt() is not really DES CBC (it does
44not update the IV); use des_ncbc_encrypt() instead.
45
46=over 2
47
48=item *
49
50a multiple of 64 bits are enciphered at a time.
51
52=item *
53
54The CBC mode produces the same ciphertext whenever the same
55plaintext is encrypted using the same key and starting variable.
56
57=item *
58
59The chaining operation makes the ciphertext blocks dependent on the
60current and all preceding plaintext blocks and therefore blocks can not
61be rearranged.
62
63=item *
64
65The use of different starting variables prevents the same plaintext
66enciphering to the same ciphertext.
67
68=item *
69
70An error will affect the current and the following ciphertext blocks.
71
72=back
73
74=head2 Cipher Feedback Mode (CFB)
75
76Normally, this is found as the function I<algorithm>_cfb_encrypt().
77
78=over 2
79
80=item *
81
82a number of bits (j) <= 64 are enciphered at a time.
83
84=item *
85
86The CFB mode produces the same ciphertext whenever the same
87plaintext is encrypted using the same key and starting variable.
88
89=item *
90
91The chaining operation makes the ciphertext variables dependent on the
92current and all preceding variables and therefore j-bit variables are
93chained together and can not be rearranged.
94
95=item *
96
97The use of different starting variables prevents the same plaintext
98enciphering to the same ciphertext.
99
100=item *
101
102The strength of the CFB mode depends on the size of k (maximal if
103j == k).  In my implementation this is always the case.
104
105=item *
106
107Selection of a small value for j will require more cycles through
108the encipherment algorithm per unit of plaintext and thus cause
109greater processing overheads.
110
111=item *
112
113Only multiples of j bits can be enciphered.
114
115=item *
116
117An error will affect the current and the following ciphertext variables.
118
119=back
120
121=head2 Output Feedback Mode (OFB)
122
123Normally, this is found as the function I<algorithm>_ofb_encrypt().
124
125=over 2
126
127
128=item *
129
130a number of bits (j) <= 64 are enciphered at a time.
131
132=item *
133
134The OFB mode produces the same ciphertext whenever the same
135plaintext enciphered using the same key and starting variable.  More
136over, in the OFB mode the same key stream is produced when the same
137key and start variable are used.  Consequently, for security reasons
138a specific start variable should be used only once for a given key.
139
140=item *
141
142The absence of chaining makes the OFB more vulnerable to specific attacks.
143
144=item *
145
146The use of different start variables values prevents the same
147plaintext enciphering to the same ciphertext, by producing different
148key streams.
149
150=item *
151
152Selection of a small value for j will require more cycles through
153the encipherment algorithm per unit of plaintext and thus cause
154greater processing overheads.
155
156=item *
157
158Only multiples of j bits can be enciphered.
159
160=item *
161
162OFB mode of operation does not extend ciphertext errors in the
163resultant plaintext output.  Every bit error in the ciphertext causes
164only one bit to be in error in the deciphered plaintext.
165
166=item *
167
168OFB mode is not self-synchronizing.  If the two operation of
169encipherment and decipherment get out of synchronism, the system needs
170to be re-initialized.
171
172=item *
173
174Each re-initialization should use a value of the start variable
175different from the start variable values used before with the same
176key.  The reason for this is that an identical bit stream would be
177produced each time from the same parameters.  This would be
178susceptible to a 'known plaintext' attack.
179
180=back
181
182=head2 Triple ECB Mode
183
184Normally, this is found as the function I<algorithm>_ecb3_encrypt().
185
186=over 2
187
188=item *
189
190Encrypt with key1, decrypt with key2 and encrypt with key3 again.
191
192=item *
193
194As for ECB encryption but increases the key length to 168 bits.
195There are theoretic attacks that can be used that make the effective
196key length 112 bits, but this attack also requires 2^56 blocks of
197memory, not very likely, even for the NSA.
198
199=item *
200
201If both keys are the same it is equivalent to encrypting once with
202just one key.
203
204=item *
205
206If the first and last key are the same, the key length is 112 bits.
207There are attacks that could reduce the effective key strength
208to only slightly more than 56 bits, but these require a lot of memory.
209
210=item *
211
212If all 3 keys are the same, this is effectively the same as normal
213ecb mode.
214
215=back
216
217=head2 Triple CBC Mode
218
219Normally, this is found as the function I<algorithm>_ede3_cbc_encrypt().
220
221=over 2
222
223
224=item *
225
226Encrypt with key1, decrypt with key2 and then encrypt with key3.
227
228=item *
229
230As for CBC encryption but increases the key length to 168 bits with
231the same restrictions as for triple ecb mode.
232
233=back
234
235=head1 NOTES
236
237This text was been written in large parts by Eric Young in his original
238documentation for SSLeay, the predecessor of OpenSSL.  In turn, he attributed
239it to:
240
241	AS 2805.5.2
242	Australian Standard
243	Electronic funds transfer - Requirements for interfaces,
244	Part 5.2: Modes of operation for an n-bit block cipher algorithm
245	Appendix A
246
247=head1 SEE ALSO
248
249L<blowfish(3)|blowfish(3)>, L<des(3)|des(3)>, L<idea(3)|idea(3)>,
250L<rc2(3)|rc2(3)>
251
252=cut
253
254