Асимметричное шифрование в KMS
Одна из доступных схем шифрования в KMS — асимметричное шифрование. По этой схеме шифрование выполняется с помощью открытого ключа (Public key) асимметричной ключевой пары (криптопары), а расшифрование — с помощью ее закрытого ключа (Private key). Key Management Service позволяет выгружать открытый ключ для шифрования текста на стороне клиента. Расшифровать такой текст в KMS можно с использованием закрытого ключа ключевой пары. Получить прямой доступ к закрытому ключу в KMS нельзя.
Каждая ключевая пара соответствует одному ключу в квотах KMS.
Получение открытого ключа ключевой пары
Чтобы зашифровать сообщение, необходимо получить в KMS открытый ключ. Для этого нужно создать запрос к сервису с помощью CLI или API.
Чтобы получить открытый ключ шифрования ключевой пары, пользователю или сервисному аккаунту необходимо назначить роль kms.asymmetricEncryptionKeys.publicKeyViewer
на ключевую пару.
Шифрование данных
Шифрование данных выполняется вне сервиса Key Management Service. Для операции шифрования необходим открытый ключ асимметричной ключевой пары шифрования.
Чтобы зашифровать сообщение, можно воспользоваться утилитой OpenSSL
openssl pkeyutl \
-in <путь_к_файлу_с_сообщением> \
-encrypt \
-pubin \
-inkey <путь_к_файлу_с_открытым_ключом> \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha256 \
-pkeyopt rsa_mgf1_md:sha256 | base64
Где:
-in
— путь к файлу с сообщением, которое требуется зашифровать.-inkey
— путь к файлу, содержащему открытый ключ шифрования.
Хэш-функция указана в конце выбранного ключа. При шифровании используется только sha256
. Сервис KMS принимает зашифрованный текст в кодировке base64
и расшифровывает его с помощью закрытого ключа.
Максимальный размер шифруемого сообщения зависит от длины ключа шифрования и длины хэш-функции (см. RFC2437
<длина_сообщения> = (k - 2) - 2 × hashLength
Где:
<длина_сообщения>
— длина шифруемого сообщения в байтах.k
— длина ключа шифрования в байтах.hashLength
— длина хэш-функции в байтах.
Алгоритм | Параметры | Макс. длина сообщения |
---|---|---|
RSA_2048_ENC_OAEP_SHA_256 |
k =256, hashLength =32 |
190 байт |
RSA_3072_ENC_OAEP_SHA_256 |
k =384, hashLength =32 |
318 байт |
RSA_4096_ENC_OAEP_SHA_256 |
k =512, hashLength =32 |
446 байт |
Расшифрование данных
Расшифровать данные можно с помощью закрытого ключа ключевой пары в сервисе Key Management Service. Для этого нужно создать запрос к сервису с помощью CLI или API.
Чтобы расшифровать данные, пользователю или сервисному аккаунту необходимо назначить роль kms.asymmetricEncryptionKeys.decrypter
на ключевую пару шифрования.