“Ключевой набор не существует” при использовании функции SignData с RSA.

Вопрос или проблема

«Набор ключей не существует». Я знаю, что существует множество вопросов по этой ошибке, но мой совершенно другой.

Я не собираюсь использовать ключ из хранилища сертификатов Windows, а загружать открытый ключ и закрытый ключ из двух простых строк, используя метод «fromXMLString».

rsa.fromXMLString "<RSAKeyValue><Modulus>......"

затем

rsa.SignData buffer, algSHA1

и Бум! : «Набор ключей не существует»

Может кто-нибудь сказать мне, что использование пары ключей rsa из двух xml-строк безопасно и совершенно не связано с хранилищем сертификатов Windows? У меня есть собственный подход к хранению и загрузке сертификатов/ключей.

PS: Другие ответы на вопросы по этой ошибке говорили спрашивающему установить правильные разрешения для закрытого ключа в хранилище сертификатов. Но в моем случае я не использовал ни одного файла закрытого ключа в этом хранилище, верно?

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

Ответ или решение

Ошибка "Keyset does not exist" при использовании функции SignData с RSA

Ошибка "Keyset does not exist" может возникнуть по нескольким причинам, особенно когда вы работаете с криптографическими операциями, такими как подпись данных с использованием RSA. Ваша ситуация требует особого подхода, так как вы не используете хранилище сертификатов Windows, а вместо этого загружаете открытый и закрытый ключ из XML-строк.

Причины ошибки

  1. Неправильная инициализация ключей: Ваша ошибка может возникнуть если ключи не были корректно загружены из строк XML. Убедитесь, что ваш метод fromXMLString действительно работает правильно и возвращает корректный объект RSA.

  2. Проблемы с форматом ключей: Убедитесь, что форматы открытого и закрытого ключей соответствуют стандартам, принятым в XML. Например, они должны быть закодированы в Base64 и правильно включены в теги <Modulus> и <Exponent> для открытого ключа, а также в соответствующие теги для закрытого ключа.

  3. Отсутствие привязки к контексту ключей: Ошибка "Keyset does not exist" может указывать на то, что объект RSA не имеет необходимого контекста, связанного с ключами. Ваша реализация SignData должна работать с конкретным экземпляром ключа, и если ключи не были инициализированы должным образом, это может привести к ошибке.

Решения проблемы

  1. Проверьте инициализацию ключей:
    Убедитесь, что вы правильно инициализировали ключи с помощью fromXMLString и что объект rsa корректно создался на основе предоставленных строк. Вот пример того, как это должно выглядеть:

    Dim rsa As New RSACryptoServiceProvider()
    rsa.FromXmlString("<RSAKeyValue><Modulus>......</Modulus><Exponent>.....</Exponent></RSAKeyValue>")
  2. Используйте те же ключи для всех операций:
    Как было упомянуто в вашем посте, убедитесь, что вы используете один комплект пары ключей для всех операций, таких как подпись данных и их верификация. Попробуйте сохранить ключи в одном месте и применять их при каждой необходимости:

    Dim signedData As Byte() = rsa.SignData(buffer, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1)
  3. Обратите внимание на версию способа подписи:
    Убедитесь, что версия метода SignData, которую вы используете, поддерживает свой вариант библиотеки и полностью совместима с вашей реализацией. Иногда, если вы используете устаревший метод в новой среде, это может привести к непредсказуемым результатам.

  4. Ассоциация с контекстом ключей:
    Убедитесь, что объект RSA, с которым вы работаете, был ассоциирован с корректным контекстом ключей. Некоторые функции могут требовать явного указания, какой именно ключ нужно использовать.

Заключение

При работе с криптографией важна аккуратность на всех этапах: от загрузки ключей до выполнения операций. Загружая ключи из строк XML, вы автоматически устраняете зависимость от хранилища сертификатов Windows, но также должны быть уверены, что ключи правильно инициализированы и связаны с необходимыми криптографическими операциями.

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

Оцените материал
Добавить комментарий

Капча загружается...