해시 사양 및 반복 시간을 변경하는 방법기존의dm-crypt LUKS 장치?
분명히 하나를 만들면 옵션을 전달할 수 있습니다새로운장치 예:
sudo cryptsetup luksFormat --cipher aes-cbc-essiv:sha256 --key-size 256 --iter-time 2100 --hash sha512 /dev/loop0
그러나 장치가 이미 존재하는 경우 장치를 "중단"하지 않고 반복 시간을 변경 sha256
하거나 변경할 수 있는 방법은 무엇입니까? sha1
(물론 새로운 해시가 생성되므로 비밀번호를 다시 입력해야 합니다.)
답변1
해시만 변경하려는 경우에는 다시 암호화할 필요가 없습니다. 그러나 여전히 새로운 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/Live 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
그러면 그렇게 해.
답변2
각 키웨이에는 고유한 반복 시간이 있습니다. 반복 횟수를 변경하려면 동일한 비밀번호와 새 반복 번호로 새 슬롯을 만든 다음 이전 슬롯을 삭제하세요.
cryptsetup -i 100000 --key-slot 2 luksAddKey $device
cryptsetup luksKillSlot $device 1
해싱 알고리즘은 슬롯별로 구성할 수 없으며 항상 전역적으로 선택된 해시 함수를 사용하는 PBKDF2입니다.
최신 버전의 cryptsetup마스터 암호화 키와 모든 매개변수를 변경할 수 있는 도구가 포함되어 있지만 cryptsetup-reencrypt
이는 실험적인 것으로 간주됩니다(비밀번호 기반 키 파생 기능을 변경하는 데 꼭 필요한 것은 아니지만 전체 장치를 다시 암호화합니다).