Теория шифрования диска

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

Шифрование диска является частным случаем защиты данных в состоянии покоя[en][1], когда носитель данных является устройством с секторной адресацией (например, жёсткий диск). В данной статье представлены криптографические аспекты проблемы. Для обсуждения различных пакетов программного обеспечения и аппаратных устройств, посвящённых этой проблеме, см. программное обеспечение для шифрования диска и аппаратное обеспечение для шифрования диска.

Постановка проблемы[править | править код]

Методы шифрования диска направлены на обеспечение трёх различных свойств:

  1. Данные на диске должны оставаться конфиденциальными.
  2. Извлечение и запись данных должны выполняться быстро, независимо от того, где на диске хранятся данные.
  3. Метод шифрования не должен тратить дисковое пространство (то есть объём хранилища, используемый для зашифрованных данных, не должен быть значительно больше, чем размер открытого текста).

Первое свойство требует определения злоумышленника, от которого охраняются данные. Злоумышленники обладают следующими возможностями:

  1. они могут читать необработанное содержимое диска в любое время;
  2. они могут запросить диск для шифрования и хранения произвольных файлов по своему выбору;
  3. и они могут изменять неиспользуемые сектора на диске и затем запрашивать их расшифровку.

Метод обеспечивает хорошую конфиденциальность, если единственная информация, которую такой злоумышленник может определить с течением времени, это то, изменились ли данные в секторе с момента их последнего просмотра.

Второе свойство требует разделения диска на несколько секторов, обычно длиной 512 байт (4096 бит), которые шифруются и дешифруются независимо друг от друга. В свою очередь, если данные должны оставаться конфиденциальными, метод шифрования должен быть настраиваемым; никакие два сектора не должны обрабатываться одинаково. В противном случае злоумышленник может расшифровать любой сектор диска, скопировав его в неиспользуемый сектор диска и запросив его расшифровку.

Третье свойство, как правило, не вызывает сомнений. Однако это косвенно запрещает использование потоковых шифров, поскольку потоковые шифры для своей безопасности требуют, чтобы одно и то же исходное состояние не использовалось дважды (что было бы в случае записи в сектор других данных); таким образом, для этого потребуется метод шифрования для хранения отдельных начальных состояний для каждого сектора на диске — по-видимому, пустая трата места. Альтернатива в виде блочного шифра ограничена определённым размером блока (обычно 128 или 256 бит). Из-за этого шифрование диска в основном изучает цепные режимы шифрования, которые расширяют длину блока шифрования, чтобы охватить весь сектор диска. Уже перечисленные соображения делают неподходящими несколько известных режимов цепочки: режим ECB, который нельзя настроить, и режимы, которые превращают блочные шифры в потоковые шифры, такие как режим CTR.

Эти три свойства не дают никакой гарантии целостности диска; то есть они не сообщают вам, изменил ли ваш злоумышленник ваш шифротекст. Отчасти это происходит потому, что абсолютная гарантия целостности диска невозможна: несмотря ни на что, злоумышленник всегда может вернуть весь диск в прежнее состояние, обходя любые такие проверки. Если требуется некоторый не абсолютный уровень целостности диска, он может быть достигнут на зашифрованном диске для каждого файла отдельно, используя коды аутентификации сообщений.

Блочные режимы шифрования[править | править код]

Как и большинство схем шифрования, шифрование диска на основе блочного шифра использует режимы работы, которые позволяют шифровать большие объёмы данных, чем размер блока шифра (обычно 128 бит). Поэтому режимы — это правила повторного применения одноблочных операций шифров.

Cipher-block chaining (CBC)[править | править код]

Cipher-block chaining (CBC) — это обычный режим цепочки, в котором перед шифрованием текущего блока к нему применяется операция исключающего ИЛИ с шифротекстом предыдущего блока:

Поскольку для первого блока не существует «зашифрованного текста предыдущего блока», то в качестве должен использоваться вектор инициализации (IV). Это, в свою очередь, делает CBC настраиваемым в некоторых отношениях.

CBC страдает от некоторых проблем. Например, если IV являются предсказуемыми, то злоумышленник может оставить «водяной знак» на диске, то есть сохранить специально созданный файл или комбинацию файлов, которые можно идентифицировать даже после шифрования. Точный метод построения водяного знака зависит от точной функции, обеспечивающей IV, но общий рецепт состоит в создании двух зашифрованных секторов, которые имеют идентичные первые блоки и ; эти два затем связаны друг с другом с помощью . Таким образом, шифрование идентично шифрованию , что оставляет «водяной знак» на диске.

Для защиты от атаки "водяными знаками "используется шифр или хеш-функция для генерации IV из ключа и текущего номера сектора, так что злоумышленник не может предсказать IV. В частности, подход ESSIV использует блочный шифр в режиме CTR для генерации IV.

Encrypted salt-sector initialization vector (ESSIV)[править | править код]

ESSIV[2] является методом генерации векторов инициализации для блочного шифра. Типичные методы используют предсказуемые последовательности чисел, основанные, например, на номере сектора или же отметки времени, и позволяют проводить такие атаки как атака «водяными знаками». ESSIV упреждает подобные атаки генерированием векторов инициализации из комбинации номера сектора SN с хэшом ключа, что делает такие векторы непредсказуемыми.

Разработчиком ESSIV является Clemens Fruhwirth. Метод был интегрирован в ядро Linux начиная с версии 2.6.10, хотя аналогичная схема использовалась для генерации IV для шифрования подкачки OpenBSD с 2000 года.[3]

ESSIV поддерживается в качестве опции системами шифрования дисков dm-crypt[4] и FreeOTFE.

Malleability attack[править | править код]

Хотя CBC (с или без ESSIV) обеспечивает конфиденциальность, он не гарантирует целостность зашифрованных данных. Если открытый текст известен злоумышленнику, можно изменить каждый второй блок открытого текста на значение, выбранное атакующим, в то время как промежуточные блоки заменяются случайными значениями. Это может быть использовано для практических атак на шифрование диска в режиме CBC или CBC-ESSIV.[5]

Liskov, Rivest, and Wagner (LRW)[править | править код]

Чтобы предотвратить такие сложные атаки, были введены различные режимы работы: настраиваемое узкоблочное шифрование (LRW и XEX) и широкоблочное шифрование (CMC и EME).

В то время как цель обычного блочного шифра состоит в том, чтобы имитировать случайную перестановку для любого секретного ключа , цель настраиваемого шифрования состоит в том, чтобы имитировать случайную перестановку для любого секретного ключа и любой известной настройки . Настраиваемое узкоблочное шифрование (LRW)[6] представляет собой экземпляр режима операций, введенного Лисковым, Ривестом и Вагнером[7] (see Theorem 2). В этом режиме используются два ключа: это ключ для блочного шифра, а  — это дополнительный ключ того же размера, что и блок. Например, для AES с 256-битным ключом,  — это 256-битное число, а  — это 128-битное число. Шифрование блока с логическим индексом (настройка) использует следующую формулу:

Здесь умножение и сложение выполняются в конечном поле ( для AES). С некоторыми предварительными вычислениями требуется только одно умножение на сектор (обратите внимание, что сложение в двоичном конечном поле является простым побитовым сложением, также известным как xor): , где предварительно вычисляется для всех возможных значений . Этот режим работы требует только одного шифрования на блок и защищает от всех вышеуказанных атак, за исключением незначительной утечки: если пользователь изменяет один блок открытого текста в секторе, то изменяется только один блок шифрованного текста. (Обратите внимание, что это не та же утечка, которую имеет режим ECB: в режиме LRW одинаковые открытые тексты в разных позициях шифруются в разные шифротексты.)

Существуют некоторые проблемы безопасности LRW, и этот режим работы теперь заменен XTS.

LRW используется в BestCrypt и поддерживается в качестве опции для систем шифрования дисков dm-crypt и FreeOTFE.

Xor-encrypt-xor (XEX)[править | править код]

Основная статья Xor-encrypt-xor

Другой настраиваемый режим шифрования, XEX (xor-encrypt-xor), был разработан Rogaway[8] для обеспечения эффективной обработки последовательных блоков (по отношению к используемому шифру) в пределах одного блока данных (например, сектора диска). Подстройка представляется в виде комбинации адреса сектора и индекса блока внутри сектора (оригинальный режим XEX, предложенный Rogaway[8] допускает несколько индексов). Зашифрованный текст, , получается с использованием:

где:

  • является открытым текстом,
  • номер сектора,
  • является примитивным элементом ,
  • это номер блока в секторе.

Основные операции режима LRW (шифрование AES и умножение в поле Галуа) такие же, как и в Galois/Counter Mode (GCM), что позволяет компактно реализовать универсальное аппаратное обеспечение LRW / XEX / GCM.

XEX mode encryption.svg

XEX-based tweaked-codebook mode with ciphertext stealing (XTS)[править | править код]

Заимствование шифротекста обеспечивает поддержку секторов с размером, не делимым на размер блока, например, 520-байтовые сектора и 16-байтовые блоки. XTS-AES был стандартизирован 2007-12-19[9] как IEEE P1619.[10] Стандарт поддерживает использование другого ключа для шифрования IV, чем для блочного шифрования; это противоречит намерениям XEX и, кажется, коренится в неправильном толковании оригинальной статьи XEX, но не наносит ущерба безопасности.[11][8] В результате пользователи, которым требуется шифрование AES-256 и AES-128, должны предоставить 512 бит и 256 бит ключа соответственно.

XTS mode encryption.svg

27 января 2010 года Национальный институт стандартов и технологий выпустил специальную публикацию (SP) 800-38E[12] в окончательном виде. SP 800-38E является рекомендацией для режима работы XTS-AES, стандартизированного IEEE Std 1619—2007, для криптографических модулей. Публикация утверждает режим XTS-AES алгоритма AES со ссылкой на стандарт IEEE 1619—2007, при условии соблюдения одного дополнительного требования, которое ограничивает максимальный размер каждого зашифрованного блока данных (обычно сектора или блока диска) значением блоков AES. Согласно SP 800-38E: «В отсутствие аутентификации или контроля доступа XTS-AES обеспечивает большую защиту, чем другие утвержденные режимы только для конфиденциальности, от несанкционированного манипулирования зашифрованными данными».

XTS поддерживается BestCrypt, Botan, dm-crypt, FreeOTFE, TrueCrypt, VeraCrypt,[13] DiskCryptor, FreeBSD's geli, OpenSSL, OS X Lion's FileVault 2, Windows 10's BitLocker и wolfCrypt.[14]

Слабые стороны XTS[править | править код]

Режим XTS подвержен манипулированию данными и фальсификации данных, и приложения должны применять меры для обнаружения изменений данных, если манипулирование и фальсификация являются проблемой: "… поскольку нет тегов аутентификации, тогда любой зашифрованный текст (оригинальный или изменённый злоумышленником) будет расшифровывается как некоторый открытый текст, и нет встроенного механизма для обнаружения изменений. Лучшее, что можно сделать, — это обеспечить, чтобы любое изменение зашифрованного текста полностью рандомизировало открытый текст, и полагаться на приложение, которое использует это преобразование для включения достаточной избыточности. в его открытом тексте, чтобы обнаружить и отбросить такие случайные открытые тексты ". Это потребует сохранения контрольных сумм для всех данных и метаданных на диске, как это делается в ZFS или Btrfs. Однако в широко используемых файловых системах, таких как ext4 и NTFS, только метаданные защищены от подделки, а обнаружение подделки данных отсутствует.[15]

Режим чувствителен к анализу трафика, атакам воспроизведения и рандомизации на секторах и 16-байтовых блоках. Поскольку данный сектор перезаписывается, злоумышленники могут собирать мелкозернистые (16-байтовые) шифротексты, которые можно использовать для анализа или повторных атак (с 16-байтовой гранулярностью). Было бы возможно определить блочные шифры для всего сектора, к сожалению, с ухудшенной производительностью (см. ниже).[16]

CBC-mask-CBC (CMC) и ECB-mask-ECB (EME)[править | править код]

CMC и EME защищают даже от незначительной утечки, указанной выше для LRW. К сожалению, цена представляет собой двукратное снижение производительности: каждый блок должен быть зашифрован дважды; многие считают, что это слишком дорого, поскольку в любом случае такая же утечка на уровне сектора неизбежна.

CMC, представленный Halevi и Rogaway, расшифровывается как CBC — mask — CBC: весь сектор зашифрован в режиме CBC (с помощью ), зашифрованный текст маскируется путем операции XOR с , и повторно зашифровывается в режиме CBC, начиная с последнего блока. Когда базовый блочный шифр является сильной псевдослучайной перестановкой (PRP) тогда на уровне секторов схема представляет собой настраиваемый PRP. Одна проблема состоит в том, что для расшифровки необходимо последовательно пройти все данные дважды.

Чтобы решить эту проблему, Halevi и Rogaway представили распараллеливаемый вариант, названный EME (ECB — mask — ECB). Это работает следующим образом:

  • к открытым текстам применяется исключающее ИЛИ с , тексты смещаются на разную величину влево и шифруются: ;
  • вычисляется маска: , где и ;
  • к промежуточным шифротекстам применяется маска: for и ;
  • вычисляются конечные шифротексты: для .

Обратите внимание, что в отличие от LRW и CMC, существует только один ключ .

CMC и EME были рассмотрены для стандартизации SISWG. EME запатентован, и поэтому не рекомендуется использовать его в качестве основного поддерживаемого режима.[17]

Multilinear Galois Mode (MGM)[править | править код]

Режимы шифрования с аутентификацией могут предоставить в некоторой степени целостность зашифрованных данных. MGM представляет из себя быстрый блочный режим шифрования с аутентификацией и возможностью распараллеливания[18]. Режим основывается на двух счетчиках и одноразовом векторе с требованием уникальности. Для того, чтобы защититься от атак, использующих значения счетчиков, применяется инкрементирование левой или правой половины счетчика. то есть , а . Для избавления от предсказывания стартового значения счетчика начальное значение шифруется перед использованием. Защита от атак, использующих дополнение блока, достигается добавлением длины дополнительных данных и длины шифротекста. Также шифрование тега обеспечивает защиту от атак, использующих свойства линейности. Данный режим требует на вход открытый текст, ключ шифрования, аутентификационные данные и начальное значение счетчика. На эти данные накладываются некоторые ограничения:

  1.  — размер блока шифра (должен быть четным).
  2.  — размер подаваемых данных счетчика.
  3. , где является длиной имитовставки.
  4. , где  — это открытый текст.
  5. , где  — это аутентификационные данные.

Один из счетчиков используется для получения шифротекста, а другой для данных аутентификации. Из схемы шифра видно, что шифрование наряду с выработкой тега может быть практически полностью распараллелено. Согласно докладу на конференции РусКрипто 2018[19], режим имеет следующие функциональные возможности:

  1. параллелизуемость
  2. не требуется заранее указанного размера шифруемых данных
  3. для шифрования и расшифрования применяется одна функция
  4. схема может быть использована лишь для производства имитовставки
  5. для построения имитовставки и шифрования открытого текста используется один и тот же ключ
  6. возможность предвычислений
  7. одноразовый вектор требует меньших усилий к его выработке, по сравнению со случайным вектором инициализации
Схема

Патенты[править | править код]

Хотя схема аутентифицированного шифрования IAPM обеспечивает шифрование, а также тег аутентификации, компонент шифрования режима IAPM полностью описывает схемы LRW и XEX, приведенные выше, и, следовательно, XTS без аспекта кражи зашифрованного текста. Это описано в подробно на рисунках 8 и 5 патента США 6,963,976[20].

См. также[править | править код]

Примечания[править | править код]

  1. Барьеры на пути утечек данных | Открытые системы. СУБД | Издательство «Открытые системы»
  2. Clemens Fruhwirth. New Methods in Hard Disk Encryption (неопр.) // Institute for Computer Languages: Theory and Logic Group. — Vienna University of Technology, 2005. — 18 July.
  3. Encrypting Virtual Memory (неопр.).
  4. Milan Broz. DMCrypt dm-crypt: Linux kernel device-mapper crypto target. gitlab.com. Дата обращения: 5 апреля 2015.
  5. Jakob Lell. Practical malleability attack against CBC-encrypted LUKS partitions (22 декабря 2013).
  6. Latest SISWG and IEEE P1619 drafts and meeting information are on the P1619 home page [1].
  7. M. Liskov, R. Rivest, and D. Wagner. Tweakable block ciphers [2], CRYPTO '02 (LNCS, volume 2442), 2002.
  8. 1 2 3 Rogaway, Phillip. Efficient Instantiations of Tweakable Blockciphers and Refinements to Modes OCB and PMAC (англ.) // Dept. of Computer Science : journal. — University of California, Davis, 2004. — 24 September.
  9. Karen McCabe. IEEE Approves Standards for Data Encryption. IEEE Standards Association (19 декабря 2007). Архивировано 6 марта 2008 года.
  10. Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices (англ.) : journal. — IEEE Xplore Digital Library, 2008. — 18 April. — ISBN 978-0-7381-5363-6. — doi:10.1109/IEEESTD.2008.4493450.
  11. Liskov, Moses; Minematsu, Kazuhiko. Comments on XTS-AES (2 сентября 2008)., On the Use of Two Keys, pp. 1-3.
  12. Morris Dworkin. Recommendation for Block Cipher Modes of Operation: The XTS-AES Mode for Confidentiality on Storage Devices (англ.) : journal. — National Institute of Standards and Technology, 2010. — January (vol. NIST Special Publication 800—38E).
  13. Modes of Operation. VeraCrypt Documentation. IDRIX. Дата обращения: 13 октября 2017.
  14. What's new in BitLocker? (12 ноября 2015). Дата обращения: 15 ноября 2015.
  15. Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices, IEEE P1619/D16, 2007, с. 34, <http://grouper.ieee.org/groups/1619/email/pdf00086.pdf>. Проверено 14 сентября 2012.  Архивная копия от 14 апреля 2016 на Wayback Machine
  16. Thomas Ptacek; Erin Ptacek. You Don't Want XTS (30 апреля 2014).
  17. P. Rogaway, Block cipher mode of operation for constructing a wide-blocksize block cipher from a conventional block cipher, US Patent Application 20040131182 A1, [3]
  18. Stanislav Smyshlyaev, Vladislav Nozdrunov, Vasily Shishkin, Multiline Galois Mode (MGM), draft-smyshlyaev-mgm-04, [4]
  19. Vladislav Nozdrunov, РусКрипто, Multilinear Galois Mode. Об особенностях построения, функциональных возможностях и доказуемой стойкости, [5]
  20. * U.S. Patent 6,963,976, «Symmetric Key Authenticated Encryption Schemes» (Filed Nov. 2000, Issued Nov. 2005) [6][7].

Дальнейшее чтение[править | править код]

Ссылки[править | править код]

  • Security in Storage Working Group SISWG.
  • The eSTREAM project. Дата обращения: 28 марта 2010.