Golang中TPM2 RSA解密报错inconsistent attributes求助
问题分析与解决方案
你的解密失败核心原因是密钥模板中设置了不兼容的属性,具体问题和修复步骤如下:
1. 错误根源:FlagRestricted属性的冲突
你在密钥模板中添加了tpm2.FlagRestricted属性,这个属性的作用是限制密钥只能用于:
- 解密由TPM父密钥加密的对称密钥(密钥封装场景)
- 执行绑定操作(Binding)
而你使用的是普通RSA OAEP加解密(加密任意明文),Restricted属性会导致TPM拒绝这种解密请求,抛出inconsistent attributes错误。
2. 次要问题:不必要的对称算法配置
你的密钥模板中指定了Symmetric字段(AES-256-CFB),这个配置是用于密钥封装场景(用RSA密钥加密对称密钥),但普通RSA OAEP加解密不需要这个配置,应该将其设为nil。
修改后的密钥模板代码
var ( publicKeyTemplate = tpm2.Public{ Type: tpm2.AlgRSA, NameAlg: tpm2.AlgSHA256, // 移除FlagRestricted属性 Attributes: tpm2.FlagFixedTPM | tpm2.FlagFixedParent | tpm2.FlagSensitiveDataOrigin | tpm2.FlagUserWithAuth | tpm2.FlagDecrypt | tpm2.FlagNoDA, AuthPolicy: nil, RSAParameters: &tpm2.RSAParams{ // 普通RSA OAEP加解密不需要对称算法,设为nil Symmetric: nil, KeyBits: 2048, }, } )
额外注意事项
- 修改模板后,需要重新创建并持久化密钥(删除旧的持久化密钥,再运行
createRSAKey) - 确保解密时使用的owner密码和创建密钥时一致
- 加密和解密的
AsymScheme参数必须完全匹配(你当前的代码已经做到这一点,无需修改)
内容的提问来源于stack exchange,提问作者conficker7
相关产品推荐
相关产品推荐

