대상 OS: Debian 12 (bookworm)
디스크 암호화(LUKS)를 해도 “재부팅 때마다 사람이 비밀번호를 입력해야 한다”는 운영 부담 때문에 결국 꺼버리는 경우가 많습니다.
반대로 자동 해제를 위해 키 파일을 디스크에 같이 두면, 디스크 탈취 상황에서 암호화 의미가 급격히 약해집니다.
이 딜레마를 줄이는 현실적인 방법 중 하나가 TPM2(Trusted Platform Module)에 LUKS 해제를 묶는 것입니다.
서버가 ‘정상 부팅 경로’를 따라 올라오는 동안에만 TPM2가 해제에 필요한 비밀을 제공하고, 부트 체인이 바뀌면(PCR 변경) 자동 해제가 실패하도록 만들 수 있습니다.
오늘은 Debian 12에서 systemd-cryptenroll로 TPM2 바인딩을 구성하고, PCR 선택/복구 키/점검 루틴까지 운영 관점으로 정리합니다.
---
1) 먼저 확인할 것: 이 구성이 맞는 환경인가
1) TPM2가 있는 하드웨어/VM인지 확인
ls -l /dev/tpm* 2>/dev/null || true
systemd-cryptenroll --tpm2-device=list 2>/dev/null || true
2) “물리 디스크 탈취”에 강해지는 대신, 공격자가 서버 자체를 훔쳐 ‘그대로 부팅’할 수 있으면 위험은 남습니다
- TPM2 바인딩은 ‘부팅 경로/플랫폼 상태’에 묶는 것이지, 사람이 들고 있는 2FA를 대체하는 건 아닙니다.
- 데이터 중요도가 높다면 여전히 수동 패스프레이즈(또는 스마트카드/원격 언락)와 병행을 고려하세요.
---
2) 현재 LUKS 상태 점검(변경 전 스냅샷)
1) 암호화 디바이스 식별
lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS
sudo blkid
2) LUKS 헤더/슬롯 확인
- 장치 이름은 예시입니다. 실제 환경에 맞게 바꿔 주세요.
sudo cryptsetup luksDump /dev/
3) 지금 어떤 방식으로 열리는지 확인(crypttab)
cat /etc/crypttab || true
---
3) 패키지 준비: TPM 도구 + systemd 구성요소
1) 필요한 패키지 설치
sudo apt update
sudo apt install -y tpm2-tools systemd cryptsetup
2) TPM 이벤트/상태 빠른 확인(가능한 경우)
sudo tpm2_getcap -c properties-fixed 2>/dev/null | head -n 50 || true
---
4) 가장 중요한 운영 안전장치: 복구 키(Recovery Key) 먼저 만들기
1) 왜 복구 키가 먼저인가
- PCR 선택을 잘못하거나 펌웨어 업데이트/부트로더 변경이 일어나면 자동 해제가 실패할 수 있습니다.
- 이때 “수동 해제 수단”이 없으면 서버가 잠겨 다운타임이 발생합니다.
2) systemd-cryptenroll로 복구 키 추가
- 출력되는 복구 키는 오프라인 보관(비밀 금고/봉인)하세요.
sudo systemd-cryptenroll /dev/ --recovery-key
3) 슬롯 변화 확인
sudo cryptsetup luksDump /dev/ | sed -n '1,120p'
---
5) TPM2 바인딩: systemd-cryptenroll로 TPM 슬롯 추가
1) PCR을 어떻게 고를까(운영 기준)
- PCR은 “부팅 경로/상태”를 대표하는 측정값입니다.
- 일반적으로 너무 많은 PCR을 묶으면(특히 커널/부트로더 업데이트가 잦을 때) 자동 해제가 자주 깨집니다.
권장 접근:
- 1단계: 비교적 안정적인 PCR 세트로 시작
- 2단계: 운영이 안정화되면 점진적으로 강화
2) TPM2 자동 장치 선택 + PCR 지정 바인딩(예시)
- 아래 예시는 PCR 7(보안 부팅/부트 관련) 중심으로 시작하는 형태입니다.
- 환경에 따라 PCR 번호는 달라질 수 있으니, 무작정 복사만 하지 말고 “업데이트/변경 빈도”를 고려하세요.
sudo systemd-cryptenroll /dev/ --tpm2-device=auto --tpm2-pcrs=7
3) 등록 결과 확인
sudo systemd-cryptenroll /dev/
---
6) initramfs 반영: 부팅 단계에서 자동 해제가 되게 만들기
1) initramfs 업데이트
sudo update-initramfs -u
2) 관련 설정 파일 확인(crypttab/cryptsetup)
- TPM2 바인딩 자체는 LUKS 슬롯에 들어가지만, 부팅 단계에서 해당 볼륨을 여는 경로가 제대로 있어야 합니다.
grep -n '^[^#]' /etc/crypttab || true
---
7) 재부팅 전 “마지막 점검” 체크리스트
1) 복구 키가 실제로 생성됐는지(종이에 적었는지) 확인
2) 콘솔 접근 경로가 있는지 확인(클라우드 콘솔/시리얼/iDRAC/iLO)
3) 지금 로그인한 세션을 끊지 말고, 별도 세션을 하나 더 열어두기
---
8) 재부팅 후 검증: 자동 해제 성공/실패를 읽는 방법
1) 부팅 직후 커널/초기 사용자 공간 로그 확인
sudo journalctl -b --no-pager | egrep -i 'crypt|luks|tpm|systemd-cryptsetup|cryptsetup' | tail -n 200
2) 현재 매핑 상태 확인
lsblk -o NAME,TYPE,FSTYPE,MOUNTPOINTS
sudo dmsetup ls --tree | head -n 80
3) 자동 해제가 실패했다면
- 콘솔에서 복구 키(Recovery Key) 또는 기존 패스프레이즈로 열 수 있어야 정상입니다.
- 실패 원인은 대개 PCR 변경(부트로더/펌웨어 업데이트, Secure Boot 상태 변화)입니다.
---
9) 키 회수/교체(운영에서 반드시 필요): TPM 슬롯 제거/재등록
1) 현재 등록된 슬롯/메서드 확인
sudo systemd-cryptenroll /dev/
2) TPM2 등록 제거(언롤)
- TPM2 슬롯을 제거하면 자동 해제는 더 이상 동작하지 않습니다.
sudo systemd-cryptenroll /dev/ --wipe-slot=tpm2
3) 재등록(정책 변경/PCR 변경 시)
sudo systemd-cryptenroll /dev/ --tpm2-device=auto --tpm2-pcrs=7
sudo update-initramfs -u
---
10) 보안/운영 팁: “자동 해제”를 과신하지 않기
1) 복구 키는 만들어도 ‘보관’이 제일 어렵다
- 봉인 보관 + 접근 절차(누가, 언제, 어떤 승인으로)를 같이 정의하세요.
2) 업데이트 윈도우에 ‘부팅 테스트’를 포함
- 펌웨어/부트로더/커널 업데이트 후 1대라도 재부팅 검증을 넣으면 대형 사고를 막습니다.
3) TPM2 바인딩은 “부팅 경로를 신뢰”하는 설계
- 운영 정책(관리망 접근 통제, 원격 콘솔 권한 관리, 물리 접근 통제)과 함께 가야 효과가 큽니다.