Impor kunci quantum-safe

Panduan ini menunjukkan cara mengimpor kunci kriptografis ke Cloud Key Management Service sebagai versi kunci baru menggunakan metode impor quantum-safe. Pendekatan ini membantu melindungi kunci selama transit dari serangan "kumpulkan sekarang, dekripsi nanti" (HNDL) oleh komputer kuantum di masa mendatang.

Impor kunci yang aman dari serangan kuantum menggunakan alat kriptografi post-quantum (PQC) standar, termasuk mekanisme enkapsulasi kunci (KEM) dan enkripsi kunci publik hibrida (HPKE) untuk melindungi kunci Anda selama dalam pengiriman.

Impor kunci quantum-safe didukung untuk kunci yang didukung software (tingkat perlindungan SOFTWARE).

Sebelum memulai

Sebelum dapat mengimpor kunci, Anda harus menyiapkan project, sistem lokal, dan materi kunci itu sendiri.

Menyiapkan project

  1. Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the required API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  5. Instal Google Cloud CLI.

  6. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  7. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the required API.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

  11. Instal Google Cloud CLI.

  12. Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.

  13. Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:

    gcloud init

Peran yang diperlukan

Untuk mendapatkan izin yang Anda perlukan untuk mengimpor kunci, minta administrator untuk memberi Anda peran IAM berikut pada ring kunci:

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Menyiapkan sistem lokal

Anda memerlukan library kriptografi di sistem lokal yang mendukung alat kriptografi pasca-kuantum (PQC), termasuk mekanisme enkapsulasi kunci (KEM) dan enkripsi kunci publik hibrida (HPKE). Anda dapat menggunakan Tink, OpenSSL, atau library kriptografi lain yang mendukung hal berikut:

  • Enkripsi kunci publik hibrida (HPKE)
  • Salah satu algoritma KEM berikut:
    • ML-KEM-768
    • ML-KEM-1024
    • X-WING (gabungan dari ML-KEM-768 dan X25519)
  • Fungsi derivasi kunci (KDF) HKDF-SHA256
  • Enkripsi yang diautentikasi dengan data terkait (AEAD) menggunakan algoritma AES-256-GCM

Siapkan kunci

Pastikan algoritma dan panjang kunci Anda didukung. Semua versi kunci harus memiliki tingkat perlindungan yang sama (SOFTWARE).

Buat kunci target dan key ring

Saat Anda mengimpor materi kunci, materi kunci tersebut akan menjadi versi kunci baru pada kunci yang ada. Kunci ini disebut kunci target. Target key ring dan target kunci harus ada sebelum Anda dapat mengimpor materi kunci.

Ikuti langkah-langkah berikut untuk membuat kunci kosong yang didukung software di ring kunci baru menggunakan Google Cloud CLI atau konsol Google Cloud .

Konsol

  1. Di konsol Google Cloud , buka halaman Key Management.

    Buka Key Management

  2. Klik Create key ring.

  3. Di kolom Key ring name, masukkan nama untuk key ring.

  4. Di bagian Jenis lokasi, pilih jenis lokasi dan lokasi.

  5. Klik Create. Halaman Buat kunci akan terbuka.

  6. Di kolom Key name, masukkan nama untuk kunci Anda.

  7. Untuk Tingkat perlindungan, pilih Software.

  8. Untuk Key material, pilih Imported key, lalu klik Continue. Tindakan ini mencegah pembuatan versi kunci awal.

  9. Tetapkan Tujuan dan Algoritma untuk kunci, lalu klik Lanjutkan.

  10. Opsional: Jika Anda ingin kunci ini hanya berisi versi kunci yang diimpor, pilih Batasi versi kunci hanya untuk impor. Hal ini mencegah Anda secara tidak sengaja membuat versi kunci baru di Cloud KMS.

  11. Opsional: Untuk kunci yang diimpor, rotasi otomatis dinonaktifkan secara default. Untuk mengaktifkan rotasi otomatis, pilih nilai dari kolom Periode rotasi kunci.

    Jika Anda mengaktifkan rotasi otomatis, versi kunci baru akan dibuat di Cloud KMS, dan versi kunci yang diimpor tidak akan lagi menjadi versi kunci default setelah rotasi.

  12. Klik Create.

gcloud

Untuk menggunakan Cloud KMS di command line, Instal atau upgrade ke versi terbaru Google Cloud CLI terlebih dahulu.

  1. Buat key ring target. Pilih lokasi yang kompatibel dengan tingkat perlindungan yang ingin Anda gunakan. Untuk mengetahui informasi selengkapnya tentang lokasi yang didukung, lihat lokasi Cloud KMS.

    gcloud kms keyrings create KEY_RING \
      --location LOCATION
    

    Anda dapat mempelajari lebih lanjut cara membuat key ring.

  2. Buat kunci target menggunakan perintah kms keys create dengan flag --skip-initial-version-creation. Tindakan ini akan membuat kunci tanpa versi kunci awal sehingga materi kunci yang diimpor adalah versi 1. Gunakan flag --import-only untuk mencegah Cloud KMS membuat materi kunci untuk versi kunci baru. Dengan setelan flag ini, versi kunci baru untuk kunci ini harus diimpor. Kunci yang dibuat sebagai --import-only harus dirotasi secara manual.

    gcloud kms keys create KEY_NAME \
      --location LOCATION \
      --keyring KEY_RING \
      --purpose PURPOSE \
      --protection-level SOFTWARE \
      --skip-initial-version-creation \
      --import-only
    

    Ganti kode berikut:

    • KEY_NAME: nama yang ingin Anda gunakan untuk kunci.
    • LOCATION: lokasi key ring.
    • KEY_RING: key ring tempat Anda ingin membuat kunci.
    • PURPOSE: tujuan yang ingin Anda gunakan untuk kunci.

API

Contoh ini menggunakan curl sebagai klien HTTP untuk menunjukkan penggunaan API. Untuk mengetahui informasi selengkapnya tentang kontrol akses, lihat Mengakses Cloud KMS API.

  1. Buat key ring baru:

    curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings?keyRingId=KEY_RING" \
        --request "POST" \
        --header "authorization: Bearer TOKEN" \
        --header "content-type: application/json" \
        --header "x-goog-user-project: PROJECT_ID" \
        --data "{}"
    

    Lihat dokumentasi API KeyRing.create untuk mengetahui informasi selengkapnya.

  2. Buat kunci kosong hanya untuk impor:

    curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys?cryptoKeyId=KEY_NAME&skipInitialVersionCreation=true" \
        --request "POST" \
        --header "authorization: Bearer TOKEN" \
        --header "content-type: application/json" \
        --header "x-goog-user-project: PROJECT_ID" \
        --data "{"purpose":"PURPOSE", "importOnly": "true", "versionTemplate":{"protectionLevel":"PROTECTION_LEVEL","algorithm":"ALGORITHM"}}"
    

    Lihat dokumentasi API CryptoKey.create untuk mengetahui informasi selengkapnya.

Key ring dan kunci kini ada, tetapi kunci tidak berisi materi kunci, tidak memiliki versi, dan tidak aktif. Selanjutnya, Anda membuat tugas impor.

Buat tugas impor

Tugas impor menentukan karakteristik kunci yang diimpornya, termasuk tingkat perlindungan dan metode impor.

Impor kunci quantum-safe hanya didukung untuk tingkat perlindungan SOFTWARE. Pilih salah satu metode impor quantum-safe berikut:

  • HPKE_KEM_XWING_HKDF_SHA256_AES_256_GCM
  • HPKE_KEM_ML_KEM_768_HKDF_SHA256_AES_256_GCM
  • HPKE_KEM_ML_KEM_1024_HKDF_SHA256_AES_256_GCM

gcloud

Jalankan perintah berikut untuk membuat tugas impor dengan metode impor yang quantum-safe:

gcloud kms import-jobs create IMPORT_JOB \
    --location LOCATION \
    --keyring KEY_RING \
    --import-method IMPORT_METHOD \
    --protection-level software

Ganti kode berikut:

  • IMPORT_JOB: nama unik yang akan digunakan untuk tugas impor.
  • LOCATION: lokasi key ring tempat Anda membuat kunci target.
  • KEY_RING: nama key ring tempat Anda membuat kunci target.
  • IMPORT_METHOD: metode impor quantum-safe yang ingin Anda gunakan—misalnya, hpke-kem-xwing-hkdf-sha256-aes-256-gcm.

REST

Panggil metode keyRings.importJobs.create:

curl "https://cloudkms.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/importJobs?import_job_id=IMPORT_JOB" \
    --request "POST" \
    --header "authorization: Bearer TOKEN" \
    --header "content-type: application/json" \
    --data '{"import_method": "IMPORT_METHOD", "protection_level": "SOFTWARE"}'

Ganti kode berikut:

  • PROJECT_ID: ID project Cloud KMS Anda.
  • LOCATION: lokasi key ring tempat Anda membuat kunci target.
  • KEY_RING: nama key ring tempat Anda membuat kunci target.
  • IMPORT_JOB: nama unik yang akan digunakan untuk tugas impor.
  • TOKEN: token untuk mengautentikasi permintaan.
  • IMPORT_METHOD: metode impor quantum-safe yang ingin Anda gunakan—misalnya, HPKE_KEM_XWING_HKDF_SHA256_AES_256_GCM.

Periksa status tugas impor

Status awal untuk tugas impor adalah PENDING_GENERATION. Jika statusnya adalah ACTIVE, Anda dapat menggunakannya untuk mengimpor kunci.

Masa berlaku tugas impor akan berakhir setelah tiga hari. Jika masa berlaku tugas impor telah berakhir, Anda harus membuat tugas baru.

Anda dapat memeriksa status tugas impor menggunakan Google Cloud CLI, konsolGoogle Cloud , atau Cloud Key Management Service API.

Konsol

  1. Buka halaman Key Management di konsol Google Cloud .

    Buka halaman Key Management

  2. Klik nama key ring yang berisi tugas impor Anda.

  3. Klik tab Pekerjaan Impor di bagian atas halaman.

  4. Status akan terlihat di bagian Status di samping nama tugas impor Anda.

gcloud

Untuk menggunakan Cloud KMS di command line, Instal atau upgrade ke versi terbaru Google Cloud CLI terlebih dahulu.

Saat tugas impor aktif, Anda dapat menggunakannya untuk mengimpor kunci. Proses ini mungkin memerlukan waktu beberapa menit. Gunakan perintah ini untuk memverifikasi bahwa tugas impor sedang aktif. Gunakan lokasi dan keyring tempat Anda membuat tugas impor.

gcloud kms import-jobs describe IMPORT_JOB \
  --location LOCATION \
  --keyring KEY_RING \
  --format="value(state)"

Outputnya mirip dengan hal berikut ini:

state: ACTIVE

Go

Untuk menjalankan kode ini, siapkan lingkungan pengembangan Go terlebih dahulu dan instal Cloud KMS Go SDK.

import (
	"context"
	"fmt"
	"io"

	kms "cloud.google.com/go/kms/apiv1"
	"cloud.google.com/go/kms/apiv1/kmspb"
)

// checkStateImportJob checks the state of an ImportJob in KMS.
func checkStateImportJob(w io.Writer, name string) error {
	// name := "projects/PROJECT_ID/locations/global/keyRings/my-key-ring/importJobs/my-import-job"

	// Create the client.
	ctx := context.Background()
	client, err := kms.NewKeyManagementClient(ctx)
	if err != nil {
		return fmt.Errorf("failed to create kms client: %w", err)
	}
	defer client.Close()

	// Call the API.
	result, err := client.GetImportJob(ctx, &kmspb.GetImportJobRequest{
		Name: name,
	})
	if err != nil {
		return fmt.Errorf("failed to get import job: %w", err)
	}
	fmt.Fprintf(w, "Current state of import job %q: %s\n", result.Name, result.State)
	return nil
}

Java

Untuk menjalankan kode ini, siapkan lingkungan pengembangan Java terlebih dahulu dan instal Cloud KMS Java SDK.

import com.google.cloud.kms.v1.ImportJob;
import com.google.cloud.kms.v1.ImportJobName;
import com.google.cloud.kms.v1.KeyManagementServiceClient;
import java.io.IOException;

public class CheckStateImportJob {

  public void checkStateImportJob() throws IOException {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "your-project-id";
    String locationId = "us-east1";
    String keyRingId = "my-key-ring";
    String importJobId = "my-import-job";
    checkStateImportJob(projectId, locationId, keyRingId, importJobId);
  }

  // Check the state of an import job in Cloud KMS.
  public void checkStateImportJob(
      String projectId, String locationId, String keyRingId, String importJobId)
      throws IOException {