Подпись CMS - Какая разница в метке времени и встречной подписи

Я пытаюсь TimeStamp Digital Siganture (с локальным сертификатом TimeStamp) в C# с BouncyCastle. Я понимаю, что TimeStamp состоит в том, чтобы подписать текущее время. Не уверены, должно ли это быть текущее время + оригинальное содержание подписи? Пожалуйста, помогите в этом тоже.

Моя главная путаница заключается в том, что сгенерированный TimeStamp будет добавлен в атрибуты Singed/Unsigned оригинальной подписи. ИЛИ это будет добавлено как контрподпись?

1 ответ

Решение

Целью отметки времени является подтверждение того, что подпись была создана до определенного времени, поэтому отметкой времени необходимо подписать цифровую подпись и текущее время. Отметка времени должна быть добавлена ​​в подпись CMS как неподписанный атрибут. К тому же SignatureTimeStampToken - это сама подпись.

Чтобы добавить метку времени в CMS, вы можете использовать атрибут метки времени Signature, который имеет идентификатор объекта 1.2.840.113549.1.9.16.2.14 и имеет тип ASN.1 (вся информация ниже извлечена из RFC CMS и TSP)

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 }

В TimeStampToken поля типа EncapsulatedContentInfo конструкции SignedData имеют следующие значения:

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}

eContent - это сам контент, передаваемый в виде строки октетов. eContent ДОЛЖЕН быть значением TSTInfo в кодировке DER.

Маркер отметки времени НЕ ДОЛЖЕН содержать никаких подписей, кроме подписи TSA. Идентификатор сертификата (ESSCertID) сертификата TSA ДОЛЖЕН быть включен в качестве атрибута signerInfo в атрибут SigningCertificate.

    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  }

Надеюсь это поможет,

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