]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/geom/eli/geli.8
MFC 348206,348231,348454: GELI crypto deprecation warnings.
[FreeBSD/FreeBSD.git] / lib / geom / eli / geli.8
1 .\" Copyright (c) 2005-2011 Pawel Jakub Dawidek <pawel@dawidek.net>
2 .\" All rights reserved.
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\"    notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\"    notice, this list of conditions and the following disclaimer in the
11 .\"    documentation and/or other materials provided with the distribution.
12 .\"
13 .\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
14 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
17 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23 .\" SUCH DAMAGE.
24 .\"
25 .\" $FreeBSD$
26 .\"
27 .Dd May 23, 2019
28 .Dt GELI 8
29 .Os
30 .Sh NAME
31 .Nm geli
32 .Nd "control utility for the cryptographic GEOM class"
33 .Sh SYNOPSIS
34 To compile GEOM_ELI into your kernel, add the following lines to your kernel
35 configuration file:
36 .Bd -ragged -offset indent
37 .Cd "device crypto"
38 .Cd "options GEOM_ELI"
39 .Ed
40 .Pp
41 Alternatively, to load the GEOM_ELI module at boot time, add the following line
42 to your
43 .Xr loader.conf 5 :
44 .Bd -literal -offset indent
45 geom_eli_load="YES"
46 .Ed
47 .Pp
48 Usage of the
49 .Nm
50 utility:
51 .Pp
52 .Nm
53 .Cm init
54 .Op Fl bdgPTv
55 .Op Fl a Ar aalgo
56 .Op Fl B Ar backupfile
57 .Op Fl e Ar ealgo
58 .Op Fl i Ar iterations
59 .Op Fl J Ar newpassfile
60 .Op Fl K Ar newkeyfile
61 .Op Fl l Ar keylen
62 .Op Fl s Ar sectorsize
63 .Op Fl V Ar version
64 .Ar prov ...
65 .Nm
66 .Cm label - an alias for
67 .Cm init
68 .Nm
69 .Cm attach
70 .Op Fl Cdprv
71 .Op Fl n Ar keyno
72 .Op Fl j Ar passfile
73 .Op Fl k Ar keyfile
74 .Ar prov ...
75 .Nm
76 .Cm detach
77 .Op Fl fl
78 .Ar prov ...
79 .Nm
80 .Cm stop - an alias for
81 .Cm detach
82 .Nm
83 .Cm onetime
84 .Op Fl dT
85 .Op Fl a Ar aalgo
86 .Op Fl e Ar ealgo
87 .Op Fl l Ar keylen
88 .Op Fl s Ar sectorsize
89 .Ar prov
90 .Nm
91 .Cm configure
92 .Op Fl bBdDgGtT
93 .Ar prov ...
94 .Nm
95 .Cm setkey
96 .Op Fl pPv
97 .Op Fl i Ar iterations
98 .Op Fl j Ar passfile
99 .Op Fl J Ar newpassfile
100 .Op Fl k Ar keyfile
101 .Op Fl K Ar newkeyfile
102 .Op Fl n Ar keyno
103 .Ar prov
104 .Nm
105 .Cm delkey
106 .Op Fl afv
107 .Op Fl n Ar keyno
108 .Ar prov
109 .Nm
110 .Cm kill
111 .Op Fl av
112 .Op Ar prov ...
113 .Nm
114 .Cm backup
115 .Op Fl v
116 .Ar prov
117 .Ar file
118 .Nm
119 .Cm restore
120 .Op Fl fv
121 .Ar file
122 .Ar prov
123 .Nm
124 .Cm suspend
125 .Op Fl v
126 .Fl a | Ar prov ...
127 .Nm
128 .Cm resume
129 .Op Fl pv
130 .Op Fl j Ar passfile
131 .Op Fl k Ar keyfile
132 .Ar prov
133 .Nm
134 .Cm resize
135 .Op Fl v
136 .Fl s Ar oldsize
137 .Ar prov
138 .Nm
139 .Cm version
140 .Op Ar prov ...
141 .Nm
142 .Cm clear
143 .Op Fl v
144 .Ar prov ...
145 .Nm
146 .Cm dump
147 .Op Fl v
148 .Ar prov ...
149 .Nm
150 .Cm list
151 .Nm
152 .Cm status
153 .Nm
154 .Cm load
155 .Nm
156 .Cm unload
157 .Sh DESCRIPTION
158 The
159 .Nm
160 utility is used to configure encryption on GEOM providers.
161 .Pp
162 The following is a list of the most important features:
163 .Pp
164 .Bl -bullet -offset indent -compact
165 .It
166 Utilizes the
167 .Xr crypto 9
168 framework, so when there is crypto hardware available,
169 .Nm
170 will make use of it automatically.
171 .It
172 Supports many cryptographic algorithms (currently
173 .Nm AES-XTS ,
174 .Nm AES-CBC ,
175 .Nm Blowfish-CBC ,
176 .Nm Camellia-CBC
177 and
178 .Nm 3DES-CBC ) .
179 .It
180 Can optionally perform data authentication (integrity verification) utilizing
181 one of the following algorithms:
182 .Nm HMAC/MD5 ,
183 .Nm HMAC/SHA1 ,
184 .Nm HMAC/RIPEMD160 ,
185 .Nm HMAC/SHA256 ,
186 .Nm HMAC/SHA384
187 or
188 .Nm HMAC/SHA512 .
189 .It
190 Can create a User Key from up to two, piecewise components: a passphrase
191 entered via prompt or read from one or more passfiles; a keyfile read from
192 one or more files.
193 .It
194 Allows encryption of the root partition.
195 The user is asked for the passphrase before the root filesystem is mounted.
196 .It
197 Strengthens the passphrase component of the User Key with:
198 .Rs
199 .%A B. Kaliski
200 .%T "PKCS #5: Password-Based Cryptography Specification, Version 2.0."
201 .%R RFC
202 .%N 2898
203 .Re
204 .It
205 Allows the use of two independent User Keys (e.g., a
206 .Qq "user key"
207 and a
208 .Qq "company key" ) .
209 .It
210 It is fast -
211 .Nm
212 performs simple sector-to-sector encryption.
213 .It
214 Allows the encrypted Master Key to be backed up and restored,
215 so that if a user has to quickly destroy key material,
216 it is possible to get the data back by restoring keys from
217 backup.
218 .It
219 Providers can be configured to automatically detach on last close,
220 so users do not have to remember to detach providers after unmounting
221 the filesystems.
222 .It
223 Allows attaching a provider with a random, one-time Master Key,
224 which is useful for swap partitions and temporary filesystems.
225 .It
226 Allows verification of data integrity (data authentication).
227 .It
228 Allows suspending and resuming encrypted devices.
229 .El
230 .Pp
231 The first argument to
232 .Nm
233 indicates an action to be performed:
234 .Bl -tag -width ".Cm configure"
235 .It Cm init
236 Initialize providers which need to be encrypted.
237 If multiple providers are listed as arguments, they will all be initialized
238 with the same passphrase and/or User Key.
239 A unique salt will be randomly generated for each provider to ensure the
240 Master Key for each is unique.
241 Here you can set up the cryptographic algorithm to use, Data Key length,
242 etc.
243 The last sector of the providers is used to store metadata.
244 The
245 .Cm init
246 subcommand also automatically writes metadata backups to
247 .Pa /var/backups/<prov>.eli
248 file.
249 The metadata can be recovered with the
250 .Cm restore
251 subcommand described below.
252 .Pp
253 Additional options include:
254 .Bl -tag -width ".Fl J Ar newpassfile"
255 .It Fl a Ar aalgo
256 Enable data integrity verification (authentication) using the given algorithm.
257 This will reduce the size of storage available and also reduce speed.
258 For example, when using 4096 bytes sector and
259 .Nm HMAC/SHA256
260 algorithm, 89% of the original provider storage will be available for use.
261 Currently supported algorithms are:
262 .Nm HMAC/MD5 ,
263 .Nm HMAC/SHA1 ,
264 .Nm HMAC/RIPEMD160 ,
265 .Nm HMAC/SHA256 ,
266 .Nm HMAC/SHA384
267 and
268 .Nm HMAC/SHA512 .
269 If the option is not given, there will be no authentication, only encryption.
270 The recommended algorithm is
271 .Nm HMAC/SHA256 .
272 .It Fl b
273 Try to decrypt this partition during boot, before the root partition is mounted.
274 This makes it possible to use an encrypted root partition.
275 One will still need bootable unencrypted storage with a
276 .Pa /boot/
277 directory, which can be a CD-ROM disc or USB pen-drive, that can be removed
278 after boot.
279 .It Fl B Ar backupfile
280 File name to use for metadata backup instead of the default
281 .Pa /var/backups/<prov>.eli .
282 To inhibit backups, you can use
283 .Pa none
284 as the
285 .Ar backupfile .
286 If multiple providers were initialized in the one command, you can use
287 .Pa PROV
288 (all upper-case) in the file name, and it will be replaced with the provider
289 name.
290 If
291 .Pa PROV
292 is not found in the file name and multiple providers were initialized in the
293 one command,
294 .Pa -<prov>
295 will be appended to the end of the file name specified.
296 .It Fl d
297 When entering the passphrase to boot from this encrypted root filesystem, echo
298 .Ql *
299 characters.
300 This makes the length of the passphrase visible.
301 .It Fl e Ar ealgo
302 Encryption algorithm to use.
303 Currently supported algorithms are:
304 .Nm AES-XTS ,
305 .Nm AES-CBC ,
306 .Nm Blowfish-CBC ,
307 .Nm Camellia-CBC ,
308 .Nm 3DES-CBC ,
309 and
310 .Nm NULL .
311 The default and recommended algorithm is
312 .Nm AES-XTS .
313 .Nm NULL
314 is unencrypted.
315 .It Fl g
316 Enable booting from this encrypted root filesystem.
317 The boot loader prompts for the passphrase and loads
318 .Xr loader 8
319 from the encrypted partition.
320 .It Fl i Ar iterations
321 Number of iterations to use with PKCS#5v2 when processing User Key
322 passphrase component.
323 If this option is not specified,
324 .Nm
325 will find the number of iterations which is equal to 2 seconds of crypto work.
326 If 0 is given, PKCS#5v2 will not be used.
327 PKCS#5v2 processing is performed once, after all parts of the passphrase
328 component have been read.
329 .It Fl J Ar newpassfile
330 Specifies a file which contains the passphrase component of the User Key
331 (or part of it).
332 If
333 .Ar newpassfile
334 is given as -, standard input will be used.
335 Only the first line (excluding new-line character) is taken from the given file.
336 This argument can be specified multiple times, which has the effect of
337 reassembling a single passphrase split across multiple files.
338 Cannot be combined with the
339 .Fl P
340 option.
341 .It Fl K Ar newkeyfile
342 Specifies a file which contains the keyfile component of the User Key
343 (or part of it).
344 If
345 .Ar newkeyfile
346 is given as -, standard input will be used.
347 This argument can be specified multiple times, which has the effect of
348 reassembling a single keyfile split across multiple keyfile parts.
349 .It Fl l Ar keylen
350 Data Key length to use with the given cryptographic algorithm.
351 If the length is not specified, the selected algorithm uses its
352 .Em default
353 key length.
354 .Bl -ohang -offset indent
355 .It Nm AES-XTS
356 .Em 128 ,
357 256
358 .It Nm AES-CBC , Nm Camellia-CBC
359 .Em 128 ,
360 192,
361 256
362 .It Nm Blowfish-CBC
363 .Em 128
364 + n * 32, for n=[0..10]
365 .It Nm 3DES-CBC
366 .Em 192
367 .El
368 .It Fl P
369 Do not use a passphrase as a component of the User Key.
370 Cannot be combined with the
371 .Fl J
372 option.
373 .It Fl s Ar sectorsize
374 Change decrypted provider's sector size.
375 Increasing the sector size allows increased performance,
376 because encryption/decryption which requires an initialization vector
377 is done per sector; fewer sectors means less computational work.
378 .It Fl T
379 Don't pass through
380 .Dv BIO_DELETE
381 calls (i.e., TRIM/UNMAP).
382 This can prevent an attacker from knowing how much space you're actually
383 using and which sectors contain live data, but will also prevent the
384 backing store (SSD, etc) from reclaiming space you're not using, which
385 may degrade its performance and lifespan.
386 The underlying provider may or may not actually obliterate the deleted
387 sectors when TRIM is enabled, so it should not be considered to add any
388 security.
389 .It Fl V Ar version
390 Metadata version to use.
391 This option is helpful when creating a provider that may be used by older
392 .Nm FreeBSD/GELI
393 versions.
394 Consult the
395 .Sx HISTORY
396 section to find which metadata version is supported by which
397 .Fx
398 version.
399 Note that using an older version of metadata may limit the number of
400 features available.
401 .El
402 .It Cm attach
403 Attach the given providers.
404 The encrypted Master Keys are loaded from the metadata and decrypted
405 using the given passphrase/keyfile and new GEOM providers are created
406 using the specified provider names.
407 A
408 .Qq .eli
409 suffix is added to the user specified provider names.
410 Multiple providers can only be attached with a single
411 .Cm attach
412 command if they all have the same passphrase and keyfiles.
413 .Pp
414 Additional options include:
415 .Bl -tag -width ".Fl j Ar passfile"
416 .It Fl C
417 Do a dry-run decryption.
418 This is useful to verify passphrase and keyfile without decrypting the device.
419 .It Fl d
420 If specified, the decrypted providers are detached automatically on last close,
421 so the user does not have to remember to detach
422 providers after unmounting the filesystems.
423 This only works when providers were opened for writing, and will not work if
424 the filesystems on the providers were mounted read-only.
425 Probably a better choice is the
426 .Fl l
427 option for the
428 .Cm detach
429 subcommand.
430 .It Fl n Ar keyno
431 Specifies the index number of the Master Key copy to use (could be 0 or 1).
432 If the index number is not provided all keys will be tested.
433 .It Fl j Ar passfile
434 Specifies a file which contains the passphrase component of the User Key
435 (or part of it).
436 For more information see the description of the
437 .Fl J
438 option for the
439 .Cm init
440 subcommand.
441 The same passfiles are used for all listed providers.
442 .It Fl k Ar keyfile
443 Specifies a file which contains the keyfile component of the User Key
444 (or part of it).
445 For more information see the description of the
446 .Fl K
447 option for the
448 .Cm init
449 subcommand.
450 The same keyfiles are used for all listed providers.
451 .It Fl p
452 Do not use a passphrase as a component of the User Keys.
453 Cannot be combined with the
454 .Fl j
455 option.
456 .It Fl r
457 Attach read-only providers.
458 They are not opened for writing.
459 .El
460 .It Cm detach
461 Detach the given providers, which means remove the devfs entry
462 and clear the Master Key and Data Keys from memory.
463 .Pp
464 Additional options include:
465 .Bl -tag -width ".Fl f"
466 .It Fl f
467 Force detach - detach even if the provider is open.
468 .It Fl l
469 Mark provider to detach on last close, after the last filesystem has been
470 unmounted.
471 If this option is specified, the provider will not be detached
472 while it is open, but will be automatically detached when it is closed for the
473 last time even if it was only opened for reading.
474 .El
475 .It Cm onetime
476 Attach the given providers with a random, one-time (ephemeral) Master Key.
477 The command can be used to encrypt swap partitions or temporary filesystems.
478 .Pp
479 Additional options include:
480 .Bl -tag -width ".Fl a Ar sectorsize"
481 .It Fl a Ar aalgo
482 Enable data integrity verification (authentication).
483 For more information, see the description of the
484 .Cm init
485 subcommand.
486 .It Fl e Ar ealgo
487 Encryption algorithm to use.
488 For more information, see the description of the
489 .Cm init
490 subcommand.
491 .It Fl d
492 Detach on last close, after the last filesystem has been unmounted.
493 Note: this option is not usable for temporary filesystems as the provider is
494 detached after the filesystem has been created.
495 It still can, and should, be used for swap partitions.
496 For more information, see the description of the
497 .Cm attach
498 subcommand.
499 .It Fl l Ar keylen
500 Data Key length to use with the given cryptographic algorithm.
501 For more information, see the description of the
502 .Cm init
503 subcommand.
504 .It Fl s Ar sectorsize
505 Change decrypted provider's sector size.
506 For more information, see the description of the
507 .Cm init
508 subcommand.
509 .It Fl T
510 Disable TRIM/UNMAP passthru.
511 For more information, see the description of the
512 .Cm init
513 subcommand.
514 .El
515 .It Cm configure
516 Change configuration of the given providers.
517 .Pp
518 Additional options include:
519 .Bl -tag -width ".Fl b"
520 .It Fl b
521 Set the BOOT flag on the given providers.
522 For more information, see the description of the
523 .Cm init
524 subcommand.
525 .It Fl B
526 Remove the BOOT flag from the given providers.
527 .It Fl d
528 When entering the passphrase to boot from this encrypted root filesystem, echo
529 .Ql *
530 characters.
531 This makes the length of the passphrase visible.
532 .It Fl D
533 Disable echoing of any characters when a passphrase is entered to boot from this
534 encrypted root filesystem.
535 This hides the passphrase length.
536 .It Fl g
537 Enable booting from this encrypted root filesystem.
538 The boot loader prompts for the passphrase and loads
539 .Xr loader 8
540 from the encrypted partition.
541 .It Fl G
542 Deactivate booting from this encrypted root partition.
543 .It Fl t
544 Enable TRIM/UNMAP passthru.
545 For more information, see the description of the
546 .Cm init
547 subcommand.
548 .It Fl T
549 Disable TRIM/UNMAP passthru.
550 .El
551 .It Cm setkey
552 Install a copy of the Master Key into the selected slot, encrypted with
553 a new User Key.
554 If the selected slot is populated, replace the existing copy.
555 A provider has one Master Key, which can be stored in one or both slots,
556 each encrypted with an independent User Key.
557 With the
558 .Cm init
559 subcommand, only key number 0 is initialized.
560 The User Key can be changed at any time: for an attached provider,
561 for a detached provider, or on the backup file.
562 When a provider is attached, the user does not have to provide
563 an existing passphrase/keyfile.
564 .Pp
565 Additional options include:
566 .Bl -tag -width ".Fl J Ar newpassfile"
567 .It Fl i Ar iterations
568 Number of iterations to use with PKCS#5v2.
569 If 0 is given, PKCS#5v2 will not be used.
570 To be able to use this option with the
571 .Cm setkey
572 subcommand, only one key has to be defined and this key must be changed.
573 .It Fl j Ar passfile
574 Specifies a file which contains the passphrase component of a current User Key
575 (or part of it).
576 .It Fl J Ar newpassfile
577 Specifies a file which contains the passphrase component of the new User Key
578 (or part of it).
579 .It Fl k Ar keyfile
580 Specifies a file which contains the keyfile component of a current User Key
581 (or part of it).
582 .It Fl K Ar newkeyfile
583 Specifies a file which contains the keyfile component of the new User Key
584 (or part of it).
585 .It Fl n Ar keyno
586 Specifies the index number of the Master Key copy to change (could be 0 or 1).
587 If the provider is attached and no key number is given, the key
588 used for attaching the provider will be changed.
589 If the provider is detached (or we are operating on a backup file)
590 and no key number is given, the first Master Key copy to be successfully
591 decrypted with the provided User Key passphrase/keyfile will be changed.
592 .It Fl p
593 Do not use a passphrase as a component of the current User Key.
594 Cannot be combined with the
595 .Fl j
596 option.
597 .It Fl P
598 Do not use a passphrase as a component of the new User Key.
599 Cannot be combined with the
600 .Fl J
601 option.
602 .El
603 .It Cm delkey
604 Destroy (overwrite with random data) the selected Master Key copy.
605 If one is destroying keys for an attached provider, the provider
606 will not be detached even if all copies of the Master Key are destroyed.
607 It can even be rescued with the
608 .Cm setkey
609 subcommand because the Master Key is still in memory.
610 .Pp
611 Additional options include:
612 .Bl -tag -width ".Fl a Ar keyno"
613 .It Fl a
614 Destroy all copies of the Master Key (does not need
615 .Fl f
616 option).
617 .It Fl f
618 Force key destruction.
619 This option is needed to destroy the last copy of the Master Key.
620 .It Fl n Ar keyno
621 Specifies the index number of the Master Key copy.
622 If the provider is attached and no key number is given, the key
623 used for attaching the provider will be destroyed.
624 If provider is detached (or we are operating on a backup file) the key number
625 has to be given.
626 .El
627 .It Cm kill
628 This command should be used only in emergency situations.
629 It will destroy all copies of the Master Key on a given provider and will
630 detach it forcibly (if it is attached).
631 This is absolutely a one-way command - if you do not have a metadata
632 backup, your data is gone for good.
633 In case the provider was attached with the
634 .Fl r
635 flag, the keys will not be destroyed, only the provider will be detached.
636 .Pp
637 Additional options include:
638 .Bl -tag -width ".Fl a"
639 .It Fl a
640 If specified, all currently attached providers will be killed.
641 .El
642 .It Cm backup
643 Backup metadata from the given provider to the given file.
644 .It Cm restore
645 Restore metadata from the given file to the given provider.
646 .Pp
647 Additional options include:
648 .Bl -tag -width ".Fl f"
649 .It Fl f
650 Metadata contains the size of the provider to ensure that the correct
651 partition or slice is attached.
652 If an attempt is made to restore metadata to a provider that has a different
653 size,
654 .Nm
655 will refuse to restore the data unless the
656 .Fl f
657 switch is used.
658 If the partition or slice has been grown, the
659 .Cm resize
660 subcommand should be used rather than attempting to relocate the metadata
661 through
662 .Cm backup
663 and
664 .Cm restore .
665 .El
666 .It Cm suspend
667 Suspend device by waiting for all inflight requests to finish, clearing all
668 sensitive information such as the Master Key and Data Keys from kernel memory,
669 and blocking all further I/O requests until the
670 .Cm resume
671 subcommand is executed.
672 This functionality is useful for laptops.
673 Suspending a laptop should not leave an encrypted device attached.
674 The
675 .Cm suspend
676 subcommand can be used rather than closing all files and directories from
677 filesystems on the encrypted device, unmounting the filesystem, and
678 detaching the device.
679 Any access to the encrypted device will be blocked until the Master Key is
680 reloaded through the
681 .Cm resume
682 subcommand.
683 Thus there is no need to close nor unmount anything.
684 The
685 .Cm suspend
686 subcommand does not work with devices created with the
687 .Cm onetime
688 subcommand.
689 Please note that sensitive data might still be present in memory locations
690 such as the filesystem cache after suspending an encrypted device.
691 .Pp
692 Additional options include:
693 .Bl -tag -width ".Fl a"
694 .It Fl a
695 Suspend all
696 .Nm
697 devices.
698 .El
699 .It Cm resume
700 Resume previously suspended device.
701 The caller must ensure that executing this subcommand does not access the
702 suspended device, leading to a deadlock.
703 For example, suspending a device which contains the filesystem where the
704 .Nm
705 utility is stored is a bad idea.
706 .Pp
707 Additional options include:
708 .Bl -tag -width ".Fl j Ar passfile"
709 .It Fl j Ar passfile
710 Specifies a file which contains the passphrase component of the User Key,
711 or part of it.
712 For more information see the description of the
713 .Fl J
714 option for the
715 .Cm init
716 subcommand.
717 .It Fl k Ar keyfile
718 Specifies a file which contains the keyfile component of the User Key,
719 or part of it.
720 For more information see the description of the
721 .Fl K
722 option for the
723 .Cm init
724 subcommand.
725 .It Fl p
726 Do not use a passphrase as a component of the User Key.
727 Cannot be combined with the
728 .Fl j
729 option.
730 .El
731 .It Cm resize
732 Inform
733 .Nm
734 that the provider has been resized.
735 The old metadata block is relocated to the correct position at the end of the
736 provider and the provider size is updated.
737 .Pp
738 Additional options include:
739 .Bl -tag -width ".Fl s Ar oldsize"
740 .It Fl s Ar oldsize
741 The size of the provider before it was resized.
742 .El
743 .It Cm version
744 If no arguments are given, the
745 .Cm version
746 subcommand will print the version of
747 .Nm
748 userland utility as well as the version of the
749 .Nm ELI
750 GEOM class.
751 .Pp
752 If GEOM providers are specified, the
753 .Cm version
754 subcommand will print metadata version used by each of them.
755 .It Cm clear
756 Clear metadata from the given providers.
757 .Em WARNING :
758 This will erase with zeros the encrypted Master Key copies stored in the
759 metadata.
760 .It Cm dump
761 Dump metadata stored on the given providers.
762 .It Cm list
763 See
764 .Xr geom 8 .
765 .It Cm status
766 See
767 .Xr geom 8 .
768 .It Cm load
769 See
770 .Xr geom 8 .
771 .It Cm unload
772 See
773 .Xr geom 8 .
774 .El
775 .Pp
776 Additional options include:
777 .Bl -tag -width ".Fl v"
778 .It Fl v
779 Be more verbose.
780 .El
781 .Sh KEY SUMMARY
782 .Ss Master Key
783 Upon
784 .Cm init ,
785 the
786 .Nm
787 utility generates a random Master Key for the provider.
788 The Master Key never changes during the lifetime of the provider.
789 Each copy of the provider metadata, active or backed up to a file, can store
790 up to two, independently-encrypted copies of the Master Key.
791 .Ss User Key
792 Each stored copy of the Master Key is encrypted with a User Key, which
793 is generated by the
794 .Nm
795 utility from a passphrase and/or a keyfile.
796 The
797 .Nm
798 utility first reads all parts of the keyfile in the order specified on the
799 command line, then reads all parts of the stored passphrase in the order
800 specified on the command line.
801 If no passphrase parts are specified, the system prompts the user to enter
802 the passphrase.
803 The passphrase is optionally strengthened by PKCS#5v2.
804 The User Key is a digest computed over the concatenated keyfile and passphrase.
805 .Ss Data Key
806 During operation, one or more Data Keys are deterministically derived by
807 the kernel from the Master Key and cached in memory.
808 The number of Data Keys used by a given provider, and the way they are
809 derived, depend on the GELI version and whether the provider is configured to
810 use data authentication.
811 .Sh SYSCTL VARIABLES
812 The following
813 .Xr sysctl 8
814 variables can be used to control the behavior of the
815 .Nm ELI
816 GEOM class.
817 The default value is shown next to each variable.
818 Some variables can also be set in
819 .Pa /boot/loader.conf .
820 .Bl -tag -width indent
821 .It Va kern.geom.eli.version
822 Version number of the
823 .Nm ELI
824 GEOM class.
825 .It Va kern.geom.eli.debug : No 0
826 Debug level of the
827 .Nm ELI
828 GEOM class.
829 This can be set to a number between 0 and 3 inclusive.
830 If set to 0, minimal debug information is printed.
831 If set to 3, the
832 maximum amount of debug information is printed.
833 .It Va kern.geom.eli.tries : No 3
834 Number of times a user is asked for the passphrase.
835 This is only used for providers which are attached on boot,
836 before the root filesystem is mounted.
837 If set to 0, attaching providers on boot will be disabled.
838 This variable should be set in
839 .Pa /boot/loader.conf .
840 .It Va kern.geom.eli.overwrites : No 5
841 Specifies how many times the Master Key is overwritten
842 with random values when it is destroyed.
843 After this operation it is filled with zeros.
844 .It Va kern.geom.eli.visible_passphrase : No 0
845 If set to 1, the passphrase entered on boot will be visible.
846 This alternative should be used with caution as the entered
847 passphrase can be logged and exposed via
848 .Xr dmesg 8 .
849 This variable should be set in
850 .Pa /boot/loader.conf .
851 .It Va kern.geom.eli.threads : No 0
852 Specifies how many kernel threads should be used for doing software
853 cryptography.
854 Its purpose is to increase performance on SMP systems.
855 If set to 0, a CPU-pinned thread will be started for every active CPU.
856 .It Va kern.geom.eli.batch : No 0
857 When set to 1, can speed-up crypto operations by using batching.
858 Batching reduces the number of interrupts by responding to a group of
859 crypto requests with one interrupt.
860 The crypto card and the driver has to support this feature.
861 .It Va kern.geom.eli.key_cache_limit : No 8192
862 Specifies how many Data Keys to cache.
863 The default limit
864 (8192 keys) will allow caching of all keys for a 4TB provider with 512 byte
865 sectors and will take around 1MB of memory.
866 .It Va kern.geom.eli.key_cache_hits
867 Reports how many times we were looking up a Data Key and it was already in
868 cache.
869 This sysctl is not updated for providers that need fewer Data Keys than
870 the limit specified in
871 .Va kern.geom.eli.key_cache_limit .
872 .It Va kern.geom.eli.key_cache_misses
873 Reports how many times we were looking up a Data Key and it was not in cache.
874 This sysctl is not updated for providers that need fewer Data Keys than the limit
875 specified in
876 .Va kern.geom.eli.key_cache_limit .
877 .El
878 .Sh EXIT STATUS
879 Exit status is 0 on success, and 1 if the command fails.
880 .Sh DEPRECATION NOTICE
881 Support for the
882 .Nm Blowfish-CBC
883 and
884 .Nm 3DES-CBC
885 cryptographic algorithms and
886 .Nm HMAC/MD5
887 authentication algorithm will be removed in
888 .Fx 13.0 .
889 New volumes cannot be created using these algorithms.
890 Existing volumes should be migrated to a new volume that uses
891 non-deprecated algorithms.
892 .Sh EXAMPLES
893 Initialize a provider which is going to be encrypted with a
894 passphrase and random data from a file on the user's pen drive.
895 Use 4kB sector size.
896 Attach the provider, create a filesystem, and mount it.
897 Do the work.
898 Unmount the provider and detach it:
899 .Bd -literal -offset indent
900 # dd if=/dev/random of=/mnt/pendrive/da2.key bs=64 count=1
901 # geli init -s 4096 -K /mnt/pendrive/da2.key /dev/da2
902 Enter new passphrase:
903 Reenter new passphrase:
904 # geli attach -k /mnt/pendrive/da2.key /dev/da2
905 Enter passphrase:
906 # dd if=/dev/random of=/dev/da2.eli bs=1m
907 # newfs /dev/da2.eli
908 # mount /dev/da2.eli /mnt/secret
909 \&...
910 # umount /mnt/secret
911 # geli detach da2.eli
912 .Ed
913 .Pp
914 Create an encrypted provider, but use two User Keys:
915 one for your employee and one for you as the company's security officer
916 (so it is not a tragedy if the employee
917 .Qq accidentally
918 forgets his passphrase):
919 .Bd -literal -offset indent
920 # geli init /dev/da2
921 Enter new passphrase:   (enter security officer's passphrase)
922 Reenter new passphrase:
923 # geli setkey -n 1 /dev/da2
924 Enter passphrase:       (enter security officer's passphrase)
925 Enter new passphrase:   (let your employee enter his passphrase ...)
926 Reenter new passphrase: (... twice)
927 .Ed
928 .Pp
929 You are the security officer in your company.
930 Create an encrypted provider for use by the user, but remember that users
931 forget their passphrases, so backup the Master Key with your own random key:
932 .Bd -literal -offset indent
933 # dd if=/dev/random of=/mnt/pendrive/keys/`hostname` bs=64 count=1
934 # geli init -P -K /mnt/pendrive/keys/`hostname` /dev/ada0s1e
935 # geli backup /dev/ada0s1e /mnt/pendrive/backups/`hostname`
936 (use key number 0, so the encrypted Master Key will be re-encrypted by this)
937 # geli setkey -n 0 -k /mnt/pendrive/keys/`hostname` /dev/ada0s1e
938 (allow the user to enter his passphrase)
939 Enter new passphrase:
940 Reenter new passphrase:
941 .Ed
942 .Pp
943 Encrypted swap partition setup:
944 .Bd -literal -offset indent
945 # dd if=/dev/random of=/dev/ada0s1b bs=1m
946 # geli onetime -d -e 3des ada0s1b
947 # swapon /dev/ada0s1b.eli
948 .Ed
949 .Pp
950 The example below shows how to configure two providers which will be attached
951 on boot, before the root filesystem is mounted.
952 One of them is using passphrase and three keyfile parts and the other is
953 using only a keyfile in one part:
954 .Bd -literal -offset indent
955 # dd if=/dev/random of=/dev/da0 bs=1m
956 # dd if=/dev/random of=/boot/keys/da0.key0 bs=32k count=1
957 # dd if=/dev/random of=/boot/keys/da0.key1 bs=32k count=1
958 # dd if=/dev/random of=/boot/keys/da0.key2 bs=32k count=1
959 # geli init -b -K /boot/keys/da0.key0 -K /boot/keys/da0.key1 -K /boot/keys/da0.key2 da0
960 Enter new passphrase:
961 Reenter new passphrase:
962 # dd if=/dev/random of=/dev/da1s3a bs=1m
963 # dd if=/dev/random of=/boot/keys/da1s3a.key bs=128k count=1
964 # geli init -b -P -K /boot/keys/da1s3a.key da1s3a
965 .Ed
966 .Pp
967 The providers are initialized, now we have to add these lines to
968 .Pa /boot/loader.conf :
969 .Bd -literal -offset indent
970 geli_da0_keyfile0_load="YES"
971 geli_da0_keyfile0_type="da0:geli_keyfile0"
972 geli_da0_keyfile0_name="/boot/keys/da0.key0"
973 geli_da0_keyfile1_load="YES"
974 geli_da0_keyfile1_type="da0:geli_keyfile1"
975 geli_da0_keyfile1_name="/boot/keys/da0.key1"
976 geli_da0_keyfile2_load="YES"
977 geli_da0_keyfile2_type="da0:geli_keyfile2"
978 geli_da0_keyfile2_name="/boot/keys/da0.key2"
979
980 geli_da1s3a_keyfile0_load="YES"
981 geli_da1s3a_keyfile0_type="da1s3a:geli_keyfile0"
982 geli_da1s3a_keyfile0_name="/boot/keys/da1s3a.key"
983 .Ed
984 .Pp
985 If there is only one keyfile, the index might be omitted:
986 .Bd -literal -offset indent
987 geli_da1s3a_keyfile_load="YES"
988 geli_da1s3a_keyfile_type="da1s3a:geli_keyfile"
989 geli_da1s3a_keyfile_name="/boot/keys/da1s3a.key"
990 .Ed
991 .Pp
992 Not only configure encryption, but also data integrity verification using
993 .Nm HMAC/SHA256 .
994 .Bd -literal -offset indent
995 # geli init -a hmac/sha256 -s 4096 /dev/da0
996 Enter new passphrase:
997 Reenter new passphrase:
998 # geli attach /dev/da0
999 Enter passphrase:
1000 # dd if=/dev/random of=/dev/da0.eli bs=1m
1001 # newfs /dev/da0.eli
1002 # mount /dev/da0.eli /mnt/secret
1003 .Ed
1004 .Pp
1005 .Cm geli
1006 writes the metadata backup by default to the
1007 .Pa /var/backups/<prov>.eli
1008 file.
1009 If the metadata is lost in any way (e.g., by accidental overwrite), it can be restored.
1010 Consider the following situation:
1011 .Bd -literal -offset indent
1012 # geli init /dev/da0
1013 Enter new passphrase:
1014 Reenter new passphrase:
1015
1016 Metadata backup can be found in /var/backups/da0.eli and
1017 can be restored with the following command:
1018
1019         # geli restore /var/backups/da0.eli /dev/da0
1020
1021 # geli clear /dev/da0
1022 # geli attach /dev/da0
1023 geli: Cannot read metadata from /dev/da0: Invalid argument.
1024 # geli restore /var/backups/da0.eli /dev/da0
1025 # geli attach /dev/da0
1026 Enter passphrase:
1027 .Ed
1028 .Pp
1029 If an encrypted filesystem is extended, it is necessary to relocate and
1030 update the metadata:
1031 .Bd -literal -offset indent
1032 # gpart create -s GPT ada0
1033 # gpart add -s 1g -t freebsd-ufs -i 1 ada0
1034 # geli init -K keyfile -P ada0p1
1035 # gpart resize -s 2g -i 1 ada0
1036 # geli resize -s 1g ada0p1
1037 # geli attach -k keyfile -p ada0p1
1038 .Ed
1039 .Pp
1040 Initialize provider with the passphrase split into two files.
1041 The provider can be attached using those two files or by entering
1042 .Dq foobar
1043 as the passphrase at the
1044 .Nm
1045 prompt:
1046 .Bd -literal -offset indent
1047 # echo foo > da0.pass0
1048 # echo bar > da0.pass1
1049 # geli init -J da0.pass0 -J da0.pass1 da0
1050 # geli attach -j da0.pass0 -j da0.pass1 da0
1051 # geli detach da0
1052 # geli attach da0
1053 Enter passphrase: foobar
1054 .Ed
1055 .Pp
1056 Suspend all
1057 .Nm
1058 devices on a laptop, suspend the laptop, then resume devices one by one after
1059 resuming the laptop:
1060 .Bd -literal -offset indent
1061 # geli suspend -a
1062 # zzz
1063 <resume your laptop>
1064 # geli resume -p -k keyfile gpt/secret
1065 # geli resume gpt/private
1066 Enter passphrase:
1067 .Ed
1068 .Sh ENCRYPTION MODES
1069 .Nm
1070 supports two encryption modes:
1071 .Nm XTS ,
1072 which was standardized as
1073 .Nm IEEE P1619
1074 and
1075 .Nm CBC
1076 with unpredictable IV.
1077 The
1078 .Nm CBC
1079 mode used by
1080 .Nm
1081 is very similar to the mode
1082 .Nm ESSIV .
1083 .Sh DATA AUTHENTICATION
1084 .Nm
1085 can verify data integrity when an authentication algorithm is specified.
1086 When data corruption/modification is detected,
1087 .Nm
1088 will not return any data, but instead will return an error
1089 .Pq Er EINVAL .
1090 The offset and size of the corrupted data will be printed on the console.
1091 It is important to know against which attacks
1092 .Nm
1093 provides protection for your data.
1094 If data is modified in-place or copied from one place on the disk
1095 to another even without modification,
1096 .Nm
1097 should be able to detect such a change.
1098 If an attacker can remember the encrypted data, he can overwrite any future
1099 changes with the data he owns without it being noticed.
1100 In other words
1101 .Nm
1102 will not protect your data against replay attacks.
1103 .Pp
1104 It is recommended to write to the whole provider before first use,
1105 in order to make sure that all sectors and their corresponding
1106 checksums are properly initialized into a consistent state.
1107 One can safely ignore data authentication errors that occur immediately
1108 after the first time a provider is attached and before it is
1109 initialized in this way.
1110 .Sh SEE ALSO
1111 .Xr crypto 4 ,
1112 .Xr gbde 4 ,
1113 .Xr geom 4 ,
1114 .Xr loader.conf 5 ,
1115 .Xr gbde 8 ,
1116 .Xr geom 8 ,
1117 .Xr crypto 9
1118 .Sh HISTORY
1119 The
1120 .Nm
1121 utility appeared in
1122 .Fx 6.0 .
1123 Support for the
1124 .Nm Camellia
1125 block cipher was implemented by Yoshisato Yanagisawa in
1126 .Fx 7.0 .
1127 .Pp
1128 Highest
1129 .Nm GELI
1130 metadata version supported by the given FreeBSD version:
1131 .Bl -column -offset indent ".Sy FreeBSD" ".Sy version"
1132 .It Sy FreeBSD Ta Sy GELI
1133 .It Sy version Ta Sy version
1134 .Pp
1135 .It Li 6.0 Ta 0
1136 .It Li 6.1 Ta 0
1137 .It Li 6.2 Ta 3
1138 .It Li 6.3 Ta 3
1139 .It Li 6.4 Ta 3
1140 .Pp
1141 .It Li 7.0 Ta 3
1142 .It Li 7.1 Ta 3
1143 .It Li 7.2 Ta 3
1144 .It Li 7.3 Ta 3
1145 .It Li 7.4 Ta 3
1146 .Pp
1147 .It Li 8.0 Ta 3
1148 .It Li 8.1 Ta 3
1149 .It Li 8.2 Ta 5
1150 .Pp
1151 .It Li 9.0 Ta 6
1152 .Pp
1153 .It Li 10.0 Ta 7
1154 .El
1155 .Sh AUTHORS
1156 .An Pawel Jakub Dawidek Aq Mt pjd@FreeBSD.org