PGP 加密
PGP 是一組標準的加密、解密和簽署演算法,可提供加密編譯隱私保護與驗證功能。
使用 PGP 來加密酬載時,合作夥伴必須能夠執行下列作業:
- 使用多組 PGP 金鑰來加密及解密酬載。
- 使用多個 PGP 金鑰簽署酬載。
- 使用多個簽名驗證酬載,其中任何一個簽名都可以包含由 Google 提供的金鑰。
- 將採用 Base64 編碼的網路安全酬載解密。
提供給 Google 的 PGP 公開金鑰必須具有用於加密的子金鑰。使用子金鑰可與主要金鑰分開輪替。主要金鑰用於驗證身分。私密金鑰須為 2048 個位元以上的 RSA 金鑰,效期為一年,生命週期最長為兩年。
在開始開發之前,您必須先與 Google 交換 PGP 金鑰。在這個步驟中,您將產生 PGP 公開/私密金鑰組,將公開金鑰提供給 Google,並從 Google 收回公開金鑰。在開發期間,您只需要交換在非正式版環境中用於開發及測試的沙箱金鑰。在測試及發布正式版之前,您必須執行另一項正式版金鑰的交換作業。
產生新的 PGP 金鑰
假設系統路徑中存在 GPG 二進位檔,您可以使用下列 POSIX 指令來建立新的金鑰組。
$ gpg --full-generate-key
按照系統提示選取熵長度至少為 2048 位元的 RSA 金鑰,並確認其有效期限為 1 至 2 年。這個指令應會建立一組主要金鑰 (含有「SC」標籤,「S」代表簽署,「C」則代表產生憑證) 和一組子金鑰 (含有「E」標籤,「E」代表加密)。
JWE 加密
JSON Web Encryption (JWE) 是由 rfc7516 定義的標準,可在應用程式層加密內容。
使用 JWE 來加密酬載時,合作夥伴必須能夠執行下列作業:
- 透過其中一組 JWE 金鑰解密酬載。
- 使用精簡序列化功能
- 使用 JWE 壓縮功能 (即 zip="DEF")
- 使用 RSAES-PKCS1-V1_5 演算法來管理金鑰。
- 使用 AES-CBC + HMAC-SHA2 演算法來加密內容。
您必須使用 RSA 金鑰來當做私密金鑰,效期為一年,生命週期則最長為兩年。所有私密金鑰都必須保存在合作夥伴的伺服器中,因此也必須在合作夥伴的伺服器中計算所有簽名值。
用戶端和伺服器會按照 JSON Web Encryption (JWE) 規格加密 JSON 主體。POST 或回應的整個主體即為 JWE 權杖,並會使用 JWE 的「精簡序列化」選項。
在開始開發之前,您必須先與 Google 交換 JWE 金鑰。在這個步驟中,您會產生公開/私密金鑰組,然後將公開金鑰提供給 Google,並取得 Google 提供的公開金鑰。在開發期間,您只需要交換在非正式版環境中用於開發及測試的沙箱金鑰。在測試及發布正式版之前,您必須執行另一項正式版金鑰的交換作業。
合作夥伴必須能夠使用 JWE 壓縮功能 (即 zip="DEF") 來收發訊息。要求和回應會採用非對稱式 (公開金鑰) 加密,這種加密機制會使用相互交換的 JWE 金鑰。另外,JWS 的簽名驗證程序同樣適用於 JWE,JWE 的內容會在加密前完成簽署,並在解密後經過驗證。JWS 也會使用非對稱式金鑰,私密金鑰用於簽署,公開金鑰則用於驗證。