ライセンスキーを作成するための安全なアルゴリズム?
-
06-07-2019 - |
質問
アプリケーションを配布したいのですが、ロックを解除するために入力できるライセンスキーがあります。購入したバージョンに関する情報と、ライセンス期間などの追加情報を含む簡潔なキーを作成するのに適したアルゴリズムは何ですか
この保護は破られる可能性があることは承知していますが、正直な人は正直になります。オンラインアクティベーションを実装する場合としない場合がありますが、主にこれらのキーを生成する良い方法に関心があります。
この状況はすべて見たことがありますが、どのアルゴリズムが最適ですか?ユーザーのプレーンテキスト名を要求し、それを使用して、独自の情報に基づいて一意のプロダクトキーを作成する必要がありますか?
有効なキーを生成することをほぼ不可能にするために使用できるシステムはありますか?
おそらく、製造者のみが秘密鍵を持ち、データは公開鍵によって検証できるが、有効な鍵を作成するために公開鍵を乗っ取ることはできないという公開/秘密鍵ペア暗号化状況。
これはプロダクトキーであるため、64文字または最大で128文字のかなり短いものであれば素晴らしいでしょうが、短いほど良いので32以下が素晴らしいでしょう。
解決
どのプラットフォームを使用しているのかは言いませんでしたが、Microsoft .Netには次のようなものがあります:
http://jclement.ca/devel/dotnet/reallysimplelicensing.html
このページでは、非常に簡単な 使用できるライセンススキーム .NETアプリケーション。意図されています かなり安全で、実装しやすい 簡単に拡張できます。サンプルバージョン ライセンスファイルを提供できます クライアント名が埋め込まれている 簡単に拡張して追加できます その他の識別情報、マシン バインディング、有効期限など。
このスキームは、Microsoftの RSAライブラリとXML署名。基本的に 必要なものをXMLに入れます その文書を文書化して署名します。それから そのファイルをあなたに提供することができます 顧客とアプリケーションは読むことができます その中のライセンス情報 ファイル。ファイルはデジタル形式なので ライセンスファイルに署名することはできません あなたが解放しない限り、改ざんされた 秘密鍵(本当に すべきではありません)。
他のヒント
インターネットアクセスとショットキーなし
シリアルキーのサイズに関して、短い/人間が読めるキーの間にはトレードオフがあります (安全性が低い)、長いキーまたはライセンスファイルがある可能性があります(より安全性が高い)。
有効期限や機能などを保存できる短くて人間が読めるキーが必要な場合は、SKGLとSoftware Protectorを併用できます。どちらもオープンソースです( https://help.cryptolens.io/faq/what-is-skgl )。
ただし、欠点は、対称暗号を使用する可能性が高いこと、および/またはアプリケーション内に鍵生成アルゴリズムを格納することです。これは、エンドユーザーが暗号化キーおよび/またはアルゴリズムの検索を試みることができることを意味します( http://www.codeproject.com/Articles/764610/Licensing-systems-in-NET )。
インターネットアクセス(またはアクティベーションファイルでオフライン)
より良い代替手段は、すべてのライセンスキーを追跡し、いつでも変更できるクラウドベースのシステムを使用することです。
Webベースのライセンスシステムがある場合、キーを短くして、実際のキー内に情報を保存する必要はありません(ほとんどのオフラインベースのシステムの場合)。
さらに、サブスクリプションベースのモデルなど、より多くのライセンスモデルをサポートできます。
解決策は次のとおりです。
-
そのようなシステムを自分で構築する-これには多くの時間がかかり、アプリのコア機能から気をそらします。
-
既存のオープンソースシステムを出発点として使用する-オープンソースであり無料であるため魅力的かもしれませんが、クラウドに追加して設定するには時間がかかります特定のニーズに合わせて、それを維持します。私が観察したオープンソースシステムは機能が非常に幅広い傾向があり、それが複雑さの一因となっています。
-
第三者へのアウトソーシング-欠点は、それらのほとんどが無料ではないことです。
私の考えでは、手順全体は、その特定のコンポーネントの開発に特化したサードパーティに外注する必要があります。スケーリングしたら、ライセンスロジックの変更が必要になる場合があります。自分で開発する代わりに、サードパーティがすでにそのシナリオをサポートしている可能性があります。
いくつかの解決策があります( Webベースのものを探すようにしてください)、クリプトレンズはその一例です。 .NETアプリケーションを開発している場合、ステップバイステップの例を次に示します。 https:// help。 cryptolens.io/examples/key-verification 。
免責事項:私は、SKGL / Software Protector、ライセンスシステムに関する記事、およびCryptolensの著者です。