Provided by: zfsutils-linux_2.1.5-1ubuntu6~22.04.5_amd64 bug

NAME

       zfs-load-key — load, unload, or change encryption key of ZFS dataset

SYNOPSIS

       zfs load-key [-nr] [-L keylocation] -a|filesystem
       zfs unload-key [-r] -a|filesystem
       zfs change-key [-l] [-o keylocation=value] [-o keyformat=value] [-o pbkdf2iters=value] filesystem
       zfs change-key -i [-l] filesystem

DESCRIPTION

       zfs load-key [-nr] [-L keylocation] -a|filesystem
         Load  the  key for filesystem, allowing it and all children that inherit the keylocation property to be
         accessed.  The key will be expected in the format specified by the keyformat and location specified  by
         the  keylocation  property.   Note  that  if  the  keylocation  is  set  to  prompt  the  terminal will
         interactively wait for the key to be entered.  Loading a key will not automatically mount the  dataset.
         If  that  functionality  is  desired,  zfs  mount  -l  will  ask for the key and mount the dataset (see
         zfs-mount(8)).  Once the key is loaded the keystatus property will become available.

         -r  Recursively loads the keys for the specified filesystem and all descendent encryption roots.

         -a  Loads the keys for all encryption roots in all imported pools.

         -n  Do a dry-run ("No-op") load-key.  This will cause zfs to simply check  that  the  provided  key  is
             correct.  This command may be run even if the key is already loaded.

         -L keylocation
             Use  keylocation  instead  of  the  keylocation  property.   This  will not change the value of the
             property on the dataset.  Note that if used with either -r or -a, keylocation may only be given  as
             prompt.

       zfs unload-key [-r] -a|filesystem
         Unloads a key from ZFS, removing the ability to access the dataset and all of its children that inherit
         the  keylocation  property.  This requires that the dataset is not currently open or mounted.  Once the
         key is unloaded the keystatus property will become unavailable.

         -r  Recursively unloads the keys for the specified filesystem and all descendent encryption roots.

         -a  Unloads the keys for all encryption roots in all imported pools.

       zfs change-key [-l] [-o keylocation=value] [-o keyformat=value] [-o pbkdf2iters=value] filesystem

       zfs change-key -i [-l] filesystem
         Changes the user's key (e.g. a passphrase) used to access a dataset.  This command  requires  that  the
         existing  key  for  the  dataset  is  already  loaded.   This  command  may  also be used to change the
         keylocation, keyformat, and pbkdf2iters properties as needed.  If the dataset  was  not  previously  an
         encryption  root it will become one.  Alternatively, the -i flag may be provided to cause an encryption
         root to inherit the parent's key instead.

         If the user's key is compromised, zfs change-key does not necessarily protect existing or newly-written
         data from attack.  Newly-written data will continue to be encrypted with the same  master  key  as  the
         existing  data.   The master key is compromised if an attacker obtains a user key and the corresponding
         wrapped master key.  Currently, zfs change-key does not overwrite the previous wrapped  master  key  on
         disk, so it is accessible via forensic analysis for an indeterminate length of time.

         In the event of a master key compromise, ideally the drives should be securely erased to remove all the
         old  data (which is readable using the compromised master key), a new pool created, and the data copied
         back.  This can be approximated in place by creating new datasets, copying the  data  (e.g.  using  zfs
         send  |  zfs  recv),  and  then  clearing  the free space with zpool trim --secure if supported by your
         hardware, otherwise zpool initialize.

         -l  Ensures the key is loaded before attempting to change the key.  This is effectively  equivalent  to
             running zfs load-key filesystem; zfs change-key filesystem

         -o property=value
             Allows  the  user  to set encryption key properties (keyformat, keylocation, and pbkdf2iters) while
             changing the key.  This is the only way to alter keyformat and pbkdf2iters after  the  dataset  has
             been created.

         -i  Indicates  that  zfs  should make filesystem inherit the key of its parent.  Note that this command
             can only be run on an encryption root that has an encrypted parent.

   Encryption
       Enabling the encryption feature allows for the creation of encrypted filesystems and volumes.   ZFS  will
       encrypt  file and volume data, file attributes, ACLs, permission bits, directory listings, FUID mappings,
       and userused/groupused data.  ZFS will not encrypt metadata related  to  the  pool  structure,  including
       dataset  and  snapshot  names,  dataset  hierarchy,  properties, file size, file holes, and deduplication
       tables (though the deduplicated data itself is encrypted).

       Key rotation is managed by ZFS.  Changing the user's  key  (e.g.  a  passphrase)  does  not  require  re-
       encrypting  the  entire  dataset.  Datasets can be scrubbed, resilvered, renamed, and deleted without the
       encryption keys being loaded (see the load-key subcommand for more info on key loading).

       Creating an encrypted dataset requires specifying the encryption and  keyformat  properties  at  creation
       time,  along with an optional keylocation and pbkdf2iters.  After entering an encryption key, the created
       dataset will become an encryption root.  Any descendant datasets will inherit their encryption  key  from
       the  encryption  root by default, meaning that loading, unloading, or changing the key for the encryption
       root will implicitly do the same for all inheriting datasets.  If this inheritance is not desired, simply
       supply a keyformat when  creating  the  child  dataset  or  use  zfs  change-key  to  break  an  existing
       relationship,  creating  a  new  encryption root on the child.  Note that the child's keyformat may match
       that of the parent while still creating a new encryption root, and that changing the encryption  property
       alone does not create a new encryption root; this would simply use a different cipher suite with the same
       key  as  its encryption root.  The one exception is that clones will always use their origin's encryption
       key.  As a result of this exception, some encryption-related  properties  (namely  keystatus,  keyformat,
       keylocation,  and  pbkdf2iters)  do  not  inherit  like  other  ZFS  properties and instead use the value
       determined by their encryption root.  Encryption root  inheritance  can  be  tracked  via  the  read-only
       encryptionroot property.

       Encryption  changes  the  behavior  of  a few ZFS operations.  Encryption is applied after compression so
       compression ratios are preserved.  Normally checksums in ZFS are 256 bits long, but  for  encrypted  data
       the checksum is 128 bits of the user-chosen checksum and 128 bits of MAC from the encryption suite, which
       provides  additional  protection  against maliciously altered data.  Deduplication is still possible with
       encryption enabled but for security, datasets will only deduplicate against themselves, their  snapshots,
       and their clones.

       There  are  a  few  limitations  on  encrypted  datasets.   Encrypted  data  cannot  be  embedded via the
       embedded_data feature.  Encrypted datasets may not have copies=3 since  the  implementation  stores  some
       encryption  metadata  where  the  third  copy  would  normally  be.   Since compression is applied before
       encryption, datasets may be vulnerable to a CRIME-like attack if applications accessing  the  data  allow
       for  it.   Deduplication  with  encryption  will  leak information about which blocks are equivalent in a
       dataset and will incur an extra CPU cost for each block written.

SEE ALSO

       zfsprops(7), zfs-create(8), zfs-set(8)

OpenZFS                                         January 13, 2020                                 ZFS-LOAD-KEY(8)