繁体   English   中英

当您尝试使用 PIV 卡的私钥和全局密码进行签名时,RSACryptoServiceProvider 是否有效?

[英]Does RSACryptoServiceProvider work when you try to sign using PIV card's private key and a global pin?

我正在尝试将 RSACryptoServiceProvider 与指向全局引脚的 CspParameters 一起使用。 如果我使用应用程序 pin,它可以正常工作,但是当我使用全局 pin 时,它会失败:“无法访问卡,因为提供了错误的 PIN。”

当我使用全局引脚时它会起作用吗? 是否有一个选项可以告诉它要寻找哪种类型的引脚?

提前致谢。

更新:

我正在从智能卡中检索发现 object(如果存在)。 这将告诉我两件我想知道的事情。

1)。 如果卡同时具有应用和全局引脚。 (引脚使用的第一个字节> = 60)

2)。 哪个引脚被认为是主要的。 (第二个字节 0x10 = 应用程序,0x20 = 全局)

我有一张卡,NIST Test Pivcard 3,它有两个引脚,但全局引脚是主要的。 对于这张卡,当我在我的测试表上输入全局密码时,我可以对其进行验证,它会正确验证密码。 (CLA=0x00, INS=0x20, P1=0x00, P2=0x00, Lc=0x8)

如果我输入应用程序引脚(将 P2 设置为 0x80)并正确验证它,我可以对这张卡执行相同的操作。

在我验证密码、设置 AID 并从卡中获取一些其他 x509 数据后,我尝试使用卡的私钥对一些散列数据进行签名。

使用 RSACryptoServiceProvider 和 CspParameters 时,只要我将全局引脚传递给它,它就会失败。 我收到“无法访问该卡,因为提供了错误的 PIN。”

如果我向它传递一个有效的应用程序 pin,那么它工作正常。

我的代码如下所示:

try
{
SecureString ss = new SecureString();
char[] PINs = PIN.ToCharArray();
foreach (char a in PINs)
{
    ss.AppendChar(a);
}
CspParameters csp = new CspParameters(1, "Microsoft Base Smart Card Crypto Provider");
csp.Flags = CspProviderFlags.UseDefaultKeyContainer;
csp.KeyPassword = ss;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(csp);
byte[] data = File.ReadAllBytes(hashFile);
sig = rsa.SignHash(data, "SHA1");
bool verified = rsa.VerifyHash(data, CryptoConfig.MapNameToOID("SHA1"), sig);
}
catch (Exception ex)
{
  txt_msg.Text = ex.Message;
  etc...
}

我在这里缺少一些标志来说明正在使用的引脚是全局引脚吗? 还是我们不允许使用全局引脚? 还是我在这里错过了其他东西? 这是我第一次尝试使用 RSACryptoServiceProvider,我可能缺少一些基础知识。

任何建议,将不胜感激。

您似乎假设 PIN 在某种意义上是可交换的,全局 PIN 是特定应用程序的适当替代品。 这不是真的。

虽然可以通过这种方式设置卡(接受全局 PIN,例如 #1应用程序特定 PIN #2),但您的卡显然不是。 如果卡不提供选择,服务提供商就无法成功。 即使服务提供商使用您想要的 PIN 并且比对成功,该卡也不允许使用私钥。

不,您无法根据自己的喜好更改签名所需的 PIN 的 ID,因为攻击者也可以使用此路径。

(所有这些答案都假设您不允许修改卡片内容,例如您是普通持卡人。)

暂无
暂无

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

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