【问题标题】:CMS Signature - What is the difference Time Stamp & Counter SignatureCMS 签名 - 时间戳和反签名有什么区别
【发布时间】:2014-05-13 07:23:22
【问题描述】:

我正在尝试使用 BouncyCastle 在 C# 中对数字签名(带有本地时间戳证书)进行时间戳记。我对 TimeStamp 的理解是,它是对当前时间进行签名。不确定是否应该是当前时间+原始签名内容?也请帮忙。

我的主要困惑是是否将生成的时间戳添加到原始签名的 Singed/Unsigned 属性中。或者它将被添加为会签?

【问题讨论】:

    标签: c# timestamp digital-signature bouncycastle


    【解决方案1】:

    时间戳的目标是证明签名是在给定时间之前创建的,因此您必须使用时间戳对数字签名和当前时间进行签名。时间戳必须作为无符号属性添加到 CMS 签名中。此外 SignatureTimeStampToken 本身就是一个签名。

    要向 CMS 添加时间戳,您可以使用具有 1.2.840.113549.1.9.16.2.14 对象标识符和 ASN.1 类型的 Signature 时间戳属性(以下信息均来自 CMSTSPRFC)

    SignatureTimeStampToken ::= TimeStampToken
    
    TimeStampToken ::= ContentInfo
     -- contentType is id-signedData ([CMS])
     -- content is SignedData ([CMS])
     
    SignedData ::= SEQUENCE {
        version CMSVersion,
        digestAlgorithms DigestAlgorithmIdentifiers,
        encapContentInfo EncapsulatedContentInfo,
        certificates [0] IMPLICIT CertificateSet OPTIONAL,
        crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
        signerInfos SignerInfos }
    

    在 TimeStampToken 中,SignedData 构造的 EncapsulatedContentInfo 类型的字段具有以下含义:

    eContentType 是唯一指定内容类型的对象标识符。对于时间戳记令牌,它被定义为:

        id-ct-TSTInfo  OBJECT IDENTIFIER ::= { iso(1) member-body(2)
        us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 4}
    

    eContent 是内容本身,作为八位字节字符串携带。eContent 应为 TSTInfo 的 DER 编码值。

    时间戳记令牌不得包含除 TSA 签名之外的任何签名。 TSA 证书的证书标识符 (ESSCertID) 必须作为 signerInfo 属性包含在 SigningCertificate 属性中。

        TSTInfo ::= SEQUENCE  {
           version                      INTEGER  { v1(1) },
           policy                       TSAPolicyId,
           messageImprint               MessageImprint,
                 -- MUST have the same value as the similar field in
                 -- TimeStampReq
           serialNumber                 INTEGER,
                -- Time-Stamping users MUST be ready to accommodate integers
                -- up to 160 bits.
           genTime                      GeneralizedTime,
           accuracy                     Accuracy                 OPTIONAL,
           ordering                     BOOLEAN             DEFAULT FALSE,
           nonce                        INTEGER                  OPTIONAL,
                 -- MUST be present if the similar field was present
                 -- in TimeStampReq.  In that case it MUST have the same value.
           tsa                          [0] GeneralName          OPTIONAL,
           extensions                   [1] IMPLICIT Extensions   OPTIONAL  }
    

    希望这会有所帮助,

    【讨论】:

    • 谢谢,我现在基本明白了。虽然我仍然试图找出反签名程序。实际上我有一个 exe 文件,它在属性中显示数字签名并将时间戳显示为计数器签名。那么,这是否意味着 CMS 和 Codesign 的 TimeStamp 实现有所不同?
    • 如果您对会签有疑问,请查看它的定义:tools.ietf.org/html/rfc3852#section-11.4 :)。
    • 之前已经经历过了。尽管它仍然是一个混乱。原因是 IETF 和微软的理论不同。 1) tools.ietf.org/html/rfc3852#section-11.4 表示要在原始签名中添加计数器签名作为未签名属性。 2) msdn.microsoft.com/en-us/library/windows/desktop/… 表示要添加时间戳作为计数器签名。并且证书链(时间戳)被添加为 Un-Authenticated attirbute。
    猜你喜欢
    • 2017-10-24
    • 1970-01-01
    • 2015-10-10
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2017-12-21
    • 2012-07-16
    相关资源
    最近更新 更多