Chứng thực và nguồn gốc CVM TDX

1. Tổng quan

Máy ảo bảo mật (CVM) là một loại máy ảo Compute Engine sử dụng tính năng mã hoá bộ nhớ dựa trên phần cứng và bảo vệ tính toàn vẹn. Điều này giúp đảm bảo dữ liệu và ứng dụng của bạn không thể bị đọc hoặc sửa đổi trong bộ nhớ khi đang sử dụng. Trong lớp học lập trình này, bạn sẽ tìm hiểu cách tạo một câu trích dẫn chứng thực TDX của Intel trên CVM và xác minh câu trích dẫn đó cục bộ cho mục đích minh hoạ. Ngoài ra, bạn sẽ xác minh nguồn gốc của máy chủ và phiên bản Google Cloud của CVM.

Lớp học lập trình này bao gồm các bước sau:

  • Thiết lập một Máy ảo bảo mật TDX của Intel
  • Tìm nạp một TDX Attestation Quote
  • Xác minh TDX Attestation Quote và Nonce
  • Xác minh tính toàn vẹn của chương trình cơ sở GCE (OVMF)
  • Xác minh nguồn gốc của Máy chủ và phiên bản TDX trên GCE

Kiến thức bạn sẽ học được

  • Cách tìm nạp Báo giá chứng thực TDX trên CVM bằng các công cụ go-tdx-guest
  • Cách xác minh tính xác thực, tính mới (số chỉ dùng một lần) của trích dẫn và tính toàn vẹn của chương trình cơ sở GCE (OVMF)
  • Cách xác minh Nguồn gốc của Máy chủ và Phiên bản Google Cloud (tra cứu sổ đăng ký PPID và liên kết phiên bản PZID)

Bạn cần có

2. Thiết lập và yêu cầu

Để bật các API cần thiết, hãy chạy lệnh sau trong Google Cloud Console hoặc môi trường phát triển cục bộ:

gcloud auth login

gcloud services enable \
    cloudapis.googleapis.com \
    cloudshell.googleapis.com \
    confidentialcomputing.googleapis.com \
    compute.googleapis.com

3. Thiết lập CVM và tìm nạp báo giá TDX

Trong bước này, bạn sẽ tạo một CVM TDX và tìm nạp một câu trích dẫn chứng thực TDX từ phần cứng.

  1. Chuyển đến Google Cloud Console hoặc môi trường phát triển cục bộ. Tạo CVM như sau:
gcloud config set project <project-id>

gcloud compute instances create tdx-cvm-attestation-codelab \
    --machine-type=c3-standard-4 \
    --zone=us-central1-c \
    --confidential-compute-type=TDX \
    --maintenance-policy=TERMINATE \
    --image-family=ubuntu-2204-lts \
    --image-project=ubuntu-os-cloud \
    --scopes https://www.googleapis.com/auth/cloud-platform

Thay thế <project-id> bằng giá trị nhận dạng duy nhất của dự án.

  1. Kết nối với CVM.
gcloud compute ssh --zone us-central1-c tdx-cvm-attestation-codelab
  1. Thiết lập môi trường Go trên CVM:
wget https://go.dev/dl/go1.24.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.24.0.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin
  1. Cài đặt các công cụ go-tdx-guest.

Sao chép kho lưu trữ và tạo công cụ attest. Công cụ này sẽ tạo một trích dẫn TDX.

git clone https://github.com/google/go-tdx-guest.git
cd go-tdx-guest/tools/attest
go build
  1. Tìm nạp TDX Attestation Quote:

Sử dụng công cụ attest để tạo báo giá. Chúng ta sẽ truyền một số chỉ dùng một lần (64 byte của REPORT_DATA) và lưu đầu ra vào quote.bin.

nonce=$(head -c 64 /dev/urandom | xxd -p | tr -d '\n' | head -c 128)
sudo ./attest -in $nonce -inform hex -outform bin -out quote.bin

Giờ đây, bạn có thể lưu báo giá TDX trong quote.bin!

4. Xác minh TDX Attestation Quote

Giờ đây, sau khi tạo một trích dẫn TDX của Intel (quote.bin), chúng ta có thể xác minh trích dẫn đó bằng công cụ check có trong kho lưu trữ go-tdx-guest. Công cụ này kiểm tra trích dẫn dựa trên thông số kỹ thuật của Intel, xác minh trích dẫn dựa trên tài sản thế chấp được tải xuống từ Dịch vụ chứng nhận cung cấp (PCS) của Intel và xác thực các ràng buộc về chính sách như số chỉ dùng một lần để ngăn chặn các cuộc tấn công phát lại.

  1. Chuyển đến thư mục công cụ check rồi tạo thư mục đó:
cd ~/go-tdx-guest/tools/check
go build
  1. Chạy công cụ này để xác minh cả chữ ký mật mã và số chỉ dùng một lần. Chúng tôi sẽ sử dụng cờ -get_collateral=true để tải các chứng chỉ TEE cần thiết xuống từ PCS của Intel, cờ -check_crl=true để xác minh việc thu hồi chứng chỉ và cờ -report_data để xác thực tính mới của số chỉ dùng một lần:
./check -in ~/go-tdx-guest/tools/attest/quote.bin -inform bin \
    -get_collateral=true -check_crl=true \
    -report_data $nonce

Nếu trích dẫn hợp lệ về mặt mật mã và số chỉ dùng một lần trùng khớp, thì công cụ sẽ ghi lại một thông báo thành công tương tự như ví dụ sau và thoát bằng mã 0:

INFO : TDX Quote verified successfully

5. Xác minh tính toàn vẹn của chương trình cơ sở GCE (OVMF)

Mặc dù tài liệu hỗ trợ tiếp thị của Intel xác minh phần cứng, nhưng không xác minh rằng máy ảo đang chạy một chương trình cơ sở Google Compute Engine (GCE) chính hãng, chưa được sửa đổi.

Google xuất bản Chứng thực khởi động đã ký (chứa các RIM hoặc Giá trị đo lường tính toàn vẹn tham chiếu quan trọng) cho tất cả các bản phát hành phần mềm chính thức GCE UEFI (OVMF) vào một bộ chứa Google Cloud Storage (GCS) công khai.

Trong bước này, chúng ta sẽ sử dụng công cụ gce-tcb-verifier công khai của Google để tự động tìm nạp thông tin chứng thực chương trình cơ sở từ GCS, xác minh chữ ký của Google trên chứng thực đó và xác thực phép đo chương trình cơ sở của CVM (MRTD) dựa trên chứng thực đó.

1. Tạo Công cụ xác minh TCB GCE

  1. Sao chép kho lưu trữ gce-tcb-verifier công khai trên GitHub:
cd ~
git clone https://github.com/google/gce-tcb-verifier.git
  1. Chuyển đến thư mục công cụ CLI và tạo thư mục đó:
cd gce-tcb-verifier/gcetcbendorsement/cli
go build -o gcetcbendorsement
  1. Thêm công cụ đã tạo vào PATH để thuận tiện:
export PATH=$PATH:$(pwd)

2. Xác thực Quote dựa trên Chứng thực chương trình cơ sở GCE

Bây giờ, hãy chạy công cụ gcetcbendorsement để xác thực câu trích dẫn chứng thực. Vì công cụ này sẽ hoạt động âm thầm khi xác minh thành công, nên chúng ta có thể liên kết lệnh này với && echo "Validation Succeeded!" để nhận được thông báo xác nhận thành công rõ ràng và thân thiện:

gcetcbendorsement tdx validate ~/go-tdx-guest/tools/attest/quote.bin && echo "Validation Succeeded!"

Kết quả:

Validation Succeeded!

Điều gì đang diễn ra ở phía sau?

  1. Trích xuất: Công cụ này phân tích cú pháp quote.bin và trích xuất thông tin đo lường phần mềm cố định (MRTD) từ Nội dung trích dẫn TD.
  2. Tìm nạp: Thao tác này tạo một URL GCS bằng cách sử dụng MRTD và tải VMLaunchEndorsement tương ứng xuống từ bộ chứa công khai của Google (gs://gce_tcb_integrity).
  3. Xác minh chữ ký: Thư viện này tìm nạp chứng chỉ CA gốc công khai của Google (https://pki.goog/cloud_integrity/GCE-cc-tcb-root_1.crt) và xác minh chữ ký của Google trên chứng chỉ chứng thực đã tải xuống bằng phương pháp mã hoá.
  4. Xác thực hoạt động đo lường: Tính năng này so sánh MRTD do phần cứng TDX ký trong báo giá của bạn với các phép đo tham chiếu chính xác trong chứng thực đã ký của Google.

Nếu tất cả các bước kiểm tra đều thành công, lệnh sẽ thoát bằng mã 0 một cách âm thầm (hoặc in Validation Succeeded! bằng lệnh lặp lại được liên kết), chứng minh rằng máy ảo của bạn đang chạy phần mềm cơ sở chính hãng do Google chứng thực!

6. Xác minh nguồn gốc của Máy chủ và phiên bản TDX trên GCE

Mặc dù quy trình chứng thực và xác minh phần sụn xác nhận rằng VM của bạn đang chạy trên phần cứng Intel TDX chính hãng có phần sụn UEFI được Google chứng thực, nhưng Quy trình xác minh nguồn gốc TDX của GCE kết nối trực tiếp báo giá chứng thực của bạn với cơ sở hạ tầng của Google Cloud theo 2 cách quan trọng:

  1. Nguồn gốc của máy chủ: Xác định máy chủ Google Cloud hữu hình đang chạy VM của bạn bằng cách trích xuất PPID (Mã nhận dạng cấp phép nền tảng) duy nhất của nền tảng từ chứng chỉ PCK của báo giá. Sau đó, dịch vụ này sẽ truy xuất bản ghi đăng ký của nền tảng lưu trữ từ Google Cloud Storage (confidential-host-registry), ghi lại vùng thực và thời điểm Google Cloud cung cấp chứng chỉ chứng thực của máy chủ lưu trữ gần đây nhất.
  2. Nguồn gốc của phiên bản (Liên kết PZID): Google Cloud liên kết danh tính cụ thể của VM (ProjectNumber, ZoneInstanceID) bằng mật mã vào sổ đăng ký MR_OWNER của báo giá TDX. Việc xác minh mối liên kết này đảm bảo rằng chữ ký chỉ thuộc về phiên bản của bạn và ngăn chặn các cuộc tấn công phát lại hoặc thay thế chữ ký trên nhiều VM hoặc dự án.

Công cụ CLI gceprovenance (cũng nằm trong kho lưu trữ go-tdx-guest) tự động hoá quy trình xác minh nguồn gốc đầy đủ – kiểm tra tính xác thực của trích dẫn, thử thách về tính mới, bản ghi sổ đăng ký máy chủ lưu trữ và liên kết PZID của thực thể trong một lệnh.

  1. Chuyển đến thư mục gceprovenance và tạo công cụ:
cd ~/go-tdx-guest/tools/gceprovenance
go build
  1. Chạy quy trình xác minh nguồn gốc đầy đủ bằng lệnh verify. Chúng ta sẽ truyền tệp trích dẫn (quote.bin) và thử thách số chỉ dùng một lần ($nonce) mà chúng ta đã tạo trước đó:
./gceprovenance verify -quote ~/go-tdx-guest/tools/attest/quote.bin -challenge $nonce
  1. Khi tất cả các bước kiểm tra đều thành công, công cụ sẽ xuất một báo cáo xác minh tương tự như sau:
GCE TDX provenance verification: OK

Instance: projects/123456789012/zones/us-central1-c/instances/987654321098765

Checks
  Quote verification: OK
  REPORT_DATA challenge: OK
  Host registry document: found
  PZID binding: OK

PPID: 0123456789abcdef0123456789abcdef
Quote: tdx_quote.bin
Host registry: host_registry.json

Điều gì đang diễn ra ở phía sau?

  • Quote & Challenge (Báo giá và thử thách): Công cụ này xác minh chuỗi chữ ký của báo giá dựa trên chứng chỉ gốc của Intel và xác nhận rằng REPORT_DATA của báo giá khớp với thử thách $nonce của bạn.
  • Nguồn gốc của máy chủ lưu trữ (PPID): API này trích xuất PPID gồm 32 ký tự thập lục phân từ chứng chỉ PCK gốc và tải tài liệu JSON của sổ đăng ký máy chủ lưu trữ xuống từ GCS (https://storage.googleapis.com/confidential-host-registry/).
  • Nguồn gốc của phiên bản (PZID): Thao tác này truy vấn Máy chủ siêu dữ liệu GCE cục bộ để lấy mã dự án bằng số, khu vực và mã phiên bản của phiên bản, tạo tải trọng JSON PZID chuẩn ({"instanceId":...,"numericalProjectId":...,"zone":...}), tính toán bản tóm tắt SHA-384 và xác minh rằng bản tóm tắt này khớp với MR_OWNER trong dấu ngoặc kép.
  1. Kiểm tra tài liệu Host Registry (Sổ đăng ký máy chủ lưu trữ) đã truy xuất:

Theo mặc định, lệnh verify sẽ lưu tài liệu JSON của sổ đăng ký máy chủ lưu trữ đã tìm nạp vào host_registry.json. Bạn có thể kiểm tra để xem siêu dữ liệu của nền tảng lưu trữ:

cat host_registry.json

Ví dụ về đầu ra:

{
  "zone": "us-central1",
  "timestamp": "2026-02-17T11:25:12Z"
}

Siêu dữ liệu này mô tả các thuộc tính của máy chủ lưu trữ:

  • zone: Khu vực/vùng Google Cloud thực tế nơi máy chủ lưu trú.
  • timestamp: Ngày và giờ theo giờ UTC khi Google Cloud cung cấp và xác minh lần gần đây nhất các chứng chỉ chứng thực phần cứng của máy chủ này.

7. Dọn dẹp

Chạy các lệnh sau trong bảng điều khiển đám mây hoặc môi trường phát triển cục bộ:

# Delete the CVM instance
gcloud compute instances delete tdx-cvm-attestation-codelab --zone=us-central1-c

8. Bước tiếp theo

Tìm hiểu thêm về Máy ảo bảo mật và Compute Engine.