使用 AWS KMS 密钥生成和验证 MAC 的 Java API

问题描述 投票:0回答:1

本质上,我想对我在 AWS KMS (CMK) 中生成的对称密钥(特别是 HMAC)执行此“签名”机制。但显然,该示例中的 SignRequest

SignResponse
类仅支持非对称密钥,所以我想知道对对称密钥执行此操作的等效类是什么?我发现这个 GenerateKey API 是使用 HMAC 密钥进行签名的唯一 API 方式,但该示例未提供所有详细信息(仅具有示例请求正文)。我们实际上在哪里发送请求/我们如何进行身份验证?

总之,需要知道如何使用我的 KMS 中已有的 KMS HMAC 密钥来签署消息/生成 mac。附:我已经能够在命令行上做我想做的事情(见下文)。只需要一个 API 方式即可完成此操作。

% aws kms generate-mac --message fileb://aws-test.txt --key-id <keyId> --mac-algorithm HMAC_SHA_256                                                 
{
    "Mac": "<mac>",
    "MacAlgorithm": "HMAC_SHA_256",
    "KeyId": "arn:aws:kms:<region>:<....>:key/<keyId>"
}
user@user-mac  
% aws kms verify-mac --message fileb://aws-test.txt --key-id <keyId> --mac-algorithm HMAC_SHA_256 --mac <mac>
{
    "KeyId": "arn:aws:kms:<region>:<....>:key/<keyId>",
    "MacValid": true,
    "MacAlgorithm": "HMAC_SHA_256"
}
user@user-mac 

附注我成功使用 aws-sdk:kms 在我的 KMS 中创建并上传 HMAC 密钥。

api amazon-kms aws-java-sdk symmetric-key hmacsha256
1个回答
0
投票

好的,我找到答案了。实现它的方法是使用这四个类 - GenerateMacRequestGenerateMacResponseVerifyMacRequestVerifyMacResponse。请参阅下面的示例代码。

我不知道为什么 AWS 文档会如此神秘 - 这个页面我上面链接的内容没有提及实际相应的 API 方法,而是让人们误入歧途,认为必须从头开始构建请求并提供 url 和请求参数。

// define `msgToSign`, `keyId`, `algorithm`
String algorithm = "HMAC_SHA_256";
String keyId = "<your-created-keyId>";
String msgToSign = "Hello, World!"

SdkBytes bytes = SdkBytes.fromString(msgToSign, Charset.defaultCharset());

GenerateMacRequest rq = GenerateMacRequest.builder()
            .keyId(keyId)
            .message(bytes)
            .macAlgorithm(algorithm)
            .build();

GenerateMacResponse rs = kmsClient.generateMac(rq);

String macStr = new String(Base64.encodeBase64(rs.mac().asByteArray()));
System.out.println("Base64 encoded mac: " + macStr);

VerifyMacRequest vmrq = VerifyMacRequest.builder()
            .keyId(keyId)
            .macAlgorithm(algorithm)
            .message(bytes)
            .mac(rs.mac())
            .build();

VerifyMacResponse vmrs = kmsClient.verifyMac(vmrq);

System.out.println("Mac valid? : " + vmrs.macValid());
© www.soinside.com 2019 - 2024. All rights reserved.