应用层加密

Standard Payments API 支持将 PGP 或 JWE 用于应用层 加密。

PGP 加密

PGP 是一套标准的加密、解密和签名算法 提供加密隐私保护和身份验证功能。

使用 PGP 加密载荷时,合作伙伴必须支持:

  • 使用多个 PGP 密钥加密和解密载荷。
  • 使用多个 PGP 密钥为载荷签名。
  • 验证具有多个签名的载荷,其中任何一个签名可以是 使用 Google 提供的密钥进行签名。
  • Web 安全 base64 编码载荷解密。

提供给 Google 的 PGP 公钥必须具有用于加密的子密钥。通过 子密钥允许独立于主密钥轮替。主密钥 用于身份验证。私钥必须为 2048(或更高) 位 RSA 密钥,一年内到期最大生命周期为两年

在开始开发之前,您需要与 Google 交换 PGP 密钥。 在此步骤中,您将生成 PGP 公钥私钥对 以及从 Google 接收公钥。在开发过程中, 只需要交换用于开发和测试的沙盒密钥 与生产环境之外在正式版测试和发布之前,您需要 再次交换正式版密钥。

生成新的 PGP 密钥

假设您的系统路径中有 GPG 二进制文件, 可以使用以下 POSIX 命令创建新的密钥对。

$ gpg --full-generate-key

出现提示时,请选择一个至少具有 2048 位熵和 有效期为 1-2 年。此命令应该会同时创建主密钥 (标记为 SC,代表“证书”和“证书生成”)和一个子密钥 (标记为 E,表示“E”加密)

PGP 库配置

发送载荷

  1. 在签名时,您应使用 SHA384 作为摘要算法;不使用 SHA1MD5
  2. 加密时,您应使用 AES256 作为对称加密 算法;不使用 CAST5IDEA
  3. 在对邮件进行加密或签名时,请务必选择带有 相应用途;使用 CAN_SIGN 密钥进行签名, ENCRYPT_COMMS 个(共 ENCRYPT_STORAGE 个)密钥(用于加密)

接收载荷

  1. 验证载荷时,请确保您的库支持新式哈希 算法,如 SHA384。自 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 会自动从软件包中为每项操作选择正确的密钥 您请求的效果

通过 JWS 签名进行 JWE 加密

JSON Web Encryption (JWE) 是由 rfc7516 定义的标准,用于加密应用中的内容 。JSON Web Signature (JWS) 是由 rfc7515,用于在 应用级别

请求和响应将使用非对称(公共 密钥)加密选项。JWE 令牌将 将签名载荷作为 JWS 令牌包含。JWS 也使用非对称密钥; 私钥用于签名,公钥用于验证。

发送载荷时,请先对载荷签名,然后对其进行加密。时间 接收载荷,先解密,然后再验证签名。

使用 JWE 时,合作伙伴必须支持以下选项:

  • 紧凑序列化。
  • 通过多个 JWE 密钥之一解密载荷。
  • 用于密钥管理的 RSA-OAEP、RSA-OAEP-256 或 ECDH-ES 算法。
  • A256GCMA128GCMA128CBC-HS256A256CBC-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 密钥,一年内有效, 整个有效期为两年所有私钥身份必须始终保留在 因此,所有签名值都必须根据 合作伙伴的服务器。

在开始开发之前,您需要与 Google 交换 JWE 和 JWS 密钥。 密钥应使用 JWK 格式交换,如 rfc7517。 在此步骤中,您将生成公钥-私钥对,并提供 以及从 Google 接收公钥。在开发过程中, 只需要交换用于开发和测试的沙盒密钥 与生产环境之外在正式版测试和发布之前,您需要 再次交换正式版密钥。