SM2无证书及隐式证书公钥机制签名和加密过程详解(二)

前面对非显式证书公钥机制(无证书和隐式证书)的密钥生成过程进行了描述(SM2无证书及隐式证书公钥机制签名和加密过程详解(一)_sm2加密解密过程-CSDN博客),这里接着对隐式证书ASN.1模板和生成过程进行说明。

(1)隐式证书ASN.1模板

SequeceOfCertificate ::= SEQUENCE OF Certificate

Certificate ::= CertificateBase(ExplicitCertificate | Reserved)

CertificateBase ::= SEQUENCE {
    version            Uint8(3),
    type            CertificateType,
    issuer            IssuerIdentifier,
    toBeSigned        ToBeSignedCertificate,
    signatre        Signature OPTIONAL
}

CertificateType ::= ENUMERATED {
    explicit,
    reserved,
    ...
}

--显式证书,需具备CA签名,使用CA公钥验证
ExlipcitCertificate ::= CertificateBase (WITH COMPONENTS { ...,
    type(explicit),
    toBeSigned (WITH COMPONENTS { ...,
        verifyKeyIndicator (WITH COMPONENTS {verificationKey})
    }),
    signatre PRESENT
})

--隐式证书,无需CA签名,使用声明公钥验证(即公钥还原数据)
Reserved ::= CertificateBase (WITH COMPONENTS { ...,
    type(reserved),
    toBeSigned(WITH COMPONENTS { ...,
        verifyKeyIndicator(WITH COMPONENTS {reconstructionValue})
    }),
    signatre ABSENT
})

IssuerIdentifier ::= CHOICE {
    sha256AndDigest    HashedId8,
    self SignedData ::= SEQUENCE {
        hashId            OBJECT IDENTIFIER,
        tbsData            ToBeSignedData,
        signer            SignerIdentifier,
        signature        Signature
    } HashAlgorithm,
    ...,
    sha384AndDigest    HashedId8,
    sm3AndDigest    HashedId8
}

ToBeSignedCertificate ::= SEQUENCE {
    id                CertificateId,
    cracaId            HashedId3,
    crlSeries        CrlSeries,
    validityPeriod    ValidityPeriod,
    region            GeographicRegion OPTIONAL,
    assuranceLevel    SubjectAssurance OPTIONAL,
    appPermissions    SequenceOfAidSsp OPTIONAL,
    cerIssuePermissions    SequenceOfAidGroupPermissions OPTIONAL,
    cerRequestPermissions    SequenceOfAidGroupPermissions OPTIONAL,
    canRequestRollover    NULL OPTIONAL,
    encryptionKey    publicEncryptionKey OPTIONAL,
    verifyKeyIndicator    VerificationKeyIndicator,
    ...
}
(WITH COMPONENTS {..., appPermissions PRESENT} |
 WITH COMPONENTS {..., cerIssuePermissions PRESENT} |
 WITH COMPONENTS {..., cerRequestPermissions PRESENT})

CertificateId ::= CHOICE {
    linkageData        LinkageData,
    name            HostName,
    binaryId        OCTET STRING(SIZE(1..64)),
    none            NULL,
    ...
}

LinkageData ::= SEQUENCE {
    iCert            IValue,
    linkage-value    LinkageValue,
    group-linkage-value    GroupLinkageValue OPTIONAL
}

SequenceOfAidGroupPermissions ::= SEQUENCE OF AidGroupPermissions

AidGroupPermissions ::= SEQUENCE {
    subjectPermissions    SubjectPermissions,
    minChainLength        INTEGER DEFAULT 1,
    chainLengthRange    INTEGER DEFAULT 0,
    eeType                EndEntityType DEFAULT {app}
}

SubjectPermissions ::= CHOICE {
    explicit        SequenceOfAidSspRange,
    all                NULL,
    ...
}

EndEntityType ::= BIT STRING {app(0), enroll(1)}(size(8))(ALL EXCEPT{})

VerificationKeyIndicator ::= CHOICE {
    verificationKey        PublicVerificationKey,
    reconstructionValue    EccP256CurvePoint,
    ...
}

(2)隐式证书生成过程(简要)

1)KGC生成系统私钥ms和对应系统公钥Ppub。
2)KGC使用系统公钥Ppub向CA申请一张证书(标准证书申请流程)。
3)实体A将公钥数据UA等信息提交到KGC。
4)KGC验证隐式证书申请合法性,生成 ToBeSignedCertificate 中从id开始 encryptionKey 的部分。
5)KGC生成IDA(至少包括 ToBeSignedCertificate 中从 id 开始到 encryptionKey 之前的数据域)。
6)KGC将WA作为隐式证书中 verifyKeyIndicator 的数据,生成完整的隐式证书。

后续,将进一步介绍隐式证书COER编码机制、隐式证书实例及其使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游鲦亭长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值