본문으로 건너뛰기
Embedded Security · 12/13

SPDM과 CMA 인증 흐름 — 디바이스 신원과 펌웨어 측정 검증

· Hawk · 9분 읽기

#한 줄 요약

“IDE가 링크를 암호화하기 전에 양쪽이 서로 누구인지 확인해야 합니다.” — SPDM은 디바이스 인증·키 교환·세션 협상을 담당하는 DMTF 표준입니다. CMA디바이스 firmware의 hash 측정값서명된 형태로 호스트에 증명합니다. 둘이 합쳐 Confidential Computing의 신뢰 사슬 끝단을 만듭니다.

Ch 11에서 IDE가 링크를 AES-GCM으로 암호화하는 걸 봤습니다. 그런데 키를 어떻게 안전하게 교환하는지, 상대편이 진짜인지 어떻게 확인하는지는 IDE 밖의 문제입니다. 그게 SPDM·CMA의 역할입니다.

#왜 인증이 필요한가

IDE만으로는 부족한 이유:

  1. 공격자가 디바이스 자체를 교체했다면 — 교체된 디바이스와 IDE 키 교환·암호화가 정상 진행됩니다. 데이터가 암호화되어 새지는 않지만 공격자에게 전달됩니다.
  2. Firmware downgrade — 디바이스에 알려진 취약점이 있는 옛 firmware가 설치되어 있어도, IDE는 그걸 막지 못합니다.
  3. Counterfeit 디바이스 — 정품처럼 가장한 디바이스가 동작은 비슷해도 backdoor 포함일 수 있습니다.

SPDM은 이 모든 시나리오제거합니다. 디바이스가 정품임을 증명하고, firmware가 알려진 정상 hash와 일치함을 증명한 뒤에야 IDE를 활성화합니다.

#SPDM이란

*SPDM (Security Protocol Data Model)*은 DMTF DSP0274가 정의한 디바이스 인증 표준 프로토콜입니다.

항목
정의 단체DMTF (Distributed Management Task Force)
표준 번호DSP0274
첫 릴리스1.0 (2019)
현 릴리스1.3 (2024+)
전송 layerPCIe DOE, MCTP, USB, I2C 등
적용PCIe·CXL·NVMe·USB 디바이스 인증

SPDM 자체는 전송 무관입니다. 어느 채널로 보낼지는 별도 결정. PCIe·CXL은 보통 DOE (Data Object Exchange) 채널을 통합니다.

#SPDM 메시지 시퀀스

표준 디바이스 인증·키 교환 흐름:

순서메시지방향내용
1GET_VERSIONHost → Device”어떤 SPDM 버전 지원?“
2VERSIONDevice → Host지원 버전 리스트
3GET_CAPABILITIESHost → Device능력 요청
4CAPABILITIESDevice → Hostencrypt·KEX·measurement 등 능력
5NEGOTIATE_ALGORITHMSHost → Device알고리즘 협상 (SHA·AES·ECC)
6ALGORITHMSDevice → Host합의된 알고리즘
7GET_DIGESTSHost → Device인증서 chain hash 요청
8DIGESTSDevice → Hosthash 리스트
9GET_CERTIFICATEHost → Device특정 chain 요청
10CERTIFICATEDevice → HostX.509 인증서 chain 전송
11CHALLENGEHost → Devicenonce + measurement summary 요청
12CHALLENGE_AUTHDevice → Host서명된 응답 (proof of possession)
13GET_MEASUREMENTSHost → Devicefirmware hash 요청
14MEASUREMENTSDevice → Host서명된 measurement block
15KEY_EXCHANGEHost → Devicesession 키 교환 시작
16KEY_EXCHANGE_RSPDevice → Host교환 응답
17FINISHHost → Device인증 완료
18FINISH_RSPDevice → Host세션 활성화

이 시퀀스가 끝나면 호스트와 디바이스는 서로의 신원을 확인했고, 공유 세션 키를 갖습니다. 이 키가 IDE 키 유도의 입력입니다.

#DOE 채널 — SPDM 전송

PCIe·CXL에서 SPDM 메시지는 *DOE (Data Object Exchange)*로 전송됩니다.

Terminal window
# DOE capability 확인
$ lspci -vvv -s 5e:00.0 | grep -A 5 "Data Object Exchange"
Capabilities: [70] Data Object Exchange
DOE Mailbox: 1 instance
Supported Protocols:
Vendor=DMTF, ID=0x01 (CMA SPDM)
Vendor=DMTF, ID=0x02 (Secured CMA SPDM)

DOE는 config space에 mailbox를 두고, 호스트가 명령 write → 디바이스 응답 read 하는 단순 인터페이스입니다.

#CMA — Component Measurement Attestation

*CMA (Component Measurement and Attestation)*는 SPDM 위에서 정의된 attestation 프로토콜입니다. PCIe-SIG ECN으로 추가됐습니다.

CMA가 제공하는 정보:

Measurement Block내용
Index 0Manifest (어떤 component들이 등록되어 있나)
Index 1Immutable firmware (ROM·initial bootloader)
Index 2Mutable firmware (업데이트 가능 부분)
Index 3+Vendor-specific (configuration·state)

호스트는 GET_MEASUREMENTS로 이 hash들을 요청하고, 디바이스는 DICE-derived key로 서명해 응답합니다.

#DICE — Device Identifier Composition Engine

DICE는 *공장에서 박힌 UDS (Unique Device Secret)*에서 layer별 identityderive하는 표준 (TCG).

LayerIdentitySource
L0UDS (Unique Device Secret)공장 fuse
L1CDI (Compound Device Identifier)KDF(UDS, hash(firmware_L1))
L2Alias KeyKDF(CDI, hash(firmware_L2))

핵심 성질: L1 firmware가 변하면 CDI가 변하고, 변한 CDI는 다른 Alias Key를 derive합니다. 공격자가 firmware를 바꾸면 신원도 바뀝니다.

DICE는 secure boot의 root of trustattestation의 신원을 한 메커니즘으로 통합합니다.

#TPM 2.0 통합

호스트 측에는 TPM 2.0이 있어 attestation 결과를 영구 기록합니다. 통합 흐름:

  1. Device가 SPDM 인증을 완료하고 MEASUREMENTS 응답을 host에 전송
  2. Host가 그 hash를 *TPM의 적절한 PCR(Platform Configuration Register)*에 extension. PCR 값은 PCR_new = SHA256(PCR_prev || new_hash)로 누적되며, 어느 PCR을 쓸지는 *플랫폼 정책 (PFP·CCA 등)*이 결정합니다
  3. Remote Attestation Server가 *TPM Quote (AIK로 서명된 PCR 값 묶음)*를 요청
  4. Server가 예상 PCR 값과 비교해 전체 시스템 신뢰성을 판단

PCR에 디바이스 measurement가 누적 extension되어 재부팅 사이에 영구 기록됩니다. SPDM 한 번이 TPM의 한 layer로 연결되는 구조입니다.

#공격 시나리오와 SPDM의 방어

공격SPDM 방어
Counterfeit 디바이스 spoofingX.509 인증서 chain 검증 → 정품만 통과
Firmware downgradeMEASUREMENT가 옛 firmware hash → 정상값과 다름 → 거부
Replay attackCHALLENGE의 nonce가 매번 다름 → 재사용 불가
Man-in-the-middle서명 검증 → MITM은 서명 못 함
TOCTOUKEY_EXCHANGE까지 연결된 세션 → 도중 교체 불가

SPDM 자체가 MITM·spoofing·replay를 막아 IDE 키 교환진짜 정품 디바이스와 이루어지게 보장합니다.

#자주 하는 실수

#”SPDM만 활성화하면 보안 끝”

디바이스 한 번 인증된 뒤 트래픽 자체는 *별도 보호 메커니즘 (IDE)*이 필요합니다. SPDM은 세션 시작 전 한 번, IDE는 세션 내내. 둘이 상호 보완이지 대체 관계가 아닙니다.

#”인증서 chain을 짧게 만들면 빠르다”

인증서 chain 검증은 부팅 시 한 번입니다. 짧게 줄여서 얻는 시간이 1-2 ms. 그런데 chain이 짧으면 revocation 유연성·트러스트 모델 단순성을 잃습니다. 일반적으로 Root → Manufacturer → Device 3단이 표준.

#”MEASUREMENT의 hash를 어떤 값과 비교할지 다 안다”

*Reference Integrity Manifest (RIM)*가 디바이스 제조사로부터 제공되어야 합니다. RIM 없으면 MEASUREMENT는 의미 없는 hash에 불과. RIM provisioning이 attestation의 hidden 작업.

#”DICE는 secure boot과 별개”

같은 메커니즘입니다. DICE에서 layer별 hash가 식별성이 되고, secure boot의 measurement그대로 사용됩니다. 분리 구현하면 두 번 hash 계산하는 낭비.

#”TPM 없어도 SPDM 동작”

동작은 합니다. 그러나 measurement가 한 boot에서만 기억되고 재부팅 시 잃음. Remote attestation·long-term audit에는 TPM 필수.

#정리

  • SPDM은 DMTF DSP0274 표준으로 디바이스 인증·키 교환·세션 협상을 담당합니다.
  • PCIe·CXL에서는 DOE (Data Object Exchange) 채널로 SPDM 메시지가 흐릅니다.
  • CMA는 SPDM 위 PCIe-SIG attestation 프로토콜firmware measurement hash서명된 형태로 호스트에 증명합니다.
  • DICE공장 UDS에서 layer별 identity를 derivefirmware 변경 시 신원도 변경되게 합니다.
  • TPM 2.0과 통합되어 재부팅·long-term audit까지 신뢰 사슬 확장.
  • SPDM + IDE 조합Confidential Computing의 신원 검증 + 트래픽 보호 두 축을 완성합니다.

다음 편은 Ch 13: CXL TEE 확장SPDM 위에서 디바이스가 인증되면 그 디바이스를 TVM (Trusted Virtual Machine)에 안전하게 attach하는 TDISP 표준AMD SEV-TIO·Intel TDX Connect·ARM CCA의 CXL 통합까지 분해합니다.

#관련 항목