Validasi Dokumen Pengesahan NitroTPM - Amazon Elastic Compute Cloud

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Validasi Dokumen Pengesahan NitroTPM

catatan

Topik ini ditujukan untuk pengguna yang menggunakan layanan manajemen kunci pihak ketiga, dan perlu membangun mekanisme validasi Dokumen Pengesahan mereka sendiri.

Topik ini memberikan gambaran rinci tentang seluruh alur pengesahan NitroTPM. Ini juga membahas apa yang dihasilkan oleh sistem AWS Nitro ketika Dokumen Pengesahan diminta, dan menjelaskan bagaimana layanan manajemen kunci harus memproses Dokumen Pengesahan.

Tujuan pengesahan adalah untuk membuktikan bahwa sebuah instance adalah entitas yang dapat dipercaya, berdasarkan kode dan konfigurasi yang dijalankannya. Akar kepercayaan untuk instance berada dalam sistem AWS Nitro, yang menyediakan Dokumen Pengesahan.

Dokumen Pengesahan ditandatangani oleh AWS Nitro Attestation Public Key Infrastructure (PKI), yang mencakup otoritas sertifikat yang diterbitkan yang dapat dimasukkan ke dalam layanan apa pun.

Dokumen Pengesahan

Dokumen Pengesahan dikodekan dalam Representasi Objek Biner Ringkas (CBOR), dan ditandatangani menggunakan CBOR Object Signing and Encryption (COSE).

Untuk informasi lebih lanjut tentang CBOR, lihat RFC 8949: Representasi Objek Biner Ringkas (CBOR).

Spesifikasi Dokumen Pengesahan

Berikut ini menunjukkan struktur Dokumen Pengesahan.

AttestationDocument = { module_id: text, ; issuing Nitro hypervisor module ID timestamp: uint .size 8, ; UTC time when document was created, in ; milliseconds since UNIX epoch digest: digest, ; the digest function used for calculating the ; register values nitrotpm_pcrs: { + index => pcr }, ; map of PCRs at the moment the Attestation Document was generated certificate: cert, ; the public key certificate for the public key ; that was used to sign the Attestation Document cabundle: [* cert], ; issuing CA bundle for infrastructure certificate ? public_key: user_data, ; an optional DER-encoded key the attestation ; consumer can use to encrypt data with ? user_data: user_data, ; additional signed user data, defined by protocol ? nonce: user_data, ; an optional cryptographic nonce provided by the ; attestation consumer as a proof of authenticity } cert = bytes .size (1..1024) ; DER encoded certificate user_data = bytes .size (0..1024) pcr = bytes .size (32/48/64) ; PCR content index = 0..31 digest = "SHA384"

Parameter opsional dalam Dokumen Pengesahan (public_key,user_data, dannonce) dapat digunakan untuk membuat protokol validasi kustom antara instance pembuktian dan layanan eksternal.

Pengesahan Validasi dokumen

Saat Anda meminta Dokumen Pengesahan dari Nitro Hypervisor, Anda menerima gumpalan biner yang berisi Dokumen Pengesahan yang ditandatangani. Dokumen Pengesahan yang ditandatangani adalah objek CBOR-encoded, Cose-signed (menggunakan struktur tanda tangan Cose_sign1). Proses validasi keseluruhan mencakup langkah-langkah berikut:

  1. Dekode objek CBOR dan petakan ke struktur COSE_SIGN1.

  2. Ekstrak Dokumen Pengesahan dari struktur Cose_sign1.

  3. Verifikasi rantai sertifikat.

  4. Pastikan bahwa Dokumen Pengesahan ditandatangani dengan benar.

Dokumen Pengesahan ditandatangani oleh AWS Nitro Attestation PKI, yang mencakup sertifikat root untuk partisi komersial. AWS Sertifikat root dapat diunduh https://aws-nitro-enclaves.amazonaws.com.rproxy.govskope.cadari/ AWS_N itroEnclaves_Root-G1.zip, dan dapat diverifikasi menggunakan sidik jari berikut.

64:1A:03:21:A3:E2:44:EF:E4:56:46:31:95:D6:06:31:7E:D7:CD:CC:3C:17:56:E0:98:93:F3:C6:8F:79:BB:5B

Sertifikat root didasarkan pada AWS Certificate Manager Private Certificate Authority (AWS Private CA) kunci pribadi dan memiliki masa pakai 30 tahun. Subjek PCA memiliki format berikut.

CN=aws.nitro-enclaves, C=US, O=Amazon, OU=AWS

COSE dan CBOR

Biasanya, struktur tanda tangan Cose_sign1 digunakan ketika hanya satu tanda tangan yang akan ditempatkan pada pesan. Parameter yang berhubungan dengan konten dan tanda tangan ditempatkan di header yang dilindungi daripada memiliki pemisahan Cose_sign. Struktur dapat dikodekan sebagai tag atau untagged, tergantung pada konteks yang akan digunakan. Struktur Cose_sign1 yang ditandai diidentifikasi oleh tag CBOR 18.

Objek CBOR yang membawa tubuh, tanda tangan, dan informasi tentang tubuh dan tanda tangan disebut struktur COSE_sign1. Struktur Cose_sign1 adalah array CBOR. Array mencakup bidang-bidang berikut.

[ protected: Header, unprotected: Header, payload: This field contains the serialized content to be signed, signature: This field contains the computed signature value. ]

Dalam konteks Dokumen Pengesahan, array mencakup yang berikut ini.

18(/* COSE_Sign1 CBOR tag is 18 */ {1: -35}, /* This is equivalent with {algorithm: ECDS 384} */ {}, /* We have nothing in unprotected */ $ATTESTATION_DOCUMENT_CONTENT /* Attestation Document */, signature /* This is the signature */ )

Untuk informasi lebih lanjut tentang CBOR, lihat RFC 8949: Representasi Objek Biner Ringkas (CBOR).

Validitas semantik

Dokumen Pengesahan akan selalu memiliki bundel CA mereka dalam urutan berikut.

[ ROOT_CERT - INTERM_1 - INTERM_2 .... - INTERM_N] 0 1 2 N - 1

Ingatlah urutan ini, karena beberapa alat yang ada, seperti Java CertPath dari Java PKI API Programmer's Guide, mungkin mengharuskan mereka untuk dipesan secara berbeda.

Untuk memvalidasi sertifikat, mulai dari bundel CA Dokumen Pengesahan dan buat rantai yang diperlukan, Di mana TARGET_CERT sertifikat dalam Dokumen Pengesahan.

[TARGET_CERT, INTERM_N, ..... , INTERM_2, INTERM_1, ROOT_CERT]

Validitas sertifikat

Untuk semua sertifikat dalam rantai, Anda harus memastikan bahwa tanggal saat ini termasuk dalam periode validitas yang ditentukan dalam sertifikat.

Validitas rantai sertifikat

Secara umum, rantai beberapa sertifikat mungkin diperlukan, yang terdiri dari sertifikat pemilik kunci publik yang ditandatangani oleh satu CA, dan nol atau lebih sertifikat tambahan yang CAs ditandatangani oleh yang lain CAs. Rantai semacam itu, yang disebut jalur sertifikasi, diperlukan karena pengguna kunci publik hanya diinisialisasi dengan sejumlah kunci publik CA yang terjamin. Prosedur validasi jalur sertifikasi untuk PKI internet didasarkan pada algoritma yang disediakan dalam X.509. Pemrosesan jalur sertifikasi memverifikasi pengikatan antara nama subjek yang dibedakan nama alternatif and/or subjek dan kunci publik subjek. Pengikatan dibatasi oleh kendala yang ditentukan dalam sertifikat yang terdiri dari jalur dan input yang ditentukan oleh pihak yang mengandalkan. Kendala dasar dan ekstensi kendala kebijakan memungkinkan logika pemrosesan jalur sertifikasi untuk mengotomatiskan proses pengambilan keputusan.

catatan

CRL harus dinonaktifkan saat melakukan validasi.

Menggunakan Java, mulai dari jalur root dan rantai sertifikat yang dihasilkan, validasi rantai adalah sebagai berikut.

validateCertsPath(certChain, rootCertficate) { /* The trust anchor is the root CA to trust */ trustAnchors.add(rootCertificate); /* We need PKIX parameters to specify the trust anchors * and disable the CRL validation */ validationParameters = new PKIXParameters(trustAnchors); certPathValidator = CertPathValidator.getInstance(PKIX); validationParameters.setRevocationEnabled(false); /* We are ensuring that certificates are chained correctly */ certPathValidator.validate(certPath, validationParameters); }