| Cryptsetup 1.6.0 Release Notes | |
| ============================== | |
| Changes since version 1.6.0-rc1 | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| * Change LUKS default cipher to to use XTS encryption mode, | |
| aes-xts-plain64 (i.e. using AES128-XTS). | |
| XTS mode becomes standard in hard disk encryption. | |
| You can still use any old mode: | |
| - compile cryptsetup with old default: | |
| configure --with-luks1-cipher=aes --with-luks1-mode=cbc-essiv:sha256 --with-luks1-keybits=256 | |
| - format LUKS device with old default: | |
| cryptsetup luksFormat -c aes-cbc-essiv:sha256 -s 256 <device> | |
| * Skip tests and fix error messages if running on old systems (or with old kernel). | |
| * Rename configure.in to configure.ac and fix issues with new automake and pkgconfig | |
| and --disable-kernel_crypto option to allow compilation with old kernel headers. | |
| * Allow repair of 512 bits key header. | |
| * Fix status of device if path argument is used and fix double path prefix | |
| for non-existent device path. | |
| Changes since version 1.5.1 | |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |
| Important changes | |
| ~~~~~~~~~~~~~~~~~ | |
| * Cryptsetup and libcryptsetup is now released under GPLv2+ | |
| (GPL version 2 or any later). | |
| Some internal code handling files (loopaes, verity, tcrypt | |
| and crypto backend wrapper) are LGPLv2+. | |
| Previously code was GPL version 2 only. | |
| * Introducing new unified command open and close. | |
| Example: | |
| cryptsetup open --type plain|luks|loopaes|tcrypt <device> <name> | |
| (type defaults to luks) | |
| with backward-compatible aliases plainOpen, luksOpen, loopaesOpen, | |
| tcryptOpen. Basically "open --type xyz" has alias "xyzOpen". | |
| The "create" command (plain device create) is DEPRECATED but will | |
| be still supported. | |
| (This command is confusing because of switched arguments order.) | |
| The close command is generic command to remove mapping and have | |
| backward compatible aliases (remove, luksClose, ...) which behaves | |
| exactly the same. | |
| While all old syntax is still supported, I strongly suggest to use | |
| new command syntax which is common for all device types (and possible | |
| new formats added in future). | |
| * cryptsetup now support directly TCRYPT (TrueCrypt and compatible tc-play) | |
| on-disk format | |
| (Code is independent implementation not related to original project). | |
| Only dump (tcryptDump command) and activation (open --type tcrypt or tcryptOpen) | |
| of TCRYPT device are supported. No header changes are supported. | |
| It is intended to easily access containers shared with other operating systems | |
| without need to install 3rd party software. For native Linux installations LUKS | |
| is the preferred format. | |
| WARNING: TCRYPT extension requires kernel userspace crypto API to be | |
| available (introduced in Linux kernel 2.6.38). | |
| If you are configuring kernel yourself, enable "User-space interface | |
| for symmetric key cipher algorithms" in "Cryptographic API" section | |
| (CRYPTO_USER_API_SKCIPHER .config option). | |
| Because TCRYPT header is encrypted, you have to always provide valid | |
| passphrase and keyfiles. Keyfiles are handled exactly the same as in original | |
| format (basically, first 1MB of every keyfile is mixed using CRC32 into pool). | |
| Cryptsetup should recognize all TCRYPT header variants ever released, except | |
| legacy cipher chains using LRW encryption mode with 64 bits encryption block | |
| (namely Blowfish in LRW mode is not recognized, this is limitation of kernel | |
| crypto API). | |
| Device activation is supported only for LRW/XTS modes (again, limitation | |
| of kernel dmcrypt which do not implements TCRYPT extensions to CBC mode). | |
| (So old containers cannot be activated, but you can use libcryptsetup | |
| for lost password search, example of such code is included in misc directory.) | |
| Hidden header are supported using --tcrypt-hidden option, system encryption | |
| using --tcrypt-system option. | |
| For detailed description see man page. | |
| EXAMPLE: | |
| * Dump device parameters of container in file: | |
| # cryptsetup tcryptDump tst | |
| Enter passphrase: | |
| TCRYPT header information for tst | |
| Version: 5 | |
| Driver req.: 7 | |
| Sector size: 512 | |
| MK offset: 131072 | |
| PBKDF2 hash: sha512 | |
| Cipher chain: serpent-twofish-aes | |
| Cipher mode: xts-plain64 | |
| MK bits: 1536 | |
| You can also dump master key using --dump-master-key. | |
| Dump does not require superuser privilege. | |
| * Activation of this container | |
| # cryptsetup tcryptOpen tst tcrypt_dev | |
| Enter passphrase: | |
| (Chain of dmcrypt devices is activated as /dev/mapper/tcrypt_dev.) | |
| * See status of active TCRYPT device | |
| # cryptsetup status tcrypt_dev | |
| /dev/mapper/tcrypt_dev is active. | |
| type: TCRYPT | |
| cipher: serpent-twofish-aes-xts-plain64 | |
| keysize: 1536 bits | |
| device: /dev/loop0 | |
| loop: /tmp/tst | |
| offset: 256 sectors | |
| size: 65024 sectors | |
| skipped: 256 sectors | |
| mode: read/write | |
| * And plaintext filesystem now ready to mount | |
| # blkid /dev/mapper/tcrypt_dev | |
| /dev/mapper/tcrypt_dev: SEC_TYPE="msdos" UUID="9F33-2954" TYPE="vfat" | |
| * Add (optional) support for lipwquality for new LUKS passwords. | |
| If password is entered through terminal (no keyfile specified) | |
| and cryptsetup is compiled with --enable-pwquality, default | |
| system pwquality settings are used to check password quality. | |
| You can always override this check by using new --force-password option. | |
| For more info about pwquality project see http://libpwquality.fedorahosted.org/ | |
| * Proper handle interrupt signals (ctrl+c and TERM signal) in tools | |
| Code should now handle interrupt properly, release and explicitly wipe | |
| in-memory key materials on interrupt. | |
| (Direct users of libcryptsetup should always call crypt_free() when | |
| code is interrupted to wipe all resources. There is no signal handling | |
| in library, it is up to the tool using it.) | |
| * Add new benchmark command | |
| The "benchmark" command now tries to benchmark PBKDF2 and some block | |
| cipher variants. You can specify you own parameters (--cipher/--key-size | |
| for block ciphers, --hash for PBKDF2). | |
| See man page for detailed description. | |
| WARNING: benchmark command requires kernel userspace crypto API to be | |
| available (introduced in Linux kernel 2.6.38). | |
| If you are configuring kernel yourself, enable "User-space interface | |
| for symmetric key cipher algorithms" in "Cryptographic API" section | |
| (CRYPTO_USER_API_SKCIPHER .config option). | |
| EXAMPLE: | |
| # cryptsetup benchmark | |
| # Tests are approximate using memory only (no storage IO). | |
| PBKDF2-sha1 111077 iterations per second | |
| PBKDF2-sha256 53718 iterations per second | |
| PBKDF2-sha512 18832 iterations per second | |
| PBKDF2-ripemd160 89775 iterations per second | |
| PBKDF2-whirlpool 23918 iterations per second | |
| # Algorithm | Key | Encryption | Decryption | |
| aes-cbc 128b 212.0 MiB/s 428.0 MiB/s | |
| serpent-cbc 128b 23.1 MiB/s 66.0 MiB/s | |
| twofish-cbc 128b 46.1 MiB/s 50.5 MiB/s | |
| aes-cbc 256b 163.0 MiB/s 350.0 MiB/s | |
| serpent-cbc 256b 23.1 MiB/s 66.0 MiB/s | |
| twofish-cbc 256b 47.0 MiB/s 50.0 MiB/s | |
| aes-xts 256b 190.0 MiB/s 190.0 MiB/s | |
| serpent-xts 256b 58.4 MiB/s 58.0 MiB/s | |
| twofish-xts 256b 49.0 MiB/s 49.5 MiB/s | |
| aes-xts 512b 175.0 MiB/s 175.0 MiB/s | |
| serpent-xts 512b 59.0 MiB/s 58.0 MiB/s | |
| twofish-xts 512b 48.5 MiB/s 49.5 MiB/s | |
| Or you can specify cipher yourself: | |
| # cryptsetup benchmark --cipher cast5-cbc-essiv:sha256 -s 128 | |
| # Tests are approximate using memory only (no storage IO). | |
| # Algorithm | Key | Encryption | Decryption | |
| cast5-cbc 128b 32.4 MiB/s 35.0 MiB/s | |
| WARNING: these tests do not use dmcrypt, only crypto API. | |
| You have to benchmark the whole device stack and you can get completely | |
| different results. But is is usable for basic comparison. | |
| (Note for example AES-NI decryption optimization effect in example above.) | |
| Features | |
| ~~~~~~~~ | |
| * Do not maintain ChangeLog file anymore, see git log for detailed changes, | |
| e.g. here http://code.google.com/p/cryptsetup/source/list | |
| * Move change key into library, add crypt_keyslot_change_by_passphrase(). | |
| This change is useful mainly in FIPS mode, where we cannot | |
| extract volume key directly from libcryptsetup. | |
| * Add verbose messages during reencryption. | |
| * Default LUKS PBKDF2 iteration time is now configurable. | |
| * Add simple cipher benchmarking API. | |
| * Add kernel skcipher backend. | |
| * Add CRC32 implementation (for TCRYPT). | |
| * Move PBKDF2 into crypto backend wrapper. | |
| This allows use it in other formats, use library implementations and | |
| also possible use of different KDF function in future. | |
| * New PBKDF2 benchmark using getrusage(). | |
| Fixes | |
| ~~~~~ | |
| * Avoid O_DIRECT open if underlying storage doesn't support it. | |
| * Fix some non-translated messages. | |
| * Fix regression in header backup (1.5.1) with container in file. | |
| * Fix blockwise read/write for end writes near end of device. | |
| (was not used in previous versions) | |
| * Ignore setpriority failure. | |
| * Code changes to fix/ignore problems found by Coverity static analysis, including | |
| - Get page size should never fail. | |
| - Fix time of check/use (TOCTOU test) in tools | |
| - Fix time of check/use in loop/wipe utils. | |
| - Fix time of check/use in device utils. | |
| * Disallow header restore if context is non-LUKS device. |