1. Tổng quan
Cloud KMS là dịch vụ quản lý khoá được lưu trữ trên đám mây, cho phép bạn quản lý khoá mã hoá cho các dịch vụ đám mây giống như cách bạn quản lý tại cơ sở hạ tầng riêng. Phiên bản này hỗ trợ việc 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 khoá dựa trên phần cứng. Hướng dẫn này chỉ cho 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ẽ tìm hiểu
- Cách bật Cloud KMS API
- Cách tạo Vòng chìa khoá
- Cách tạo Khoá mã hoá để 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 tiến độ riêng
- Đăng nhập vào Cloud Console rồi tạo dự án mới hoặc sử dụng lại 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.)
Xin lưu ý rằng mã dự án là một tên riêng biệt trong tất cả dự án Google Cloud (tên ở trên đã được sử dụng nên sẽ không phù hợp với bạn!). Lớp này sẽ được đề cập sau trong lớp học lập trình này là PROJECT_ID
.
- Tiếp theo, bạn sẽ cần bật tính năng thanh toán trong Cloud Console để sử dụng tài nguyên của Google Cloud.
Việc chạy qua lớp học lập trình này sẽ không tốn nhiều chi phí. Hãy nhớ làm theo mọi hướng dẫn trong phần "Dọn dẹp" sẽ tư vấn cho bạn cách tắt tài nguyên để bạn không phải chịu thanh toán ngoài 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í 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. Trong Bảng điều khiển GCP, hãy nhấp vào biểu tượng Cloud Shell ở thanh công cụ trên cùng bên phải:
Sẽ chỉ mất một chút thời gian để cấp phép và kết nối với môi trường. Sau khi hoàn tất, bạn sẽ thấy như sau:
Máy ảo này chứa tất cả các công cụ phát triển mà bạn cần. Dịch vụ này cung cấp thư mục gốc có dung lượng ổn định 5 GB và chạy trên Google Cloud, giúp nâng cao đáng kể hiệu suất và khả năng xác thực của mạng. Nếu không 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
Để 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 vòng khoá Cloud KMS. Trong Cloud KMS, Vòng khoá là một tập hợp logic gồm các khoá mã hoá. Vòng khoá chứa siêu dữ liệu về các khoá, chẳng hạn như vị trí của các khoá đó. Tạo Vòng khoá có tên my-keyring
trong vùng global
:
$ gcloud kms keyrings create "my-keyring" \ --location "global"
Bây giờ, hãy tạo một Khoá mã hoá có tên my-asymmetric-encryption-key
với mục đích là asymmetric-encryption
bên trong Vòng khoá 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á bất đối xứng, Cloud KMS không thực hiện việc mã hoá. Thay vào đó, ứng dụng sẽ 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 quy trình mã hoá khoá công khai. Với khoá bất đối xứng, quá trình mã hoá có thể thực hiện hoàn toàn không cần mạng và không yêu cầu quyền truy cập vào Cloud KMS hay bất kỳ API Google Cloud nào khác. Quá trình mã hoá được thực hiện bằng một công cụ mã hoá như openssl
hoặc bằng một ngôn ngữ lập trình hay thư viện có 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 để 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à "bản mật mã") 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ó những ký tự lạ và không in được. Lý do là dữ liệu thu được ở định dạng nhị phân.
Khi lưu trữ thuật toán mật mã trong cơ sở dữ liệu hoặc truyền thuật toán đó dưới dạng một phần của yêu cầu HTTP, bạn có thể cần phải mã hoá dữ liệu đó. Cơ chế mã hoá phổ biến nhất cho văn bản mật 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 mật mã này vào một vị trí an toàn vì hệ thống sẽ yêu cầu bạn 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á, quá trình giải mã dữ liệu được mã hoá bằng khoá Cloud KMS bất đối xứng yêu cầu quyền truy cập trực tuyến vào dịch vụ Cloud KMS. Giải mã thuật toán mật mã từ 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
đọc văn bản mật mã của tệp và giải mã tệp đó bằng Cloud KMS. Lưu ý rằng ví dụ này chỉ định đối số --plaintext-file
là -
. Thao tác này sẽ hướng dẫn gcloud
in kết quả đến thiết bị đầu cuối.
Bảng điều khiển sẽ in my-contents
, chính là giá trị văn bản thuần tuý trong tệp ở trên.
7. Xin chúc mừng!
Bạn đã bật Cloud KMS API, tạo một 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à giải pháp mã hoá/giải mã chỉ mới đề cao những khả 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 xem xét xoá dự án của bạn.
- Truy cập vào Bảng điều khiển Cloud Platform
- Chọn dự án bạn muốn tắt, sau đó nhấp vào "Xoá" ở trên cùng. Thao tác này sẽ lên lịch 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 chung Ghi nhận tác giả Creative Commons 2.0.