1. ホーム

[解決済み】ソフトウェアのライセンスキーはどのように生成されるのですか?

2022-03-25 02:04:40

質問

海賊版対策として、ライセンスキーがデファクトスタンダードになっています。正直なところ、これは (中略)無防備さによるセキュリティ しかし、ライセンスキーがどのように生成されるのか、私にはよくわかりません。ライセンスキー生成の良い(安全な)例は何でしょうか?もしあれば)どのような暗号化プリミティブを使っているのでしょうか?メッセージダイジェストでしょうか?もしそうなら、どのようなデータをハッシュ化しているのでしょうか? 開発者は、クラッカーが独自のキー・ジェネレータを構築するのを困難にするために、どのような方法を採用していますか? キージェネレータはどのように作られているのでしょうか?

解決方法は?

旧来のCDキーの場合、CDキー(どんな文字列でもよい)が生成しやすく、検証しやすいアルゴリズムを作ればよいのですが、有効なCDキーと無効なCDキーの比率は非常に小さく、CDキーをランダムに推測しても有効なものが得られる可能性は低いのです。

不正確な方法

スタークラフト ハーフライフ どちらも同じチェックサムを使用しており、13桁目で最初の12桁を検証していました。 したがって、最初の12桁は何でも入力でき、13桁目を推測することができます(可能性は10通りしかありません)ので、悪名高き 1234-56789-1234

検証のアルゴリズムは公開されており、次のようなものです。

x = 3;
for(int i = 0; i < 12; i++)
{
    x += (2 * x) ^ digit[i];
}
lastDigit = x % 10;

正しい方法

Windows XP は、かなりの量の情報を暗号化し、文字や数字のエンコーディングをシールに貼り付けます。 これによって、MSはあなたの鍵の確認と は、製品タイプ(Home、Professionalなど)を同時に取得します。 さらに、オンラインアクティベーションが必要です。

完全なアルゴリズムはかなり複雑ですが、以下にうまく概説されています。 これ (ドイツで発表された論文(完全に合法!)。

もちろん、何をするにしても、オンラインサービスを提供しているのでなければ(例えば ワールド オブ ウォークラフト 残念なことに、価値のあるゲームであれば、誰かが (あるいは少なくとも回避) CD-keyのアルゴリズムや、その他すべての著作権保護について。

リアル 正しい方法

オンラインサービスの場合は、もう少し簡単です。バイナリファイルを使用する場合でも、それを使用するためにそのサーバーで認証する必要があるからです(例:WoWのアカウントを持っている)。 World of WarcraftのCD-keyアルゴリズム(例えば、プレイタイムカードを購入するときに使用)は、おそらく次のようなものです。

<ブロッククオート
  1. 非常に大きな暗号化された安全な乱数を生成します。
  2. それをデータベースに保存し、カードに印刷する。

    そして、誰かがプレイタイムカードの番号を入力したら、それがデータベースにあるかどうかをチェックし、もしあれば、その番号を現在のユーザーと関連付け、二度と使えないようにするのです。

オンラインサービスの場合、理由はない ではなく を使用する必要があります。それ以外のものを使用すると 問題を引き起こす .