メニュー
AWS Key Management Service
開発者ガイド

データキーの暗号化と復号化

このトピックでは 、AWS KMS API で 暗号化復号化再暗号化 オペレーションを使用する方法を説明します。

これらのオペレーションは、データキーを暗号化および復号化するように設計されています。ここでは、暗号化オペレーションに AWS KMS カスタマーマスターキー (CMK) を使用しますが、4 KB (4096 bytes) 以上のデータを受け付けません。パスワードや RSA キーなどの少量データを暗号化するためにこれを使用できますが、アプリケーションデータを暗号化するために設計されていません。

アプリケーションデータを暗号化するには、AWS サービスのサーバー側の暗号化機能、あるいはクライアント側の暗号化ライブラリを使用します (AWS 暗号化 SDKAmazon 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 は、GenerateDataKeyGenerateDataKeyWithoutPlaintext、あるいは 暗号化 オペレーションによって返されるバイトバッファである必要があります。

// 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 は、GenerateDataKeyGenerateDataKeyWithoutPlaintext、あるいは 暗号化 オペレーションによって返されるバイトバッファである必要があります。

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();