AWS KMS(Amazon Web Services Key Management Service)を使用して、暗号化された対称キー(つまり、エンベロープ暗号化)を復号化することを調査しています。ただし、KMSを使用するには、Amazonアクセスキーとシークレットキーを渡す必要があります。
したがって、サーバーに平文対称キーを保存しなくなりましたが、暗号化されたキーとAWSアクセスキーを保存しています...これは、そこに平文を保存することと本質的に同じではありませんか?私のサーバーにアクセスできる人は、暗号化されたキーと私のAmazonアクセスキーを受け取り、Amazonにそれを復号化するように要求するだけで済みますか?
サーバーがEC2にある場合、IAMを使用してそのサーバーのロールを作成し、サーバーにAWSアクセスキーがなくてもKMSにアクセスできるようにすることができます。
http://docs.aws.Amazon.com/kms/latest/developerguide/control-access.html
実際、あなたの言うとおり、サーバーにアクセスできる人なら誰でもプレーンテキストのキーを取得できます。
基本的に、アプリケーションはプレーンテキストのキーを取得できる必要があります。したがって、アプリケーションを完全に侵害する攻撃もプレーンテキストのキーを取得できるようになります。しかし、それはKMSの目的ではありません。
KMSは、キー管理、特にキーの管理、生成、暗号化、および復号化のためのものです。 AWSにはシークレットを管理するためのシークレットマネージャーがあり、すべてのキーはシークレットである必要がありますが、すべてのシークレットがキーであるとは限りません。
cMK(平文では決して公開されません)とDK(プレーンテキストと暗号化形式の両方で公開されます)を区別することは非常に重要です。 CMKは別のキーの暗号化に使用されるキーです。DKはデータの暗号化に使用するキーです。この概念が明確になったら、次に進みましょう。
KMSは安全な方法でキーを生成できます。 OWASPはソフトウェアの代わりに キーを生成するためにハードウェアモジュールを使用 を推奨し、FIPS140-2であるKMS 準拠 はこれを行います。ソフトウェアで手動でキーを生成している場合、それは最善の方法ではありません。
また、大規模なキーの生成は簡単ではありません。いくつかのユースケースでは、一意のメッセージ/トランザクションごとに異なるキーを生成することが重要です。KMSは、それを正確に行うためのAPIを提供します。
KMSはそのキーを秘密に保ちます。対称キー暗号化の難点の1つは、キーを秘密に保つことです。したがって、KMSのようなサービスを使用すると、CMKが平文で公開されることがなく、管理が簡単になります。
最後に、KMSはキーのアーカイブに役立ちます。 KMSはデフォルトですべてのCMKを永続的に保持します。鍵をローテーションアウトしても、古いCMKを明示的に削除していなければ、KMS内の古いDKを復号化できます。
ユースケースでは、サーバーを危険にさらす攻撃者は依然として必要なものにアクセスできます。したがって、KMSはこの特定の脅威に対処していません。
ただし、これにより、問題のEC2サーバーのみからのKMSへの呼び出しを制限できます。したがって、機密データを含むファイルを誤ってS3バケットにバックアップした場合などは、データが暗号化され、KMS上のCMKにアクセスしないと復号化できないため、役に立ちます。
しかし、それはおそらくそれが主なユースケースではありません。
暗号化されたバックアップなどが必要な場合は、KMSが最適です。どこ:
復元したい場合は、プロセスを逆にするだけです。
この使用例では、暗号化されたデータはKMSにまったくアクセスできないサーバーに保存され、鍵の管理にはKMSを使用しています。
ユースケースに戻って、AWSシークレットマネージャーをお勧めします。これは、呼び出されて問題のキーを返すだけの単純なAPIです。これにより、キーは暗号化された形式でもボックスに保存されません。
コードはAPIを呼び出し、キーを取得し、それを実行して終了します。キーを交換する必要がある場合は、Secrets Managerで中央で変更して、続行できます。
Secrets ManagerはKMSよりも安価で、間違いなく使用が簡単です。