4

私はしばらくこれに苦労しました。これが私のシナリオです。25 文字のソフトウェア プロダクト キー (Microsoft スタイルの FFFFF-EEEEE-DDDDD-BBBBB-77777 など) を生成しようとしています。ノンス (未加工のプロダクト キー) によって正常に生成されました。この記事によると、最終的なプロダクト キー (ベース 24 形式でエンコードする前) は、正確に 15 バイト (ノンスに 4 バイト、デジタル署名に 11 バイト) である必要があります。

問題は、11 バイトの署名をどのように生成するかということです。現在最短の署名暗号化 (ECC - secp128r2 曲線を使用 - これにより、128 ビットの秘密鍵が得られます) を使用してみました。署名後、私の署名のサイズは 80 バイトです (Java ステートメントによって出力されます)。

System.out.println("length: "+signedProductKeyBytes.length);

私の質問は次のとおりです。

  1. EC 鍵のサイズ (ビット単位) と結果の EC 署名の長さ (バイト単位) との関係は正確には何ですか?

  2. たとえば、128 ビットの EC キーは、何バイトの署名サイズを生成することになっていますか?

  3. 11 バイトの署名を生成するにはどうすればよいですか (ちなみに、Windows XP の時代には EC キーがなかったと確信しています。そのため、MS は EC を使用していませんでした。より良い方法はありますか? RSA 32 ビット キーを使用するとします。か何か?)?

  4. また、文字列のサイズ (私の場合、署名されている "123456789" などの 9 文字の文字列です) は、署名の最終的な長さに影響しますか?

しばらくこれに苦労し、オンラインであらゆる場所を検索しました-多くの技術的な話で答えます-しかし、私の質問に答えることに固有のものは何もありません(私が得た最も近いものは 、RSAキーのこの記事でした)

迅速な回答が得られることを願っています。私のプロジェクトはすでに数週間遅れています。みんなありがとう!

4

1 に答える 1

8

そのような小さな署名を生成する安全な署名方式を私は知りません。

  • 生の ECC 署名 (ECDSA など) は、セキュリティ レベルの 4 倍です。80 ビットのセキュリティ レベル (160 ビット曲線を使用) が必要な場合は、40 バイトの署名が得られます。セキュリティを少し犠牲にして、数バイトを削ることはできますが、20 から 30 バイトの間のどこかでそれを壊すのは些細なことです。

    128 ビットの曲線 (64 ビットのセキュリティは壊れる可能性がありますが、おそらくコストがかかりすぎて価値がありません) は 32 バイトの署名を生成します。

  • 有限体署名 (DSA など) は、同じセキュリティ レベルの ECC 付き署名と同じサイズです。

  • RSA 署名のサイズはモジュラスと同じです。かなり小さい 768 ビットのキーを使用すると、96 バイトの署名を取得できます。

  • BLS 署名はかなり近いです。署名のサイズは、セキュリティ レベルの 2 倍にすぎません。80 ビット レベルで 20 バイト。64 ビット レベルで 16 バイト。より長い署名検証時間と引き換えに、切り捨てによってさらに 2 バイト程度を削ることができるはずです。

于 2013-02-19T10:33:50.060 に答える