Полнодисковое шифрование

В данной статье будет рассмотрен вопрос полнодискового шифрования накопителей информации, таких как жёсткие диски, flash-память и подобных устройств с блочным доступом.

Особенности

Полнодисковое шифрование существенно отличается от того, которым обычно шифруют файлы (системы PGP, OpenSSL enc модуль, и подобные), так как появляется ряд требований (кроме автоматически явного – обеспечение конфиденциальности):

Предполагается, что злоумышленник:

Данные предположения должны свести всю информацию которую может получить злоумышленник только к фактам изменения секторов.

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

Режимы шифрования и атаки

Так как сектор представляет из себя длинную цепочку блоков, то хорошим вариантом было бы применение режима сцепления блоков шифротекста (Cipher Block Chaining – CBC), где каждый последующий шифруемый блок данных складывается по модулю 2 (XOR-преобразование; исключающее логическое ИЛИ) с предыдущим. Так как каждый сектор диска независим от предыдущего, то необходимо вычисление начального вектора инициализации для каждого сектора.

Хорошей основой более полного представления об используемой здесь терминологии является книга Брюса Шнайера "Прикладная криптография".

Здесь возникает множество возможных атак и сложностей:

Для борьбы с атакой водяным знаком можно применять технологию ESSIV (Encrypted Salt-Sector Initialization Vector). Её суть заключается в том, что вектор инициализации каждого сектора вычисляется шифрованием номера сектора и хэша ключа шифрования.

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

Избежать утечку открытого текста сектора и подмену шифротекста может режим шифрования CMC: CBC-mask-CBC. Его суть заключается в трёх этапах обработки сектора: обычное CBC шифрование, "маскировку" шифротекста, CBC шифрование с конца сектора. Это существенно уменьшает производительность обработки одного сектора.

Существует и множество других режимов:

EME (ECB-Mix-ECB)

режим схож с CMC, но требует меньше криптографических операций по обработке одного сектора и его можно распараллеливать.

LRW (Liskov, Rivest, Wagner)

работает не с целым сектором диска, а всего-лишь с одним блоком (narrow-block encryption). Для его работы необходимо использование двух ключей: один для шифрования, а другой для побелки (whitening; технология осложнения проведения атак на блочные шифры, путём XOR-преобразования открытого текста до самого шифрования с ключом и XOR-преобразования шифротекста после) до и после шифрования, с учётом логического номера блока на диске. Данный режим более быстр чем CMC и EME, но не обеспечивает защиту от возможности обнаружения модификации.

XEX (XOR-Encryption-XOR)

XOR-преобразование данных производится с довольно сложно генерируемым вектором инициализации (называемым tweak-ом). Данный алгоритм имеет меньшую производительность чем LRW.

MCB (Masked CodeBook)

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

XTS

(XEX-based Tweakable CodeBook mode with Ciphertext Stealing – XEX-TCB-CTS (что должно писаться как XTC, но из-за созвучия с "ecstasy" именуется "XTS") являющийся NIST и IEEE стандартом. Отличием XTS от XEX является использование двух ключей: один для шифрования самих данных, а другой для шифрования адреса позиции блока. TCB является на самом деле ECB режимом, но с двумя дополнительными входами на каждом из этапов шифрования (что и является tweak-ом). Кроме того, применяется технология "кражи шифротекста" (ciphertext stealing), предотвращающая рост шифротекста когда открытый текст не ровно (по длине) умещается в шифроблоки. Нередко для увеличения энтропии случайных данных применяют ESSIV совместно с XTS режимом.

Компромиссом остаётся вопрос выбора маленького размера шифруемого сектора или большого. Последний безусловно более криптографически стоек к атакам, однако требует больших вычислительных мощностей для его обработки.

Сравнение режимов

Сравнение криптостойкости некоторых алгоритмов:

Режим вектора инициализацииРежим шифрованияУтечка данныхАтака водяным знакомАтака подменыАтака перемещенияОпределение точки изменения данных
публичныйCBCДаДаДаДаДа
ESSIVCBCДаНетДаДаДа
plumb-IVCBCДаНетДаДаНет
публичныйCMCНетНетНетНетНет
публичныйEMEНетНетНетНетНет
публичныйLRWНетНетНетНетДа
публичныйXTSНетНетНетНетНет

Сравнение производительности некоторых алгоритмов:

Режим вектора инициализацииРежим шифрованияВызовов шифраXOR операцийДополнительно
публичныйCBCnn
ESSIVCBCn+1n
plumb-IVCBC2n-12n
публичныйCMC2n+12n+1LW GF
публичныйEME2n+15n3n-1 LW GF
публичныйLRWn2nn HW GF
публичныйXTS2n2nn HW GF
ESSIVXTS2n+12nn HW GF

где LW GF и HW GF являются функциями перемножения "легковесных" и "тяжеловесных" конечных полей.

Меры предосторожности при использовании

Самое главное что необходимо держать надёжно в секрете – ключи шифрования диска. Они являются самым уязвимым местом всей системы.

Наиболее удобнее для пользователя – хранить ключи для доступа к накопителю прямо на нём самом, безусловно храня их тоже в зашифрованном виде. Более надёжный вариант это хранить ключи отдельно:

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

Более лучшим решением является использование парольных фраз (passphrases): последовательность слов, фраз, предложений, стихов и подобных данных. Парольные фразы, как правило, достаточно легко запоминаемы. Не смотря на то, что энтропия, например письменного английского языка, очень низка: около 1.1 бита на символ, количество этих символов достаточно велико и оно сложно поддаётся словарной атаке, то суммарная энтропия случайных данных парольных фраз достаточно велика для создания криптографически стойкого ключа.

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

Аппаратное шифрование

Многие современные производители жёстких дисков предлагают аппаратно реализованное полнодисковое шифрование: Hitachi, Samsung, Seagate, Toshiba, Western Digital.

Предлагаемые жёсткие диски отличаются от обычных накопителей наличием собственно самой схемы шифрования и памяти для хранения ключей шифрования.

Преимущества аппаратных реализаций перед программными очевидны:

Однако, рекомендовать подобные решения нельзя. К сожалению, практически все производители умалчивают о конкретной реализации режимов шифрования внутри их накопителей, а в реализациях, про которые хоть что-то известно, используется простой CBC режим с публичным вектором инициализации. Данная схема подвержена множеству атак.

Вывод

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

Выбор метода шифрования это поиск компромисса между эффективностью и производительностью.

Сергей Матвеев, руководитель отдела исследования и разработки ETegro Technologies.

Отдельное спасибо за помощь в написании статьи: Андрею Сапронову, техническому директору ETegro Technologies.