ZOLOZ ゲートウェイ プロトコルは、メッセージ送信中にデータが改ざんされないように、メッセージ暗号化機能を提供します。 加盟店から送信されたリクエストが暗号化されている場合、ZOLOZ サービスから返されるレスポンスも暗号化されます。そうでない場合、ZOLOZ サービスから返されるレスポンスは暗号化されません。
ZOLOZ サービスが扱うデータには機密情報が含まれている可能性があるため、メッセージ送信のセキュリティを強化するために、ZOLOZ サービスはレスポンス メッセージを暗号化します。 機密情報には、氏名、ID 番号、生年月日、住所、顔など、すべての機密 個人識別用情報 (PII) が含まれます。
メッセージの暗号化
暗号化プロセスフロー
次の図は、加盟店の観点からリクエスト メッセージを暗号化する方法と、ZOLOZ サービスの観点からレスポンス メッセージを暗号化する方法を示しています。

図 1. メッセージ暗号化アクティビティ図
メッセージを暗号化する手順
1. 公開鍵を取得する
リクエスト メッセージの場合、加盟店のアカウントが作成されると、ZOLOZ システムで RSA 2048 キーペアが生成されます。 生成されたキーペアは加盟店ごとに一意であり、公開鍵が含まれています。 加盟店は事前に公開鍵を取得する必要があります。
レスポンス メッセージの場合、加盟店側で RSA 2048 キーペアを生成する必要があります。 生成されたキーペアには公開鍵が含まれており、リクエストを送信する前に ZOLOZ システムに登録する必要があります。 その後、ZOLOZ サービスは、後続のレスポンス メッセージの暗号化に登録済みの公開鍵を使用します。
2. 暗号化するコンテンツを準備する
暗号化するコンテンツは、ビジネス リクエスト/レスポンスのプレーン メッセージであり、通常は JSON 文字列です。
3. AES 共通鍵を生成する
256 ビット データを AES 共通鍵としてランダムに生成します。
4. コンテンツを暗号化する
次の数式を使用してコンテンツを暗号化します。
ENCYRPTED_CONTENT_STRING=base64urlsafe_encode(aes_encrypt($CONTENT_TO_BE_ENCRYPTED, $AES_KEY)) // 暗号化されたコンテンツ文字列 = base64urlsafe_encode(aes_encrypt(暗号化するコンテンツ, AESキー))使用されるメソッド:
aes_encrypt: AES アルゴリズムを使用してメッセージを暗号化するメソッド。base64urlsafe_encode: 暗号化されたデータをエンコードするメソッド。
入力パラメーター:
CONTENT_TO_BE_ENCRYPTED: 手順 2 で準備されたコンテンツ文字列。AES_KEY: 手順 3 で生成された AES 共通鍵。
出力パラメーター:
ENCRYPTED_CONTENT_STRING: 暗号化されたコンテンツの文字列。
5. AES キーを暗号化する
次の数式を使用して AES キーを暗号化します。
ENCYRPTED_AES_KEY=base64urlsafe_encode(rsa_encrypt($AES_KEY, $PUBLIC_KEY)) // 暗号化された AES キー = base64urlsafe_encode(rsa_encrypt(AES キー, 公開鍵))使用されるメソッド:
rsa_encrypt: AES キーを暗号化するメソッド。base64urlsafe_encode: 暗号化されたデータをエンコードするメソッド。
入力パラメーター:
AES_KEY: 手順 3 で生成された AES 共通鍵。PUBLIC_KEY: 手順 1 で取得した公開鍵。
出力パラメーター:
ENCYRPTED_AES_KEY: 暗号化された AES キーの文字列。
6. ヘッダーと本文を設定する
a. Encrypt ヘッダーを設定します。
次の形式で HTTP ヘッダーの Encrypt フィールドに暗号化された AES キーを指定します。
Encrypt: algorithm=RSA_AES, symmetricKey=<ENCYRPTED_AES_KEY> // Encrypt: algorithm=RSA_AES, symmetricKey=<暗号化された AES キー>b. Content-Type ヘッダーを設定します。
コンテンツ タイプを text/plain として設定します。
content-type: text/plainc. HTTP 本文を設定します。
暗号化されたコンテンツ文字列 (手順 4 で取得した ENCYRPTED_CONTENT_STRING) を HTTP 本文として設定します。
メッセージの復号
復号プロセスフロー
次の図は、ZOLOZ サービスの観点からリクエスト メッセージを復号する方法と、加盟店の観点からレスポンス メッセージを復号する方法を示しています。

図 2. メッセージ復号アクティビティ図
メッセージを復号する手順
1. 秘密鍵を取得する
リクエスト メッセージの場合、加盟店のアカウントが作成されると、ZOLOZ システムで RSA 2048 キーペアが生成されます。 生成されたキーペアは加盟店ごとに一意であり、秘密鍵が含まれています。 その後、ZOLOZ サービスは秘密鍵を使用して、暗号化されたリクエストに含まれる共通鍵を復号します。
レスポンス メッセージの場合、加盟店側で RSA 2048 キーペアを生成する必要があります。 生成されたキーペアには秘密鍵が含まれています。 その後、加盟店は秘密鍵を使用して、暗号化されたレスポンスに含まれる共通鍵を復号します。
2. 復号するコンテンツを取得する
復号するコンテンツは、暗号化された HTTP 本文全体です。
3. 暗号化された AES 共通鍵を抽出する
HTTP リクエスト/レスポンス ヘッダーの Encrypt フィールドに含まれる暗号化された AES 共通鍵を抽出します。
Encrypt: algorithm=RSA_AES, symmetricKey=<AES_KEY_TO_BE_EXTRACTED> // Encrypt: algorithm=RSA_AES, symmetricKey=<抽出される AES キー>
4. AES キーを復号する
次の数式を使用して AES キーを復号します。
AES_KEY=rsa_decrypt(base64urlsafe_decode($ENCRYPTED_AES_KEY), $PRIVATE_KEY) // AES キー = rsa_decrypt(base64urlsafe_decode(暗号化された AES キー), 秘密鍵)使用されるメソッド:
base64urlsafe_decode: 暗号化されたデータをデコードするメソッド。rsa_decrypt: 暗号テキストを復号するメソッド。
入力パラメーター:
ENCRYPTED_AES_KEY: 手順 3 で抽出された暗号化された AES キー。PRIVATE_KEY: 手順 1 で取得した秘密鍵。
出力パラメーター:
AES_KEY: メッセージ コンテンツの暗号化のためにランダムに生成された初期 AES キー。
5. コンテンツを復号する
次の数式を使用してコンテンツを復号します。
PLAIN_CONTENT_STRING=utf8_encode(aes_decrypt(base64urlsafe_decode($Content_To_Be_Decrypted, $AES_KEY)) // プレーンコンテンツ文字列 = utf8_encode(aes_decrypt(base64urlsafe_decode(復号されるコンテンツ, AES キー)))使用されるメソッド:
base64urlsafe_decode: 暗号化されたデータをデコードするメソッド。aes_decrypt: 暗号テキストを復号するメソッド。utf8_encode: バイナリ データを UTF-8 のテキスト文字列にエンコードするメソッド。
入力パラメーター:
Content_To_Be_Decrypted: 手順 2 で取得した、復号されるコンテンツ。AES_KEY: 手順 4 で取得した AES 共通鍵。
出力パラメーター:
PLAIN_CONTENT_STRING: 使用されるプレーン コンテンツ文字列。通常は JSON 文字列です。