crypto/rsa
ライブラリには、新しいRSA秘密鍵を生成する以下の機能があります。特定の公開指数を使用してRSAキーを生成する
これは、公開番号の値として65537
を使用するようにデフォルト設定されています。 OpenSSLや他のCライブラリに依存しない私の選択した公開指数でRSA秘密鍵を生成するために使用できるAPIはありますか?
crypto/rsa
ライブラリには、新しいRSA秘密鍵を生成する以下の機能があります。特定の公開指数を使用してRSAキーを生成する
これは、公開番号の値として65537
を使用するようにデフォルト設定されています。 OpenSSLや他のCライブラリに依存しない私の選択した公開指数でRSA秘密鍵を生成するために使用できるAPIはありますか?
Goでは、このようなAPIは見つかりません。
これは、多くの理由から、3と65537がRSAが動作するために必要な要件とRSA実装が高速であるためです。
RSAが機能するためには、まず、公開指数がいることを、1およびモジュラスの間で、整数の集合の基数で互いに素する必要があります。ここでは
は、これら2つの特性についての説明です
モジュラスと相性が良い(理由を理解するためのRSAアルゴリズムを参照)。だから、素数を選ぶことは、この数が上記の集合の基数と相性が良い機会を得るための良い方法です。これは、人々が大部分の時間、公の指数として素数を選ぶ理由です。そうでない場合は、公開指数を変更する代わりに新しい係数を計算します)。上記の集合の基数は偶数なので、2を選ぶことはできません(モジュラスが素数pとqの積ならば、この集合は(p-1)(q-1)の要素を持ちます。数)。また、高速な計算のためには、公開指数のバイナリ表現で1に設定されたビットの数はできるだけ少なくなければなりません。 2は、1ビットがそのバイナリ表現で1に設定された唯一の素数です。選択できないため、バイナリ表現で1に設定された2ビットしかない素数を選択します。したがって、このようなプライムと他の任意の数の算術積は、1回の加算と論理シフトを残すだけで済みます。これらの要件に一致する(今まで)
ザのみ知ら整数リンクはSHA-1攻撃であること#1 @tweaksp 3、5、17、257及び65537.
あります。それはRSAとは関係ありません。 #2小さな指数の使用に関連する攻撃は、適切なパディングモードを使用すると機能しません。 #3他のシステムとの相互運用やテストツールの作成など、これに限定されるものではありません。 – Ayrx
間違ってリンクを間違ってコピーしました。修正: – tweaksp
いいえ、指数は生成関数にハードコードされており、https://golang.org/pkg/crypto/rsa/に記載されている完全なパブリックAPIを見ることができます。 'GenerateMultiPrimeKey'関数は自己完結型で、ソースにコピーして、必要に応じて修正することができます。 – JimB