Примитив аутентифицированного шифрования со связанными данными (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, но в случае сбоя (что крайне маловероятно) происходит утечка ключевого материала. XChaCha20Poly1305 не поддерживает аппаратное ускорение, поэтому может работать медленнее, чем режимы AES, если доступно аппаратное ускорение.
Гарантии безопасности
Реализации AEAD предлагают:
- Безопасность CCA2.
- Уровень стойкости аутентификации не менее 80 бит.
- Возможность шифрования не менее 2 32 сообщений общим размером 2 50 байт. Ни одна атака с использованием до 2 32 выбранных открытых текстов или шифртекстов не имеет вероятности успеха более 2 -32 .
Примеры использования
Смотрите, я хочу зашифровать данные и привязать шифротекст к его контексту .