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

TPM生成的签名无法通过OpenSSL验证,求助排查原因

签名验证失败的原因分析
  • PKCS#1填充类型不匹配
    报错核心指向RSA_padding_check_PKCS1_type_1,说明OpenSSL验证时采用的是签名专用的Type 1填充,但你生成签名时可能误用了加密用的Type 2填充。检查BCryptSignHash的参数,必须指定BCRYPT_PKCS1_PADDING作为填充算法,不能用其他类型。

  • 哈希值未添加ASN.1编码前缀
    PKCS#1 v1.5签名要求先将SHA256哈希值封装为ASN.1 DER结构(包含哈希算法OID和哈希值),再进行填充和签名。如果直接对原始SHA256哈希值签名,OpenSSL验证时会因格式不匹配触发填充错误。确认BCryptSignHash是否自动处理了ASN.1编码——当你指定BCRYPT_SHA256_ALGORITHM时,BCrypt应该自动添加该结构,但如果是手动计算哈希后直接传入,大概率遗漏了这一步。

  • 公钥导出格式异常
    用mbedtls导出PEM格式公钥时,要确保是标准的PKCS#1(-----BEGIN RSA PUBLIC KEY-----)或X.509格式(-----BEGIN PUBLIC KEY-----)。如果PEM文件存在多余换行、字符缺失或格式损坏,会导致OpenSSL解析公钥失败,间接引发填充验证报错。可以执行openssl rsa -pubin -in public_key.pem -text检查公钥是否能正常解析。

  • 签名字节序不匹配
    Windows API生成的签名可能是小端字节序,而OpenSSL默认期望大端(网络字节序)的签名数据。若字节序不一致,会导致OpenSSL解密签名后得到的内容不符合填充规则,触发报错。可尝试对签名数据反转字节序后再验证。

  • 哈希算法与签名绑定错误
    确认签名时使用的哈希算法确实是SHA256,且BCryptSignHash正确关联了该算法。如果签名时误用了其他哈希(如SHA1),但OpenSSL验证时指定-sha256,也会导致填充验证失败。

内容的提问来源于stack exchange,提问作者Ijaz Ahmad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:57:22