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 convertLUKS2 argon2i키와 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에는 (기존 재암호화 없이) 변환을 불가능하게 만드는 다른 기능도 있으므로 여기에 설명된 방법은 가장 간단한 경우에만 적용됩니다.

관련 정보