ドキュメントCommerce設定ガイド

PaaS のみ

パスワードハッシュ

2025年5月5日
  • トピック:
  • 設定

作成対象:

  • 経験者
  • 管理者
  • 開発者

現在、Commerceは、様々な PHP 固有のハッシュアルゴリズムに基づいて、独自の方法でパスワードをハッシュします。 Commerceは、MD5、SHA256、Argon 2ID13 など複数のアルゴリズムをサポートしています。 Sodium 拡張モジュールがインストールされている(PHP 7.3 ではデフォルトでインストールされています)場合、Argon 2ID13 がデフォルトのハッシュアルゴリズムとして選択されます。 それ以外の場合は、SHA256 がデフォルトです。 Commerceは、Argon 2i アルゴリズムをサポートする PHP password_hash 関数を使用できます。

MD5 などの古いアルゴリズムでハッシュ化された古いパスワードが危険に晒されるのを避けるために、現在の実装では元のパスワードを変更せずにハッシュをアップグレードする方法が提供されています。 一般に、パスワードハッシュの形式は次のようになります。

password_hash:salt:version<n>:version<n>

ここで、version<n>…version<n> は、パスワードで使用されるすべてのハッシュアルゴリズムバージョンを表します。 また、塩は常にパスワードハッシュと一緒に保存されるので、アルゴリズムのチェーン全体を復元できます。 次に例を示します。

a853b06f077b686f8a3af80c98acfca763cf10c0e03597c67e756f1c782d1ab0:8qnyO4H1OYIfGCUb:1:2

最初の部分はパスワードハッシュを表します。 2 つ目は塩 8qnyO4H1OYIfGCUb す。 最後の 2 つは、異なるハッシュアルゴリズムです。1 は SHA256、2 は Argon 2ID13 です。 つまり、顧客のパスワードは最初に SHA256 でハッシュ化され、その後、アルゴリズムは Argon 2ID13 で更新され、ハッシュはアルゴンで再ハッシュ化されたことを意味します。

ハッシュ戦略のアップグレード

ハッシュアップグレードメカニズムがどのように見えるかを検討します。 最初にパスワードが MD5 でハッシュ化され、その後アルゴリズムが Argon 2ID13 で複数回更新されたとします。 次の図に、ハッシュのアップグレードフローを示します。

ハッシュアップグレードワークフロー

各ハッシュアルゴリズムは、前のパスワードハッシュを使用して新しいハッシュを生成します。 Commerceには、元の生のパスワードは保存されません。

ハッシュアップグレード方法

上記のように、パスワードハッシュには、元のパスワードに適用された複数のハッシュバージョンが含まれる場合があります。
顧客の認証中にパスワード検証メカニズムがどのように機能するかを次に示します。

def verify(password, hash):
    restored = password

    hash_map = extract(hash)
    # iterate through all versions specified in the received hash [md5, sha256, argon2id13]
    for version in hash_map.get_versions():
        # generate new hash based on password/previous hash, salt and version
        restored = hash_func(salt . restored, version)

    # extract only password hash from the hash:salt:version chain
    hash = hash_map.get_hash()

    return compare(restored, hash)

Commerceは、使用されたすべてのパスワードハッシュのバージョンをパスワードハッシュと共に保存するので、パスワードの検証中にハッシュチェーン全体を復元できます。 ハッシュの検証メカニズムは、ハッシュアップグレード戦略に似ています。パスワードハッシュと共に保存されたバージョンに基づいて、アルゴリズムは、指定されたパスワードからハッシュを生成し、ハッシュ化されたパスワードとデータベースに保存されたハッシュの比較結果を返します。

実装

\Magento\Framework\Encryption\Encryptor クラスは、パスワードハッシュの生成と検証を行います。 bin/magento customer:hash:upgrade コマンドは、顧客パスワード ハッシュを最新のハッシュ アルゴリズムにアップグレードします。

recommendation-more-help
386822bd-e32c-40a8-81c2-ed90ad1e198c