Watermarking attack

From HandWiki
Short description: Attack on disk encryption methods

In cryptography, a watermarking attack is an attack on disk encryption methods where the presence of a specially crafted piece of data can be detected by an attacker without knowing the encryption key.

Problem description

Disk encryption suites generally operate on data in 512-byte sectors which are individually encrypted and decrypted. These 512-byte sectors alone can use any block cipher mode of operation (typically CBC), but since arbitrary sectors in the middle of the disk need to be accessible individually, they cannot depend on the contents of their preceding/succeeding sectors. Thus, with CBC, each sector has to have its own initialization vector (IV). If these IVs are predictable by an attacker (and the filesystem reliably starts file content at the same offset to the start of each sector, and files are likely to be largely contiguous), then there is a chosen plaintext attack which can reveal the existence of encrypted data.

The problem is analogous to that of using block ciphers in the electronic codebook (ECB) mode, but instead of whole blocks, only the first block in different sectors are identical. The problem can be relatively easily eliminated by making the IVs unpredictable with, for example, ESSIV.[1]

Alternatively, one can use modes of operation specifically designed for disk encryption (see disk encryption theory). This weakness affected many disk encryption programs, including older versions of BestCrypt[2] as well as the now-deprecated cryptoloop.[3]

To carry out the attack, a specially crafted plaintext file is created for encryption in the system under attack, to "NOP-out" the IV[4] such that the first ciphertext block in two or more sectors is identical. This requires that the input to the cipher (plaintext, [math]\displaystyle{ \scriptstyle P }[/math], XOR initialisation vector, [math]\displaystyle{ \scriptstyle IV }[/math]) for each block must be the same; i.e., [math]\displaystyle{ \scriptstyle P_1 \,\oplus\, IV_1 \;=\; P_2 \,\oplus\, IV_2 }[/math]. Thus, we must choose plaintexts, [math]\displaystyle{ \scriptstyle P_1,\, P_2 }[/math] such that [math]\displaystyle{ \scriptstyle P_1 \,\oplus\, P_2 \;=\; IV_1 \,\oplus\, IV_2 }[/math].

The ciphertext block patterns generated in this way give away the existence of the file, without any need for the disk to be decrypted first.

See also

References

  1. Fruhwirth, Clemens. "Linux hard disk encryption settings". http://clemens.endorphin.org/LinuxHDEncSettings. Retrieved 2006-01-02. 
  2. Chiriliuc, Adal (2003-10-23). "BestCrypt IV generation flaw". https://ad.al/bc_iv_flaw.html. Retrieved 2023-05-21. 
  3. Saarinen, Markku-Juhani O. (2004-02-19). "Linux for the Information Smuggler". Helsinki University of Technology. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.117.4062. Retrieved 2006-10-01. 
  4. Markus Gattol. "Redundancy, the Watermarking Attack and its Countermeasures".