
メモリ制限のため、Raspberry PIのLUKSパーティションの1つを開くことができません。この場合の提案は次の通りであることがすでにわかっています。最も遅いデバイスでパーティションを再作成し、そのデバイスからアクセスする(この場合は Raspberry PI)。
しかし、セキュリティ レベルが低下する可能性があることを懸念しています (おそらく、計算能力が低いため、より弱いキーが使用されるでしょう)。
cryptsetup のドキュメントでは、この問題について次のように述べられています。
注: パスフレーズの反復回数は、CPU パワーに応じて cryptsetup によって決定されます。低速デバイスでは、この回数は希望する回数よりも少なくなる場合があります。最近、Raspberry Pi でこの回数をベンチマークしたところ、一般的な PC の反復回数の約 1/15 でした。セキュリティを最優先する場合は、反復に費やす時間を増やすと、後でロック解除が遅くなります。Raspberry Pi の場合、
cryptsetup luksFormat -i 15000 <target device>
パスフレーズの繰り返しとマスターキーの繰り返しに関して、平均的なPCと同等の繰り返し回数とセキュリティレベルが得られます。疑わしい場合は、繰り返し回数を確認してください。
cryptsetup luksDump <target device>
要件が満たされるまで、異なる反復時間 (「-i」の後の数字はミリ秒単位の反復時間) でコンテナーを再度作成して、反復回数を調整します。
さて、上記のアドバイスに従うと何が起こるかわかりません。
- パーティションはPCと同じくらい安全ですか?(反復回数が正しい場合)ただ遅いだけ?
- 遅い場合、ロック解除だけが遅いのでしょうか、それともその後の読み取り/書き込みは追加の反復がない場合と同じくらい速いのでしょうか? (そうであれば、なぜでしょうか? ロック解除によって、後でパーティション内のコンテンツを復号化するのに使用されるキーのみが復号化されるためでしょうか?)
- それでも、高速 PC で作成されたパーティションよりもメモリ消費量は少なくなりますか? (言い換えると、Raspberry PI で使用できるようにパーティションを再作成したいのです。デフォルト値では使用可能ですが、セキュリティは低下します。反復回数を増やしても使用可能でしょうか、それとも再びメモリ消費量が多すぎますか?)
答え1
まず、あなたが読んでいたLUKSのドキュメントはLUKS1用に書かれたもので、今ではやや古くなっていることに注意してください。あなたが引用したすべて(例えば、反復回数)は、パーティションのPBKDF2アルゴリズムに固有のものです。実際には使用しません。
LUKS2 は、パスフレーズをキーに変換するための 2 つのアルゴリズム (従来の PBKDF2 と新しい Argon2) をサポートしています。後者は、LUKS が現在デフォルトで使用しているもので、必要なメモリ量が (調整可能) 最小限である唯一のアルゴリズムです。これは、「反復回数」とは異なります。
しかし、セキュリティ レベルが低下する可能性があることを懸念しています (おそらく、計算能力が低いため、より弱いキーが使用されるでしょう)。
キーの強さを調整するのではなく、キーの保護。
調整するパラメータは、入力したパスフレーズを攻撃しようとする者から保護するためのもので、キー導出プロセスを非常に遅くすることで、ブルートフォース攻撃(つまり、さまざまなパスフレーズを続けて試す攻撃)を防ぎます。
ただし、生成されたキーはそれ自体で常に同等の強度を持ち (他の AES キーと同じくらい強力)、誰もそれを直接攻撃しようとはしません。
遅い場合、ロック解除だけが遅いのでしょうか、それともその後の読み取り/書き込みは追加の反復がない場合と同じくらい速いのでしょうか? (そうであれば、なぜでしょうか? ロック解除によって、後でパーティション内のコンテンツを復号化するのに使用されるキーのみが復号化されるためでしょうか?)
ボリュームのロックを解除するたびに、LUKS は「キー導出関数」(KDF) を使用してパスフレーズを暗号化キーに変換します。これにより、ブルートフォース攻撃に対するプロセスの耐性が高まります。LUKS1 では常に、計算が遅い (ただしメモリ要件は課さない) ことで耐性のある「PBKDF2」が使用され、LUKS2 では代わりに一定量の RAM を必要とする「Argon2」もサポートされます。
キーの導出はロック解除時に 1 回だけ行われ、残りの部分 (実際のデータ暗号化) ではパスフレーズをまったく必要としません。
(言い換えると、Raspberry PI で使用できるようにパーティションを再作成したいということです。デフォルト値では使用可能ですが、セキュリティは低下します。反復回数を増やしてもまだ使用可能でしょうか、それとも再びメモリを大量に消費してしまうでしょうか?)
パスフレーズから派生したキーはデータを直接暗号化するのには使用されない為、パーティションを再作成する必要は全くありません。マスターLUKS ボリューム ヘッダーに保存されるキー。
このため、ディスク全体を再暗号化したり、複数のパスフレーズを用意したりすることなく、パスフレーズをすばやく変更することができ、同様に LUKS を使用すると KDF パラメータを簡単に変更できます。
デフォルトの Argon2 パラメータがメモリを大量に使用する場合は、LUKS にその旨を伝えます。
cryptsetup luksConvertKey --pbkdf "argon2i" --pbkdf-memory <num_kilobytes> <device>
Argon2 をまったく使用できない場合でも、代わりに PBKDF2 を使用するように LUKS に指示することができます。
cryptsetup luksConvertKey --pbkdf "pbkdf2" --iter-time <milliseconds> <device>
ミリ秒(デバイス依存)の代わりに、PBKDF2の数を直接指定することができます。反復必要な数(どのデバイスで実行しても同じ結果が得られます) – PC のデフォルトは約 100 万です。
cryptsetup luksConvertKey --pbkdf "pbkdf2" --pbkdf-force-iterations <count> <target>
同じオプションがluksChangeKey
(パスフレーズを変更するときに)受け入れられますが、実際には必要パスフレーズを変更するたびに指定する必要があります。