安全なパスワード保存の業界標準: bcrypt アルゴリズム

安全なパスワード保存の業界標準: bcrypt アルゴリズム

パスワードを安全に保護するための標準アルゴリズムである bcrypt アルゴリズムについて説明します。わかりやすくするために、2 つの記事に分けて説明します。

  • bcrypt アルゴリズムについて説明し、PHP の crypt() アルゴリズムを通じてパラメータをさらに詳しく説明します。crypt() アルゴリズムはもはや推奨されていませんが、bcrypt アルゴリズムを理解するには依然として非常に役立ちます。その履歴を確認することができます。
  • システム内に複数の開発言語がある場合、bcrypt アルゴリズムは汎用的でしょうか? PHP と Ptyhon 言語を使用して記述してください。

この記事では主に bcrypt アルゴリズムについて説明します。bcrypt アルゴリズムは KDF 関数の実装と見なすことができ、反復係数の概念も備えています。

[[256502]]

bcrypt アルゴリズムは、Blowfish ブロック キー アルゴリズムに基づいています。bcrypt アルゴリズムには 10 年以上の歴史があり、Blowfish キー アルゴリズムには 20 年以上の歴史があります。テスト済みであるため、ハッシュ暗号化パスワードの標準アルゴリズムと見なされています。

bcrypt アルゴリズムは、ハッシュ プロセスを内部的に初期化するためにメモリを使用します。メモリが必要なため CPU 上では非常に高速に実行されますが、並列コンピューティング用の GPU 上では高速ではなく、攻撃者のクラッキング速度も低下します。

次に、PHP言語のcrypt()関数を使用して、bcryptアルゴリズムの使用方法を紹介します。ハッシュ保護パスワードについてあまり知らない場合、crypt()関数を使用するときに多くの問題が発生する可能性があります。

まず、crypt() 関数は bcrypt アルゴリズムではないことを明確にする必要があります。これは、さまざまなハッシュ アルゴリズムに基づくことができます。

この関数のプロトタイプは次のとおりです。

  1. 文字列 crypt ( 文字列 $str [, 文字列 $salt ] )

見た目はシンプルですが、多くのコンテンツが隠されています。

crypt() を呼び出すだけでは、オペレーティングシステムのバージョンと PHP のバージョンに応じて対応するハッシュアルゴリズムが使用され、salt が明示的に入力されていない場合は弱い salt が取得される可能性があります。したがって、多くの詳細が隠蔽されるため、この方法で crypt() 関数を呼び出すことは推奨されません。

では、bcrypt アルゴリズム (Blowfish)、反復係数、ソルトをどのように選択すればよいのでしょうか? 例を見てみましょう。

  1. (CRYPT_BLOWFISH == 1)の場合{
  2. echo 'Blowfish:' . crypt( 'abcde' , '$2a$07$woshiyigesaltzhi' ). "\n" ;
  3. }
  • bcrypt アルゴリズムの使用を示します (注: PHP 5.3.7 以降の場合は、セキュリティ リスクを修正するためにこれを使用します)。
  • 07 は反復回数が 7 回であることを意味します。
  • 最後の $ の後の内容がソルト値です。

次に、上記のコードの出力を見てみましょう。

  1. フグ:$2a$07$woshiyigesaltzhi$$$$$.lrU488y7E1Xw.JA4uizIu.PBSSe7t4y

つまり、戻り値には、bcrypt アルゴリズムが使用されていること、反復係数が 7 であること、ソルトが woshiyigesaltzhi$$$$$ であること、残りがパスワードの暗号文であることなど、crypt() 関数に関連する情報が含まれています。

ここで疑問が残ります。crypt() によって計算されたパスワード暗号文に salt が含まれていると安全ではないのでしょうか? これについては次の記事で説明します。

crypt() は次のような他のハッシュ関数も使用できます。

  • CRYPT_MD5:
  • CRYPT_BLOWFISH: または
  • 暗号化:
  • 暗号化:

crpyt() 関数の使い方はおそらく誰でも理解していると思いますが、使い方が少し面倒な場合もあるため、関数をパッケージ化することをお勧めします。

  1. 関数better_crypt($input, $rounds = 7) {
  2. $salt = openssl_random_pseudo_bytes(22);
  3. crypt($input, sprintf( '$2a$%02d$' , $rounds) . $salt);を返します
  4. }

いずれにしても、crypt() 関数は完全に基礎となる C 関数に基づいており、動作環境もオペレーティング システムと PHP のバージョンに依存します。システムとコードを移行する際には多くの問題が発生する可能性があるため、PHP ではバージョン 5.5 以降、パスワード ハッシュ関数の使用を推奨しています。これについては次の記事で詳しく説明します。

最後に、新しいパスワード保護アルゴリズムと別のアプローチである scrypt アルゴリズムについて簡単に説明します。これはパスワード保護の業界標準アルゴリズムと見なされていますが、時間が短いため、bcrypt() アルゴリズムを使用することをお勧めします。

<<:  AIが指紋を偽造できる場合、生体認証は依然として安全ですか?

>>:  「知的障害ロボット」が解雇に直面

ブログ    
ブログ    

推薦する

Claude3 が GPT4 に教訓を与えました!オープンAI最強の対戦相手の深夜爆弾、全貌解析付き!

制作:51CTO テクノロジースタック(WeChat ID:blog)深夜、OpenAI の最大のラ...

...

...

爆発力で動く昆虫ロボットは、自重の22倍を運ぶことができ、垂直に59cmジャンプできる。

この小さなロボットはエネルギーに溢れています。体は昆虫ほどの大きさですが、自分の体重の22倍の重さの...

OpenAIが「公式クローラー」をリリース: GPT-5はこれでトレーニングされ、必要に応じてブロックできる

周知のとおり、OpenAI は GPT-4 以降、技術的な詳細を完全に秘密にしてきました。当初は、ベ...

...

ケーキを食べて、ケーキも残すことはできないのですか?清華大学チーム、非常に正確で解釈可能な分類モデルを提案

[[432462]]既存の機械学習分類モデルは、性能と解釈可能性に基づいて、大まかに 2 つのカテ...

GPT のプログラミング バージョンは 30,000 スターに急上昇し、AutoGPT は危険にさらされています。

執筆者 | 王 瑞平AutoGPT に続いて、GPT ファミリーに新しいメンバーである GPT-En...

インターネット上の無料データサイエンス、機械学習、人工知能のMOOCベスト20

21 世紀において、伝統的な教育は人生において必要な段階ではなく、選択肢となっています。インターネ...

精度が極めて低いです! OpenAIがAI検出器を削除、ICMLの傑出した論文が非難される

OpenAI は、わずか半年しかオンラインではなかった独自のテキスト検出器 Classifier を...

...

...

Swift モバイル ゲーム開発に適用される幅優先探索アルゴリズム

[51CTO.com クイック翻訳] Swift Algorithm Club (https://g...

Gemini と GPT-4V のどちらが優れていますか?視覚言語モデルの総合的な比較と併用

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...