LUKS2をLUKSバージョン1に戻す

LUKS2をLUKSバージョン1に戻す

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 convertLUKS2argon2iキーと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には(既存の再暗号化なしで)変換を無効にする他の機能もあるため、ここで説明されている方法は最も単純な場合にのみ適用されます。

関連情報