web-dev-qa-db-ja.com

RaspberryPIのCryptsetupパーティションのセキュリティ

メモリ制限のため、RaspberryPiで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
Attilio

最初に、読んでいたLUKSドキュメントはLUKS1用に作成されており、現在はやや古くなっていることに注意してください。引用したもの(反復回数など)はすべて、パーティションがPBKDF2アルゴリズムに固有のものです実際には使用しません

LUKS2は、パスフレーズをキーに変換するための2つのアルゴリズムをサポートしています。従来のPBKDF2と新しいArgon2です。後者は、LUKSがデフォルトで使用するものであり、必要な(調整可能な)最小必要量のメモリを備えている唯一のものです。それは「反復回数」と同じではありません。

ただし、セキュリティレベルが低下する可能性があることを懸念しています(おそらく、計算能力が低いほど、より弱いキーが使用されます)。

キーの強度を調整しているのではなく、キーの保護を調整しているのです。

調整しているパラメータは、入力しているパスフレーズを攻撃しようとする誰かから保護することを目的としています。キーの導出プロセスを不可能なほど遅くすることで、ブルートフォース攻撃(つまり、さまざまなパスフレーズを続けて試行する)を防ぎます。

ただし、生成されたキーはそれ自体で常に同じように強力であり(他のAESキーと同じくらい優れています)、誰もそれを直接攻撃することはありません。

それが遅い場合、ロック解除のみが遅いのですか、それとも後の読み取り/書き込みは余分な反復がない場合と同じくらい速いですか? (もしそうなら、なぜですか?ロックを解除することによって、後でパーティション内のコンテンツを復号化するために使用されるキーのみを復号化するためですか?)

ボリュームのロックを解除するたびに、LUKSは「鍵導出関数」(KDF)を使用してパスフレーズを暗号化キーに変換し、プロセスがブルートフォース攻撃に対してより耐性を持つようにします。LUKS1は常に「PBKDF2」を使用します。 LUKS2は、代わりに一定量のRAMを必要とする「Argon2」を追加でサポートしますが、計算が遅いことを意味します(ただし、メモリ要件はありません)。

キーの導出は、ロック解除時に1回だけ行われます。残り(実際のデータ暗号化)には、パスフレーズを含める必要はまったくありません。

(言い換えると、Raspberry Piで使用できるように、パーティションを再作成したいと思います。デフォルト値では使用できますが、安全性は低くなります。反復回数を増やしても使用できますか、それとも使用できますか?再びメモリを消費しすぎますか?)

パスフレーズから派生したキーでさえデータを直接暗号化するために使用されないため、パーティションを再作成する必要はまったくありません。LUKSボリュームヘッダーに格納されているmasterキーのみを暗号化します。

これが、ディスク全体を再暗号化することなく(または複数のパスフレーズを持つことなく)パスフレーズをすばやく変更できる理由です。同様に、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(パスフレーズを変更する場合)で受け入れられます。実際、パスフレーズを変更するたびに指定する必要があるようです必要

1
user1686