Аутентифицированное шифрование со связанными данными (AEAD)

Примитив аутентифицированного шифрования с ассоциированными данными (AEAD) является наиболее распространенным примитивом для шифрования данных и подходит для большинства задач.

AEAD обладает следующими свойствами:

  • Секретность : О содержании текста ничего не известно, кроме его длины.
  • Подлинность : Невозможно изменить зашифрованный открытый текст, лежащий в основе зашифрованного текста, без обнаружения.
  • Симметричный алгоритм : шифрование открытого текста и расшифровка зашифрованного текста выполняются с помощью одного и того же ключа.
  • Рандомизация : Шифрование выполняется случайным образом. Два сообщения с одинаковым открытым текстом дают разные зашифрованные тексты. Злоумышленники не могут знать, какой зашифрованный текст соответствует данному открытому тексту. Если вы хотите этого избежать, используйте вместо этого детерминированный AEAD .

Сопутствующие данные

AEAD можно использовать для привязки зашифрованного текста к конкретным связанным данным . Предположим, у вас есть база данных с полями user-id и encrypted-medical-history . В этом сценарии user-id может использоваться в качестве связанных данных при шифровании encrypted-medical-history . Это предотвращает перемещение истории болезни от одного пользователя к другому злоумышленником.

Указание связанных данных является необязательным. Если эти данные указаны, расшифровка будет успешной только в том случае, если одни и те же связанные данные будут переданы как в вызовы шифрования, так и в вызовы расшифровки.

Выберите тип ключа

Хотя для большинства случаев мы рекомендуем AES128_GCM , существуют различные типы ключей для разных задач. AES128 обеспечивает 128-битную безопасность, а AES256 — 256-битную.

Два важных ограничения безопасности при выборе режима работы:

  1. В: Сколько сообщений зашифровано одним и тем же ключом?
  2. Размер сообщений: Каков размер сообщений?

В целом:

  • AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256) с 16-байтовым вектором инициализации (IV) является наиболее консервативным режимом с хорошими границами.
  • AES-EAX (AES128_EAX, AES256_EAX) немного менее консервативен и немного быстрее, чем AES128_CTR_HMAC_SHA256.
  • AES-GCM (AES128_GCM, AES256_GCM) обычно является самым быстрым режимом с самыми строгими ограничениями на количество сообщений и их размер. Когда эти ограничения на длину открытого текста и связанных с ним данных (см. ниже) превышаются, AES-GCM дает катастрофический сбой и происходит утечка ключевого материала.
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) почти так же быстр, как AES-GCM. Он имеет те же ограничения, что и AES-GCM, по количеству сообщений и размеру сообщений, но при превышении этих ограничений происходит менее катастрофический сбой: может быть раскрыта только информация о равенстве двух сообщений. Это делает его более безопасным в использовании, чем AES-GCM, но на практике он используется реже. Для использования этого алгоритма в Java необходимо установить Conscrypt .
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305) имеет гораздо более высокие ограничения по количеству и размеру сообщений, чем AES-GCM, но в случае сбоя (что крайне маловероятно) происходит утечка ключевого материала. Он не использует аппаратное ускорение, поэтому может работать медленнее, чем режимы AES, в ситуациях, когда доступно аппаратное ускорение.

Гарантии безопасности

Реализации AEAD предлагают:

  • Безопасность CCA2.
  • Надежность аутентификации не менее 80 бит.
  • Возможность зашифровать как минимум 2³² сообщений общим объемом 2³⁰ байт. Ни одна атака с использованием до 2³² выбранных открытых или зашифрованных текстов не имеет вероятности успеха, превышающей 2³² .

Примеры вариантов использования

Видите ли, я хочу зашифровать данные и привязать зашифрованный текст к его контексту .