2014-04-02 76 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

相關問題