7

クライアントが私のサーバーにライセンスを要求し、ライセンスを持つことが許可されている場合はライセンスを送信するときに、ライセンス システムを作成しています。

現在のシステムでは、単一の秘密鍵を使用してライセンスを暗号化し、ライセンスの復号化に使用するクライアント アプリケーションに公開鍵を埋め込んでいます。できます!

サーバー上で公開鍵を使用して暗号化し、秘密鍵をクライアントに配布する必要があると言う人もいます。Web を検索したところ、秘密鍵を使用して暗号化する場合もあれば、公開鍵を使用して暗号化する場合もあります。

この場合、どうすればいいですか?

4

6 に答える 6

8

サーバー上の公開鍵で暗号化し、秘密鍵をクライアントに配布する必要があると言う人もいます。

それらの人々は間違っています。秘密鍵という名前は、それが秘密であることを意味し、自分だけがアクセスできることを意味します。

この場合、どうすればいいですか?

デジタル署名を使用します。秘密鍵でライセンス ファイルに署名し、アプリケーションで公開鍵を使用して、ライセンスの署名が自分のものであることを確認します。

于 2010-06-04T15:06:26.873 に答える
4

おめでとうございます。RSA署名を発明しました。(とにかく、どちらを使用する必要があります。)公開鍵システムと通信するには、秘密鍵を1回、公開鍵を1回使用する必要がありますが、RSAは2つの異なる順序をサポートしています。1)公開鍵で暗号化、復号化秘密を使用する場合:受信者はメッセージの送信元について何も知りませんが、送信者は受信者(秘密鍵の所有者)のみがメッセージを読み取ることができることを知っています。これは古典的な「暗号化」です。2)秘密鍵で「暗号化」してから、公開鍵で「復号化」します。これはデジタル署名であり、認証を提供します。メッセージは誰でも読むことができますが、秘密鍵の所有者だけがメッセージを送信できます。

ライセンスがクライアントに合わせてカスタマイズされていると仮定すると(クライアントが生成した乱数のコピーを含めるのと同じくらい簡単な場合もあります)、他の人には役に立ちませんが、クライアントはサーバーがそれを送信したことを確認できます。

対称性は実際にはそれほどきれいではありません。動作モードが異なれば、弱点や落とし穴も異なるため、実装は通常大幅に異なりますが、それが一般的な考え方です。

暗号学における最初のそして最も重要な教訓の1つは、認証とそれをいつ使用するかを理解することです。それは少なくとも暗号化と同じくらい頻繁に必要であり、いつそれを使用するかわからないことはあなたを才能のある状況のためにミッドベールスクールに残します。

于 2010-06-05T07:03:35.517 に答える
1

1 人の受信者のみが読み取るものを暗号化する場合は、その受信者の公開鍵で暗号化し、受信者は秘密鍵を使用してそれを読み取ります。

複数の受信者に対して暗号化する場合は、秘密鍵で暗号化し、公開鍵を読み取れるようにしたい人に配布できます。これは通常、公開鍵にアクセスできる人なら誰でもそれを読み取ることができるため、「署名」と呼ばれます。したがって、これは実際には秘密通信の形式ではありません。

全体的により堅牢なソリューションは、アプリがインストールごとにキーペアを生成し、生成した公開キーをサーバーに送信し、それを使用して暗号化して、その単一のインストールのみがライセンスを使用できるようにすることです。あなたが作成しました(秘密鍵で復号化することにより)。

于 2010-06-04T15:10:48.767 に答える
1

少なくとも、一般的な公開鍵暗号化アルゴリズム (RSA など) では、公開鍵と秘密鍵の間に大きな違いはありません。キーを生成すると、2 つのキーが得られます。一方を非公開にし、もう一方を公開しますが、どちらを公開し、どちらを非公開にするかは問題ではありません。

1 つのキーで暗号化したものはすべて、もう 1 つのキーで復号化できます。通常の目的では、1 つの鍵を公開します。これにより、誰でも自分だけが復号化できるものを暗号化できます。ただし、技術的な観点からは、その逆も問題なく機能します。秘密鍵で何かを暗号化すると、公開鍵を持っている人なら誰でもそれを復号化できます。これは通常、署名の検証などに使用されます (つまり、公開鍵を持っている人なら誰でも、署名が秘密鍵で作成されている必要があることを検証できます)。ただし、通常は、暗号化と署名に別々のキー ペアを使用する必要があります。

あなたの場合、あなたが実際に何を達成しようとしているのか、いくつかの疑問が生じます。プログラムを使用するために必要な一部のデータは確かに暗号化できるため、ユーザーはそれを復号化してプログラムを使用するためのキーが必要になります。彼らにも鍵のコピーを渡すのを躊躇します。そのため、暗号化/復号化は機能しますが、実際の保護を提供することはほとんどありません.

より一般的なライセンス方式は、特定の IP アドレスなどに関連付けられているため、IP アドレスを暗号化するなどの処理を行い、その結果をキーとして使用して、プログラムを使用するために必要なデータを復号化します。IP アドレスが間違っていると、データが正しく復号化されず、プログラムが動作しません。ユーザーが静的 IP アドレスを持っている限り、これはうまく機能しますが、DHCP と組み合わせて問題を引き起こす可能性があります。

私の当面のアドバイスは、これをまったく行わないことです。どうせやりたがるなら、自分でやらないでください。FlexNetのようなものを手に入れてください。それがなくても良いのですが、少なくともこの方法では、そのような機能を得ることができ、ソフトウェアの改善などのより良い目的に費やすことができる時間と労力を無駄にすることはありません.

于 2010-06-04T15:39:56.857 に答える
0

ウィキペディアからのこのリンクが役立つことを願っています。PKIは相互信頼に基づいています。ただし、秘密鍵は所有者が保護する必要があります。パブリックはその名の通り、どなたでもご利用いただけます。アーキテクチャ全体は、上記の質問で定義されたシナリオを支援するために作成されています。

于 2010-07-08T09:24:04.910 に答える
0

公開/非公開 (非対称) 暗号化を使用している場合は、常に受信者の公開鍵で暗号化し、受信者は秘密鍵で復号化します。デジタル署名の場合は、秘密鍵で署名し、受信者は公開鍵で署名を検証します。

安全な DRM システムをどのように作成するのかという疑問が生じます。暗号化を使用し、受信者に秘密鍵を渡すと、受信者は鍵または復号化されたコンテンツのいずれかを配布できます。署名を使用すると、プログラムの署名検証部分を単純に取り除くことができます。

答えは、不可能です。DRM の概念には根本的な欠陥があります。

于 2010-06-04T15:10:14.337 に答える