Mã hoá PGP
PGP là một bộ tiêu chuẩn gồm các thuật toán mã hoá, giải mã và ký giúp cung cấp quyền riêng tư và xác thực bằng mật mã.
Khi sử dụng PGP để mã hoá tải trọng, đối tác phải hỗ trợ:
- Mã hoá và giải mã tải trọng bằng nhiều khoá PGP.
- Ký tải trọng bằng nhiều khoá PGP.
- Xác minh tải trọng bằng nhiều chữ ký, trong đó bất kỳ chữ ký nào cũng có thể là chữ ký bằng khoá do Google cung cấp.
- Giải mã tải trọng được mã hoá base64 an toàn cho web.
Khoá công khai PGP mà bạn cung cấp cho Google phải có khoá phụ dùng để mã hoá. Khoá con cho phép xoay độc lập với khoá chính. Khoá chính được dùng để xác minh danh tính. Khoá riêng tư phải là khoá RSA 2048 bit (trở lên) hết hạn sau một năm với thời gian hoạt động tối đa là hai năm.
Trước khi bắt đầu phát triển, bạn cần trao đổi khoá PGP với Google. Ở bước này, bạn tạo một cặp khoá công khai-riêng tư PGP, cung cấp khoá công khai cho Google và nhận lại khoá công khai từ Google. Trong quá trình phát triển, bạn chỉ cần trao đổi các khoá hộp cát dùng để phát triển và kiểm thử bên ngoài môi trường sản xuất. Trước khi kiểm thử và phát hành công khai, bạn sẽ cần thực hiện một lần trao đổi khoá phát hành công khai khác.
Tạo khoá PGP mới
Giả sử bạn có tệp nhị phân GPG trong đường dẫn hệ thống, bạn có thể sử dụng lệnh POSIX sau để tạo một cặp khoá mới.
$ gpg --full-generate-key
Khi được nhắc, hãy chọn một khoá RSA có độ hỗn loạn tối thiểu là 2048 bit và thời gian hết hạn là 1-2 năm. Lệnh này sẽ tạo cả khoá chính (có nhãn SC, cho việc "K"ý và "T"ạo chứng chỉ) và khoá phụ (có nhãn E, cho việc "M"ã hoá).
Cấu hình thư viện PGP
Gửi tải trọng
- Khi ký, bạn nên sử dụng
SHA384
làm thuật toán chuỗi đại diện; không sử dụngSHA1
hoặcMD5
- Khi mã hoá, bạn nên sử dụng
AES256
làm thuật toán mã hoá đối xứng; không sử dụngCAST5
hoặcIDEA
- Khi mã hoá hoặc ký thư, hãy nhớ chọn khoá phụ có mục đích tương ứng; sử dụng khoá
CAN_SIGN
để ký và khoáENCRYPT_COMMS
/ENCRYPT_STORAGE
để mã hoá
Nhận tải trọng
- Khi xác minh tải trọng, hãy đảm bảo thư viện của bạn hỗ trợ các thuật toán băm hiện đại như
SHA384
. Google sẽ bắt đầu sử dụng khoá này trên tất cả khoá mới kể từ ngày 14 tháng 5 năm 2023. - Khi giải mã tải trọng, hãy đảm bảo thư viện của bạn hỗ trợ các thuật toán mã hoá đối xứng hiện đại như
AES256
. Google sẽ bắt đầu sử dụng mã này trên tất cả các khoá mới kể từ ngày 14 tháng 5 năm 2023.
Ví dụ về mã hoá tải trọng GPG
Lệnh dưới đây là ví dụ về cách chọn các tuỳ chọn bảo mật khi sử dụng GPG. Theo dự kiến, thao tác này sẽ được thực hiện trong một môi trường đáng tin cậy, nơi mọi người không có quyền truy cập vào khoá riêng tư hoặc tệp đầu vào nhạy cảm.
gpg --output signed-and-encrypted.pgp \
--sign --digest-algo SHA384 \
--encrypt --cipher-algo AES256 \
--armor \
--recipient {key_id} \
input.txt
GPG sẽ tự động chọn khoá phù hợp từ gói cho mỗi thao tác mà bạn yêu cầu thực hiện.
Mã hoá JWE bằng chữ ký JWS
Mã hoá web JSON (JWE) là một tiêu chuẩn do rfc7516 xác định để mã hoá nội dung ở cấp ứng dụng. Chữ ký web JSON (JWS) là một tiêu chuẩn do rfc7515 xác định để ký nội dung ở cấp ứng dụng.
Các yêu cầu và phản hồi sẽ là mã thông báo JWE được mã hoá bằng phương thức mã hoá bất đối xứng (khoá công khai) với tuỳ chọn "Compact Serialization" (Tuần tự hoá nhỏ gọn). Mã thông báo JWE sẽ chứa tải trọng đã ký dưới dạng mã thông báo JWS. JWS cũng sử dụng khoá bất đối xứng; khoá riêng tư để ký và khoá công khai để xác minh.
Khi gửi tải trọng, trước tiên, hãy ký tải trọng rồi mã hoá tải trọng đó. Khi nhận được tải trọng, trước tiên hãy giải mã tải trọng đó rồi xác minh chữ ký.
Khi sử dụng JWE, Đối tác phải hỗ trợ các tuỳ chọn sau:
- Tuần tự hoá thu gọn.
- Giải mã tải trọng từ một trong nhiều khoá JWE.
- Thuật toán RSA-OAEP, RSA-OAEP-256 hoặc ECDH-ES để quản lý khoá.
- Được điền sẵn trong tiêu đề
alg
(rfc7518 phần 4.1).
- Được điền sẵn trong tiêu đề
- Thuật toán A256GCM, A128GCM, A128CBC-HS256 hoặc A256CBC-HS512 để mã hoá nội dung.
- Được điền sẵn trong tiêu đề
enc
.
- Được điền sẵn trong tiêu đề
- Tiêu đề
kid
để xác định khoá mã hoá công khai. - Tải trọng tin nhắn sử dụng phương thức mã hoá JWE phải sử dụng loại nội dung application/jose; charset=utf-8.
Khi sử dụng JWS, Đối tác phải hỗ trợ các tuỳ chọn sau:
- Tuần tự hoá thu gọn.
- Xác minh tải trọng từ một trong nhiều khoá JWS.
- Thuật toán HS256, HS384, HS512, RS256, RS384, RS512, ES256, PS256, PS384 hoặc PS512 để tạo chữ ký.
- Được điền sẵn trong tiêu đề
alg
(rfc 7518 phần 3.1).
- Được điền sẵn trong tiêu đề
- Tiêu đề
kid
để xác định khoá ký riêng tư.
Chuỗi JWE/JWS sẽ được mã hoá dưới dạng chuỗi UTF-8 và tải trọng của các chuỗi này có thể là các byte tuỳ ý.
Khoá riêng tư phải là khoá RSA/ECDH-ES hết hạn sau một năm với thời gian hoạt động tối đa là hai năm. Tất cả danh tính khoá riêng tư phải luôn nằm trên máy chủ của đối tác và do đó, tất cả giá trị chữ ký phải được tính toán trên máy chủ của đối tác.
Trước khi bắt đầu phát triển, bạn cần trao đổi khoá JWE và JWS với Google. Các khoá phải được trao đổi ở định dạng JWK, như được xác định trong rfc7517. Trong bước này, bạn tạo một cặp khoá công khai-riêng tư, cung cấp khoá công khai cho Google và nhận lại khoá công khai từ Google. Trong quá trình phát triển, bạn chỉ cần trao đổi các khoá hộp cát dùng để phát triển và kiểm thử bên ngoài môi trường sản xuất. Trước khi kiểm thử và phát hành công khai, bạn sẽ cần thực hiện một lần trao đổi khoá phát hành công khai khác.