Cms pkcs 7: Структура PKCS7-файла / Хабр

Содержание

Структура PKCS7-файла / Хабр

Привет!

Довелось мне на днях столкнуться с такой напастью как p7s файл и, как вследствие этого, с Cryptographic Message Syntax (CMS). На хабре нашлась интересная статья описывающая структуру CMS данных, но в ней к сожалению нет примера, позволяющего наглядно продемонстрировать CMS на практике. Я хочу немного дополнить ту статью и разобрать внутренности файла цифровой подписи p7s.

ASN.1


Что же такое Cryptographic Message Syntax? Это стандарт, описывающий структуру сообщений, полученных с использованием криптографии.

В стандарте описывается шесть типов данных: data, signedData, envelopedData, signedAndEnvelopedData, digestedData, and encryptedData. В данном топике я расскажу о типе signedData (данные с электронной подписью).

Прежде всего следует сказать, что стандартный p7s файл имеет ASN.1 структуру.

ASN.1 — формат записи, с помощью которого можно описывать сложные структуры данных, состоящие из различных типов.

Приведу краткую выдержку из своего старого топика про x.509 сертификаты:

ASN.1-кодировка описывается следующим правилом. Сперва записываются байты, характеризующий тип данных, затем последовательность байтов хранящих сведения о длине данных и лишь после этого следуют сами данные.

К примеру, для кодировки целого числа INTEGER 65537 используется следующая форма: 02 03 01 00 01.

Здесь первый байт 02, определяет тип INTEGER (полную таблицу типов вы можете найти например тут), второй байт 03 показывает длину блока. А следующие за этим байты 01 00 01, являются шестнадцатеричной записью нашего числа 65537.

В нашем случае, для описание простейшего самоподписанного сертификата, достаточно 9 типов данных. Приведем таблицу кодирования для этих типов:











Наименование типаКраткое описаниеПредставление типа в DER-кодировке
SEQUENCEИспользуется для описания структуры данных, состоящей из различных типов.30
INTEGERЦелое число.02
OBJECT IDENTIFIERПоследовательность целых чисел.06
UTCTimeВременной тип, содержит 2 цифры для определения года17
GeneralizedTimeРасширенный временной тип, содержит 4 цифры для обозначения года.18
SETОписывает структуру данных разных типов.31
UTF8StringОписывает строковые данные.0C
NULLСобственно NULL05
BIT STRINGТип для хранения последовательности бит.03


Подробное описание ASN.1 дано в статье «ASN.1 простыми словами». Я же просто расскажу какие сведения можно извлечь из самого обыкновенного p7s файла.

Структура P7S файла


В стандарте CMS приводится описание структуры файла содержащего сведения об ЭЦП.

   SignedData ::= SEQUENCE {
        version CMSVersion,
        digestAlgorithms DigestAlgorithmIdentifiers,
        encapContentInfo EncapsulatedContentInfo,
        certificates [0] IMPLICIT CertificateSet OPTIONAL,
        crls [1] IMPLICIT RevocationInfoChoices OPTIONAL,
        signerInfos SignerInfos }


Согласно стандарту, файл с цифровой подписью в CSM формате должен содержать следующие поля:

  • CMSVersion — целое число, обозначающее версию используемого синтаксиса.
  • DigestAlgorithmIdentifiers — идентификатор одной или нескольких хеш-функций которые используются при вычислении подписей.
  • EncapsulatedContentInfo — собственно данные, которые были подписаны.
  • CertificateSet — набор всех необходимых сертификатов, необходимых для проверки подписей.
  • RevocationInfoChoices — набор списков отзыва сертификатов.
  • SignerInfos — структура данных содержащая информацию о подписанте.


Для того чтобы понять как это выглядит на практике подпишем произвольный набор байт тестовым сертификатом и сгенерируем p7s файл с типом SignedData.

Получившийся файл будет иметь ASN.1 структуру:

Самый обычный файл с электронной цифровой подписью

30 82 03 99 06 09 2A 86  48 86 F7 0D 01 07 02 A0
82 03 8A 30 82 03 86 02  01 01 31 0B 30 09 06 05
2B 0E 03 02 1A 05 00 30  27 06 09 2A 86 48 86 F7
0D 01 07 01 A0 1A 04 18  54 00 65 00 73 00 74 00
20 00 6D 00 65 00 73 00  73 00 61 00 67 00 65 00
A0 82 02 6B 30 82 02 67  30 82 01 D0 A0 03 02 01
02 02 11 00 D9 01 B8 B8  2F 74 CA 0E 8D 84 48 5A
22 65 E1 C3 30 0D 06 09  2A 86 48 86 F7 0D 01 01
05 05 00 30 21 31 10 30  0E 06 03 55 04 03 0C 07
54 65 73 74 20 43 41 31  0D 30 0B 06 03 55 04 0A
0C 04 54 65 73 74 30 1E  17 0D 31 35 30 34 32 39
31 32 33 33 32 30 5A 17  0D 31 35 30 35 30 36 31
32 33 33 32 30 5A 30 43  31 0D 30 0B 06 03 55 04
0C 0C 04 54 65 73 74 31  0D 30 0B 06 03 55 04 0B
0C 04 54 65 73 74 31 0D  30 0B 06 03 55 04 0A 0C
04 54 65 73 74 31 14 30  12 06 03 55 04 03 0C 0B
5B 54 45 53 54 5D 20 54  65 73 74 30 81 9F 30 0D
06 09 2A 86 48 86 F7 0D  01 01 01 05 00 03 81 8D
00 30 81 89 02 81 81 00  92 98 ED 87 B0 E9 DB 66
AB 06 D1 8E 7B 1B 17 40  10 98 81 D3 06 F3 B5 CA
A7 FC D4 FF CB A2 2D 98  48 F9 1E 10 25 0F C6 1C
45 5D B7 A6 76 57 60 E7  BF BF DB 66 E0 D7 FC 1F
0B A1 99 1B EE C0 0D AA  76 EE 9A B8 C6 85 5D D5
C8 FA AF F8 FD 12 67 DE  6F 2D BE 5C 3E B1 88 1F
49 B2 90 AA DD B2 85 A6  46 BA 93 14 65 8C C5 20
5A AC 59 62 59 51 F1 7F  BC 1E 7A D7 9F F8 8B 3B
48 2A 43 2B 7E 20 44 4B  02 03 01 00 01 A3 7D 30
7B 30 0B 06 03 55 1D 0F  04 04 03 02 04 F0 30 2C
06 03 55 1D 25 01 01 FF  04 22 30 20 06 08 2B 06
01 05 05 07 03 04 06 08  2B 06 01 05 05 07 03 02
06 0A 2B 06 01 04 01 82  37 0A 03 0C 30 1D 06 03
55 1D 0E 04 16 04 14 C7  05 8A 12 A4 B5 B7 3E F4
E5 87 6C 34 B9 BB 32 15  5E 96 91 30 1F 06 03 55
1D 23 04 18 30 16 80 14  6A E7 AB 14 AA E8 B4 C0
A8 9E 18 9D 81 68 B1 19  9F FB 25 B0 30 0D 06 09
2A 86 48 86 F7 0D 01 01  05 05 00 03 81 81 00 20
07 EF BF 72 C4 ED B8 8F  B4 03 6A B8 F9 0E 16 84
89 7F B5 C5 0E 31 17 CF  80 9D B1 FB C1 C6 8B CF
3F 9C 34 51 76 21 55 29  30 E9 F3 B7 39 F5 4C E0
81 C1 04 70 67 C5 0C AE  07 80 B2 44 CB 18 3F 0E
68 67 BC EB AA 95 75 8F  7C 18 46 5B AD 96 30 70
CA 63 09 99 54 86 87 27  0A D6 DE 36 26 6A 85 64
53 B5 03 22 59 72 7F 3E  46 43 60 C2 AA EC 70 9E
F7 0F 13 F5 D6 66 49 EC  FE 7A 52 19 D1 27 40 31
81 DB 30 81 D8 02 01 01  30 36 30 21 31 10 30 0E
06 03 55 04 03 0C 07 54  65 73 74 20 43 41 31 0D
30 0B 06 03 55 04 0A 0C  04 54 65 73 74 02 11 00
D9 01 B8 B8 2F 74 CA 0E  8D 84 48 5A 22 65 E1 C3
30 09 06 05 2B 0E 03 02  1A 05 00 30 0D 06 09 2A
86 48 86 F7 0D 01 01 01  05 00 04 81 80 57 14 04
A3 2C 01 5B 61 B9 57 F0  02 95 0A 33 E0 94 75 CA
66 DE D0 90 93 8A E2 1A  FE 6E 0B 39 C9 02 38 50
DE 7C 38 48 27 36 E9 7B  FF 6C B4 DB B0 60 5C CD
78 78 54 52 54 99 A9 C4  2B 28 D7 BA AD 19 B2 6D
0D 43 B6 23 1B 5E DC B2  3E 70 FF B4 68 1D 1C 3B
6F D5 A4 0D 50 8F 55 45  7E 04 7D 2C C5 C3 80 3A
23 27 D2 E2 B4 1A 05 2E  D1 3E 3A 1E 97 88 D9 12
AE B3 56 49 E9 34 97 EF  47 70 E1 66 9E 


Используя ASN. 1-парсер можно легко разобрать что скрывается за шестнадцатеричным кодом.

SEQUENCE {
   OBJECTIDENTIFIER 1.2.840.113549.1.7.2 (signedData)
   [0] {
      SEQUENCE {
         INTEGER 0x01 (1 decimal)
         SET {
            SEQUENCE {
               OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1)
               NULL 
            }
         }
         SEQUENCE {
            OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data)
            [0] {
               OCTETSTRING 540065007300740020006D00650073007300610067006500
            }
         }
         [0] {
            SEQUENCE {
               SEQUENCE {
                  [0] {
                     INTEGER 0x02 (2 decimal)
                  }
                  INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption)
                     NULL 
                  }
                  SEQUENCE {
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2. 5.4.3 (commonName)
                           UTF8String 'Test CA'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.10 (organizationName)
                           UTF8String 'Test'
                        }
                     }
                  }
                  SEQUENCE {
                     UTCTime '150429123320Z'
                     UTCTime '150506123320Z'
                  }
                  SEQUENCE {
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.12 (title)
                           UTF8String 'Test'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.11 (organizationalUnitName)
                           UTF8String 'Test'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2. 5.4.10 (organizationName)
                           UTF8String 'Test'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.3 (commonName)
                           UTF8String '[TEST] Test'
                        }
                     }
                  }
                  SEQUENCE {
                     SEQUENCE {
                        OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption)
                        NULL 
                     }
                     BITSTRING 0x308189028181009298ED87B0E9DB66AB06D18E7B1B1740109881D306F3B5CAA7FCD4FFCBA22D9848F9
                     1E10250FC61C455DB7A6765760E7BFBFDB66E0D7FC1F0BA1991BEEC00DAA76EE9AB8C6855DD5C8FAAFF8FD1267D
                     E6F2DBE5C3EB1881F49B290AADDB285A646BA9314658CC5205AAC59625951F17FBC1E7AD79FF88B3B482A432B7E20
                     444B0203010001 : 0 unused bit(s)
                  }
                  [3] {
                     SEQUENCE {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2. 5.29.15 (keyUsage)
                           OCTETSTRING 030204F0
                        }
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.37 (extKeyUsage)
                           BOOLEAN TRUE
                           OCTETSTRING 302006082B0601050507030406082B06010505070302060A2B0601040182370A030C
                        }
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.14 (subjectKeyIdentifier)
                           OCTETSTRING 0414C7058A12A4B5B73EF4E5876C34B9BB32155E9691
                        }
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.35 (authorityKeyIdentifier)
                           OCTETSTRING 301680146AE7AB14AAE8B4C0A89E189D8168B1199FFB25B0
                        }
                     }
                  }
               }
               SEQUENCE {
                  OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption)
                  NULL 
               }
               BITSTRING 0x2007EFBF72C4EDB88FB4036AB8F90E1684897FB5C50E3117CF809DB1FBC1C68BCF3F9C34517621552930E9F
               3B739F54CE081C1047067C50CAE0780B244CB183F0E6867BCEBAA95758F7C18465BAD963070CA630999548687270AD6DE3
               6266A856453B5032259727F3E464360C2AAEC709EF70F13F5D66649ECFE7A5219D12740 : 0 unused bit(s)
            }
         }
         SET {
            SEQUENCE {
               INTEGER 0x01 (1 decimal)
               SEQUENCE {
                  SEQUENCE {
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2. 5.4.3 (commonName)
                           UTF8String 'Test CA'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.10 (organizationName)
                           UTF8String 'Test'
                        }
                     }
                  }
                  INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3
               }
               SEQUENCE {
                  OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1)
                  NULL 
               }
               SEQUENCE {
                  OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption)
                  NULL 
               }
               OCTETSTRING 571404A32C015B61B957F002950A33E09475CA66DED090938AE21AFE6E0B39C9023850DE7C38482736E97
               BFF6CB4DBB0605CCD787854525499A9C42B28D7BAAD19B26D0D43B6231B5EDCB23E70FFB4681D1C3B6FD5A40D508F55
               457E047D2CC5C3803A2327D2E2B41A052ED13E3A1E9788D912AEB35649E93497EF4770E1669E
            }
         }
      }
   }
}

Начнем по порядку. Как видно из примера, p7s файл представляет собой одну большую структуру данных с типом SEQUENCE, включающую в себя все описанные в стандарте поля.

Открывает блок тип данных OBJECTIDENTIFIER со значением 1.2.840.113549.1.7.2 (SignedData), который однозначно дает понять с какого рода объектом мы имеем дело.

После чего один за другим следуют блоки:

  • version, версия синтаксиса.
    INTEGER 0x01 (1 decimal) 
    
  • digestAlgorithms — идентификатор хеш-функции использовавшейся в подписи. Имеет значение SEQUENCE с двумя атрибутами: идентификатором алгоритма и пустым атрибутом со значением null.
    SET {
                SEQUENCE {
                   OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1)
                   NULL 
                }
             }
    
  • contentInfo — подписанные данные, представленные в двоичном формате. Следует уточнить, что тип signedData не обязательно должен включать в себя сами данные. В этом случае contentInfo будет включать атрибут OBJECTIDENTIFIER и пустое значение null.
    SEQUENCE {
                OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data)
                [0] {
                   OCTETSTRING 540065007300740020006D00650073007300610067006500
                }
             }
    
  • certificates — X509 сертификат подписавшей стороны. Если данные были подписаны несколькими лицами, блок содержит информацию о всех сертификатах, необходимых для проверки подписей.
    SEQUENCE {
                   SEQUENCE {
                      [0] {
                         INTEGER 0x02 (2 decimal)
                      }
                      INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3
                      SEQUENCE {
                         OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption)
                         NULL 
                      }
                      SEQUENCE {
                         SET {
                            SEQUENCE {
                               OBJECTIDENTIFIER 2.5.4.3 (commonName)
                               UTF8String 'Test CA'
                            }
                         }
                         SET {
                            SEQUENCE {
                               OBJECTIDENTIFIER 2. 5.4.10 (organizationName)
                               UTF8String 'Test'
                            }
                         }
                      }
                      SEQUENCE {
                         UTCTime '150429123320Z'
                         UTCTime '150506123320Z'
                      }
                      SEQUENCE {
                         SET {
                            SEQUENCE {
                               OBJECTIDENTIFIER 2.5.4.12 (title)
                               UTF8String 'Test'
                            }
                         }
                         SET {
                            SEQUENCE {
                               OBJECTIDENTIFIER 2.5.4.11 (organizationalUnitName)
                               UTF8String 'Test'
                            }
                         }
                         SET {
                            SEQUENCE {
                               OBJECTIDENTIFIER 2.5.4.10 (organizationName)
                               UTF8String 'Test'
                            }
                         }
                         SET {
                            SEQUENCE {
                               OBJECTIDENTIFIER 2. 5.4.3 (commonName)
                               UTF8String '[TEST] Test'
                            }
                         }
                      }
                      SEQUENCE {
                         SEQUENCE {
                            OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption)
                            NULL 
                         }
                         BITSTRING 0x308189028181009298ED87B0E9DB66AB06D18E7B1B1740109881D306F3B5CAA7FCD4FFCBA22D9848F9
                         1E10250FC61C455DB7A6765760E7BFBFDB66E0D7FC1F0BA1991BEEC00DAA76EE9AB8C6855DD5C8FAAFF8FD1267D
                         E6F2DBE5C3EB1881F49B290AADDB285A646BA9314658CC5205AAC59625951F17FBC1E7AD79FF88B3B482A432B7E20
                         444B0203010001 : 0 unused bit(s)
                      }
                      [3] {
                         SEQUENCE {
                            SEQUENCE {
                               OBJECTIDENTIFIER 2.5.29.15 (keyUsage)
                               OCTETSTRING 030204F0
                            }
                            SEQUENCE {
                               OBJECTIDENTIFIER 2. 5.29.37 (extKeyUsage)
                               BOOLEAN TRUE
                               OCTETSTRING 302006082B0601050507030406082B06010505070302060A2B0601040182370A030C
                            }
                            SEQUENCE {
                               OBJECTIDENTIFIER 2.5.29.14 (subjectKeyIdentifier)
                               OCTETSTRING 0414C7058A12A4B5B73EF4E5876C34B9BB32155E9691
                            }
                            SEQUENCE {
                               OBJECTIDENTIFIER 2.5.29.35 (authorityKeyIdentifier)
                               OCTETSTRING 301680146AE7AB14AAE8B4C0A89E189D8168B1199FFB25B0
                            }
                         }
                      }
                   }
                   SEQUENCE {
                      OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption)
                      NULL 
                   }
                   BITSTRING 0x2007EFBF72C4EDB88FB4036AB8F90E1684897FB5C50E3117CF809DB1FBC1C68BCF3F9C34517621552930E9F
                   3B739F54CE081C1047067C50CAE0780B244CB183F0E6867BCEBAA95758F7C18465BAD963070CA630999548687270AD6DE3
                   6266A856453B5032259727F3E464360C2AAEC709EF70F13F5D66649ECFE7A5219D12740 : 0 unused bit(s)
                }
             }
    
  • SignerInfos — информация о подписавшем, содержит сведения об издателе, серийный номер сертификата подписавшего, а также идентификаторы хеш-функции и асимметричного алгоритма шифрования используемых при подписи.
    SEQUENCE {
                   INTEGER 0x01 (1 decimal)
                   SEQUENCE {
                      SEQUENCE {
                         SET {
                            SEQUENCE {
                               OBJECTIDENTIFIER 2.5.4.3 (commonName)
                               UTF8String 'Test CA'
                            }
                         }
                         SET {
                            SEQUENCE {
                               OBJECTIDENTIFIER 2.5.4.10 (organizationName)
                               UTF8String 'Test'
                            }
                         }
                      }
                      INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3
                   }
                   SEQUENCE {
                      OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1)
                      NULL 
                   }
                   SEQUENCE {
                      OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption)
                      NULL 
                   }
                   OCTETSTRING 571404A32C015B61B957F002950A33E09475CA66DED090938AE21AFE6E0B39C9023850DE7C38482736E97
                   BFF6CB4DBB0605CCD787854525499A9C42B28D7BAAD19B26D0D43B6231B5EDCB23E70FFB4681D1C3B6FD5A40D508F55
                   457E047D2CC5C3803A2327D2E2B41A052ED13E3A1E9788D912AEB35649E93497EF4770E1669E
                }
    

Помимо приведенных выше обязательных полей в объекте с типом SignedData могут использоваться опциональные поля, такие как signedAttributes, добавляемые в блок SignerInfo. SignedAttributes добавляются при вычислении хеш-значения от подписываемых данных, поэтому изменение этих полей делает подпись недействительной.

Если блок SignedAttributes используется, то он должен содержать минимум два поля:

  • Поле описывающее тип данных, содержащихся в блоке contentInfo
  • Поле хранящее хеш-значение блока contentInfo


Рассмотрим еще один пример p7s файла, созданного с использованием SignedAttributes.

SEQUENCE {
   OBJECTIDENTIFIER 1.2.840.113549.1.7.2 (signedData)
   [0] {
      SEQUENCE {
         INTEGER 0x01 (1 decimal)
         SET {
            SEQUENCE {
               OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1)
               NULL 
            }
         }
         SEQUENCE {
            OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data)
            [0] {
               OCTETSTRING 540065007300740020006D00650073007300610067006500
            }
         }
         [0] {
            SEQUENCE {
               SEQUENCE {
                  [0] {
                     INTEGER 0x02 (2 decimal)
                  }
                  INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3
                  SEQUENCE {
                     OBJECTIDENTIFIER 1. 2.840.113549.1.1.5 (sha1WithRSAEncryption)
                     NULL 
                  }
                  SEQUENCE {
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.3 (commonName)
                           UTF8String 'Test CA'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.10 (organizationName)
                           UTF8String 'Test'
                        }
                     }
                  }
                  SEQUENCE {
                     UTCTime '150429123320Z'
                     UTCTime '150506123320Z'
                  }
                  SEQUENCE {
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.12 (title)
                           UTF8String 'Test'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2. 5.4.11 (organizationalUnitName)
                           UTF8String 'Test'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.10 (organizationName)
                           UTF8String 'Test'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.3 (commonName)
                           UTF8String '[TEST] Test'
                        }
                     }
                  }
                  SEQUENCE {
                     SEQUENCE {
                        OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption)
                        NULL 
                     }
                     BITSTRING 0x308189028181009298ED87B0E9DB66AB06D18E7B1B1740109881D306F3B5CAA7FCD4FFCBA22D9848F91E102
                     50FC61C455DB7A6765760E7BFBFDB66E0D7FC1F0BA1991BEEC00DAA76EE9AB8C6855DD5C8FAAFF8FD1267DE6F2DBE5C
                     3EB1881F49B290AADDB285A646BA9314658CC5205AAC59625951F17FBC1E7AD79FF88B3B482A432B7E20444B0203010001 : 0 unused bit(s)
                  }
                  [3] {
                     SEQUENCE {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2. 5.29.15 (keyUsage)
                           OCTETSTRING 030204F0
                        }
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.37 (extKeyUsage)
                           BOOLEAN TRUE
                           OCTETSTRING 302006082B0601050507030406082B06010505070302060A2B0601040182370A030C
                        }
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.14 (subjectKeyIdentifier)
                           OCTETSTRING 0414C7058A12A4B5B73EF4E5876C34B9BB32155E9691
                        }
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.29.35 (authorityKeyIdentifier)
                           OCTETSTRING 301680146AE7AB14AAE8B4C0A89E189D8168B1199FFB25B0
                        }
                     }
                  }
               }
               SEQUENCE {
                  OBJECTIDENTIFIER 1.2.840.113549.1.1.5 (sha1WithRSAEncryption)
                  NULL 
               }
               BITSTRING 0x2007EFBF72C4EDB88FB4036AB8F90E1684897FB5C50E3117CF809DB1FBC1C68BCF3F9C34517621552930E9F
               3B739F54CE081C1047067C50CAE0780B244CB183F0E6867BCEBAA95758F7C18465BAD963070CA630999548687270AD6DE3
               6266A856453B5032259727F3E464360C2AAEC709EF70F13F5D66649ECFE7A5219D12740 : 0 unused bit(s)
            }
         }
         SET {
            SEQUENCE {
               INTEGER 0x01 (1 decimal)
               SEQUENCE {
                  SEQUENCE {
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2. 5.4.3 (commonName)
                           UTF8String 'Test CA'
                        }
                     }
                     SET {
                        SEQUENCE {
                           OBJECTIDENTIFIER 2.5.4.10 (organizationName)
                           UTF8String 'Test'
                        }
                     }
                  }
                  INTEGER 0x00D901B8B82F74CA0E8D84485A2265E1C3
               }
               SEQUENCE {
                  OBJECTIDENTIFIER 1.3.14.3.2.26 (id_sha1)
                  NULL 
               }
               [0] {
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.9.3 (contentType)
                     SET {
                        OBJECTIDENTIFIER 1.2.840.113549.1.7.1 (data)
                     }
                  }
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.9.5 (signingTime)
                     SET {
                        UTCTime '150429124539Z'
                     }
                  }
                  SEQUENCE {
                     OBJECTIDENTIFIER 1. 2.840.113549.1.9.4 (messageDigest)
                     SET {
                        OCTETSTRING F21FA6C3A1A5756D74B11C65B7D38F7EB9F458B5
                     }
                  }
               }
               SEQUENCE {
                  OBJECTIDENTIFIER 1.2.840.113549.1.1.1 (rsaEncryption)
                  NULL 
               }
               OCTETSTRING 21D1762506C25894B98E6BD3BB11566719AEBF642B7A4541494C45F181880D936ABC28774BA575C53CC
               1CB9551ABA21359FD3FA9013DE4242802674A1C304B2601183EA8015840EEF0D0D0312E361088725A255A869EEC394C
               826712F684E0BA22806BD14404EA1DD80601A8C1E6598F1CCF907EE2891FB58683EEEF121D2312
            }
         }
      }
   }
}


Этот пример отличается от предыдущего наличием дополнительного блока:

[0] {
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.9.3 (contentType)
                     SET {
                        OBJECTIDENTIFIER 1.2.840. 113549.1.7.1 (data)
                     }
                  }
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.9.5 (signingTime)
                     SET {
                        UTCTime '150429124539Z'
                     }
                  }
                  SEQUENCE {
                     OBJECTIDENTIFIER 1.2.840.113549.1.9.4 (messageDigest)
                     SET {
                        OCTETSTRING F21FA6C3A1A5756D74B11C65B7D38F7EB9F458B5
                     }
                  }
               }


Именно в нем содержатся SignedAttributes. Помимо двух обязательных атрибутов при подписи был использован атрибут signedTime, который хранит время подписи.

Выводы


Таким образом стандартный p7s файл представляет собой нечто гораздо большее, чем сведения об электронной подписи и открытом ключе подписанта. В нем содержится сложная структура данных, представленная в ASN. 1 формате и имеющая ряд обязательных полей, позволяющих получить сведения о подписавшей стороне. А также несколько опциональных полей, которые используются при вычислении итоговой подписи.

Основные понятия синтаксиса криптографических сообщений PKCS \#7 — Win32 apps





Twitter




LinkedIn




Facebook




Адрес электронной почты










  • Статья

  • Чтение занимает 2 мин

Функции сообщений CryptoAPI соответствуют стандарту PKCS #7Cryptographic Message Syntax (CMS). Разработчики должны быть знакомы с этой спецификацией, чтобы наиболее эффективно использовать низкоуровневые функции сообщений. Здесь выделено несколько определений.

Стандарт PKCS #7 описывает общий синтаксис для данных, которые могут применять к нему криптографию , например цифровые подписи и цифровые конверты. Синтаксис допускает рекурсию, так что, например, один конверт может быть вложен в другой, или одна сторона может подписать цифровые данные, которые уже были помещены в конверт. Он также позволяет выполнять проверку подлинности произвольных атрибутов, таких как время подписывания, вместе с содержимым сообщения. Кроме того, он предоставляет другие атрибуты, такие как контрназначение, для связи с сигнатурой.

Тип данных, содержащихся в сообщении PKCS #7, называется его типом контента. Существует два класса типов контента: Base и Enhanced.

  • Базовые типы контента содержат только данные без усовершенствований шифрования. В настоящее время в этом классе существует только один тип контента— тип контента данных.
  • Расширенные типы контента содержат данные определенного типа (возможно, зашифрованные) и другие усовершенствования шифрования (например, хэши или сигнатуры).

Содержимое в классе Enhanced использует инкапсуляцию, что приводит к возникновению условий внешнего содержимого (одного, содержащего усовершенствования) и внутреннего содержимого (который обновляется). Например, расширенный класс может содержать тип контента данных (базовый класс), содержащий сигнатуру, включенную в него. В этом случае тип контента данных — это внутреннее содержимое , сочетание типа контента данных и сигнатуры формирует внешнее содержимое.

Ниже приведены типы контента, определенные в стандарте PKCS #7.

Тип содержимогоОписание
ДанныеСтрока октета (BYTE).
Подписанные данныеСодержимое любого типа и хэши зашифрованных сообщений (дайджесты) содержимого для нуля или нескольких подписчиков.
Конвертированные данныеЗашифрованное содержимое любого типа и зашифрованные ключи шифрования содержимого для одного или нескольких получателей. Сочетание зашифрованного содержимого и зашифрованного ключа шифрования содержимого для получателя — это цифровой конверт для этого получателя.
Подписанные и конвертированные данныеЗашифрованное содержимое любого типа, зашифрованные ключи шифрования содержимого для одного или нескольких получателей и двукратно зашифрованные дайджесты сообщений для одного или нескольких подписчиков. Двойное шифрование состоит из шифрования с закрытым ключом подписи, за которым следует шифрование с ключом шифрования содержимого.
Дайджестированные данныеСодержимое любого типа и хэша сообщения (дайджеста) содержимого.
Зашифрованные данныеЗашифрованное содержимое любого типа. В отличие от типа содержимого конвертированных данных, тип содержимого зашифрованных данных не имеет ни получателей, ни зашифрованных ключей шифрования содержимого. Предполагается, что ключи управляются другими средствами.

 

Примечание

В спецификации PKCS #7 термины дайджест и дайджест ссылаются на значение, полученное при применении хэш-алгоритма к данным. В этой документации используются хэш и хэшированные термины для той же цели. Например, тип данных, используемый с низкоуровневыми функциями сообщений , называется хэшированные, а не хэшированные. В этой документации два набора терминов могут использоваться взаимозаменяемо.

 

 

 






[PDF] Расширение ограничений содержимого для синтаксиса криптографических сообщений (CMS)
title={Расширение ограничений содержимого синтаксиса криптографических сообщений (CMS)},
автор = {Расс Хаусли, Сэм Эшмор и Карл Уоллес},
журнал={RFC},
год = {2010},
объем = {6010},
страницы={1-38}
}

  • Р. Хаусли, С. Эшмор, К. Уоллес
  • Опубликовано 1 сентября 2010 г.
  • Информатика
  • RFC

Этот документ определяет синтаксис и семантику для криптографических
Расширение ограничений содержимого синтаксиса сообщений (CMS). Это расширение
используется для определения того, подходит ли открытый ключ для использования в
обработка защищенного контента. В частности, содержание CMS
расширение ограничений является частью решения об авторизации; это
используется при проверке цифровой подписи на контенте CMS SignedData
или проверка кода аутентификации сообщения (MAC) на CMS
Содержимое AuthenticatedData… 

View via Publisher

rfc-editor.org

Algorithms for Cryptographic Message Syntax (CMS) Encrypted Key Package Content Type

  • S. Turner
  • Computer Science, Mathematics

    RFC

  • 2010

This document описывает правила использования нескольких
криптографические алгоритмы с синтаксисом криптографических сообщений (CMS)
Тип содержимого пакета зашифрованных ключей. В частности, он включает…

Suite B Profile of Certificate Management over CMS

  • Лидия Зиглар, С. Тернер, Майкл А. Пек
  • Информатика

    RFC

  • 2011

В этом документе определяется профиль управления сертификатами по протоколу CMS (CMC) для управления протоколом Suite Management over CMS (CMC). 509 сертификатов открытых ключей.

Реестр идентификаторов объектов для рабочей группы по безопасности почты S/MIME

  • Р. Хаусли
  • Информатика

    RFC

  • 2014

В этом документе описываются идентификаторы объектов, которые были назначены в этой предоставленной дуге, передается управление этой дугой IANA и устанавливаются политики распределения IANA для любых будущих назначений в рамках этой дуги.

Реестр идентификаторов объектов для рабочей группы PKIX

  • Р. Хаусли
  • Информатика

    RFC

  • 2014

IANA и устанавливает политику распределения IANA для любых будущих назначений в рамках этой дуги.

Datenschutzüberraschungen durch Authentisierung und Verschlüsselung

  • J. Brauckmann
  • Political Science, Computer Science

    Datenschutz und Datensicherheit — DuD

  • 2015

ZusammenfassungSichere Verschlüsselungs- and angemessene Authentisierungsverfahren sind mehr denn je Voraussetzung für the Nutzung des Интернет для надежной связи в Netzwerken.

Практичное и безопасное управление якорями доверия и их использование

  • C. Wallace, G. Beier
  • Информатика, бизнес

    IDTRUST ’10

  • 2010

Выявляются проблемы с существующими механизмами, обсуждаются некоторые новые стандарты и интегрируется с ними решение. описан.

Устойчивые к взлому среды электронные подписи в электронном правительстве: опыт Австрии

  • Х. Лейтольд, Р. Пош, Т. Рёсслер
  • Информатика

    SEC

  • 2009

Обсуждается практический опыт Австрии, полученный с электронными подписями и электронными документами в электронном правительстве, и предполагается, что электронные документы должны будут сосуществовать с традиционными бумажными документами в течение нескольких лет, если не десятилетий.

ПОКАЗАНЫ 1–10 ИЗ 22 ССЫЛОК

СОРТИРОВАТЬ ПОРелевантности Наиболее влиятельные документыНедавность

Использование синтаксиса криптографических сообщений (CMS) для защиты пакетов встроенного ПО

  • R. Housley
  • Информатика

    RFC

  • 2005

В этом документе описывается использование синтаксиса криптографических сообщений.
(CMS) для защиты пакетов прошивки, которые предоставляют объектный код для одного
или более компонентов аппаратного модуля. CMS указан в RFC…

Защита множественного содержимого с помощью синтаксиса криптографических сообщений (CMS)

  • R. Housley
  • Информатика

    RFC

  • 2005

В этом документе описывается соглашение об использовании криптографического
Синтаксис сообщений (CMS) для защиты коллекции контента. При желании,
атрибуты могут быть связаны с содержимым. [Standards-Track]

Несколько подписей при синтаксисе криптографических сообщений (CMS)

  • S. Turner, J. Schaad
  • Компьютерная наука

    RFC

  • 2010

Компрессионный содержимый ЦМС)

  • Peter C. Gutmann
  • Информатика

    RFC

  • 2002

избыточности данных, которая может помочь злоумышленнику, ускоряя обработку за счет уменьшения объема данных, подлежащих обработке на последующих этапах, и уменьшения общего размера сообщения.

Синтаксис криптографических сообщений (CMS)

  • Р. Хаусли
  • Информатика

    RFC

  • 2009

В этом документе описывается синтаксис криптографических сообщений (CMS). Этот синтаксис используется для цифровой подписи, обработки, проверки подлинности или шифрования произвольного содержимого сообщения.

Новые модули ASN.1 для синтаксиса криптографических сообщений (CMS) и S/MIME0004

Формат синтаксиса криптографических сообщений (CMS) и многие связанные с ним форматы выражаются с использованием ASN. 1.1, который является изменением синтаксиса для соответствия версии AsN.2 2002 года, выпущенной в 2002 году.

Новые модули ASN.1 для инфраструктуры открытых ключей с использованием X.509 (PKIX)

  • P. Hoffman, J. Schaad
  • Информатика

    RFC

  • 2010
  • 7 Инфраструктура открытого ключа Xfra.5 Формат сертификата (PKIX) и многие связанные форматы выражаются с использованием ASN.1.1, который обновлен для соответствия версии AsN.2 2002 г., самая последняя версия которой была выпущена в 2002 г.

    Сертификат инфраструктуры открытых ключей Internet X.509 и список отзыва сертификатов (CRL) Профиль

    • Р. Хаусли, У. Полк, У. Форд, Д. Соло
    • Информатика

      RFC

      • Подробно описан формат сертификата X.509 v3 с дополнительной информацией о формате и семантике форм имен Интернета, а также описаны стандартные расширения сертификатов и определены два расширения для Интернета.

        Обновление Enhanced Security Services (ESS): Добавление CertID Algorithm Agility
        2634), структура для криптографической привязки сертификата к
        введено использование в валидации с подписью; это…

        Формат привязки доверия

        • Р. Хаусли, С. Эшмор, К. Уоллес
        • Информатика

          RFC

        • 2010

        Структуры, определенные в этом документе, предназначены для удовлетворения требований к формату, определенных в Требованиях к управлению якорями доверия, и для использования в контексте Протокола управления якорями доверия (TAMP). ).

        Анатомия подписанных сообщений CMS/PKCS #7

        Анатомия подписанных сообщений CMS/PKCS #7


        CMS (синтаксис криптографических сообщений) и PKCS #7
        являются стандартами, которые определяют синтаксис на основе ASN.1 для инкапсуляции криптографических сообщений, цифровых подписей, обернутых данных,
        со связанным содержимым, атрибутами и сертификатами.
        Подписанное сообщение CMS всегда содержит цифровую подпись (зашифрованный хэш), информацию о
        подписывающий(ие), которым обычно является SubjectName эмитента сертификата подписи, и
        Поле Серийный номер сертификата подписывающей стороны.
        Опционально подписанное сообщение может содержать фактические подписанные данные, сертификаты и дополнительные данные.
        аутентифицированные атрибуты.

        Двоичный шестнадцатеричный дисплей для типичного подписанного сообщения CMS/PKCS #7 показан ниже с включенным содержимым,
        сертификат подписавшего, но без аутентифицированных атрибутов.
        Фактическая «цифровая подпись» формируется путем шифрования отформатированного
        стандартный
        Блок подписи типа 1,
        который содержит хэш
        данных, покрываемых подписью и спецификатором алгоритма хеширования. Блок подписи шифруется с помощью
        закрытый ключ RSA, связанный с сертификатом подписавшего.
        В этом простом случае подпись
        представляет собой зашифрованный хэш встроенного контента, в данном случае — простую строку.
        Если включены аутентифицированные атрибуты (например, время подписания и т. д.), то
        хеш-значение охватывает содержимое, а также указанные аутентифицированные атрибуты.
        На дисплее используется цветовая кодировка для выделения определенных разделов данных.
        Разделы, не выделенные (черным цветом), являются спецификаторами ASN.1 и другими атрибутами, алгоритмами.
        и т. д.

        • встроенное содержимое (включая CR/LF)
        • светло-синий: сертификат подписывающей стороны
        • темно-синий: большой двоичный объект открытого ключа подписывающей стороны в сертификате (формат RSAPublicKey)
        • темно-красный P1 CS подпись (зашифрованный хеш): 128 байт для 1024-битного ключа RSA

        0000 30 82 03 AA 06 09 2A 86 48 86 F7 0D 01 07 02 A0 0.....*.H.......
        0010 82 03 9B 30 82 03 97 02 01 01 31 0B 30 09 06 05 ...0......1,0...
        0020 2В 0Е 03 02 1А 05 00 30 1Е 06 092A 86 48 86 F7 +......0...*.H..
        0030 0D 01 07 01 A0 11 04 0F 4D 69 74 63 68 20 47 61 ........ Митч Га
        0040 6C 6C 61 6E 74 0D 0A A0 82 02 48 30 82 02 44 30 llant. ....H0..D0
        0050 82 01 AD 02 04 3B 49 FD BD 30 0D 06 09 2A 86 48 .....;I..0...*.H
        0060 86 F7 0D 01 01 04 05 00 30 69 31 0B 30 09 06 03 ........0i1.0...
        0070 55 04 06 13 02 43 41 31 0B 30 09 06 03 55 04 08 U....CA1.0...U..
        0080 13 02 4F 4E 31 0F 30 0D 06 03 55 04 07 13 06 4F ..ON1.0...U....O
        0090 74 74 61 77 61 31 14 30 12 06 03 55 04 0A 13 0B ttawa1.0...U....
        00a0 4A 61 76 61 53 63 6965 6E 63 65 31 0D 30 0B 06 JavaScience1.0..
        00b0 03 55 04 0B 13 04 48 6F 6D 65 31 17 30 15 06 03 .U....Home1.0...
        00c0 55 04 03 13 0E 4D 69 63 68 65 6C 20 47 61 6C 6C U.... Мишель Галль
        00d0 61 6E 74 30 1E 17 0D 30 31 30 37 30 39 31 38 35 ant0...010709185
        00e0 33 34 39 5A 17 0D 30 33 30 36 30 39 31 38 35 33 349Z..0306091853
        00f0 34 39 5A 30 69 31 0B 30 09 06 03 55 04 06 13 02 49Z0i1.0...U....
        0100 43 41 31 0B 30 09 06 03 55 04 08 13 02 4F 4E 31 CA1.0...U....ON1
        0110 0F 30 0D 06 03 55 04 07 13 06 4F 74 74 61 77 61 .0...U....Оттава
        0120 31 14 30 12 06 03 55 04 0A 13 0B 4A 61 76 61 53 1.0...U....JavaS
        0130 63 6965 6E 63 65 31 0D 30 0B 06 03 55 04 0B 13 cience1. 0...U...
        0140 04 48 6F 6D 65 31 17 30 15 06 03 55 04 03 13 0E .Home1.0...U....
        0150 4D 69 63 68 65 6C 20 47 61 6C 6C 61 6E 74 30 81 Мишель Галлан0.
        0160 9F 30 0D 06 09 2A 86 48 86 F7 0D 01 01 01 05 00 .0...*.H........
        0170 03 81 8D 00  30 81 89 02 81 81 00 B9 12 F5 CE D7 ......0...........
        0180 BA 74 C4 62 4E 9F 41 E6 85 90 2B 47 36 AF 86 B5 .t.bN.A...+G6...
        0190 5C 74 31 F4 45 A5 9A BA 52 D7 FE EC 1C 94 C7 5D \t1.E...R......]
        01a0 85 8А Е6 4В 9Д 81 1С 80 61 С6 Д1 5В 53 86 В3 5С ...К....а..[С..\
        01b0 E0 41 D1 E1 E5 73 F0 75 52 C0 A7 73 05 6B AC E6 .A...s.uR..s.k..
        01c0 39 8A 41 55 14 D9 CA ED 86 1F EE 4D 0C 46 91 2F 9.AU.......M.F./
        01d0 BF 7D 50 75 11 8D 02 B3 C7 D8 BD 57 CB 42 49 92 .}Pu.......W.BI.
        01e0 B3 26 9A 07 A3 5A B2 63 26 BA D8 E6 2C 83 91 B0 .&...Z.c&...,...
        01f0 3D 11 81 10 33 7A A8 C0 6A 0B 8D 02 03 01 00 01 =...3z..j....... 
        0200 30 0D 06 09 2A 86 48 86 F7 0D 01 01 04 05 00 03 0...*.H.........
        0210 81 81 00 2D 7B 1E 63 8A 86 4E 24 E9.....
        0290 CA D2 7A 31 82 01 17 30 82 01 13 02 01 01 30 71 . .z1...0......0q
        02a0 30 69 31 0B 30 09 06 03 55 04 06 13 02 43 41 31 0i1.0...U....CA1
        02b0 0B 30 09 06 03 55 04 08 13 02 4F 4E 31 0F 30 0D .0...U....ON1.0.
        02c0 06 03 55 04 07 13 06 4F 74 74 61 77 61 31 14 30 ..U....Оттава1.0
        02d0 12 06 03 55 04 0A 13 0B 4A 61 76 61 53 63 69 65 ...U....JavaScie
        02e0 6E 63 65 31 0D 30 0B 06 03 55 04 0B 13 04 48 6F nce1.0...U....Ho
        02f0 6D 65 31 17 30 15 06 03 55 04 03 13 0E 4D 6963 me1.0...U....Микрофон
        0300 68 65 6C 20 47 61 6C 6C 61 6E 74 02 04 3B 49 FD хел Галант...;I.
        0310 BD 30 09 06 05 2B 0E 03 02 1A 05 00 30 0D 06 09 .0...+......0...
        0320 2A 86 48 86 F7 0D 01 01 01 05 00 04 81 80  AB 8E  *.H.........  ....
        0330 66 F8 71 F4 47 EC 96 2F 1D AA 48 7A 86 45 76 D5 f.q.G../..Hz.Ev.
        0340 CB 3E 31 CC 34 56 38 9C 5C 60 B7 3E D9 A6 89 D9 .>1.4V8.\`.>....
        0350 E4 FC FF B2 E8 2B 41 C3 50 29 A2 F9 59 F1 19 00 .....+A.P)..Y...
        0360 26 4D 30 FC AB 37 F1 62 BC F4 86 3E 55 3B 84 7E &M0..7.b...>U;.~
        0370 A6 11 27 01 A7 EB A8 46 A1 E8 08 1D C2 AF 95 0В ..'. ...F........
        0380 25 2B 46 52 A8 99 6B E3 D9 65 24 CA B8 39 5F 89 %+FR..k..e$..9_.
        0390 6C 84 C1 AD 83 6F B5 9E 44 37 6F D5 3D 71 82 39 л....о..D7o.=q.9
        03a0 22 EF 09 2F 92 8B 25 AE 9A BB 41 E7 1D EE "../..%...A... 
         

        Для сравнения, минимальное подписанное сообщение CMS/PKCS #7 (подписанное другим сертификатом и с другим содержимым)
        который не включает сертификаты, показан ниже:

        0000 30 82 01 FE 06 09 2A 86 48 86 F7 0D 01 07 02 A0 0.....*.H.......
        0010 82 01 ЭФ 30 82 01 ЭБ 02 01 01 31 0F 30 0D 06 09...0......1,0...
        0020 2A 86 48 86 F7 0D 01 01 05 05 00 30 45 06 09 2A *.H........0E..*
        0030 86 48 86 F7 0D 01 07 01 A0 38 04 36 54 68 65 20 .H .......8.6The
        0040 56 65 6E 74 75 72 65 73 20 61 72 65 20 74 68 65
        0050 20 62 65 73 74 20 73 75 72 66 2D 69 6E 73 74 72 лучший серф-инстр
        0060 75 6D 65 6E 74 61 6C 20 62 61 6E 64 20 65 76 65 ментальная полоса накануне
        0070 72 21 31 82 01 8C 30 82 01 88 02 01 01 30 81 E1 r!1...0......0..
        0080 30 81 СС 31 17 30 15 06 03 55 04 0А 13 0Е 56 65 0. .1.0...У....Ве
        0090 72 69 53 69 67 6E 2C 20 49 6E 63 2E 31 1F 30 1D riSign, Inc.1.0.
        00a0 06 03 55 04 0B 13 16 56 65 72 69 53 69 67 6E 20 ..U....VeriSign
        00b0 54 72 75 73 74 20 4E 65 74 77 6F 72 6B 31 46 30 Trust Network1F0
        00c0 44 06 03 55 04 0B 13 3D 77 77 77 2E 76 65 72 69 D..U...=www.veri
        00d0 73 69 67 6E 2E 63 6F 6D 2F 72 65 70 6F 73 69 74 sign.com/reposit
        00e0 6F 72 79 2F 52 50 41 20 49 6E 63 6F 72 70 2E 20 ory/RPA Incorp.
        00f0 42 79 20 52 65 66 2E 2C 4C 49 41 42 2E 4C 54 44 По ссылке,LIAB.LTD
        0100 28 63 2939 38 31 48 30 46 06 03 55 04 03 13 3F (с)981H0F..U...?
        0110 56 65 72 69 53 69 67 6E 20 43 6C 61 73 73 20 31 VeriSign Класс 1
        0120 20 43 41 20 49 6E 64 69 76 69 64 75 61 6C 20 53 CA Индивидуальный S
        0130 75 62 73 63 72 69 62 65 72 2D 50 65 72 73 6F 6E абонент-лицо
        0140 61 20 4E 6F 74 20 56 61 6C 69 64 61 74 65 64 02 а Не утвержден.
        0150 10 01 47 8A E1 E3 BF E9 99 FB C0 AA 9D 92 D9 ED ..G.............
        0160 38 30 0D 06 09 2A 86 48 86 F7 0D 01 01 05 05 00 80...*.H........
        0170 30 0Д 06 092A 86 48 86 F7 0D 01 01 01 05 00 04 0. ..*.H.........
        0180 81 80  08 4F 8F C8 0E 15 62 91 4F F8 A7 38 95 88  ..  .O....b.O..8..
        0190 C3 83 90 09 D5 AE B3 3D BD 22 2D FC AE 18 91 CF .......=."-.....
        01a0 DC CC F6 B8 7B 18 8B 90 B6 FC D3 A5 2A 00 12 7F ....{.......*...
        01b0 30 CC B1 2E 1F 32 77 1C 10 F2 FF C8 E5 16 D2 16 0....2w.........
        01c0 E2 D4 DD F2 32 B9 87 46 B2 F1 08 EC 26 31 85 21 ....2..F....&1.!
        01d0 56 75 71 EA 91 4D 60 F1 82 B6 9D 3F 21 4D E1 59Вук..М`....?!М.Й
        01e0 3C 1D D1 B2 10 E6 90 EE B2 09 F6 11 8C 21 5B 38 
         

        Дамп ASN.1 для второго минимального подписанного сообщения показан ниже:

         0 30 510: ПОСЛЕДОВАТЕЛЬНОСТЬ {
        4 06 9: ИДЕНТИФИКАТОР ОБЪЕКТА подписанные данные (1 2 840 113549 1 7 2)
        15 А0 495: [0] {
        19 30 491: ПОСЛЕДОВАТЕЛЬНОСТЬ {
        23 02 1: ЦЕЛОЕ 1
        26 31 15: УСТАНОВИТЬ {
        28 30 13: ПОСЛЕДОВАТЕЛЬНОСТЬ {
        30 06 9: ИДЕНТИФИКАТОР ОБЪЕКТА
        : sha1withRSAEncryption (1 2 840 1135491 1 5)
        41 05 0: НУЛЬ
        : }
        : }
        43 30 69: ПОСЛЕДОВАТЕЛЬНОСТЬ {
        45 06 9: ИДЕНТИФИКАТОР ОБЪЕКТА (1 2 840 113549 1 7 1)
        56 А0 56: [0] {
        58 04 54: СТРОКА ОКТЕТОВ
        : «The Ventures — лучшая инструментальная группа для серфинга»
        : ' Когда-либо!'
        : }
        : }
        114 31 396: НАБОР {
        118 30 392: ПОСЛЕДОВАТЕЛЬНОСТЬ {
        122 02 1: ЦЕЛОЕ 1
        125 30 225: ПОСЛЕДОВАТЕЛЬНОСТЬ {
        128 30 204: ПОСЛЕДОВАТЕЛЬНОСТЬ {
        131 31 23: НАБОР {
        133 30 21: ПОСЛЕДОВАТЕЛЬНОСТЬ {
        135 06 3: ИДЕНТИФИКАТОР ОБЪЕКТА имя_организации (2 5 4 10)
        140 13 14: PrintableString 'VeriSign, Inc.