You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将64字节HMAC_SHA_256密钥导入AWS KMS失败,求原因解析

AWS KMS HMAC_SHA256 仅支持32字节密钥的原因

背景

我持有一个用于HMAC_SHA256的64字节密钥,原本通过以下Java代码生成哈希:

SecretKeySpec keyspec = new SecretKeySpec(secret, "HmacSHA256");
Mac sha256 = (Mac) Mac.getInstance("HmacSHA256").clone();
sha256.init(keyspec);
sha256.doFinal(prehash.getBytes())

尝试将哈希生成逻辑迁移至AWS KMS时,导入64字节密钥材料触发InvalidCiphertextException错误。调研后确认AWS KMS仅支持32字节的HMAC_SHA256密钥,但HMAC_SHA256规范及上述Java代码支持任意密钥长度(密钥大于64字节时会自动通过SHA256处理)。

以下是我执行的AWS KMS命令:

aws kms get-parameters-for-import \
    --key-id XXXXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX \
    --wrapping-algorithm RSAES_OAEP_SHA_256 \
    --wrapping-key-spec RSA_4096 > import.json

cat import.json | jq -r .PublicKey | openssl enc -d -base64 -A -out WrappingPublicKey.bin
cat import.json | jq -r .ImportToken | openssl enc -d -base64 -A -out ImportToken.bin

openssl rand -out PlaintextKeyMaterial.bin 64 # 注:32字节可行,64字节不行

openssl pkeyutl \
    -encrypt \
    -in PlaintextKeyMaterial.bin \
    -out EncryptedKeyMaterial.bin \
    -inkey WrappingPublicKey.bin \
    -keyform DER \
    -pubin \
    -pkeyopt rsa_padding_mode:oaep \
    -pkeyopt rsa_oaep_md:sha256 \
    -pkeyopt rsa_mgf1_md:sha256


aws kms import-key-material --key-id XXXXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX \
    --encrypted-key-material fileb://EncryptedKeyMaterial.bin \
    --import-token fileb://ImportToken.bin \
    --expiration-model KEY_MATERIAL_DOES_NOT_EXPIRE

限制原因分析

AWS KMS对HMAC_SHA256密钥长度限制为32字节,核心原因如下:

  • 对齐哈希输出长度:HMAC_SHA256的哈希输出长度为256位(32字节),KMS选择使用与输出长度一致的密钥长度,这是密码学实践中的常规方案——同长度密钥无需额外预处理,且能保证足够安全性。
  • 简化托管服务逻辑:固定密钥长度可简化KMS内部的密钥存储、验证和处理流程,降低可变长度带来的复杂度与潜在漏洞风险,符合托管密钥服务对稳定性、一致性的高要求。
  • 安全性等价:长于32字节的HMAC密钥会被SHA256哈希后作为实际密钥使用,最终效果与直接使用32字节SHA256哈希值作为密钥完全一致。限制为32字节既不降低安全性,还能避免不必要的计算步骤。

若需迁移现有64字节密钥到KMS,只需先对原64字节密钥执行SHA256哈希,得到32字节结果后作为密钥材料导入即可,生成的HMAC结果会与原Java代码完全一致。

内容的提问来源于stack exchange,提问作者Angus Scott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 17:23:10