すべてのプロダクト
Search
ドキュメントセンター

Financial Intelligence Engine:メッセージの暗号化と復号

最終更新日:Apr 11, 2025

ZOLOZ ゲートウェイ プロトコルは、メッセージ送信中にデータが改ざんされないように、メッセージ暗号化機能を提供します。 加盟店から送信されたリクエストが暗号化されている場合、ZOLOZ サービスから返されるレスポンスも暗号化されます。そうでない場合、ZOLOZ サービスから返されるレスポンスは暗号化されません。

ZOLOZ サービスが扱うデータには機密情報が含まれている可能性があるため、メッセージ送信のセキュリティを強化するために、ZOLOZ サービスはレスポンス メッセージを暗号化します。 機密情報には、氏名、ID 番号、生年月日、住所、顔など、すべての機密 個人識別用情報 (PII) が含まれます。

メッセージの暗号化

暗号化プロセスフロー

次の図は、加盟店の観点からリクエスト メッセージを暗号化する方法と、ZOLOZ サービスの観点からレスポンス メッセージを暗号化する方法を示しています。

image

図 1. メッセージ暗号化アクティビティ図

メッセージを暗号化する手順

1. 公開鍵を取得する

  1. リクエスト メッセージの場合、加盟店のアカウントが作成されると、ZOLOZ システムで RSA 2048 キーペアが生成されます。 生成されたキーペアは加盟店ごとに一意であり、公開鍵が含まれています。 加盟店は事前に公開鍵を取得する必要があります。

  2. レスポンス メッセージの場合、加盟店側で 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/plain

c. HTTP 本文を設定します。

暗号化されたコンテンツ文字列 (手順 4 で取得した ENCYRPTED_CONTENT_STRING) を HTTP 本文として設定します。

メッセージの復号

復号プロセスフロー

次の図は、ZOLOZ サービスの観点からリクエスト メッセージを復号する方法と、加盟店の観点からレスポンス メッセージを復号する方法を示しています。

image

図 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 文字列です。