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