대상 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 바인딩은 “부팅 경로를 신뢰”하는 설계

- 운영 정책(관리망 접근 통제, 원격 콘솔 권한 관리, 물리 접근 통제)과 함께 가야 효과가 큽니다.