Проверка валидности подписи полученной в С++
(0 чел.) 
  • Страница:
  • 1

ТЕМА: Проверка валидности подписи полученной в С++

Проверка валидности подписи полученной в С++ 6 мес., 3 нед. назад #4800

  • LKrivtsov
  • Новый участник
  • Постов: 2
  • Репутация: 0
Добрый день, не валидируется результат подписания в с++ подписываю ключем первого руководителя (Файл прикреплен) мои шаги:

1) Подписываю строку "<root>test</root>" в Java, получаю следующий результат:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><root>test<ds:Signature xmlns:ds=" www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm=" www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod Algorithm=" www.w3.org/2001/04/xmldsig-more#gost34310-gost34311"/>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm=" www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm=" www.w3.org/TR/2001/REC-xml-c14n-20010315...hComments"/>
</ds:Transforms>
<ds:DigestMethod Algorithm=" www.w3.org/2001/04/xmldsig-more#gost34311"/>
<ds:DigestValue>MCQqoB1LMsOOXTaTdN1LpRGXSVa01ixcZFfHpoi9Uaw=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
lkVSyQ1lyJ5IcozeEkngA2luPbOw7/Vl27/7tXG7iMDoMYr9Rn3S3ovaBNmqM9pUBcPLKpYP23mL
rujRrLRSKA==
</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>
MIIEMDCCA9qgAwIBAgIUIPG1ftMYUFa98/cATOOIEVer+EQwDQYJKoMOAwoBAQECBQAwUzELMAkG
A1UEBhMCS1oxRDBCBgNVBAMMO9Kw0JvQotCi0KvSmiDQmtCj05jQm9CQ0J3QlNCr0KDQo9Co0Ksg
0J7QoNCi0JDQm9Cr0pogKEdPU1QpMB4XDTE4MDgyMzA0MTEyNVoXDTE5MDgyMzA0MTEyNVowgdsx
HjAcBgNVBAMMFdCi0JXQodCi0J7QkiDQotCV0KHQojEVMBMGA1UEBAwM0KLQldCh0KLQntCSMRgw
FgYDVQQFEw9JSU4xMjM0NTY3ODkwMTExCzAJBgNVBAYTAktaMRUwEwYDVQQHDAzQkNCb0JzQkNCi
0KsxFTATBgNVBAgMDNCQ0JvQnNCQ0KLQqzEYMBYGA1UECgwP0JDQniAi0KLQldCh0KIiMRgwFgYD
VQQLDA9CSU4xMjM0NTY3ODkwMjExGTAXBgNVBCoMENCi0JXQodCi0J7QktCY0KcwbDAlBgkqgw4D
CgEBAQEwGAYKKoMOAwoBAQEBAQYKKoMOAwoBAwEBAANDAARA01B7RhwfNOTWV/RewpPjuEwRyAG/
hmQLgxOCqAS48SmMpOXJ/0sg2WBW1cvhIl9Wk3flv+ZyrdOqlmA86/h0EaOCAeswggHnMA4GA1Ud
DwEB/wQEAwIGwDAoBgNVHSUEITAfBggrBgEFBQcDBAYIKoMOAwMEAQIGCSqDDgMDBAECATAPBgNV
HSMECDAGgARbanPpMB0GA1UdDgQWBBT4pCIjggm251MRZDG2mwkXjxTp1zBeBgNVHSAEVzBVMFMG
ByqDDgMDAgEwSDAhBggrBgEFBQcCARYVaHR0cDovL3BraS5nb3Yua3ovY3BzMCMGCCsGAQUFBwIC
MBcMFWh0dHA6Ly9wa2kuZ292Lmt6L2NwczBYBgNVHR8EUTBPME2gS6BJhiJodHRwOi8vY3JsLnBr
aS5nb3Yua3ovbmNhX2dvc3QuY3JshiNodHRwOi8vY3JsMS5wa2kuZ292Lmt6L25jYV9nb3N0LmNy
bDBcBgNVHS4EVTBTMFGgT6BNhiRodHRwOi8vY3JsLnBraS5nb3Yua3ovbmNhX2RfZ29zdC5jcmyG
JWh0dHA6Ly9jcmwxLnBraS5nb3Yua3ovbmNhX2RfZ29zdC5jcmwwYwYIKwYBBQUHAQEEVzBVMC8G
CCsGAQUFBzAChiNodHRwOi8vcGtpLmdvdi5rei9jZXJ0L25jYV9nb3N0LmNlcjAiBggrBgEFBQcw
AYYWaHR0cDovL29jc3AucGtpLmdvdi5rejANBgkqgw4DCgEBAQIFAANBAHogeaStou18/GXPBmf+
YhazmKrTdsu+Uxp2x3FSQURvraDDaSjOBia/pubfyQ5grUh61AML0/t03jrqfmaqEns=
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature></root>

ds:DigestValue = MCQqoB1LMsOOXTaTdN1LpRGXSVa01ixcZFfHpoi9Uaw=
ds:SignatureValue = lkVSyQ1lyJ5IcozeEkngA2luPbOw7/Vl27/7tXG7iMDoMYr9Rn3S3ovaBNmqM9pUBcPLKpYP23mLrujRrLRSKA==

В Java результат валидируется успешно.

2) Подписываю эту же строку с помощью примера NCALayer:

Результат - ds:DigestValue совпадает как и должен, подпись отличается как и должна, попытка свалидировать подпись в Java - успешна.

ds:DigestValue = MCQqoB1LMsOOXTaTdN1LpRGXSVa01ixcZFfHpoi9Uaw=
ds:SignatureValue = XIFm8jYxCbnLbkQUti7IiCByCbV31iGTtBL4xIoZ7LzhUdrh90wkKpcCaGwA6d9PywcPU+vvL37u1JGZRYMDJA==

3) Подписываю строку в Visual Studio и тут появляются вопросы:
- Как получить DigestValue?
- Результат подписания перевожу в base64 получается "uunBuJx+Y1pTMUFzpEiSg3F1/q34Psdtr4zm5VKAmWrWKI3+CsNirWPsKWEKLM8xk0ZwtywcfqNGFAtz5DtuCg==" Пытаюсь свалидивать в java - результат неудачный.

Цель - сформировать в с++ xml файл такого-же образца как получается в java и ncalayer, для этого все есть кроме DigestValue и самой подписи, подскажите пожалуйста как их получить в с++?

Re: Проверка валидности подписи полученной в С++ 6 мес., 3 нед. назад #4801

  • danil.miskiv
  • Осваиваюсь на форуме
  • Постов: 24
  • Репутация: 1
Здравствуйте. Видимо Вы используете не нашу COM-библиотеку (KalkanCryptCOM), а сторонний OPENSSL.
У Вас получается, что для подписания в Visual Studio будут использоваться ряд различных методов.

Советуем Вам пользоваться KalkanCryptCOM, в которой подпись xml-документов осуществляется в одну функцию. Чтобы получить нашу COM-библиотеку, необходимо запросить SDK (инструкция написана в разделе: Разработчикам на сайте pki.gov.kz).

Re: Проверка валидности подписи полученной в С++ 6 мес., 3 нед. назад #4802

  • LKrivtsov
  • Новый участник
  • Постов: 2
  • Репутация: 0
Я использую Ваш пример, лежит в папке SDK 2-1.0⁩ ▸ ⁨C⁩ ▸ ⁨examples⁩ ▸ ⁨cpp⁩ ▸ ⁨basic⁩ ▸ KalkanGOST_test
Библиотеки openssl лежат там-же в проекте, я так понимаю они были Вами изменены, в этом примере используются они.
В решении необходима кроссплатформенность, есть ли вариант как запустить KalkanCryptCOM на линуксе и маке?
Изменено: 6 мес., 3 нед. назад от LKrivtsov.

Re: Проверка валидности подписи полученной в С++ 6 мес., 2 нед. назад #4803

  • danil.miskiv
  • Осваиваюсь на форуме
  • Постов: 24
  • Репутация: 1
Если Вам нужно подписать XML-файл, то Вам необходимо использовать пример в каталоге: SDK 2▸ ⁨C⁩ ▸ ⁨examples⁩ ▸ ⁨cpp⁩ ▸ xml.

SDK 2-1.0⁩ ▸ ⁨C⁩ ▸ ⁨examples⁩ ▸ ⁨cpp⁩ ▸ ⁨basic⁩ ▸ KalkanGOST_test - это простая подпись данных (не XML).

По поводу кроссплатформенности: в ближайшем обновлении SDK появятся примеры работы с KalkanCrypt под управлением ОС Linux.
  • Страница:
  • 1
FaLang translation system by Faboba