Примитив 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 .
Примеры использования
См. «Я хочу зашифровать данные и хочу привязать зашифрованный текст к его контексту ».