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

作成日: 更新日:

sodium_crypto_pwhash_scryptsalsa208sha256関数は、ユーザーのパスワードを安全にハッシュ化するために使用される関数です。この関数は、パスワードをそのままの形でデータベースに保存するのではなく、セキュリティを高めた「ハッシュ値」と呼ばれるデータに変換して保存するために利用されます。これにより、万が一データベースが攻撃され、パスワード情報が漏洩したとしても、攻撃者がハッシュ値から元のパスワードを特定することを非常に困難にします。

この関数は「Scrypt(スクリプト)」と呼ばれる強力なパスワードハッシュアルゴリズムの一種(Scrypt-Salsa208-SHA256)を採用しています。Scryptは、計算に多くの時間とメモリを必要とするように設計されており、パスワードの推測や、様々なパスワードを試して解読しようとする総当たり攻撃(ブルートフォース攻撃)に対する耐性が非常に高いことが特徴です。これは、攻撃者が効率的にパスワードを解読することを困難にすることで、システム全体のセキュリティを向上させます。

具体的には、入力された生パスワードと、パスワードごとに異なるランダムな値である「ソルト」、そして計算の難易度を調整するための「コストパラメータ」を使用して、一方向性のハッシュ値を生成します。このハッシュ値は、元のパスワードを復元することが極めて難しいデータです。

新しいユーザーが登録される際や、既存ユーザーのパスワードが変更される際に、この関数を使ってパスワードのハッシュ値を生成し、データベースに保存します。ユーザーがログインする際には、入力されたパスワードと保存されているソルト、コストパラメータを用いて再度ハッシュ値を計算し、データベースに保存されたハッシュ値と比較することで、パスワードの正当性を検証します。

この関数は、ウェブアプリケーションなどにおいてユーザー認証のセキュリティを確保するための重要な要素であり、安全なシステム構築に不可欠な機能の一つです。

基本的な使い方

構文(syntax)

1<?php
2
3$password = 'YourSecretPassword123!';
4$salt = random_bytes(SODIUM_CRYPTO_PWHASH_SCRYPT_SALTBYTES);
5$opslimit = SODIUM_CRYPTO_PWHASH_SCRYPT_OPSLIMIT_MODERATE;
6$memlimit = SODIUM_CRYPTO_PWHASH_SCRYPT_MEMLIMIT_MODERATE;
7
8$hashed_password = sodium_crypto_pwhash_scryptsalsa208sha256($password, $salt, $opslimit, $memlimit);
9
10?>

引数(parameters)

int $length, string $password, string $salt, int $opslimit, int $memlimit

  • int $length: 生成するハッシュのバイト単位の長さ。
  • string $password: ハッシュ化するパスワード。
  • string $salt: パスワードハッシュ化に使用されるランダムなバイト列。
  • int $opslimit: 計算の反復回数の上限。CPU負荷を制御します。
  • int $memlimit: 使用できるメモリの最大量(バイト単位)。

戻り値(return)

string

この関数は、指定されたパスワードとソルトから生成された、暗号化されたハッシュ値を文字列として返します。

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