Forgot to add the link to wikipedia: [1] https://en.wikipedia.org/wiki/Disk_encryption_theory#XEX-based_tweaked-codebook_mode_with_ciphertext_stealing_(XTS)
On Thu, 7 Jun 2018 15:37:10 +0300 Hristo Stefanov <hrstefa...@kontiko.com> wrote: > Hello, > > The reason to want to use XTS[1] mode is to avoid the same ciphertext > be produced for the same plaintext due to using the same > initialization vector for each page if for example CBC mode is used > (due to inability to store the IV inside a page). > > XTS mode can be used in Firebird if we treat pages as blocks of data > and page numbers as block numbers. This is a good fit because > everything is a page in the current on-disk file structure and page > numbers represent the on disk position of a page. > > We have implemented a prototype version of a DbCrypt plugin using > AES-XTS in this way but had to resort to some hacks to extract the > page number of the page we are currently working on. > > To obtain the page number from the block of data passed to the > encrypt()/decrypt() method we are taking advantage of the following > knowledge: > > - the pointer passed is always[*] pointing inside a page immediately > after its header which contains its page number > > - before passing a page for encryption/decryption the page header is > properly initialized > > - the length of data to encrypt/decrypt is a multiple of 16 bytes > > [*] Not always true currently. There is a DbCrypt plugin sanity > routine that passes a 16 byte chunk to test encryption and decryption > and a routine for calculating a digital signature which passes a > multiple of 16 byte chunk that is way shorter than the minimum page > size of 4096 bytes. Both of these routines can be detected from the > length of the chunk to be encoded/decoded and a dummy page number can > be used. > > We are proposing that XTS mode of operation be officially supported > as it provides better security than the currently implementable modes > and the required effort is small (i.e. just passing the page number as > an argument to encrypt()/decrypt()). > > Regards, > Hristo Stefanov > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > Firebird-Devel mailing list, web interface at > https://lists.sourceforge.net/lists/listinfo/firebird-devel ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel