3

シリアル番号の形式:

  • 24の16進文字で表される24のオクテットと読みやすさのためのハイフン
  • 例:D429-A7C5-9C15-8516-D15D-3A1C

    • 0〜15:{メール+マスターハッシュ}
    • 16-19:{id}
    • 20〜23:{タイムスタンプ}

メール+マスターハッシュアルゴリズム:

  • ユーザーの電子メールのmd5ハッシュを生成します(32バイト)
  • 公開されていないマスターキーのmd5ハッシュを生成します
  • xorこれらの2つのハッシュ
  • 奇数バイトを削除し、サイズを16に減らします
  • 例:D429A7C59C158516D15D3A1CB00488ED-> D2AC9181D531B08E

id:

  • 最初は0x00000000で、その後、販売されたライセンスごとに増分されます

タイムスタンプ:

  • ライセンス購入時に生成されるタイムスタンプ

検証:

  • 製品を登録するには、ユーザーは1)メールアドレスと2)シリアル番号を入力する必要があります
  • email + masterハッシュを生成し、シリアルの0〜15と一致することを確認します
  • シリアルからタイムスタンプを抽出し、それが<現在のタイムスタンプであり>=最初のライセンスが販売された日付であることを確認します
4

2 に答える 2

3

私はこれについての専門家ではありませんが、このアプローチで問題になる可能性のあることがいくつかあります。

  1. MD5を使用するのは良い考えではないようです。MD5にはセキュリティ上の弱点があり、十分な時間があれば、ある種のハッシュ衝突を簡単に思い付く可能性があります。シリアル番号の使用方法によっては、他のシリアル番号と一致するように見えるシリアル番号を誰かが簡単に偽造する可能性があります。SHAファミリの何かを使用すると、これを防ぐことができます。
  2. マスターキーを使用したユーザーの電子メールハッシュのXORは、特に安全ではありません。シリアル番号を自分の電子メールのハッシュとXORすることで、マスターキーのハッシュを簡単に復元できます。
  3. 安全なハッシュから奇数バイトをすべて削除すると、ハッシュが安全であるという保証が破られます。特に、優れたセキュリティ保証を備えたハッシュ関数では、通常、結果のハッシュのすべてのバイトが出力に含まれている必要があります。例として、最初のハッシュの出力を取得し、すべての古いバイトの間に0を散在させてから結果を出力することにより、既存のセキュアハッシュ関数からセキュアハッシュ関数を簡単に構築できます。新しいハッシュのセキュリティプロパティのいずれかを破ることができれば、元のハッシュのセキュリティプロパティを破ることと同等になるため、安全です。ただし、新しいハッシュからすべての偶数バイトを削除すると、すべてゼロになりますが、これはまったく安全ではありません。
  4. IDには4バイトで十分ですか?それはあなたに2^32の異なるIDを与えるだけです。
于 2011-01-03T01:02:04.093 に答える
1

templatetypedefの応答に追加するいくつかのポイント:

  1. メールとマスターキーのハッシュを組み合わせる必要がある場合は、両方の連結をハッシュします。さらに良いことに、誰かが2つ以上のライセンスを購入してパターンを見た場合に備えて、さらに「より良い」セキュリティのために電子メール+キー+IDをハッシュします。

  2. 16バイトのみを提供するハッシュ関数を使用します。MD5を使用する必要がある場合は、切り捨ても同様に悪いので、最初の16バイトだけを使用してください。

  3. IDが検証に使用されることはありません。

  4. キー共有(ウェアーズサイトなど)から保護されることはありません。

シリアル番号は、ごくわずかな攻撃からあなたを守ります。それはおそらくあなたの時間と努力の価値がありません。

于 2011-01-03T02:30:58.713 に答える