02.05.2006 11:23:11Длина ЭЦП Ответов: 3
Виктор
Господа, если не сложно поясните, пожалуйста, следующий вопрос:

Есть две компании, которые пытаются научиться проверять ЭЦП друг у друга с помощью своих собственных библиотечек.
Т.е. мы имеем один и тот же файлик для подписи. Вычисляем ЭЦП и сохраняем в файл. И сертификат также сохраняем в файл.
Результатами меняемся. Подпись не валидируется :)
Т.е. либо что-то с сертификатом, либо с подписью :)
1. Сертификаты.
Я использую обычный сертификат защиты электронной почты. Коллеги используют сертификат, полученный из какого-то другого источника.
У каждого из нас своя собственная проверка конечно же проходит. Сертификаты нормально просматриваются проводником.
Мне кажется дело вовсе не в сертификате, но на всякий случай упомянул об этом.
2. ЭЦП.
Моя ЭЦП получается 378 байт (или 512 в Base64). У коллег 437 в Der.
Может ли вообще биться ЭЦП, если длина этих ЭЦП разная? Мне кажется да, т.к. наименования части полей однозначно различаются (организация, например).

Т.е. если разная длина, то отличается состав полей. Могут ли дополнительные поля влиять на проверку ЭЦП, если я их при проверке не контролирую?
Например, я добавляю только время. Коллеги утверждают, что делают тоже самое.
Вывел в файл содержимое ЭЦП с помощью asn.exe. Яснее не стало :)

Не подскажите, в какую сторону думать?

С уважением, Виктор


P.S.
Моя ЭЦП (asn.exe)

0 30 374: SEQUENCE {
4 06 9: OBJECT IDENTIFIER signedData (1 2 840 113549 1 7 2)
15 A0 359: [0] {
19 30 355: SEQUENCE {
23 02 1: INTEGER 1
26 31 12: SET {
28 30 10: SEQUENCE {
30 06 6: OBJECT IDENTIFIER szOID_CP_GOST_R3411 (1 2 643 2 2 9)
38 05 0: NULL
: }
: }
40 30 11: SEQUENCE {
42 06 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
: }
53 31 321: SET {
57 30 317: SEQUENCE {
61 02 1: INTEGER 1
64 30 115: SEQUENCE {
66 30 101: SEQUENCE {
68 31 32: SET {
70 30 30: SEQUENCE {
72 06 9: OBJECT IDENTIFIER
: emailAddress (1 2 840 113549 1 9 1)
83 16 17: IA5String 'info@cryptopro.ru'
: }
: }
102 31 11: SET {
104 30 9: SEQUENCE {
106 06 3: OBJECT IDENTIFIER countryName (2 5 4 6)
111 13 2: PrintableString 'RU'
: }
: }
115 31 19: SET {
117 30 17: SEQUENCE {
119 06 3: OBJECT IDENTIFIER organizationName (2 5 4 10)
124 13 10: PrintableString 'CRYPTO-PRO'
: }
: }
136 31 31: SET {
138 30 29: SEQUENCE {
140 06 3: OBJECT IDENTIFIER commonName (2 5 4 3)
145 13 22: PrintableString 'Test Center CRYPTO-PRO'
: }
: }
: }
169 02 10: INTEGER
: 7B 9D DE 49 00 01 00 00 09 53
: }
181 30 10: SEQUENCE {
183 06 6: OBJECT IDENTIFIER szOID_CP_GOST_R3411 (1 2 643 2 2 9)
191 05 0: NULL
: }
193 A0 105: [0] {
195 30 24: SEQUENCE {
197 06 9: OBJECT IDENTIFIER
: contentType (1 2 840 113549 1 9 3)
208 31 11: SET {
210 06 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
: }
: }
221 30 28: SEQUENCE {
223 06 9: OBJECT IDENTIFIER
: signingTime (1 2 840 113549 1 9 5)
234 31 15: SET {
236 17 13: UTCTime '060425111314Z'
: }
: }
251 30 47: SEQUENCE {
253 06 9: OBJECT IDENTIFIER
: messageDigest (1 2 840 113549 1 9 4)
264 31 34: SET {
266 04 32: OCTET STRING
: EE 67 30 36 96 D2 05 DD D2 B2 36 3E 8E 01 B4 B7
: 19 9A 80 95 7D 94 D7 67 8E AA D3 FC 83 4C 5A 27
: }
: }
: }
300 30 10: SEQUENCE {
302 06 6: OBJECT IDENTIFIER
: szOID_CP_GOST_R3410EL (1 2 643 2 2 19)
310 05 0: NULL
: }
312 04 64: OCTET STRING
: 56 65 EA F1 00 31 88 AC DE 04 91 4E 33 28 79 50
: 0A 65 63 3E D9 72 B2 29 22 4D F9 80 DD 89 C7 7F
: 5E 3E 26 B4 3C 21 C4 D4 23 2E 3D 15 22 42 69 BD
: F6 18 14 E6 7B 71 F0 93 30 C4 1A B0 75 7E D7 AF
: }
: }
: }
: }
: }


ЭЦП коллег:

0 30 415: SEQUENCE {
4 06 9: OBJECT IDENTIFIER signedData (1 2 840 113549 1 7 2)
15 A0 400: [0] {
19 30 396: SEQUENCE {
23 02 1: INTEGER 1
26 31 12: SET {
28 30 10: SEQUENCE {
30 06 6: OBJECT IDENTIFIER szOID_CP_GOST_R3411 (1 2 643 2 2 9)
38 05 0: NULL
: }
: }
40 30 11: SEQUENCE {
42 06 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
: }
53 31 362: SET {
57 30 358: SEQUENCE {
61 02 1: INTEGER 1
64 30 155: SEQUENCE {
67 30 140: SEQUENCE {
70 31 38: SET {
72 30 36: SEQUENCE {
74 06 9: OBJECT IDENTIFIER
: emailAddress (1 2 840 113549 1 9 1)
85 16 23: IA5String 'ddunaev@mail.customs.ru'
: }
: }
110 31 11: SET {
112 30 9: SEQUENCE {
114 06 3: OBJECT IDENTIFIER countryName (2 5 4 6)
119 13 2: PrintableString 'RU'
: }
: }
123 31 15: SET {
125 30 13: SEQUENCE {
127 06 3: OBJECT IDENTIFIER localityName (2 5 4 7)
132 13 6: PrintableString 'Moscow'
: }
: }
140 31 12: SET {
142 30 10: SEQUENCE {
144 06 3: OBJECT IDENTIFIER organizationName (2 5 4 10)
149 13 3: PrintableString 'GTK'
: }
: }
154 31 34: SET {
156 30 32: SEQUENCE {
158 06 3: OBJECT IDENTIFIER
: organizationalUnitName (2 5 4 11)
163 13 25: PrintableString 'Information Security Dep.'
: }
: }
190 31 18: SET {
192 30 16: SEQUENCE {
194 06 3: OBJECT IDENTIFIER commonName (2 5 4 3)
199 13 9: PrintableString 'Custom CA'
: }
: }
: }
210 02 10: INTEGER
: 72 2D BF E3 00 00 00 00 07 E8
: }
222 30 10: SEQUENCE {
224 06 6: OBJECT IDENTIFIER szOID_CP_GOST_R3411 (1 2 643 2 2 9)
232 05 0: NULL
: }
234 A0 105: [0] {
236 30 24: SEQUENCE {
238 06 9: OBJECT IDENTIFIER
: contentType (1 2 840 113549 1 9 3)
249 31 11: SET {
251 06 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
: }
: }
262 30 28: SEQUENCE {
264 06 9: OBJECT IDENTIFIER
: signingTime (1 2 840 113549 1 9 5)
275 31 15: SET {
277 17 13: UTCTime '060428151832Z'
: }
: }
292 30 47: SEQUENCE {
294 06 9: OBJECT IDENTIFIER
: messageDigest (1 2 840 113549 1 9 4)
305 31 34: SET {
307 04 32: OCTET STRING
: D4 C2 05 9E 33 A8 17 65 5D 26 5F 42 83 2E 20 19
: 07 38 63 C9 EB 4D 5E 83 A4 A1 08 84 D6 4F 6A 90
: }
: }
: }
341 30 10: SEQUENCE {
343 06 6: OBJECT IDENTIFIER
: szOID_CP_GOST_R3410EL (1 2 643 2 2 19)
351 05 0: NULL
: }
353 04 64: OCTET STRING
: 07 98 E9 B1 13 0A 62 51 88 8C 27 44 DC 27 B8 EA
: 43 3B 94 5C 4E 89 BF 24 6C D0 1A F7 88 12 16 65
: B7 0F 7D A5 E4 14 5C 75 E1 31 21 BC D3 3F DD A8
: 94 C6 A7 6E D8 4B DF 0E B2 43 DA 02 EF F6 2A D2
: }
: }
: }
: }
: }
 
Ответы:
02.05.2006 14:22:04Kirill Sobolev
Т.к. в PKCS7 содержится информация о сертификате подписчика (издатель и серийный номер), а у Вас и ваших коллег сертификаты изданы разными ЦС, то вполне нормально что сами PKCS7 отличаются.
"Может ли вообще биться ЭЦП, если длина этих ЭЦП разная?" - не совсем понятен вопрос.
Подумайте в сторону проверки подписи допустим csptestом.
02.05.2006 15:16:52Виктор
Спасибо за пояснения!

Я установил сертификат коллег на свою машину (при этом статус у данного сертификата следующий: The issuer of this certificate could not be found.)
И при проверке ЭЦП с помощью csptest.exe получил ошибку:
Error number 80091007 (-2146889721).
The hash value is not correct.
Program terminating.
Press Enter to exit.

У моего же сертификата статус: This certificate is OK.
Проверка проходит.

Это видимо как раз то, о чем вы и говорили.
Попробую попросить коллег использовать тестовый сертификат защиты электронной почты.

Спасибо!
02.05.2006 16:17:30Kirill Sobolev
Нет, это совершенно разные ошибки. Вполне можно проверить подпись сертификатом, даже если не найден сертификат его издателя. И ошибка 80091007 говорит о том что непроверена именно криптографическая часть подписи (хэш не сошелся)