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