XCodeとObjectiveC(Cocoa)を使用してOSX用のアプリケーションを開発していますが、販売されたすべてのアプリケーションのライセンスを生成するシステムが必要です。
システムは
- 有効期限なしでシリアル番号を生成する
- 有効期限が切れるシリアル番号を生成する(試用版の場合)
- ブラックリストを処理する
- OSXアプリケーションからライセンス番号を入力および確認するためのAPIが含まれています
それを行うための何かがありますか、それとも自分で実装する必要がありますか?
私がどれだけ偏執的であるかに応じて、3 つの方法のいずれかでこれを実装します。
使用言語は問いません。
これは、誰かがあなたのライセンス ジェネレーターをリバース エンジニアリングすることを心配している場合に使用する方法です。RSA キー ペアを生成し、公開キーをアプリケーションにバンドルします。各ライセンス番号は秘密鍵を使用して署名され、アプリケーションは公開鍵を使用して署名を検証します。秘密鍵を持っているのはあなただけなので、誰かがあなたのアプリケーションのライセンス ジェネレーターを作成できる危険性はほぼゼロです。
欠点: ライセンス キーは非常に長く、おそらく少なくとも 200 文字 (4 行のテキスト) になります。ユーザーはこれらを入力する必要はなく、コピーして貼り付ける必要があります。
利点: ライセンス ジェネレーターを作成する可能性はほぼゼロです。定期的な費用はかかりません。
これは、偏執的でない場合に使用する方法です。ライセンスは HMAC と秘密鍵を使用して署名されますが、秘密鍵はアプリケーションにバンドルする必要があります。難読化することはできますが、賢い人がアプリケーションから秘密鍵を抽出することは常に可能です。
欠点: ライセンス ジェネレーターが可能です。
利点: 短いキー。切り捨てられた HMAC の使用を選択できます。64 ビットの署名は「十分」で、基数 16 で 16 文字しかありません。繰り返し発生するコストはありません。
この方法は妄想的で便利ですが、ユーザーがインターネットに接続している必要があり、サーバーを実行する必要があります。各ライセンスは、単純にランダムな文字列です。サーバー上のデータベースは、ランダムな文字列をライセンスにマップします。ユーザーがアプリケーションを登録すると、指定された文字列に対応するライセンス情報を取得するためにサーバーに HTTP 要求が送信されます。サーバーは RSA 署名付きライセンスで応答します。
欠点: サーバーの定期的なコスト。インターネットに接続していないと登録できません。海賊版キーを簡単に検出できます。
利点: 短いキー。ライセンス ジェネレーターはありません。ライセンスの取り消しは簡単です。廃業を心配される方への販売ロス。
一時ライセンスも 3 つの方法で取得できます。
オンライン
署名された有効期限
署名されたライセンス条項
明らかに、署名付きのライセンス条項を使用すると、悪意のあるユーザーは設定を消去してライセンス条項を再開できます。 ユーザーが見つけられない場所にライセンス条項情報を隠そうとしないでください。これは、アプリケーションが悪意のあることをしないというユーザーの信頼を裏切ることになります。自分のコンピューターでデータを隠しているアプリケーションを見つけたら、そのアプリを消去し、開発者からの購入を拒否します。他のユーザーも同じように感じているはずです。
オンライン ライセンス サーバーの場合、これは簡単です。ブラックリストはサーバー上にあります。そうしないと、ブラックリストをアプリケーションにバンドルする必要があり、新しいバージョンをリリースするたびにのみ更新されます。
海賊版ライセンスを使用する人をブロックするかどうかという問題があります。この質問に対する明確な答えはありません。海賊版ライセンスを完全にブロックした方がよいと思うかもしれませんが、警告メッセージとともに海賊版ライセンスを受け入れることは、実際には新しいライセンスを販売する機会です。
ライセンスをエンコードする独自の方法を思いつくことができると確信しています。Base 32 が使用されているのを見たことがありますが、これは (Base 64 とは異なり) 読み間違えにくいので便利です。また、文字と数字のグループを交互に使用するスキームも見てきました。これは、長いキーを読むときに自分の場所を簡単に覚えられるという点で優れています。
HMAC を使用したオフライン ライセンス キーのスキームの例を次に示します。
AAXX-XXXX-YYYY-ZZZZ-ZZZZ-ZZZZ-ZZZZ
AA
:製品名を2文字に短縮XXXXXX
: ナンスYYYY
: 有効期限日、2013 年 1 月 1 日からの日数、または無制限の場合は 0ZZZZZZZZZZZZZZZZ
: 鍵の最初の部分の署名RSA キーの場合、このZZZ...
部分は非常に長くなります。
オンライン キー サーバーを使用する場合、キーはZZZ...
非常に長い (12 文字または 16 文字) である必要はありません。
どのスキームを選択しても、誰かがアプリケーションをクラックするのを防ぐことはできません。賢いエンジニアは、アプリケーションを逆アセンブルし、ライセンス チェックを無効にすることができます。それらを妨害するために使用するテクニックは、それらを遅くするだけで、止めることはできません.