2011-12-10 7 views
3

私は、暗号プロジェクトのために大きな素数を生成する必要があります。私は、.NET 4.0にはランダムに生成された大きな素数(p、RSAのq)を使用する組み込み暗号プリミティブ(例えばRSA)がいくつかあることに気付きました。彼らはすべて共通の組み込みライブラリを使用していますか?クラススコープ外からアクセスできるか、外部ライブラリを使用する必要がありますか?(私は素数検査のための単純なアルゴリズムがあることを知っています。私が必要以上に実装する。)。外部ライブラリを使用せずにC#で大きな素数を生成する方法はありますか?

+1

素数は奇数でなければなりません。 – Corbin

+1

@Corbin - すべてではない*すべての素数は奇数です(しかし大きな数字になります) –

+1

私は思ったほど間違いました。しかし、まだ、唯一の非奇数素数ではありませんか? – Corbin

答えて

1

.NET v4(以降)では、BigIntegerタイプを含むSystem.Numerics.dllという新しいアセンブリが提供されています。ただし、素数をチェックする方法はありません。

モノ(1.0より前)は[BigInteger][3]タイプも提供しています(Mono.Security.dllアセンブリ)。 をそのままとして使用するか、素数検査方法(いくつかの方法が存在する)を新しいMicrosoft BigIntegerタイプに移植することができます。

は、それらすべてが公開されている一般的な組み込みのライブラリを使用し、そのクラススコープ

はい

、これを行うためのCryptoAPIに両方 RSACryptoServiceProviderDSACryptoServiceProvider通話外部からアクセスすることができません。しかし、CAPIはそれ自体のBigIntegerコード(ネイティブコードにさえ)を公開しないので、あなたを助けません。

1

必要な範囲で大きな数値を生成します。それがプライムかどうかをテストしてください。そうでない場合は拒否して繰り返します。

試験のためには、たとえば1500までのプライムで試験分割を行い、Miller-Rabinに切り替えます。 Miller-Rabinが適切に実装されていると、ハードウェア障害の可能性は誤ってコンポジットにプライムとしてフラグを立てるよりも大きくなります。

関連する問題