C #, как предотвратить несколько запросов ПИН-кода Windows при использовании смарт-карты? - PullRequest
0 голосов
/ 06 июня 2018

Я использую смарт-карту Gemalto IDPrime .NET для своего приложения.Следующий метод шифрует некоторые байты и отображает подпись:

private static void SimpleDataEncryption()
{
    var csp = new CspParameters(1, "Microsoft Base Smart Card Crypto Provider")
    {
        Flags = CspProviderFlags.UseDefaultKeyContainer
    };

    var rsa = new RSACryptoServiceProvider(csp);
    var data = new byte[] { 0, 1, 2, 3, 4, 5, 6, 7 };
    Console.WriteLine("Data         : " + BitConverter.ToString(data));
    var sig = rsa.SignData(data, "SHA1");
    Console.WriteLine("Signature    : " + BitConverter.ToString(sig));

    var verified = rsa.VerifyData(data, "SHA1", sig);
    Console.WriteLine("Verified     : " + verified);
}

Пока что этот метод работает безупречно.

Моя проблема заключается в том, что каждый раз при запуске приложенияWindows предлагает пользователю повторно ввести ПИН-код.Документация по Архитектура смарт-карт гласит следующее:

Базовый CSP внутренне поддерживает кэш ПИН-кода для каждого процесса.ПИН-код зашифрован и хранится в памяти.

Я нашел способ программно установить ПИН-код смарт-карты с помощью advapi32.dll, но этот подход мне кажется очень хакерскимтак как ПИН-код должен быть передан в виде простого текста.

Итак, мой вопрос:

Есть ли способ, поддерживаемый .NET для кэширования ПИН-кода для смарт-карты?первый раз, когда пользователь вводит его правильно и использует его каждый раз, пока пользователь не изменит PIN-код?

...