OpenSSL を使用してファイルを暗号化するには、AWS KMS の非対称キーをどのように使用すればいいですか?

所要時間2分
0

キー管理サービス (AWS KMS) キーを使用して、OpenSSL を使用してファイルを暗号化したいと考えています。その方法を教えてください。

簡単な説明

大量のデータを RSA キーで暗号化することはできません。たとえば、2048 バイトの RSA キーペアサイズを RSAES_OAEP_SHA_256 で暗号化する場合、暗号化できる最大量は 190 バイトです。Advanced Encryption Standard (AES) キーを使用すると、暗号ブロックチェーン (CBC) を使用してデータをより小さな部分に分割できます。

解決方法

CBC を使用してキーを暗号化および復号化するには、次の手順に従います。

注: AWS コマンドラインインターフェイス (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 には OpenSSL 1.0.2 がインストールされていますが、-pbkdf2 コマンドはサポートされていません。
  • 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 プライベートキーはプレーンテキストでは表示できないため、AWS KMS API へのアクセスが必要です。

1.    次のような AWS CLI コマンド decrypt を使用して AES 256 ビットキーを復号化し、enc.key.bin ファイルを 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年前
コメントはありません

関連するコンテンツ