lh | 9ed821d | 2023-04-07 01:36:19 -0700 | [diff] [blame^] | 1 | =pod |
| 2 | |
| 3 | =head1 NAME |
| 4 | |
| 5 | openssl-enc, |
| 6 | enc - symmetric cipher routines |
| 7 | |
| 8 | =head1 SYNOPSIS |
| 9 | |
| 10 | B<openssl enc -I<cipher>> |
| 11 | [B<-help>] |
| 12 | [B<-list>] |
| 13 | [B<-ciphers>] |
| 14 | [B<-in filename>] |
| 15 | [B<-out filename>] |
| 16 | [B<-pass arg>] |
| 17 | [B<-e>] |
| 18 | [B<-d>] |
| 19 | [B<-a>] |
| 20 | [B<-base64>] |
| 21 | [B<-A>] |
| 22 | [B<-k password>] |
| 23 | [B<-kfile filename>] |
| 24 | [B<-K key>] |
| 25 | [B<-iv IV>] |
| 26 | [B<-S salt>] |
| 27 | [B<-salt>] |
| 28 | [B<-nosalt>] |
| 29 | [B<-z>] |
| 30 | [B<-md digest>] |
| 31 | [B<-iter count>] |
| 32 | [B<-pbkdf2>] |
| 33 | [B<-p>] |
| 34 | [B<-P>] |
| 35 | [B<-bufsize number>] |
| 36 | [B<-nopad>] |
| 37 | [B<-debug>] |
| 38 | [B<-none>] |
| 39 | [B<-rand file...>] |
| 40 | [B<-writerand file>] |
| 41 | [B<-engine id>] |
| 42 | |
| 43 | B<openssl> I<[cipher]> [B<...>] |
| 44 | |
| 45 | =head1 DESCRIPTION |
| 46 | |
| 47 | The symmetric cipher commands allow data to be encrypted or decrypted |
| 48 | using various block and stream ciphers using keys based on passwords |
| 49 | or explicitly provided. Base64 encoding or decoding can also be performed |
| 50 | either by itself or in addition to the encryption or decryption. |
| 51 | |
| 52 | =head1 OPTIONS |
| 53 | |
| 54 | =over 4 |
| 55 | |
| 56 | =item B<-help> |
| 57 | |
| 58 | Print out a usage message. |
| 59 | |
| 60 | =item B<-list> |
| 61 | |
| 62 | List all supported ciphers. |
| 63 | |
| 64 | =item B<-ciphers> |
| 65 | |
| 66 | Alias of -list to display all supported ciphers. |
| 67 | |
| 68 | =item B<-in filename> |
| 69 | |
| 70 | The input filename, standard input by default. |
| 71 | |
| 72 | =item B<-out filename> |
| 73 | |
| 74 | The output filename, standard output by default. |
| 75 | |
| 76 | =item B<-pass arg> |
| 77 | |
| 78 | The password source. For more information about the format of B<arg> |
| 79 | see L<openssl(1)/Pass Phrase Options>. |
| 80 | |
| 81 | =item B<-e> |
| 82 | |
| 83 | Encrypt the input data: this is the default. |
| 84 | |
| 85 | =item B<-d> |
| 86 | |
| 87 | Decrypt the input data. |
| 88 | |
| 89 | =item B<-a> |
| 90 | |
| 91 | Base64 process the data. This means that if encryption is taking place |
| 92 | the data is base64 encoded after encryption. If decryption is set then |
| 93 | the input data is base64 decoded before being decrypted. |
| 94 | |
| 95 | =item B<-base64> |
| 96 | |
| 97 | Same as B<-a> |
| 98 | |
| 99 | =item B<-A> |
| 100 | |
| 101 | If the B<-a> option is set then base64 process the data on one line. |
| 102 | |
| 103 | =item B<-k password> |
| 104 | |
| 105 | The password to derive the key from. This is for compatibility with previous |
| 106 | versions of OpenSSL. Superseded by the B<-pass> argument. |
| 107 | |
| 108 | =item B<-kfile filename> |
| 109 | |
| 110 | Read the password to derive the key from the first line of B<filename>. |
| 111 | This is for compatibility with previous versions of OpenSSL. Superseded by |
| 112 | the B<-pass> argument. |
| 113 | |
| 114 | =item B<-md digest> |
| 115 | |
| 116 | Use the specified digest to create the key from the passphrase. |
| 117 | The default algorithm is sha-256. |
| 118 | |
| 119 | =item B<-iter count> |
| 120 | |
| 121 | Use a given number of iterations on the password in deriving the encryption key. |
| 122 | High values increase the time required to brute-force the resulting file. |
| 123 | This option enables the use of PBKDF2 algorithm to derive the key. |
| 124 | |
| 125 | =item B<-pbkdf2> |
| 126 | |
| 127 | Use PBKDF2 algorithm with default iteration count unless otherwise specified. |
| 128 | |
| 129 | =item B<-nosalt> |
| 130 | |
| 131 | Don't use a salt in the key derivation routines. This option B<SHOULD NOT> be |
| 132 | used except for test purposes or compatibility with ancient versions of |
| 133 | OpenSSL. |
| 134 | |
| 135 | =item B<-salt> |
| 136 | |
| 137 | Use salt (randomly generated or provide with B<-S> option) when |
| 138 | encrypting, this is the default. |
| 139 | |
| 140 | =item B<-S salt> |
| 141 | |
| 142 | The actual salt to use: this must be represented as a string of hex digits. |
| 143 | |
| 144 | =item B<-K key> |
| 145 | |
| 146 | The actual key to use: this must be represented as a string comprised only |
| 147 | of hex digits. If only the key is specified, the IV must additionally specified |
| 148 | using the B<-iv> option. When both a key and a password are specified, the |
| 149 | key given with the B<-K> option will be used and the IV generated from the |
| 150 | password will be taken. It does not make much sense to specify both key |
| 151 | and password. |
| 152 | |
| 153 | =item B<-iv IV> |
| 154 | |
| 155 | The actual IV to use: this must be represented as a string comprised only |
| 156 | of hex digits. When only the key is specified using the B<-K> option, the |
| 157 | IV must explicitly be defined. When a password is being specified using |
| 158 | one of the other options, the IV is generated from this password. |
| 159 | |
| 160 | =item B<-p> |
| 161 | |
| 162 | Print out the key and IV used. |
| 163 | |
| 164 | =item B<-P> |
| 165 | |
| 166 | Print out the key and IV used then immediately exit: don't do any encryption |
| 167 | or decryption. |
| 168 | |
| 169 | =item B<-bufsize number> |
| 170 | |
| 171 | Set the buffer size for I/O. |
| 172 | |
| 173 | =item B<-nopad> |
| 174 | |
| 175 | Disable standard block padding. |
| 176 | |
| 177 | =item B<-debug> |
| 178 | |
| 179 | Debug the BIOs used for I/O. |
| 180 | |
| 181 | =item B<-z> |
| 182 | |
| 183 | Compress or decompress encrypted data using zlib after encryption or before |
| 184 | decryption. This option exists only if OpenSSL was compiled with the zlib |
| 185 | or zlib-dynamic option. |
| 186 | |
| 187 | =item B<-none> |
| 188 | |
| 189 | Use NULL cipher (no encryption or decryption of input). |
| 190 | |
| 191 | =item B<-rand file...> |
| 192 | |
| 193 | A file or files containing random data used to seed the random number |
| 194 | generator. |
| 195 | Multiple files can be specified separated by an OS-dependent character. |
| 196 | The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for |
| 197 | all others. |
| 198 | |
| 199 | =item [B<-writerand file>] |
| 200 | |
| 201 | Writes random data to the specified I<file> upon exit. |
| 202 | This can be used with a subsequent B<-rand> flag. |
| 203 | |
| 204 | =back |
| 205 | |
| 206 | =head1 NOTES |
| 207 | |
| 208 | The program can be called either as B<openssl cipher> or |
| 209 | B<openssl enc -cipher>. The first form doesn't work with |
| 210 | engine-provided ciphers, because this form is processed before the |
| 211 | configuration file is read and any ENGINEs loaded. |
| 212 | Use the B<list> command to get a list of supported ciphers. |
| 213 | |
| 214 | Engines which provide entirely new encryption algorithms (such as the ccgost |
| 215 | engine which provides gost89 algorithm) should be configured in the |
| 216 | configuration file. Engines specified on the command line using -engine |
| 217 | options can only be used for hardware-assisted implementations of |
| 218 | ciphers which are supported by the OpenSSL core or another engine specified |
| 219 | in the configuration file. |
| 220 | |
| 221 | When the enc command lists supported ciphers, ciphers provided by engines, |
| 222 | specified in the configuration files are listed too. |
| 223 | |
| 224 | A password will be prompted for to derive the key and IV if necessary. |
| 225 | |
| 226 | The B<-salt> option should B<ALWAYS> be used if the key is being derived |
| 227 | from a password unless you want compatibility with previous versions of |
| 228 | OpenSSL. |
| 229 | |
| 230 | Without the B<-salt> option it is possible to perform efficient dictionary |
| 231 | attacks on the password and to attack stream cipher encrypted data. The reason |
| 232 | for this is that without the salt the same password always generates the same |
| 233 | encryption key. When the salt is being used the first eight bytes of the |
| 234 | encrypted data are reserved for the salt: it is generated at random when |
| 235 | encrypting a file and read from the encrypted file when it is decrypted. |
| 236 | |
| 237 | Some of the ciphers do not have large keys and others have security |
| 238 | implications if not used correctly. A beginner is advised to just use |
| 239 | a strong block cipher, such as AES, in CBC mode. |
| 240 | |
| 241 | All the block ciphers normally use PKCS#5 padding, also known as standard |
| 242 | block padding. This allows a rudimentary integrity or password check to |
| 243 | be performed. However, since the chance of random data passing the test |
| 244 | is better than 1 in 256 it isn't a very good test. |
| 245 | |
| 246 | If padding is disabled then the input data must be a multiple of the cipher |
| 247 | block length. |
| 248 | |
| 249 | All RC2 ciphers have the same key and effective key length. |
| 250 | |
| 251 | Blowfish and RC5 algorithms use a 128 bit key. |
| 252 | |
| 253 | =head1 SUPPORTED CIPHERS |
| 254 | |
| 255 | Note that some of these ciphers can be disabled at compile time |
| 256 | and some are available only if an appropriate engine is configured |
| 257 | in the configuration file. The output of the B<enc> command run with |
| 258 | the B<-ciphers> option (that is B<openssl enc -ciphers>) produces a |
| 259 | list of ciphers, supported by your version of OpenSSL, including |
| 260 | ones provided by configured engines. |
| 261 | |
| 262 | The B<enc> program does not support authenticated encryption modes |
| 263 | like CCM and GCM, and will not support such modes in the future. |
| 264 | The B<enc> interface by necessity must begin streaming output (e.g., |
| 265 | to standard output when B<-out> is not used) before the authentication |
| 266 | tag could be validated, leading to the usage of B<enc> in pipelines |
| 267 | that begin processing untrusted data and are not capable of rolling |
| 268 | back upon authentication failure. The AEAD modes currently in common |
| 269 | use also suffer from catastrophic failure of confidentiality and/or |
| 270 | integrity upon reuse of key/iv/nonce, and since B<enc> places the |
| 271 | entire burden of key/iv/nonce management upon the user, the risk of |
| 272 | exposing AEAD modes is too great to allow. These key/iv/nonce |
| 273 | management issues also affect other modes currently exposed in B<enc>, |
| 274 | but the failure modes are less extreme in these cases, and the |
| 275 | functionality cannot be removed with a stable release branch. |
| 276 | For bulk encryption of data, whether using authenticated encryption |
| 277 | modes or other modes, L<cms(1)> is recommended, as it provides a |
| 278 | standard data format and performs the needed key/iv/nonce management. |
| 279 | |
| 280 | |
| 281 | base64 Base 64 |
| 282 | |
| 283 | bf-cbc Blowfish in CBC mode |
| 284 | bf Alias for bf-cbc |
| 285 | blowfish Alias for bf-cbc |
| 286 | bf-cfb Blowfish in CFB mode |
| 287 | bf-ecb Blowfish in ECB mode |
| 288 | bf-ofb Blowfish in OFB mode |
| 289 | |
| 290 | cast-cbc CAST in CBC mode |
| 291 | cast Alias for cast-cbc |
| 292 | cast5-cbc CAST5 in CBC mode |
| 293 | cast5-cfb CAST5 in CFB mode |
| 294 | cast5-ecb CAST5 in ECB mode |
| 295 | cast5-ofb CAST5 in OFB mode |
| 296 | |
| 297 | chacha20 ChaCha20 algorithm |
| 298 | |
| 299 | des-cbc DES in CBC mode |
| 300 | des Alias for des-cbc |
| 301 | des-cfb DES in CFB mode |
| 302 | des-ofb DES in OFB mode |
| 303 | des-ecb DES in ECB mode |
| 304 | |
| 305 | des-ede-cbc Two key triple DES EDE in CBC mode |
| 306 | des-ede Two key triple DES EDE in ECB mode |
| 307 | des-ede-cfb Two key triple DES EDE in CFB mode |
| 308 | des-ede-ofb Two key triple DES EDE in OFB mode |
| 309 | |
| 310 | des-ede3-cbc Three key triple DES EDE in CBC mode |
| 311 | des-ede3 Three key triple DES EDE in ECB mode |
| 312 | des3 Alias for des-ede3-cbc |
| 313 | des-ede3-cfb Three key triple DES EDE CFB mode |
| 314 | des-ede3-ofb Three key triple DES EDE in OFB mode |
| 315 | |
| 316 | desx DESX algorithm. |
| 317 | |
| 318 | gost89 GOST 28147-89 in CFB mode (provided by ccgost engine) |
| 319 | gost89-cnt `GOST 28147-89 in CNT mode (provided by ccgost engine) |
| 320 | |
| 321 | idea-cbc IDEA algorithm in CBC mode |
| 322 | idea same as idea-cbc |
| 323 | idea-cfb IDEA in CFB mode |
| 324 | idea-ecb IDEA in ECB mode |
| 325 | idea-ofb IDEA in OFB mode |
| 326 | |
| 327 | rc2-cbc 128 bit RC2 in CBC mode |
| 328 | rc2 Alias for rc2-cbc |
| 329 | rc2-cfb 128 bit RC2 in CFB mode |
| 330 | rc2-ecb 128 bit RC2 in ECB mode |
| 331 | rc2-ofb 128 bit RC2 in OFB mode |
| 332 | rc2-64-cbc 64 bit RC2 in CBC mode |
| 333 | rc2-40-cbc 40 bit RC2 in CBC mode |
| 334 | |
| 335 | rc4 128 bit RC4 |
| 336 | rc4-64 64 bit RC4 |
| 337 | rc4-40 40 bit RC4 |
| 338 | |
| 339 | rc5-cbc RC5 cipher in CBC mode |
| 340 | rc5 Alias for rc5-cbc |
| 341 | rc5-cfb RC5 cipher in CFB mode |
| 342 | rc5-ecb RC5 cipher in ECB mode |
| 343 | rc5-ofb RC5 cipher in OFB mode |
| 344 | |
| 345 | seed-cbc SEED cipher in CBC mode |
| 346 | seed Alias for seed-cbc |
| 347 | seed-cfb SEED cipher in CFB mode |
| 348 | seed-ecb SEED cipher in ECB mode |
| 349 | seed-ofb SEED cipher in OFB mode |
| 350 | |
| 351 | sm4-cbc SM4 cipher in CBC mode |
| 352 | sm4 Alias for sm4-cbc |
| 353 | sm4-cfb SM4 cipher in CFB mode |
| 354 | sm4-ctr SM4 cipher in CTR mode |
| 355 | sm4-ecb SM4 cipher in ECB mode |
| 356 | sm4-ofb SM4 cipher in OFB mode |
| 357 | |
| 358 | aes-[128|192|256]-cbc 128/192/256 bit AES in CBC mode |
| 359 | aes[128|192|256] Alias for aes-[128|192|256]-cbc |
| 360 | aes-[128|192|256]-cfb 128/192/256 bit AES in 128 bit CFB mode |
| 361 | aes-[128|192|256]-cfb1 128/192/256 bit AES in 1 bit CFB mode |
| 362 | aes-[128|192|256]-cfb8 128/192/256 bit AES in 8 bit CFB mode |
| 363 | aes-[128|192|256]-ctr 128/192/256 bit AES in CTR mode |
| 364 | aes-[128|192|256]-ecb 128/192/256 bit AES in ECB mode |
| 365 | aes-[128|192|256]-ofb 128/192/256 bit AES in OFB mode |
| 366 | |
| 367 | aria-[128|192|256]-cbc 128/192/256 bit ARIA in CBC mode |
| 368 | aria[128|192|256] Alias for aria-[128|192|256]-cbc |
| 369 | aria-[128|192|256]-cfb 128/192/256 bit ARIA in 128 bit CFB mode |
| 370 | aria-[128|192|256]-cfb1 128/192/256 bit ARIA in 1 bit CFB mode |
| 371 | aria-[128|192|256]-cfb8 128/192/256 bit ARIA in 8 bit CFB mode |
| 372 | aria-[128|192|256]-ctr 128/192/256 bit ARIA in CTR mode |
| 373 | aria-[128|192|256]-ecb 128/192/256 bit ARIA in ECB mode |
| 374 | aria-[128|192|256]-ofb 128/192/256 bit ARIA in OFB mode |
| 375 | |
| 376 | camellia-[128|192|256]-cbc 128/192/256 bit Camellia in CBC mode |
| 377 | camellia[128|192|256] Alias for camellia-[128|192|256]-cbc |
| 378 | camellia-[128|192|256]-cfb 128/192/256 bit Camellia in 128 bit CFB mode |
| 379 | camellia-[128|192|256]-cfb1 128/192/256 bit Camellia in 1 bit CFB mode |
| 380 | camellia-[128|192|256]-cfb8 128/192/256 bit Camellia in 8 bit CFB mode |
| 381 | camellia-[128|192|256]-ctr 128/192/256 bit Camellia in CTR mode |
| 382 | camellia-[128|192|256]-ecb 128/192/256 bit Camellia in ECB mode |
| 383 | camellia-[128|192|256]-ofb 128/192/256 bit Camellia in OFB mode |
| 384 | |
| 385 | =head1 EXAMPLES |
| 386 | |
| 387 | Just base64 encode a binary file: |
| 388 | |
| 389 | openssl base64 -in file.bin -out file.b64 |
| 390 | |
| 391 | Decode the same file |
| 392 | |
| 393 | openssl base64 -d -in file.b64 -out file.bin |
| 394 | |
| 395 | Encrypt a file using AES-128 using a prompted password |
| 396 | and PBKDF2 key derivation: |
| 397 | |
| 398 | openssl enc -aes128 -pbkdf2 -in file.txt -out file.aes128 |
| 399 | |
| 400 | Decrypt a file using a supplied password: |
| 401 | |
| 402 | openssl enc -aes128 -pbkdf2 -d -in file.aes128 -out file.txt \ |
| 403 | -pass pass:<password> |
| 404 | |
| 405 | Encrypt a file then base64 encode it (so it can be sent via mail for example) |
| 406 | using AES-256 in CTR mode and PBKDF2 key derivation: |
| 407 | |
| 408 | openssl enc -aes-256-ctr -pbkdf2 -a -in file.txt -out file.aes256 |
| 409 | |
| 410 | Base64 decode a file then decrypt it using a password supplied in a file: |
| 411 | |
| 412 | openssl enc -aes-256-ctr -pbkdf2 -d -a -in file.aes256 -out file.txt \ |
| 413 | -pass file:<passfile> |
| 414 | |
| 415 | =head1 BUGS |
| 416 | |
| 417 | The B<-A> option when used with large files doesn't work properly. |
| 418 | |
| 419 | The B<enc> program only supports a fixed number of algorithms with |
| 420 | certain parameters. So if, for example, you want to use RC2 with a |
| 421 | 76 bit key or RC4 with an 84 bit key you can't use this program. |
| 422 | |
| 423 | =head1 HISTORY |
| 424 | |
| 425 | The default digest was changed from MD5 to SHA256 in OpenSSL 1.1.0. |
| 426 | |
| 427 | The B<-list> option was added in OpenSSL 1.1.1e. |
| 428 | |
| 429 | =head1 COPYRIGHT |
| 430 | |
| 431 | Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. |
| 432 | |
| 433 | Licensed under the OpenSSL license (the "License"). You may not use |
| 434 | this file except in compliance with the License. You can obtain a copy |
| 435 | in the file LICENSE in the source distribution or at |
| 436 | L<https://www.openssl.org/source/license.html>. |
| 437 | |
| 438 | =cut |