c# - .NET DSACryptoServiceProvider key 大小

标签 c# .net security public-key-encryption public-key

我想使用 2048 位 DSA key ,并且我正在使用 .NET DSACryptoServiceProvider。我在将 key 参数加载到 .NET DSAParameters 对象中时遇到问题,因此我编写了以下代码来输出 DSACryptoServiceProvider 的有效 key 大小:

DSACryptoServiceProvider sampleDSA = new DSACryptoServiceProvider();
Console.Write("----- DSA LEGAL KEY SIZES -----\n");
foreach (KeySizes ks in sampleDSA.LegalKeySizes)
{
  Console.WriteLine("Min: " + ks.MinSize.ToString());
  Console.WriteLine("Max: " + ks.MaxSize.ToString());
}

数组中只有一个KeySizes对象,输出如下:

----- DSA LEGAL KEY SIZES -----
Min: 512
Max: 1024

有没有办法使用 DSACryptoServiceProvider 获得 2048 位 key ?不能使用 1024 位 key 。

----编辑-----

我已经枚举了处理数字签名的所有 .NET CryptoServiceProvider 类的 LegalKeySizes。结果如下。

System.Security.Cryptography.DSACryptoServiceProvider
Min: 512
Max: 1024

System.Security.Cryptography.RSACryptoServiceProvider
Min: 384
Max: 16384

System.Security.Cryptography.ECDsaCng
Min: 256
Max: 384
Min: 521
Max: 521

我想问的是:有没有办法通过 DSACryptoServiceProvider 来调整它以使用 2048 位 key ,或者我是否被锁定在 512-1024 位范围内?

最佳答案

.NET 4.6.2 添加了 DSACng,它是 DSA 的 FIPS-186-3 兼容实现。 DSACryptoServiceProvider 仅限于 FIPS-186-1(具有 1024 位 key 限制)。

除了构造对象之外,您应该避免依赖于具体类型,而只使用 DSA 基类上的成员。

using (DSA dsaPublicPrivate = new DSACng(2048))
using (DSA dsaPublic = new DSACng())
{
    dsaPublic.ImportParameters(dsaPublicPrivate.ExportParameters(false));

    byte[] signature = dsaPublicPrivate.SignData(data, HashAlgorithmName.SHA256);
    bool isValid = dsaPublic.VerifyData(data, signature, HashAlgorithmName.SHA256);

    ...
}

关于c# - .NET DSACryptoServiceProvider key 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11416510/

相关文章:

c# - 如何使用高级 OpenType 功能编写程序?

.net - 如何在.net中使用uddi

java - -Djava.security.policy 强制使用我们的策略文件

c# - 在 akka.net Actor 中安全地使用事件处理程序

c# - 递归方法比交互式方法慢10倍

c# - 如何从自定义目录动态加载程序集,包括其依赖项?

.NET Standard 等效于 Thread.CurrentCulture

c++ - 预处理器指令对敏感信息安全吗?

security - 如何检测混合内容 SSL 页面上哪些内容不 protected 。?

c# - 是否应该对 Dispose 方法进行单元测试?