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

作成日: 更新日:

sodium_crypto_stream_xchacha20_xor関数は、XChaCha20ストリーム暗号アルゴリズムを使用して、指定されたメッセージ(データ)を安全に暗号化または復号化する関数です。この関数は、PHPのlibsodium拡張機能の一部として提供されており、高度なセキュリティ機能をアプリケーションに統合するために利用されます。

XChaCha20は、高速で安全な暗号化を提供するストリーム暗号であり、プレーンテキストとキーストリームを排他的論理和(XOR)演算で結合することにより、データの機密性を保護します。このストリーム暗号の特性により、ファイルの内容やネットワーク経由で送受信されるストリーミングデータなど、任意の長さのデータを効率的に処理することが可能です。

この関数を使用する際には、暗号化・復号化したい元のデータ(メッセージ)、暗号鍵、そしてナンス(Nonce: Number used once)と呼ばれる一度だけ使用するユニークな値が必要です。ナンスは、同じ鍵で複数のメッセージを暗号化する際に、それぞれの暗号化処理が独立して安全であることを保証するために不可欠です。ナンスは毎回、暗号学的に安全な方法でランダムに生成し、暗号化されたデータと共に保管または送信する必要があります。

sodium_crypto_stream_xchacha20_xor関数は、暗号化または復号化されたデータを出力として返します。復号化する際は、暗号化時と同じ鍵とナンスを正確に指定してこの関数を再度適用することで、元のメッセージを取り出すことができます。この関数はデータの機密性を保証しますが、メッセージの改ざんを検出するための認証機能は含んでいません。そのため、メッセージの完全性や認証が必要な場合は、sodium_crypto_aead_xchacha20poly1305_ietf_encryptのような認証付き暗号の利用を検討することが推奨されます。

基本的な使い方

構文(syntax)

1<?php
2
3$message_to_encrypt = 'Your secret data here.';
4$nonce = random_bytes(SODIUM_CRYPTO_STREAM_XCHACHA20_NONCEBYTES);
5$key = random_bytes(SODIUM_CRYPTO_STREAM_XCHACHA20_KEYBYTES);
6
7$encrypted_data = sodium_crypto_stream_xchacha20_xor($message_to_encrypt, $nonce, $key);
8
9?>

引数(parameters)

string $message, string $nonce, string $key, string $additional_data = ''

  • string $message: 暗号化または復号化するメッセージを指定する文字列
  • string $nonce: 一度しか使用しないユニークな値(ナンス)を指定する文字列。各暗号化処理で異なる値を設定する必要があります。
  • string $key: 暗号化または復号化に使用する秘密鍵を指定する文字列
  • string $additional_data: 認証に追加する追加データ。オプションです。

戻り値(return)

string|false

XChaCha20アルゴリズムを使用して、与えられた平文を鍵とナンスで暗号化または復号化した結果の文字列を返します。処理に失敗した場合はfalseを返します。

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