public inbox for gost@lists.stargrave.org
Atom feed
* Проблема с верификацией ЭЦП pygost
@ 2025-07-07 13:41 Богдан ветров
2025-07-07 14:03 ` Sergey Matveev
0 siblings, 1 reply; 2+ messages in thread
From: Богдан ветров @ 2025-07-07 13:41 UTC (permalink / raw)
To: gost
[-- Attachment #1: Type: text/plain, Size: 696 bytes --]
Здравствуйте. Благодарю Вас за создание библиотеки PyGost.
Я использую Вашу библиотеку, что бы проверить валидность мой открепленной ЭЦП. Но что бы я не пробовал всегда проверка равна False. У меня есть только ПДФ и SIG файлы.
Буду крайне признателен,если вы посмотрите мой код и поможете понять в чем я не прав.
Ссылка на github: https://github.com/sebastianfym/pygost_test.git
С уважением, Богдан Великородов.
[-- Attachment #2: Type: text/html, Size: 2064 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Проблема с верификацией ЭЦП pygost
2025-07-07 13:41 Проблема с верификацией ЭЦП pygost Богдан ветров
@ 2025-07-07 14:03 ` Sergey Matveev
0 siblings, 0 replies; 2+ messages in thread
From: Sergey Matveev @ 2025-07-07 14:03 UTC (permalink / raw)
To: gost
[-- Attachment #1: Type: text/plain, Size: 3929 bytes --]
Приветствую!
*** Богдан ветров [2025-07-07 16:41]:
>Буду крайне признателен,если вы посмотрите мой код и поможете понять в чем я не прав.
>Ссылка на github: https://github.com/sebastianfym/pygost_test.git
* Если что, то я совершенно не знаю как устроен и работает asn1crypto.
Не то чтобы это проблема, но с ним ничего не подскажу
* PyGOST ничего не знает про ASN.1 и он выполняет только низкоуровневые
функции чисто криптографии
--8<--# 0 [ 8a41d3c09 | main.py ]--8<--
14 curve = CURVES["id-tc26-gost-3410-12-256-paramSetA"]
--8<----------------------------------------------------------------8<--
Судя по сертификату приложенному к вашей CMS, в нём используется
publicKeyParamSet: OBJECT IDENTIFIER 1.2.643.2.2.36.0 (id_GostR3410_2001_CryptoPro_XchA_ParamSet)
а вы используете id-tc26-gost-3410-12-256-paramSetA. Это две разные
эллиптические кривые. id-tc26-gost-3410-12-256-paramSetB должна подойти.
--8<--# 1 [ 8a41d3c09 | main.py ]--8<--
35 public_key_info = certificate['tbs_certificate']['subject_public_key_info']
37 public_key_bytes = public_key_info['public_key'].native
39 pub = pub_unmarshal(public_key_bytes)
--8<----------------------------------------------------------------8<--
В ГОСТовых сертификатах хранится не сырое значение 512/1024 бит значение
ключа, а обёрнутое в ASN.1 OCTET STRING. pub_unmarshal просто преобразует
набор байт которые вы ему предоставили и не проверяет всё ли с ними корректно.
--8<--# 2 [ 8a41d3c09 | main.py ]--8<--
42 dgst = gost34112012256.new(pdf_data).digest()
44 # Читаем подпись из файла .sig в бинарном режиме
45 signer_info = signed_data['signer_infos'][0]
46 signature = signer_info['signature'].native
56 # Проверяем подпись
57 result = verify(curve, pub, dgst, signature)
--8<----------------------------------------------------------------8<--
Так проверка подписи точно не пройдёт, так как у вас современный CMS,
где подпись делается не над detached данными, а над структурой
signedAttrs из CMS (содержащей id_pkcs9_at_contentType,
id_pkcs9_at_signingTime, id_pkcs9_at_messageDigest,
id_aa_signingCertificateV2 атрибуты). Необходимо проверять подпись над
этой signedAttrs структуры закодированной в DER, без IMPLICIT ASN.1 tag.
Как это сделать asn1crypto -- понятия не имею. Есть много примеров
работы с ГОСТ CMS и сертификатами в PyDERASN проекте:
http://www.pyderasn.cypherpunks.su/ -- там же и проверка совместно с
PyGOST напротив многочисленных примеров из ТК26 рекомендаций.
Хэш PDF-ки можно проверить напротив атрибута id_pkcs9_at_messageDigest.
Возможно хэш придётся перевернуть (у нас с ГОСТовыми алгоритмами разброд
и шатание касательно endianness).
--
Sergey Matveev (http://www.stargrave.org/)
LibrePGP: 12AD 3268 9C66 0D42 6967 FD75 CB82 0563 2107 AD8A
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-07-07 14:03 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-07-07 13:41 Проблема с верификацией ЭЦП pygost Богдан ветров
2025-07-07 14:03 ` Sergey Matveev