클레비스 TPM2.0을 사용하는 LUKS

클레비스 TPM2.0을 사용하는 LUKS

안녕하세요. 저는 보조 데이터 디스크를 암호화하려고 합니다. 내 컴퓨터를 부팅하는 동안 이 디스크의 암호를 해독하고 싶습니다. 현재 LUKS로 이미 암호화된 LVM 볼륨이 있는 RAID 설정이 있습니다.

다음과 같은 명령을 실행했습니다. sudo clevis luks bin -d /dev/RaidVG/LVMVol tpm2 '{"pcr_ids":"15", "pcr_bank":"sha256"}'

이제 이해한 바에 따르면 PCR 뱅크 15의 TPM2.0 모듈에 바인딩된 LUKS 헤더에 키 슬롯을 추가해야 합니다. 이제 작동하는 것 같지만 이해할 수 없는 것은 실행 시 어떤 일이 발생하는지입니다. 'tpm2_pcrread'. 내 pcr '값'이 여전히 0이라고 나와 있습니다.

$ sudo tpm2_pcrread
sha1:
sha256:
  0 : 0xREDACTED
  1 : 0xREDACTED
  2 : 0xREDACTED
  3 : 0xREDACTED
  4 : 0xREDACTED
  5 : 0xREDACTED
  6 : 0xREDACTED
  7 : 0xREDACTED
  8 : 0x0000000000000000000000000000000000000000000000000000000000000000
  9 : 0x0000000000000000000000000000000000000000000000000000000000000000
  10: 0x0000000000000000000000000000000000000000000000000000000000000000
  11: 0x0000000000000000000000000000000000000000000000000000000000000000
  12: 0x0000000000000000000000000000000000000000000000000000000000000000
  13: 0x0000000000000000000000000000000000000000000000000000000000000000
  14: 0x0000000000000000000000000000000000000000000000000000000000000000
  15: 0x0000000000000000000000000000000000000000000000000000000000000000
  16: 0x0000000000000000000000000000000000000000000000000000000000000000
  17: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  18: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  19: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  20: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  21: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  22: 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
  23: 0x0000000000000000000000000000000000000000000000000000000000000000
sha384:
sha512:

이 PCR 값은 정확히 무엇을 의미합니까? 온라인에서는 이에 대한 답변을 찾을 수 없습니다. PCR 뱅크에 작업을 수행한 후에도 이 값이 변경되어서는 안 되나요?

또 다른 특이한 점은 이 튜토리얼에 따라 간단한 hello world 파일을 암호화할 때(https://www.fit-pc.com/wiki/index.php?title=Linux:_Full_Disk_Encryption), "eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI"와 똑같은 암호화된 출력을 얻습니다. 이제 얻은 전체 출력이 표시되지 않고 첫 번째 줄만 표시됩니다. 일부 기본 키가 설정되어 있기 때문입니까? 아니면 일종의 공통 헤더인가요? 내 TPM 모듈이 가상화되었으므로 문제가 될 수도 있습니다.

누군가 이것이 실제로 어떻게 작동하는지, 그리고 암호화 체계를 안전하게 설정하는 방법에 대해 좀 더 설명해 줄 수 있기를 바랍니다.

답변1

이제 이해한 바에 따르면 PCR 뱅크 15의 TPM2.0 모듈에 바인딩된 LUKS 헤더에 키 슬롯을 추가해야 합니다. 이제 작동하는 것 같지만 이해할 수 없는 것은 실행 시 어떤 일이 발생하는지입니다. 'tpm2_pcrread'. 내 pcr '값'이 여전히 0이라고 나와 있습니다.

PCR에 데이터를 바인딩하면 PCR이 변경되지 않습니다. 즉, TPM을 사용하여 데이터를 암호화하는 방식으로현재의PCR 값. 일반적으로 이는 값이 유용한 의미를 갖는 PCR을 선택해야 함을 의미합니다(예: Windows BitLocker는 현재 보안 부팅 상태를 유지하는 PCR 7을 사용함). 모두 0인 PCR을 사용하면 여전히 암호화된 데이터(예: LUKS 키 슬롯)가 TPM 자체에 바인딩되지만 누구도 라이브 CD를 부팅하고 TPM에 데이터 봉인을 해제하도록 요청하는 것을 막을 수는 없습니다.

이 PCR 값은 정확히 무엇을 의미하나요? 온라인에서는 이에 대한 답변을 찾을 수 없습니다.

각 PCR은해시 체인TPM 이벤트 로그의 이벤트에 의해 생성됩니다. 이벤트가 기록될 때마다 해당 PCR이 업데이트됩니다(또는 업데이트 프로세스가 pcr = hash(pcr + new_event)Git 커밋 작동 방식과 매우 유사하므로 "확장").

기본 이벤트는 TCG 사양에 문서화되어 있습니다. tpm2_eventlog현재 부팅 중에 기록된 내용을 표시할 수 있습니다. 예를 들어 PCR 4에는 부팅 프로세스 중에 시작된 모든 .efi 실행 파일의 정확한 해시가 포함됩니다. (실질적으로 모든 기본 PCR은 부팅 프로세스와 관련이 있습니다.) 대부분의 이벤트는 펌웨어에 의해 기록되지만 일부는 부트로더에 의해 기록됩니다. OS에서는 가능하지만 일반적으로 그렇지 않습니다.

즉, PCR에 예상 값이 포함되어 있는지 확인하는 것은 이벤트 로그에 예상 이벤트가 예상 순서대로 포함되어 있는지 확인하는 지름길일 뿐입니다.

예를 들어 BitLocker는 PCR7 또는 PCR4를 사용하여 키 슬롯(또는 "보호기")을 봉인하여 실제 Windows 설치가 부팅될 때만 자동 잠금 해제가 가능하도록 합니다(즉, 라이브 CD가 아닌 사용자 계정 보안을 존중하는 시스템). .

PCR 뱅크에 작업을 수행한 후에도 이 값이 변경되어서는 안 되나요?

아니요; 단순히 읽어도 값이 변경되지는 않습니다.

"봉인" 작업은 TPM에 제공된 데이터를 암호화하고 "PCR 15가 이 값과 일치하는 경우에만 암호 해독" 정책을 첨부하도록 요청합니다. PCR 자체는 변경되지 않습니다. 봉인된 데이터는 OS로 다시 반환됩니다(파일 또는 LUKS 토큰 등에 저장).

또 다른 특이한 점은 이 튜토리얼에 따라 간단한 hello world 파일을 암호화할 때(https://www.fit-pc.com/wiki/index.php?title=Linux:_Full_Disk_Encryption), "eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI"와 똑같은 암호화된 출력을 얻습니다.

이는 Base64로 인코딩된 데이터입니다. 이를 디코딩하면 고정된 헤더가 포함되어 있음을 알 수 있습니다.

$ echo eyJhbGciOiJkaXIiLCJjbGV2aXMiOnsicGluIjoidHBtMiIsInRwbTIiOnsiaGFzaCI6InNoYTI | base64 -d
{"alg":"dir","clevis":{"pin":"tpm2","tpm2":{"hash":"sha2

관련 정보