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
- Đă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.)
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.
- 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:
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:
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 là -. 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.
- Chuyển đến Bảng điều khiển Cloud Platform
- Chọn dự án mà bạn muốn tắt, rồi 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 Ghi công theo Creative Commons 2.0 Chung.