我想在C#中用BouncyCastle TimeStamp数字签名(带有本地时间戳证书)。我对TimeStamp的理解是它是签名当前时间。不确定是否应该是当前时间+原始签名内容?请帮助也。CMS签名 - 有什么区别时间戳和计数签名
我的主要困惑是如果生成的TimeStamp被添加到原始签名的Singed/Unsigned属性中。或者它将被添加为CounterSignature?
我想在C#中用BouncyCastle TimeStamp数字签名(带有本地时间戳证书)。我对TimeStamp的理解是它是签名当前时间。不确定是否应该是当前时间+原始签名内容?请帮助也。CMS签名 - 有什么区别时间戳和计数签名
我的主要困惑是如果生成的TimeStamp被添加到原始签名的Singed/Unsigned属性中。或者它将被添加为CounterSignature?
时间戳的目标是证明签名是在给定时间之前创建的,所以对于时间戳,您必须签署数字签名和当前时间。时间戳必须作为无符号属性添加到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 }
希望这有助于
谢谢,我得到了它主要是现在很清楚。虽然我仍然试图找出反签名程序。其实我有一个exe文件,显示数字签名属性和显示TimeStamp作为计数器签名。那么,这是否意味着CMS和Codesign的TimeStamp实现方式不同? – Ram
如果你对联署的一些疑问请看看它的定义:http://tools.ietf.org/html/rfc3852#section-11.4 :)。 – albciff
早些时候经历过。虽然这仍然是一个混乱。原因是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