2011-06-28 17 views
1

いくつかのオナニー化は、他の人がそれを逆コンパイルしてコードから秘密情報を抽出するのを避けるために、Javaバイトコードを難読化するために行っています。Javaバイトコードを難読化するのではなく、なぜ暗号化しないのですか?

これは実現不可能でしょうか?この問題に直面する非対称暗号化?つまり、OracleはJVMに証明書と、この証明書の秘密鍵を使用して暗号化されたクラス・ファイルを復号化できるClassLoaderを装備することはできないでしょうか?

当然のことながら、このクラスは、この「ユニークなオラクル証明書」の公開鍵を使用してで暗号化されていました。

秘密鍵はJVM内にあります。

私はJVMの内部でこの秘密鍵を保護することは数学的に可能ではないかもしれないと考えています(それを暗号化していきます...)、これは最終的にハッキングされるでしょう...

+0

これはDVDやBlu-Ray暗号化のようなものです。 – Yishai

+0

攻撃者が受信者である場合(または受信者とそのすべての秘密を完全に制御できる場合)には、一般的に何も保護することは不可能です。最高の場合、決定された攻撃者だけを遅延させることができます。 – hammar

答えて

2

私は多分順番にそれを暗号化するJVM(内部この秘密鍵を保護するために、数学的に不可能であることを仮定します。 ..)、そしてそれは最終的にハッキングされるだろう...これはこの場合ですか?

本質的には、はい。

対称アルゴリズムを使用してキーをJVMに格納すると、リバースエンジニアリングしてそれらを見つけるのは簡単です。あなたがそれらを隠すために難読化を採用するならば、それほど簡単ではありませんが、それでもやり遂げることができます。

公開鍵暗号では、復号化を行う鍵をどこかに再度保存する必要があります。これは本質的にストレージの重要な問題であり、ハードウェアに問題をリバースエンジニアリングするのは困難です。それでも、彼らは壊れてしまいます。

My answer有効なDRM保護方法に関するITセキュリティについては、もう少し詳しく説明します。

5

秘密鍵がJVMの内部にある場合、その鍵がリバースエンジニアリングを使用していることを得るために、ハッカーやクラッカーには数分かかるでしょう。

さらに、クラスをロードする必要があるたびに非対称暗号化を使用する必要がある場合、クラスローダーはおそらく非常に遅いでしょう。

+0

はい、私は暗号鍵が 'ClassLoader'(HTTPS照会)に送られ、クラスファイル(URIClassLoaderを使って別のHTTPS接続を介して送られたもの)を解読できる会社を見ました。技術的に実現可能であっても、複数の障害点などの重大な欠点があります。 – Riduidel

+1

はい。それは本当に間違いなく面白いです。しかし、それはクラスローダーを大いに遅くさせるでしょう。クラスのコンテンツを本当に本当に本当に必要とする特定のシナリオでは役に立ちそうですね。 –

+0

効率性の問題では、SYMMETRICキーの暗号化にASYMMETRICアプローチを使用し、この対称キーを使用してコードを暗号化するという戦略が考えられます。その後、ClassLoaderはこのシムメトリック・キーを効率的に解読し、それを使用します(httpsと同じ方法)。 JVMをリバースエンジニアリングして秘密鍵を取得するには...誰かがこのハッキングを回避するための戦略を提示して、このアプローチを実現可能にするためにちょっと待っています。 – edutesoy

1

いずれの場合でも、クライアントマシン(例:JVM)でプライベート証明書を保護することは不可能です。あなたはどう思いますか?プレーンテキストファイルであれば、明らかに抽出することができます。それが暗号化されていれば、JVMがコード保護のために秘密の証明書を使用できるように、「第2レベル」の鍵もクライアントマシン上になければなりません。だからあなたはその鍵を、そしてその結果として秘密の証明書をも抽出することができます。

1

署名スキームが壊れにくい場合は、鍵にアクセスできないようにする必要があります。

完全なプログラムをお持ちの場合、これはプログラマーのために抽出するのが難しくありません。実際にこれを行うことができるどのプラットフォームでも、プログラマーの手の届かないところに鍵があります。

あなたはエアポートエクスプレス面白いから秘密鍵を得ることについて、この物語を見つけるかもしれない:http://mafipulation.org/blagoblig/2011/04/08#shairport

1

Oracle JVMが唯一のJVMではないことを忘れないでください。すべてのJVMは、Javaの基本原則である「一度書いてどこでも実行する」を保証するために、標準(Java Virtual Machine Specification)に準拠する必要があります。このような秘密鍵を使用すると、oracle jvmは他のすべての実装とは異なる動作をします。

1

コードが暗号化されている場合は、ある時点で暗号化を解除する必要があります。それは単純な同音異義語です。しかし、難読化は多くの場合不可逆的です。

関連する問題