처음에 대화형으로 암호를 설정한 암호화된 볼륨이 있는데 파티션의 암호가 정상적으로 해독되었습니다. 두 가지 방법으로 키 파일을 사용하여 더 많은 키를 추가했습니다.
cryptsetup --keyfile=passphrase luksAddKey /dev/sdax
cryptsetup --luksAddKey /dev/sdax passphrase
여기서 passphrase는 키가 포함된 파일이고 /dev/sdax는 암호화된 볼륨입니다.
그런 다음 다음을 사용하여 비밀번호가 유효한지 확인합니다.
cat passphrase | cryptsetup --test-passphrase luksOpen /dev/sdax
dd if=passphrase bs=1 count=256 | cryptsetup --test-passphrase luksOpen /dev/sdax
그러나 모두 실패합니다: "이 비밀번호에 사용할 수 있는 키가 없습니다." --key-file 옵션을 사용하는 다음 명령이 작동합니다.
cryptsetup --test-passphrase --key-file passphrase luksOpen /dev/sdax
이 시점에서 나는 비밀번호 내용을 전송하는 방법이 고유한 작업 비밀번호(대화형 설정)에서 작동하는지 확인하려고 했습니다.
echo "manually written working passphrase" > interactive_pass
cat interactive_pass | cryptsetup luksAddKey /dev/sdax
이번에는 훌륭하게 작동했습니다. 두 가지 방법과 두 가지 키 파일의 차이점은 무엇입니까? 키 파일에서 추가된 암호를 사용할 수 있도록 파일 내용을 파이프하는 첫 번째 방법이 필요합니다. 이는 crypttab에서 스크립트를 사용할 때 가능한 유일한 방법인 것 같습니다. 가능합니까?
답변1
cryptsetup
이에 대해서는 매뉴얼 페이지에 자세히 설명되어 있습니다 NOTES ON PASSPHRASE PROCESSING FOR LUKS
. 개행 포함 여부, 다양한 크기 제한(예: 대화형 암호 문구의 경우 512바이트, check cryptsetup --help
) 과 같은 몇 가지 차이점이 있습니다.
이러한 특별한 번거로움을 피하려면 터미널의 대화형 cryptsetup 프롬프트에 입력할 때도 사용할 수 있는 키 파일을 만드는 것이 좋습니다. 즉, 키 파일은 일반 텍스트 문자열이어야 하며 끝에 개행 문자가 포함되어서는 안 됩니다. ( echo -n
또는 을 사용하세요 printf "%s"
.)
예를 들어, 이를 사용하여 pwgen
64자 비밀번호를 생성 keyfile.txt
하거나 긴급 상황에서 수동으로 입력할 수 있습니다.
$ echo -n $(pwgen 64 1) | tee keyfile.txt
Aish6shaejongi9yug3quij7aijop7SieTh7ierahngaem8iov5isho5dae0pisu
이러한 키 파일의 경우 에 전달하는 방법은 중요하지 않습니다 cryptsetup
. 잘못된 키보드 레이아웃으로 입력하는 경우는 예외입니다. 키보드 레이아웃에 문제가 있을 것으로 예상되는 경우,비밀번호를 두 번 추가할 수 있습니다.따라서 LUKS는 그 중 무엇이든 받아들일 것입니다.
이는 키 파일을 사용할 때 특히 중요합니다 /dev/urandom
. 잘못된 방식으로 사용하면 처리가 일찍 중단될 수 있으며(임의의 줄바꿈이 나타남) 비밀번호가 생각보다 훨씬 짧아질 수 있습니다.
답변2
표준 입력에 암호를 전달하면 cryptsetup은 입력 줄을 읽고 줄 끝과 모든 후속 줄에 있는 개행 문자를 삭제합니다.
파일에서 비밀번호를 전달하면 --key-file
해당 파일의 전체 내용이 사용됩니다. 파일에 개행 문자가 포함된 경우 비밀번호는 표준 입력으로 전달된 비밀번호와 동일할 수 없습니다.
답변3
이 옵션을 사용해야 합니다 -h
. 비밀번호는 키 파일로 사용되기 전에 해시됩니다. 이를 통해 몇 자에서 256 또는 512비트로 전환할 수 있습니다. 따라서 luksFormat과 함께 사용하는 옵션과 잠금 해제 방법에 따라 -h plain
또는 기타 매개변수를 지정해야 합니다 .