Disk encryption theory

Disk encryption is a special case of data at rest protection when the storage medium is a sector-addressable device (e.g., a hard disk). This article presents cryptographic aspects of the problem. For an overview, see disk encryption. For discussion of different software packages and hardware devices devoted to this problem, see disk encryption software and disk encryption hardware.

## Problem definition

[edit]

This section does not cite any sources. Please help improve this section by adding citations to reliable sources. Unsourced material may be challenged and removed. (January 2024) (Learn how and when to remove this message)

|

Disk encryption methods aim to provide three distinct properties:

1. The data on the disk should remain confidential.
2. Data retrieval and storage should both be fast operations, no matter where on the disk the data is stored.
3. The encryption method should not waste disk space (i.e., the amount of storage used for encrypted data should not be significantly larger than the size of plaintext).

The first property requires defining an adversary from whom the data is being kept confidential. The strongest adversaries studied in the field of disk encryption have these abilities:

1. they can read the raw contents of the disk at any time;
2. they can request the disk to encrypt and store arbitrary files of their choosing;
3. and they can modify unused sectors on the disk and then request their decryption.

A method provides good confidentiality if the only information such an adversary can determine over time is whether the data in a sector has or has not changed since the last time they looked.

The second property requires dividing the disk into several sectors, usually 512 bytes (4096 bits) long, which are encrypted and decrypted independently of each other. In turn, if the data is to stay confidential, the encryption method must be tweakable; no two sectors should be processed in exactly the same way. Otherwise, the adversary could decrypt any sector of the disk by copying it to an unused sector of the disk and requesting its decryption. Whereas a purpose of a usual block cipher  E K {\displaystyle E_{K}} is to mimic a random permutation for any secret key  K {\displaystyle K} , the purpose of tweakable encryption  E K T {\displaystyle E_{K}^{T}} is to mimic a random permutation for any secret key  K {\displaystyle K} and any known tweak  T {\displaystyle T} .

The third property is generally non-controversial. However, it indirectly prohibits the use of stream ciphers, since stream ciphers require, for their security, that the same initial state not be used twice (which would be the case if a sector is updated with different data); thus this would require an encryption method to store separate initial states for every sector on disk—seemingly a waste of space. The alternative, a block cipher, is limited to a certain block size (usually 128 or 256 bits). Because of this, disk encryption chiefly studies chaining modes, which expand the encryption block length to cover a whole disk sector. The considerations already listed make several well-known chaining modes unsuitable: ECB mode, which cannot be tweaked, and modes that turn block ciphers into stream ciphers, such as the CTR mode.

These three properties do not provide any assurance of disk integrity; that is, they don't tell you whether an adversary has been modifying your ciphertext. In part, this is because an absolute assurance of disk integrity is impossible: no matter what, an adversary could always revert the entire disk to a prior state, circumventing any such checks. If some non-absolute level of disk integrity is desired, it can be achieved within the encrypted disk on a file-by-file basis using message authentication codes.

### When taking additional space is acceptable

[edit]

Although it used to be commonly accepted that disk encryption should be length-preserving, some additional features do justify the use of extra space. One example is authenticated encryption, which takes extra space in exchange for guaranteeing the integrity of the sector. One application of this guarantee would be to prevent an attacker from triggering kernel bugs by breaking the filesystem.[1]

### Narrow and wide block

[edit]

Disk encryption methods are also distinguished into "narrow-block" and "wide-block" methods. For a sector-sized plaintext, narrow-block method encrypts it in multiple blocks, while a wide-block methods does it in just one. Narrow-block methods such as LRW, XES, and XTS allow an attacker to exploit the block granularity to perform traffic analysis and replay.[2] A wide-block cipher ideally makes the entire ciphertext unrecognizable for a change anywhere in the plaintext.[3]

## Block cipher-based modes

[edit]

This article is missing information about XCB, which is found in IEEE-std 1619.2 2010; somewhat known for flaws in its security proof. Please expand the article to include this information. Further details may exist on the talk page. (March 2024)

|

Like most encryption schemes, block cipher-based disk encryption makes use of modes of operation, which allow encrypting larger amounts of data than the ciphers' block-size (typically 128 bits). Modes are therefore rules on how to repeatedly apply the ciphers' single-block operations.

### Cipher-block chaining (CBC)

[edit]

Main article: Cipher-block chaining

Cipher-block chaining (CBC) is a common chaining mode in which the previous block's ciphertext is xored with the current block's plaintext before encryption:

C i = E K ( C i − 1 ⊕ P i ) . {\displaystyle C_{i}=E_{K}(C_{i-1}\oplus P_{i}).}

Since there isn't a "previous block's ciphertext" for the first block, an initialization vector (IV) must be used as  C − 1 {\displaystyle C_{-1}} . This, in turn, makes CBC tweakable in some ways.

CBC suffers from some problems. For example, if the IVs are predictable, then an adversary may leave a "watermark" on the disk, i.e., store a specially created file or combination of files identifiable even after encryption. The exact method of constructing the watermark depends on the exact function providing the IVs, but the general recipe is to create two encrypted sectors with identical first blocks  b 1 {\displaystyle b_{1}} and  b 2 {\displaystyle b_{2}} ; these two are then related to each other by  b 1 ⊕ I V 1 = b 2 ⊕ I V 2 {\displaystyle b_{1}\oplus IV_{1}=b_{2}\oplus IV_{2}} . Thus the encryption of  b 1 {\displaystyle b_{1}} is identical to the encryption of  b 2 {\displaystyle b_{2}} , leaving a watermark on the disk. The exact pattern of "same-different-same-different" on disk can then be altered to make the watermark unique to a given file.

To protect against the watermarking attack, a cipher or a hash function is used to generate the IVs from the key and the current sector number, so that an adversary cannot predict the IVs. In particular, the ESSIV approach uses a block cipher in CTR mode to generate the IVs.

#### Encrypted salt-sector initialization vector (ESSIV)

[edit]

ESSIV is a method for generating initialization vectors for block encryption to use in disk encryption. The usual methods for generating IVs are predictable sequences of numbers based on, for example, time stamp or sector number, and permit certain attacks such as a watermarking attack. ESSIV prevents such attacks by generating IVs from a combination of the sector number SN with the hash of the key. It is the combination with the key in form of a hash that makes the IV unpredictable.[4][5]

I V ( SN ) = E s ( SN ) , where s = hash ( K ) . {\displaystyle IV({\textrm {SN}})=E_{s}({\text{SN}}),\ {\text{where}}\ s={\text{hash}}(K).}

ESSIV was designed by Clemens Fruhwirth and has been integrated into the Linux kernel since version 2.6.10, though a similar scheme has been used to generate IVs for OpenBSD's swap encryption since 2000.[6]

ESSIV is supported as an option by the dm-crypt[7] and FreeOTFE disk encryption systems.

#### Malleability attack

[edit]

While CBC (with or without ESSIV) ensures confidentiality, it does not ensure integrity of the encrypted data. If the plaintext is known to the adversary, it is possible to change every second plaintext block to a value chosen by the attacker, while the blocks in between are changed to random values. This can be used for practical attacks on disk encryption in CBC or CBC-ESSIV mode.[8]

### Liskov, Rivest, and Wagner (LRW)

[edit]

The tweakable narrow-block encryption (LRW)[9] is an instantiation of the mode of operations introduced by Liskov, Rivest, and Wagner[10] (see Theorem 2). This mode uses two keys:  K {\displaystyle K} is the key for the block cipher and  F {\displaystyle F} is an additional key of the same size as block. For example, for AES with a 256-bit key,  K {\displaystyle K} is a 256-bit number and  F {\displaystyle F} is a 128-bit number. Encrypting block  P {\displaystyle P} with logical index (tweak)  I {\displaystyle I} uses the following formula:

X = F ⊗ I , C = E K ( P ⊕ X ) ⊕ X . {\displaystyle {\begin{aligned}X&=F\otimes I,\\\C&=E_{K}(P\oplus X)\oplus X.\end{aligned}}}

Here multiplication  ⊗ {\displaystyle \otimes } and addition  ⊕ {\displaystyle \oplus } are performed in the finite field ( GF ( 2 128 ) {\displaystyle {\text{GF}}\left(2^{128}\right)} for AES). With some precomputation, only a single multiplication per sector is required (note that addition in a binary finite field is a simple bitwise addition, also known as xor):  F ⊗ I = F ⊗ ( I 0 ⊕ δ ) = F ⊗ I 0 ⊕ F ⊗ δ {\displaystyle F\otimes I=F\otimes (I_{0}\oplus \delta )=F\otimes I_{0}\oplus F\otimes \delta } , where  F ⊗ δ {\displaystyle F\otimes \delta } are precomputed for all possible values of  δ {\displaystyle \delta } . This mode of operation needs only a single encryption per block and protects against all the above attacks except a minor leak: if the user changes a single plaintext block in a sector then only a single ciphertext block changes. (Note that this is not the same leak the ECB mode has: with LRW mode equal plaintexts in different positions are encrypted to different ciphertexts.)

Some security concerns exist with LRW, and this mode of operation has now been replaced by XTS.

LRW is employed by BestCrypt and supported as an option for dm-crypt and FreeOTFE disk encryption systems.

### Xor–encrypt–xor (XEX)

[edit]

Main article: Xor–encrypt–xor

Another tweakable encryption mode, XEX (xor–encrypt–xor), was designed by Rogaway[11] to allow efficient processing of consecutive blocks (with respect to the cipher used) within one data unit (e.g., a disk sector). The tweak is represented as a combination of the sector address and index of the block within the sector (the original XEX mode proposed by Rogaway[11] allows several indices). The ciphertext,  C {\displaystyle C} , is obtained using:

X = E K ( I ) ⊗ α j , C = E K ( P ⊕ X ) ⊕ X , {\displaystyle {\begin{aligned}X&=E_{K}(I)\otimes \alpha ^{j},\\\C&=E_{K}(P\oplus X)\oplus X,\end{aligned}}}

where:

P {\displaystyle P} is the plaintext,
I {\displaystyle I} is the number of the sector,
α {\displaystyle \alpha } is the primitive element of  GF ( 2 128 ) {\displaystyle {\text{GF}}(2^{128})} defined by polynomial  x {\displaystyle x} ; i.e., the number 2,
j {\displaystyle j} is the number of the block within the sector. XEX uses  j ≥ 1 {\displaystyle j\geq 1} ; XTS uses  j ≥ 0 {\displaystyle j\geq 0} .

The basic operations of the LRW mode (AES cipher and Galois field multiplication) are the same as the ones used in the Galois/Counter Mode (GCM), thus permitting a compact implementation of the universal LRW/XEX/GCM hardware.

The original XEX has a weakness.[12]

#### XEX-based tweaked-codebook mode with ciphertext stealing (XTS)

[edit]

Ciphertext stealing provides support for sectors with size not divisible by block size, for example, 520-byte sectors and 16-byte blocks. XTS-AES was standardized on December 19, 2007[13] as IEEE P1619.[14] The XTS standard requires using a different key for the IV encryption than for the block encryption; this differs from XEX which uses only a single key.[11][15]: 1–4 As a result, users wanting AES-256 and AES-128 encryption must supply 512 bits and 256 bits of key respectively. The two keys (i.e., both halves of the XTS key) must be distinct for XTS to be CCA-secure, since XTS computes the sequence  α j {\displaystyle \alpha ^{j}} starting at  j = 0 {\displaystyle j=0} ; this differs from XEX which starts at  j = 1 {\displaystyle j=1} .[11]: 7 [15]: 6

On January 27, 2010, NIST released Special Publication (SP) 800-38E[16] in final form. SP 800-38E is a recommendation for the XTS-AES mode of operation, as standardized by IEEE Std 1619-2007, for cryptographic modules. The publication approves the XTS-AES mode of the AES algorithm by reference to the IEEE Std 1619-2007, subject to one additional requirement, which limits the maximum size of each encrypted data unit (typically a sector or disk block) to 220 AES blocks. According to SP 800-38E, "In the absence of authentication or access control, XTS-AES provides more protection than the other approved confidentiality-only modes against unauthorized manipulation of the encrypted data."

XTS is supported by BestCrypt, Botan, NetBSD's cgd,[17] dm-crypt, FreeOTFE, TrueCrypt, VeraCrypt,[18] DiskCryptor, FreeBSD's geli, OpenBSD softraid disk encryption software, OpenSSL, Mac OS X Lion's FileVault 2, Windows 10's BitLocker[19] and wolfCrypt.

#### XTS weaknesses

[edit]

XTS mode is susceptible to data manipulation and tampering, and applications must employ measures to detect modifications of data if manipulation and tampering is a concern: "...since there are no authentication tags then any ciphertext (original or modified by attacker) will be decrypted as some plaintext and there is no built-in mechanism to detect alterations. The best that can be done is to ensure that any alteration of the ciphertext will completely randomize the plaintext, and rely on the application that uses this transform to include sufficient redundancy in its plaintext to detect and discard such random plaintexts." This would require maintaining checksums for all data and metadata on disk, as done in ZFS or Btrfs. However, in commonly used file systems such as ext4 and NTFS only metadata is protected against tampering, while the detection of data tampering is non-existent.[20]

The mode is susceptible to traffic analysis, replay and randomization attacks on sectors and 16-byte blocks. As a given sector is rewritten, attackers can collect fine-grained (16 byte) ciphertexts, which can be used for analysis or replay attacks (at a 16-byte granularity). It would be possible to define sector-wide block ciphers, unfortunately with degraded performance (see below).[2]

### CBC–mask–CBC (CMC) and ECB–mask–ECB (EME)

[edit]

CMC and EME protect even against the minor leak mentioned above for LRW. Unfortunately, the price is a twofold degradation of performance: each block must be encrypted twice; many consider this to be too high a cost, since the same leak on a sector level is unavoidable anyway.

CMC, introduced by Halevi and Rogaway, stands for CBC–mask–CBC: the whole sector encrypted in CBC mode (with  C − 1 = E A ( I ) {\displaystyle C_{-1}=E_{A}(I)} ), the ciphertext is masked by xoring with  2 ( C 0 ′ ⊕ C k − 1 ′ ) {\displaystyle 2(C'_{0}\oplus C'_{k-1})} , and re-encrypted in CBC mode starting from the last block. When the underlying block cipher is a strong pseudorandom permutation (PRP) then on the sector level the scheme is a tweakable PRP. One problem is that in order to decrypt  P 0 {\displaystyle P_{0}} one must sequentially pass over all the data twice.

In order to solve this problem, Halevi and Rogaway introduced a parallelizable variant called EME (ECB–mask–ECB). It works in the following way:

* the plaintexts are xored with  L = E K ( 0 ) {\displaystyle L=E_{K}(0)} , shifted by different amount to the left, and are encrypted:  P i ′ = E K ( P i ⊕ 2 i L ) {\displaystyle P'_{i}=E_{K}(P_{i}\oplus 2^{i}L)} ;
* the mask is calculated:  M = M P ⊕ M C {\textstyle M=M_{P}\oplus M_{C}} , where  M P = I ⊕ ⨁ P i ′ {\textstyle M_{P}=I\oplus \bigoplus P'_{i}} and  M C = E K ( M P ) {\displaystyle M_{C}=E_{K}(M_{P})} ;
* intermediate ciphertexts are masked:  C i ′ = P i ′ ⊕ 2 i M {\textstyle C'_{i}=P'_{i}\oplus 2^{i}M} for  i = 1 , … , k − 1 {\displaystyle i=1,\ldots ,k-1} and  C 0 ′ = M C ⊕ I ⊕ ⨁ i = 1 k − 1 C i ′ {\textstyle C'_{0}=M_{C}\oplus I\oplus \bigoplus _{i=1}^{k-1}C'_{i}} ;
* the final ciphertexts are calculated:  C i = E K ( C i ′ ) ⊕ 2 i L {\displaystyle C_{i}=E_{K}(C'_{i})\oplus 2^{i}L} for  i = 0 , … , k − 1 {\displaystyle i=0,\ldots ,k-1} .

Note that unlike LRW and CMC there is only a single key  K {\displaystyle K} .

CMC and EME were considered for standardization by SISWG. EME is patented, and so is not favored to be a primary supported mode.[21]

### HCTR and HCTR2

[edit]

HCTR (2005) is mode of operation for block ciphers that is length-preserving, wide-block, and tweakable.[22] It, however, has a bug in the specification and another in its security proof, rendering its claimed security level invalid. HCTR2 (2021) is a variant that fixes these issues and improves on security, performance, and flexibility.[23] HCTR2 is available in the Linux kernel since version 6.0.

HCTR and HCTR2 uses a custom block cipher mode of operation called XCTR; AES-128-XCTR is usually used for HCTR2. HCTR2 uses a polynomial hash function called POLYVAL. HCTR2 is efficient on modern processors with an AES instructions and carry-less multiplication instructions.[23]

## Stream cipher modes

[edit]

The HBSH (hash, block cipher, stream cipher, hash) construction, published by Google employees in 2018, allows a fast stream cipher to be used in disk encryption. The Adiantum scheme used in low-end Android devices specifically chooses NH, 256-bit Advanced Encryption Standard (AES-256), ChaCha12, and Poly1305. The construction is tweakable and wide-block. It requires three passes over the data, but is still faster than AES-128-XTS on a ARM Cortex-A7 (which has no AES instruction set).[24] It is available in the Linux kernel since version 5.0.

In 2023, Aldo Gunsing, Joan Daemen and Bart Mennink presented the "double-decker" construction, which also uses a stream cipher. It is again tweakable and wide-block.[3]

## Patents

[edit]

While the authenticated encryption scheme IAPM provides encryption as well as an authentication tag, the encryption component of the IAPM mode completely describes the LRW and XEX schemes above, and hence XTS without the ciphertext stealing aspect. This is described in detail in Figures 8 and 5 of the US patent 6,963,976.[25]

## See also

[edit]

* Data remanence
* Cold boot attack
* Disk encryption software
* Disk encryption hardware
* IEEE P1619, standardization project for encryption of the storage data

## References

[edit]

1. ^ Poettering, Lennart. "The Strange State of Authenticated Boot and Disk Encryption on Generic Linux Distributions". 0pointer.net.
2. ^ a b Thomas Ptacek; Erin Ptacek (2014-04-30). "You Don't Want XTS".
3. ^ a b Aldo Gunsing; Joan Daemen; Bart Mennink. Deck-Based Wide Block Cipher Modes (PDF). The Third NIST Workshop on Block Cipher Modes of Operation 2023.
4. ^ Fruhwirth, Clemens; Schuster, Markus (December 2005). "Secret Messages: Hard disk encryption with DM-Crypt, LUKS, and cryptsetup" (PDF). Linux Magazine. No. 61\. pp. 65–71. Retrieved 22 August 2024.
5. ^ Fruhwirth, Clemens (18 July 2005). "New Methods in Hard Disk Encryption" (PDF). Vienna University of Technology. Retrieved 22 August 2024.
6. ^ Provos, Niels (2000). Encrypting Virtual Memory (PDF). 9th USENIX Security Symposium. Denver, Colorado.
7. ^ Milan Broz. "DMCrypt dm-crypt: Linux kernel device-mapper crypto target". gitlab.com. Retrieved April 5, 2015.
8. ^ Jakob Lell (2013-12-22). "Practical malleability attack against CBC-encrypted LUKS partitions".
9. ^ Latest SISWG and IEEE P1619 drafts and meeting information are on the P1619 home page [1].
10. ^ M. Liskov, R. Rivest, and D. Wagner. Tweakable block ciphers [2] Archived 2008-12-05 at the Wayback Machine, CRYPTO '02 (LNCS, volume 2442), 2002.
11. ^ a b c d Rogaway, Phillip (2004-09-24). "Efficient Instantiations of Tweakable Blockciphers and Refinements to Modes OCB and PMAC" (PDF). Dept. Of Computer Science (PDF). University of California, Davis.
12. ^ Minematsu, Kazuhiko (2007). "Improved Security Analysis of XEX and LRW Modes" (PDF). Selected Areas in Cryptography. Lecture Notes in Computer Science. Vol. 4356\. pp. 96–113\. doi:10.1007/978-3-540-74462-7_8. ISBN 978-3-540-74461-0.
13. ^ Karen McCabe (19 December 2007). "IEEE Approves Standards for Data Encryption". IEEE Standards Association. Archived from the original on 2008-03-06.
14. ^ IEEE Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices. April 18, 2008. pp. 1–40\. doi:10.1109/IEEESTD.2008.4493450. ISBN 978-0-7381-5363-6. `{{cite book}}`: `|journal=` ignored (help)
15. ^ a b Liskov, Moses; Minematsu, Kazuhiko (2008-09-02). "Comments on XTS-AES" (PDF).
16. ^ Morris Dworkin (January 2010). "Recommendation for Block Cipher Modes of Operation: The XTS-AES Mode for Confidentiality on Storage Devices" (PDF). NIST Special Publication 800-38E. National Institute of Standards and Technology. doi:10.6028/NIST.SP.800-38E. `{{cite journal}}`: Cite journal requires `|journal=` (help)
17. ^ "NetBSD cryptographic disk driver". Archived from the original on 2019-01-08. Retrieved 2019-01-07.
18. ^ "Modes of Operation". VeraCrypt Documentation. IDRIX. Retrieved 2017-10-13.
19. ^ "What's new in BitLocker?". November 12, 2015. Retrieved 2015-11-15.
20. ^ Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices (PDF), IEEE P1619/D16, 2007, p. 34, archived from the original (PDF) on 14 April 2016, retrieved 14 September 2012
21. ^ P. Rogaway, Block cipher mode of operation for constructing a wide-blocksize block cipher from a conventional block cipher, US Patent Application 20040131182 A1.
22. ^ Wang, Peng; Feng, Dengguo; Wu, Wenling (2005). "HCTR: A Variable-Input-Length Enciphering Mode". Information Security and Cryptology. Lecture Notes in Computer Science. Vol. 3822\. pp. 175–188\. doi:10.1007/11599548_15. ISBN 978-3-540-30855-3.
23. ^ a b "Length-preserving encryption with HCTR2". 2021.
24. ^ Crowley, Paul; Biggers, Eric (13 December 2018). "Adiantum: length-preserving encryption for entry-level processors". IACR Transactions on Symmetric Cryptology: 39–61\. doi:10.13154/tosc.v2018.i4.39-61.
25. ^ * U.S. Patent 6,963,976, "Symmetric Key Authenticated Encryption Schemes" (filed Nov. 2000, issued Nov. 2005, expires 25 Nov. 2022) [3] Archived 2018-08-11 at the Wayback Machine[4].

## Further reading

[edit]

* S. Halevi and P. Rogaway, A Tweakable Enciphering Mode, CRYPTO '03 (LNCS, volume 2729), 2003.
* S. Halevi and P. Rogaway, A Parallelizable Enciphering Mode [5], 2003.
* Standard Architecture for Encrypted Shared Storage Media, IEEE Project 1619 (P1619), [6].
* SISWG, Draft Proposal for Key Backup Format [7], 2004.
* SISWG, Draft Proposal for Tweakable Wide-block Encryption [8], 2004. - describes EME-32-AES
* James Hughes, Encrypted Storage -- Challenges and Methods [9] Archived 2006-05-18 at the Wayback Machine
* J. Alex Halderman, Seth D. Schoen, Nadia Heninger, William Clarkson, William Paul, Joseph A. Calandrino, Ariel J. Feldman, Jacob Appelbaum, and Edward W. Felten (2008-02-21). "Lest We Remember: Cold Boot Attacks on Encryption Keys" (PDF). Princeton University. Archived from the original (PDF) on 2008-05-14. `{{cite journal}}`: Cite journal requires `|journal=` (help)CS1 maint: multiple names: authors list (link)
* Niels Fergusson (August 2006). "AES-CBC + Elephant Diffuser: A Disk Encryption Algorithm for Windows Vista" (PDF). Microsoft. `{{cite journal}}`: Cite journal requires `|journal=` (help)
* Chakraborty, Debrup; López, Cuauhtemoc Mancillas; Sarkar, Palash (April 2018). "Disk encryption: do we need to preserve length?" (PDF). Journal of Cryptographic Engineering. 8 (1): 49–69\. doi:10.1007/s13389-016-0147-0. S2CID 4647765.

## External links

[edit]

* Security in Storage Working Group SISWG.
* "The eSTREAM project". Archived from the original on 2012-04-15. Retrieved 2010-03-28.