USB 스틱의 첫 번째 파티션 앞의 공간을 luks 키로 사용하십시오.

USB 스틱의 첫 번째 파티션 앞의 공간을 luks 키로 사용하십시오.

저는 아치 리눅스와 암호화된 luks 루트 파티션(암호화되지 않은 부팅)을 비밀번호와 함께 사용하고 있습니다. 이제 다음과 같이 USB 스틱에 기록되는 키 파일(3072바이트)이 있습니다.

sudo dd if=tempKeyFile.bin of=/dev/sdd bs=512 seek=1 count=6

추가 패스로 설정

sudo cryptsetup luksAddKey /dev/sdb6 tempKeyFile.bin

다음 명령을 사용하여 파티션을 수동으로 열 때:

sudo cryptsetup --key-file tempKeyFile.bin open /dev/sdb6 luks_root

모든 것이 잘 작동하고 파티션이 매핑되고 마운트 가능합니다. 이제 내 커널 매개변수 라인은 grub.cfg다음과 같습니다:

linux /vmlinuz-linux root=UUID=$UUID_OF_luks_root$ rw cryptdevice=UUID=$UUID_OF_sdb6$:luks_root cryptkey=/dev/sdd:1:6

하지만 시작할 때 다음 오류가 발생합니다.

No key available with this passphrase. Invalid Keyfile. Reverting to passphrase.

1 대신 오프셋 2를 시도했지만 결과는 동일합니다. 키 파일을 찾거나 읽을 수 없다고 말하는 대신 잘못된 내용이라는 것을 알았습니다.

luks 키 파일을 저장하는 방법에 대한 문서는 거의 없는 것 같습니다. Arch-wiki에서는 이에 대해 언급하고 있지만 매우 간략하게 언급하고 있으며 저도 동의하는 것 같으니 이것이 가능해야 한다고 생각합니다.

mkinitcpio.conf모듈에서는 바이너리와 파일이 비어 있고 다음과 같이 설정했습니다.

HOOKS=(base udev autodetect keyboard modconf block encrypt filesystems fsck)

따라서 블록은 암호화 직전입니다.

여기서 문제가 무엇입니까?

답변1

ArchLinux CryptoHooks에서( /lib/initcpio/hooks/encrypt):

*)
    # Read raw data from the block device
    # ckarg1 is numeric: ckarg1=offset, ckarg2=length
    dd if="$resolved" of="$ckeyfile" bs=1 skip="$ckarg1" count="$ckarg2" >/dev/null 2>&1
    ;;

따라서 원시 블록 장치에서 키 읽기를 지원하지만 블록 크기는 1(기본값 512 대신)을 사용하므로 작동하려면 값에 512를 곱해야 합니다.

cryptkey=/dev/sdd:1:6그래서 노력하는 대신 cryptkey=/dev/sdd:512:3072.

관련 정보