既存のdm-crypt LUKSデバイスのハッシュ仕様と反復時間を変更するにはどうすればよいですか?


11

既存の dm-crypt LUKSデバイスのハッシュ仕様と反復時間を変更するにはどうすればよいですか?

明らかに、たとえば次のような新しいデバイスを作成する場合、オプションを渡すことができます。

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

しかし、デバイスが既に存在する場合、デバイスを「破壊」せずに、たとえば反復時間を変更sha256sha1たり、変更したりする方法 (明らかに、新しいハッシュが生成されるため、パスワードを再入力する必要があります。)


私の質問であなたは何を理解していませんか?
学生の

私だけかもしれませんが、少なくとも、マニュアルページやチュートリアル、または何が何でhash-specあるか、またはiter-time設定がより具体的であることを追及しようとしているものを参照して、1文Q w / oを尋ねることは失礼です。
slm

以前Qで一緒に作業したことがあると思います(そして、あなたは通常それらに優れた詳細を入れました)そして、今度はあなたがしなかったことに油断しました。
slm

この場合の詳細情報はなく、manページで必要な情報が見つかりませんでした...
学生

2
また、そこにある別のツールの言及はcryptsetup-reencrypt。箇条書きリストは、あなたが私にしようとしていることのように聞こえます。
slm

回答:


6

各キースロットには、独自の反復時間があります。反復回数を変更する場合は、同じパスフレーズと新しい反復回数で新しいスロットを作成してから、古いスロットを削除します。

cryptsetup -i 100000 --key-slot 2 luksAddKey $device
cryptsetup luksKillSlot $device 1

ハッシュアルゴリズムはスロットごとに構成できないと思います。常にグローバルに選択されたハッシュ関数を使用するPBKDF2です。

cryptsetupの最近のバージョンにはcryptsetup-reencrypt、メインの暗号化キーとすべてのパラメーターを変更できるツールが含まれていますが、実験的なものと見なされています(パスワードベースのキー導出関数を変更するだけで十分ではない場合でも、デバイス全体を再暗号化します)。 。


9

変更したいのがハッシュだけの場合は、再暗号化する必要はありません。ただし、新しいLUKSヘッダーを作成する必要があります。同じ暗号、同じマスターキー、同じオフセット、異なるハッシュ。

これを自分で試すことができます。最初に、LUKSデバイスを標準設定とお粗末な反復回数でセットアップします。

# truncate -s 8M /dev/shm/foobar
# cryptsetup --iter-time=42 luksFormat /dev/shm/foobar

WARNING!
========
This will overwrite data on /dev/shm/foobar irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: 
Verify passphrase: 
# cryptsetup luksOpen /dev/shm/foobar foobar
Enter passphrase for /dev/shm/foobar: 
# shred -z /dev/mapper/foobar
# echo Hello World I am LUKS > /dev/mapper/foobar
# strings /dev/mapper/foobar
Hello World I am LUKS
# cryptsetup luksClose foobar

この時点で、暗号化されたデータ「Hello World I am LUKS」を含むLUKSデバイスがあります。特に、次のようになります。

# cryptsetup luksDump /dev/shm/foobar
LUKS header information for /dev/shm/foobar

Version:        1
Cipher name:    aes
Cipher mode:    xts-plain64
Hash spec:      sha1
Payload offset: 4096
MK bits:        256
MK digest:      30 87 62 81 8e 8f a9 15 68 e0 82 c0 dc ee 19 54 9b f2 eb 5c 
MK salt:        c3 e0 28 53 67 10 13 d4 43 e3 7b d1 ce 62 6b e3 
                58 85 ee 67 71 76 b6 48 78 a8 34 71 58 71 21 f8 
MK iterations:  6175
UUID:           14a0a11d-0890-433e-bdcb-d2d1f5281bc2

Key Slot 0: ENABLED
    Iterations:             26033
    Salt:                   a1 7b 2b 5b 3d 8c 3c d1 3b 57 61 5a df 25 47 c8 
                            29 97 62 09 08 2b e1 b2 af 61 56 80 2f af a6 ae 
    Key material offset:    8
    AF stripes:             4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

ご覧のように、お粗末な繰り返しが重要であり、標準のsha1ハッシュです。

再暗号化せずに、それを高い反復回数とsha512ハッシュに切り替えるには、同じマスターキー、同じ暗号、同じペイロードオフセットを使用する新しいLUKSヘッダーが必要です。

マスターキーの取得:(警告:この例では、マスターキーを世界中の読み取り可能なファイル、プロセスリスト、およびシェルの履歴にリークします。安全のために、RAM /ライブCD /その他で実行してください)

# cryptsetup --dump-master-key luksDump /dev/shm/foobar

WARNING!
========
Header dump with volume key is sensitive information
which allows access to encrypted partition without passphrase.
This dump should be always stored encrypted on safe place.

Are you sure? (Type uppercase yes): YES
Enter passphrase: 
LUKS header information for /dev/shm/foobar
Cipher name:    aes
Cipher mode:    xts-plain64
Payload offset: 4096
UUID:           14a0a11d-0890-433e-bdcb-d2d1f5281bc2
MK bits:        256
MK dump:    eb aa 57 2d 42 93 fe 90 00 b9 d2 e0 e0 7b 73 26 
            4b 64 1b 8b 8e 61 75 84 1b c3 d6 f7 3f 03 d2 14 

# printf '\xeb\xaa\x57\x2d\x42\x93\xfe\x90\x00\xb9\xd2\xe0\xe0\x7b\x73\x26\x4b\x64\x1b\x8b\x8e\x61\x75\x84\x1b\xc3\xd6\xf7\x3f\x03\xd2\x14' > /dev/shm/masterkey
# hexdump -C /dev/shm/masterkey
00000000  eb aa 57 2d 42 93 fe 90  00 b9 d2 e0 e0 7b 73 26  |..W-B........{s&|
00000010  4b 64 1b 8b 8e 61 75 84  1b c3 d6 f7 3f 03 d2 14  |Kd...au.....?...|
00000020

このキーを使用して新しいLUKSヘッダーを作成します:(失敗する可能性があります-最初に古いLUKSヘッダーのバックアップを作成してください!)

# cryptsetup --master-key-file=/dev/shm/masterkey --iter-time=5000 --hash=sha512 luksFormat /dev/shm/foobar

WARNING!
========
This will overwrite data on /dev/shm/foobar irrevocably.

Are you sure? (Type uppercase yes): YES
Enter passphrase: 
Verify passphrase: 

そして、それはそれがどのように見えるかです:

# cryptsetup luksDump /dev/shm/foobar
LUKS header information for /dev/shm/foobar

Version:        1
Cipher name:    aes
Cipher mode:    xts-plain64
Hash spec:      sha512
Payload offset: 4096
MK bits:        256
MK digest:      47 ab 7b c6 41 b0 7c d8 af 3c a0 a4 23 e6 72 87 9c 0f c6 a0 
MK salt:        32 49 a5 b5 cb 4d 8a d7 25 69 72 ae e5 b2 9e 9d 
                14 09 00 1d 01 f3 c9 99 da e1 6c fc 69 78 e4 64 
MK iterations:  393750
UUID:           fd554ae8-a862-4609-8327-c6dd65ee9a83

Key Slot 0: ENABLED
    Iterations:             1578295
    Salt:                   e5 75 1c 1f 63 1d c6 0b d9 27 1a b1 27 85 b9 c1 
                            89 e8 57 95 2a c8 a0 24 9c 29 c0 f2 27 d7 2f 9a 
    Key material offset:    8
    AF stripes:             4000
Key Slot 1: DISABLED
Key Slot 2: DISABLED
Key Slot 3: DISABLED
Key Slot 4: DISABLED
Key Slot 5: DISABLED
Key Slot 6: DISABLED
Key Slot 7: DISABLED

今それがあります。同じ暗号、オフセット[異なる場合は、luksFormatとともに指定する必要があります]、新しいハッシュ、適切な反復回数。

しかし、コンテンツはまだそこにありますか?

# cryptsetup luksOpen /dev/shm/foobar foobar
Enter passphrase for /dev/shm/foobar: 
# strings /dev/mapper/foobar
Hello World I am LUKS

どうぞ。


6
cryptsetup-reencrypt --keep-key --hash sha512同じことをします。
frostschutz
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.