OpenSSL を使用して自分のキーを AWS KMS にインポートしていますが、「InvalidCiphertext」エラーが発生します。この解決方法を教えてください。

所要時間3分
0

AWS Key Management Service (AWS KMS) で AWS KMS キーを作成しました。KMS キーマテリアルのオリジンを External として指定し、ラッピングキーのアルゴリズムとして [RSAES_OAEP_SHA_256] を選択してから、ラッピングキーでのキーマテリアルの暗号化に OpenSSL を使用したのですが、暗号化されたキーマテリアルをインポートすると、リクエストが失敗して、「InvalidCiphertext」に関するエラーメッセージが表示されます。このインポートエラーを避ける方法を教えてください。

簡単な説明

デフォルトでは、OpenSSL は SHA-1 ハッシュ関数を使用します。

RSAES_OAEP_SHA_256 アルゴリズム (SHA-256 ハッシュ関数) を使用するときのインポートエラーを回避するには、openssl pkeyutl コマンドを使用して OpenSSL でキーマテリアルを暗号化し、パラメータ –pkeyopt rsa_padding_mode:oaep–pkeyopt rsa_oaep_md:sha256 を指定します。

OpenSSL と RSAES_OAEP_SHA_256 を使用して AWS KMS にキーマテリアルをインポートするための全手順は次のとおりです。

1.    キーマテリアルのオリジンに External を使用して KMS を作成します。

2.    ラッピング (公開) キーとインポートトークンをダウンロードします。

3.    256 ビットの対称キーを生成します。

4.    使用している OpenSSL バージョンが openssl pkeyutl をサポートしていることを確認します。

5.    キーマテリアルをラッピングキーで暗号化します。

6.    暗号化されたキーマテリアルをインポートします。

注意: ラッピングキーに RSAES_OAEP_SHA_1 暗号化アルゴリズムを使用している場合は、「キーマテリアルのインポート方法」を参照してください。

解決方法

キーマテリアルのオリジンに External を使用して KMS を作成する

以下の AWS Command Line Interface (AWS CLI) コマンドを実行して、外部キーマテリアルの KMS を作成します。

注意:

export REGION=us-east-1
export KEY_ALIAS=kms_key_with_externalmaterial
export KEY_ID=`aws kms create-key --region $REGION --origin EXTERNAL --description $KEY_ALIAS --query KeyMetadata.KeyId --output text`
aws kms --region $REGION create-alias --alias-name alias/$KEY_ALIAS --target-key-id $KEY_ID

新しく作成された KMS キーのステータスは、キーマテリアルをインポートするまで Pending Import (インポート保留中) になります。以下のコマンドを実行して、キーのステータスを表示します。

aws kms --region $REGION describe-key --key-id $KEY_ID

ラッピング (公開) キーとインポートトークンをダウンロードする

次の AWS CLI コマンドを実行して、PublicKey (ラッピングキー) と ImportToken の値を取得し、base64 を使用して両方の値をデコードして、これらの値を別々のファイルに保存します。RSAES_OAEP_SHA_256 ラッピングアルゴリズムは get-parameters-for-import コマンドで指定されていることに注意してください。

export KEY_PARAMETERS=`aws kms --region $REGION get-parameters-for-import --key-id $KEY_ID --wrapping-algorithm RSAES_OAEP_SHA_256 --wrapping-key-spec RSA_2048`
echo $KEY_PARAMETERS | awk '{print $7}' | tr -d '",' | base64 --decode > PublicKey.bin
echo $KEY_PARAMETERS | awk '{print $5}' | tr -d '",' | base64 --decode > ImportToken.bin

これらのコマンドは、ラッピングキーを PublicKey.bin に、インポートトークンを ImportToken.bin に格納します。

256 ビットの対称キーを生成する

キーマテリアルは、256 ビット (32バイト) の対称キーでなければなりません。以下のいずれかのコマンドを実行してキーを生成します。

OpenSSL

openssl rand -out PlaintextKeyMaterial.bin 32
  • または -

dd

dd if=/dev/urandom of=PlaintextKeyMaterial.bin bs=32 count=1

使用している OpenSSL バージョンが openssl pkeyutl をサポートしていることを確認する

キーマテリアルを RSAES_OAEP_SHA_256 でラッピングアルゴリズムとして暗号化するには、openssl pkeyutl コマンドを使用します。

重要: このコマンドは OpenSSL 1.0.2 以降のバージョンでのみ使用可能です。

Amazon Linux AMI で起動した Amazon Elastic Compute Cloud (Amazon EC2) インスタンスなど、RHEL ベースの Linux コンピュータを使用している場合は、次の手順に従います。

1.    次のコマンドを実行して、OpenSSL のバージョンを確認します。

openssl version

2.    OpenSSL を更新するには、次のコマンドを実行します。

sudo yum –y update openssl

macOS を使っている場合、次のステップに従ってください。

1.    次の Homebrew のコマンドを実行します。

brew update
brew upgrade openssl
brew info openssl

2.    最後のコマンドは OpenSSL が /usr/local/opt/openssl/bin/ にインストールされたことを示しています。このコマンドを実行して、OpenSSL のバージョンを確認します。

/usr/local/opt/openssl/bin/openssl version

3.    常に最新の OpenSSL バージョンを使用するには、~/.bash_profile を編集してファイルの末尾に次の行を追加します。

export PATH="/usr/local/opt/openssl/bin:$PATH"

4.    ラインを追加してから、次のコマンドを実行します。

source ~/.bash_profile

5.    macOS 環境の変更を確認するには、次のコマンドを実行します。

echo $PATH
openssl version

ラッピングキーでキーマテリアルを暗号化する

次のコマンドを実行して、最新バージョンの OpenSSL と以前にダウンロードしたラッピングキーを使用してキーマテリアルを暗号化します。

注意: ラッピングキーは PublicKey.bin に格納されています。

openssl pkeyutl -in PlaintextKeyMaterial.bin -out EncryptedKeyMaterial.bin -inkey PublicKey.bin -keyform DER \
            -pubin -encrypt -pkeyopt rsa_padding_mode:oaep -pkeyopt rsa_oaep_md:sha256

コマンドは EncryptedKeyMaterial.bin を生成します。この値を暗号化されたキーマテリアルとして KMS にインポートします。

暗号化されたキーマテリアルをインポートする

以下の AWS CLI コマンドを実行して、暗号化されたキーマテリアルを KMS キーにインポートします。

aws kms --region $REGION import-key-material --key-id $KEY_ID --encrypted-key-material fileb://EncryptedKeyMaterial.bin --import-token fileb://ImportToken.bin --expiration-model KEY_MATERIAL_DOES_NOT_EXPIRE

インポートが完了すると、キーのステータスが Enabled (有効) に変更されます。次のコマンドを実行してキーのステータスを確認してください。

aws kms --region $REGION describe-key --key-id $KEY_ID

関連情報

インポートされたキーマテリアルについて

コメントはありません

関連するコンテンツ