将TimeStamp添加到数字签名

时间:2017-07-17 00:01:57

标签: c# timestamp digital-signature x509certificate rsacryptoserviceprovider

我有一个代码用C#签署一个A1证书成功的字符串。 我需要为此签名添加TimeStamp。这个TimeStamp需要来自像http://www.cryptopro.ru/tsp/tsp.srf这样的TimeStamp服务器 我无法弄清楚如何将TimeStamp放到签名上。 它不是PDF标志,它是一个字符串标志。 有人可以帮我吗?

用于签署的代码:

private byte[] Sign(string text)
    {
        // Find the certificate we’ll use to sign
        X509Certificate2 cert = new X509Certificate2(@"C:\Users\1000084016.pfx", "Password");
        RSACryptoServiceProvider csp = null;

        // Get its associated CSP and private key
        csp = (RSACryptoServiceProvider)cert.PrivateKey;

        // Hash the data
        SHA1Managed sha1 = new SHA1Managed();
        UnicodeEncoding encoding = new UnicodeEncoding();

        byte[] data;
        data = encoding.GetBytes(text);

        byte[] hash = sha1.ComputeHash(data);

        // Sign the hash
        return csp.SignHash(hash, CryptoConfig.MapNameToOID("SHA1"));
    }

1 个答案:

答案 0 :(得分:0)

外部时间戳提供程序使用application/timestamp-query在包含哈希的null上发布时间戳。您可以使用BouncyCastle构建请求(请参阅示例RFC3161

要将时间戳结果嵌入到签名中,您无法使用基本的RSA结果。您需要使用高级签名容器,如CMS(二进制)或XMLDsig(XML),并将时间戳添加为无符号属性。使用CMS

在此处查看here