簡體   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