sodium_crypto_pwhash_str

ASCII 文字でエンコードされたハッシュ値を得る

説明

string sodium_crypto_pwhash_str(#[\SensitiveParameter]string $password, int $opslimit, int $memlimit)

ランダムに生成されたソルト値と、 CPU とメモリへの攻撃に強いハッシュアルゴリズムを使い、 指定されたメモリとCPUの使用量の最大値に基づき、 パスワードの保存に適した ASCII 文字でエンコードされたハッシュを生成します。

パラメータ

password

ハッシュを生成するパスワードを文字列で指定します。

opslimit

実際に行う計算処理の最大量。 この値を大きくすると、 キーを計算するのに必要なCPUサイクルが増加します。 意図した使い方次第で、 適切な値の上限値を設定するために、いくつかの定数が存在します。 弱いものから強いものへと並べると、以下のとおりです: SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE, SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE です。

memlimit

この関数が使用するメモリの最大値をバイト単位で指定します。 適切な値を選ぶために、ヘルパとなる定数が存在します。 サイズの順に、以下の通りです: SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE, SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE, SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE があります。 これらの値は、opslimit と一致するものとペアになるべきです。

戻り値

ハッシュ化されたパスワードを返します。

同じパスワードから同じパスワードハッシュを生成するには、 opslimitmemlimit の値を同じにしなければいけません。 これらは生成されたハッシュに埋め込まれているので、 ハッシュを検証する際に必要な全てが含まれています。 これによって、 sodium_crypto_pwhash_str_verify 関数が、他の引数に関する情報を追加で保存せずにハッシュを検証できるのです。

例1 sodium_crypto_pwhash_str の例

<?php
$password = 'password';
echo sodium_crypto_pwhash_str(
    $password,
    SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
    SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);

上の例の出力は、 たとえば以下のようになります。

$argon2id$v=19$m=65536,t=2,p=1$oWIfdaXwWwhVmovOBc2NAQ$EbsZ+JnZyyavkafS0hoc4HdaOB0ILWZESAZ7kVGa+Iw

注意

注意:

ハッシュ値は Argon2ID アルゴリズムを使って計算されます。 このアルゴリズムは、GPU に対する攻撃と サイドチャネル攻撃の両方に対する耐性を提供します。 password_hash と異なり、 salt の引数は存在せず(自動生成されます)、 opslimitmemlimit の値が必須になっています。

参考