1

KMS で暗号化された BLOB を格納する予定のデータベースがあります。一部のフィールドは暗号化されておらず (暗号化する必要があります)、一部のフィールドは既に KMS で暗号化されています。

生データを見ると、KMS で暗号化されたものはすべて似ているように見えます。理想的には、AWS KMS APIまたは AWS SDK にメソッドのようなものが必要ですisEncrypted()が、そうではないようです。

APIInvalidCiphertextExceptionからキャッチする以外に、自分のフィールドが暗号化されているかどうかをローカルで検出する良い方法はありますか?decrypt

4

1 に答える 1

3

暗号化されたものが同じように見えるというあなたの観察は有効だと思います。本文の最初の部分は実際には暗号化に使用されたキー名であるため、これは有効です。これが、キーを指定せずに KMS が復号化する方法を知っている方法です (つまり、基本的に暗号化すると、キーの説明 + 実際に暗号化されたものが返されます)。

さて、質問は次のとおりです。何かが暗号化されているかどうかを確認するために、この観察に本当に依存したいですか? 実行時にこれを行いますか?

isEncrypted メソッドに関しては、decrypt の呼び出しとどう違うのでしょうか? まだメソッド呼び出しです。

本当の答えは、KMS に頼って保存したデータを暗号化/復号化するべきではありません。コンテンツの暗号化/復号化に使用するキーを暗号化/復号化するには、KMS に依存する必要があります (つまり、エンベロープ暗号化と呼ばれるもの)。KMS を介して直接復号化/暗号化する場合、KMS に対して行うことができる呼び出しの数と、暗号化するものの最大サイズによって制限されます。

エンベロープ暗号化に切り替えた場合、コンテンツが暗号化されているかどうかを解読して判断するのは簡単です。そうは言っても、暗号化されているものについて実際に非常に厳密であり、それを強制することをお勧めします (つまり、推測しないでください)。

ここにいるので、KMS の暗号化コンテキストも見てください。

于 2016-05-16T18:54:01.277 に答える