0

暗号化された形式でライセンスをユーザーに送信できる小さなプログラムを作成しました。

現時点で私が持っている

  • AES キーを暗号化する RSA 秘密キー
  • データを暗号化する単一の AES/CBC キー
  • RSA 公開鍵

AES と公開キーの両方がデバイスにハード コードされています。

ライセンスが要求された場合、IV をどのように処理すればよいですか? デバイス上に静的なライセンスを作成するか、新しいライセンスを作成するたびに新しいライセンスを送信する必要がありますか?

4

2 に答える 2

2

あなたが何をしようとしているのか理解できれば、ほとんどのライセンススキームと同様に、それは基本的にDRMスキームです。暗号化の問題だけを取り上げますが、もちろん、ハッカーからかくれんぼをするという問題もあります。暗号化の意味で(おそらくセキュリティハードウェアが関与していない限り)測定可能なセキュリティを提供するDRMスキームはないことを知っておく必要がありますが、それでも一般的であり、一部の開発者はその背後にあるロジックに慣れています。

あなたがしたいのは、ライセンスデータを生成し、ユーザーが正当なユーザーから有効なライセンスファイルを単にコピーすることを防ぐいくつかの情報を含めることです。例としては、MACアドレス、電話番号などがあります。次に、このデータに署名します。ライセンスは、暗号化されていないライセンスと署名バイトで構成されます。ユーザー側では、インストールソフトウェアがハードコードされた公開鍵を使用して署名を検証し、その他のチェック(MACアドレスの一致、電話番号の一致など)を実行します。

これはスキームの中核であり、ほとんどの開発者にとっては十分です。かくれんぼゲームでどこまで行きたいかに応じて、このコアを取得し、暗号化、分割などを含むアドホックを使用してさらに難読化することができます。

編集:

私が提案をすることができれば、「Javaで暗号化を始める」という本は賢明な投資になると思います。Bouncycastleライブラリを使用した例が含まれています。同じWebサイトから無料でサンプルをダウンロードできます。

于 2010-07-05T13:28:19.767 に答える
2

Isn't this proposal totally silly?

You should encrypt with RSA public keys not with a private key. If you encrypt with a private key as you propose then everyone with access to the public key will learn the AES key and will be able to decrypt or forge anything. Of course for the same reason you should also not use the same AES key for distinct receivers.

And to answer the question, you should use a new random IV for each AES/CBC encryption.

于 2010-07-05T12:00:36.777 に答える