Расшифровка открытого ключа RSA c # (powershell) - PullRequest
0 голосов
/ 02 июля 2018

У нас есть служба подписи, которая принимает хэш sha256 в качестве входных данных и подписывает хеш с использованием библиотек pkcs11 и bouncy castle в C #, кодирует подписанный дайджест в Bae64 и отправляет его запрашивающей стороне. Итак, по сути мы генерируем хеш хеша и подписываем хеш.

Запрашивающая сторона на другом конце, чтобы проверить это, декодирует полученный дайджест base64 и проверяет его. Я использовал библиотеку .NET на моем конце в PowerShell и реализовал процесс проверки, который проверяет. пожалуйста, смотрите ниже.

## Load a certificate Public key and verify

$certusedforsigning = New-Object -TypeName System.Security.Cryptography.X509Certificates.X509Certificate2

$certusedforsigning.Import($signingcertificate)

$certusedforsigning.PublicKey.key  -as [System.Security.Cryptography.RSACryptoServiceProvider] | Out-null

$oid = [System.Security.Cryptography.CryptoConfig]::MapNameToOID('SHA256')

$padding = [System.Security.Cryptography.RSASignaturePadding]::Pkcs1

$result = $certusedforsigning.PublicKey.key.Verifyhash($originalhashinBinary,$signedbinary,'SHA256',$padding)

$result

if($result -eq 'True' ) { write-host 'Signature verified True'} else { write-host 'Signature validation Failed'}

}
}

Теперь, чтобы обойти хэширование, мы шифруем полученный хэш sha256, используя закрытый ключ RSA. Теперь я предполагаю, что мне нужно использовать открытый ключ для расшифровки хэша, сгенерировать хэш sha256 исходного сообщения и сравнить их для проверки.

Есть ли метод или функция, доступная в .NET, которая позволяет мне это делать? Могу ли я сделать это с помощью OpenSSL? Не могли бы вы указать мне, как выполнить проверку такого сообщения, как описано выше. спасибо.

1 Ответ

0 голосов
/ 02 июля 2018

Обычно шифрование с закрытым ключом не очень хорошо определено. Существует два метода заполнения PKCS # 1 v1.5: один для подписи (с закрытым ключом) и один для шифрования (с открытым ключом). Так что это зависит от реализации, какой метод заполнения используется.

Предположим, что используется тот, который подписан. Проверить это легко: просто восстановите подпись на тех же данных. Если он идентичен предыдущему, то выбирается отступ для подписи (при выборе реализации PKCS # 11 по типу ключа).

Чтобы проверить подпись, вам просто нужно будет хэшировать данные, затем выполнить проверку подписи (которая в C # может включать хеширование) и проверить по значению декодированной подписи base 64. Никакой особой магии не требуется, кроме этой.

Если используется недетерминированная схема шифрования, вы можете пересмотреть свой протокол. Заполнение RSA является центральным элементом безопасности, обеспечиваемой криптосистемой RSA.

...