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

作成日: 更新日:

sodium_crypto_aead_xchacha20poly1305_ietf_decrypt関数は、XChaCha20-Poly1305(IETF標準バージョン)という認証付き暗号方式を用いて、暗号化されたデータを安全に復号する関数です。この関数は、単に暗号文を元の平文に戻すだけでなく、データが通信中に改ざんされていないこと、そして正当な送信元から送られてきたことを同時に確認する「認証」機能も実行します。これにより、データの機密性を保ちつつ、不正な変更やなりすましによる被害からシステムを保護することができます。

この関数を利用するには、復号したい暗号文、暗号化時に使用されたノンス(一度だけ使用されるユニークな値)、そして復号に使用する秘密鍵が必要です。ノンスは、各暗号化処理で必ず異なる値を用いる必要があり、これを誤って再利用するとセキュリティ上の重大な脆弱性につながるため、厳重な管理が求められます。また、オプションとして、暗号化時に指定された追加の認証データ(additional_data)も提供できます。この追加データは暗号化はされませんが、暗号文の認証に含まれるため、暗号文と関連するメタデータなども含めて改ざんを検知するために有効です。

復号が成功した場合、この関数は元の平文を文字列として返します。しかし、復号に失敗した場合、例えば暗号文が改ざんされていたり、提供されたノンスや鍵、追加データが間違っていたりする場合には、falseが返されます。システムエンジニアにとって、データの機密性と完全性を確保する上で、この種の認証付き暗号は非常に重要な技術要素です。暗号鍵の適切な管理と、ノンスの正しい使用法を理解することが、安全なシステムを構築するための鍵となります。

基本的な使い方

構文(syntax)

1<?php
2
3$ciphertext = ''; // 暗号化されたデータと認証タグ
4$additional_data = ''; // 追加認証データ
5$nonce = ''; // ナンス (各暗号化ごとにユニークな値)
6$key = ''; // 秘密鍵
7
8$decrypted_message = sodium_crypto_aead_xchacha20poly1305_ietf_decrypt(
9    $ciphertext,
10    $additional_data,
11    $nonce,
12    $key
13);

引数(parameters)

string $ciphertext, string $additional_data, string $nonce, string $key

  • string $ciphertext: 複合化する暗号化されたデータ
  • string $additional_data: 認証のみに利用される追加データ
  • string $nonce: 各暗号化で一意である必要があるナンス
  • string $key: 暗号化に使用された秘密鍵

戻り値(return)

string|false

復号化に成功した場合は、平文(元のデータ)を文字列として返します。復号化に失敗した場合は、falseを返します。

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