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

Примитив AEAD (аутентифицированное шифрование с присоединенными данными) – самый распространенный примитив для шифрования данных, который подходит для большинства задач.

AEAD имеет следующие свойства:

  • Secrecy О незашифрованном тексте ничего не известно, кроме его длины.
  • Подлинность. Невозможно изменить зашифрованный текст, не оставив следов.
  • Симметричное. Для шифрования открытого текста и расшифровки зашифрованного текста используется один и тот же ключ.
  • Случайное шифрование. Шифрование выполняется случайным образом. Два сообщения с одинаковым простым текстом дают разные зашифрованные тексты. Злоумышленники не могут узнать, какой зашифрованный текст соответствует заданному простому тексту. Если вы хотите этого избежать, используйте детерминированное AEAD-шифрование.

Связанные данные

AEAD можно использовать, чтобы связать зашифрованный текст с определенными связанными данными. Предположим, у вас есть база данных с полями user-id и encrypted-medical-history. В этом случае user-id можно использовать в качестве связанных данных при шифровании encrypted-medical-history. Это не позволит злоумышленнику перенести историю болезни одного пользователя другому.

Связанные данные указывать необязательно. Если указать этот параметр, расшифровка будет успешной, только если в вызовы шифрования и расшифровки переданы одни и те же связанные данные.

Выберите тип ключа

Хотя для большинства случаев мы рекомендуем AES128_GCM, существуют различные типы ключей для разных потребностей. AES128 обеспечивает 128-битный уровень безопасности, а AES256 – 256-битный.

При выборе режима следует учитывать два важных ограничения безопасности:

  1. Запросов в секунду: сколько сообщений зашифровано одним ключом?
  2. Размер сообщений.

Поддерживаемые типы ключей:

  • AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256) с 16-байтовым вектором инициализации (IV) – наиболее консервативный режим с хорошими границами.
    • Фиксация ключа.
  • AES-EAX (AES128_EAX, AES256_EAX) – немного менее консервативный и немного более быстрый, чем AES128_CTR_HMAC_SHA256.
    • MLGR без фиксации ключа.
  • AES-GCM (AES128_GCM, AES256_GCM) обычно является самым быстрым режимом с самыми строгими ограничениями на количество сообщений (232) и размер сообщений (~64 ГБ на сообщение). При превышении этих лимитов AES-GCM катастрофически выходит из строя, раскрывая открытый текст и часть ключа аутентификации внутреннего ключа AES-GCM.
    • AES-GCM не является ни надежным [ABN], ни фиксирующим ключ [GLR]. Можно сгенерировать зашифрованный текст, который можно расшифровать с помощью двух разных ключей. Это может привести к атакам [DGRW]. Если ключ выбирает злоумышленник, внимательно изучите модель угроз.
  • AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV) [RFC8452] устойчив к случайному недопустимому использованию однократно используемого числа и почти так же эффективен, как AES-GCM. Ограничения на количество писем и размер письма для AES-GCM-SIV со случайными векторами инициализации намного выше, чем для AES-GCM. При превышении этих ограничений AES-GCM-SIV дает менее катастрофический сбой: он только сообщает, что два сообщения равны. AES-GCM-SIV безопаснее, но реже используется на практике.
    • Границы для случайных одноразовых кодов:
      • 232 сообщений, где каждый открытый текст имеет размер не более 8 ГБ.
      • 248 сообщений, каждое из которых в незашифрованном виде имеет размер не более 32 МиБ.
      • 264 сообщений, каждое из которых в незашифрованном виде имеет размер не более 128 КиБ.
    • Чтобы использовать его в Java, установите Conscrypt.
    • Не фиксирует ключ ADGKLS.
  • XChaCha20-Poly1305 (XCHACHA20_POLY1305) имеет гораздо более высокий лимит на количество сообщений и размер сообщений, чем AES-GCM, но когда он выходит из строя (что очень маловероятно), он также раскрывает ключевой материал. Оно не поддерживает аппаратное ускорение, поэтому может работать медленнее, чем режимы AES, если аппаратное ускорение доступно.
    • LGR без привязки ключа.

Подробнее о формате передачи зашифрованного текста AEAD…

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

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

  • CCA2 security.
  • Сила аутентификации не менее 80 бит.
  • Возможность зашифровать не менее 232 сообщений общим объемом 250 байт. Ни одна атака с использованием до 232 выбранных простых или зашифрованных текстов не имеет вероятности успеха выше 2-32.

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

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