簡體   English   中英

如何從數字PKCS7簽名解碼時間戳?

[英]How to decode timestamp from digital PKCS7 signature?

我有一個帶有時間戳的簽名。 我正在嘗試解碼時間戳並解碼其屬性。

 var contentInfo = new ContentInfo(Convert.FromBase64String(data));
            var signedCms = new SignedCms(contentInfo, true);

            signedCms.Decode(Convert.FromBase64String(signature));
            signedCms.CheckSignature(true);


            foreach (var signerInfo in signedCms.SignerInfos)
            {
                foreach (var unsignedAttribute in signerInfo.UnsignedAttributes)
                {

                    if (unsignedAttribute.Oid.Value == "1.2.840.113549.1.9.16.2.14")
                    {
                        AsnEncodedData asnData = unsignedAttribute.Values[0];

                        byte[] asnBinary = asnData.RawData;
                    }


                }
            }

但是我不明白如何解碼asnData.RawData

至少我需要獲取日期並驗證timstamp是否正確(其簽名有效)

您有什么想法或經驗嗎? 謝謝

時間戳不過是反簽名(已驗證屬性的簽名)。 您需要查看SignerInfo結構中的計數器簽名。

signerInfo.CounterSignerInfos包含的集合SignerInfo ,會被大多數驗證碼簽名方案一起使用(可能是實現特定的)。 如果您的時間戳基於RFC-3161,則它可能在其他地方。 我發現它是帶有OID的SignerInfo.UnsignedAttributes屬性下的未經身份驗證的屬性

1.3.6.1.4.1.311.3.3.1

使用此OID,您可以輕松找到時間戳記。

foreach (CryptographicAttributeObject cryptoAttribute in primarySigner.UnsignedAttributes)
{
    if (cryptoAttribute.Oid.Value == szOID_RFC3161_TIMESTAMP.Value)
    {
        Pkcs9AttributeObject rfcTimestampObj = new Pkcs9AttributeObject(cryptoAttribute.Values[0]);
        //Decode the attribute
        SignedCms rfcTimestampMessage = new SignedCms();
        rfcTimestampMessage.Decode(rfcTimestampObj.RawData);
        //At this point you are obtained the timestamp message as a SignedCMS object - rfcTimestampMessage.SignerInfos.Count > 1
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM