web-dev-qa-db-ja.com

.encfs6.xmlなしでEncFSファイルを復号化できますか?

これは実際にはMac OS Xで起こりましたが、私は http://Apple.stackexchange.com ではなく、ここで答えを得ることができると思います

Encfsで暗号化されたディレクトリがあります。そこから誤って.encfs6.xmlを削除しました。

このディレクトリをencfsとしてマウントしたい場合、encfsはそこに新しい暗号化ボリュームを作成したいと考えています。新しいファイルを作成する代わりに、既存のファイルを開くように強制することはできますか?

もちろんパスワードは覚えています。

4
amorfis

.encfs6.xmlにはキーが含まれています。そのファイルを紛失すると、ファイルを復号化できなくなります。

暗号化キーはパスワードから派生したものではありません。パスワードから導出されるのは、encfs6.xmlに格納されているファイル暗号化キーの暗号化に使用されるキーです。これは標準的な方法です。これは、次の2つの理由で行われます。

  • セキュリティのため:パスワードは通常、エントロピーが低くなっています。通常、考えられるすべての可能性(12345678passwordiloveyouPassw0rd、…)を列挙することで見つけることができます。一方、キーはランダムに生成されます。正しいキーを推測するために無視できないチャンスがあることは、宇宙の時代よりも長くかかります。そのため、パスワードを推測する攻撃者は、キーファイル.encfs6.xmlも入手する必要があります。 (ただし、キーファイルが暗号化されたデータと一緒に保存されていない場合、これはあまりメリットがありません。)
  • 使いやすさのために:この方法では、パスワードを変更した場合、ソフトウェアは.encfs6.xmlを更新するだけで済み、すべてのファイルを再暗号化する必要はありません。

バックアップから.encfs6.xmlを復元します。

バックアップがない場合は、削除されたファイルを検索するフォレンジックツールを使用してバックアップを回復できる場合があります。もちろん、これが機能するとは限らず、機能しても必ずしも簡単ではありません。

すべてのソルトと反復回数を推測するアイデアがありましたが、元の既知のパスフレーズを使用して、.encfs6.xmlファイルを回復/再構築しましたが、欠落した<encodedKeyData>はありませんでした...テストを試しましたが、便利なサウンドオプション--anykeyを使用すると、次のようになります。

--anykey
キー検証チェックをオフにします。これにより、EncFSをセカンダリパスワードで使用できます。これは、暗号化されたファイルシステムに個別のファイルセットを格納するために使用できます。 EncFSは正しくデコードされないファイルを無視するため、個別のパスワードで作成されたファイルは、ファイルシステムが関連するパスワードでマウントされている場合にのみ表示されます。

.encfs6.xmlには、次のような情報が含まれています。

<encodedKeySize>44</encodedKeySize>
<encodedKeyData>
t+mDmS6qiUwJcUY2rX2oj6jMlfQ3QIiGPG2BRZspTUZiUOcKBxIq70uVILk=
</encodedKeyData>
<saltLen>20</saltLen>
<saltData>
9pmECBnKHDXpW+3E+Z7WO9xWwls=
</saltData>
<kdfIterations>147015</kdfIterations>
<desiredKDFDuration>500</desiredKDFDuration>

--anykeyは、encodedKeyDataと一致しない(別のデータに変更する)場合でも使用できる可能性があると考えましたが、元のパスフレーズを使用して元のファイルを読み取っています。のように、encodedKeyData以外のすべてのデータを覚えている/推測します。そこで、新しいEncFSフォルダとテストファイルを作成し、.encfs6.xmlファイルを編集して、<encodedKeyData>...</encodedKeyData>エントリを変更または削除してみました。

動作しませんでした、間違ったデータを使用すると、静かにマウントされますが、ファイルは復号化されませんでした。エントリの削除は次のエラーで失敗しました:

'boost :: archive :: iterators :: dataflow_exception'のインスタンスをスローした後、terminateが呼び出されました
what():base64文字セットにない値をデコードしようとしました
中止

--anykeyの唯一の使用法は、異なるパスワードを使用して一部のファイルを「隠す」ように見えます。ファイル名の暗号化を使用していると思いますが、元のencodingKeyDataが必要です。

また、<saltData>を1文字変更すると、encfs --anykeyも任意のパスフレーズで正常にマウントできますが、元のパスフレーズを使用しても、ファイルは復号化されず、エラーも発生しません。

つまり、あなたは100%NEED.encfs6.xmlファイルです。これは暗号化されたキーを持つキーファイルのようなものです(私が考えるLUKSヘッダーに似ています)。

1
Xen2050