2017-05-20 12 views
1

ないかもしれません鍵のセキュリティ - 鍵が安全であることを確認する方法は?

byte[] kek = new byte[32]; 
secureRandom.nextBytes(kek); 
byte[] kekHash = SHA512.hash(kek); 

...メモリ内にあり、ファイルまたはデータベースに書き込まれていない鍵暗号化鍵があると仮定するとし、キー暗号化キーが短命であると仮定し、データ暗号化キーがたり一過性である。

どのように保護しますかkek

kekが仮想メモリに書き込まれないようにするにはどうすればよいですか?

kekが他のアプリケーション(たとえばCheatEngine)で読み取られないようにするにはどうすればよいですか?

kekがアプリケーションによって生成され、kekおよびkekHashが他のアプリケーションによって操作されて敵の鍵を使用するようにするにはどうすればよいですか?

「ソフトウェアHSM」について聞いたことがあります。どのようなテクニックを使っているのですか?

答えて

1

暗号鍵を本当に保護したい場合は、ハードウェアセキュリティモジュール(HSM)を使用する必要があります。これらは、鍵を安全に保管できる物理的なデバイスです。それらの詳細についてはhereをご覧ください。

現在のシナリオでは、ソフトウェア(この場合はjava)を使用して暗号化キーを生成し、ソフトウェアで暗号化操作(暗号化/復号化)も実行します。しかし、HSMを使用する場合は、実際に鍵を生成してハードウェアに格納することになり、ソフトウェアではなくハードウェア自体で暗号操作を実行します。また、ソフトウェアがハードウェアと通信するために必要な多くの設定があります。したがって、HSMに入り、キーを見るのは簡単ではありません。これは、あなたがHSMをどのように使用するかという高レベルなだけです。 PKCS#11 APIは、通常、ハードウェアと対話するために使用されます。あなたはそれについてもっと読むことができますhere

これらのデバイスは、通常、3つの主要なフォームファクトリ(HSM(これらはサーバほど大きい)、USBトークン、スマートカード)で提供されます。これらのデバイスは、数百ドルから数千ドルで実行できます。

HSMの仕組みを試したい人や、余裕がない、あるいはプロジェクトのためにR & Dをやりたければ、SoftHSMを使うことができます。つまり、いつものように(PKCS#11を使用して)ハードウェアとやり取りするように、SoftHSMソフトウェアとやりとりしますが、実際にはキーはソフトウェアに格納されています。 SoftHSMは物理的なデバイスではないため、マシンにインストールするソフトウェアです。暗号操作もソフトウェア上で行われます。物理HSMと統合する準備ができたら、SoftHSMコードを使用してください。 SoftHSMのドキュメントhereを参照してください。

本当に鍵を安全に保管するために、HSMを使用することができます。しかし、あなたがソフトウェアを使用する場合、常にオープンエンドが存在します。あなたの暗号鍵を暗号化するスーパーマスター鍵を持っていても、スーパーマスター鍵をどこかに保存する必要があります。通常、Java KeyStoreに格納されます。 Java KeyStoreはパスワードで保護されているため、どこかに格納する必要があります。

これらの重要な操作を実行するコードを難読化することが、セキュリティを少し高めてもらうことができます。難読化さえも壊れることがありますが、それは時間がかかり、少し難しくなります。

+0

こんにちは、私はあなたが与えた答えを感謝します。私はHSMの経験がありますが、現時点ではソフトウェアソリューションを探していますが、Key Encryption Keyを保護するための念頭に置いている方法があります。さらに、難読化の提案を感謝しますが、ProGuardをJavaや他の市販の難読化ツールで使用することはかなり標準的だと言わざるを得ない。さらに重要なことに、Kirchoffの原則によれば、コード/システムの不明瞭さ/秘密によるキーの価値とセキュリティは受け入れられないことを除いて、敵がシステムの完全な知識を持っていると仮定しています。 – user3635998