Cryptsetup 2.0.6 Release Notes ============================== Stable bug-fix release. All users of cryptsetup 2.0.x should upgrade to this version. Cryptsetup 2.x version introduces a new on-disk LUKS2 format. The legacy LUKS (referenced as LUKS1) will be fully supported forever as well as a traditional and fully backward compatible format. Please note that authenticated disk encryption, non-cryptographic data integrity protection (dm-integrity), use of Argon2 Password-Based Key Derivation Function and the LUKS2 on-disk format itself are new features and can contain some bugs. Please do not use LUKS2 without properly configured backup or in production systems that need to be compatible with older systems. Changes since version 2.0.5 ~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Fix support of larger metadata areas in LUKS2 header. This release properly supports all specified metadata areas, as documented in LUKS2 format description (see docs/on-disk-format-luks2.pdf in archive). Currently, only default metadata area size is used (in format or convert). Later cryptsetup versions will allow increasing this metadata area size. * If AEAD (authenticated encryption) is used, cryptsetup now tries to check if the requested AEAD algorithm with specified key size is available in kernel crypto API. This change avoids formatting a device that cannot be later activated. For this function, the kernel must be compiled with the CONFIG_CRYPTO_USER_API_AEAD option enabled. Note that kernel user crypto API options (CONFIG_CRYPTO_USER_API and CONFIG_CRYPTO_USER_API_SKCIPHER) are already mandatory for LUKS2. * Fix setting of integrity no-journal flag. Now you can store this flag to metadata using --persistent option. * Fix cryptsetup-reencrypt to not keep temporary reencryption headers if interrupted during initial password prompt. * Adds early check to plain and LUKS2 formats to disallow device format if device size is not aligned to requested sector size. Previously it was possible, and the device was rejected to activate by kernel later. * Fix checking of hash algorithms availability for PBKDF early. Previously LUKS2 format allowed non-existent hash algorithm with invalid keyslot preventing the device from activation. * Allow Adiantum cipher construction (a non-authenticated length-preserving fast encryption scheme), so it can be used both for data encryption and keyslot encryption in LUKS1/2 devices. For benchmark, use: # cryptsetup benchmark -c xchacha12,aes-adiantum # cryptsetup benchmark -c xchacha20,aes-adiantum For LUKS format: # cryptsetup luksFormat -c xchacha20,aes-adiantum-plain64 -s 256 The support for Adiantum will be merged in Linux kernel 4.21. For more info see the paper https://eprint.iacr.org/2018/720. Unfinished things & TODO for next releases ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Authenticated encryption should use new algorithms from CAESAR competition https://competitions.cr.yp.to/caesar-submissions.html. AEGIS and MORUS are already available in kernel 4.18. For more info about LUKS2 authenticated encryption, please see our paper https://arxiv.org/abs/1807.00309 Please note that authenticated encryption is still an experimental feature and can have performance problems for high-speed devices and device with larger IO blocks (like RAID). * Authenticated encryption do not set encryption for a dm-integrity journal. While it does not influence data confidentiality or integrity protection, an attacker can get some more information from data journal or cause that system will corrupt sectors after journal replay. (That corruption will be detected though.) * There are examples of user-defined tokens inside misc/luks2_keyslot_example directory (like a simple external program that uses libssh to unlock LUKS2 using remote keyfile). * The python binding (pycryptsetup) contains only basic functionality for LUKS1 (it is not updated for new features) and will be REMOVED in version 2.1 in favor of python bindings to the libblockdev library. See https://github.com/storaged-project/libblockdev/releases that already supports LUKS2 and VeraCrypt devices handling through libcryptsetup.