--pbkdf argon2id
たとえば、とを--hash blake2b-512
選択すると
# printf 'YES' | cryptsetup luksFormat \
--type luks2 --key-file /tmp/keyfile \
--header /tmp/luks.header \
--cipher serpent-xts-plain64 --key-size 512 \
--use-random \
--hash blake2b-512 --pbkdf argon2id \
--pbkdf-force-iterations 4 \
--pbkdf-memory 32 --pbkdf-parallel 1 \
/dev/loop0
ヘッダーからargon2id
キーホームに移動します。ハッシュblake2b-512
値は次の目的に使用されます。消化。
消化は正確に何をしますか? ~からLUKS2仕様、それは言うダイジェストは、キースロットで復号化されたキーが正しいことを確認するために使用されます。私が正しく理解した場合、ダイジェストはパスワード/キーファイルを確認するためにのみ使用され、ボリュームマスターキーの生成とは関係ありません。
# cryptsetup luksDump /tmp/luks.header
LUKS header information
Version: 2
Epoch: 3
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: fa2562ec-b396-43b7-8d81-e5f4ffb96bb0
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)
Data segments:
0: crypt
offset: 0 [bytes]
length: (whole device)
cipher: serpent-xts-plain64
sector: 4096 [bytes]
Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: serpent-xts-plain64
Cipher key: 512 bits
PBKDF: argon2id
Time cost: 4
Memory: 32
Threads: 1
Salt: ab bc 1b 5b d9 19 2b ce 04 59 1c 31 97 cc 03 d9
13 5a 6f 54 6a 1b 81 b8 c6 93 0e 19 d1 a0 0c 15
AF stripes: 4000
AF hash: blake2b-512
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
Digests:
0: pbkdf2
Hash: blake2b-512
Iterations: 1000
Salt: 78 4e 17 12 70 f5 63 18 49 bf 79 24 9f 35 d2 7e
b0 e3 3e b2 85 5e 0e 64 9a 2e 31 9e 76 13 4e 24
Digest: bf 97 93 6b 6a 0c b6 58 bd c6 1e 3d 7b ec d3 d5
52 4d f7 f2 b5 9d 19 69 7d dd 7f aa 0c 90 bc 7e
4d 4c ad 2a 3a 4f dd 92 d7 d2 16 df ca 3b 57 8d
85 99 76 48 f6 59 fa 6a e2 dc 64 80 5f bc cc 35
を使用すると、luksDump --dump-master-key
512ビットを見ることができます。ボリュームマスターキー単純な16進数です。
# printf 'YES' | cryptsetup luksDump --dump-master-key --key-file /tmp/keyfile /tmp/luks.header
LUKS header information for /tmp/luks.header
Cipher name: serpent
Cipher mode: xts-plain64
Payload offset: 0
UUID: fa2562ec-b396-43b7-8d81-e5f4ffb96bb0
MK bits: 512
MK dump: 84 c3 c7 1d 8b bd f8 cd 29 5d 5d ee 08 10 da 70
0c 8e 45 af 9f 58 80 3d 49 46 e4 4d fe 75 37 c0
89 30 d4 fe a8 27 76 71 16 0c f2 4e aa d8 27 b4
6e c2 e4 f0 c6 5a 86 cf fe 35 ff fd f0 df e6 62
Argon2プログラムと既知のソルトを使用してボリュームマスターキーを生成してみました。 Argon(iteration count=4
、、、memory cost=32
および)で同じ設定を使用すると、parallel cost=1
同じハッシュ結果が得られません。
# eval 'cat /tmp/keyfile | argon2 '$(printf "\xab\xbc\x1b\x5b\xd9\x19\x2b\xce\x04\x59\x1c\x31\x97\xcc\x03\xd9\x13\x5a\x6f\x54\x6a\x1b\x81\xb8\xc6\x93\x0e\x19\xd1\xa0\x0c\x15")' -id -t 4 -m 5 -p 1 -l 64'
Type: Argon2id
Iterations: 4
Memory: 32 KiB
Parallelism: 1
Hash: 83ed8343d0539ba4f44fd79ac1becce1c7dd5001b7098f0cfb6a6cc7a07123890ccafb4cf8b7a8cb3ba1475e738f1268fb66eb89c42faf8460272878781cd952
Encoded: $argon2id$v=19$m=32,t=4,p=1$q7wbW9kZK84EWRwxl8wD2RNab1RqG4G4xpMOGdGgDBU$g+2DQ9BTm6T0T9eawb7M4cfdUAG3CY8M+2psx6BxI4kMyvtM+LeoyzuhR15zjxJo+2bricQvr4RgJyh4eBzZUg
0.000 seconds
Verification ok
LUKSはどのようにパスワードを取得し、Argon PBKDFにソルトし、ボリュームマスターキーを取得しますか?
答え1
Argon2プログラムと既知のソルトを使用してボリュームマスターキーを生成してみました。
パスワードとソルトから派生したキーは、キースロットに保存されているボリュームキーを復号化するために使用されます。LUKS1仕様、セクション2.4)。したがって、マスターキー自体ではなくマスターキーを復号化するために使用されるキーのみを生成しました。
私が正しく理解した場合、ダイジェストはパスワード/キーファイルを確認するためにのみ使用され、ボリュームマスターキーの生成とは関係ありません。
はい。キースロットから復号化されたキーを取得し、それを使用してダイジェストを計算し、計算されたダイジェストをヘッダーに格納されているダイジェスト(キースロットが初期化されるときに生成されます)と比較します。一致すると、提供されたパスワードは正しいものです。