Ký và xác minh dữ liệu bằng Cloud KMS (Không đối xứng)

1. Tổng quan

Cloud KMS là một dịch vụ quản lý khoá được lưu trữ trên đám mây, cho phép bạn quản lý các khoá mã hoá cho dịch vụ đám mây theo cách tương tự như khi bạn quản lý tại cơ sở hạ tầng riêng. Thư viện này hỗ trợ mã hoá, giải mã, ký và xác minh bằng nhiều loại khoá và nguồn, bao gồm cả Cloud HSM cho các khoá dựa trên phần cứng. Hướng dẫn này hướng dẫn bạn cách ký và xác minh dữ liệu bằng khoá Cloud KMS bất đối xứng.

Bạn sẽ học được

  • Cách bật Cloud KMS API
  • Cách tạo Bộ khoá
  • Cách tạo Khoá mã hoá để ký/xác minh bất đối xứng

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

Thiết lập môi trường theo tốc độ của riêng bạn

  1. Đăng nhập vào Cloud Console rồi tạo một dự án mới hoặc sử dụng lại một dự án hiện có. (Nếu chưa có tài khoản Gmail hoặc G Suite, bạn phải tạo một tài khoản.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

Hãy nhớ mã dự án, một tên duy nhất trên tất cả các dự án trên Google Cloud (tên ở trên đã được sử dụng và sẽ không hoạt động đối với bạn, xin lỗi!). Sau này trong lớp học lập trình này, chúng ta sẽ gọi nó là PROJECT_ID.

  1. Tiếp theo, bạn cần bật tính năng thanh toán trong Cloud Console để sử dụng các tài nguyên của Google Cloud.

Việc thực hiện lớp học lập trình này sẽ không tốn nhiều chi phí, nếu có. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" để biết cách tắt các tài nguyên nhằm tránh bị tính phí ngoài phạm vi hướng dẫn này. Người dùng mới của Google Cloud đủ điều kiện tham gia chương trình Dùng thử miễn phí trị giá 300 USD.

Khởi động Cloud Shell

Trong lớp học lập trình này, bạn sẽ sử dụng Cloud Shell, một môi trường ảo hoá miễn phí chạy trên Google Cloud. Trên Bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell trên thanh công cụ ở trên cùng bên phải:

vezHz_9nBUSt_0pD8eMHkzgHehRa83ILgMpcztEJtGZspECiZTk47O02PYk6Zp7jyStful3AIDEZU8qcCNbiXF4WcpkUdJi2LoUbxTWg4cZ4skDnvGKNywBZlDBzzWha111IZ1KqXQ

Quá trình này chỉ mất vài phút để cung cấp và kết nối với môi trường. Khi quá trình này kết thúc, bạn sẽ thấy như sau:

wQQCzLZ7_omk2cuoBaKVPnniKDFG6MsP8h2OA0j3Iw9LRSFQ9TkD6Ccq4dcUASPoD5UKe1Ur7bIgYn5gAh2r6BlQDnpFmgyAtv9x2D6ppXS0pfjfxViuEfoetgLvgVeduekc2hgU2Q

Máy ảo này được trang bị tất cả các công cụ phát triển mà bạn cần. Nó cung cấp một thư mục chính có dung lượng 5 GB và chạy trên Google Cloud, giúp tăng cường đáng kể hiệu suất mạng và xác thực. Trừ phi có hướng dẫn khác, hãy chạy tất cả các lệnh từ shell này.

3. Bật dịch vụ Cloud KMS

Trước khi có thể sử dụng Cloud KMS, trước tiên, bạn phải bật dịch vụ này trong dự án của mình. Bạn chỉ cần thực hiện việc này một lần cho mỗi dự án. Để bật dịch vụ Cloud KMS, hãy chạy lệnh sau:

$ gcloud services enable cloudkms.googleapis.com \
    --project "${GOOGLE_CLOUD_PROJECT}"

Quá trình bật có thể mất đến 1 phút. Lệnh này sẽ báo cáo thành công khi hoàn tất.

4. Tạo khoá KMS

Tạo một bộ khoá Cloud KMS. Trong Cloud KMS, Bộ khoá là một tập hợp logic gồm các khoá mã hoá. Key Ring chứa siêu dữ liệu về các khoá, chẳng hạn như vị trí của khoá. Tạo một Bộ khoá có tên là my-keyring trong khu vực global:

$ gcloud kms keyrings create "my-keyring" \
    --location "global"

Bây giờ, hãy tạo một Khoá mã hoá có tên là my-asymmetric-signing-key với mục đích là asymmetric-signing trong Bộ khoá mà bạn vừa tạo.

$ gcloud kms keys create "my-asymmetric-signing-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "asymmetric-signing" \
    --default-algorithm "rsa-sign-pkcs1-4096-sha512"

5. Dữ liệu biển báo

Không giống như mã hoá, việc giải mã dữ liệu được mã hoá bằng khoá Cloud KMS bất đối xứng yêu cầu phải có quyền truy cập trực tuyến vào dịch vụ Cloud KMS. Giải mã văn bản mã hoá trong tệp bằng công cụ dòng lệnh gcloud:

Tạo một tệp chứa dữ liệu cần ký và sử dụng công cụ dòng lệnh gcloud để ký dữ liệu bằng khoá Cloud KMS:

$ echo "my-contents" > ./data.txt
$ gcloud kms asymmetric-sign \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-signing-key" \
    --version "1" \
    --digest-algorithm "sha512" \
    --input-file ./data.txt \
    --signature-file ./data.txt.sig

Chữ ký được lưu trong data.txt.sig trên ổ đĩa. Nếu mở tệp data.txt.sig, bạn sẽ thấy tệp này có các ký tự lạ, không in được. Đó là do dữ liệu kết quả ở định dạng nhị phân.

Khi lưu trữ chữ ký trong cơ sở dữ liệu hoặc truyền chữ ký đó trong yêu cầu HTTP, bạn có thể cần mã hoá dữ liệu. Một cơ chế mã hoá phổ biến là base64.

6. Xác minh dữ liệu

Với khoá không đối xứng, Cloud KMS không trực tiếp thực hiện quy trình xác minh. Thay vào đó, dịch vụ này cung cấp quyền truy cập vào một khoá công khai và bạn xác minh dữ liệu bằng khoá công khai đó thông qua mật mã học khoá công khai. Với khoá không đối xứng, bạn có thể xác minh hoàn toàn khi không có mạng và không cần truy cập vào Cloud KMS hoặc bất kỳ API Cloud nào khác của Google Cloud. Quy trình xác minh được thực hiện bằng một công cụ mật mã học như openssl hoặc bằng một ngôn ngữ lập trình hay thư viện hỗ trợ tiêu chuẩn mã hoá khoá công khai.

Tải khoá công khai xuống từ Cloud KMS:

$ gcloud kms keys versions get-public-key "1" \
    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-signing-key" \
    --output-file ./key.pub

Xác minh chữ ký dựa trên khoá công khai bằng công cụ dòng lệnh openssl:

$ openssl dgst -sha256 \
    -verify ./key.pub \
    -signature ./data.txt.sig ./data.txt

Bảng điều khiển sẽ in một thông báo thành công, cho biết chữ ký số hợp lệ.

Verified OK

7. Xin chúc mừng!

Bạn đã bật API Cloud KMS, tạo khoá ký bất đối xứng, ký và xác minh dữ liệu! Cloud KMS là một sản phẩm mạnh mẽ và việc ký/xác minh chỉ là một phần nhỏ trong số các chức năng của sản phẩm này.

Dọn dẹp

Nếu đã khám phá xong, vui lòng cân nhắc việc xoá dự án của bạn.

Tìm hiểu thêm

Giấy phép

Tác phẩm này được cấp phép theo Giấy phép Ghi công theo Creative Commons 2.0 Chung.