Симметричное шифрование в KMS
Одна из доступных схем шифрования в KMS — симметричное шифрование. В этой схеме и для шифрования, и для расшифрования используется один и тот же (симметричный) ключ. В KMS применяется AES
Важное условие безопасного шифрования — это использование криптографически стойкого генератора псевдослучайных чисел (необходим для генерации ключей шифрования, векторов инициализации). В KMS используется собственная реализация алгоритма Fortuna
В случае использования аппаратного модуля безопасности (HSM) ключи шифрования генерируются внутри модуля HSM, используя встроенный в HSM надежный генератор энтропии.
Криптоматериал, содержащийся в версиях ключей, недоступен в открытом виде вне сервиса KMS. Шифрование и расшифрование в KMS осуществляется посредством двух криптографических операций: encrypt и decrypt.
Операция Encrypt
-
Принимает на вход идентификатор ключа (
keyID
) вместе с открытым текстом (plaintext
).Если нужно выполнить шифрование с использованием неосновной версии ключа, передайте на вход операции идентификатор произвольной активной версии ключа (
versionId
). -
Шифрует открытый текст с использованием алгоритма и криптоматериала основной версии ключа.
-
Возвращает полученный шифртекст (
ciphertext
).
Encrypt-операция подходит для шифрования данных небольшого размера. Максимальный размер plaintext
— 32 КБ. Для шифрования данных большего объема используйте envelope encryption.
Операция Decrypt
-
Принимает на вход идентификатор ключа (
keyID
) и шифртекст (ciphertext
).Шифртекст, сгенерированный encrypt-операцией, содержит идентификатор версии (
versionId
), использовавшейся при шифровании. Алгоритм и криптоматериал для расшифрования берутся именно из этой версии ключа. -
Расшифровывает текст.
-
Возвращает в качестве результата открытый текст (
plaintext
).
Операции encrypt и decrypt в KMS поддерживают передачу AAD-контекста (англ. Additional Authenticated Data) в качестве параметра (aadContext
), что позволяет дополнительно обезопасить шифруемые данные.
AAD-контекст
Additional Authenticated Data (AAD) – дополнительные данные, передаваемые на вход операций encrypt и decrypt. Для успешного расшифрования необходимо передать такой же AAD-контекст, что был передан для шифрования.
AAD-контекст тесно связан с шифруемыми данными (без знания AAD-контекста невозможно расшифровать шифртекст), но не повышает криптостойкость шифртекста и не является его частью. Задача AAD-контекста – защита от confused deputy
Примечание
Указывайте в AAD-контексте максимум информации, однозначно определяющей расположение и принадлежность шифртекста (для базы данных это могут быть название таблицы и значение первичного ключа, для файла – путь к этому файлу и т.д.).
Пример confused deputy атаки
Сервис хранит адреса места жительства пользователей в привязке к их логинам. Адреса сохраняются в базу данных в зашифрованном виде. Адреса шифруются с использованием ключа, но без AAD-контекста. Каждая запись в базе помечена как принадлежащая тому или иному пользователю.
- Алиса воспользовалась сервисом и указала свой адрес.
- В базе данных появилась новая запись, помеченная как принадлежащая Алисе. Запись содержит адрес в зашифрованном виде.
- Алиса может видеть свой адрес: из базы данных будут выбраны, расшифрованы и показаны принадлежащие ей записи.
- Другой пользователь — Труди, получил доступ к базе данных.
- У Труди нет ключа шифрования и она не может расшифровать содержимое базы данных, но может модифицировать ее содержимое.
- Труди помечает запись с зашифрованным адресом Алисы, как принадлежащую ей и получает возможность увидеть адрес Алисы.
Проблема решается, если при шифровании в качестве AAD-контекста передавать, например, логин пользователя. В таком случае:
- Труди попытается посмотреть данные Алисы, помеченные им, как свои.
- Сервис будет передавать в качестве AAD-контекста логин Труди вместо логина Алисы.
- Расшифровать данные не получится.