030a1b4aa68c65ae5ffc3d29e3992a3b82ecafad
[platform/upstream/cryptsetup.git] / docs / v2.0.3-ReleaseNotes
1 Cryptsetup 2.0.3 Release Notes
2 ==============================
3 Stable bug-fix release with new features.
4
5 Cryptsetup 2.x version introduces a new on-disk LUKS2 format.
6
7 The legacy LUKS (referenced as LUKS1) will be fully supported
8 forever as well as a traditional and fully backward compatible format.
9
10 Please note that authenticated disk encryption, non-cryptographic
11 data integrity protection (dm-integrity), use of Argon2 Password-Based
12 Key Derivation Function and the LUKS2 on-disk format itself are new
13 features and can contain some bugs.
14
15 To provide all security features of authenticated encryption, we need
16 a better nonce-reuse resistant algorithm in the kernel (see note below).
17 For now, please use authenticated encryption as an experimental feature.
18
19 Please do not use LUKS2 without properly configured backup or in
20 production systems that need to be compatible with older systems.
21
22 Changes since version 2.0.2
23 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
24
25 * Expose interface to unbound LUKS2 keyslots.
26   Unbound LUKS2 keyslot allows storing a key material that is independent
27   of master volume key (it is not bound to encrypted data segment).
28
29 * New API extensions for unbound keyslots (LUKS2 only)
30   crypt_keyslot_get_key_size() and crypt_volume_key_get()
31   These functions allow to get key and key size for unbound keyslots.
32
33 * New enum value CRYPT_SLOT_UNBOUND for keyslot status (LUKS2 only).
34
35 * Add --unbound keyslot option to the cryptsetup luksAddKey command.
36
37 * Add crypt_get_active_integrity_failures() call to get integrity
38   failure count for dm-integrity devices.
39
40 * Add crypt_get_pbkdf_default() function to get per-type PBKDF default
41   setting.
42
43 * Add new flag to crypt_keyslot_add_by_key() to force update device
44   volume key. This call is mainly intended for a wrapped key change.
45
46 * Allow volume key store in a file with cryptsetup.
47   The --dump-master-key together with --master-key-file allows cryptsetup
48   to store the binary volume key to a file instead of standard output.
49
50 * Add support detached header for cryptsetup-reencrypt command.
51
52 * Fix VeraCrypt PIM handling - use proper iterations count formula
53   for PBKDF2-SHA512 and PBKDF2-Whirlpool used in system volumes.
54
55 * Fix cryptsetup tcryptDump for VeraCrypt PIM (support --veracrypt-pim).
56
57 * Add --with-default-luks-format configure time option.
58   (Option to override default LUKS format version.)
59
60 * Fix LUKS version conversion for detached (and trimmed) LUKS headers.
61
62 * Add luksConvertKey cryptsetup command that converts specific keyslot
63   from one PBKDF to another.
64
65 * Do not allow conversion to LUKS2 if LUKSMETA (external tool metadata)
66   header is detected.
67
68 * More cleanup and hardening of LUKS2 keyslot specific validation options.
69   Add more checks for cipher validity before writing metadata on-disk.
70
71 * Do not allow LUKS1 version downconversion if the header contains tokens.
72
73 * Add "paes" family ciphers (AES wrapped key scheme for mainframes)
74   to allowed ciphers.
75   Specific wrapped ley configuration logic must be done by 3rd party tool,
76   LUKS2 stores only keyslot material and allow activation of the device.
77
78 * Add support for --check-at-most-once option (kernel 4.17) to veritysetup.
79   This flag can be dangerous; if you can control underlying device
80   (you can change its content after it was verified) it will no longer
81   prevent reading tampered data and also it does not prevent silent
82   data corruptions that appear after the block was once read.
83
84 * Fix return code (EPERM instead of EINVAL) and retry count for bad
85   passphrase on non-tty input.
86
87 * Enable support for FEC decoding in veritysetup to check dm-verity devices
88   with additional Reed-Solomon code in userspace (verify command).
89
90 Unfinished things & TODO for next releases
91 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
92 * There will be better documentation and examples (planned for 2.0.4).
93
94 * There will be some more formal definition of the threat model for integrity
95   protection. (And a link to some papers discussing integrity protection,
96   once it is, hopefully, accepted and published.)
97
98 * Authenticated encryption will use new algorithms from CAESAR competition
99   https://competitions.cr.yp.to/caesar-submissions.html.
100   We plan to use AEGIS and MORUS, as CAESAR finalists.
101
102   NOTE: Currently available authenticated modes (GCM, Chacha20-poly1305)
103   in the kernel have too small 96-bit nonces that are problematic with
104   randomly generated IVs (the collision probability is not negligible).
105
106 * Authenticated encryption do not set encryption for a dm-integrity journal.
107
108   While it does not influence data confidentiality or integrity protection,
109   an attacker can get some more information from data journal or cause that
110   system will corrupt sectors after journal replay. (That corruption will be
111   detected though.)
112
113 * There are examples of user-defined tokens inside misc/luks2_keyslot_example
114   directory (like a simple external program that uses libssh to unlock LUKS2
115   using remote keyfile).
116
117 * The python binding (pycryptsetup) contains only basic functionality for LUKS1
118   (it is not updated for new features) and will be REMOVED in version 2.1
119   in favor of python bindings to the libblockdev library.
120   See https://github.com/storaged-project/libblockdev/releases/tag/2.17-1 that
121   already supports LUKS2 and VeraCrypt devices handling through libcryptsetup.