2014-10-20 89 views
1

下面是創建數字簽名的代碼支持的算法列表:如何獲得由證書

ContentInfo contentInfo = new ContentInfo(msg); 
SignedCms signedCms = new SignedCms(contentInfo); 
CmsSigner cmsSigner = new CmsSigner(signerCert);    
signedCms.ComputeSignature(cmsSigner, false);  

我怎樣才能獲得所證明的算法列表? 如何使用列表中指定的算法創建數字簽名?

下面是設計用來創建數字簽名的專有軟件的一個截圖的一些例子:

enter image description here

從第二證書的算法列表:

從第一證書的算法列表:

enter image description here

+0

什麼庫包含'ContentInfo'?請在標籤中註明! – 2014-10-20 18:29:02

+0

System.Security.Cryptography.Pkcs.ContentInfo?這是標準的「密碼學」.NET庫 – HowToRsa 2014-10-21 09:09:33

+0

行,只是檢查,也有充氣城堡... – 2014-10-21 16:31:58

回答

0

通常你可以對數據使用任何類型的散列。這個散列然後被放入SignedInfo結構中。然後使用給定算法的簽名算法標識符對SignedInfo結構本身進行簽名,該算法還包含哈希算法。看起來您不能直接指定簽名算法,但是可以使用SignerInfo.DigestAlgorithm指定底層哈希算法。我只能假定它也用於散列在SignedInfo中的實際數據。

這個散列算法必須在簽名生成算法中可用,但它不在X509證書內指定。

GOST R是俄羅斯特有的,所以我只能猜測該選項僅適用於特定的俄羅斯證書(可能與簽名算法或某種證書擴展有關)。

+0

我希望有一點幫助,它可以更清楚,但微軟和俄羅斯都不是最有透明度的實體存在。 – 2014-10-21 17:07:41

0

馬丁說的是正確的。證書包含公鑰的數字簽名,這是根據某種算法生成的。如果第一次認證簽字是GOST R 34.10-2001,第二次認證是最有可能的RSA。任何散列都可以用於簽名數據,但是GOST R 34.10-2001 clearly states即GOST R 34.11-94散列應該被用作唯一的散列算法。 只是對其進行總結:允許的哈希算法列表可選地在定義數字簽名方案的標準中定義。