XTS-AES
XTS-AES (XEX-based Tweaked CodeBook mode with CipherText Stealing, Advanced Encryption Standard) — это симметричный блочный шифр, работающий в режиме XEX (Xor-Encrypt-Xor) с использованием алгоритма AES и механизма кражи шифротекста (ciphertext stealing). Он предназначен для шифрования данных на дисках (дисковое шифрование) и других устройств хранения, где требуется защита конфиденциальности при произвольном доступе к блокам данных без изменения длины шифротекста.
История и стандартизация
XTS-AES был разработан как улучшение режима LRW (Liskov, Rivest, Wagner), предложенного в 2004 году. Основной целью было устранение уязвимости LRW, связанной с возможностью манипуляции твиком (tweak) при атаке на основе подобранного открытого текста. В 2007 году XTS-AES был включён в стандарт IEEE 1619 (IEEE Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices). В 2010 году алгоритм был принят Национальным институтом стандартов и технологий США (NIST) в качестве рекомендации SP 800-38E (Recommendation for Block Cipher Modes of Operation: The XTS-AES Mode for Confidentiality on Storage Devices). В России XTS-AES не входит в перечень стандартизированных криптоалгоритмов ГОСТ, но может применяться в коммерческих и ведомственных системах при условии сертификации ФСБ России.
Принцип работы
XTS-AES основан на схеме XEX (Xor-Encrypt-Xor), которая использует два независимых ключа AES: ключ шифрования данных (Key1) и ключ шифрования твика (Key2). Твик — это дополнительный входной параметр, который обеспечивает уникальность шифрования для каждого блока данных. В XTS-AES твик формируется на основе номера логического блока (sector number) и позиции блока внутри него.
Алгоритм шифрования
- Разделение данных: Исходный поток данных делится на блоки фиксированной длины (обычно 128 бит, 16 байт). Если длина последнего блока меньше 128 бит, применяется механизм кражи шифротекста.
- Формирование твика: Для каждого блока вычисляется твик T = AES(Key2, i) * α^j, где i — номер сектора, j — номер блока в секторе, α — примитивный элемент поля Галуа GF(2^128).
- Шифрование: Для каждого блока открытого текста P выполняется:
- P' = P XOR T (наложение твика)
- C' = AES(Key1, P') (шифрование AES)
- C = C' XOR T (снятие твика)
- Кража шифротекста: Если последний блок неполный, он дополняется частью шифротекста предыдущего блока, а затем шифруется с тем же твиком.
Алгоритм расшифрования
Расшифрование выполняется в обратном порядке: снятие твика, расшифрование AES, повторное наложение твика. Для неполных блоков применяется обратная операция кражи шифротекста.
Характеристики и особенности
Размер ключа
XTS-AES поддерживает два размера ключа:
- XTS-AES-128: два 128-битных ключа (Key1 и Key2), общая длина 256 бит.
- XTS-AES-256: два 256-битных ключа, общая длина 512 бит.
Размер блока
Размер блока фиксирован и равен 128 битам (16 байт). Это соответствует стандартному размеру блока AES.
Размер твика
Твик имеет длину 128 бит. Он вычисляется на основе номера сектора (обычно 64 бита) и номера блока (обычно 64 бита), что позволяет адресовать до 2^64 секторов по 2^64 блоков каждый.
Кража шифротекста
Механизм кражи шифротекста (ciphertext stealing) позволяет шифровать данные произвольной длины без увеличения размера шифротекста. Это критически важно для дискового шифрования, где длина зашифрованных данных должна совпадать с длиной исходных.
Применение
XTS-AES преимущественно используется в системах шифрования дисков (full disk encryption, FDE) и шифрования отдельных томов. Основные области применения:
- Шифрование жёстких дисков: Встроенные средства шифрования в операционных системах (например, BitLocker в Windows, LUKS в Linux) поддерживают XTS-AES.
- Шифрование SSD: XTS-AES используется в некоторых моделях твердотельных накопителей с аппаратным шифрованием.
- Шифрование съёмных носителей: USB-флешки, внешние диски с поддержкой аппаратного шифрования.
- Шифрование облачных хранилищ: Некоторые сервисы используют XTS-AES для защиты данных на стороне клиента.
Примеры реализации
- BitLocker (Microsoft): Использует XTS-AES-128 или XTS-AES-256 для шифрования системных и пользовательских томов.
- LUKS (Linux Unified Key Setup): Поддерживает XTS-AES в качестве одного из режимов шифрования.
- dm-crypt (Linux): Модуль ядра Linux, реализующий шифрование блочных устройств, поддерживает XTS-AES.
- TrueCrypt/VeraCrypt: В более новых версиях VeraCrypt добавлена поддержка XTS-AES.
Сравнение с другими режимами
XTS-AES vs LRW
XTS-AES является улучшением LRW. Основное отличие — в способе вычисления твика: в LRW твик вычисляется как AES(Key2, i) * α^j, но без дополнительного шифрования твика для каждого блока. XTS-AES использует полное шифрование твика для каждого блока, что предотвращает атаки на основе подобранного открытого текста.
XTS-AES vs CBC-ESSIV
CBC-ESSIV (Cipher Block Chaining with Encrypted Salt-Sector Initialization Vector) — альтернативный режим для дискового шифрования. Он использует цепочку блоков, что делает его уязвимым к атакам на основе изменения порядка блоков. XTS-AES лишён этого недостатка, так как каждый блок шифруется независимо.
XTS-AES vs GCM
GCM (Galois/Counter Mode) обеспечивает как шифрование, так и аутентификацию (проверку целостности). XTS-AES не предоставляет аутентификации, что делает его уязвимым к атакам на основе модификации шифротекста. Однако для дискового шифрования аутентификация часто не требуется, так как целостность данных обеспечивается другими механизмами (например, контрольными суммами файловой системы).
Критика и ограничения
Отсутствие аутентификации
XTS-AES не обеспечивает аутентификацию шифротекста. Это означает, что злоумышленник может изменить зашифрованные данные без обнаружения. Для критически важных данных рекомендуется использовать режимы с аутентификацией (например, AES-GCM) в сочетании с XTS-AES.
Уязвимость к атаке на основе подобранного шифротекста
При наличии возможности записи произвольных данных на диск (например, через уязвимость в драйвере) злоумышленник может провести атаку на основе подобранного шифротекста, чтобы восстановить ключ шифрования. Эта атака требует значительных вычислительных ресурсов и доступа к физическому устройству.
Производительность
XTS-AES требует два вызова AES для каждого блока (один для шифрования данных, один для шифрования твика). Это делает его медленнее, чем режимы, использующие один вызов AES (например, CTR). Однако на современных процессорах с аппаратной поддержкой AES (AES-NI) разница в производительности незначительна.
Интересные факты
- XTS-AES является единственным режимом шифрования, рекомендованным NIST для дискового шифрования.
- Алгоритм используется в стандарте IEEE 1619, который также определяет режимы для других типов устройств хранения (например, ленточных накопителей).
- В XTS-AES твик вычисляется с использованием умножения в поле Галуа GF(2^128), что позволяет эффективно реализовать алгоритм на аппаратном уровне.
Источники
- IEEE Std 1619-2007 — IEEE Standard for Cryptographic Protection of Data on Block-Oriented Storage Devices.
- NIST Special Publication 800-38E — Recommendation for Block Cipher Modes of Operation: The XTS-AES Mode for Confidentiality on Storage Devices.
- Morris Dworkin, "Recommendation for Block Cipher Modes of Operation: The XTS-AES Mode for Confidentiality on Storage Devices", NIST, 2010.
- Phillip Rogaway, "Efficient Instantiations of Tweakable Blockciphers and Refinements to Modes OCB and PMAC", 2004.
- Liskov, M., Rivest, R., Wagner, D., "Tweakable Block Ciphers", Journal of Cryptology, 2002.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →