[英]Sign a text with PEM private key and using RSACryptoServiceProvider and SHA1 algorithm
[英]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.