2014-10-20 86 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散列应该被用作唯一的散列算法。 只是对其进行总结:允许的哈希算法列表可选地在定义数字签名方案的标准中定义。