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

Уведомление

Icon
Error

4 Страницы«<234
Опции
К последнему сообщению К первому непрочитанному
Offline Санчир Момолдаев  
#31 Оставлено : 1 января 2021 г. 8:32:52(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 274 раз в 254 постах
тут еще важен порядок.
если делать все низкоуровнево, то надо попробовать прохэшировать как есть.
иначе попробовать прохешировать предварительно отключив сортировку аттрибутов.
к примеру в java есть
info.signedAttrs.needSortSignedAttributes = needSortSignedAttributes;
где info это final SignerInfo info = cms.signerInfos.elements[0];
Техническую поддержку оказываем тут
Наша база знаний
Offline Анатолий Колкочев  
#32 Оставлено : 1 января 2021 г. 9:46:57(UTC)
TolikTipaTut1

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

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

Сказал(а) «Спасибо»: 43 раз
Поблагодарили: 69 раз в 61 постах
Автор: Санчир Момолдаев Перейти к цитате
тут еще важен порядок.
если делать все низкоуровнево, то надо попробовать прохэшировать как есть.
иначе попробовать прохешировать предварительно отключив сортировку аттрибутов.
к примеру в java есть
info.signedAttrs.needSortSignedAttributes = needSortSignedAttributes;
где info это final SignerInfo info = cms.signerInfos.elements[0];


Да, конечно, понимаю. Я просто вытаскиваю "как есть", без сортировки и какого-то анализа. Но пока безуспешно. Буду пытаться дальше...


С наступившим!)
Offline Анатолий Колкочев  
#33 Оставлено : 1 января 2021 г. 11:16:44(UTC)
TolikTipaTut1

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

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

Сказал(а) «Спасибо»: 43 раз
Поблагодарили: 69 раз в 61 постах
УРААА!!!
ПОЛУЧИЛОСЬ!!!

Вот что сделал:
Код:
(gci "./test files/Example1.docx" | % {[System.IO.File]::ReadAllBytes($_)}) -as [byte[]] | sv -Name "DataFileRawBytes"
(gci "./test files/Example1.docx.sign" | % {[System.IO.File]::ReadAllBytes($_)}) -as [byte[]] | sv -Name "SignatureFileRawBytes"
$signedContent = [Org.BouncyCastle.Cms.CmsProcessableByteArray]::new($DataFileRawBytes)
[Org.BouncyCastle.Cms.CmsSignedData] $signedData = [Org.BouncyCastle.Cms.CmsSignedData]::new($signedContent, $SignatureFileRawBytes)
$certStoreInSig = $signedData.GetCertificates("collection") #Получаем сертификаты
$signers = $signedData.GetSignerInfos().GetSigners()
0..($signers.Count-1) | % {
    $cert = $certStoreInSig.GetMatches($signers[$_].SignerID)
    $signers[$_].verify($cert[0]) #Проверяем подпись
} | % {if ($_ -eq $true) {
        Write-Host "Signature Verified!" -ForegroundColor Green
    }
    elseif ($_ -eq $false) {
        Write-Host "Signature NOT Verified!" -ForegroundColor Red
    }
}

$encodedAttrbFilePath = (pwd).ToString() + "\test files\encodedattrb.txt"
$encodedAttrb = $signers[0].GetEncodedSignedAttributes()
Test-Path -Path $encodedAttrbFilePath | % {if ($_ -eq $false) {ni -i File -p $encodedAttrbFilePath}; if ($_ -eq $true) {gci $encodedAttrbFilePath | sc -Value $null}}
[System.IO.File]::WriteAllBytes($encodedAttrbFilePath,$encodedAttrb)

$encodedAttrbSignatureFilePath = (pwd).ToString() + "\test files\encodedattrb.sign"
$encodedAttrbSignature = $signers[0].getSignature()
Test-Path -Path $encodedAttrbSignatureFilePath | % {if ($_ -eq $false) {ni -i File -p $encodedAttrbSignatureFilePath}; if ($_ -eq $true) {gci $encodedAttrbSignatureFilePath | sc -Value $null}}
[array]::Reverse($encodedAttrbSignature) #Разворачиваем массив подписи
[System.IO.File]::WriteAllBytes($encodedAttrbSignatureFilePath,$encodedAttrbSignature)
& "C:\Program Files (x86)\Crypto Pro\CSP\csptest.exe" -keyset -verify GOST12_256 -in $encodedAttrbFilePath -signature $encodedAttrbSignatureFilePath -cert (gci ".\test files\1.cer") #Получаем Signature Verified OK (УРААА!!!!)

[byte[]]$encodedAttrbHash = [CryptoPro.Sharpei.Gost3411_2012_256]::Create().ComputeHash($encodedAttrb)
$certi = gi Cert:\CurrentUser\My\E3005A57425DFFB920DB2953050D83E89F08008D
$certi.PrivateKey.VerifyHash($encodedAttrbHash, $encodedAttrbSignature) #Получаем $true
$certi.PrivateKey.VerifySignature($encodedAttrbHash, $encodedAttrbSignature) #Получаем $true


Спасибо большое за помощь и разъяснения!)

Отредактировано пользователем 1 января 2021 г. 11:36:29(UTC)  | Причина: Не указана

Offline Анатолий Колкочев  
#34 Оставлено : 1 января 2021 г. 14:38:14(UTC)
TolikTipaTut1

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

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

Сказал(а) «Спасибо»: 43 раз
Поблагодарили: 69 раз в 61 постах
Скажите пожалуйста, почему без array.reverse(signatureBytes) не проверяется?
Зачем нужно инвертировать массив?
Offline Санчир Момолдаев  
#35 Оставлено : 1 января 2021 г. 15:38:32(UTC)
Санчир Момолдаев

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

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

Сказал(а) «Спасибо»: 100 раз
Поблагодарили: 274 раз в 254 постах
Автор: Анатолий Колкочев Перейти к цитате
Скажите пожалуйста, почему без array.reverse(signatureBytes) не проверяется?
Зачем нужно инвертировать массив?


Так исторически сложилось.
в Microsoft CryptoAPI - Little Endian
в C#, Java, etc - Big Endian
разный порядок байт
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Санчир Момолдаев за этот пост.
TolikTipaTut1 оставлено 01.01.2021(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
4 Страницы«<234
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.