Шифрование диска — это особый случай защиты данных, находящихся в состоянии покоя , когда носителем данных является устройство с секторной адресацией (например, жесткий диск). В данной статье представлены криптографические аспекты проблемы. Обзор см. в разделе Шифрование диска . Для обсуждения различных пакетов программного обеспечения и аппаратных устройств, посвященных этой проблеме, см. Программное обеспечение для шифрования диска и Аппаратное обеспечение для шифрования диска .
Методы шифрования диска призваны обеспечить три различных свойства:
Первое свойство требует определения злоумышленника , конфиденциальность данных которого сохраняется. Самые сильные противники, изученные в области шифрования дисков, обладают следующими способностями:
Метод обеспечивает хорошую конфиденциальность, если единственная информация, которую такой злоумышленник может определить с течением времени, — это изменились или не изменились данные в секторе с момента последнего просмотра.
Второе свойство требует разделения диска на несколько секторов , обычно по 512 байт (длиной 4096 бит), которые шифруются и расшифровываются независимо друг от друга. В свою очередь, если данные должны оставаться конфиденциальными, метод шифрования должен быть настраиваемым ; никакие два сектора не должны обрабатываться одинаково. В противном случае злоумышленник может расшифровать любой сектор диска, скопировав его в неиспользуемый сектор диска и запросив его расшифровку. В то время как целью обычного блочного шифра является имитация случайной перестановки любого секретного ключа , цель настраиваемого шифрования состоит в том, чтобы имитировать случайную перестановку любого секретного ключа и любой известной настройки .
Третье свойство в целом не вызывает споров. Однако он косвенно запрещает использование потоковых шифров , поскольку для своей безопасности потоковые шифры требуют, чтобы одно и то же начальное состояние не использовалось дважды (что было бы в случае, если сектор обновляется разными данными); таким образом, для этого потребуется метод шифрования для хранения отдельных начальных состояний для каждого сектора на диске — что, по-видимому, является пустой тратой места. Альтернатива — блочный шифр — ограничена определенным размером блока (обычно 128 или 256 бит). По этой причине шифрование диска в основном изучает режимы цепочки , которые расширяют длину блока шифрования, чтобы охватить весь сектор диска . Уже перечисленные соображения делают непригодными несколько известных режимов цепочки: режим ECB , который нельзя настроить, и режимы, превращающие блочные шифры в поточные шифры, такие как режим CTR .
Эти три свойства не обеспечивают никакой гарантии целостности диска; то есть они не сообщают вам, изменял ли злоумышленник ваш зашифрованный текст. Частично это связано с тем, что абсолютная гарантия целостности диска невозможна: несмотря ни на что, злоумышленник всегда может вернуть весь диск в предыдущее состояние, минуя любые подобные проверки. Если требуется некоторый неабсолютный уровень целостности диска, его можно достичь на зашифрованном диске для каждого файла отдельно, используя коды аутентификации сообщений .
Методы шифрования диска также различают на «узкоблочные» и «широкоблочные». Для открытого текста размером с сектор узкоблочный метод шифрует его в нескольких блоках, тогда как широкоблочный метод делает это только в одном. Методы узкой блокировки, такие как LRW, XES и XTS, позволяют злоумышленнику использовать степень детализации блоков для анализа и воспроизведения трафика. [1] Широкоблочный шифр в идеале делает весь зашифрованный текст нераспознаваемым при изменении любого места в открытом тексте. [2]
Как и большинство схем шифрования, дисковое шифрование на основе блочного шифра использует режимы работы , которые позволяют шифровать большие объемы данных, чем размер блока шифров (обычно 128 бит). Таким образом, режимы — это правила многократного применения одноблочных операций шифров.
Цепочка шифроблоков (CBC) — это общий режим цепочки, в котором зашифрованный текст предыдущего блока перед шифрованием фиксируется с открытым текстом текущего блока:
Поскольку для первого блока не существует «зашифрованного текста предыдущего блока», в качестве . Это, в свою очередь, делает CBC в некотором смысле настраиваемым.
CBC страдает от некоторых проблем. Например, если IV предсказуемы, то злоумышленник может оставить на диске «водяной знак», то есть сохранить специально созданный файл или комбинацию файлов, которые можно идентифицировать даже после шифрования. Точный метод создания водяного знака зависит от конкретной функции, предоставляющей IV, но общий рецепт состоит в том, чтобы создать два зашифрованных сектора с идентичными первыми блоками и ; эти два затем связаны друг с другом посредством . Таким образом, шифрование идентично шифрованию , оставляя водяной знак на диске. Точный шаблон «тот же-разный-то же-разный» на диске затем можно изменить, чтобы сделать водяной знак уникальным для данного файла.
Для защиты от атаки с использованием водяных знаков используется шифр или хэш-функция для генерации IV на основе ключа и текущего номера сектора, так что злоумышленник не может предсказать IV. В частности, подход ESSIV использует блочный шифр в режиме CTR для генерации IV.
ESSIV [3] — это метод генерации векторов инициализации для блочного шифрования для использования при шифровании диска. Обычные методы генерации IV представляют собой предсказуемые последовательности чисел, основанные, например, на метке времени или номере сектора, и допускают определенные атаки, такие как атака с использованием водяных знаков . ESSIV предотвращает такие атаки, генерируя IV из комбинации номера сектора SN и хеша ключа. Именно комбинация с ключом в виде хеша делает IV непредсказуемым.
ESSIV был разработан Клеменсом Фрувиртом и интегрирован в ядро Linux начиная с версии 2.6.10, хотя аналогичная схема использовалась для генерации IV для шифрования подкачки OpenBSD с 2000 года. [4]
ESSIV поддерживается в качестве опции системами шифрования дисков dm-crypt [5] и FreeOTFE .
Хотя CBC (с ESSIV или без него) обеспечивает конфиденциальность, он не гарантирует целостность зашифрованных данных. Если злоумышленнику известен открытый текст, можно изменить каждый второй блок открытого текста на значение, выбранное злоумышленником, в то время как блоки между ними будут изменены на случайные значения. Это можно использовать для практических атак на шифрование диска в режиме CBC или CBC-ESSIV. [6]
Настраиваемое узкоблочное шифрование (LRW) [7] представляет собой реализацию режима операций, введенного Лисковым, Ривестом и Вагнером [8] (см. теорему 2). В этом режиме используются два ключа: ключ для блочного шифра и дополнительный ключ того же размера, что и блок. Например, для AES с 256-битным ключом — это 256-битное число, а — 128-битное число. Блок шифрования с логическим индексом (настройкой) использует следующую формулу:
Здесь умножение и сложение выполняются в конечном поле ( для AES). При некоторых предварительных вычислениях требуется только одно умножение на сектор (обратите внимание, что сложение в двоичном конечном поле представляет собой простое побитовое сложение, также известное как xor): , где предварительно вычисляются для всех возможных значений . Этот режим работы требует только одного шифрования для каждого блока и защищает от всех вышеперечисленных атак, за исключением незначительной утечки: если пользователь меняет один блок открытого текста в секторе, изменяется только один блок зашифрованного текста. (Обратите внимание, что это не та же утечка, что и в режиме ECB: в режиме LRW одинаковые открытые тексты в разных позициях шифруются разными зашифрованными текстами.)
С LRW существуют некоторые проблемы безопасности , и этот режим работы теперь заменен XTS.
LRW используется BestCrypt и поддерживается в качестве опции для систем шифрования дисков dm-crypt и FreeOTFE .
Другой настраиваемый режим шифрования, XEX ( xor-encrypt-xor ), был разработан Рогавеем [9] для обеспечения эффективной обработки последовательных блоков (относительно используемого шифра) в пределах одного блока данных (например, сектора диска). Твик представлен как комбинация адреса сектора и индекса блока внутри сектора (исходный режим XEX, предложенный Рогавеем [9], допускает несколько индексов). Зашифрованный текст получается с помощью:
где:
Основные операции режима LRW (шифр AES и умножение полей Галуа ) такие же, как и в режиме Галуа/Счетчик (GCM), что позволяет компактно реализовать универсальное аппаратное обеспечение LRW/XEX/GCM.
У оригинального XEX есть слабость. [10]
Кража зашифрованного текста обеспечивает поддержку секторов, размер которых не делится на размер блока, например секторов по 520 байт и блоков по 16 байт. XTS-AES был стандартизирован 19 декабря 2007 года [11] как IEEE P1619 . [12] Стандарт XTS требует использования другого ключа для IV-шифрования, чем для блочного шифрования; это отличается от XEX, который использует только один ключ. [9] [13] : 1–4. В результате пользователи, которым требуется шифрование AES -256 и AES-128, должны предоставить 512 бит и 256 бит ключа соответственно. Два ключа (т. е. обе половины ключа XTS) должны быть разными, чтобы XTS был CCA-безопасным, поскольку XTS вычисляет последовательность, начиная с ; это отличается от XEX, который начинается с . [9] : 7 [13] : 6
27 января 2010 г. NIST выпустил специальную публикацию (SP) 800-38E [14] в окончательной форме. SP 800-38E — это рекомендация для режима работы XTS-AES, стандартизированного стандартом IEEE Std 1619-2007, для криптографических модулей. Публикация утверждает режим XTS-AES алгоритма AES со ссылкой на стандарт IEEE Std 1619-2007 с учетом одного дополнительного требования, которое ограничивает максимальный размер каждой зашифрованной единицы данных (обычно сектора или блока диска ) до 2 20 AES. блоки. Согласно SP 800-38E: «При отсутствии аутентификации или контроля доступа XTS-AES обеспечивает большую защиту, чем другие утвержденные режимы только конфиденциальности, от несанкционированного манипулирования зашифрованными данными».
XTS поддерживается BestCrypt , Botan , cgd NetBSD, [ 15] dm-crypt , FreeOTFE , TrueCrypt , VeraCrypt , [16] DiskCryptor, geli FreeBSD , программным обеспечением для шифрования дисков OpenBSD softraid, OpenSSL , Mac OS X Lion 's FileVault 2, BitLocker для Windows 10 [17] и wolfCrypt .
Режим XTS подвержен манипулированию и подделке данных, и приложения должны использовать меры для обнаружения изменений данных, если манипуляция и подделка вызывают беспокойство: «...поскольку тегов аутентификации нет , любой зашифрованный текст (исходный или измененный злоумышленником) будет расшифровывается как некоторый открытый текст, и нет встроенного механизма для обнаружения изменений. Лучшее, что можно сделать, — это гарантировать, что любое изменение зашифрованного текста полностью рандомизирует открытый текст, и полагаться на то, что приложение, использующее это преобразование, включает достаточную избыточность. в его открытом тексте, чтобы обнаружить и отбросить такие случайные открытые тексты». Для этого потребуется поддерживать контрольные суммы для всех данных и метаданных на диске, как это делается в ZFS или Btrfs . Однако в широко используемых файловых системах, таких как ext4 и NTFS, от подделки защищены только метаданные, а обнаружение подделки данных отсутствует. [18]
Этот режим чувствителен к анализу трафика, повторному воспроизведению и атакам рандомизации на сектора и 16-байтовые блоки. При перезаписи данного сектора злоумышленники могут собирать мелкозернистые (16 байт) зашифрованные тексты, которые можно использовать для анализа или повторных атак (с степенью детализации 16 байт). Можно было бы определить общесекторные блочные шифры, но, к сожалению, с ухудшением производительности (см. ниже). [1]
CMC и EME защищают даже от упомянутой выше незначительной утечки ЖРО. К сожалению, цена — двукратное снижение производительности: каждый блок необходимо шифровать дважды; многие считают это слишком высокой ценой, поскольку такая же утечка на уровне сектора в любом случае неизбежна.
CMC, введенный Халеви и Рогауэем, означает CBC-mask-CBC: весь сектор шифруется в режиме CBC (с помощью ), зашифрованный текст маскируется путем xoring с помощью , и повторно шифруется в режиме CBC, начиная с последнего блока. Если базовый блочный шифр представляет собой стойкую псевдослучайную перестановку (PRP), то на уровне сектора схема представляет собой настраиваемую PRP. Одна из проблем заключается в том, что для расшифровки необходимо дважды последовательно пройти все данные.
Чтобы решить эту проблему, Халеви и Рогауэй представили распараллеливаемый вариант под названием EME (ECB-маска-ECB). Это работает следующим образом:
Обратите внимание, что в отличие от LRW и CMC здесь имеется только один ключ .
CMC и EME рассматривались SISWG для стандартизации . EME запатентован, поэтому его не рекомендуют использовать в качестве основного поддерживаемого режима. [19]
Конструкция HBSH (хеш, блочный шифр, потоковый шифр, хеш), опубликованная сотрудниками Google в 2018 году, позволяет использовать быстрый потоковый шифр при шифровании дисков. Схема Adiantum , используемая в младших устройствах Android, специально выбирает NH , 256-битный расширенный стандарт шифрования (AES-256), ChaCha12 и Poly1305 . Конструкция сборная и широкоблочная. Для этого требуется три прохода данных, но он все равно быстрее, чем AES-128-XTS на ARM Cortex-A7 (который не имеет набора инструкций AES ). [20]
В 2023 году Альдо Гансинг, Джоан Дэмен и Барт Меннинк представили «двухэтажную» конструкцию, в которой также используется поточный шифр. Он снова настраиваемый и широкоблочный. [2]
Хотя схема шифрования с аутентификацией IAPM обеспечивает шифрование, а также тег аутентификации, компонент шифрования режима IAPM полностью описывает схемы LRW и XEX, описанные выше, и, следовательно, XTS без аспекта кражи зашифрованного текста . Это подробно описано на рисунках 8 и 5 патента США № 6963976. [21]
{{cite journal}}
: Требуется цитировать журнал |journal=
( помощь ){{cite book}}
: |journal=
игнорируется ( помощь ){{cite journal}}
: Требуется цитировать журнал |journal=
( помощь ){{cite journal}}
: Требуется цитировать журнал |journal=
( помощь )CS1 maint: multiple names: authors list (link){{cite journal}}
: Требуется цитировать журнал |journal=
( помощь )