2009-07-20 4 views
1

私は簡単なライセンスファイルシステムを実装しており、現在の実装ラインで間違いがあるかどうかを知りたいと思っています。このRSAベースの署名(リカバリあり)スキームは暗号的に妥当ですか?

メッセージデータがキーよりも小さい。私は3072ビットのキーサイズでRSAを使用しています。

ライセンスの発行者は、署名するメッセージを生成し、RSAベースの直接的なアプローチを使用して署名し、同様の方法を適用してメッセージを暗号化します。暗号化されたメッセージと署名は、ライセンスファイルとして一緒に保存されます。

  1. Sha512のメッセージです。
  2. 秘密鍵でハッシュに署名します。
  3. 秘密鍵でメッセージに署名してください。
  4. 連結して送信します。

受信すると、検証プロセスは次のとおりです。

  1. は、公開鍵を使用してファイルからハッシュを復号化する公開鍵
  2. ハッシュとメッセージ
  3. をメッセージを復号化し、と比較しますローカルハッシュ

実装は正しく動作しており、は有効です。と表示されます。

私は現在、おそらく ある鍵のサイズに合わせて、メッセージ、悪い動き(私が1または1.5のように、PKCSパディングアルゴリズムを使用する必要があります推測?)

んこの戦略ゼロ埋めています有効と思われる? 明白な欠陥や見通しが見過ごされていますか?

答えて

3

私が気付いた大きな欠陥:あなたでなければなりません。解読するときにパディングがまだ存在することを確認してください。

(メッセージの長さを事前に知っている場合は、独自のパディングスキームを使用することで逃げることができますが、前述したように既存のメッセージを使用することはお勧めです)。

メッセージ自体を暗号化するのはなぜかわかりませんが、あなたが気づいたように、公開鍵を持っている人は誰でも復号化できるので、難読化以外のものは追加しません。メッセージと暗号化されたパディングされたハッシュだけを送信することもできます。

cryptlibまたはKeyCzar(可能な場合)のような "記号メッセージ"機能を提供する高レベルライブラリの使用をお勧めします。これらは、あなたのコードよりもはるかに多くの眼球の恩恵を受けるだけでなく、すべての厄介な詰め物の問題などを処理します。

+0

メッセージを暗号化するのは難読化のためのものであり、はいです。 Enc [x]とEnc [Hash [x]]の送信に脆弱性はありますか?私は、ハッシュが正しく(そして重く)詰め込まれているので、推測していません。私の実装は、優れたパブリックドメインLibTomCryptに基づいています。私はWei DaiのCryptoPPを使用していましたが、RSA署名は最新の推奨シグネチャスキームでは実装されていないようです。 –

+1

すべてのパディングを整頓している限り、何も表示されません。私はそれを[email protected]リストに送って、より多くのレビューをすることをお勧めします。 – caf