暗号化設定について
暗号化設定の概要です。よく知られている項目やEncFSに依存しない項目は除外します。
PBKDF2の繰り返し処理に使用する時間
Wall-clock timeで繰り返し回数が決まるため、CPUの性能に依存します。1.6Ghzの64bit CPUで0.5秒間処理を行うと、約64000回程度です。
私の環境だと25万回程度です。
ブロックサイズ
仮想ファイルシステムのブロックサイズです。ブロックサイズ単位で暗号化と復号化を行います。
1byteでもデータを書き換える・読み込む必要がある場合は、ブロック全体が処理対象になります。
ブロックサイズを小さくするとランダムアクセス性能が上がりますが、データのスループットは落ちます。
ブロックサイズを大きくするとデータのスループットが上がりますが、ランダムアクセス性能は落ちます。
おすすめは1024byteです。
ファイル名の符号化方式
ブロック方式とストリーム方式があります。ブロック方式
ストリーム方式より暗号化後のファイル名が長くなりますが、暗号化後のファイル名からファイル名の長さが予測しにくくなります。デフォルト及びおすすめはブロック方式です。
ストリーム方式
ブロック方式の逆です。ブロック方式より暗号化後のファイル名が短くなりますが、暗号化後のファイル名からファイル名の長さが予測しやすくなります。
Filename IV chaining
ファイル名を暗号化する際に、ファイルパスの影響を受けるようになります。通常「/a/b/c.txt」 と「/d/e/c.txt」の暗号化後のファイル名は同じファイル名になります。
この機能を有効にするとパス名の影響を受けるため、暗号化後のファイル名は異なるファイル名になります。
セキュリティーの強度は上がりますが、親ディレクトリー名を変更するとそのディレクトリー内のファイル名が再暗号化されるため、処理に時間がかかるようになります。
もし再暗号化中にアクセス権がないなどのエラーが発生した場合、ディレクトリー名の変更はキャンセルされます。
ちなみにIVは「4」ではなく、「Initialization Vector」の略です。
デフォルトは有効です。
Unique initialization vector file headers
「Per-file initialization vectors」とも表現され、ファイルの暗号化処理を64bitのランダムな情報で変化させます。これにより中身が同じファイルであっても、暗号化されたファイルの中身は異なるようになります。
もしバイナリデータを比較されても、同じ中身のファイルかどうか判別されにくくなります。
デフォルトは有効です。
External IV Chaining
「Filename to IV header chaining」とも表現され、ファイルの暗号化時にファイルパスの影響を受けるようになります。これにより中身が同じファイルであっても、暗号化されたファイルの中身は異なるようになります。
もしバイナリデータを比較されても、同じ中身のファイルかどうか判別されにくくなります。
この機能を有効にするとハードリンクは作成出来なくなります。
ハードリンクを扱うアプリは動作しなくなるので注意が必要です。
またこれも「Filename IV chaining」と同じように、ファイル名変更時に似たような事情が発生します。
デフォルトは無効です。
Message Authentication Code block headers
「Block MAC headers」や「block authentication code headers」とも表現され、各ブロックにチェックサムを埋め込みます。チェックサムの計算をファイルの読み込み時と書き込みに行うためパフォーマンスは落ちますが、ファイルが壊れているかどうかEncFS側で検出できるようになります。
もしファイルが壊れていた場合、読み込み失敗エラーをアプリに返し、ログにエラー情報を書き出します。
残念ながら修復までは行いません。
デフォルトは無効です。
Block MAC RandBytes
「Block MAC headers」にランダムバイトを追加します。通常はブロックの内容が同じだとチェックサムの結果も同じになります。
ランダムバイトを追加することでチェックサムの結果が同じにならないようにし、セキュリティーの強度を上げます。
File-hole pass-through
ファイルホールは実際にデータを書き込むときにファイルシステムのブロックが割り当てられます。スパースファイルをイメージしてもらえれば良いです。
ファイルシステムのブロックが割り当てられると、ファイルホールではなくなります。
「File-hole pass-through」はファイルホールが作られた時にブロックを暗号化しません。
これによりパフォーマンスの低下を軽減することができます。
デフォルトは有効です。