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

最終更新日: 2020 年 8 月 28 日

AWS Key Management Service (AWS KMS) でカスタマーマスターキー (CMK) を作成しました。CMK キーマテリアルのオリジンを外部として指定し、ラッピングキーのアルゴリズムとして [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 を使用して CMK を作成します。

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

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

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

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

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

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

解決方法

キーマテリアルの原点に External を使用して CMK を作成する

次の AWS コマンドラインインターフェイス (AWS CLI) コマンドを実行して、外部キーマテリアル用の CMK を作成します。

注: export REGIONexport KEY_ALIAS の値は、必ず自分のキーの詳細に置き換えてください。

export REGION=us-east-1
export KEY_ALIAS=cmk_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

キーマテリアルをインポートするまで、新しく作成された CMK ステータスはインポートの保留中になります。次のコマンドを実行してキーのステータスを確認します。

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 を生成します。この値を暗号化されたキーマテリアルとして CMK にインポートします。

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

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

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

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

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

この記事はお役に立ちましたか?


請求に関するサポートまたは技術的なサポートが必要ですか?