データキーの暗号化と復号化
このトピックでは 、AWS KMS API で 暗号化、復号化、再暗号化 オペレーションを使用する方法を説明します。
これらのオペレーションは、データキーを暗号化および復号化するように設計されています。ここでは、暗号化オペレーションに AWS KMS カスタマーマスターキー (CMK) を使用しますが、4 KB (4096 bytes) 以上のデータを受け付けません。パスワードや RSA キーなどの少量データを暗号化するためにこれを使用できますが、アプリケーションデータを暗号化するために設計されていません。
アプリケーションデータを暗号化するには、AWS サービスのサーバー側の暗号化機能、あるいはクライアント側の暗号化ライブラリを使用します (AWS 暗号化 SDK や Amazon S3 encryption client など)。
データキーの暗号化
暗号化 オペレーションは、データキーを暗号化するように設計されていますが、頻繁には使用されていません。GenerateDataKey および GenerateDataKeyWithoutPlaintext オペレーションは、暗号化されたデータキーを返します。暗号化されたデータを新しいリージョンに移動し、この新しいリージョンで CMK でデータキーを暗号化するときにこのメソッドを使用できます。
暗号化オペレーションの Java 実装の詳細については、AWS SDK for Java API Referenceの「encrypt method」を参照してください。
// Encrypt a data key // // Replace the fictitious keyID value with a valid key ID, key ARN, or alias of an AWS CMK. String keyId = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"; ByteBuffer plaintext = ByteBuffer.wrap(new byte[]{1,2,3,4,5,6,7,8,9,0}); EncryptRequest req = new EncryptRequest().withKeyId(keyId).withPlaintext(plaintext); ByteBuffer ciphertext = kms.encrypt(req).getCiphertextBlob();
データキーの復号化
データキーを復号するには、復号 オペレーションを使用します。Java の実装の詳細については、AWS SDK for Java API Referenceの「decrypt メソッド」を参照してください。
ciphertextBlob
は、GenerateDataKey、GenerateDataKeyWithoutPlaintext、あるいは 暗号化 オペレーションによって返されるバイトバッファである必要があります。
// Decrypt a data key // ByteBuffer ciphertextBlob =
Place your ciphertext here
; DecryptRequest req = new DecryptRequest().withCiphertextBlob(ciphertextBlob); ByteBuffer plainText = kms.decrypt(req).getPlaintext();
異なるカスタマーマスターキーによるデータキーの再暗号化
暗号化されたデータキーを復号し、続いてすぐに異なるカスタマーマスターキー (CMK) でデータキーを再暗号化するには、再暗号化オペレーションを使用します。このオペレーションは AWS KMS 内のサーバー側で完全に実行されるため、プレーンテキストが AWS KMS の外部に公開されることはありません。
ciphertextBlob
は、GenerateDataKey、GenerateDataKeyWithoutPlaintext、あるいは 暗号化 オペレーションによって返されるバイトバッファである必要があります。
Java の実装の詳細については、AWS SDK for Java API Referenceの「reEncrypt メソッド」を参照してください。
// Re-encrypt a data key ByteBuffer sourceCiphertextBlob =
Place your ciphertext here
; // Replace the fictitious keyID value with a valid key ID, key ARN, or alias of an AWS CMK. String destinationKeyId = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321"; ReEncryptRequest req = new ReEncryptRequest(); req.setCiphertextBlob(sourceCiphertextBlob); req.setDestinationKeyId(destinationKeyId); ByteBuffer destinationCipherTextBlob = kms.reEncrypt(req).getCiphertextBlob();