C# で作成したプログラムを販売しようとしていますが、そのライセンスを厳密に管理したいと考えています。つまり、クライアントが起動するたびにサーバーに接続できるようにしたいということです。これにより、キーを無効にすることもできます (paypal でのチャージバックまたはコードの配布の場合)。もちろん、これは他のユーザーにとっては面倒かもしれませんが、この場合は必要です。クラックされていない優れた .NET ライセンス システムを見つけることができなかったので、自分で小さなものを作成するというアプローチを取りたいと思いました。私の計画は、次のことを行うことでした。
- ソフトウェアに同梱される 1024 文字を含む key.dat を生成します (各ユーザーに個別に)
- アプリケーション エントリポイントで、暗号化された key.dat + 現在のタイムスタンプを送信する httprequest をサーバーに追加します。
- HTTP サーバー (PHP を実行) はリクエストを復号化し、キーが (データベース内で) 有効かどうかを確認し、「アクセス レベル」(ライセンス タイプ) で応答します。キーが無効または無効になっている場合、エラーコードが返されます。リクエストと同様に、応答はタイムスタンプでソルトされているため、誰かが有効なパケットを自分に送信してプログラムを検証することはできません。タイムスタンプはクライアントでチェックされています。返信は、RSA と以前に生成された公開鍵で暗号化されます。
- クライアントは応答を受け取り、秘密鍵で復号化して反応します。
RSA はこれに対する正しいアプローチなので、パケットが私によって送信され、(公開鍵を持っている他の人によって) 細工されていないことを保証できますか? この問題を解決するためのより良いアプローチはありますか?