Аутентифицированное шифрование со связанными данными (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, с очень хорошими границами для большого количества сообщений, но немного менее устойчив. Чтобы использовать это в Java, вам необходимо установить Conscrypt .
  • XChaCha20Poly1305 имеет гораздо больший лимит на количество и размер сообщений, чем AES128_GCM, но в случае сбоя (очень маловероятно) происходит утечка ключевого материала. Он не имеет аппаратного ускорения, поэтому может работать медленнее, чем режимы AES, в ситуациях, когда доступно аппаратное ускорение.

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

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

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

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

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