Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

4 Страницы123>»
Опции
К последнему сообщению К первому непрочитанному
Offline dazent123  
#1 Оставлено : 26 июля 2025 г. 15:56:39(UTC)
dazent123

Статус: Участник

Группы: Участники
Зарегистрирован: 26.07.2025(UTC)
Сообщений: 11
Российская Федерация
Откуда: Пермь

Сказал(а) «Спасибо»: 2 раз
Добрый день, требуется формировать подпись хеша от строки json.

подпись сформированная командой "/opt/cprocsp/bin/amd64/cryptcp -sign """+ФайлЗапроса+""" """+ФайлПодписанный+"""" +" -detached -nocert -nochain -thumbprint " + ОтпечатокСертификата + " -pin "+Пароль имеет следующий вид "MIAGCSqGSIb3DQEHAqCAMIACAQExDjAMBggqhQMHAQECAgUAMIAGCSqGSIb3DQEHAQAAMYIBmzCCAZcCAQEwPjA5MSAwHgYJKoZIhvcNAQkBFhF0ZXN0QGNyeXB0b3Byby5ydTEVMBMGA1UEAwwMdGVzdG1vbmV5Ym94AgEBMAwGCCqFAwcBAQICBQCggfMwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMjUwNzI2MTI0NjI4WjAvBgkqhkiG9w0BCQQxIgQgnazDf1ryBYCx6xcmPQZZ/1ressgE+IIdsLUmQC+CklwwgYcGCyqGSIb3DQEJEAIvMXgwdjB0MHIwCgYIKoUDBwEBAgIEIKxzA/CBeQTUVpatkj88tLaD4gKn1KOgOpsSj7khxcPYMEIwPaQ7MDkxIDAeBgkqhkiG9w0BCQEWEXRlc3RAY3J5cHRvcHJvLnJ1MRUwEwYDVQQDDAx0ZXN0bW9uZXlib3gCAQEwDAYIKoUDBwEBAQEFAARAa4QkeELoHeUmCBsZp8haTEdQnsBazVyIdbRM/EhHo62Ara5QB3+QzTo8DbChU2d+e/NZqOlave9eQRY5TStopAAAAAAAAA=="

Подпись созданная через объект 1с МенеджерКириптографии:

МК = Новый МенеджерКриптографии("", "", 80);

инф = МК.ПолучитьИнформациюМодуляКриптографии();
МК.АлгоритмПодписи = инф.АлгоритмыПодписи[0];
МК.АлгоритмХеширования = инф.АлгоритмыХеширования[0];
мк.АлгоритмШифрования = инф.АлгоритмыШифрования[0];

МК.ПарольДоступаКЗакрытомуКлючу = пароль;

СтрокаНаПодпись = ПолучитьДвоичныеДанныеИзСтроки(Текст, КодировкаТекста.UTF8, Ложь);
ХС = МК.ПолучитьХранилищеСертификатов();
Серт = ХС.НайтиПоОтпечатку(Base64Значение(НастройкаКриптографии.ОтпечатокСертификата));
МК.ВключениеСертификатовВПодпись = РежимВключенияСертификатовКриптографии.НеВключать;

Подпись = МК.Подписать(СтрокаНаПодпись, Серт);

имеет следующий вид: "MIIB0gYJKoZIhvcNAQcCoIIBwzCCAb8CAQExDjAMBggqhQMHAQECAgUAMAsGCSqGSIb3DQEHATGCAZswggGXAgEBMD4wOTEgMB4GCSqGSIb3DQEJARYRdGVzdEBjcnlwdG9wcm8ucnUxFTATBgNVBAMMDHRlc3Rtb25leWJveAIBATAMBggqhQMHAQECAgUAoIHzMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTI1MDcyNjEyMTk0N1owLwYJKoZIhvcNAQkEMSIEIKeNwrNtrGOr57jwF4nDp1Ym8beNuRg+363rHgv7zvXUMIGHBgsqhkiG9w0BCRACLzF4MHYwdDByMAoGCCqFAwcBAQICBCCscwPwgXkE1FaWrZI/PLS2g+ICp9SjoDqbEo+5IcXD2DBCMD2kOzA5MSAwHgYJKoZIhvcNAQkBFhF0ZXN0QGNyeXB0b3Byby5ydTEVMBMGA1UEAwwMdGVzdG1vbmV5Ym94AgEBMAwGCCqFAwcBAQEBBQAEQJy4X0b+eAxOigbSdt5DOBcXj1wbNljuEB1ZBeveZu83+lhYMT10a3ujTtr7I6SJVcTKYZH6/PiVeS3Xq2lubBY="

подскажите пожалуйста, что я делаю не так? подпись свормированная из 1с не проходит валидацию у поставщика api.
вариант подписания через COM не подходит, ОС линукс.
Offline Андрей *  
#2 Оставлено : 26 июля 2025 г. 16:27:04(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,880
Мужчина
Российская Федерация

Сказал «Спасибо»: 594 раз
Поблагодарили: 2323 раз в 1821 постах
Здравствуйте.

В 1С - данные из ФайлЗапроса тоже были подписаны или другой файл?

Если тот же - то хеши разные, значит в csp попадает не то, что через cryptcp...

9DACC37F5AF20580B1EB17263D0659FF5ADEB2C804F8821DB0B526402F82925C
vs
A78DC2B36DAC63ABE7B8F01789C3A75626F1B78DB9183EDFADEB1E0BFBCEF5D4

Цитата:

ПолучитьДвоичныеДанныеИзСтроки(Текст, КодировкаТекста.UTF8, Ложь);


А почему именно так?
А если там не utf8?


В общем суть - передавать одинаковые байты - будет проверяться, если в этом дело.

Либо прикладывайте тестовые данные полноценно:
что подписывалось
сертификат
файл CMS.

Файлами, в архиве.
Техническую поддержку оказываем тут
Наша база знаний
Offline dazent123  
#3 Оставлено : 26 июля 2025 г. 16:58:21(UTC)
dazent123

Статус: Участник

Группы: Участники
Зарегистрирован: 26.07.2025(UTC)
Сообщений: 11
Российская Федерация
Откуда: Пермь

Сказал(а) «Спасибо»: 2 раз
может так более прозрачно будет
МК = Новый МенеджерКриптографии("", "", 80);

инф = МК.ПолучитьИнформациюМодуляКриптографии();
МК.АлгоритмПодписи = "GR 34.10-2012 256";
МК.АлгоритмХеширования = "GR 34.11-2012 256";
мк.АлгоритмШифрования = "GOST 28147-89";

МК.ПарольДоступаКЗакрытомуКлючу = "12345678";
ФайлЗапроса = ПолучитьИмяВременногоФайла();
ДанныеЗапроса = ПолучитьДвоичныеДанныеИзСтроки(ПодписываемыйХеш, КодировкаТекста.UTF8, Ложь);
ДанныеЗапроса.Записать(ФайлЗапроса);

ХС = МК.ПолучитьХранилищеСертификатов();
Серт = ХС.НайтиПоОтпечатку(Base64Значение(НастройкаКриптографии.ОтпечатокСертификата));
МК.ВключениеСертификатовВПодпись = РежимВключенияСертификатовКриптографии.НеВключать;

Подпись = МК.Подписать(ФайлЗапроса, Серт);

ПодписываемыйХеш - это сумма sha256 от строки. эта строка записывается в файл без перевода каретки, без bom, в кодировке utf-8 в файл (все это требование поставщика api)

т.е. данные на вход для подписания через 1с и cryptcp одинаковые, но подпись отличается.
Приложил исходные данные, подпист и сертификат Dannye.zip (2kb) загружен 15 раз(а).
Offline Андрей *  
#4 Оставлено : 26 июля 2025 г. 17:41:50(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,880
Мужчина
Российская Федерация

Сказал «Спасибо»: 594 раз
Поблагодарили: 2323 раз в 1821 постах
Автор: dazent123 Перейти к цитате
может так более прозрачно будет
МК = Новый МенеджерКриптографии("", "", 80);

инф = МК.ПолучитьИнформациюМодуляКриптографии();
МК.АлгоритмПодписи = "GR 34.10-2012 256";
МК.АлгоритмХеширования = "GR 34.11-2012 256";
мк.АлгоритмШифрования = "GOST 28147-89";

МК.ПарольДоступаКЗакрытомуКлючу = "12345678";
ФайлЗапроса = ПолучитьИмяВременногоФайла();
ДанныеЗапроса = ПолучитьДвоичныеДанныеИзСтроки(ПодписываемыйХеш, КодировкаТекста.UTF8, Ложь);
ДанныеЗапроса.Записать(ФайлЗапроса);

ХС = МК.ПолучитьХранилищеСертификатов();
Серт = ХС.НайтиПоОтпечатку(Base64Значение(НастройкаКриптографии.ОтпечатокСертификата));
МК.ВключениеСертификатовВПодпись = РежимВключенияСертификатовКриптографии.НеВключать;

Подпись = МК.Подписать(ФайлЗапроса, Серт);

ПодписываемыйХеш - это сумма sha256 от строки. эта строка записывается в файл без перевода каретки, без bom, в кодировке utf-8 в файл (все это требование поставщика api)

т.е. данные на вход для подписания через 1с и cryptcp одинаковые, но подпись отличается.
Приложил исходные данные, подпист и сертификат Dannye.zip (2kb) загружен 15 раз(а).



Сертификат не тот вложен.


Подписано от testmoneybox, серийный номер 1
Вложен kubyshka, серийный номер 1
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#5 Оставлено : 26 июля 2025 г. 17:49:06(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,880
Мужчина
Российская Федерация

Сказал «Спасибо»: 594 раз
Поблагодарили: 2323 раз в 1821 постах
Но главное - хеш верно вписан в CMS.
Техническую поддержку оказываем тут
Наша база знаний
Offline dazent123  
#6 Оставлено : 26 июля 2025 г. 18:59:00(UTC)
dazent123

Статус: Участник

Группы: Участники
Зарегистрирован: 26.07.2025(UTC)
Сообщений: 11
Российская Федерация
Откуда: Пермь

Сказал(а) «Спасибо»: 2 раз
Тогда не понятно почему подписи с cryptcp отличаются. приложил данные подписи через cryptcp для сравнения и сертификат
cryptcp.zip (2kb) загружен 2 раз(а).
Offline Андрей *  
#7 Оставлено : 26 июля 2025 г. 20:29:12(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,880
Мужчина
Российская Федерация

Сказал «Спасибо»: 594 раз
Поблагодарили: 2323 раз в 1821 постах
Автор: dazent123 Перейти к цитате
Тогда не понятно почему подписи с cryptcp отличаются. приложил данные подписи через cryptcp для сравнения и сертификат
cryptcp.zip (2kb) загружен 2 раз(а).



Цитата:

т.е. данные на вход для подписания через 1с и cryptcp одинаковые, но подпись отличается.


Или вопрос - почему внутри (в конце) значение ЭП другое? Так это особенность ГОСТ-алгоритмов,
для одних и тех же байтов - всегда при подписании будет новое значение ЭП.

Или вопрос исходный? Почему API не принимает?

Вот тут - это из 1С?
В исходном сообщении - хеш другой. Другой файл был подписан.

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#8 Оставлено : 26 июля 2025 г. 20:45:36(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,880
Мужчина
Российская Федерация

Сказал «Спасибо»: 594 раз
Поблагодарили: 2323 раз в 1821 постах
В итоге что?
Из cryptcp - api принимает?
Из 1С - api не принимает?
При этом подписывался один и тот же файл, верно?

Какая ошибка от api? Точно связана с криптографией?


То, что было приложено под кодом с 1с - успешно проверяется:
Snimok ehkrana ot 2025-07-26 21-30-59.png (28kb) загружен 4 раз(а).

еще раз проверил всё выложенное:

1.
26.07.2025 12:46:28 UTC из cryptcp

Хеш:
9DACC37F5AF20580B1EB17263D0659FF5ADEB2C804F8821DB0B526402F82925C
ЭП:
6B84247842E81DE526081B19A7C85A4C47509EC05ACD5C8875B44CFC4847A3AD80ADAE50077F90CD3A3C0DB0A153677E7BF359A8E95ABDEF5E4116394D2B68A4


2.
26.07.2025 12:19:47 UTC из 1С
подпись не проходит проверку (предположение, что подписан тот же файл, что и в п.1)
Хеш:
A78DC2B36DAC63ABE7B8F01789C3A75626F1B78DB9183EDFADEB1E0BFBCEF5D4
ЭП:
9CB85F46FE780C4E8A06D276DE433817178F5C1B3658EE101D5905EBDE66EF37FA5858313D746B7BA34EDAFB23A48955C4CA6191FAFCF895792DD7AB696E6C16


3.
26.07.2025 13:49:42 UTC из 1С (?)
Всё корректно.
Здесь

Хеш:
9DACC37F5AF20580B1EB17263D0659FF5ADEB2C804F8821DB0B526402F82925C
ЭП:
09258AA8538A60B79C6B3E2D6F395D621107419C79C13358E7C307F09CB32FDC8234FABEB8853A13FA3BD39CC4F449F3D1719C348DCD5A4CE47EFC0E056E01E9

4.
26.07.2025 15:53:39 UTC из cryptcp
Всё корректно

Хеш:
9DACC37F5AF20580B1EB17263D0659FF5ADEB2C804F8821DB0B526402F82925C
ЭП:
8A94FA19F34AD80F9652C48CEE0BF2A932BA517044189E4B17D8431581BDC2B6E730EE501CDD9E44D8D15C8AC2ADE2D0AB220EA9300FDC27416B18A693EE3C7F


т.е. изначально - приложено не понятно что (что именно подписывалось),
далее идёт нормальная подпись, cades bes, без включения сертификата.

Техническую поддержку оказываем тут
Наша база знаний
Offline dazent123  
#9 Оставлено : 27 июля 2025 г. 10:11:56(UTC)
dazent123

Статус: Участник

Группы: Участники
Зарегистрирован: 26.07.2025(UTC)
Сообщений: 11
Российская Федерация
Откуда: Пермь

Сказал(а) «Спасибо»: 2 раз
для примера подписываю строку "123". От этой строки счиатю сумму хеш функции sha256, она равна a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3 далее полученную строку записываю в файл "ФайлЗапроса" и выполняю МК.Подписать(ФайлЗапроса, Сертификат). Далее полученную подпись заворачиваю в base64 и передаю в соответствующем заголовке http запроса, в ответе получаю ошибку что подпись не верна. Проверку подписи выполняют вот так:
"Полученное сообщение в том виде, в каком получили, то есть в байтах, берём от сообщения sha256, сохраняем в файл (request_sha256). Из заголовка берём Digital-Sign, сохраняем в файл (request_sha256.sgn). Далее утилитой КриптоПро делаем проверку.

cryptcp -vsignf ./request_sha256 -nochain -thumbprint '7a1831578b77f66d9bde6b4ea3a9763fa1aa733d' -dir ./"

еще смущает что подпись свормированная через cryptcp начинается на MIAG, а из 1с на MIIB.

приложил исходный файл и 2 подписи. datasgn.zip (2kb) загружен 1 раз(а).

Отредактировано пользователем 27 июля 2025 г. 10:17:54(UTC)  | Причина: Не указана

Offline basid  
#10 Оставлено : 27 июля 2025 г. 10:36:43(UTC)
basid

Статус: Активный участник

Группы: Участники
Зарегистрирован: 21.11.2010(UTC)
Сообщений: 1,139

Сказал(а) «Спасибо»: 7 раз
Поблагодарили: 158 раз в 143 постах
Насколько я знаю, содержание десяти ЭП одних и тех же данных будет разным, т.к. подписывается комбинация из "хэш данных плюс (псевдослучайная) имитовставка".
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
4 Страницы123>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.