LUKS2をLUKSバージョン1に変換し、拡張機能を変更して変換された機能を無効にすることはできますか?
Fedora 30はデフォルトでLUKS2を使用します。しかし、LUKSバージョン1に固執しなければならない状況に直面しました。具体的には、Relax-and-Recover( rear
) は現在 LUKS2 をサポートしていません。。
文書特定の条件下でLUKS2とLUKS1の間の変換が可能であると述べた。
内部変換フォーム LUKS1
新しいLUKS2形式へのテストと変換を容易にするために、LUKS1形式から内部変換を許可し、互換性のないオプションがない場合は、LUKS2からLUKS1形式への再変換を許可する新しい変換コマンドがあります。
このコマンドは一部のLUKS1デバイスでのみ機能します(一部のデバイスヘッダーサイズはサポートされていません)。このコマンドは危険ですので、ヘッダーバックアップなしで絶対に実行しないでください。変換中に失敗(IOエラー)が発生すると、ヘッダーが破損します。 (変換するには、キーホームデータ領域を別のオフセットに移動する必要があります。)
ヘッダーを LUKS2 形式に変換するには、
$cryptsetup Convert --type luks2 を使用します。LUKS1 形式に戻すには、
$cryptsetup Convert --type luks1 を使用します。luksDumpコマンドを使用して、LUKSのバージョンを確認できます。
$cryptsetupluksDump一部のLUKS2機能により、ヘッダーはLUKS1と互換性がなく、変換が拒否されます(例:新しいArgon2 PBKDFまたは整合性拡張)。変換中にいくつかのマイナーなプロパティが失われる可能性があります。
最後のビットは少なくともFedoraのデフォルト値のように見えるため、問題になります。
$ sudo cryptsetup convert /dev/sda3 --type luks1
WARNING!
========
This operation will convert /dev/sda3 to LUKS1 format.
Are you sure? (Type uppercase yes): YES
Cannot convert to LUKS1 format - keyslot 0 is not LUKS1 compatible.
$ sudo cryptsetup luksDump /dev/sda3
LUKS header information
Version: 2
Epoch: 3
Metadata area: 16384 [bytes]
Keyslots area: 16744448 [bytes]
UUID: 974b19f8-021a-46b6-a089-a46e06e6e746
Label: (no label)
Subsystem: (no subsystem)
Flags: (no flags)
Data segments:
0: crypt
offset: 16777216 [bytes]
length: (whole device)
cipher: aes-xts-plain64
sector: 512 [bytes]
Keyslots:
0: luks2
Key: 512 bits
Priority: normal
Cipher: aes-xts-plain64
Cipher key: 512 bits
PBKDF: argon2i
Time cost: 4
Memory: 973984
Threads: 4
Salt: af 33 7e 3b 6c bb 55 dc e3 dc 2b 07 c5 9e c3 6d
f2 c9 08 be 2f 1d 8b 78 8a 33 65 90 41 e3 05 10
AF stripes: 4000
AF hash: sha256
Area offset:32768 [bytes]
Area length:258048 [bytes]
Digest ID: 0
Tokens:
Digests:
0: pbkdf2
Hash: sha256
Iterations: 100361
Salt: d9 30 b6 7f 60 d0 e0 19 39 f6 a2 38 ae 22 88 43
1e 5c 74 75 e6 b5 dd db a9 e7 29 1a 74 64 9c 0f
Digest: ae 06 29 5f 71 49 bd c8 75 de 53 e8 95 94 d3 38
57 43 5f 0e 1e ac 6d 59 fb 34 a3 97 e4 5a 94 0c
答え1
LUKS1をLUKS2に変換し、LUKS1に戻すと正常に動作します。 LUKS2で始まり、LUKS1に変換すると問題が発生する可能性があります。明らかに、cryptsetup convert
LUKS2argon2i
キーとLUKS1キーのpbkdf2
間を変換する方法はありません。
設定:
# truncate -s 100M luks1.img
# truncate -s 100M luks2.img
# cryptsetup luksFormat --type luks1 luks1.img
# cryptsetup luksFormat --type luks2 luks2.img
もともとluks1でテストしました。
# cryptsetup convert luks1.img --type luks2
WARNING!
========
This operation will convert luks1.img to LUKS2 format.
Are you sure? (Type uppercase yes): YES
# cryptsetup convert luks1.img --type luks1
WARNING!
========
This operation will convert luks1.img to LUKS1 format.
Are you sure? (Type uppercase yes): YES
LUKS1 -> LUKS2 -> LUKS1が正しく機能するようにしました。
もともとluks2でテストしました。
# cryptsetup convert luks2.img --type luks1
WARNING!
========
This operation will convert luks2.img to LUKS1 format.
Are you sure? (Type uppercase yes): YES
Cannot convert to LUKS1 format - keyslot 0 is not LUKS1 compatible.
LUKS2 形式の別のキーを追加すると、元の luks1.img も同様です。
しかし、もともとluks1にargon2iキーを追加できたので、元luks2にpbkdfキーを追加できますか?ここにもいくつかの奇妙な問題がありましたが、試行錯誤の最後に次のような結果が得られました。
# cryptsetup luksConvertKey --pbkdf=pbkdf2 luks2.img
Enter passphrase for keyslot to be converted: I have a sudden craving for butternut biscuits.
これで動作します(これが唯一のキーである場合)。
# cryptsetup convert luks2.img --type luks1
WARNING!
========
This operation will convert luks2.img to LUKS1 format.
Are you sure? (Type uppercase yes): YES
しかし、もともとLUKS1ヘッダーと全く同じではありません(Payload offset: 32768
目に見えます)。 LUKS1は以前にデータオフセットを変更したため(元のMiBソートではない)、サードパーティ製のソフトウェアは異常なオフセットを処理できるはずですが、不明です。
LUKS2には(既存の再暗号化なしで)変換を無効にする他の機能もあるため、ここで説明されている方法は最も単純な場合にのみ適用されます。