Raspberry PI 上の Cryptsetup パーティションのセキュリティ

Raspberry PI 上の Cryptsetup パーティションのセキュリティ

メモリ制限のため、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」の後の数字はミリ秒単位の反復時間) でコンテナーを再度作成して、反復回数を調整します。

さて、上記のアドバイスに従うと何が起こるかわかりません。

  1. パーティションはPCと同じくらい安全ですか?(反復回数が正しい場合)ただ遅いだけ?
  2. 遅い場合、ロック解除だけが遅いのでしょうか、それともその後の読み取り/書き込みは追加の反復がない場合と同じくらい速いのでしょうか? (そうであれば、なぜでしょうか? ロック解除によって、後でパーティション内のコンテンツを復号化するのに使用されるキーのみが復号化されるためでしょうか?)
  3. それでも、高速 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(パスフレーズを変更するときに)受け入れられますが、実際には必要パスフレーズを変更するたびに指定する必要があります。

関連情報