| xj | b04a402 | 2021-11-25 15:01:52 +0800 | [diff] [blame] | 1 | ===================================== | 
|  | 2 | Filesystem-level encryption (fscrypt) | 
|  | 3 | ===================================== | 
|  | 4 |  | 
|  | 5 | Introduction | 
|  | 6 | ============ | 
|  | 7 |  | 
|  | 8 | fscrypt is a library which filesystems can hook into to support | 
|  | 9 | transparent encryption of files and directories. | 
|  | 10 |  | 
|  | 11 | Note: "fscrypt" in this document refers to the kernel-level portion, | 
|  | 12 | implemented in ``fs/crypto/``, as opposed to the userspace tool | 
|  | 13 | `fscrypt <https://github.com/google/fscrypt>`_.  This document only | 
|  | 14 | covers the kernel-level portion.  For command-line examples of how to | 
|  | 15 | use encryption, see the documentation for the userspace tool `fscrypt | 
|  | 16 | <https://github.com/google/fscrypt>`_.  Also, it is recommended to use | 
|  | 17 | the fscrypt userspace tool, or other existing userspace tools such as | 
|  | 18 | `fscryptctl <https://github.com/google/fscryptctl>`_ or `Android's key | 
|  | 19 | management system | 
|  | 20 | <https://source.android.com/security/encryption/file-based>`_, over | 
|  | 21 | using the kernel's API directly.  Using existing tools reduces the | 
|  | 22 | chance of introducing your own security bugs.  (Nevertheless, for | 
|  | 23 | completeness this documentation covers the kernel's API anyway.) | 
|  | 24 |  | 
|  | 25 | Unlike dm-crypt, fscrypt operates at the filesystem level rather than | 
|  | 26 | at the block device level.  This allows it to encrypt different files | 
|  | 27 | with different keys and to have unencrypted files on the same | 
|  | 28 | filesystem.  This is useful for multi-user systems where each user's | 
|  | 29 | data-at-rest needs to be cryptographically isolated from the others. | 
|  | 30 | However, except for filenames, fscrypt does not encrypt filesystem | 
|  | 31 | metadata. | 
|  | 32 |  | 
|  | 33 | Unlike eCryptfs, which is a stacked filesystem, fscrypt is integrated | 
|  | 34 | directly into supported filesystems --- currently ext4, F2FS, and | 
|  | 35 | UBIFS.  This allows encrypted files to be read and written without | 
|  | 36 | caching both the decrypted and encrypted pages in the pagecache, | 
|  | 37 | thereby nearly halving the memory used and bringing it in line with | 
|  | 38 | unencrypted files.  Similarly, half as many dentries and inodes are | 
|  | 39 | needed.  eCryptfs also limits encrypted filenames to 143 bytes, | 
|  | 40 | causing application compatibility issues; fscrypt allows the full 255 | 
|  | 41 | bytes (NAME_MAX).  Finally, unlike eCryptfs, the fscrypt API can be | 
|  | 42 | used by unprivileged users, with no need to mount anything. | 
|  | 43 |  | 
|  | 44 | fscrypt does not support encrypting files in-place.  Instead, it | 
|  | 45 | supports marking an empty directory as encrypted.  Then, after | 
|  | 46 | userspace provides the key, all regular files, directories, and | 
|  | 47 | symbolic links created in that directory tree are transparently | 
|  | 48 | encrypted. | 
|  | 49 |  | 
|  | 50 | Threat model | 
|  | 51 | ============ | 
|  | 52 |  | 
|  | 53 | Offline attacks | 
|  | 54 | --------------- | 
|  | 55 |  | 
|  | 56 | Provided that userspace chooses a strong encryption key, fscrypt | 
|  | 57 | protects the confidentiality of file contents and filenames in the | 
|  | 58 | event of a single point-in-time permanent offline compromise of the | 
|  | 59 | block device content.  fscrypt does not protect the confidentiality of | 
|  | 60 | non-filename metadata, e.g. file sizes, file permissions, file | 
|  | 61 | timestamps, and extended attributes.  Also, the existence and location | 
|  | 62 | of holes (unallocated blocks which logically contain all zeroes) in | 
|  | 63 | files is not protected. | 
|  | 64 |  | 
|  | 65 | fscrypt is not guaranteed to protect confidentiality or authenticity | 
|  | 66 | if an attacker is able to manipulate the filesystem offline prior to | 
|  | 67 | an authorized user later accessing the filesystem. | 
|  | 68 |  | 
|  | 69 | Online attacks | 
|  | 70 | -------------- | 
|  | 71 |  | 
|  | 72 | fscrypt (and storage encryption in general) can only provide limited | 
|  | 73 | protection, if any at all, against online attacks.  In detail: | 
|  | 74 |  | 
|  | 75 | Side-channel attacks | 
|  | 76 | ~~~~~~~~~~~~~~~~~~~~ | 
|  | 77 |  | 
|  | 78 | fscrypt is only resistant to side-channel attacks, such as timing or | 
|  | 79 | electromagnetic attacks, to the extent that the underlying Linux | 
|  | 80 | Cryptographic API algorithms are.  If a vulnerable algorithm is used, | 
|  | 81 | such as a table-based implementation of AES, it may be possible for an | 
|  | 82 | attacker to mount a side channel attack against the online system. | 
|  | 83 | Side channel attacks may also be mounted against applications | 
|  | 84 | consuming decrypted data. | 
|  | 85 |  | 
|  | 86 | Unauthorized file access | 
|  | 87 | ~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 88 |  | 
|  | 89 | After an encryption key has been added, fscrypt does not hide the | 
|  | 90 | plaintext file contents or filenames from other users on the same | 
|  | 91 | system.  Instead, existing access control mechanisms such as file mode | 
|  | 92 | bits, POSIX ACLs, LSMs, or namespaces should be used for this purpose. | 
|  | 93 |  | 
|  | 94 | (For the reasoning behind this, understand that while the key is | 
|  | 95 | added, the confidentiality of the data, from the perspective of the | 
|  | 96 | system itself, is *not* protected by the mathematical properties of | 
|  | 97 | encryption but rather only by the correctness of the kernel. | 
|  | 98 | Therefore, any encryption-specific access control checks would merely | 
|  | 99 | be enforced by kernel *code* and therefore would be largely redundant | 
|  | 100 | with the wide variety of access control mechanisms already available.) | 
|  | 101 |  | 
|  | 102 | Kernel memory compromise | 
|  | 103 | ~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 104 |  | 
|  | 105 | An attacker who compromises the system enough to read from arbitrary | 
|  | 106 | memory, e.g. by mounting a physical attack or by exploiting a kernel | 
|  | 107 | security vulnerability, can compromise all encryption keys that are | 
|  | 108 | currently in use. | 
|  | 109 |  | 
|  | 110 | However, fscrypt allows encryption keys to be removed from the kernel, | 
|  | 111 | which may protect them from later compromise. | 
|  | 112 |  | 
|  | 113 | In more detail, the FS_IOC_REMOVE_ENCRYPTION_KEY ioctl (or the | 
|  | 114 | FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS ioctl) can wipe a master | 
|  | 115 | encryption key from kernel memory.  If it does so, it will also try to | 
|  | 116 | evict all cached inodes which had been "unlocked" using the key, | 
|  | 117 | thereby wiping their per-file keys and making them once again appear | 
|  | 118 | "locked", i.e. in ciphertext or encrypted form. | 
|  | 119 |  | 
|  | 120 | However, these ioctls have some limitations: | 
|  | 121 |  | 
|  | 122 | - Per-file keys for in-use files will *not* be removed or wiped. | 
|  | 123 | Therefore, for maximum effect, userspace should close the relevant | 
|  | 124 | encrypted files and directories before removing a master key, as | 
|  | 125 | well as kill any processes whose working directory is in an affected | 
|  | 126 | encrypted directory. | 
|  | 127 |  | 
|  | 128 | - The kernel cannot magically wipe copies of the master key(s) that | 
|  | 129 | userspace might have as well.  Therefore, userspace must wipe all | 
|  | 130 | copies of the master key(s) it makes as well; normally this should | 
|  | 131 | be done immediately after FS_IOC_ADD_ENCRYPTION_KEY, without waiting | 
|  | 132 | for FS_IOC_REMOVE_ENCRYPTION_KEY.  Naturally, the same also applies | 
|  | 133 | to all higher levels in the key hierarchy.  Userspace should also | 
|  | 134 | follow other security precautions such as mlock()ing memory | 
|  | 135 | containing keys to prevent it from being swapped out. | 
|  | 136 |  | 
|  | 137 | - In general, decrypted contents and filenames in the kernel VFS | 
|  | 138 | caches are freed but not wiped.  Therefore, portions thereof may be | 
|  | 139 | recoverable from freed memory, even after the corresponding key(s) | 
|  | 140 | were wiped.  To partially solve this, you can set | 
|  | 141 | CONFIG_PAGE_POISONING=y in your kernel config and add page_poison=1 | 
|  | 142 | to your kernel command line.  However, this has a performance cost. | 
|  | 143 |  | 
|  | 144 | - Secret keys might still exist in CPU registers, in crypto | 
|  | 145 | accelerator hardware (if used by the crypto API to implement any of | 
|  | 146 | the algorithms), or in other places not explicitly considered here. | 
|  | 147 |  | 
|  | 148 | Limitations of v1 policies | 
|  | 149 | ~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 150 |  | 
|  | 151 | v1 encryption policies have some weaknesses with respect to online | 
|  | 152 | attacks: | 
|  | 153 |  | 
|  | 154 | - There is no verification that the provided master key is correct. | 
|  | 155 | Therefore, a malicious user can temporarily associate the wrong key | 
|  | 156 | with another user's encrypted files to which they have read-only | 
|  | 157 | access.  Because of filesystem caching, the wrong key will then be | 
|  | 158 | used by the other user's accesses to those files, even if the other | 
|  | 159 | user has the correct key in their own keyring.  This violates the | 
|  | 160 | meaning of "read-only access". | 
|  | 161 |  | 
|  | 162 | - A compromise of a per-file key also compromises the master key from | 
|  | 163 | which it was derived. | 
|  | 164 |  | 
|  | 165 | - Non-root users cannot securely remove encryption keys. | 
|  | 166 |  | 
|  | 167 | All the above problems are fixed with v2 encryption policies.  For | 
|  | 168 | this reason among others, it is recommended to use v2 encryption | 
|  | 169 | policies on all new encrypted directories. | 
|  | 170 |  | 
|  | 171 | Key hierarchy | 
|  | 172 | ============= | 
|  | 173 |  | 
|  | 174 | Master Keys | 
|  | 175 | ----------- | 
|  | 176 |  | 
|  | 177 | Each encrypted directory tree is protected by a *master key*.  Master | 
|  | 178 | keys can be up to 64 bytes long, and must be at least as long as the | 
|  | 179 | greater of the key length needed by the contents and filenames | 
|  | 180 | encryption modes being used.  For example, if AES-256-XTS is used for | 
|  | 181 | contents encryption, the master key must be 64 bytes (512 bits).  Note | 
|  | 182 | that the XTS mode is defined to require a key twice as long as that | 
|  | 183 | required by the underlying block cipher. | 
|  | 184 |  | 
|  | 185 | To "unlock" an encrypted directory tree, userspace must provide the | 
|  | 186 | appropriate master key.  There can be any number of master keys, each | 
|  | 187 | of which protects any number of directory trees on any number of | 
|  | 188 | filesystems. | 
|  | 189 |  | 
|  | 190 | Master keys must be real cryptographic keys, i.e. indistinguishable | 
|  | 191 | from random bytestrings of the same length.  This implies that users | 
|  | 192 | **must not** directly use a password as a master key, zero-pad a | 
|  | 193 | shorter key, or repeat a shorter key.  Security cannot be guaranteed | 
|  | 194 | if userspace makes any such error, as the cryptographic proofs and | 
|  | 195 | analysis would no longer apply. | 
|  | 196 |  | 
|  | 197 | Instead, users should generate master keys either using a | 
|  | 198 | cryptographically secure random number generator, or by using a KDF | 
|  | 199 | (Key Derivation Function).  The kernel does not do any key stretching; | 
|  | 200 | therefore, if userspace derives the key from a low-entropy secret such | 
|  | 201 | as a passphrase, it is critical that a KDF designed for this purpose | 
|  | 202 | be used, such as scrypt, PBKDF2, or Argon2. | 
|  | 203 |  | 
|  | 204 | Key derivation function | 
|  | 205 | ----------------------- | 
|  | 206 |  | 
|  | 207 | With one exception, fscrypt never uses the master key(s) for | 
|  | 208 | encryption directly.  Instead, they are only used as input to a KDF | 
|  | 209 | (Key Derivation Function) to derive the actual keys. | 
|  | 210 |  | 
|  | 211 | The KDF used for a particular master key differs depending on whether | 
|  | 212 | the key is used for v1 encryption policies or for v2 encryption | 
|  | 213 | policies.  Users **must not** use the same key for both v1 and v2 | 
|  | 214 | encryption policies.  (No real-world attack is currently known on this | 
|  | 215 | specific case of key reuse, but its security cannot be guaranteed | 
|  | 216 | since the cryptographic proofs and analysis would no longer apply.) | 
|  | 217 |  | 
|  | 218 | For v1 encryption policies, the KDF only supports deriving per-file | 
|  | 219 | encryption keys.  It works by encrypting the master key with | 
|  | 220 | AES-128-ECB, using the file's 16-byte nonce as the AES key.  The | 
|  | 221 | resulting ciphertext is used as the derived key.  If the ciphertext is | 
|  | 222 | longer than needed, then it is truncated to the needed length. | 
|  | 223 |  | 
|  | 224 | For v2 encryption policies, the KDF is HKDF-SHA512.  The master key is | 
|  | 225 | passed as the "input keying material", no salt is used, and a distinct | 
|  | 226 | "application-specific information string" is used for each distinct | 
|  | 227 | key to be derived.  For example, when a per-file encryption key is | 
|  | 228 | derived, the application-specific information string is the file's | 
|  | 229 | nonce prefixed with "fscrypt\\0" and a context byte.  Different | 
|  | 230 | context bytes are used for other types of derived keys. | 
|  | 231 |  | 
|  | 232 | HKDF-SHA512 is preferred to the original AES-128-ECB based KDF because | 
|  | 233 | HKDF is more flexible, is nonreversible, and evenly distributes | 
|  | 234 | entropy from the master key.  HKDF is also standardized and widely | 
|  | 235 | used by other software, whereas the AES-128-ECB based KDF is ad-hoc. | 
|  | 236 |  | 
|  | 237 | Per-file keys | 
|  | 238 | ------------- | 
|  | 239 |  | 
|  | 240 | Since each master key can protect many files, it is necessary to | 
|  | 241 | "tweak" the encryption of each file so that the same plaintext in two | 
|  | 242 | files doesn't map to the same ciphertext, or vice versa.  In most | 
|  | 243 | cases, fscrypt does this by deriving per-file keys.  When a new | 
|  | 244 | encrypted inode (regular file, directory, or symlink) is created, | 
|  | 245 | fscrypt randomly generates a 16-byte nonce and stores it in the | 
|  | 246 | inode's encryption xattr.  Then, it uses a KDF (as described in `Key | 
|  | 247 | derivation function`_) to derive the file's key from the master key | 
|  | 248 | and nonce. | 
|  | 249 |  | 
|  | 250 | Key derivation was chosen over key wrapping because wrapped keys would | 
|  | 251 | require larger xattrs which would be less likely to fit in-line in the | 
|  | 252 | filesystem's inode table, and there didn't appear to be any | 
|  | 253 | significant advantages to key wrapping.  In particular, currently | 
|  | 254 | there is no requirement to support unlocking a file with multiple | 
|  | 255 | alternative master keys or to support rotating master keys.  Instead, | 
|  | 256 | the master keys may be wrapped in userspace, e.g. as is done by the | 
|  | 257 | `fscrypt <https://github.com/google/fscrypt>`_ tool. | 
|  | 258 |  | 
|  | 259 | DIRECT_KEY policies | 
|  | 260 | ------------------- | 
|  | 261 |  | 
|  | 262 | The Adiantum encryption mode (see `Encryption modes and usage`_) is | 
|  | 263 | suitable for both contents and filenames encryption, and it accepts | 
|  | 264 | long IVs --- long enough to hold both an 8-byte logical block number | 
|  | 265 | and a 16-byte per-file nonce.  Also, the overhead of each Adiantum key | 
|  | 266 | is greater than that of an AES-256-XTS key. | 
|  | 267 |  | 
|  | 268 | Therefore, to improve performance and save memory, for Adiantum a | 
|  | 269 | "direct key" configuration is supported.  When the user has enabled | 
|  | 270 | this by setting FSCRYPT_POLICY_FLAG_DIRECT_KEY in the fscrypt policy, | 
|  | 271 | per-file keys are not used.  Instead, whenever any data (contents or | 
|  | 272 | filenames) is encrypted, the file's 16-byte nonce is included in the | 
|  | 273 | IV.  Moreover: | 
|  | 274 |  | 
|  | 275 | - For v1 encryption policies, the encryption is done directly with the | 
|  | 276 | master key.  Because of this, users **must not** use the same master | 
|  | 277 | key for any other purpose, even for other v1 policies. | 
|  | 278 |  | 
|  | 279 | - For v2 encryption policies, the encryption is done with a per-mode | 
|  | 280 | key derived using the KDF.  Users may use the same master key for | 
|  | 281 | other v2 encryption policies. | 
|  | 282 |  | 
|  | 283 | IV_INO_LBLK_64 policies | 
|  | 284 | ----------------------- | 
|  | 285 |  | 
|  | 286 | When FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64 is set in the fscrypt policy, | 
|  | 287 | the encryption keys are derived from the master key, encryption mode | 
|  | 288 | number, and filesystem UUID.  This normally results in all files | 
|  | 289 | protected by the same master key sharing a single contents encryption | 
|  | 290 | key and a single filenames encryption key.  To still encrypt different | 
|  | 291 | files' data differently, inode numbers are included in the IVs. | 
|  | 292 | Consequently, shrinking the filesystem may not be allowed. | 
|  | 293 |  | 
|  | 294 | This format is optimized for use with inline encryption hardware | 
|  | 295 | compliant with the UFS or eMMC standards, which support only 64 IV | 
|  | 296 | bits per I/O request and may have only a small number of keyslots. | 
|  | 297 |  | 
|  | 298 | Key identifiers | 
|  | 299 | --------------- | 
|  | 300 |  | 
|  | 301 | For master keys used for v2 encryption policies, a unique 16-byte "key | 
|  | 302 | identifier" is also derived using the KDF.  This value is stored in | 
|  | 303 | the clear, since it is needed to reliably identify the key itself. | 
|  | 304 |  | 
|  | 305 | Encryption modes and usage | 
|  | 306 | ========================== | 
|  | 307 |  | 
|  | 308 | fscrypt allows one encryption mode to be specified for file contents | 
|  | 309 | and one encryption mode to be specified for filenames.  Different | 
|  | 310 | directory trees are permitted to use different encryption modes. | 
|  | 311 | Currently, the following pairs of encryption modes are supported: | 
|  | 312 |  | 
|  | 313 | - AES-256-XTS for contents and AES-256-CTS-CBC for filenames | 
|  | 314 | - AES-128-CBC for contents and AES-128-CTS-CBC for filenames | 
|  | 315 | - Adiantum for both contents and filenames | 
|  | 316 |  | 
|  | 317 | If unsure, you should use the (AES-256-XTS, AES-256-CTS-CBC) pair. | 
|  | 318 |  | 
|  | 319 | AES-128-CBC was added only for low-powered embedded devices with | 
|  | 320 | crypto accelerators such as CAAM or CESA that do not support XTS.  To | 
|  | 321 | use AES-128-CBC, CONFIG_CRYPTO_ESSIV and CONFIG_CRYPTO_SHA256 (or | 
|  | 322 | another SHA-256 implementation) must be enabled so that ESSIV can be | 
|  | 323 | used. | 
|  | 324 |  | 
|  | 325 | Adiantum is a (primarily) stream cipher-based mode that is fast even | 
|  | 326 | on CPUs without dedicated crypto instructions.  It's also a true | 
|  | 327 | wide-block mode, unlike XTS.  It can also eliminate the need to derive | 
|  | 328 | per-file keys.  However, it depends on the security of two primitives, | 
|  | 329 | XChaCha12 and AES-256, rather than just one.  See the paper | 
|  | 330 | "Adiantum: length-preserving encryption for entry-level processors" | 
|  | 331 | (https://eprint.iacr.org/2018/720.pdf) for more details.  To use | 
|  | 332 | Adiantum, CONFIG_CRYPTO_ADIANTUM must be enabled.  Also, fast | 
|  | 333 | implementations of ChaCha and NHPoly1305 should be enabled, e.g. | 
|  | 334 | CONFIG_CRYPTO_CHACHA20_NEON and CONFIG_CRYPTO_NHPOLY1305_NEON for ARM. | 
|  | 335 |  | 
|  | 336 | New encryption modes can be added relatively easily, without changes | 
|  | 337 | to individual filesystems.  However, authenticated encryption (AE) | 
|  | 338 | modes are not currently supported because of the difficulty of dealing | 
|  | 339 | with ciphertext expansion. | 
|  | 340 |  | 
|  | 341 | Contents encryption | 
|  | 342 | ------------------- | 
|  | 343 |  | 
|  | 344 | For file contents, each filesystem block is encrypted independently. | 
|  | 345 | Currently, only the case where the filesystem block size is equal to | 
|  | 346 | the system's page size (usually 4096 bytes) is supported. | 
|  | 347 |  | 
|  | 348 | Each block's IV is set to the logical block number within the file as | 
|  | 349 | a little endian number, except that: | 
|  | 350 |  | 
|  | 351 | - With CBC mode encryption, ESSIV is also used.  Specifically, each IV | 
|  | 352 | is encrypted with AES-256 where the AES-256 key is the SHA-256 hash | 
|  | 353 | of the file's data encryption key. | 
|  | 354 |  | 
|  | 355 | - With `DIRECT_KEY policies`_, the file's nonce is appended to the IV. | 
|  | 356 | Currently this is only allowed with the Adiantum encryption mode. | 
|  | 357 |  | 
|  | 358 | - With `IV_INO_LBLK_64 policies`_, the logical block number is limited | 
|  | 359 | to 32 bits and is placed in bits 0-31 of the IV.  The inode number | 
|  | 360 | (which is also limited to 32 bits) is placed in bits 32-63. | 
|  | 361 |  | 
|  | 362 | Note that because file logical block numbers are included in the IVs, | 
|  | 363 | filesystems must enforce that blocks are never shifted around within | 
|  | 364 | encrypted files, e.g. via "collapse range" or "insert range". | 
|  | 365 |  | 
|  | 366 | Filenames encryption | 
|  | 367 | -------------------- | 
|  | 368 |  | 
|  | 369 | For filenames, each full filename is encrypted at once.  Because of | 
|  | 370 | the requirements to retain support for efficient directory lookups and | 
|  | 371 | filenames of up to 255 bytes, the same IV is used for every filename | 
|  | 372 | in a directory. | 
|  | 373 |  | 
|  | 374 | However, each encrypted directory still uses a unique key, or | 
|  | 375 | alternatively has the file's nonce (for `DIRECT_KEY policies`_) or | 
|  | 376 | inode number (for `IV_INO_LBLK_64 policies`_) included in the IVs. | 
|  | 377 | Thus, IV reuse is limited to within a single directory. | 
|  | 378 |  | 
|  | 379 | With CTS-CBC, the IV reuse means that when the plaintext filenames | 
|  | 380 | share a common prefix at least as long as the cipher block size (16 | 
|  | 381 | bytes for AES), the corresponding encrypted filenames will also share | 
|  | 382 | a common prefix.  This is undesirable.  Adiantum does not have this | 
|  | 383 | weakness, as it is a wide-block encryption mode. | 
|  | 384 |  | 
|  | 385 | All supported filenames encryption modes accept any plaintext length | 
|  | 386 | >= 16 bytes; cipher block alignment is not required.  However, | 
|  | 387 | filenames shorter than 16 bytes are NUL-padded to 16 bytes before | 
|  | 388 | being encrypted.  In addition, to reduce leakage of filename lengths | 
|  | 389 | via their ciphertexts, all filenames are NUL-padded to the next 4, 8, | 
|  | 390 | 16, or 32-byte boundary (configurable).  32 is recommended since this | 
|  | 391 | provides the best confidentiality, at the cost of making directory | 
|  | 392 | entries consume slightly more space.  Note that since NUL (``\0``) is | 
|  | 393 | not otherwise a valid character in filenames, the padding will never | 
|  | 394 | produce duplicate plaintexts. | 
|  | 395 |  | 
|  | 396 | Symbolic link targets are considered a type of filename and are | 
|  | 397 | encrypted in the same way as filenames in directory entries, except | 
|  | 398 | that IV reuse is not a problem as each symlink has its own inode. | 
|  | 399 |  | 
|  | 400 | User API | 
|  | 401 | ======== | 
|  | 402 |  | 
|  | 403 | Setting an encryption policy | 
|  | 404 | ---------------------------- | 
|  | 405 |  | 
|  | 406 | FS_IOC_SET_ENCRYPTION_POLICY | 
|  | 407 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 408 |  | 
|  | 409 | The FS_IOC_SET_ENCRYPTION_POLICY ioctl sets an encryption policy on an | 
|  | 410 | empty directory or verifies that a directory or regular file already | 
|  | 411 | has the specified encryption policy.  It takes in a pointer to a | 
|  | 412 | :c:type:`struct fscrypt_policy_v1` or a :c:type:`struct | 
|  | 413 | fscrypt_policy_v2`, defined as follows:: | 
|  | 414 |  | 
|  | 415 | #define FSCRYPT_POLICY_V1               0 | 
|  | 416 | #define FSCRYPT_KEY_DESCRIPTOR_SIZE     8 | 
|  | 417 | struct fscrypt_policy_v1 { | 
|  | 418 | __u8 version; | 
|  | 419 | __u8 contents_encryption_mode; | 
|  | 420 | __u8 filenames_encryption_mode; | 
|  | 421 | __u8 flags; | 
|  | 422 | __u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE]; | 
|  | 423 | }; | 
|  | 424 | #define fscrypt_policy  fscrypt_policy_v1 | 
|  | 425 |  | 
|  | 426 | #define FSCRYPT_POLICY_V2               2 | 
|  | 427 | #define FSCRYPT_KEY_IDENTIFIER_SIZE     16 | 
|  | 428 | struct fscrypt_policy_v2 { | 
|  | 429 | __u8 version; | 
|  | 430 | __u8 contents_encryption_mode; | 
|  | 431 | __u8 filenames_encryption_mode; | 
|  | 432 | __u8 flags; | 
|  | 433 | __u8 __reserved[4]; | 
|  | 434 | __u8 master_key_identifier[FSCRYPT_KEY_IDENTIFIER_SIZE]; | 
|  | 435 | }; | 
|  | 436 |  | 
|  | 437 | This structure must be initialized as follows: | 
|  | 438 |  | 
|  | 439 | - ``version`` must be FSCRYPT_POLICY_V1 (0) if the struct is | 
|  | 440 | :c:type:`fscrypt_policy_v1` or FSCRYPT_POLICY_V2 (2) if the struct | 
|  | 441 | is :c:type:`fscrypt_policy_v2`.  (Note: we refer to the original | 
|  | 442 | policy version as "v1", though its version code is really 0.)  For | 
|  | 443 | new encrypted directories, use v2 policies. | 
|  | 444 |  | 
|  | 445 | - ``contents_encryption_mode`` and ``filenames_encryption_mode`` must | 
|  | 446 | be set to constants from ``<linux/fscrypt.h>`` which identify the | 
|  | 447 | encryption modes to use.  If unsure, use FSCRYPT_MODE_AES_256_XTS | 
|  | 448 | (1) for ``contents_encryption_mode`` and FSCRYPT_MODE_AES_256_CTS | 
|  | 449 | (4) for ``filenames_encryption_mode``. | 
|  | 450 |  | 
|  | 451 | - ``flags`` contains optional flags from ``<linux/fscrypt.h>``: | 
|  | 452 |  | 
|  | 453 | - FSCRYPT_POLICY_FLAGS_PAD_*: The amount of NUL padding to use when | 
|  | 454 | encrypting filenames.  If unsure, use FSCRYPT_POLICY_FLAGS_PAD_32 | 
|  | 455 | (0x3). | 
|  | 456 | - FSCRYPT_POLICY_FLAG_DIRECT_KEY: See `DIRECT_KEY policies`_. | 
|  | 457 | - FSCRYPT_POLICY_FLAG_IV_INO_LBLK_64: See `IV_INO_LBLK_64 | 
|  | 458 | policies`_.  This is mutually exclusive with DIRECT_KEY and is not | 
|  | 459 | supported on v1 policies. | 
|  | 460 |  | 
|  | 461 | - For v2 encryption policies, ``__reserved`` must be zeroed. | 
|  | 462 |  | 
|  | 463 | - For v1 encryption policies, ``master_key_descriptor`` specifies how | 
|  | 464 | to find the master key in a keyring; see `Adding keys`_.  It is up | 
|  | 465 | to userspace to choose a unique ``master_key_descriptor`` for each | 
|  | 466 | master key.  The e4crypt and fscrypt tools use the first 8 bytes of | 
|  | 467 | ``SHA-512(SHA-512(master_key))``, but this particular scheme is not | 
|  | 468 | required.  Also, the master key need not be in the keyring yet when | 
|  | 469 | FS_IOC_SET_ENCRYPTION_POLICY is executed.  However, it must be added | 
|  | 470 | before any files can be created in the encrypted directory. | 
|  | 471 |  | 
|  | 472 | For v2 encryption policies, ``master_key_descriptor`` has been | 
|  | 473 | replaced with ``master_key_identifier``, which is longer and cannot | 
|  | 474 | be arbitrarily chosen.  Instead, the key must first be added using | 
|  | 475 | `FS_IOC_ADD_ENCRYPTION_KEY`_.  Then, the ``key_spec.u.identifier`` | 
|  | 476 | the kernel returned in the :c:type:`struct fscrypt_add_key_arg` must | 
|  | 477 | be used as the ``master_key_identifier`` in the :c:type:`struct | 
|  | 478 | fscrypt_policy_v2`. | 
|  | 479 |  | 
|  | 480 | If the file is not yet encrypted, then FS_IOC_SET_ENCRYPTION_POLICY | 
|  | 481 | verifies that the file is an empty directory.  If so, the specified | 
|  | 482 | encryption policy is assigned to the directory, turning it into an | 
|  | 483 | encrypted directory.  After that, and after providing the | 
|  | 484 | corresponding master key as described in `Adding keys`_, all regular | 
|  | 485 | files, directories (recursively), and symlinks created in the | 
|  | 486 | directory will be encrypted, inheriting the same encryption policy. | 
|  | 487 | The filenames in the directory's entries will be encrypted as well. | 
|  | 488 |  | 
|  | 489 | Alternatively, if the file is already encrypted, then | 
|  | 490 | FS_IOC_SET_ENCRYPTION_POLICY validates that the specified encryption | 
|  | 491 | policy exactly matches the actual one.  If they match, then the ioctl | 
|  | 492 | returns 0.  Otherwise, it fails with EEXIST.  This works on both | 
|  | 493 | regular files and directories, including nonempty directories. | 
|  | 494 |  | 
|  | 495 | When a v2 encryption policy is assigned to a directory, it is also | 
|  | 496 | required that either the specified key has been added by the current | 
|  | 497 | user or that the caller has CAP_FOWNER in the initial user namespace. | 
|  | 498 | (This is needed to prevent a user from encrypting their data with | 
|  | 499 | another user's key.)  The key must remain added while | 
|  | 500 | FS_IOC_SET_ENCRYPTION_POLICY is executing.  However, if the new | 
|  | 501 | encrypted directory does not need to be accessed immediately, then the | 
|  | 502 | key can be removed right away afterwards. | 
|  | 503 |  | 
|  | 504 | Note that the ext4 filesystem does not allow the root directory to be | 
|  | 505 | encrypted, even if it is empty.  Users who want to encrypt an entire | 
|  | 506 | filesystem with one key should consider using dm-crypt instead. | 
|  | 507 |  | 
|  | 508 | FS_IOC_SET_ENCRYPTION_POLICY can fail with the following errors: | 
|  | 509 |  | 
|  | 510 | - ``EACCES``: the file is not owned by the process's uid, nor does the | 
|  | 511 | process have the CAP_FOWNER capability in a namespace with the file | 
|  | 512 | owner's uid mapped | 
|  | 513 | - ``EEXIST``: the file is already encrypted with an encryption policy | 
|  | 514 | different from the one specified | 
|  | 515 | - ``EINVAL``: an invalid encryption policy was specified (invalid | 
|  | 516 | version, mode(s), or flags; or reserved bits were set) | 
|  | 517 | - ``ENOKEY``: a v2 encryption policy was specified, but the key with | 
|  | 518 | the specified ``master_key_identifier`` has not been added, nor does | 
|  | 519 | the process have the CAP_FOWNER capability in the initial user | 
|  | 520 | namespace | 
|  | 521 | - ``ENOTDIR``: the file is unencrypted and is a regular file, not a | 
|  | 522 | directory | 
|  | 523 | - ``ENOTEMPTY``: the file is unencrypted and is a nonempty directory | 
|  | 524 | - ``ENOTTY``: this type of filesystem does not implement encryption | 
|  | 525 | - ``EOPNOTSUPP``: the kernel was not configured with encryption | 
|  | 526 | support for filesystems, or the filesystem superblock has not | 
|  | 527 | had encryption enabled on it.  (For example, to use encryption on an | 
|  | 528 | ext4 filesystem, CONFIG_FS_ENCRYPTION must be enabled in the | 
|  | 529 | kernel config, and the superblock must have had the "encrypt" | 
|  | 530 | feature flag enabled using ``tune2fs -O encrypt`` or ``mkfs.ext4 -O | 
|  | 531 | encrypt``.) | 
|  | 532 | - ``EPERM``: this directory may not be encrypted, e.g. because it is | 
|  | 533 | the root directory of an ext4 filesystem | 
|  | 534 | - ``EROFS``: the filesystem is readonly | 
|  | 535 |  | 
|  | 536 | Getting an encryption policy | 
|  | 537 | ---------------------------- | 
|  | 538 |  | 
|  | 539 | Two ioctls are available to get a file's encryption policy: | 
|  | 540 |  | 
|  | 541 | - `FS_IOC_GET_ENCRYPTION_POLICY_EX`_ | 
|  | 542 | - `FS_IOC_GET_ENCRYPTION_POLICY`_ | 
|  | 543 |  | 
|  | 544 | The extended (_EX) version of the ioctl is more general and is | 
|  | 545 | recommended to use when possible.  However, on older kernels only the | 
|  | 546 | original ioctl is available.  Applications should try the extended | 
|  | 547 | version, and if it fails with ENOTTY fall back to the original | 
|  | 548 | version. | 
|  | 549 |  | 
|  | 550 | FS_IOC_GET_ENCRYPTION_POLICY_EX | 
|  | 551 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 552 |  | 
|  | 553 | The FS_IOC_GET_ENCRYPTION_POLICY_EX ioctl retrieves the encryption | 
|  | 554 | policy, if any, for a directory or regular file.  No additional | 
|  | 555 | permissions are required beyond the ability to open the file.  It | 
|  | 556 | takes in a pointer to a :c:type:`struct fscrypt_get_policy_ex_arg`, | 
|  | 557 | defined as follows:: | 
|  | 558 |  | 
|  | 559 | struct fscrypt_get_policy_ex_arg { | 
|  | 560 | __u64 policy_size; /* input/output */ | 
|  | 561 | union { | 
|  | 562 | __u8 version; | 
|  | 563 | struct fscrypt_policy_v1 v1; | 
|  | 564 | struct fscrypt_policy_v2 v2; | 
|  | 565 | } policy; /* output */ | 
|  | 566 | }; | 
|  | 567 |  | 
|  | 568 | The caller must initialize ``policy_size`` to the size available for | 
|  | 569 | the policy struct, i.e. ``sizeof(arg.policy)``. | 
|  | 570 |  | 
|  | 571 | On success, the policy struct is returned in ``policy``, and its | 
|  | 572 | actual size is returned in ``policy_size``.  ``policy.version`` should | 
|  | 573 | be checked to determine the version of policy returned.  Note that the | 
|  | 574 | version code for the "v1" policy is actually 0 (FSCRYPT_POLICY_V1). | 
|  | 575 |  | 
|  | 576 | FS_IOC_GET_ENCRYPTION_POLICY_EX can fail with the following errors: | 
|  | 577 |  | 
|  | 578 | - ``EINVAL``: the file is encrypted, but it uses an unrecognized | 
|  | 579 | encryption policy version | 
|  | 580 | - ``ENODATA``: the file is not encrypted | 
|  | 581 | - ``ENOTTY``: this type of filesystem does not implement encryption, | 
|  | 582 | or this kernel is too old to support FS_IOC_GET_ENCRYPTION_POLICY_EX | 
|  | 583 | (try FS_IOC_GET_ENCRYPTION_POLICY instead) | 
|  | 584 | - ``EOPNOTSUPP``: the kernel was not configured with encryption | 
|  | 585 | support for this filesystem, or the filesystem superblock has not | 
|  | 586 | had encryption enabled on it | 
|  | 587 | - ``EOVERFLOW``: the file is encrypted and uses a recognized | 
|  | 588 | encryption policy version, but the policy struct does not fit into | 
|  | 589 | the provided buffer | 
|  | 590 |  | 
|  | 591 | Note: if you only need to know whether a file is encrypted or not, on | 
|  | 592 | most filesystems it is also possible to use the FS_IOC_GETFLAGS ioctl | 
|  | 593 | and check for FS_ENCRYPT_FL, or to use the statx() system call and | 
|  | 594 | check for STATX_ATTR_ENCRYPTED in stx_attributes. | 
|  | 595 |  | 
|  | 596 | FS_IOC_GET_ENCRYPTION_POLICY | 
|  | 597 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 598 |  | 
|  | 599 | The FS_IOC_GET_ENCRYPTION_POLICY ioctl can also retrieve the | 
|  | 600 | encryption policy, if any, for a directory or regular file.  However, | 
|  | 601 | unlike `FS_IOC_GET_ENCRYPTION_POLICY_EX`_, | 
|  | 602 | FS_IOC_GET_ENCRYPTION_POLICY only supports the original policy | 
|  | 603 | version.  It takes in a pointer directly to a :c:type:`struct | 
|  | 604 | fscrypt_policy_v1` rather than a :c:type:`struct | 
|  | 605 | fscrypt_get_policy_ex_arg`. | 
|  | 606 |  | 
|  | 607 | The error codes for FS_IOC_GET_ENCRYPTION_POLICY are the same as those | 
|  | 608 | for FS_IOC_GET_ENCRYPTION_POLICY_EX, except that | 
|  | 609 | FS_IOC_GET_ENCRYPTION_POLICY also returns ``EINVAL`` if the file is | 
|  | 610 | encrypted using a newer encryption policy version. | 
|  | 611 |  | 
|  | 612 | Getting the per-filesystem salt | 
|  | 613 | ------------------------------- | 
|  | 614 |  | 
|  | 615 | Some filesystems, such as ext4 and F2FS, also support the deprecated | 
|  | 616 | ioctl FS_IOC_GET_ENCRYPTION_PWSALT.  This ioctl retrieves a randomly | 
|  | 617 | generated 16-byte value stored in the filesystem superblock.  This | 
|  | 618 | value is intended to used as a salt when deriving an encryption key | 
|  | 619 | from a passphrase or other low-entropy user credential. | 
|  | 620 |  | 
|  | 621 | FS_IOC_GET_ENCRYPTION_PWSALT is deprecated.  Instead, prefer to | 
|  | 622 | generate and manage any needed salt(s) in userspace. | 
|  | 623 |  | 
|  | 624 | Adding keys | 
|  | 625 | ----------- | 
|  | 626 |  | 
|  | 627 | FS_IOC_ADD_ENCRYPTION_KEY | 
|  | 628 | ~~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 629 |  | 
|  | 630 | The FS_IOC_ADD_ENCRYPTION_KEY ioctl adds a master encryption key to | 
|  | 631 | the filesystem, making all files on the filesystem which were | 
|  | 632 | encrypted using that key appear "unlocked", i.e. in plaintext form. | 
|  | 633 | It can be executed on any file or directory on the target filesystem, | 
|  | 634 | but using the filesystem's root directory is recommended.  It takes in | 
|  | 635 | a pointer to a :c:type:`struct fscrypt_add_key_arg`, defined as | 
|  | 636 | follows:: | 
|  | 637 |  | 
|  | 638 | struct fscrypt_add_key_arg { | 
|  | 639 | struct fscrypt_key_specifier key_spec; | 
|  | 640 | __u32 raw_size; | 
|  | 641 | __u32 __reserved[9]; | 
|  | 642 | __u8 raw[]; | 
|  | 643 | }; | 
|  | 644 |  | 
|  | 645 | #define FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR        1 | 
|  | 646 | #define FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER        2 | 
|  | 647 |  | 
|  | 648 | struct fscrypt_key_specifier { | 
|  | 649 | __u32 type;     /* one of FSCRYPT_KEY_SPEC_TYPE_* */ | 
|  | 650 | __u32 __reserved; | 
|  | 651 | union { | 
|  | 652 | __u8 __reserved[32]; /* reserve some extra space */ | 
|  | 653 | __u8 descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE]; | 
|  | 654 | __u8 identifier[FSCRYPT_KEY_IDENTIFIER_SIZE]; | 
|  | 655 | } u; | 
|  | 656 | }; | 
|  | 657 |  | 
|  | 658 | :c:type:`struct fscrypt_add_key_arg` must be zeroed, then initialized | 
|  | 659 | as follows: | 
|  | 660 |  | 
|  | 661 | - If the key is being added for use by v1 encryption policies, then | 
|  | 662 | ``key_spec.type`` must contain FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR, and | 
|  | 663 | ``key_spec.u.descriptor`` must contain the descriptor of the key | 
|  | 664 | being added, corresponding to the value in the | 
|  | 665 | ``master_key_descriptor`` field of :c:type:`struct | 
|  | 666 | fscrypt_policy_v1`.  To add this type of key, the calling process | 
|  | 667 | must have the CAP_SYS_ADMIN capability in the initial user | 
|  | 668 | namespace. | 
|  | 669 |  | 
|  | 670 | Alternatively, if the key is being added for use by v2 encryption | 
|  | 671 | policies, then ``key_spec.type`` must contain | 
|  | 672 | FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER, and ``key_spec.u.identifier`` is | 
|  | 673 | an *output* field which the kernel fills in with a cryptographic | 
|  | 674 | hash of the key.  To add this type of key, the calling process does | 
|  | 675 | not need any privileges.  However, the number of keys that can be | 
|  | 676 | added is limited by the user's quota for the keyrings service (see | 
|  | 677 | ``Documentation/security/keys/core.rst``). | 
|  | 678 |  | 
|  | 679 | - ``raw_size`` must be the size of the ``raw`` key provided, in bytes. | 
|  | 680 |  | 
|  | 681 | - ``raw`` is a variable-length field which must contain the actual | 
|  | 682 | key, ``raw_size`` bytes long. | 
|  | 683 |  | 
|  | 684 | For v2 policy keys, the kernel keeps track of which user (identified | 
|  | 685 | by effective user ID) added the key, and only allows the key to be | 
|  | 686 | removed by that user --- or by "root", if they use | 
|  | 687 | `FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS`_. | 
|  | 688 |  | 
|  | 689 | However, if another user has added the key, it may be desirable to | 
|  | 690 | prevent that other user from unexpectedly removing it.  Therefore, | 
|  | 691 | FS_IOC_ADD_ENCRYPTION_KEY may also be used to add a v2 policy key | 
|  | 692 | *again*, even if it's already added by other user(s).  In this case, | 
|  | 693 | FS_IOC_ADD_ENCRYPTION_KEY will just install a claim to the key for the | 
|  | 694 | current user, rather than actually add the key again (but the raw key | 
|  | 695 | must still be provided, as a proof of knowledge). | 
|  | 696 |  | 
|  | 697 | FS_IOC_ADD_ENCRYPTION_KEY returns 0 if either the key or a claim to | 
|  | 698 | the key was either added or already exists. | 
|  | 699 |  | 
|  | 700 | FS_IOC_ADD_ENCRYPTION_KEY can fail with the following errors: | 
|  | 701 |  | 
|  | 702 | - ``EACCES``: FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR was specified, but the | 
|  | 703 | caller does not have the CAP_SYS_ADMIN capability in the initial | 
|  | 704 | user namespace | 
|  | 705 | - ``EDQUOT``: the key quota for this user would be exceeded by adding | 
|  | 706 | the key | 
|  | 707 | - ``EINVAL``: invalid key size or key specifier type, or reserved bits | 
|  | 708 | were set | 
|  | 709 | - ``ENOTTY``: this type of filesystem does not implement encryption | 
|  | 710 | - ``EOPNOTSUPP``: the kernel was not configured with encryption | 
|  | 711 | support for this filesystem, or the filesystem superblock has not | 
|  | 712 | had encryption enabled on it | 
|  | 713 |  | 
|  | 714 | Legacy method | 
|  | 715 | ~~~~~~~~~~~~~ | 
|  | 716 |  | 
|  | 717 | For v1 encryption policies, a master encryption key can also be | 
|  | 718 | provided by adding it to a process-subscribed keyring, e.g. to a | 
|  | 719 | session keyring, or to a user keyring if the user keyring is linked | 
|  | 720 | into the session keyring. | 
|  | 721 |  | 
|  | 722 | This method is deprecated (and not supported for v2 encryption | 
|  | 723 | policies) for several reasons.  First, it cannot be used in | 
|  | 724 | combination with FS_IOC_REMOVE_ENCRYPTION_KEY (see `Removing keys`_), | 
|  | 725 | so for removing a key a workaround such as keyctl_unlink() in | 
|  | 726 | combination with ``sync; echo 2 > /proc/sys/vm/drop_caches`` would | 
|  | 727 | have to be used.  Second, it doesn't match the fact that the | 
|  | 728 | locked/unlocked status of encrypted files (i.e. whether they appear to | 
|  | 729 | be in plaintext form or in ciphertext form) is global.  This mismatch | 
|  | 730 | has caused much confusion as well as real problems when processes | 
|  | 731 | running under different UIDs, such as a ``sudo`` command, need to | 
|  | 732 | access encrypted files. | 
|  | 733 |  | 
|  | 734 | Nevertheless, to add a key to one of the process-subscribed keyrings, | 
|  | 735 | the add_key() system call can be used (see: | 
|  | 736 | ``Documentation/security/keys/core.rst``).  The key type must be | 
|  | 737 | "logon"; keys of this type are kept in kernel memory and cannot be | 
|  | 738 | read back by userspace.  The key description must be "fscrypt:" | 
|  | 739 | followed by the 16-character lower case hex representation of the | 
|  | 740 | ``master_key_descriptor`` that was set in the encryption policy.  The | 
|  | 741 | key payload must conform to the following structure:: | 
|  | 742 |  | 
|  | 743 | #define FSCRYPT_MAX_KEY_SIZE            64 | 
|  | 744 |  | 
|  | 745 | struct fscrypt_key { | 
|  | 746 | __u32 mode; | 
|  | 747 | __u8 raw[FSCRYPT_MAX_KEY_SIZE]; | 
|  | 748 | __u32 size; | 
|  | 749 | }; | 
|  | 750 |  | 
|  | 751 | ``mode`` is ignored; just set it to 0.  The actual key is provided in | 
|  | 752 | ``raw`` with ``size`` indicating its size in bytes.  That is, the | 
|  | 753 | bytes ``raw[0..size-1]`` (inclusive) are the actual key. | 
|  | 754 |  | 
|  | 755 | The key description prefix "fscrypt:" may alternatively be replaced | 
|  | 756 | with a filesystem-specific prefix such as "ext4:".  However, the | 
|  | 757 | filesystem-specific prefixes are deprecated and should not be used in | 
|  | 758 | new programs. | 
|  | 759 |  | 
|  | 760 | Removing keys | 
|  | 761 | ------------- | 
|  | 762 |  | 
|  | 763 | Two ioctls are available for removing a key that was added by | 
|  | 764 | `FS_IOC_ADD_ENCRYPTION_KEY`_: | 
|  | 765 |  | 
|  | 766 | - `FS_IOC_REMOVE_ENCRYPTION_KEY`_ | 
|  | 767 | - `FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS`_ | 
|  | 768 |  | 
|  | 769 | These two ioctls differ only in cases where v2 policy keys are added | 
|  | 770 | or removed by non-root users. | 
|  | 771 |  | 
|  | 772 | These ioctls don't work on keys that were added via the legacy | 
|  | 773 | process-subscribed keyrings mechanism. | 
|  | 774 |  | 
|  | 775 | Before using these ioctls, read the `Kernel memory compromise`_ | 
|  | 776 | section for a discussion of the security goals and limitations of | 
|  | 777 | these ioctls. | 
|  | 778 |  | 
|  | 779 | FS_IOC_REMOVE_ENCRYPTION_KEY | 
|  | 780 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 781 |  | 
|  | 782 | The FS_IOC_REMOVE_ENCRYPTION_KEY ioctl removes a claim to a master | 
|  | 783 | encryption key from the filesystem, and possibly removes the key | 
|  | 784 | itself.  It can be executed on any file or directory on the target | 
|  | 785 | filesystem, but using the filesystem's root directory is recommended. | 
|  | 786 | It takes in a pointer to a :c:type:`struct fscrypt_remove_key_arg`, | 
|  | 787 | defined as follows:: | 
|  | 788 |  | 
|  | 789 | struct fscrypt_remove_key_arg { | 
|  | 790 | struct fscrypt_key_specifier key_spec; | 
|  | 791 | #define FSCRYPT_KEY_REMOVAL_STATUS_FLAG_FILES_BUSY      0x00000001 | 
|  | 792 | #define FSCRYPT_KEY_REMOVAL_STATUS_FLAG_OTHER_USERS     0x00000002 | 
|  | 793 | __u32 removal_status_flags;     /* output */ | 
|  | 794 | __u32 __reserved[5]; | 
|  | 795 | }; | 
|  | 796 |  | 
|  | 797 | This structure must be zeroed, then initialized as follows: | 
|  | 798 |  | 
|  | 799 | - The key to remove is specified by ``key_spec``: | 
|  | 800 |  | 
|  | 801 | - To remove a key used by v1 encryption policies, set | 
|  | 802 | ``key_spec.type`` to FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR and fill | 
|  | 803 | in ``key_spec.u.descriptor``.  To remove this type of key, the | 
|  | 804 | calling process must have the CAP_SYS_ADMIN capability in the | 
|  | 805 | initial user namespace. | 
|  | 806 |  | 
|  | 807 | - To remove a key used by v2 encryption policies, set | 
|  | 808 | ``key_spec.type`` to FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER and fill | 
|  | 809 | in ``key_spec.u.identifier``. | 
|  | 810 |  | 
|  | 811 | For v2 policy keys, this ioctl is usable by non-root users.  However, | 
|  | 812 | to make this possible, it actually just removes the current user's | 
|  | 813 | claim to the key, undoing a single call to FS_IOC_ADD_ENCRYPTION_KEY. | 
|  | 814 | Only after all claims are removed is the key really removed. | 
|  | 815 |  | 
|  | 816 | For example, if FS_IOC_ADD_ENCRYPTION_KEY was called with uid 1000, | 
|  | 817 | then the key will be "claimed" by uid 1000, and | 
|  | 818 | FS_IOC_REMOVE_ENCRYPTION_KEY will only succeed as uid 1000.  Or, if | 
|  | 819 | both uids 1000 and 2000 added the key, then for each uid | 
|  | 820 | FS_IOC_REMOVE_ENCRYPTION_KEY will only remove their own claim.  Only | 
|  | 821 | once *both* are removed is the key really removed.  (Think of it like | 
|  | 822 | unlinking a file that may have hard links.) | 
|  | 823 |  | 
|  | 824 | If FS_IOC_REMOVE_ENCRYPTION_KEY really removes the key, it will also | 
|  | 825 | try to "lock" all files that had been unlocked with the key.  It won't | 
|  | 826 | lock files that are still in-use, so this ioctl is expected to be used | 
|  | 827 | in cooperation with userspace ensuring that none of the files are | 
|  | 828 | still open.  However, if necessary, this ioctl can be executed again | 
|  | 829 | later to retry locking any remaining files. | 
|  | 830 |  | 
|  | 831 | FS_IOC_REMOVE_ENCRYPTION_KEY returns 0 if either the key was removed | 
|  | 832 | (but may still have files remaining to be locked), the user's claim to | 
|  | 833 | the key was removed, or the key was already removed but had files | 
|  | 834 | remaining to be the locked so the ioctl retried locking them.  In any | 
|  | 835 | of these cases, ``removal_status_flags`` is filled in with the | 
|  | 836 | following informational status flags: | 
|  | 837 |  | 
|  | 838 | - ``FSCRYPT_KEY_REMOVAL_STATUS_FLAG_FILES_BUSY``: set if some file(s) | 
|  | 839 | are still in-use.  Not guaranteed to be set in the case where only | 
|  | 840 | the user's claim to the key was removed. | 
|  | 841 | - ``FSCRYPT_KEY_REMOVAL_STATUS_FLAG_OTHER_USERS``: set if only the | 
|  | 842 | user's claim to the key was removed, not the key itself | 
|  | 843 |  | 
|  | 844 | FS_IOC_REMOVE_ENCRYPTION_KEY can fail with the following errors: | 
|  | 845 |  | 
|  | 846 | - ``EACCES``: The FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR key specifier type | 
|  | 847 | was specified, but the caller does not have the CAP_SYS_ADMIN | 
|  | 848 | capability in the initial user namespace | 
|  | 849 | - ``EINVAL``: invalid key specifier type, or reserved bits were set | 
|  | 850 | - ``ENOKEY``: the key object was not found at all, i.e. it was never | 
|  | 851 | added in the first place or was already fully removed including all | 
|  | 852 | files locked; or, the user does not have a claim to the key (but | 
|  | 853 | someone else does). | 
|  | 854 | - ``ENOTTY``: this type of filesystem does not implement encryption | 
|  | 855 | - ``EOPNOTSUPP``: the kernel was not configured with encryption | 
|  | 856 | support for this filesystem, or the filesystem superblock has not | 
|  | 857 | had encryption enabled on it | 
|  | 858 |  | 
|  | 859 | FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS | 
|  | 860 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 861 |  | 
|  | 862 | FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS is exactly the same as | 
|  | 863 | `FS_IOC_REMOVE_ENCRYPTION_KEY`_, except that for v2 policy keys, the | 
|  | 864 | ALL_USERS version of the ioctl will remove all users' claims to the | 
|  | 865 | key, not just the current user's.  I.e., the key itself will always be | 
|  | 866 | removed, no matter how many users have added it.  This difference is | 
|  | 867 | only meaningful if non-root users are adding and removing keys. | 
|  | 868 |  | 
|  | 869 | Because of this, FS_IOC_REMOVE_ENCRYPTION_KEY_ALL_USERS also requires | 
|  | 870 | "root", namely the CAP_SYS_ADMIN capability in the initial user | 
|  | 871 | namespace.  Otherwise it will fail with EACCES. | 
|  | 872 |  | 
|  | 873 | Getting key status | 
|  | 874 | ------------------ | 
|  | 875 |  | 
|  | 876 | FS_IOC_GET_ENCRYPTION_KEY_STATUS | 
|  | 877 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 
|  | 878 |  | 
|  | 879 | The FS_IOC_GET_ENCRYPTION_KEY_STATUS ioctl retrieves the status of a | 
|  | 880 | master encryption key.  It can be executed on any file or directory on | 
|  | 881 | the target filesystem, but using the filesystem's root directory is | 
|  | 882 | recommended.  It takes in a pointer to a :c:type:`struct | 
|  | 883 | fscrypt_get_key_status_arg`, defined as follows:: | 
|  | 884 |  | 
|  | 885 | struct fscrypt_get_key_status_arg { | 
|  | 886 | /* input */ | 
|  | 887 | struct fscrypt_key_specifier key_spec; | 
|  | 888 | __u32 __reserved[6]; | 
|  | 889 |  | 
|  | 890 | /* output */ | 
|  | 891 | #define FSCRYPT_KEY_STATUS_ABSENT               1 | 
|  | 892 | #define FSCRYPT_KEY_STATUS_PRESENT              2 | 
|  | 893 | #define FSCRYPT_KEY_STATUS_INCOMPLETELY_REMOVED 3 | 
|  | 894 | __u32 status; | 
|  | 895 | #define FSCRYPT_KEY_STATUS_FLAG_ADDED_BY_SELF   0x00000001 | 
|  | 896 | __u32 status_flags; | 
|  | 897 | __u32 user_count; | 
|  | 898 | __u32 __out_reserved[13]; | 
|  | 899 | }; | 
|  | 900 |  | 
|  | 901 | The caller must zero all input fields, then fill in ``key_spec``: | 
|  | 902 |  | 
|  | 903 | - To get the status of a key for v1 encryption policies, set | 
|  | 904 | ``key_spec.type`` to FSCRYPT_KEY_SPEC_TYPE_DESCRIPTOR and fill | 
|  | 905 | in ``key_spec.u.descriptor``. | 
|  | 906 |  | 
|  | 907 | - To get the status of a key for v2 encryption policies, set | 
|  | 908 | ``key_spec.type`` to FSCRYPT_KEY_SPEC_TYPE_IDENTIFIER and fill | 
|  | 909 | in ``key_spec.u.identifier``. | 
|  | 910 |  | 
|  | 911 | On success, 0 is returned and the kernel fills in the output fields: | 
|  | 912 |  | 
|  | 913 | - ``status`` indicates whether the key is absent, present, or | 
|  | 914 | incompletely removed.  Incompletely removed means that the master | 
|  | 915 | secret has been removed, but some files are still in use; i.e., | 
|  | 916 | `FS_IOC_REMOVE_ENCRYPTION_KEY`_ returned 0 but set the informational | 
|  | 917 | status flag FSCRYPT_KEY_REMOVAL_STATUS_FLAG_FILES_BUSY. | 
|  | 918 |  | 
|  | 919 | - ``status_flags`` can contain the following flags: | 
|  | 920 |  | 
|  | 921 | - ``FSCRYPT_KEY_STATUS_FLAG_ADDED_BY_SELF`` indicates that the key | 
|  | 922 | has added by the current user.  This is only set for keys | 
|  | 923 | identified by ``identifier`` rather than by ``descriptor``. | 
|  | 924 |  | 
|  | 925 | - ``user_count`` specifies the number of users who have added the key. | 
|  | 926 | This is only set for keys identified by ``identifier`` rather than | 
|  | 927 | by ``descriptor``. | 
|  | 928 |  | 
|  | 929 | FS_IOC_GET_ENCRYPTION_KEY_STATUS can fail with the following errors: | 
|  | 930 |  | 
|  | 931 | - ``EINVAL``: invalid key specifier type, or reserved bits were set | 
|  | 932 | - ``ENOTTY``: this type of filesystem does not implement encryption | 
|  | 933 | - ``EOPNOTSUPP``: the kernel was not configured with encryption | 
|  | 934 | support for this filesystem, or the filesystem superblock has not | 
|  | 935 | had encryption enabled on it | 
|  | 936 |  | 
|  | 937 | Among other use cases, FS_IOC_GET_ENCRYPTION_KEY_STATUS can be useful | 
|  | 938 | for determining whether the key for a given encrypted directory needs | 
|  | 939 | to be added before prompting the user for the passphrase needed to | 
|  | 940 | derive the key. | 
|  | 941 |  | 
|  | 942 | FS_IOC_GET_ENCRYPTION_KEY_STATUS can only get the status of keys in | 
|  | 943 | the filesystem-level keyring, i.e. the keyring managed by | 
|  | 944 | `FS_IOC_ADD_ENCRYPTION_KEY`_ and `FS_IOC_REMOVE_ENCRYPTION_KEY`_.  It | 
|  | 945 | cannot get the status of a key that has only been added for use by v1 | 
|  | 946 | encryption policies using the legacy mechanism involving | 
|  | 947 | process-subscribed keyrings. | 
|  | 948 |  | 
|  | 949 | Access semantics | 
|  | 950 | ================ | 
|  | 951 |  | 
|  | 952 | With the key | 
|  | 953 | ------------ | 
|  | 954 |  | 
|  | 955 | With the encryption key, encrypted regular files, directories, and | 
|  | 956 | symlinks behave very similarly to their unencrypted counterparts --- | 
|  | 957 | after all, the encryption is intended to be transparent.  However, | 
|  | 958 | astute users may notice some differences in behavior: | 
|  | 959 |  | 
|  | 960 | - Unencrypted files, or files encrypted with a different encryption | 
|  | 961 | policy (i.e. different key, modes, or flags), cannot be renamed or | 
|  | 962 | linked into an encrypted directory; see `Encryption policy | 
|  | 963 | enforcement`_.  Attempts to do so will fail with EXDEV.  However, | 
|  | 964 | encrypted files can be renamed within an encrypted directory, or | 
|  | 965 | into an unencrypted directory. | 
|  | 966 |  | 
|  | 967 | Note: "moving" an unencrypted file into an encrypted directory, e.g. | 
|  | 968 | with the `mv` program, is implemented in userspace by a copy | 
|  | 969 | followed by a delete.  Be aware that the original unencrypted data | 
|  | 970 | may remain recoverable from free space on the disk; prefer to keep | 
|  | 971 | all files encrypted from the very beginning.  The `shred` program | 
|  | 972 | may be used to overwrite the source files but isn't guaranteed to be | 
|  | 973 | effective on all filesystems and storage devices. | 
|  | 974 |  | 
|  | 975 | - Direct I/O is not supported on encrypted files.  Attempts to use | 
|  | 976 | direct I/O on such files will fall back to buffered I/O. | 
|  | 977 |  | 
|  | 978 | - The fallocate operations FALLOC_FL_COLLAPSE_RANGE, | 
|  | 979 | FALLOC_FL_INSERT_RANGE, and FALLOC_FL_ZERO_RANGE are not supported | 
|  | 980 | on encrypted files and will fail with EOPNOTSUPP. | 
|  | 981 |  | 
|  | 982 | - Online defragmentation of encrypted files is not supported.  The | 
|  | 983 | EXT4_IOC_MOVE_EXT and F2FS_IOC_MOVE_RANGE ioctls will fail with | 
|  | 984 | EOPNOTSUPP. | 
|  | 985 |  | 
|  | 986 | - The ext4 filesystem does not support data journaling with encrypted | 
|  | 987 | regular files.  It will fall back to ordered data mode instead. | 
|  | 988 |  | 
|  | 989 | - DAX (Direct Access) is not supported on encrypted files. | 
|  | 990 |  | 
|  | 991 | - The st_size of an encrypted symlink will not necessarily give the | 
|  | 992 | length of the symlink target as required by POSIX.  It will actually | 
|  | 993 | give the length of the ciphertext, which will be slightly longer | 
|  | 994 | than the plaintext due to NUL-padding and an extra 2-byte overhead. | 
|  | 995 |  | 
|  | 996 | - The maximum length of an encrypted symlink is 2 bytes shorter than | 
|  | 997 | the maximum length of an unencrypted symlink.  For example, on an | 
|  | 998 | EXT4 filesystem with a 4K block size, unencrypted symlinks can be up | 
|  | 999 | to 4095 bytes long, while encrypted symlinks can only be up to 4093 | 
|  | 1000 | bytes long (both lengths excluding the terminating null). | 
|  | 1001 |  | 
|  | 1002 | Note that mmap *is* supported.  This is possible because the pagecache | 
|  | 1003 | for an encrypted file contains the plaintext, not the ciphertext. | 
|  | 1004 |  | 
|  | 1005 | Without the key | 
|  | 1006 | --------------- | 
|  | 1007 |  | 
|  | 1008 | Some filesystem operations may be performed on encrypted regular | 
|  | 1009 | files, directories, and symlinks even before their encryption key has | 
|  | 1010 | been added, or after their encryption key has been removed: | 
|  | 1011 |  | 
|  | 1012 | - File metadata may be read, e.g. using stat(). | 
|  | 1013 |  | 
|  | 1014 | - Directories may be listed, in which case the filenames will be | 
|  | 1015 | listed in an encoded form derived from their ciphertext.  The | 
|  | 1016 | current encoding algorithm is described in `Filename hashing and | 
|  | 1017 | encoding`_.  The algorithm is subject to change, but it is | 
|  | 1018 | guaranteed that the presented filenames will be no longer than | 
|  | 1019 | NAME_MAX bytes, will not contain the ``/`` or ``\0`` characters, and | 
|  | 1020 | will uniquely identify directory entries. | 
|  | 1021 |  | 
|  | 1022 | The ``.`` and ``..`` directory entries are special.  They are always | 
|  | 1023 | present and are not encrypted or encoded. | 
|  | 1024 |  | 
|  | 1025 | - Files may be deleted.  That is, nondirectory files may be deleted | 
|  | 1026 | with unlink() as usual, and empty directories may be deleted with | 
|  | 1027 | rmdir() as usual.  Therefore, ``rm`` and ``rm -r`` will work as | 
|  | 1028 | expected. | 
|  | 1029 |  | 
|  | 1030 | - Symlink targets may be read and followed, but they will be presented | 
|  | 1031 | in encrypted form, similar to filenames in directories.  Hence, they | 
|  | 1032 | are unlikely to point to anywhere useful. | 
|  | 1033 |  | 
|  | 1034 | Without the key, regular files cannot be opened or truncated. | 
|  | 1035 | Attempts to do so will fail with ENOKEY.  This implies that any | 
|  | 1036 | regular file operations that require a file descriptor, such as | 
|  | 1037 | read(), write(), mmap(), fallocate(), and ioctl(), are also forbidden. | 
|  | 1038 |  | 
|  | 1039 | Also without the key, files of any type (including directories) cannot | 
|  | 1040 | be created or linked into an encrypted directory, nor can a name in an | 
|  | 1041 | encrypted directory be the source or target of a rename, nor can an | 
|  | 1042 | O_TMPFILE temporary file be created in an encrypted directory.  All | 
|  | 1043 | such operations will fail with ENOKEY. | 
|  | 1044 |  | 
|  | 1045 | It is not currently possible to backup and restore encrypted files | 
|  | 1046 | without the encryption key.  This would require special APIs which | 
|  | 1047 | have not yet been implemented. | 
|  | 1048 |  | 
|  | 1049 | Encryption policy enforcement | 
|  | 1050 | ============================= | 
|  | 1051 |  | 
|  | 1052 | After an encryption policy has been set on a directory, all regular | 
|  | 1053 | files, directories, and symbolic links created in that directory | 
|  | 1054 | (recursively) will inherit that encryption policy.  Special files --- | 
|  | 1055 | that is, named pipes, device nodes, and UNIX domain sockets --- will | 
|  | 1056 | not be encrypted. | 
|  | 1057 |  | 
|  | 1058 | Except for those special files, it is forbidden to have unencrypted | 
|  | 1059 | files, or files encrypted with a different encryption policy, in an | 
|  | 1060 | encrypted directory tree.  Attempts to link or rename such a file into | 
|  | 1061 | an encrypted directory will fail with EXDEV.  This is also enforced | 
|  | 1062 | during ->lookup() to provide limited protection against offline | 
|  | 1063 | attacks that try to disable or downgrade encryption in known locations | 
|  | 1064 | where applications may later write sensitive data.  It is recommended | 
|  | 1065 | that systems implementing a form of "verified boot" take advantage of | 
|  | 1066 | this by validating all top-level encryption policies prior to access. | 
|  | 1067 |  | 
|  | 1068 | Implementation details | 
|  | 1069 | ====================== | 
|  | 1070 |  | 
|  | 1071 | Encryption context | 
|  | 1072 | ------------------ | 
|  | 1073 |  | 
|  | 1074 | An encryption policy is represented on-disk by a :c:type:`struct | 
|  | 1075 | fscrypt_context_v1` or a :c:type:`struct fscrypt_context_v2`.  It is | 
|  | 1076 | up to individual filesystems to decide where to store it, but normally | 
|  | 1077 | it would be stored in a hidden extended attribute.  It should *not* be | 
|  | 1078 | exposed by the xattr-related system calls such as getxattr() and | 
|  | 1079 | setxattr() because of the special semantics of the encryption xattr. | 
|  | 1080 | (In particular, there would be much confusion if an encryption policy | 
|  | 1081 | were to be added to or removed from anything other than an empty | 
|  | 1082 | directory.)  These structs are defined as follows:: | 
|  | 1083 |  | 
|  | 1084 | #define FS_KEY_DERIVATION_NONCE_SIZE 16 | 
|  | 1085 |  | 
|  | 1086 | #define FSCRYPT_KEY_DESCRIPTOR_SIZE  8 | 
|  | 1087 | struct fscrypt_context_v1 { | 
|  | 1088 | u8 version; | 
|  | 1089 | u8 contents_encryption_mode; | 
|  | 1090 | u8 filenames_encryption_mode; | 
|  | 1091 | u8 flags; | 
|  | 1092 | u8 master_key_descriptor[FSCRYPT_KEY_DESCRIPTOR_SIZE]; | 
|  | 1093 | u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE]; | 
|  | 1094 | }; | 
|  | 1095 |  | 
|  | 1096 | #define FSCRYPT_KEY_IDENTIFIER_SIZE  16 | 
|  | 1097 | struct fscrypt_context_v2 { | 
|  | 1098 | u8 version; | 
|  | 1099 | u8 contents_encryption_mode; | 
|  | 1100 | u8 filenames_encryption_mode; | 
|  | 1101 | u8 flags; | 
|  | 1102 | u8 __reserved[4]; | 
|  | 1103 | u8 master_key_identifier[FSCRYPT_KEY_IDENTIFIER_SIZE]; | 
|  | 1104 | u8 nonce[FS_KEY_DERIVATION_NONCE_SIZE]; | 
|  | 1105 | }; | 
|  | 1106 |  | 
|  | 1107 | The context structs contain the same information as the corresponding | 
|  | 1108 | policy structs (see `Setting an encryption policy`_), except that the | 
|  | 1109 | context structs also contain a nonce.  The nonce is randomly generated | 
|  | 1110 | by the kernel and is used as KDF input or as a tweak to cause | 
|  | 1111 | different files to be encrypted differently; see `Per-file keys`_ and | 
|  | 1112 | `DIRECT_KEY policies`_. | 
|  | 1113 |  | 
|  | 1114 | Data path changes | 
|  | 1115 | ----------------- | 
|  | 1116 |  | 
|  | 1117 | For the read path (->readpage()) of regular files, filesystems can | 
|  | 1118 | read the ciphertext into the page cache and decrypt it in-place.  The | 
|  | 1119 | page lock must be held until decryption has finished, to prevent the | 
|  | 1120 | page from becoming visible to userspace prematurely. | 
|  | 1121 |  | 
|  | 1122 | For the write path (->writepage()) of regular files, filesystems | 
|  | 1123 | cannot encrypt data in-place in the page cache, since the cached | 
|  | 1124 | plaintext must be preserved.  Instead, filesystems must encrypt into a | 
|  | 1125 | temporary buffer or "bounce page", then write out the temporary | 
|  | 1126 | buffer.  Some filesystems, such as UBIFS, already use temporary | 
|  | 1127 | buffers regardless of encryption.  Other filesystems, such as ext4 and | 
|  | 1128 | F2FS, have to allocate bounce pages specially for encryption. | 
|  | 1129 |  | 
|  | 1130 | Filename hashing and encoding | 
|  | 1131 | ----------------------------- | 
|  | 1132 |  | 
|  | 1133 | Modern filesystems accelerate directory lookups by using indexed | 
|  | 1134 | directories.  An indexed directory is organized as a tree keyed by | 
|  | 1135 | filename hashes.  When a ->lookup() is requested, the filesystem | 
|  | 1136 | normally hashes the filename being looked up so that it can quickly | 
|  | 1137 | find the corresponding directory entry, if any. | 
|  | 1138 |  | 
|  | 1139 | With encryption, lookups must be supported and efficient both with and | 
|  | 1140 | without the encryption key.  Clearly, it would not work to hash the | 
|  | 1141 | plaintext filenames, since the plaintext filenames are unavailable | 
|  | 1142 | without the key.  (Hashing the plaintext filenames would also make it | 
|  | 1143 | impossible for the filesystem's fsck tool to optimize encrypted | 
|  | 1144 | directories.)  Instead, filesystems hash the ciphertext filenames, | 
|  | 1145 | i.e. the bytes actually stored on-disk in the directory entries.  When | 
|  | 1146 | asked to do a ->lookup() with the key, the filesystem just encrypts | 
|  | 1147 | the user-supplied name to get the ciphertext. | 
|  | 1148 |  | 
|  | 1149 | Lookups without the key are more complicated.  The raw ciphertext may | 
|  | 1150 | contain the ``\0`` and ``/`` characters, which are illegal in | 
|  | 1151 | filenames.  Therefore, readdir() must base64-encode the ciphertext for | 
|  | 1152 | presentation.  For most filenames, this works fine; on ->lookup(), the | 
|  | 1153 | filesystem just base64-decodes the user-supplied name to get back to | 
|  | 1154 | the raw ciphertext. | 
|  | 1155 |  | 
|  | 1156 | However, for very long filenames, base64 encoding would cause the | 
|  | 1157 | filename length to exceed NAME_MAX.  To prevent this, readdir() | 
|  | 1158 | actually presents long filenames in an abbreviated form which encodes | 
|  | 1159 | a strong "hash" of the ciphertext filename, along with the optional | 
|  | 1160 | filesystem-specific hash(es) needed for directory lookups.  This | 
|  | 1161 | allows the filesystem to still, with a high degree of confidence, map | 
|  | 1162 | the filename given in ->lookup() back to a particular directory entry | 
|  | 1163 | that was previously listed by readdir().  See :c:type:`struct | 
|  | 1164 | fscrypt_digested_name` in the source for more details. | 
|  | 1165 |  | 
|  | 1166 | Note that the precise way that filenames are presented to userspace | 
|  | 1167 | without the key is subject to change in the future.  It is only meant | 
|  | 1168 | as a way to temporarily present valid filenames so that commands like | 
|  | 1169 | ``rm -r`` work as expected on encrypted directories. | 
|  | 1170 |  | 
|  | 1171 | Tests | 
|  | 1172 | ===== | 
|  | 1173 |  | 
|  | 1174 | To test fscrypt, use xfstests, which is Linux's de facto standard | 
|  | 1175 | filesystem test suite.  First, run all the tests in the "encrypt" | 
|  | 1176 | group on the relevant filesystem(s).  For example, to test ext4 and | 
|  | 1177 | f2fs encryption using `kvm-xfstests | 
|  | 1178 | <https://github.com/tytso/xfstests-bld/blob/master/Documentation/kvm-quickstart.md>`_:: | 
|  | 1179 |  | 
|  | 1180 | kvm-xfstests -c ext4,f2fs -g encrypt | 
|  | 1181 |  | 
|  | 1182 | UBIFS encryption can also be tested this way, but it should be done in | 
|  | 1183 | a separate command, and it takes some time for kvm-xfstests to set up | 
|  | 1184 | emulated UBI volumes:: | 
|  | 1185 |  | 
|  | 1186 | kvm-xfstests -c ubifs -g encrypt | 
|  | 1187 |  | 
|  | 1188 | No tests should fail.  However, tests that use non-default encryption | 
|  | 1189 | modes (e.g. generic/549 and generic/550) will be skipped if the needed | 
|  | 1190 | algorithms were not built into the kernel's crypto API.  Also, tests | 
|  | 1191 | that access the raw block device (e.g. generic/399, generic/548, | 
|  | 1192 | generic/549, generic/550) will be skipped on UBIFS. | 
|  | 1193 |  | 
|  | 1194 | Besides running the "encrypt" group tests, for ext4 and f2fs it's also | 
|  | 1195 | possible to run most xfstests with the "test_dummy_encryption" mount | 
|  | 1196 | option.  This option causes all new files to be automatically | 
|  | 1197 | encrypted with a dummy key, without having to make any API calls. | 
|  | 1198 | This tests the encrypted I/O paths more thoroughly.  To do this with | 
|  | 1199 | kvm-xfstests, use the "encrypt" filesystem configuration:: | 
|  | 1200 |  | 
|  | 1201 | kvm-xfstests -c ext4/encrypt,f2fs/encrypt -g auto | 
|  | 1202 |  | 
|  | 1203 | Because this runs many more tests than "-g encrypt" does, it takes | 
|  | 1204 | much longer to run; so also consider using `gce-xfstests | 
|  | 1205 | <https://github.com/tytso/xfstests-bld/blob/master/Documentation/gce-xfstests.md>`_ | 
|  | 1206 | instead of kvm-xfstests:: | 
|  | 1207 |  | 
|  | 1208 | gce-xfstests -c ext4/encrypt,f2fs/encrypt -g auto |