Добавить TimeStamp к цифровой подписи

У меня есть код, чтобы подписать строку с сертификатом A1 успешно используя C#. Мне нужно добавить метку времени к этой подписи. Эта метка TimeStamp пришла с сервера TimeStamp, например http://www.cryptopro.ru/tsp/tsp.srf Я не могу понять, как поставить метку 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 ответ

Временная метка выдается внешним провайдером временных меток с использованием RFC3161 на application/timestamp-query содержащий хеш Вы можете построить запрос, используя BouncyCastle (см. Пример здесь)

Чтобы встроить результат отметки времени в подпись, вы не можете использовать базовый результат RSA. Вам необходимо использовать расширенный контейнер подписи, такой как CMS (двоичный) или XMLDsig(XML), и добавить метку времени в качестве неподписанного атрибута. Смотрите здесь реализацию с использованием CMS

Другие вопросы по тегам