ライセンスキーを生成するための最適なメカニズム[終了]


35

ライセンスキーを生成するために人々が提案する方法/ライブラリ/ツールはどれですか(ソフトウェアを登録するときに入れる素敵なAAAAA-AAAAA-AAAAA-AAAAA-AAAAAのもの)?

それらを実装する際に注意すべきことはありますか?

(現時点では、言語固有ではなく一般的なものとしてこれに興味があるので、ソリューションが言語固有である場合は、使用している言語を明記してください)。

回答:


23

パスワードを保存する場合とほぼ同じです。ジェネレーターとプログラムのみが知っている固有の秘密鍵が必要です。このキーを使用して詳細(ユーザー名、パスワード、組織など)を操作し、ハッシュします。次に、ハッシュに対してBase32で何か簡単な転送エンコードを行うか、形式を気にしない場合は単純に16進文字列に移動します。

それらを実装する際に注意すべきことはありますか?

秘密を秘密にしておきます。実装を改善可能にします。誰かがそれを壊した場合、簡単に実装を変更できますか?デスクトップアプリケーションでの一般的な実装の1つは、リモートサーバーを使用してライセンスを検証することです。これにより、アプリケーション自体を検査することにより、誰かがハッシュまたはアルゴリズムをリバースエンジニアリングできる可能性がなくなります。


11
エンコードするBASE32が標準です。それは簡単な人間のユーザ入力を可能にする;)(Base32:非常に異なっている文字と数字の選択例えば、0とOがシーケンスに含まれていない)。

1
@ピエール:私はそれを知りませんでした、良い情報!
ジョシュK

10

この同じ質問がSOで尋ねられ、受け入れられた答えはかなり良いです。一般的な要点は次のとおりです。

  • ユーザーの名前を取得します
  • ユーザー名と秘密鍵およびハッシュを(たとえば)SHA1で連結します
  • SHA1ハッシュを英数字文字列としてアンパックします。これは、個々のユーザーの「プロダクトキー」です
  • プログラム内で同じハッシュを実行し、プロダクトキーと比較します。等しい場合、OK。

1

私が推奨する方法は、10,000個のランダムライセンス文字列を生成し、SHA1(またはMD5)ハッシュまたはHMACハッシュし、実行可能ファイル自体にSHA1 / MD5ハッシュのすべてまたは一部を含めることです。ライセンス文字列が入力されると、難読化されたコードを使用して文字列のハッシュを生成し、リスト内のハッシュと比較します。一致する場合、有効なライセンスです。ライセンスが不足している場合は、文字列を増やして新しいバージョンをリリースしてください。

SHA1ハッシュの最初の96ビットだけを使用するのが適切です。したがって、10,000ライセンスは120KB未満で済みます。キーのアルゴリズムによる生成またはキージェネレータの作成は不可能です。心配する必要がある唯一の脆弱性は、リバースエンジニアリングまたはバイパスです。(または、有効なキーを配布している人。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.