アプリケーション レイヤの暗号化

One Time Payment Code API は、アプリケーション レイヤの暗号化で PGP または JWE のいずれかをサポートしています。

PGP 暗号化

PGP は、暗号のプライバシーと認証を提供する暗号化アルゴリズム、復号アルゴリズム、署名アルゴリズムの標準セットです。

PGP を使用してペイロードを暗号化する場合、パートナーは以下をサポートする必要があります。

  • 複数の PGP 鍵によるペイロードの暗号化と復号。
  • 複数の PGP 鍵によるペイロードへの署名。
  • 複数の署名を使用したペイロードの検証(1 つは、Google 提供の鍵を使用した署名のいずれか)。
  • ウェブセーフな Base64 エンコード ペイロードの復号。

Google に提供する PGP 公開鍵には、暗号化に使用するサブキーが必要です。サブキーを使用すると、マスターキーから独立してローテーションできます。マスターキーは本人確認に使用されます。秘密鍵は、最長寿命が 2 年で、1 年で期限が切れる 2,048 ビット以上の RSA 鍵である必要があります。

開発を始める前に、PGP 鍵を Google と交換する必要があります。このステップでは、PGP 公開秘密鍵ペアを生成し、Google に公開鍵を提供して、Google から公開鍵を受け取ります。開発時には、本番環境以外での開発とテストに使用するサンドボックス キーのみを交換する必要があります。本番環境のテストとリリースの前に、別の本番環境鍵を交換する必要があります。

新しい PGP 鍵の生成

GPG バイナリがシステムパスにある場合、次の POSIX コマンドを使用して新しい鍵ペアを作成できます。

$ gpg --full-generate-key

プロンプトが表示されたら、エントロピーが 2,048 ビット以上、有効期限が 1~2 年の RSA 鍵を選択します。以下のコマンドにより、マスターキー(SC のラベル付き、「S」は「Signing」、「C」は「Certificate generation」を指す)とサブキー(「E」のラベル付き、「Encryption」を指す)の両方が作成されます。

JWE 暗号化

JSON Web Encryption(JWE)は、アプリケーション レベルでコンテンツを暗号化するための rfc7516 によって定義された規格です。

JWE を使用してペイロードを暗号化する場合、パートナーは次のオプションをサポートする必要があります。

  • 複数の JWE 鍵のいずれかからのペイロードの復号
  • Compact Serialization
  • JWE 圧縮(zip="DEF")
  • 鍵管理のための RSAES-PKCS1-V1_5 アルゴリズム
  • コンテンツの暗号化のための AES-CBC + HMAC-SHA2 アルゴリズム

秘密鍵は、最長寿命が 2 年で、1 年で期限が切れる RSA 鍵である必要があります。すべての秘密鍵 ID は常にパートナーのサーバー上に保持される必要があります。したがって、すべての署名値はパートナーのサーバー上で計算される必要があります。

クライアントとサーバーは、JSON Web Encryption(JWE)仕様に沿って JSON 本文を暗号化します。POST またはレスポンスの本文全体が、JWE の「Compact Serialization」オプションを使用した JWE トークンになります。

開発を始める前に、JWE 鍵を Google と交換する必要があります。このステップでは、公開鍵 / 秘密鍵ペアを生成し、Google にこの公開鍵を提供して、Google から公開鍵を受け取ります。開発時には、本番環境以外での開発とテストに使用するサンドボックス キーのみを交換する必要があります。本番環境のテストとリリースの前に、別の本番環境鍵を交換する必要があります。

パートナーは、JWE 圧縮(zip="DEF")を使用したメッセージの送受信をサポートする必要があります。リクエストとレスポンスは、相互に交換した JWE 鍵を使用して非対称(公開鍵)暗号化を使用して暗号化されます。また、JWS の署名検証は、暗号化の前にコンテンツに署名して復号後に検証される JWE とともに使用することもできます。JWS は非対称鍵も使用します。秘密鍵は署名に、公開鍵は検証に使用されます。