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

Примитив Authenticated Encryption with Associated Data (AEAD) является наиболее распространенным примитивом шифрования данных и подходит для большинства нужд.

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

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

Связанные данные

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

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

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

  • AES128_CTR_HMAC_SHA256 с 16-байтовым вектором инициализации (IV) — наиболее консервативный режим с хорошими границами.
  • AES128_EAX немного менее консервативен и немного быстрее, чем AES128_CTR_HMAC_SHA256.
  • AES128_GCM обычно является самым быстрым режимом с самыми строгими ограничениями на количество и размер сообщений. Когда эти ограничения на длину открытого текста и связанных с ним данных (ниже) превышаются, AES128_GCM дает сбой и приводит к утечке ключевого материала.
  • AES128_GCM_SIV почти так же быстр, как AES128_GCM. Он имеет те же ограничения, что и AES128_GCM, на количество сообщений и размер сообщения, но при превышении этих ограничений он выходит из строя менее катастрофическим образом: может произойти утечка только того факта, что два сообщения равны. Это делает его более безопасным в использовании, чем AES128_GCM, но на практике он используется менее широко. Чтобы использовать это в Java, вам необходимо установить Conscrypt .
  • XChaCha20Poly1305 имеет гораздо больший лимит на количество и размер сообщений, чем AES128_GCM, но в случае сбоя (очень маловероятно) происходит утечка ключевого материала. Он не имеет аппаратного ускорения, поэтому в ситуациях, когда доступно аппаратное ускорение, он может работать медленнее, чем режимы AES.

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

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

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

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

См. «Я хочу зашифровать данные и хочу привязать зашифрованный текст к его контексту» .