ハッシュは、元に戻すことのできない暗号化機能です。固定サイズの値を生成するには、ランダムなサイズの入力が必要です。これらの固定サイズの値は ハッシュ値と呼ばれ、 暗号関数 はハッシュ関数と呼ばれます。ハッシュには一貫性があり予測可能な性質があり、同じ入力から常に同じハッシュ値が生成されます。また、雪崩効果も示します。これは、入力のわずかな変更でもハッシュ値が大幅に異なる結果となり、高いセキュリティと不確実性が保証されることを意味します。
ハッシュではソルトハッシュがよく使用されます。ソルトと呼ばれる一意のランダム文字列がハッシュの前に入力に追加され、同一の入力であっても各ハッシュが一意になります
ソルテッドハッシュは主にパスワードハッシュに使用されます。そのようなアルゴリズムの 1 つが bcrypt アルゴリズム です。
Bcrypt アルゴリズムは、Blowfish 暗号化アルゴリズムに基づいています。 bcrypt は、パスワードごとに一意の ソルト (ランダムな文字列) を生成し、ハッシュする前にそのソルトがパスワードと結合されます。 。これにより、Bcrypt はブルート フォース攻撃に耐性を持つようになります。
塩の生成:
Bcrypt は、長さが 16 バイトで通常は Base64 形式のランダム ソルトを生成します。
指定された文字列のハッシュ:
ソルトはパスワードと結合され、結果の文字列が Blowfish 暗号化アルゴリズムに渡されます。 bcrypt は、作業係数によって定義された複数ラウンドのハッシュを適用します。ラウンド数が多いため計算コストが高くなり、ブルートフォース攻撃に対する耐性が強化されます。
コストとも呼ばれる作業係数は、対数値 2 で定義されます。コストが 12 の場合、これは 2^12 ラウンドを意味します。コスト係数が高くなるほど、ハッシュの生成にかかる時間が長くなり、攻撃者によるパスワードの総当たり攻撃が難しくなります。
Bcrypt ハッシュの形式と長さ:
y$odwBFokG9vTK/BAaRXKKl.9Q8KHXHeYSqpLi/gSNpmzSwQcaJb.gS
指定された文字列は次のもので構成されます:
import hashlib import os import base64
class Bcrypt: def __init__(self, rounds=12, salt_length=22): self.rounds = rounds self.salt_length = salt_length
Bcrypt クラスは、パスワードをハッシュして検証する機能をカプセル化します
パラメータ:
y$odwBFokG9vTK/BAaRXKKl.9Q8KHXHeYSqpLi/gSNpmzSwQcaJb.gS
関数 generate_salt は、ランダムなソルトを作成します。これは、パスワードに追加される一意の値となり、同一のパスワードであっても異なるハッシュが生成されるようにします。
import hashlib import os import base64
関数 bcrypt_hash は、提供されたソルトとコスト係数を使用してパスワードを安全にハッシュします。
と関数 hash_password は、ランダムなソルトを使用して、指定されたパスワードの安全なハッシュを生成します。
class Bcrypt: def __init__(self, rounds=12, salt_length=22): self.rounds = rounds self.salt_length = salt_length
def generate_salt(self, salt_length=None): if salt_length is None: salt_length = self.salt_length return base64.b64encode(os.urandom(salt_length)).decode('utf-8')[:salt_length]
以上が安全なパスワードハッシュのための Bcrypt アルゴリズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。