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

作成日: 更新日:

sodium_compare関数は、2つのバイト列(文字列)を安全に比較する関数です。この関数は、PHPのSodium拡張機能の一部として提供されており、特にセキュリティが求められる状況でのデータ比較に利用されます。

通常の比較演算子では、文字列の比較処理にかかる時間が、異なる文字の位置によって変動する可能性があります。この時間差を利用して、秘密の情報(例えばパスワードや認証トークンなど)を推測しようとする「タイミング攻撃(実行時間攻撃)」と呼ばれるセキュリティ上の脅威が存在します。

sodium_compare関数は、このようなタイミング攻撃を防ぐために設計されています。2つのバイト列の長さが異なる場合でも、比較処理にかかる時間が常に一定になるように工夫されています。これにより、攻撃者が比較時間から情報を得ることが不可能になり、データ比較の安全性が飛躍的に向上します。

この関数は比較する2つのバイト列を引数として受け取ります。戻り値は整数値で、最初のバイト列が2番目のバイト列より辞書順で小さい場合は-1、2つのバイト列が完全に一致する場合は0、最初のバイト列が2番目のバイト列より大きい場合は1を返します。パスワードのハッシュ値の検証や認証トークンの比較など、機密性の高いデータを扱う際に、システムの安全性を高めるための重要なツールとして活用できます。

基本的な使い方

構文(syntax)

1<?php
2
3$stringOne = 'secretDataA';
4$stringTwo = 'secretDataB';
5
6$comparisonResult = sodium_compare($stringOne, $stringTwo);
7
8?>

引数(parameters)

string $string1, string $string2

  • string $string1: 比較対象となる1つ目の文字列
  • string $string2: 比較対象となる2つ目の文字列

戻り値(return)

int

sodium_compare関数は、2つのバイナリ文字列を比較した結果を整数で返します。文字列が等しい場合は0、それ以外の場合は-1または1を返します。

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