Memverifikasi pengesahan

Topik ini menunjukkan cara memverifikasi pengesahan untuk kunci Cloud HSM, yang selalu disimpan dalam modul keamanan hardware (HSM).

Ringkasan

Dalam kriptografi, pengesahan adalah pernyataan yang dapat dibaca mesin dan dapat dibuktikan secara terprogram yang dibuat oleh software tentang dirinya sendiri. Pengesahan adalah komponen penting dari komputasi tepercaya, dan mungkin diperlukan untuk alasan kepatuhan.

Untuk melihat dan memverifikasi pengesahan, Anda meminta pernyataan pengesahan yang ditandatangani secara kriptografis dari HSM, beserta rantai sertifikat yang digunakan untuk menandatanganinya. Pernyataan pengesahan dihasilkan oleh hardware HSM, dan ditandatangani oleh sertifikat yang dimiliki oleh Google dan oleh produsen HSM.

Setelah mendownload pernyataan pengesahan dan rantai sertifikat, Anda dapat memeriksa atributnya atau memverifikasi validitas pengesahan menggunakan rantai sertifikat.

Skrip pengesahan adalah skrip Python open source yang dikembangkan oleh Google. Anda dapat melihat kode sumber skrip untuk mempelajari lebih lanjut format pengesahan dan cara kerja verifikasi, atau sebagai model untuk solusi yang disesuaikan.

Contoh dalam topik ini dirancang untuk lingkungan Linux, termasuk Cloud Shell. Untuk mengikuti klien macOS atau Windows, Anda mungkin perlu melakukan modifikasi.

Sebelum memulai

Memverifikasi pengesahan

Proses verifikasi pengesahan dapat dilakukan secara otomatis melalui Konsol Google Cloud, atau secara manual dengan mendownload paket pengesahan dan skrip verifikasi pengesahan, lalu menjalankannya secara lokal atau di Cloud Shell.

Memverifikasi pengesahan melalui konsol Google Cloud

Anda dapat memverifikasi pengesahan ini melalui Konsol Google Cloud yang akan membuka Cloud Shell dan mengisinya dengan cuplikan kode yang diperlukan untuk melakukan seluruh proses verifikasi pengesahan.

  1. Buka halaman Key Management di konsol Google Cloud.

    Buka halaman Key Management

  2. Pilih key ring berisi kunci yang ingin Anda pengesahan, lalu pilih kunci tersebut.

  3. Klik More untuk versi kunci yang ingin Anda pengesahan, lalu pilih Verify pengesahan.

  4. Dalam dialog Verify attestation, klik Open Cloud Shell. Tindakan ini akan membuka Cloud Shell dan mengisinya dengan cuplikan kode yang diperlukan untuk melalui seluruh proses verifikasi.

  5. Periksa cuplikan kode yang telah diisi sebelumnya di Cloud Shell. Cuplikan tersebut akan mendownload skrip verifikasi pengesahan dan dependensinya, menjalankan perintah gcloud untuk mendownload pengesahan dan rantai sertifikat, lalu menjalankan skrip untuk memverifikasi pengesahan tersebut.

  6. Jalankan cuplikan kode untuk memverifikasi pengesahan.

Memverifikasi pengesahan secara manual

Pengesahan, rantai sertifikat, dan skrip verifikasi pengesahan harus didownload sebelum memverifikasi pengesahan secara manual.

  1. Download rantai pengesahan dan sertifikat.

    Konsol

    1. Buka halaman Key Management di konsol Google Cloud.

      Buka halaman Key Management

    2. Pilih key ring berisi kunci yang ingin Anda pengesahan, lalu pilih kunci tersebut.

    3. Klik More untuk versi kunci yang ingin Anda pengesahan, lalu pilih Verify pengesahan.

    4. Dalam dialog Verify attestation, klik Download Attestation Bundle. Tindakan ini akan mendownload file ZIP yang berisi rantai pengesahan dan sertifikat.

    5. Ekstrak pengesahan dan rantai sertifikat dari paket pengesahan.

    gcloud

    1. Klik Activate Cloud Shell di bagian atas jendela konsol.

      Mengaktifkan Cloud Shell Sesi Cloud Shell akan terbuka di dalam frame baru di bagian bawah konsol dan menampilkan perintah command line. Perlu waktu beberapa detik hingga sesi shell diinisialisasi.

      Sesi Cloud Shell

    2. Pada prompt command line Cloud Shell, gunakan perintah gcloud kms keys versions describe untuk mengambil pengesahan kunci yang ingin Anda pengesahan. Flag --attestation-file menentukan jalur dan tujuan nama file untuk pengesahan yang diambil.

      gcloud kms keys versions describe key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --attestation-file [attestation-file] \
      
    3. Pada prompt command line Cloud Shell, gunakan perintah gcloud kms keys versions get-certificate-chain untuk mengambil rantai sertifikat untuk kunci yang ingin Anda pengesahan. Flag --output-file menentukan jalur dan tujuan nama file untuk sertifikat yang diambil.

      gcloud kms keys versions get-certificate-chain key-version \
       --key key-name \
       --location location \
       --keyring keyring-name \
       --output-file [certificates-file] \
      
  2. Download skrip untuk memverifikasi pengesahan dan prasyaratnya, lalu buka dokumentasi skrip untuk memverifikasi pengesahan dalam file pengesahan menggunakan sertifikat dalam file sertifikat.

Mengurai nilai pengesahan

Dokumentasi produsen HSM menyertakan petunjuk lengkap tentang penggunaan skripnya untuk mengurai nilai pengesahan dan memverifikasi kunci publik untuk pasangan kunci asimetris. Pengesahan tersebut perlu didekompresi dengan perintah berikut sebelum dapat diurai.

  • Buka kompresi pengesahan terkompresi.

    gzip -d < compressed_attestation.dat > attestation.dat
    

Link ini akan langsung membuka petunjuk spesifik dari produsen HSM:

Petunjuk untuk mengurai nilai pengesahan mencakup referensi kolom umum dalam pengesahan, tidak khusus untuk kunci HSM di Cloud HSM.

Bagian berikut menggambarkan cara memverifikasi informasi tentang kunci Anda yang khusus untuk Cloud HSM.

Memverifikasi ID versi kunci

Anda dapat memverifikasi apakah hash SHA-256 untuk ID resource versi kunci ada dalam pengesahan. Nama resource kunci adalah bagian dari kolom 0x0102 atau kolom ID kunci dalam file pengesahan. ID kunci terdiri dari dua ringkasan hash SHA-256 gabungan dalam format heksadesimal. Yang kedua harus sesuai dengan nama resource kunci.

  1. Dapatkan ID resource versi kunci untuk versi kunci. Anda dapat menggunakan Konsol Google Cloud untuk mendapatkan ID resource versi kunci atau menjalankan perintah berikut:

    gcloud kms keys versions list \
       --location location \
       --keyring key-ring-name \
       --key key-name
    
  2. Pada command line, tetapkan resource_name ke ID resource versi kunci yang baru saja Anda ambil.

    RESOURCE_NAME="projects/project-id/locations/location/keyRings/key-ring-name/cryptoKeys/key-name/cryptoKeyVersions/key-version"
    
  3. Karena skrip penguraian membuang semua kolom pengesahan dalam format heksadesimal, ID kunci akan diformat ke dalam format heksadesimal dua kali. (Sekali saat membuat keyID, lainnya saat mengurai pengesahan). Untuk memverifikasi bahwa nama resource cocok dengan ID kunci, konversikan nama resource menjadi ringkasan hex SHA-256, kembalikan konversi heksadesimal satu ID kunci dalam file pengesahan, dan bandingkan keduanya.

    RESOURCE_NAME_HEX="$(echo -n ${RESOURCE_NAME} | openssl dgst -sha256 -hex | awk '{print $2}')"
    
  4. Skrip penguraian membuang semua kolom pengesahan dalam format heksadesimal, dan ID kunci dienkode secara internal oleh heksadesimal untuk kedua kalinya. Tetapkan variabel lingkungan KEYID_HEX ke nilai ID kunci dengan satu lapisan encoding heksadesimal yang didekode:

    KEYID_HEX=$(grep -m 1 0x0102 /path/to/parsed/attestation.dat | awk '{print $2}' | xxd -p -r)
    
  5. Bandingkan nilai RESOURCE_NAME_HEX dan KEYID_HEX sebagai string:

    test  ${RESOURCE_NAME_HEX} == ${KEYID_HEX:(-64)} || echo "Values don't match"
    

    Jika nilainya cocok, tidak ada output yang akan ditampilkan dan perintah akan keluar dengan kode 0.

Verifikasi properti lain kunci

Anda dapat melihat berbagai properti utama, yang sesuai dengan kolom dalam standar PKCS #11. Gunakan contoh berikut sebagai panduan untuk memverifikasi properti kunci lainnya.

  • Apakah kunci dapat diekstrak disimpan di kolom 0x0102 pada output yang diurai. Untuk menentukan apakah kunci dapat diekstrak, periksa kolom 0x0162. Nilai \x01 adalah true dan nilai \x00 adalah false.

    Kunci Cloud HSM tidak dapat diekstrak.

    grep '0x0162:' /path/to/parsed/attestation.dat
    
  • Cara kunci masuk ke HSM (baik dibuat secara langsung maupun diimpor) disimpan di kolom 0x0163. Jika kunci dibuat secara lokal di HSM, kolom akan ditetapkan ke \x01. Kolom kunci yang diimpor ditetapkan ke \x00.

    Anda dapat menyimpulkan beberapa informasi dari bagaimana kunci tersebut berada di HSM. Jika kunci dibuat di Cloud HSM, artinya kunci tersebut tidak pernah disimpan tanpa dienkripsi di luar HSM. Jika kunci diimpor, mekanisme impor menjamin bahwa kunci tersebut terlindungi saat dalam proses impor, dan dalam Cloud HSM sesudahnya.

    grep '0x0163:' /path/to/parsed/attestation.dat
    
  • Jenis kunci disimpan di kolom 0x0100. Jenis kunci didokumentasikan dalam standar PCKS#11 dengan awalan CKK_*. Misalnya, kunci AES memiliki jenis \x1f.

    grep '0x0100:' /path/to/parsed/attestation.dat
    

Informasi tambahan

Anda memverifikasi pengesahan untuk menentukan apakah versi kunci dibuat dalam HSM.