4

KMS と AWS 暗号化 SDK を使用してデータを暗号化しようとしています。AWS ドキュメントで提供されている例を見ると、データ キーを明示的に設定する場所がないように見えます。

EncryptionMaterialsRequest関連するビルダー クラス を使用してプレーンテキスト キーを設定できるクラスの API ドキュメントを見つけました。EncryptionMaterialsRequest.Builderこのクラスには のインスタンスを返すメソッドがありますEncryptionMaterialsEncryptionMaterials暗号化操作の実行時にインスタンスを使用する場所が見つかりません。

ここに私がこれまでに持っているコードがあります。EncryptionMaterialsインスタンスはリクエストで使用されないことに注意してください。

public static void encryptData(String dataToEncrypt, String keyID) {
    final KmsMasterKeyProvider prov = new KmsMasterKeyProvider(keyID);
    DefaultCryptoMaterialsManager manager = new DefaultCryptoMaterialsManager(prov);

    byte[] plaintextKey = generateDataKey(keyID);
    EncryptionMaterialsRequest request = EncryptionMaterialsRequest
        .newBuilder()
        .setPlaintext(plaintextKey)
        .build();

    EncryptionMaterials materials = manager.getMaterialsForEncrypt(request);
    AwsCrypto crypto = new AwsCrypto();
    String encryptedString = crypto.encryptString(manager, dataToEncrypt).getResult();
}

public byte[] generateDataKey(String keyID) {
    GenerateDataKeyRequest dataKeyRequest = new GenerateDataKeyRequest();
    dataKeyRequest.setKeyId(keyID);
    dataKeyRequest.setKeySpec(DataKeySpec.AES_256);
    GenerateDataKeyResult dataKeyResult = kmsClient.generateDataKey(dataKeyRequest);
    ByteBuffer encryptedKey = dataKeyResult.getCiphertextBlob();
    byte[] arr = new byte[encryptedKey.remaining()];
    encryptedKey.get(arr);
    return arr;
}

KMS によって生成されたデータキーで AWS 暗号化 SDK を使用してデータを暗号化する推奨されるアプローチは何ですか?

4

2 に答える 2