Skip to the content.

TDX Remote Attestation

  1. MRTD
    • SHA384
    • TDH.MNG.INIT开始
    • TDH.MEM.PAGE.ADD添加内存时,把GPA加入度量中
    • Control Structures不度量,包括TDR、TDCX、TDVPR、Secure EPT
    • TDH.MR.EXTEND加入初态度量的内存,包括GPA和内容,以256B为单位
      • 对于TD会擦除并重新初始化的页,可以不用加入度量
    • TDH.MR.FINALIZE形成初态度量,此后不能再进行TDH.MEM.PAGE.ADD TDH.MR.EXTEND等操作
  2. RTMR
    • 用于Guest做动态度量,典型用例就是在Guest启动过程中充当vTPM,从而让VBIOS实现可信启动
    • SHA384
    • 每个guest有4个
    • 初态为0
    • 使用TDG.MR.RTMR.EXTEND更新
    • 更新类似TPM的PCR:RTMR[i] = SHA384(RTMR[i] || x);
  3. Measurement Report
    • Guest调用TDG.MR.REPORT形成report,传递一个自定义REPORTDATA,返回一个TDREPORT_STRUCT,包含:
      • TDREPORT_STRUCT包含:CPU的SVN、TDX Module的SVN和度量值、TD的信息(MRTD,XFAM/ATTRIBUTES,版本和owner(MRCONFIID,MROWNER,MROWNERCONFIG),RTMR、SERVTD的HASH)、REPORTDATA以及REPORTMACSTRUCT
      • 其中REPORTMACSTRUCT是真正去验证的东西,其包括上面几个东西的值或者hash,会被CPU使用CPU独有的HMAC key做HMAC
      • TDREPORT_STRUCT这块内存虽然是Guest分配的,但是设计上只能给CPU使用(HMAC保护),软件只能通过TDG.MR.VERIFYREPORT和SGX的ENCLU(EVERIFYREPORT2)验证这个Report
    • Local Attestation
      • 任何TD可以对同一个机器上的TD做Local Report Verification(TDG.MR.VERIFYREPORT),TDX Module会使用SEAMOPS的SEAMVERIFYREPORT leaf验证REPORTMACSTRUCT
      • SGX Enclave可以使用EVERIFYREPORT2指令对同一个机器上的TD做Local Report Verification
      • Report Verification失败的可能原因有:TDX Module做了热升级、CPU microcode更新过、或者TD被迁移过,这些TD都是无感的。解决方案就是让被verify的TD重新生成Report
    • Remote Attestation
      • 被验证的TD把Report发送给同一台机器的Quoting Enclave,QE对Report做Local Attestation,然后用ECDSA 384 key对Report签名形成Quote,接入SGX Attestation Infrastructure
  4. TDX Guest Driver
    • TODO
  5. Host Measured Boot
    • TODO
    • ACM
    • Intel TXT