繁体   English   中英

C# 如何在使用智能卡时防止多个 Windows PIN 提示?

[英]C# how to prevent multiple Windows PIN prompts when using a smart card?

我的应用程序使用的是 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 都会提示用户重新输入 PIN。 智能卡架构文档说明如下:

Base CSP 在内部维护 PIN 的每个进程缓存。 PIN 被加密并存储在内存中。

我找到了一种使用advapi32.dll 以编程方式设置智能卡的 PIN 的方法,但这种方法对我来说似乎很advapi32.dll ,因为 PIN 必须以明文形式传递。

所以我的问题是:

.NET 是否支持在用户第一次正确输入时缓存智能卡的 PIN 并每次使用它,直到用户更改 PIN?

如上所述,.Net 加密 API 设法与智能卡一起使用,并为每个进程缓存密码以提高性能。

因此,如果您仍然使用 .Net 加密 API 并希望在应用程序重新启动之间缓存密码,则必须自己缓存密码。 当然,您面临安全风险。 用户密码可以在 .Net 之外更改,因此您无法收到更改事件。 在使用智能卡进行身份验证期间出现密码错误时,您可以提示用户更新密码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM