2

2048ビットのDSAキーを使用したいのですが、.NETを使用していますDSACryptoServiceProvider。キーパラメータを.NETDSAParametersオブジェクトにロードするのに問題があったので、次のコードを記述して、DSACryptoServiceProvider:の有効なキーサイズを出力しました。

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());
}

配列にはオブジェクトが1つだけありKeySizes、出力は次のとおりです。

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

を使用して2048ビットキーを取得する方法はありますDSACryptoServiceProviderか?1024ビットキーを使用することはオプションではありません。

- - 編集 - - -

デジタル署名を処理するLegalKeySizesすべての.NETクラスのを列挙しました。CryptoServiceProvider結果は以下のとおりです。

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

私が尋ねるつもりだったのは、これを微調整して2048ビットキーを使用する方法はありDSACryptoServiceProviderますか、それとも512〜1024ビットの範囲にロックされていますか?

4

2 に答える 2

4

.NET 4.6.2は、DSAのFIPS-186-3互換実装であるDSACngを追加しました。DSACryptoServiceProviderは、FIPS-186-1(1024ビットのキー制限がありました)に制限されています。

オブジェクトを作成する以外に、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);

    ...
}
于 2016-07-01T00:33:03.540 に答える
2

投稿した有効なキーサイズの出力に基づくと、.NET実装は1024ビットを超えて機能しません。

おそらく他の暗号プロバイダーが機能するでしょうか?私は以前、Bouncycastle(www.bouncycastle.org).NETプロバイダーを、.NETプロバイダーが実行できないことのために使用しました。

于 2012-07-10T16:55:42.560 に答える