如何使用 AWS KMS 非對稱金鑰加密使用 OpenSSL 的檔案?

2 分的閱讀內容
0

我想要使用 Key Management Service (AWS KMS) 金鑰來加密使用 OpenSSL 的檔案。該如何進行?

簡短描述

您無法使用 RSA 金鑰加密大型資料。例如,若要使用 RSAES_OAEP_SHA_256 來加密一組大小為 2048 位元的 RSA 金鑰對,您可以加密的最大容量是 190 位元。使用進階加密標準 (AES) 金鑰,您便可以使用加密區塊鏈結 (CBC) 分割資料。

解析度

請按照以下說明使用 CBC 加密和解密金鑰。

**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤,請確保您使用的是最新的 AWS CLI 版本

建立 RSA 金鑰對、下載公開金鑰,並建立一個 AES 256 位元的金鑰

1.    使用 AWS 管理主控台,並按照建立 RSA 金鑰對的說明進行操作。

2.    使用類似下列內容的 AWS CLI 命令 get-public-key 來下載公開金鑰:

$ aws kms get-public-key --key-id arn:aws:kms:eu-west-1:123456789012:key/d74f5077-811b-4447-af65-71f5f64f37d3 --output text --query 'PublicKey' > RSAPublic.b64 && base64 -d RSAPublic.b64 > RSAPublic.bin

注意: --query 功能只會取得公開金鑰,然後將 base64 檔案解碼為 DER 金鑰。 3.    使用 OpenSSL rand 命令建立 AES 256 位元金鑰來產生隨機資料,然後輸出至類似以下的 key.bin 檔案:

$ openssl rand -base64 32 > key.bin

加密您的資料

1.    使用類似以下在 CBC 中加密的 OpenSSL enc 命令,加密使用 key.bin 檔案的資料:

$ openssl enc -aes-256-cbc -salt -pbkdf2 -in FILE_TO_ENCRYPT -out FILE_TO_ENCRYPT.enc -pass file:./key.bin

注意:

  • -pbkdf2 命令僅適用於 OpenSSL 1.1.1。Amazon Linux 2 AMI 已安裝了不支援 -pbkdf2 命令的 OpenSSL 1.0.2。
  • CBC 讓您能夠加密任何大小的檔案。
  • 以您要加密的檔案名稱取代值 FILE_TO_ENCRYPT

2.    使用 AWS KMS 公開金鑰加密您的 AES 256 位元金鑰 key.bin。這會驗證您的資料金鑰是否安全。只有具備 AWS KMS 私密金鑰存取權的使用者才能存取 key.bin 金鑰。

執行類似以下的 OpenSSL pkeyutl 命令:

$ openssl pkeyutl -in key.bin -out enc.key.bin -inkey RSAPublic.bin -keyform DER -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256

注意: pkeyutl 命令使用的加密演算法支援 AWS KMS API (RSAES_OAEP_SHA_256) 進行解密。AWS KMS 公開金鑰 RSAPublic.bin 會加密 AES 256 金鑰,並建立一個名為 enc.key.bin 的新檔案。

3.    加密 key.bin 檔案,使用者便無法存取該檔案,除非使用者能使用類似以下的 AWS CLI 命令 rm 來解密 enc.key.bin 檔案:

$ rm key.bin && rm FILE_TO_ENCRYPT

**注意:**您也可以選擇刪除原本要加密的檔案,讓使用者無法存取該檔案。

您現在擁有以下內容:

  • FILE_TO_ENCRYPT.enc 檔案中的加密資料。
  • 已加密的 AES 256 位元 enc.key.bin 金鑰。
  • AWS KMS 公開金鑰 RSAPublic.bin

**注意:**擁有加密資料的使用者必須向您傳送這些檔案以進行解密。

解密傳送給您的檔案

若要擷取加密資料,請解密 AES 256 位元金鑰,然後使用該金鑰解密 FILE_TO_ENCRYPT.enc 資料檔案。

**注意:**您必須能夠存取 AWS KMS API,因為無法以純文字檢視 AWS KMS 私有金鑰。

1.    解密 AES 256 位元金鑰,並提交 enc.key.bin 檔案至使用類似以下 AWS CLI 命令 解密 的 AWS KMS API:

$ aws kms decrypt --key-id arn:aws:kms:eu-west-1:123456789012:key/d74f5077-811b-4447-af65-71f5f64f37d3 --ciphertext-blob fileb://enc.key.bin --encryption-algorithm RSAES_OAEP_SHA_256 --output text --query 'Plaintext' | base64 --decode > decryptedKey.bin

注意: --query 功能會選擇純文字,然後將 base64 值解碼為 decryptedKey.bin 檔案。 2.    使用 decryptedKey.bin 檔案執行 OpenSSL enc 命令,以輸出至類似如下的 DECRYPTED_FILE:

$ openssl enc -d -aes-256-cbc -pbkdf2 -in FILE_TO_ENCRYPT.enc -out DECRYPTED_FILE -pass file:./decryptedKey.bin

**注意:**以您要解密的檔案名稱取代值 DECRYPTED_FILE。

您可以比較 DECRYPTED_FILE 和 FILE_TO_ENCRYPT,以確保已順利完成加密和解密。


相關資訊

AWS 加密服務和工具

AWS 官方
AWS 官方已更新 2 年前