Mã hoá và giải mã dữ liệu bằng Cloud KMS (Bất đố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 mã hoá và giải mã 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á cho hoạt động mã hoá/giải mã 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-encryption-key với mục đích là asymmetric-encryption trong Bộ khoá mà bạn vừa tạo.

$ gcloud kms keys create "my-asymmetric-encryption-key" \
    --location "global" \
    --keyring "my-keyring" \
    --purpose "asymmetric-encryption" \
    --default-algorithm "rsa-decrypt-oaep-4096-sha512"

5. Mã hoá dữ liệu

Với khoá không đối xứng, Cloud KMS không thực hiện quy trình mã hoá. Thay vào đó, khoá này cung cấp quyền truy cập vào một khoá công khai và bạn mã hoá dữ liệu bằng khoá công khai đó thông qua mật mã học khoá công khai. Với khoá bất đối xứng, bạn có thể mã hoá 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ỳ Cloud API nào khác của Google Cloud. Quá trình mã hoá đượ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-encryption-key" \
    --output-file ./key.pub

Tạo một tệp có dữ liệu cần mã hoá và sử dụng công cụ dòng lệnh openssl để mã hoá dữ liệu trong tệp:

$ echo "my-contents" > ./data.txt
$ openssl pkeyutl -encrypt -pubin \
    -in ./data.txt \
    -inkey ./key.pub \
    -pkeyopt "rsa_padding_mode:oaep" \
    -pkeyopt "rsa_oaep_md:sha512" \
    -pkeyopt "rsa_mgf1_md:sha512" > ./data.txt.enc

Dữ liệu đã mã hoá (còn gọi là "văn bản mã hoá") sẽ được lưu trong data.txt.enc trên ổ đĩa. Nếu mở tệp data.txt.enc, 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ữ văn bản mã hoá trong cơ sở dữ liệu hoặc truyền văn bản đó trong yêu cầu HTTP, bạn có thể cần mã hoá dữ liệu. Cơ chế mã hoá phổ biến nhất cho bản mã là base64.

Cloud KMS không lưu trữ bất kỳ văn bản thuần tuý nào mà bạn cung cấp. Bạn cần lưu trữ văn bản mã hoá này ở một nơi an toàn vì bạn sẽ cần đến văn bản này để truy xuất giá trị văn bản thuần tuý.

6. Giải mã dữ liệu

Không giống như mã hoá, việc giải mã dữ liệu được mã hoá bằng khoá Cloud KMS không đối xứng đòi hỏi 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:

$ gcloud kms asymmetric-decrypt \


    --location "global" \
    --keyring "my-keyring" \
    --key "my-asymmetric-encryption-key" \
    --version "1" \
    --plaintext-file - \
    --ciphertext-file ./data.txt.enc

Công cụ dòng lệnh gcloud sẽ đọc văn bản mã hoá từ tệp và giải mã văn bản đó bằng Cloud KMS. Lưu ý rằng ví dụ này chỉ định đối số --plaintext-file-. Thao tác này hướng dẫn gcloud in kết quả ra thiết bị đầu cuối.

Bảng điều khiển sẽ in my-contents, đây là giá trị văn bản thuần tuý giống như trong tệp ở trên.

7. Xin chúc mừng!

Bạn đã bật Cloud KMS API, tạo khoá mã hoá bất đối xứng, cũng như mã hoá và giải mã dữ liệu! Cloud KMS là một sản phẩm mạnh mẽ và việc mã hoá/giải mã 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 bạn đã khám phá xong, vui lòng cân nhắc việc xoá dự á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.