@Multigame

Как работает ЭЦП RSA+SHA1? Как реализовать на C#?

Добрый день!
Интегрируемся с платежным шлюзом, который использует для верификации общения ЭЦП RSA+SHA1 с сертификатами X509. Нами был сформирован закртый ключ + сертификат, который мы отправили шлюзу. Шлюз в ответ сформировал сертификат на своей стороне и прислал два файла, CRT и KEY (содержит паблик кей). Насколько я понимаю алгоритм подписи, при отправке мы сначала от подписываемого контента считаем RSA, используя их сертификат(открытый ключ?), затем считаем sha1-хеш от полученного шифра. Вопрос:
1) Правильно ли я описал процесс? или есть еще шаги, которые я упускаю?
2) Сертификат содержит открытый ключ? если так, то нужен ли присланный шлюзом KEY-файл?

Практическая часть.
Реализацию делаем на C#.
var content = "data";
var ctr = new X509Certificate2(filename); // путь до crt-файла присланного шлюзом
var provider = ctr.PublicKey.Key as RSACryptoServiceProvider; // если после этой строки посмотрим на provider, то там действительно есть сертификат длинной 2048
var dta = provider.Encrypt(Encoding.ASCII.GetBytes(content), true); // в dta вроде бы 256 байт
var sig = provider.SignData(dta, "SHA1");  // и тут мы ловим исключение "набор ключей не существует"


1) Что я делаю не так? Ключ то вроде есть?
2) если контент длиннее 2048 байт, то я предполагаю возникнут проблемы на этапе получения RSA-шифра. Предусмотрен ли механизм преодоления этой беды? или единственное решение изначальное формирование ключей длинной в 16кб (ну т.е. бОльшей длинны)?

Спасибо.
  • Вопрос задан
  • 1367 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Multigame Автор вопроса
Ошибка "набор ключей не существует" - получение подписи происходит с использованием Закрытого ключа. Потому его нужно так же подгрузить, как и сертификат.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы