2014-04-02 75 views
1

我想在C#中用BouncyCastle TimeStamp数字签名(带有本地时间戳证书)。我对TimeStamp的理解是它是签名当前时间。不确定是否应该是当前时间+原始签名内容?请帮助也。CMS签名 - 有什么区别时间戳和计数签名

我的主要困惑是如果生成的TimeStamp被添加到原始签名的Singed/Unsigned属性中。或者它将被添加为CounterSignature?

回答

0

时间戳的目标是证明签名是在给定时间之前创建的,所以对于时间戳,您必须签署数字签名和当前时间。时间戳必须作为无符号属性添加到CMS签名。除了SignatureTimeStampToken本身就是一个签名。

要添加时间戳CMS可以使用具有1.2.840.113549.1.9.16.2.14对象标识符和具有ASN.1类型(下面是所有从CMSTSP和提取的信息的签名时间戳属性的RFC)

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 } 

在时间戳标记的签名数据构建体的类型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} 

电子内容是内容本身,作为携带一个八位位组string.The电子内容须是TSTInfo的DER编码值。

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

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 } 

希望这有助于

+0

谢谢,我得到了它主要是现在很清楚。虽然我仍然试图找出反签名程序。其实我有一个exe文件,显示数字签名属性和显示TimeStamp作为计数器签名。那么,这是否意味着CMS和Codesign的TimeStamp实现方式不同? – Ram

+0

如果你对联署的一些疑问请看看它的定义:http://tools.ietf.org/html/rfc3852#section-11.4 :)。 – albciff

+1

早些时候经历过。虽然这仍然是一个混乱。原因是IETF和微软的理论不同。 1)http://tools.ietf.org/html/rfc3852#section-11.4说计数器签名被添加为原始签名中的未签名属性。 2)http://msdn.microsoft.com/en-us/library/windows/desktop/bb931395(v=vs.85).aspx#Time_Stamp_Response表示TimeStamp被添加为计数器签名。证书链(时间戳)被添加为Un-Auhtenticated attirbute。 – Ram

相关问题