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

Примитив аутентифицированного шифрования со связанными данными (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 .

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

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