1 Cryptsetup 1.6.0 Release Notes
2 ==============================
4 Changes since version 1.6.0-rc1
5 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
7 * Change LUKS default cipher to to use XTS encryption mode,
8 aes-xts-plain64 (i.e. using AES128-XTS).
10 XTS mode becomes standard in hard disk encryption.
12 You can still use any old mode:
13 - compile cryptsetup with old default:
14 configure --with-luks1-cipher=aes --with-luks1-mode=cbc-essiv:sha256 --with-luks1-keybits=256
15 - format LUKS device with old default:
16 cryptsetup luksFormat -c aes-cbc-essiv:sha256 -s 256 <device>
19 * Skip tests and fix error messages if running on old systems (or with old kernel).
21 * Rename configure.in to configure.ac and fix issues with new automake and pkgconfig
22 and --disable-kernel_crypto option to allow compilation with old kernel headers.
24 * Allow repair of 512 bits key header.
26 * Fix status of device if path argument is used and fix double path prefix
27 for non-existent device path.
30 Changes since version 1.5.1
31 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
36 * Cryptsetup and libcryptsetup is now released under GPLv2+
37 (GPL version 2 or any later).
38 Some internal code handling files (loopaes, verity, tcrypt
39 and crypto backend wrapper) are LGPLv2+.
41 Previously code was GPL version 2 only.
44 * Introducing new unified command open and close.
47 cryptsetup open --type plain|luks|loopaes|tcrypt <device> <name>
48 (type defaults to luks)
50 with backward-compatible aliases plainOpen, luksOpen, loopaesOpen,
51 tcryptOpen. Basically "open --type xyz" has alias "xyzOpen".
53 The "create" command (plain device create) is DEPRECATED but will
55 (This command is confusing because of switched arguments order.)
57 The close command is generic command to remove mapping and have
58 backward compatible aliases (remove, luksClose, ...) which behaves
61 While all old syntax is still supported, I strongly suggest to use
62 new command syntax which is common for all device types (and possible
63 new formats added in future).
66 * cryptsetup now support directly TCRYPT (TrueCrypt and compatible tc-play)
68 (Code is independent implementation not related to original project).
70 Only dump (tcryptDump command) and activation (open --type tcrypt or tcryptOpen)
71 of TCRYPT device are supported. No header changes are supported.
73 It is intended to easily access containers shared with other operating systems
74 without need to install 3rd party software. For native Linux installations LUKS
75 is the preferred format.
77 WARNING: TCRYPT extension requires kernel userspace crypto API to be
78 available (introduced in Linux kernel 2.6.38).
79 If you are configuring kernel yourself, enable "User-space interface
80 for symmetric key cipher algorithms" in "Cryptographic API" section
81 (CRYPTO_USER_API_SKCIPHER .config option).
83 Because TCRYPT header is encrypted, you have to always provide valid
84 passphrase and keyfiles. Keyfiles are handled exactly the same as in original
85 format (basically, first 1MB of every keyfile is mixed using CRC32 into pool).
87 Cryptsetup should recognize all TCRYPT header variants ever released, except
88 legacy cipher chains using LRW encryption mode with 64 bits encryption block
89 (namely Blowfish in LRW mode is not recognized, this is limitation of kernel
92 Device activation is supported only for LRW/XTS modes (again, limitation
93 of kernel dmcrypt which do not implements TCRYPT extensions to CBC mode).
94 (So old containers cannot be activated, but you can use libcryptsetup
95 for lost password search, example of such code is included in misc directory.)
97 Hidden header are supported using --tcrypt-hidden option, system encryption
98 using --tcrypt-system option.
100 For detailed description see man page.
103 * Dump device parameters of container in file:
105 # cryptsetup tcryptDump tst
108 TCRYPT header information for tst
114 Cipher chain: serpent-twofish-aes
115 Cipher mode: xts-plain64
118 You can also dump master key using --dump-master-key.
119 Dump does not require superuser privilege.
121 * Activation of this container
123 # cryptsetup tcryptOpen tst tcrypt_dev
125 (Chain of dmcrypt devices is activated as /dev/mapper/tcrypt_dev.)
127 * See status of active TCRYPT device
129 # cryptsetup status tcrypt_dev
131 /dev/mapper/tcrypt_dev is active.
133 cipher: serpent-twofish-aes-xts-plain64
142 * And plaintext filesystem now ready to mount
144 # blkid /dev/mapper/tcrypt_dev
145 /dev/mapper/tcrypt_dev: SEC_TYPE="msdos" UUID="9F33-2954" TYPE="vfat"
148 * Add (optional) support for lipwquality for new LUKS passwords.
150 If password is entered through terminal (no keyfile specified)
151 and cryptsetup is compiled with --enable-pwquality, default
152 system pwquality settings are used to check password quality.
154 You can always override this check by using new --force-password option.
156 For more info about pwquality project see http://libpwquality.fedorahosted.org/
159 * Proper handle interrupt signals (ctrl+c and TERM signal) in tools
161 Code should now handle interrupt properly, release and explicitly wipe
162 in-memory key materials on interrupt.
163 (Direct users of libcryptsetup should always call crypt_free() when
164 code is interrupted to wipe all resources. There is no signal handling
165 in library, it is up to the tool using it.)
168 * Add new benchmark command
170 The "benchmark" command now tries to benchmark PBKDF2 and some block
171 cipher variants. You can specify you own parameters (--cipher/--key-size
172 for block ciphers, --hash for PBKDF2).
174 See man page for detailed description.
176 WARNING: benchmark command requires kernel userspace crypto API to be
177 available (introduced in Linux kernel 2.6.38).
178 If you are configuring kernel yourself, enable "User-space interface
179 for symmetric key cipher algorithms" in "Cryptographic API" section
180 (CRYPTO_USER_API_SKCIPHER .config option).
183 # cryptsetup benchmark
184 # Tests are approximate using memory only (no storage IO).
185 PBKDF2-sha1 111077 iterations per second
186 PBKDF2-sha256 53718 iterations per second
187 PBKDF2-sha512 18832 iterations per second
188 PBKDF2-ripemd160 89775 iterations per second
189 PBKDF2-whirlpool 23918 iterations per second
190 # Algorithm | Key | Encryption | Decryption
191 aes-cbc 128b 212.0 MiB/s 428.0 MiB/s
192 serpent-cbc 128b 23.1 MiB/s 66.0 MiB/s
193 twofish-cbc 128b 46.1 MiB/s 50.5 MiB/s
194 aes-cbc 256b 163.0 MiB/s 350.0 MiB/s
195 serpent-cbc 256b 23.1 MiB/s 66.0 MiB/s
196 twofish-cbc 256b 47.0 MiB/s 50.0 MiB/s
197 aes-xts 256b 190.0 MiB/s 190.0 MiB/s
198 serpent-xts 256b 58.4 MiB/s 58.0 MiB/s
199 twofish-xts 256b 49.0 MiB/s 49.5 MiB/s
200 aes-xts 512b 175.0 MiB/s 175.0 MiB/s
201 serpent-xts 512b 59.0 MiB/s 58.0 MiB/s
202 twofish-xts 512b 48.5 MiB/s 49.5 MiB/s
204 Or you can specify cipher yourself:
205 # cryptsetup benchmark --cipher cast5-cbc-essiv:sha256 -s 128
206 # Tests are approximate using memory only (no storage IO).
207 # Algorithm | Key | Encryption | Decryption
208 cast5-cbc 128b 32.4 MiB/s 35.0 MiB/s
210 WARNING: these tests do not use dmcrypt, only crypto API.
211 You have to benchmark the whole device stack and you can get completely
212 different results. But is is usable for basic comparison.
213 (Note for example AES-NI decryption optimization effect in example above.)
218 * Do not maintain ChangeLog file anymore, see git log for detailed changes,
219 e.g. here http://code.google.com/p/cryptsetup/source/list
221 * Move change key into library, add crypt_keyslot_change_by_passphrase().
222 This change is useful mainly in FIPS mode, where we cannot
223 extract volume key directly from libcryptsetup.
225 * Add verbose messages during reencryption.
227 * Default LUKS PBKDF2 iteration time is now configurable.
229 * Add simple cipher benchmarking API.
231 * Add kernel skcipher backend.
233 * Add CRC32 implementation (for TCRYPT).
235 * Move PBKDF2 into crypto backend wrapper.
236 This allows use it in other formats, use library implementations and
237 also possible use of different KDF function in future.
239 * New PBKDF2 benchmark using getrusage().
244 * Avoid O_DIRECT open if underlying storage doesn't support it.
246 * Fix some non-translated messages.
248 * Fix regression in header backup (1.5.1) with container in file.
250 * Fix blockwise read/write for end writes near end of device.
251 (was not used in previous versions)
253 * Ignore setpriority failure.
255 * Code changes to fix/ignore problems found by Coverity static analysis, including
256 - Get page size should never fail.
257 - Fix time of check/use (TOCTOU test) in tools
258 - Fix time of check/use in loop/wipe utils.
259 - Fix time of check/use in device utils.
261 * Disallow header restore if context is non-LUKS device.