Русская Википедия:Теория шифрования диска

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Шаблон:К удалению

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

Постановка проблемы

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

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

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

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

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

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

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

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

Блочные режимы шифрования

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

Шаблон:AnchorCipher-block chaining (CBC)

Шаблон:Основная статья

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

<math>C_i = E_K(C_{i-1} \oplus P_i)</math>

Поскольку для первого блока не существует «зашифрованного текста предыдущего блока», то в качестве <math>\scriptstyle C_{-1}</math> должен использоваться вектор инициализации (IV). Это, в свою очередь, делает CBC настраиваемым в некоторых отношениях.

CBC страдает от некоторых проблем. Например, если IV являются предсказуемыми, то злоумышленник может оставить «водяной знак» на диске, то есть сохранить специально созданный файл или комбинацию файлов, которые можно идентифицировать даже после шифрования. Точный метод построения водяного знака зависит от точной функции, обеспечивающей IV, но общий рецепт состоит в создании двух зашифрованных секторов, которые имеют идентичные первые блоки <math>\scriptstyle b_1</math> и <math>\scriptstyle b_2</math>; эти два затем связаны друг с другом с помощью <math>\scriptstyle b_1 \,\oplus\, IV_1 \;=\; b_2 \,\oplus\, IV_2</math>. Таким образом, шифрование <math> \scriptstyle b_1 </math> идентично шифрованию <math> \scriptstyle b_2 </math>, что оставляет «водяной знак» на диске.

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

Шаблон:AnchorEncrypted salt-sector initialization vector (ESSIV)

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

<math>IV(\textrm{SN}) = E_s(\textrm{SN}), \quad\textrm{where}\;\; s = \textrm{hash}(K)</math>

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

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

Malleability attack

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

Шаблон:AnchorLiskov, Rivest, and Wagner (LRW)

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

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

<math>\begin{align}

C &= E_K(P \oplus X) \oplus X \\ X &= F \otimes I \end{align}</math>

Здесь умножение <math>\scriptstyle \otimes</math> и сложение <math>\scriptstyle \oplus</math> выполняются в конечном поле (<math>\scriptstyle \text{GF}\left(2^{128}\right)</math> для AES). С некоторыми предварительными вычислениями требуется только одно умножение на сектор (обратите внимание, что сложение в двоичном конечном поле является простым побитовым сложением, также известным как xor): <math>\scriptstyle F \,\otimes\, I \;=\; F \,\otimes\, (I_0 \,\oplus\, \delta) \;=\; F \,\otimes\, I_0 \,\oplus\, F \,\otimes\, \delta</math>, где <math>\scriptstyle F \,\otimes\, \delta</math> предварительно вычисляется для всех возможных значений <math>\scriptstyle \delta</math>. Этот режим работы требует только одного шифрования на блок и защищает от всех вышеуказанных атак, за исключением незначительной утечки: если пользователь изменяет один блок открытого текста в секторе, то изменяется только один блок шифрованного текста. (Обратите внимание, что это не та же утечка, которую имеет режим ECB: в режиме LRW одинаковые открытые тексты в разных позициях шифруются в разные шифротексты.)

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

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

Шаблон:AnchorXor-encrypt-xor (XEX)

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

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

<math>\begin{align}

X &= E_{K}(I) \otimes \alpha^j \\ C &= E_{K}(P \oplus X) \oplus X \end{align}</math>

где:

  • <math>\scriptstyle P</math> является открытым текстом,
  • <math>\scriptstyle i</math> номер сектора,
  • <math>\scriptstyle \alpha</math> является примитивным элементом <math>\scriptstyle \text{GF}\left(2^{128}\right)</math>,
  • <math>\scriptstyle j</math> это номер блока в секторе.

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

Файл:XEX mode encryption.svg

XEX-based tweaked-codebook mode with ciphertext stealing (XTS)Шаблон:Anchor

Заимствование шифротекста обеспечивает поддержку секторов с размером, не делимым на размер блока, например, 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, при условии соблюдения одного дополнительного требования, которое ограничивает максимальный размер каждого зашифрованного блока данных (обычно сектора или блока диска) значением <math>2^{20}</math> блоков 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 (с помощью <math>\scriptstyle C_{-1} \;=\; E_A(I)</math>), зашифрованный текст маскируется путем операции XOR с <math>\scriptstyle 2(C'_0 \,\oplus\, C'_{k-1})</math>, и повторно зашифровывается в режиме CBC, начиная с последнего блока. Когда базовый блочный шифр является сильной псевдослучайной перестановкой (PRP) тогда на уровне секторов схема представляет собой настраиваемый PRP. Одна проблема состоит в том, что для расшифровки <math>\scriptstyle P_0</math> необходимо последовательно пройти все данные дважды.

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

  • к открытым текстам применяется исключающее ИЛИ с <math>\scriptstyle L \;=\; E_K(0)</math>, тексты смещаются на разную величину влево и шифруются: <math>\scriptstyle P'_i \;=\; E_K(P_i \,\oplus\, 2^i L)</math>;
  • вычисляется маска: <math>\scriptstyle M \;=\; M_P \,\oplus\, M_C</math>, где <math>\scriptstyle M_P \;=\; I \,\oplus\, \bigoplus P'_i</math> и <math>\scriptstyle M_C \;=\; E_K(M_P)</math>;
  • к промежуточным шифротекстам применяется маска: <math>\scriptstyle C'_i \;=\; P'_i \,\oplus\, 2^i M</math> for <math>\scriptstyle i \;=\; 1,\, \ldots,\, k-1</math> и <math>\scriptstyle C'_0 \;=\; M_C \,\oplus\, I \,\oplus\, \bigoplus_{i=1}^{k-1} C'_i</math>;
  • вычисляются конечные шифротексты: <math>\scriptstyle C_i \;=\; E_K(C'_i) \,\oplus\, 2^i L</math> для <math>\scriptstyle i \;=\; 0,\, \ldots,\, k-1</math>.

Обратите внимание, что в отличие от LRW и CMC, существует только один ключ <math>\scriptstyle K</math>.

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

Multilinear Galois Mode (MGM)

Режимы шифрования с аутентификацией могут предоставить в некоторой степени целостность зашифрованных данных. MGM представляет из себя быстрый блочный режим шифрования с аутентификацией и возможностью распараллеливания[18]. Режим основывается на двух счетчиках и одноразовом векторе с требованием уникальности. Для того, чтобы защититься от атак, использующих значения счетчиков, применяется инкрементирование левой или правой половины счетчика. то есть <math>\scriptstyle INCR_{left}(CNT) \;=\; (CNT[n \, - \, 1 \,\colon\, n \, \setminus \, 2] \, + \, 1) \, \parallel \, (CNT[n \,\setminus\, 2 \, - \, 1 \,\colon\, 0])</math>, а <math>\scriptstyle INCR_{right}(CNT) \;=\; (CNT[n \,-\, 1 \,\colon\, n\, \setminus \,2]) \,\parallel\, (CNT[n \,\setminus\, 2\, -\, 1 \,\colon\, 0] \,+ \,1)</math> . Для избавления от предсказывания стартового значения счетчика начальное значение шифруется перед использованием. Защита от атак, использующих дополнение блока, достигается добавлением длины дополнительных данных и длины шифротекста. Также шифрование тега обеспечивает защиту от атак, использующих свойства линейности. Данный режим требует на вход открытый текст, ключ шифрования, аутентификационные данные и начальное значение счетчика. На эти данные накладываются некоторые ограничения:

  1. <math>\scriptstyle n</math> — размер блока шифра (должен быть четным).
  2. <math>\scriptstyle n - 1</math> — размер подаваемых данных счетчика.
  3. <math>\scriptstyle 0 \,<\, s \,<\, n</math>, где <math>\scriptstyle s</math> является длиной имитовставки.
  4. <math>\scriptstyle 0 \, \le \mid P \mid \, < \, 2^{\,n\,\setminus\,2}</math>, где <math>\scriptstyle P</math> — это открытый текст.
  5. <math>\scriptstyle 0 \, \le \, \mid A \mid \, < \, 2^{\,n\,\setminus\,2}</math>, где <math>\scriptstyle A</math> — это аутентификационные данные.
  6. <math>\scriptstyle 0 \, < \, \mid A \mid \, + \, \mid P \mid \, < \, 2^{\,n\,\setminus\,2}</math>

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

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

Патенты

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

См. также

Примечания

Шаблон:Примечания

Дальнейшее чтение

  • S. Halevi and P. Rogaway, A Tweakable Enciphering Mode, CRYPTO '03 (LNCS, volume 2729), 2003.
  • S. Halevi and P. Rogaway, A Parallelizable Enciphering Mode [1], 2003.
  • Standard Architecture for Encrypted Shared Storage Media, IEEE Project 1619 (P1619), [2].
  • SISWG, Draft Proposal for Key Backup Format [3], 2004.
  • SISWG, Draft Proposal for Tweakable Wide-block Encryption [4], 2004.
  • James Hughes, Encrypted Storage — Challenges and Methods [5]
  • Шаблон:Статья
  • Шаблон:Статья

Ссылки

  1. Шаблон:Cite web
  2. Шаблон:Статья
  3. Шаблон:Статья
  4. Шаблон:Cite web
  5. Шаблон:Cite web
  6. Latest SISWG and IEEE P1619 drafts and meeting information are on the P1619 home page [6] Шаблон:Wayback.
  7. M. Liskov, R. Rivest, and D. Wagner. Tweakable block ciphers [7] Шаблон:Wayback, CRYPTO '02 (LNCS, volume 2442), 2002.
  8. 8,0 8,1 8,2 Шаблон:Статья
  9. Шаблон:Cite web
  10. Шаблон:Статья
  11. Шаблон:Cite web, On the Use of Two Keys, pp. 1-3.
  12. Шаблон:Статья
  13. Шаблон:Cite web
  14. Шаблон:Cite web
  15. Шаблон:Citation Шаблон:Wayback
  16. Шаблон:Cite web
  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, [8]
  18. Stanislav Smyshlyaev, Vladislav Nozdrunov, Vasily Shishkin, Multiline Galois Mode (MGM), draft-smyshlyaev-mgm-04, [9] Шаблон:Wayback
  19. Vladislav Nozdrunov, РусКрипто, Multilinear Galois Mode. Об особенностях построения, функциональных возможностях и доказуемой стойкости, [10]
  20. * U.S. Patent 6,963,976, «Symmetric Key Authenticated Encryption Schemes» (Filed Nov. 2000, Issued Nov. 2005) [11] Шаблон:Wayback[12] Шаблон:Wayback.