
新しい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ではビープ音が鳴る必要があります)。追加のセキュリティの詳細については、次を参照してください。パスワード設定に関するよくある質問。
答え2
そうですね。暗号資格情報の保存と認証資格情報の保存は異なる問題です。
ユーザーがログインすると、オペレーティングシステムには、ユーザーが入力したパスワードと比較できるパスワードの参照コピーが必要です。入力したパスワードが参照パスワードと同じ場合、認証は成功します。パスワードの回復を困難にするために、システムはパスワードを保存しません。ハッシュ(遅いソルトハッシュを使用すると、無差別パスワードの代入の試みがはるかに困難になります。)
暗号化は異なる動作をします。その目的は、ストレージにアクセスする攻撃者から保護することです。したがって、暗号化キーはデバイスに保存されているものからのみ抽出できません。したがって、キーは、デバイスに保存されるのではなく、デバイスに保存された情報とユーザーから提供された情報を組み合わせて構成されます。通常、キーは、ユーザーが提供したパスワードと組み合わせたデバイスに保存されているソルトに基づいて生成されます。さらに、無差別攻撃の試行を遅らせるには、これらの値を組み合わせるプロセスを遅くする必要があり、ユーザーのパスワードに加えてデバイス固有の値(ソルト)を使用し、同じパスワードを使用しても同じキーが発生しないようにする必要があります。 。
暗号化の観点からは、低速パスワードハッシュと低速キー派生機能は同じ問題であることがわかりました。キーストレッチ。ラックス用PBKDF2は事実上の標準キー拡張機能の1つです(パスワードクラッキングの技術的な進歩により、bcryptまたはscryptがより好まれますが)。最新のUNIXシステムは同様のメカニズムを使用しています。パスワードハッシュ(「MD5」または「SHA-512」は実際に反復的であり、PBKDF2と構造が類似している。)
ユーザーが提供したパスワードが正しくない場合、データの復号化はガベージを返します。
他のほとんどの暗号化メカニズムと同様に、LUKS は暗号派生鍵をデータ暗号化鍵として使用しません。代わりに、データ暗号化キーはデバイスが作成されたときにランダムに生成されますが、直接保存されません。 LUKSはそのキーを使用して、暗号化された各パスワード派生キーのコピーを保存します。 LUKS用語では、各パスワード派生キーはボリュームヘッダーの位置を占めます。各スロットはパスワードに対応します。あなたは読むことができますTKS1紙2階層暗号化方式の詳細です。