【PHP8.x】sodium_crypto_secretstream_xchacha20poly1305_init_pull関数の使い方

作成日: 更新日:

sodium_crypto_secretstream_xchacha20poly1305_init_pull関数は、暗号化されたデータのストリームを受信し、それを復号するための準備(初期化)を実行する関数です。この関数は、ファイルや一連のメッセージのような大きなデータや連続したデータを安全に送受信するための「シークレットストリーム」という仕組みの一部であり、データを受け取る側(復号側)で最初に一度だけ呼び出されます。具体的には、送信側で暗号化を開始した際に生成されたストリームのヘッダー情報と、送信側と受信側であらかじめ共有している秘密鍵の2つを引数として受け取ります。関数内部では、これらの情報をもとに、後続の復号処理で必要となる内部的な状態(state)を生成し、それを戻り値として返します。この返された状態は、それ自体が復号されたデータではなく、暗号化されたメッセージの断片を一つずつ復号していくための重要な情報です。この関数で初期化を行った後、sodium_crypto_secretstream_xchacha20poly1305_pull関数にこの状態と暗号化されたメッセージを渡すことで、元のデータを安全に復元することができます。

基本的な使い方

構文(syntax)

1<?php
2
3// ストリーム暗号化に使用する秘密鍵を生成します。
4// 鍵の長さは SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES である必要があります。
5$key = random_bytes(SODIUM_CRYPTO_SECRETSTREAM_XCHACHA20POLY1305_KEYBYTES);
6
7// ここでは、init_pull 関数で使用するために必要なヘッダーを生成しています。
8// 実際のアプリケーションでは、このヘッダーは暗号化されたデータと一緒に送信側から受け取ります。
9list($state_push, $header) = sodium_crypto_secretstream_xchacha20poly1305_init_push($key);
10
11// 受信側でストリームの復号化を開始するために初期化を行います。
12// 秘密鍵と、送信側から受け取ったヘッダーを渡します。
13// 戻り値は、ストリームの状態を保持する配列と、復号化されたヘッダーです。
14list($state_pull, $decrypted_header) = sodium_crypto_secretstream_xchacha20poly1305_init_pull($key, $header);
15
16// $state_pull は、以降のストリーム復号化操作(sodium_crypto_secretstream_xchacha20poly1305_pull)で使用されます。
17// $decrypted_header は、通常、元の $header と同じ内容です。
18?>

引数(parameters)

string $header, string $key

  • string $header: 復号化に使用するセッションヘッダーを指定する文字列
  • string $key: 復号化に使用する共有秘密鍵を指定する文字列

戻り値(return)

array

sodium_crypto_secretstream_xchacha20poly1305_init_pull関数は、認証付き複合処理の初期化に必要な状態情報を含む配列を返します。この配列には、複合処理で使用するキーと、一意のパディング情報が含まれます。

【PHP8.x】sodium_crypto_secretstream_xchacha20poly1305_init_pull関数の使い方 | いっしー@Webエンジニア