LUKSがハッシュを生成する必要があるのはなぜですか?

LUKSがハッシュを生成する必要があるのはなぜですか?

新しいLUKSデバイスを作成する場合は、オプション-hashとを指定できます-iter-time

たとえば、

 sudo cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 --iter-time 2100 --hash sha512 /dev/loop0

cryptsetupのマンページから:

--ハッシュ、-h

生成操作の場合、パスワードハッシュに使用されるハッシュを指定します。

luksFormat 操作の場合は、LUKS キー設定スキームとボリュームキーダイジェストに使用されるハッシュを指定します。

最初の文のために、私はハッシュが指定されたアルゴリズム(例えばsha512)によって生成される標準のLinuxシステムと同様の方法でハッシュが使用されると素朴に仮定しました。ハッシュを持っていて事前攻撃を試みたい攻撃者がより難しくするために、ハッシュをソルトし、アルゴリズムをn回繰り返して計算時間を長くします。この場合、has値はに保存されます/etc/shadow。ユーザーがログインすると、ハッシュ値が計算され、/etc/shadowsファイルの値と比較されます。同じ場合、ユーザーはログインできます。同様に、ファイルを所有する攻撃者(ソルト値も知っています)は、辞書の単語に基づいてハッシュを計算し、特定の文字列が一致するまで/etc/shadowファイルの値と比較することができます。/etc/shadow

LUKSのハッシュが同様の方法で使用されている場合は、どこかにパーティションヘッダーに保存する必要があり、何らかの理由で攻撃者がパーティションヘッダー(または保存されたファイル)にアクセスできるとします。 )、彼は上記のような方法を使用してパスワードを見つけることができます。これは、ハッシュ値を取得する方法に関する質問につながります。LUKSデバイスのハッシュ値を抽出する方法は?

LUKSシステムがどのように機能するかを考えてみると、それが使用される方法ではないと思います。代わりに、パスワードは暗号化キーとしてのみ使用され(ハッシュはどこにも保存されません)、ヘッダーに暗号化されて保存されるようです。ただし、LUKSのマニュアルページでは、キーの暗号化に使用する暗号化アルゴリズムとそれを変更する方法についてのヒントが見つかりませんでした。 (このオプションは、--cipher aes-cbc-essiv:sha256 --key-size 256キーではなくパーティションを暗号化するために使用される実際のアルゴリズムを表します。)これは私にもこの理解が間違っていることを示唆しています。

それでは、これらすべてが正確にどのように機能し、上記のハッシュの目的は何ですか?誰かが上記の誤解を明確にすることができれば良いでしょう(そしていくつかの参考資料があるかもしれません)。

ベストアンサー1

LUKS形式には複数のキースロットがあり、各スロットにはデータを暗号化するための暗号化マスターキーを含めることができます。このマスターキーは、パスワードから派生した他のキーを使用して暗号化されます。

通常のキーを使用してhash_function(passphrase)キーを生成するのは愚かです。 sha1のようなハッシュはすぐに計算できるからです(SHA-1りんごメッセージを検証するアルゴリズムいいえ一般パスワードとして使用されます。)

パスワードベースのデータ暗号化では、無差別代入攻撃を防ぐために機能が遅くなることを望みます。これを行うには、PBKDF2(パスワードベースのキー派生関数)を使用してください(情報を参照)。このSec.SEの質問やる気やその他の例)。

derivedKey = PBKDF2(hash_function, passphrase, salt, iterations, derivedKeyLen)

私がインストールしたhash_functionは次のようにsha1ですcryptsetup --help

Default compiled-in key and passphrase parameters:
        Maximum keyfile size: 8192kB, Maximum interactive passphrase length 512 (characters)
Default PBKDF2 iteration time for LUKS: 1000 (ms)

Default compiled-in device cipher parameters:
        loop-AES: aes, Key 256 bits
        plain: aes-cbc-essiv:sha256, Key: 256 bits, Password hashing: ripemd160
        LUKS1: aes-xts-plain64, Key: 256 bits, LUKS header hashing: sha1, RNG: /dev/urandom

エクスポートされるキーの長さは、データの暗号化に使用されるパスワードによって異なります。反復回数はプロセッサ速度に依存する。

これらの詳細はcryptsetupのマニュアルページにあります(pbkdf2ではビープ音が鳴る必要があります)。追加のセキュリティの詳細については、次を参照してください。パスワード設定に関するよくある質問

おすすめ記事