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