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

作成日: 更新日:

sodium_crypto_aead_chacha20poly1305_ietf_encrypt関数は、ChaCha20-Poly1305アルゴリズム(IETF仕様)を用いて、指定されたメッセージを認証付き暗号化する関数です。この関数は、単にデータを秘密に保つ「暗号化」だけでなく、データが第三者によって改ざんされていないかを確認する「認証」の機能も兼ね備えているため、高いセキュリティを提供します。

具体的には、平文のメッセージ、オプションの関連データ(Associated Data: AD)、使い捨ての数値(Nonce: ナンス)、そして秘密鍵を入力として受け取ります。関連データは暗号化されませんが、暗号文と一緒に認証されるため、例えばヘッダー情報などの付随情報が改ざんされていないことを保証できます。ナンスは、同じ秘密鍵で複数のメッセージを暗号化する際に、毎回異なるユニークな値である必要があります。ナンスの再利用はセキュリティ上の脆弱性につながるため、厳重に管理することが重要です。

この関数は、暗号化されたメッセージと認証タグを結合した文字列を返します。これにより、データの盗聴や改ざんから情報を保護し、安全なデータ通信や保存を実現します。例えば、インターネットを介して機密情報を送受信する際や、データベースに重要な情報を格納する際などに利用されます。処理に失敗した場合や、無効な引数が渡された場合は、falseを返します。この機能はPHPの拡張機能として提供され、セキュアなアプリケーション開発を支援します。

基本的な使い方

構文(syntax)

1<?php
2$message = '暗号化するメッセージ';
3$additionalData = '認証されるが暗号化されない追加データ';
4$nonce = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_NPUBBYTES);
5$key = random_bytes(SODIUM_CRYPTO_AEAD_CHACHA20POLY1305_IETF_KEYBYTES);
6
7$encryptedMessage = sodium_crypto_aead_chacha20poly1305_ietf_encrypt(
8    $message,
9    $additionalData,
10    $nonce,
11    $key
12);
13?>

引数(parameters)

string $message, string $additional_data, string $nonce, string $key

  • string $message: 暗号化したい平文データを指定する文字列
  • string $additional_data: 認証のみを行い、暗号化しない追加データを指定する文字列
  • string $nonce: ナンス(nonce)を指定する文字列。一意であることが重要です
  • string $key: 秘密鍵を指定する文字列

戻り値(return)

string

この関数は、ChaCha20-Poly1305-IETFアルゴリズムを使用してデータを暗号化し、その結果として暗号化されたバイナリ文字列を返します。

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