예를 들어 키 3개 중 2개가 필요한 고급 LUKS 키 체계가 있습니까?

예를 들어 키 3개 중 2개가 필요한 고급 LUKS 키 체계가 있습니까?

두 가지 주요 LUKS 암호화 옵션은 다음과 같습니다.

  1. USB 키 파일(참조https://superuser.com/questions/149578/how-can-i-use-a-keyfile-on-a-removable-usb-drive-for-my-encrypted-root-in-debian)
  2. 암호를 입력

둘 다 약점이 있습니다. 첫 번째 문제는 USB 드라이브를 훔쳐서 극복할 수 있습니다. 두 번째 경우에는 키로거를 사용하거나 비밀번호를 넘겨주어야 할 수도 있습니다.

두 가지 옵션이 모두 필요한 암호화 체계를 만드는 것이 가능합니까? 그런 다음 비밀번호를 묻는 메시지가 나타나면 USB 드라이브를 파괴할 수 있습니다(예: 스토브에 태워서 사용). 반대로 누군가가 내 USB 드라이브를 훔쳐가면 비밀번호도 알아내야 합니다.

기존 LUKS 키 슬롯 아이디어는어느키 슬롯은 키를 제공하지 않고도 장치의 잠금을 해제합니다.모두, 또는 "3개 중 2개" 키 슬롯(iirc, 후자는 Galois 필드를 사용하여 암호화된 보안 방식으로 수행될 수 있음).

(또한 저는 OpenSuSE 시스템을 사용하고 있으므로 배포에 구애받지 않거나 SuSE에서 작동하는 답변을 유지하십시오.)

답변1

나는 이와 같은 것이 쉽게 가능하다고 생각하지 않지만 가능해야 합니다. 여러분을 위해 몇 가지 참고 자료를 모아보겠습니다.

첫 번째는 /etc/crypttab입니다. 일반적으로 세 번째 슬롯에 키 파일이나 비밀번호를 지정하지만 일부 배포판에서는 다음과 같은 네 번째 필드에 옵션을 지정할 수 있습니다 keyscript.http://linux.frank4dd.com/en/man5/crypttab.htm). 스크립트("/lib/cryptsetup/scripts" iirc에 있어야 함)는 세 번째 필드(일반적으로 키 파일 또는 비밀번호만)를 인수로 사용할 수 있습니다. 키스크립트의 역할은 실제 암호 해독 키를 stdout으로 보내는 것입니다. 그런 다음 이 키는 cryptsetup에서 일반적인 방법으로 luks 키로 사용됩니다.

둘째, 중요한 스크립트를 작성해야 할 수도 있습니다. netkeyscript(github에서)는 UDP 멀티캐스트 소켓에서 비밀번호를 수신하는 키 스크립트 예입니다. 여기에 사용자 정의 키 입력 스크립트의 또 다른 자세한 예가 있습니다. 전체 구현은 다음과 같습니다 sh.http://wejn.org/how-to-make-passwordless-cryptsetup.html. 중요한 스크립트를 작성하는 방법(제가 부르는 대로 multifactor)은 연습용으로 남겨두겠습니다. ;)

세 번째는 비밀분할이다. 설명하는 방식으로 "ssss"(google "ssss-split")라는 오픈 소스 도구를 사용하여 Luks 비밀번호를 분할할 수 있습니다. 이를 3개의 부분(a, b, c)으로 나누고 그 중 2개가 필요하다고 가정합니다. "a"는 USB 드라이브에, "b"는 볼트에, "c"는 컴퓨터(암호화되지 않은 파티션) 또는 다른 곳에 저장하세요. 물론 "c"가 노출되는 것을 원하지 않으므로 기억할 수 있는 암호를 사용하여 원하는 구성표를 사용하여 암호화하고 해당 암호를 " "라고 부르면 디스크 c0" "의 암호화는 " "입니다. 이제 귀하의 암호문은 다음과 같습니다cc'

root  /dev/disk/<blah blah>  /dev/<usb>:/path/to/a+$/dev/<blah>:/path/to/c'  keyscript=multifactor

물론 세 번째 필드는 실제로 키보드 스크립트가 허용하는 내용에 따라 달라집니다.

이상적으로 키 스크립트는 하나 이상의 키를 해독하기 위해 사용자의 입력이 필요한지 결정할 수 있어야 하지만(예: 이 경우 c'-> c) 필요한 경우 세 번째 필드를 사용하여 이를 지정할 수 있습니다. 위의 예에서는 $이를 표현하기 위해 선도를 사용했습니다.

stdout의 모든 출력은 luks 암호로 처리되기 때문에 입력에 대한 키보드 스크립트 프롬프트(아마도 stderr)를 갖는 것이 가능한지 확실하지 않습니다. 합리적인 백업 계획을 세우는 것이 좋을 것입니다.

어쨌든 행운을 빌며 즐거운 해킹되세요 :)

답변2

짧은 대답: 아니요.

서로 다른 슬롯에 여러 개의 키를 가질 수 있지만 이는 귀하의 질문과 관련이 없습니다.

보안상의 이유로 램디스크의 체크섬을 유지하고 cryptsetup은 정적으로 연결되어 부팅할 때마다 자동으로 확인합니다.

고쳐 쓰다

체크섬은 암호화된 FS에 저장되며 파티션이 마운트될 때까지 수정할 수 없습니다.

즉, 원격으로 악용되거나 바이너리(예: rootfs의 ramdisk/cryptsetup)가 수정되지 않는 한 안전합니다. (그런데 내 rootfs는 암호화되어 있고 커널/램디스크만 노출되어 있으므로 확인만 하지만 느린 CPU/HDD 로딩 속도에 대비하세요.)

답변3

그리고럭스 2그리고시스템 v248(2021년 3월 기준)FIDO2USB 하드웨어 보안 토큰다단계 인증(외무성). 보안 토큰 장치(보유하고 있는 것)를 삽입하고 장치 PIN(알고 있는 것)을 입력하여 잠금을 해제해야 합니다. PIN은 비밀번호처럼 기록될 수 있지만 보안 키는 USB 스틱/키 파일과 달리 복사할 수 없습니다. 하지만 USB 스틱처럼 도난당할 수는 있습니다.

장치는 전원 연결/연결/도난 시 PIN 무차별 대입 공격으로부터 보호받을 수 있습니다. 재설정하려면 최소한 다른 관리 PIN이 필요합니다. 클라이언트 PIN 지원은 선택 사항이며 물리적인 경우와 마찬가지로 모델별로 다릅니다.사용자가 존재합니다그리고 기기에서사용자 인증특징.

사용systemd-cryptenrollLUKS2 볼륨 키웨이, 특히 시스템 디스크 또는 기타 항상 연결된 디스크 구성/etc/crypttab. FIDO2 키는사용하기 편하다고 하네요이 목적을 위해. 또한 엔트로피가 높은 "복구" 비밀번호에 대한 특별 지원도 있습니다. 이는 보안 토큰이 분실된 경우(또는 끔찍한 난로 사고로 인해 손상된 경우) 도움이 될 수 있지만 거의 사용되지 않는 것 외에도 범용 비밀번호의 단점이 있습니다.

알아채다cryptsetup추가 systemd-fido2FIDO2 키 슬롯 메타데이터(디버깅 예시). 이 플러그인/라이브러리는 기본적으로, 특히 시작 시 사용하지 못할 수 있습니다 initramfs. (임시, 외부) LUKS2 헤더 백업을 생성하고 비 FIDO2 키홈을 제거하기 전에 설정을 확인하십시오. 당신은 또한 볼 수 있습니다/usr/lib/systemd/systemd-cryptsetup.

상 : ~부터시스템 v246(2020년 7월부터),시스템 호스트$HOME장치 PIN을 통해 FIDO2 보안 토큰(시스템 디스크와 동일하거나 다름)을 사용하여 개별 LUKS2 디렉터리에 대한 지원을 활성화합니다. 사용homectl관리하다JSON 사용자 레코드(기존 UNIX 사용자와 달리)홈 디렉토리/디스크및 해당 암호화 키. 이건 더 큰 것의 일부야암호화, 불변성, 이식성에 전념등. 무엇보다도 이를 통해 $HOME(특히) LUKS2 암호화 USB 스틱에서 직접 암호화된 휴대용 디렉터리를 저장하고 사용할 수 있습니다.

관련 정보