0

私は、アプリケーションにドングルベースのコピー防止スキームを実装する任務を負っています。私が何をしても、誰かがそれをクラックすることはわかっていますが、少なくとも、ドングルが存在するかどうかをチェックするifステートメントよりも少し難しくしたいと思います。

私のアプローチは、アプリケーションが適切に実行するために必要な重要なデータを暗号化することです。実行時に、復号化キーがドングルから取得され(選択したモデルには、それに適したAPI関数がいくつかあります)、データが復号化され、アプリケーションは正常に動作します。

もちろん、断固とした攻撃者はその復号化キーを傍受し、復号化されたデータを入手することもできます。それで大丈夫です。しかし、難しいのは、自分のデータを置き換えることです。そのため、復号化キーを知っていても誰かが自分のデータを暗号化できない暗号化スキームを探しています。

これは明らかに非対称暗号化です。しかし、これまでに見つけたそのようなアルゴリズムごとに、暗号化(または公開)鍵は復号化(または秘密)鍵から生成できます。これはまさに私が避けようとしていることです。

注:(私がそのような署名を完全に誤解していない限り)署名の検証は別のifステートメントであり、簡単に回避できるため、データに署名するだけではあまり役に立ちません。

だから...何かアイデアはありますか?

4

3 に答える 3

3

秘密鍵が攻撃者に知られている瞬間、他の人と区別するための秘密情報はありません。攻撃者を困難にするために:アプリケーション固有の時間Tの後に各ペア(公開鍵、秘密鍵)を期限切れにし、ドングルと自分のマシンの両方で、前のペアに基づいて新しいペアを個別に生成することができます。このように、攻撃者は、新しい秘密鍵でデータを暗号化できるようにするため、またはTと同じ頻度でprivate_key_detectionアルゴリズムを実行できるようにするために、ドングルに常時アクセスする必要があります。

于 2013-01-25T20:39:39.607 に答える
2

ドングルで復号化を実行することをお勧めします。これを支援するハードウェアがいくつかあります(たとえば、これをグーグルで検索しました)。他にも多くの可能性があります....ダラスセミコンダクターには、デバイスのような小さなドングルでコードを実行できるJavaボタンがありましたが、現在はそうではないと思います。

これらのいくつかは、ドングルでコードを実行することを可能にします。では、再現が難しく、高性能を必要としない重要な機能が機能するのではないでしょうか。おそらく、ライセンスキー検証アルゴリズムです。

プログラムを実行するためにメモリに配置する必要のあるコードをドングルに含めることができます。これを破るのは少し難しいでしょうが、プログラムを作成するために使用しているツールによっては、実装するのが難しい場合があります。

おそらく、いくつかのアンチデバッグの主題についても勉強したいと思うでしょう。しばらく前にいくつかの出版物を見たのを覚えていますが、ここに少なくとも1つあります。これは、割れにくくするもう1つの層です。

インターネット接続への依存もオプションかもしれません。ここでは、インターネットに接続せずにコードを実行できない場合に顧客を怒らせないように注意する必要があります。

FlexLM(または最近では何と呼ばれているものでも)をチェックアウトすることもできます。それは機能しますが、それは獣です。彼らはまた、私が正しく思い出せば、あなたの会社の粗利益の何パーセントかをライセンス料として交渉しようとします(何年も経っています...彼らがそれを求めたときにそれを詰めるように言ったと思います)。

幸運を!

于 2013-01-25T21:06:35.410 に答える
0

私自身の質問に(ある程度)答えるために、RSAでこれを行うことは可能ですが、ほとんどのAPI(OpenSSLの暗号ライブラリの1つを含む)はそれを行うために「だまされる」必要があります。秘密鍵を指定して公開鍵を生成できる理由は、

  1. RSAの実装では、秘密鍵データ構造にpとq(これらの大きな素数)を保存するのが一般的です。

  2. 公開鍵(モジュラスNといくつかの指数eで構成される)はとにかく公開されているため、(通常は)あいまいなeを選択しても意味がありません。したがって、3や65537など、一般的に使用される標準値がいくつかあります。したがって、pとqが不明な場合でも、公開指数を「推測」できる可能性があります。

ただし、RSAは、公開鍵で暗号化したものはすべて秘密鍵で復号化できるという意味で対称的であり、その逆も可能です。だから私がやったこと(私はモンスターです)は、暗号ライブラリにRSAキーを生成させることです。そこで、独自の公開指数を選択できます。これは、後で復号化に使用されます(通常の方法とは異なります)。次に、キーデータ構造のパブリック指数とプライベート指数を切り替えます。

暗号ライブラリで同様のことをしようとしている人のためのいくつかのヒント:

  1. RSAデータ構造で、特定のキーを使用して暗号化するか復号化するかに応じて、nとe/d以外のすべてをクリアします。

  2. RSA_blind_offでブラインドをオフにします。復号化する場合でも暗号化指数が必要ですが、これは私たちが望んでいることではありません。これにより、攻撃が発生する可能性があることに注意してください。

誰かがもっと助けを必要とするならば、コメントを残してください、そして、私はより多くの情報でこの投稿を編集します。

于 2013-01-29T10:51:31.047 に答える