AEAD-режим блочного шифрования Содержание Возникновение...
Режимы шифрования
англ.блочныхрежимов шифрованияаутентифицированоOCB modeCCM modeEAX modeCWC modeGCM modeNISTauthenticated encryptionимитовставкуnonceатаки повторного воспроизведениялогического сложения
AEAD-режимы блочного шифрования (англ. Authenticated Encryption with Associated Data, «аутентифицированное шифрование с присоединёнными данными») — класс блочных режимов шифрования, при котором часть сообщения шифруется, часть остается открытой, и всё сообщение целиком аутентифицировано. Впервые идея такого класса шифрования была предложена Charanjit Jutla в 2000 году[1]. В настоящее время предложено несколько AEAD-режимов шифрования: OCB mode (с версии OCB2), CCM mode, EAX mode, CWC mode, и GCM mode. Последний с 2007 года является стандартом NIST[2].
Содержание
1 Возникновение проблемы
2 Методы реализации
2.1 Методы реализации AEAD-режима с помощью блочного шифра и имитовставки
2.1.1 Encrypt-then-mac
2.1.2 Mac-then-encrypt
2.2 Методы реализации AEAD-режима с помощью AE-схемы
2.2.1 Nonce stealing
2.2.2 Ciphertext translation
3 AEAD-алгоритмы
3.1 AEAD AES 128 GCM
3.2 AEAD AES 256 GCM
3.3 AEAD AES 128 CCM
3.4 AEAD AES 256 CCM
4 Примечания
5 Ссылки
Возникновение проблемы |
Существуют алгоритмы, позволяющие осуществить аутентификацию и шифрование — authenticated encryption (далее AE), однако в них не предусмотрена возможность прикреплять открытый текст (associated data), которая возникает, в частности, при необходимости прикрепить к сообщению IP-адрес. Вообще, часто незашифрованные данные требуются для передачи заголовков, адресов, портов, версий протокола и других данных, необходимых для принятия решения о том, как должен обрабатываться или пересылаться зашифрованный текст. Часто эти данные должны быть аутентифицированы, в то же время оставаясь открытыми, чтобы устройства обработки могли оперировать с данными сообщениями должным образом. Возникает желание модифицировать AE-схему, добавив к ней имитовставку (MAC) для аутентификации открытых данных, и «задешево» получить AEAD-схему. Однако очевидные «наивные» решения, примеры которых рассмотрим ниже, оказываются неэффективными.
Пусть, например, нужно передать сообщение M, открытый заголовок H, выбран какой-либо AE-режим шифрования E и функция MAC. Тогда, если передавать E(M) и H, то H окажется не аутентифицированным. Если же передать E(M||H) и H, длина передаваемого сообщения окажется длиннее исходного (так как будет выполнена ненужная в данной задаче операция шифрования H), то же можно сказать и для случая передачи H, E(M), MAC(H||E(M)) (так как E(M) уже аутентифицированно и использование MAC требует расхода лишних ресурсов).
Важно, что и AE-схемы, и AEAD-схемы требуют использования nonce. Это необходимо для обеспечения семантической безопасности (невозможность злоумышленника при многократном использовании схемы под одним и тем же ключом получить отношения между сегментами зашифрованных сообщений), а также для защиты от атаки повторного воспроизведения, при которой злоумышленник под видом легального пользователя повторно отправляет сообщение. Генерация nonce и использование его только единожды ложится на ответственность отправителя. Для этого можно использовать, например, счетчик.
Методы реализации |
Существуют два принципиально разных пути реализации AEAD-режима шифрования. Первый предполагает использование блочного режима шифрования и имитовставки. В этом случаем разработчик AEAD-схемы может выбирать любой блочный алгоритм шифрования и функцию получения имитовставки, при этом так же необходимо использовать nonce. Второй способ — какое-либо преобразование AE-схемы. Требования к последнему методу остаются прежними: схема не должна значительно замедляться, также в ней не должно появляться новых уязвимостей. Безопасность и надежность данных подходов была доказана в статье Charanjit S. Jutla «Encryption Modes with Almost Free Message Integrity» при условии, что nonce не используется повторно и хэш-функция H является криптографически стойкой.
Методы реализации AEAD-режима с помощью блочного шифра и имитовставки |
Получить AEAD-режим с помощью блочного шифра и имитовставки возможно двумя способами: сначала шифруя сообщение, затем аутентифицируя (encrypt-then-mac), или же в обратном порядке (mac-then-encrypt).
Encrypt-then-mac |
В данном варианте сначала шифруется сообщение M с использованием nonce N, затем заголовок H и зашифрованное сообщение аутентифицируются с помощью MAC с тем же nonce.
Mac-then-encrypt |
Аналогично предыдущему, но в обратном порядке: сначала создается имитовставка MAC от заголовка H, nonce N и открытого текста M, а затем шифруется сообщение M с полученной имитовставкой с использованием того же nonce N.
Методы реализации AEAD-режима с помощью AE-схемы |
Как было показано выше, эффективно прикрепить аутентифицированный открытый текст к построенному с помощью AE-схемы сообщению примитивными способами невозможно. Однако было предложено[1] два следующих метода.
Nonce stealing |
Пусть имеется AE-схема, использующая nonce размером n бит, а приложению, использующему данную схему, достаточно использовать лишь n2 бит (n2 < n). Тогда свободные h = n − n2 бит могут быть использованы для хранения открытых данных. Данная схема имеет ограничение на размер открытых данных, однако часто этого достаточно. Пусть алгоритм имеет nonce размером 128 бит, а приложение использует лишь 16, тогда для открытых данных остается 112 бит, которых часто вполне достаточно (например, для адреса в протоколе IPv4 требуется 32 бита).
Ciphertext translation |
Данный метод приведения AE-схемы к AEAD-схеме основан на операции логического сложения (XOR) ⊕{displaystyle oplus }, при этом, если производится операция над строками разной длины, то более короткая дополняется не значимыми нулями, например: 11101001⊕101=11101100{displaystyle 11101001oplus 101=11101100}.
Данный метод включает в себя следующие операции: используется AE-схема для шифрования сообщения с ключом K и получения промежуточного шифртекста CT, далее применяется хэш-функция FK′{displaystyle F_{K'}} для получения сдвига Δ, и наконец, финальный шифртекст получается в результате применения операции логического сложения Δ к последним битам CT. Заметим, что если заголовок является пустой строкой, полученная AEAD-схема переходит в исходную AE-схему шифрования. Если заголовок остается неизменным в течение сессии, то сдвиг Δ может быть вычислен заранее, что положительно сказывается на времени шифрования — оставшаяся операция логического сложения легко реализуема (в том числе и аппаратно).
Определим получаемую AEAD-схему более строго следующим образом:
E¨K,K′N,H(M)=EKN(M)⊕FK′(H){displaystyle {ddot {E}}_{K,K'}^{N,H}(M)=E_{K}^{N}(M)oplus F_{K'}(H)}
D¨K,K′N,H(C)=DKN(C⊕FK′(H)){displaystyle {ddot {D}}_{K,K'}^{N,H}(C)=D_{K}^{N}(Coplus F_{K'}(H))}
То есть, предполагая, что H≠0{displaystyle Hneq 0}, вычисляем FK′(H)={displaystyle F_{K'}(H)=}Δ длиной в τ бит, зашифровываем M и производим операцию логического сложения последних τ бит с Δ.
Данный метод имеет следующие преимущества:
- применим к любой AE-схеме;
- если не нужно прикреплять незашифрованные данные H, исходный AE-метод не усложняется;
- если заголовок H не меняется с течением времени, FK′(H){displaystyle F_{K'}(H)} может быть заранее вычислена.
Однако недостаток метода состоит в необходимости использования двух ключей K и K’.
AEAD-алгоритмы |
Для примера опишем некоторые AEAD-алгоритмы. Два из них основаны на AES GCM, два из них — на AES CCM. Один из алгоритмов в каждой паре использует 128-битный ключ, другой — 256 битный.
AEAD AES 128 GCM |
Данный алгоритм использует AES-128 в качестве алгоритма блочного шифрования, используя ключ, nonce, сообщение и заголовок в качестве входных данных. Длина заголовка — 16 байт. Зашифрованный текст формируется добавлением аутентификационного тега к промежуточному зашифрованному тексту, полученному в качестве выходных данных GCM-шифрования. Требования к размерам входных и выходных данных следующие:
- размер nonce — 12 байт;
- длина ключа — 16 байт;
- максимальный размер сообщения 2^36 − 31 байт;
- максимальный размер заголовка 2^61 − 1 байт;
- максимальный размер зашифрованного сообщения 2^36 − 15 байт.
Таким образом, шифртекст на 16 байт длиннее исходного открытого сообщения.
AEAD AES 256 GCM |
Алгоритм полностью аналогичен предыдущему, за исключением использования ключа размером 32 байт и AES-256 GCM.
AEAD AES 128 CCM |
Аналогично предыдущему, за исключением использования CCM режима вместо GCM, при этом:
- размер nonce 12 байт;
- длина ключа 16 байт;
- максимальный размер сообщения 2^24 − 1 байт;
- максимальный размер заголовка 2^64 − 1 байт;
- максимальный размер зашифрованного сообщения 2^24 + 15 байт.
Как и при использовании GCM, размер шифртекста на 16 байт длиннее исходного сообщения.
AEAD AES 256 CCM |
Алгоритм полностью аналогичен предыдущему, за исключением использования ключа размером 32 байта и AES-256 GCM.
Примечания |
↑ 12 Jutla, Charanjit S. (2000-08-01) «Encryption Modes with Almost Free Message Integrity». Cryptology ePrint Archive: Report 2000/039. IACR. Retrieved 2013-03-16
↑ NIST Special Publication 800-38D, November, 2007, Recommendation for BlockCipher Modes of Operation:Galois/Counter Mode (GCM) and GMAC.
Ссылки |
OCB homepage (недоступная ссылка)
- NIST homepage
- An Interface and Algorithms for Authenticated Encryption Specifies