應用程式層加密

Standard Payments API 支援應用程式層的 PGP 或 JWE 加密。

PGP 加密

PGP 是一組標準的加密、解密和簽署演算法, 以及提供加密編譯隱私和驗證機制

使用 PGP 加密酬載時,合作夥伴必須能夠執行下列作業:

  • 使用多個 PGP 金鑰加密及解密酬載。
  • 使用多個 PGP 金鑰簽署酬載。
  • 使用多個簽章驗證酬載,任一簽名可以是 簽章。
  • 將採用 Base64 編碼的網路安全酬載解密。

提供給 Google 的 PGP 公開金鑰必須具有用於加密的子金鑰。 子鍵可獨立輪替主金鑰。主金鑰 用於身分驗證。私密金鑰須為 2048 以上版本 位元 RSA 金鑰,效期為一年生命週期最長為兩年

在開始開發前,請務必先與 Google 交換 PGP 金鑰。 在這個步驟中,您會產生 PGP 公開/私密金鑰組,並將 金鑰傳送給 Google,並從 Google 收回公開金鑰。在開發期間 您只需要交換用於開發及測試的沙箱金鑰 它也沒有在正式環境使用在測試及發布正式版前,您必須完成 執行另一項正式版金鑰的交換作業

產生新的 PGP 金鑰

假設系統路徑中存在 GPG 二進位檔, 可以使用以下 POSIX 指令建立新的金鑰組。

$ gpg --full-generate-key

當系統提示時,請選取熵長度至少為 2048 位元的 RSA 金鑰,並加上 有效期限為 1 至 2 年這個指令應會同時建立主金鑰 (已加上 SC 標籤,「S」代表簽署,「憑證代表產生」) 和子鍵 (標有 E 標籤,「E」代表加密)

PGP 程式庫設定

傳送酬載

  1. 簽署時應使用 SHA384 做為摘要演算法。不使用 SHA1MD5
  2. 加密時應使用 AES256 做為對稱加密 演算法;不要使用 CAST5IDEA
  3. 加密或簽署郵件時,請務必選取含有 對應用途;請使用 CAN_SIGN 金鑰簽署,並使用 ENCRYPT_COMMS/ENCRYPT_STORAGE 金鑰 (用於加密)

接收酬載

  1. 驗證酬載時,請確認程式庫支援新型雜湊 例如 SHA384自 起,Google 會開始對所有新的金鑰中採用此演算法 2023 年 5 月 14 日。
  2. 解密酬載時,請確認程式庫支援新型對稱式 加密演算法,例如 AES256。Google 會開始用於所有新的 。

GPG 酬載加密示例

以下示例說明如何在使用 GPG 時選取安全選項。 這項作業應在信任的環境中執行, 使用者無法存取私密金鑰或機密輸入檔案。

gpg --output signed-and-encrypted.pgp \
  --sign --digest-algo SHA384 \
  --encrypt --cipher-algo AES256 \
  --armor \
  --recipient {key_id} \
  input.txt

GPG 會針對每項作業,自動從套件中選取正確的金鑰 以及您要求 LLM 執行的工作

搭配使用 JWE 加密和 JWS 簽署功能

JSON Web Encryption (JWE) 是由 rfc7516 定義的標準,可加密應用程式中的內容 第二,自訂角色只能 套用至專案或機構JSON Web Signature (JWS) 是 rfc7515 應用程式層級

要求和回應會以非對稱式 (公開) 加密的 JWE 權杖 來使用「精簡序列化」加密如果有需要 SQL 指令的分析工作負載 則 BigQuery 可能是最佳選擇JWE 權杖會 包含已簽署的酬載做為 JWS 權杖。JWS 也使用非對稱式金鑰; 私密金鑰 (用於簽署私密金鑰) 和公開金鑰 (用於驗證)。

傳送酬載時,請先簽署該酬載,再加密。時間 接收酬載、解密,然後驗證簽章。

使用 JWE 時,合作夥伴必須能執行下列作業:

  • 使用精簡序列化功能。
  • 透過其中一組 JWE 金鑰解密酬載。
  • 使用 RSA-OAEP、RSA-OAEP-256 或 ECDH-ES 演算法管理金鑰。
  • A256GCM A128GCMA128CBC-HS256,或 A256CBC-HS512 用於內容加密
    • 已填入至 enc 標頭。
  • kid 標頭,用於識別公開加密金鑰。
  • 採用 JWE 加密的訊息酬載必須使用內容類型 application/jose;charset=utf-8。

使用 JWS 時,合作夥伴必須能執行下列作業:

  • 使用精簡序列化功能。
  • 透過其中一組 JWS 金鑰驗證酬載。
  • 包括 HS256、HS384、HS512 使用 RS256、RS384、RS512、ES256、PS256、PS384 或 PS512 演算法建立簽章。
  • kid 標頭,用於識別私密簽署金鑰。

JWE/JWS 字串將編碼為 UTF-8 字串,而其酬載可能是 任意位元組

私密金鑰須為 RSA/ECDH-ES 金鑰,效期為一年,且上限為 有效期限所有私密金鑰 ID 一律須停留在 並據此計算所有簽名值,因此 合作夥伴的伺服器。

在開始開發前,請務必先與 Google 交換 JWE 和 JWS 金鑰。 交換金鑰時,應採用 JWK 格式,如 rfc7517。 在這個步驟中,您會產生公開/私密金鑰組,並將公開金鑰的 金鑰傳送給 Google,並從 Google 收回公開金鑰。在開發期間 您只需要交換用於開發及測試的沙箱金鑰 它也沒有在正式環境使用在測試及發布正式版前,您必須完成 執行另一項正式版金鑰的交換作業