Pull to refresh
26
Виктор Ткаченко @VicTunread⁠-⁠only

User

Send message
> Когда Плагин пройдет сертификацию ФСБ — это будет достаточной гарантией отсутствия закладок?

146 % :)
В подпись можно добавить метку времени. У двух разных подписей будет разное время. 2 платежки с одинаковым временем не принимаются.
И еще один момент. В случае подписи через браузер вы в любом случае расширяете зону доверия на сервер. Так как по факту сервер может сформировать такую страницу, которая покажет одни данные, а подпишет другие.
Да. Если CMS формируется без «signed» атрибутов. Частный случай. Хотя он и распространен.
Полученный хэш подписывается на закрытом ключе на клиенте. И вот эта подпись ГОСТ Р 34.10-2001 и сертификат уже упаковываются в CMS.
Вот base64

MIICigYJKoZIhvcNAQcCoIICezCCAncCAQExDDAKBgYqhQMCAgkFADALBgkqhkiG
9w0BBwGgggGXMIIBkzCCAUCgAwIBAgIBATAKBgYqhQMCAgMFADBUMQswCQYDVQQG
EwJSVTEPMA0GA1UEBxMGTW9zY293MSIwIAYDVQQKFBlPT08gIkdhcmFudC1QYXJr
LVRlbGVjb20iMRAwDgYDVQQDEwdUZXN0IENBMB4XDTEzMDUxNjEwNDAxNFoXDTE0
MDUxNjEwNDAxNFowETEPMA0GA1UEAxMGZ2hqZ2hqMGMwHAYGKoUDAgITMBIGByqF
AwICIwEGByqFAwICHgEDQwAEQKWEso0kuhfmcgjQn7U0MGMZO3SsF69m+gZs/Y3J
MRu84TEQjKcTp+K8jgERjAp+snZEewu1rAVwHYymTb5FE9qjPDA6MB0GA1UdJQQW
MBQGCCsGAQUFBwMCBggrBgEFBQcDBDALBgNVHQ8EBAMCAqQwDAYDVR0TAQH/BAIw
ADAKBgYqhQMCAgMFAANBAIGHGM3RtiFfIS5chlOmVfDEYxwR0gTMWfrzjB9CCVov
9vPsyRef+5t/ZXUx+2Gu3YN+P27JM/6wdjKqOPazWpwxgbswgbgCAQEwWTBUMQsw
CQYDVQQGEwJSVTEPMA0GA1UEBxMGTW9zY293MSIwIAYDVQQKFBlPT08gIkdhcmFu
dC1QYXJrLVRlbGVjb20iMRAwDgYDVQQDEwdUZXN0IENBAgEBMAoGBiqFAwICCQUA
MAoGBiqFAwICEwUABECXasydR0X+B/y8YBTDsu4BecJkdLC/52IDgEzaEv6Ju9CW
3MdzpIq3/KEZ10NA14JfvdQ+lWSZFvoblN/CS57u
В случае отсутствия атрибутов хэш не сохраняется. Он «неявно» входит в подпись.

576 10: SEQUENCE {
578 6: OBJECT IDENTIFIER GOST R 34.10-2001 (1 2 643 2 2 19)
586 0: NULL
: }
588 64: OCTET STRING
: 97 6A CC 9D 47 45 FE 07 FC BC 60 14 C3 B2 EE 01
: 79 C2 64 74 B0 BF E7 62 03 80 4C DA 12 FE 89 BB
: D0 96 DC C7 73 A4 8A B7 FC A1 19 D7 43 40 D7 82
: 5F BD D4 3E 95 64 99 16 FA 1B 94 DF C2 4B 9E EE
Потому что в некоторых проектах не настолько важна «юридическая чистота»
Фига се мелкие :) Вы лично мне сделали день :) Но в целом ваша концепция представляется верной :)
Да мы уже поняли. Ваши плагины подписывают данные без вычисления хэш-функции. На, как вы выразились, «асинхронных» ключах.
В плагине есть программная реализация хэш-функции ГОСТ Р 34.11-94. Несертифицированная.
Вот пример дампа

0: SEQUENCE {
4 9: OBJECT IDENTIFIER signedData (1 2 840 113549 1 7 2)
15 635: [0] {
19 631: SEQUENCE {
23 1: INTEGER 1
26 12: SET {
28 10: SEQUENCE {
30 6: OBJECT IDENTIFIER GOST R 34.11-94 (1 2 643 2 2 9)
38 0: NULL
: }
: }
40 11: SEQUENCE {
42 9: OBJECT IDENTIFIER data (1 2 840 113549 1 7 1)
: }
53 407: [0] {
57 403: SEQUENCE {
61 320: SEQUENCE {
65 3: [0] {
67 1: INTEGER 2
: }
70 1: INTEGER 1
73 10: SEQUENCE {
75 6: OBJECT IDENTIFIER '1 2 643 2 2 3'
83 0: NULL
: }
85 84: SEQUENCE {
87 11: SET {
89 9: SEQUENCE {
91 3: OBJECT IDENTIFIER countryName (2 5 4 6)
96 2: PrintableString 'RU'
: }
: }
100 15: SET {
102 13: SEQUENCE {
104 3: OBJECT IDENTIFIER localityName (2 5 4 7)
109 6: PrintableString 'Moscow'
: }
: }
117 34: SET {
119 32: SEQUENCE {
121 3: OBJECT IDENTIFIER organizationName (2 5 4 10)
126 25: TeletexString 'OOO «Garant-Park-Telecom»'
: }
: }
153 16: SET {
155 14: SEQUENCE {
157 3: OBJECT IDENTIFIER commonName (2 5 4 3)
162 7: PrintableString 'Test CA'
: }
: }
: }
171 30: SEQUENCE {
173 13: UTCTime 16/05/2013 10:40:14 GMT
188 13: UTCTime 16/05/2014 10:40:14 GMT
: }
203 17: SEQUENCE {
205 15: SET {
207 13: SEQUENCE {
209 3: OBJECT IDENTIFIER commonName (2 5 4 3)
214 6: PrintableString 'ghjghj'
: }
: }
: }
222 99: SEQUENCE {
224 28: SEQUENCE {
226 6: OBJECT IDENTIFIER GOST R 34.10-2001 (1 2 643 2 2 19)
234 18: SEQUENCE {
236 7: OBJECT IDENTIFIER
: id-GostR3410-2001-CryptoPro-A-ParamSet (1 2 643 2 2 35 1)
245 7: OBJECT IDENTIFIER
: id-GostR3411-94-CryptoProParamSet (1 2 643 2 2 30 1)
: }
: }
254 67: BIT STRING, encapsulates {
257 64: OCTET STRING
: A5 84 B2 8D 24 BA 17 E6 72 08 D0 9F B5 34 30 63
: 19 3B 74 AC 17 AF 66 FA 06 6C FD 8D C9 31 1B BC
: E1 31 10 8C A7 13 A7 E2 BC 8E 01 11 8C 0A 7E B2
: 76 44 7B 0B B5 AC 05 70 1D 8C A6 4D BE 45 13 DA
: }
: }
323 60: [3] {
325 58: SEQUENCE {
327 29: SEQUENCE {
329 3: OBJECT IDENTIFIER extKeyUsage (2 5 29 37)
334 22: OCTET STRING, encapsulates {
336 20: SEQUENCE {
338 8: OBJECT IDENTIFIER
: clientAuth (1 3 6 1 5 5 7 3 2)
348 8: OBJECT IDENTIFIER
: emailProtection (1 3 6 1 5 5 7 3 4)
: }
: }
: }
358 11: SEQUENCE {
360 3: OBJECT IDENTIFIER keyUsage (2 5 29 15)
365 4: OCTET STRING, encapsulates {
367 2: BIT STRING 2 unused bits
: '100101'B
: }
: }
371 12: SEQUENCE {
373 3: OBJECT IDENTIFIER basicConstraints (2 5 29 19)
378 1: BOOLEAN TRUE
381 2: OCTET STRING, encapsulates {
383 0: SEQUENCE {}
: }
: }
: }
: }
: }
385 10: SEQUENCE {
387 6: OBJECT IDENTIFIER '1 2 643 2 2 3'
395 0: NULL
: }
397 65: BIT STRING
: 81 87 18 CD D1 B6 21 5F 21 2E 5C 86 53 A6 55 F0
: C4 63 1C 11 D2 04 CC 59 FA F3 8C 1F 42 09 5A 2F
: F6 F3 EC C9 17 9F FB 9B 7F 65 75 31 FB 61 AE DD
: 83 7E 3F 6E C9 33 FE B0 76 32 AA 38 F6 B3 5A 9C
: }
: }
464 187: SET {
467 184: SEQUENCE {
470 1: INTEGER 1
473 89: SEQUENCE {
475 84: SEQUENCE {
477 11: SET {
479 9: SEQUENCE {
481 3: OBJECT IDENTIFIER countryName (2 5 4 6)
486 2: PrintableString 'RU'
: }
: }
490 15: SET {
492 13: SEQUENCE {
494 3: OBJECT IDENTIFIER localityName (2 5 4 7)
499 6: PrintableString 'Moscow'
: }
: }
507 34: SET {
509 32: SEQUENCE {
511 3: OBJECT IDENTIFIER organizationName (2 5 4 10)
516 25: TeletexString 'OOO «Garant-Park-Telecom»'
: }
: }
543 16: SET {
545 14: SEQUENCE {
547 3: OBJECT IDENTIFIER commonName (2 5 4 3)
552 7: PrintableString 'Test CA'
: }
: }
: }
561 1: INTEGER 1
: }
564 10: SEQUENCE {
566 6: OBJECT IDENTIFIER GOST R 34.11-94 (1 2 643 2 2 9)
574 0: NULL
: }
576 10: SEQUENCE {
578 6: OBJECT IDENTIFIER GOST R 34.10-2001 (1 2 643 2 2 19)
586 0: NULL
: }
588 64: OCTET STRING
: 97 6A CC 9D 47 45 FE 07 FC BC 60 14 C3 B2 EE 01
: 79 C2 64 74 B0 BF E7 62 03 80 4C DA 12 FE 89 BB
: D0 96 DC C7 73 A4 8A B7 FC A1 19 D7 43 40 D7 82
: 5F BD D4 3E 95 64 99 16 FA 1B 94 DF C2 4B 9E EE
: }
: }
: }
: }
: }
Может. Но не обязателен. В том числе и в detached. В случае необходимости атрибутов решение будет более сложным, так как там сначала хэшируются данные, потом формируется ASN1-структура атрибутов, в которую полученный хэш кладется как один из атрибутов и затем хэшируется уже эта структура. Подписывается второй хэш.
В данном решении атрибуты были не нужны.
Программное хэширование (с легитимной реализацией хэш-функции) предполагает инсталляцию СКЗИ на рабочее место пользователя.
Данное решение не претендует на универсальность.
Но имеет право на применение в проектах, в которых, грубо говоря, подпись — не подтверждение перевода денег, а согласие клиента на обслуживание в данном ЖЭКе. Это условная аналогия.
>Может быть проще было оставить приватный ключ на сервере
Проще. Но меры по защите на сервере закрытого ключа (что-то типа применения HSM) могут стоить для некоторых проектов дороже, чем использование токенов на клиенте. Соответственно кража ключа подразумевает другой уровень угроз по сравнению с подписью хэша, сформированного на сервере.
Ну так криптопровайдер считает переданные данные хэшом. Что будет, если туда передать не 32 байта (размер хэша по ГОСТ Р 34.11-94)?
Это RFC формировала группа людей, в которую входили разработчики ГОСТА 34.10-2001
Читаем RFC на ГОСТ Р 34.10-2001 www.rfc-editor.org/rfc/rfc5832.txt

6.1. Digital Signature Generation Process

It is necessary to perform the following actions (steps) according to
Algorithm I to obtain the digital signature for the message M
belonging to V_all:

Step 1 — calculate the message hash code M: H = h(M). (14)

Step 2 — calculate an integer alpha, binary representation of which
is the vector H, and determine e = alpha (mod q )

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity