KMSでRSAES_OAEP_SHA_256を使ってキーマテリアルをインポートしてみた

KMSでCMKのキーマテリアルをインポートする際にはRSAES_OAEP_SHA_256が推奨されています。しかし、公式ドキュメントではRSAES_OAEP_SHA_1の手順のみしか説明がないため、手順をまとめました。
2018.04.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、臼田です。

KMSではキーマテリアルをAWS側で用意したものではなく、ユーザーが作成してインポートする事が可能です。

今回はRSAES_OAEP_SHA_256を使ってキーマテリアルをインポートする方法を共有します。

KMSの基本的な情報は下記を参照して下さい。

10分でわかる!Key Management Serviceの仕組み #cmdevio

「実践 Amazon KMS」 #cmdevio2015 #cmdevio2015H

キーマテリアルのインポートとは

KMSで作成するカスタマーマスターキー(以下CMK)は幾つかのメタデータとキーマテリアルで構成されます。キーマテリアルはAWS側で作成することも可能ですが、幾つかの要件のためにユーザーが作成してインポートする場合があります。

詳細は下記をご確認下さい。

AWS Key Management Service (AWS KMS) にキーマテリアルをインポートする - AWS Key Management Service

RSAES_OAEP_SHA_256でのインポート

キーマテリアルのインポート時にはパブリックキーを利用してRSA PKCS #1で暗号化しますが、利用できるパディングオプションは下記の3種類です。

  • RSAES_OAEP_SHA_256
  • RSAES_OAEP_SHA_1
  • RSAES_PKCS1_V1_5

このうち、公式ドキュメント上ではRSAES_OAEP_SHA_256の利用が推奨されていますが、手順ではRSAES_OAEP_SHA_1を利用した手順しか掲載されていないため、今回解説することにしました。

全般的な手順は上記公式ドキュメントや下記ブログにて解説していますので、差異のみ説明します。

AWS KMSに利用者が作成した共通鍵をインポートする手順

RSAES_OAEP_SHA_256での暗号化

上記ブログで言うと「4. インポートする鍵の生成と暗号化」の後半部分に差異があります。

説明されている手順では、RSAES_OAEP_SHA_1での暗号化となるためこれを変更します。

RSAES_OAEP_SHA_256での暗号化は下記のように行います。

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

RSAES_OAEP_SHA_1の手順ではopenssl rsautlを利用していますが、こちらは古くRSAES_OAEP_SHA_256を利用するにはopenssl pkeyutlを利用する必要があるようです。

こちらのナレッジを元に作成しました。

こちらの手順を利用して正常にインポート出来ることが確認できました。

まとめ

公式ドキュメントには手順が解説されていませんでしたが、同じような手順でRSAES_OAEP_SHA_256を利用することが可能なので、ぜひ利用してみてはいかがでしょうか?