2011-07-19 4 views

答えて

1

これはJavaの問題ではなく、暗号化の問題です。 EncFSの簡単な調査では、ボリュームキーはユーザーパスワードから派生したキーで暗号化されていることを示しています。これは最も良い攻撃ベクトルである可能性が高いです:うまくいけば脆弱なパスワードであることに対するブルートフォース攻撃。しかし、私はあまりにも多くの希望を持っていません。

Java JCEクラスjavax.cryptoは、Javaで対称暗号化を実行するためのルートになります。次のコードスニペットは、平文のキーで、いくつかのAES復号を実行する方法を示しています。あなたは、ボリュームキーのための潜在的な候補として平文の値を使用する必要があります

byte[] keyBytes = ... 
byte[] volumeKeyFileContents = ... 

SecretKeyFactory factory = SecretKeyFactory.getInstance("AES"); 
SecretKey aesKey = factory.generateSecret(new SecretKeySpec(keyBytes, "AES")); 

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding"); // for example 
cipher.init(Cipher.DECRYPT_MODE, aesKey); 
byte[] plaintext = cipher.doFinal(volumeKeyFileContents); 

// (written from memory so may not compile without tweaks) 

。明らかに、これは単純化された解法であり、多くの前提があります。これらのボリュームキーファイルの形式と、暗号化されたコピーの作成時に使用されるアルゴリズム、モード、およびパディングをより詳細に調査する必要があります。

幸運。

関連する問題