1

C# で作成したプログラムを販売しようとしていますが、そのライセンスを厳密に管理したいと考えています。つまり、クライアントが起動するたびにサーバーに接続できるようにしたいということです。これにより、キーを無効にすることもできます (paypal でのチャージバックまたはコードの配布の場合)。もちろん、これは他のユーザーにとっては面倒かもしれませんが、この場合は必要です。クラックされていない優れた .NET ライセンス システムを見つけることができなかったので、自分で小さなものを作成するというアプローチを取りたいと思いました。私の計画は、次のことを行うことでした。

  1. ソフトウェアに同梱される 1024 文字を含む key.dat を生成します (各ユーザーに個別に)
  2. アプリケーション エントリポイントで、暗号化された key.dat + 現在のタイムスタンプを送信する httprequest をサーバーに追加します。
  3. HTTP サーバー (PHP を実行) はリクエストを復号化し、キーが (データベース内で) 有効かどうかを確認し、「アクセス レベル」(ライセンス タイプ) で応答します。キーが無効または無効になっている場合、エラーコードが返されます。リクエストと同様に、応答はタイムスタンプでソルトされているため、誰かが有効なパケットを自分に送信してプログラムを検証することはできません。タイムスタンプはクライアントでチェックされています。返信は、RSA と以前に生成された公開鍵で暗号化されます。
  4. クライアントは応答を受け取り、秘密鍵で復号化して反応します。

RSA はこれに対する正しいアプローチなので、パケットが私によって送信され、(公開鍵を持っている他の人によって) 細工されていないことを保証できますか? この問題を解決するためのより良いアプローチはありますか?

4

2 に答える 2

3

あなたのソフトウェアを十分に悪くしたい人は、それを逆コンパイルして、起動時に電話をかけるコードの部分を削除するだけです.

コードが変更されたかどうかをチェックするチェックサムをアプリに追加する場合、誰かがプログラムがチェックするチェックサムを変更する (またはチェックを完全に削除する) ことができます。

あなたのアプリケーションを十分に欲しがっている人々は、あなたが考えることができるあらゆるタイプの保護を回避する方法を見つけるでしょう. シンプルなものにこだわり、支払う価値のある (そして簡単に) 製品を手に入れ、求めている価格に見合うだけの価値があることを確認することをお勧めします。


編集

保護が重要であることを考えると、ユーザーが自分のマシンでコードを実行するという事実は、回避できるリスクです。ユーザーがコードを持っていなければ、解読することはできません。コピーして共有することはできません。

作成しようとしているアプリケーションには当てはまらないかもしれませんが、通常のクライアント アプリケーションではなく、Web、Flash、または Silverlight アプリケーションの作成を検討する必要があります。そうすれば、コードを顧客に配布する必要がなくなります。あなたがしなければならないことは、認証情報をアプリケーションに管理することだけです。これは、ラウンドアバウトの RSA システムよりもはるかに簡単です。

また、集中型モデルでソフトウェアの新しいバージョンをプッシュするのも簡単で、盗難の心配もまったくありません。もちろん、負荷は以前になかったときに問題になります。また、すべてのアプリケーションを簡単に (またはまったく) 集中化できるわけではありません。これは問題に対する有効な解決策であるため、必ず検討していただくためにこれを提案しています。

Web ベースのアプリケーションには、アプリケーションと同じ問題があります (つまり、ユーザーがオフラインになるたびに、ネットワークがダウンするたびに、サーバーがダウンするたびにダウンします)。したがって、その点で追加のリスクはありません。

于 2009-09-28T19:04:50.213 に答える
0

RSA はこれに対する正しいアプローチですか?

RSA が最良の選択だとは思いません。

PKE (公開鍵暗号化) の機能の 1 つは、これまで情報を交換したことのない関係者 (見知らぬ人など) 同士が会話できるようにすることです。

これがあなたのケースに当てはまるとは思いません。ソフトウェアはサーバーをよく知っています。彼らは「見知らぬ人」ではありません。

代わりに、配布するソフトウェアの各コピーに一意の秘密鍵が与えられ、サーバーが各ユーザーの秘密鍵も知っている共有秘密鍵暗号化を検討してください。キーは送信されず、保護する必要がありますが、通信の暗号化、署名、および検証に引き続き使用できます。


編集コメントやその他の回答を検討した後。

あなたのソフトウェアをひどく欲しがる人は誰でも、認証を完全にバイパスすることができます. RSA はそれを防ぐために何もしません。

本当の問題は、単一のライセンスを破ると、すべてのライセンスが脆弱/無価値になるかということです。どちらの場合も (RSA と秘密鍵)、答えはノーです。ソフトウェアの 1 つのコピーがハッキングされてそのキーが公開された、またはライセンス システムがバイパスされたという理由だけで、他のコピーは公開されなくなります。その点では、PKE と SSE は同じように思えます。

共有秘密鍵は実装がより簡単で、実行が計算上高速であるため、この場合は RSA/PKE よりも優先されると思います。RSA が「間違っている」と言っているわけではありません。SSE と同じ程度 (それ以上でもそれ以下でもありません) で、あなたが求めていることを達成します。しかし、私は SSE の方が賢い選択だと思います。

于 2009-09-28T18:51:40.160 に答える