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

作成日: 更新日:

sodium_crypto_secretbox_open関数は、共通鍵暗号方式を用いて暗号化されたデータを安全に復号し、そのデータの真正性を検証する関数です。この関数は、事前に共有された秘密鍵と、暗号化時に使用されたノンス(一回限りの乱数値)を受け取り、提供された暗号文を元の平文に戻す処理を実行します。

最も重要な機能の一つとして、単にデータを復号するだけでなく、暗号文が送信中に改ざんされていないか、または不適切な鍵で生成されていないかを厳密に検証する「認証」機能を備えています。これにより、データの完全性と信頼性が保証され、悪意のある改ざんやなりすましから情報を保護することができます。

具体的な使い方としては、復号したい暗号文、それに対応するノンス、そして暗号化と復号で共通に使用する秘密鍵の三つを引数として渡します。復号と認証のプロセスが正常に完了した場合、関数は元の平文データを返します。しかし、もし認証に失敗した場合(例えば、暗号文が改ざんされた場合や、誤った鍵が使用された場合など)、この関数はfalseを返します。これにより、プログラムは安全でないデータを処理することを避け、適切なエラーハンドリングを行うことが可能となります。機密情報の安全な送受信や保存において、この関数は重要な役割を果たします。

基本的な使い方

構文(syntax)

1<?php
2// 復号する暗号化済みデータ(string)
3$ciphertext = random_bytes(64); // 実際のデータは sodium_crypto_secretbox の出力
4
5// 暗号化時に使用されたノンス(string、SODIUM_CRYPTO_SECRETBOX_NONCEBYTES = 24バイト)
6$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
7
8// 暗号化時に使用された秘密鍵(string、SODIUM_CRYPTO_SECRETBOX_KEYBYTES = 32バイト)
9$key = random_bytes(SODIUM_CRYPTO_SECRETBOX_KEYBYTES);
10
11// 構文: sodium_crypto_secretbox_open(string $ciphertext, string $nonce, string $key): string|false
12$decrypted_data = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
13
14// 戻り値 $decrypted_data は、復号成功時に元のデータ(string)を、失敗時に false を返します。
15?>

引数(parameters)

string $ciphertext, string $nonce, string $key

  • string $ciphertext: 復号化したい暗号化されたデータ(バイト列)
  • string $nonce: 暗号化に使用された、再利用不可能なランダムな値(バイト列)
  • string $key: 暗号化に使用された、秘密鍵(バイト列)

戻り値(return)

string|false

sodium_crypto_secretbox_open 関数は、暗号化されたメッセージを復号化し、元の平文(文字列)を返します。復号化に失敗した場合は false を返します。

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