基于SM2算法的无证书及隐式证书公钥机制

基于SM2算法的无证书及隐式证书公钥机制

详细细节可参考:https://blog.youkuaiyun.com/samsho2/article/details/138483765

概述

https://baijiahao.baidu.com/s?id=1652795603948747465&wfr=spider&for=pc

非对称密码系统中,如何将用户的身份和密钥对应起来,是一个需要解决的关键问题。目前主流的有三种解决方案:

  1. 采用证书机制实现用户的身份和密钥之间的安全对应,一般都采用公钥基础设施(PKI)来实现,需要依赖具有公信力的第三方可信中心实现(CA)。
  2. 基于标识的密码技术(Identity-Based Cryptography:IBC)。为了降低公钥系统中密钥管理和使用的复杂性,Shamir在1984年提出了基于标识的密码机制。这种系统中用户的标识可以作为用户的公钥,用户不需要申请和交换证书,而是直接使用标识进行密码运算,从而解决公钥真实性问题,极大地简化了密钥系统管理的复杂性。这类系统中用户的私钥由系统中的一受信任的第三方(密钥生成中心:KGC)使用标识私钥生成算法计算生成。这些标识可以具有任意的格式、属性,可以是常用的用户标识如邮件地址、手机号码、身份证号码;在物联网中可以是设备标识、Handle码、OID等;还可以是数据安全控制策略的形式化编码、生物特征信息、甚至是标识属性集等,特别适合基于标识、基于属性的权限访问控制和数据安全保护。
  3. 基于无证书密码体制。该体制的代表有1991年Girault 提出的“隐式证书”密码系统(Implicit Certificate)和Al-Riyami和Paterson在2001年提出的无证书公钥密码体制(AP-CL-PKC)。这种密码体制介于传统PKI和标识密码技术之间。这种机制中用户的私钥由两个秘密因素决定 :一个是从KGC获取的与用户身份相关的密钥分片,另一部分是由用户自己生成的密钥分片。从一个密钥分片无法计算出另外一个,因此KGC无法计算出用户的私钥。同时,即便攻击者成功的利用自己的公钥替换了用户的公钥,却仍然无法伪造用户的签名。因此这类系统在签名应用中具有无证书管理、系统轻量、通信开销低、具有强不可抵赖性等众多优点,非常适合物联网等领域的身份认证应用。

可以发现,无论哪一种方案,归根到底还是需要可信的信任中心,可信第三方是信任建立的前提条件。

基于SM2算法的无证书及隐式证书公钥机制

整体流程

image

系统中涉及两个角色,密钥生成中心(Key Generate Center,KGC)和普通用户。

  1. KGC:与证书体系中的CA对应,辅助用户生成无证书体系中的密钥,给用户颁发密钥分片,默认可信,且公钥公开。

    1. 公钥: P P U B P_{PUB} PPUB
    2. 私钥: m s ms ms
  2. 用户:基于KGC颁发的密钥分片生成自身的私钥,执行加密、解密、签名、验签功能

    1. 无证书身份公钥: W A W_{A} WA
    2. 无证书身份私钥: d A d_{A} dA
    3. 身份ID: I D A ID_{A} IDA

总结一下KGC辅助用户生成无证书密钥的逻辑(细节不再展示,参考博文里面写的很详细):

  1. KGC模块初始化自身的主公私钥 P P U B P_{PUB} PPUB m s ms ms,并公开公钥 P P U B P_{PUB} PPUB,且默认可信
  2. 用户生成临时公私钥 d A ′ {d_{A}}' dA U A U_{A} UA
  3. 用户将身份信息 I D A ID_{A} IDA和临时公钥 U A U_{A} UA提交给KGC
  4. KGC生成对应该用户的声明公私钥 W A W_{A} WA w w w
  5. KGC基于声明的公钥和用户身份信息生成类似于schnorr签名中的“挑战”
  6. KGC基于声明的公钥和主私钥生成用户的密钥分片,类似于schnorr签名中的“承诺”
  7. 用户收到临时公钥和私钥分片后,生成用户真正的私钥 d A d_{A} dA和公钥 P A P_{A} PA
  8. 私钥和公钥可以用于后续的加密、解密、签名、验签,基于KGC的主公钥
  9. 同时用户身份信息也关联了私钥分片,防止攻击

加密、解密、签名、验签

还想深究一下具体的加密、解密、签名、验签是如何实现的:

加密

加密方使用根据用户的声明公钥 W A W_{A} WA计算出用户的公钥 P A P_{A} PA,然后再加密数据,同标准SM2一致。

解密

用户使用自己的私钥 d A d_{A} dA解密,同标准SM2一致。

签名

在计算摘要的时候加入了无证书密钥生成中心的主公钥 P P U B P_{PUB} PPUB和用户无证书声明公钥 W A W_{A} WA,计算签名的时候使用的是用户的私钥 d A d_{A} dA。其余步骤同SM2一致。

验签

根据声明公钥和主公钥计算出用户的公钥 P A P_{A} PA,然后用于验证签名。其余步骤同SM2一致。

<think>好的,我现在需要解决用户关于“应用未配置对应签名算法公钥或者证书”的问题。首先,我要理解这个错误发生的背景和常见原因。用户提到的错误通常出现在使用公钥证书进行加、签名等操作时,应用系统无法找到匹配的算法钥配置。这可能涉及多个方面,比如配置错误、算法不匹配、证书链问题等。 首先,我需要回顾用户提供的三个引用内容,看看是否有相关的信息可以应用。引用[1]提到IPK是无证书公钥体系,通过标识和种子生成钥,这可能涉及到钥生成和验证的过程。如果应用端没有正确生成公钥或私钥,可能导致配置错误。引用[2]讨论的是基于SM2的无证书证书机制,其中KGC负责生成钥分片。如果KGC配置不当或公钥未正确分发,也可能引发问题。引用[3]则涉及EdDSA算法钥生成过程,特别是公钥和私钥的生成步骤是否正确,可能影响签名验证。 接下来,我需要分析错误的具体原因。可能的原因包括: 1. **算法不匹配**:应用配置的签名算法证书公钥实际使用的算法不一致。例如,使用SM2算法证书却配置了RSA的签名算法。 2. **证书链不完整**:中间证书或根证书未正确安装,导致系统无法验证证书的有效性。 3. **钥对生成错误**:如引用[3]所述,如果钥生成过程中出现错误(如基点G不正确),公钥可能无法正确对应私钥,导致验证失败。 4. **证书过期或吊销**:证书可能已过期或被CA吊销,导致应用无法使用。 5. **配置路径错误**:应用未正确指定证书公钥的存储路径,导致系统找不到相关文件。 6. **编码或格问题**:证书公钥文件的格不符合要求,如PEM与DER格混淆。 然后,解决方案需要针对上述原因逐一提出: 1. **检查算法一致性**:确认应用配置的签名算法证书/公钥实际使用的算法一致。例如,SM2证书应配置SM3WithSM2签名算法。 2. **补全证书链**:确保中间证书和根证书已正确安装,可以使用OpenSSL命令验证证书链。 3. **重新生成钥对**:按照引用[3]中的步骤,确保钥生成过程正确,特别是基点G的设置是否正确。 4. **检查证书有效期和状态**:使用工具检查证书是否在有效期内,并且未被吊销。 5. **核对配置文件路径**:确认应用配置文件中指定的证书路径正确无误,文件权限允许读取。 6. **转换证书**:使用OpenSSL转换证书,确保应用支持的格。 此外,引用[1]提到的IPK体系中的自证公钥机制,如果应用使用无证书体系,需要确保公钥生成过程正确,应用端能够正确计算公钥并验证其真实性。引用[2]中的KGC如果配置错误,可能导致公钥分发问题,需检查KGC的设置和公钥分发流程。 可能还需要考虑具体场景,如开发环境与生产环境的差异,不同服务器或中间件的配置差异。例如,Tomcat和Nginx在SSL配置上有所不同,可能需要不同的证书或配置指令。 最后,生成相关问题时,需要围绕公钥配置、证书管理、算法选择等方面展开,帮助用户进一步理解可能涉及的领域。</think>### 应用未配置对应签名算法公钥或者证书:错误原因及解决方案 #### **错误原因分析** 1. **算法不匹配** - 应用的签名算法配置与证书/公钥实际使用的加算法不一致。例如: - 证书使用SM2算法,但应用配置为RSA签名算法[^2]。 - 使用EdDSA生成的公钥,但应用仅支持ECDSA签名[^3]。 2. **证书链不完整** - 缺少中间证书或根证书,导致系统无法验证证书有效性。 3. **钥对生成错误** - 钥生成过程未遵循标准(如EdDSA未正确选择基点$G$或随机数$k$),导致公钥与私钥不匹配。 - 无证书体系中,标识与公钥种子计算错误,导致公钥自证失败[^1]。 4. **证书过期或吊销** - 证书已超过有效期,或被证书颁发机构(CA)主动吊销。 5. **配置路径或格错误** - 证书文件路径配置错误,或文件格不兼容(如PEM与DER混淆)。 --- #### **解决方案** 1. **核对算法一致性** - **步骤**: 1. 确认证书使用的算法(如SM2、RSA、EdDSA)。 2. 检查应用配置文件(如TLS协议配置)是否匹配该算法。 - **示例**: - 若使用SM2证书,需配置`SM3WithSM2`签名算法。 - 若使用EdDSA,需确保代码中调用正确的椭圆曲线参数。 2. **补全证书链** - **步骤**: 1. 通过OpenSSL命令验证证书链: ```bash openssl verify -CAfile root.crt -untrusted intermediate.crt server.crt ``` 2. 将缺失的中间证书追加到服务端证书文件中。 3. **重新生成钥对** - **步骤**: 1. 对于无证书体系(如IPK),确保标识与种子计算生成正确的私钥和公钥。 2. 对于EdDSA,检查基点$G$的预置值是否符合标准[^3]。 4. **检查证书有效期及状态** - **工具**: - 使用`openssl x509 -in cert.pem -noout -dates`查看有效期。 - 通过OCSP(在线证书状态协议)验证证书是否被吊销。 5. **修正文件路径与格** - **步骤**: 1. 确认配置文件中证书路径正确,且文件权限可读。 2. 转换格(如DER转PEM): ```bash openssl x509 -in cert.der -inform DER -out cert.pem -outform PEM ``` --- #### **应用场景示例** - **Web服务器(Nginx)配置SM2证书**: 需在配置文件中指定SM2算法并加载完整证书链: ```nginx ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/private.key; ssl_signature_schemes SM3WithSM2; ``` - **移动端应用使用EdDSA签名**: 需确保客户端和服务端使用相同的椭圆曲线参数(如Ed25519)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值