-1

原住民をざわつかせないように、私の「質問」を修正します。

最近、インターネット上には非常に多くのリソース (SO を含む) があるようで、質問に対する "an" 回答を見つけるのは簡単かもしれませんが、その回答が有効であるか、最新のものであるかを確認するにはどうすればよいでしょうか?

特によく聞かれる分野の 1 つは、データベース ストレージで準備するために PHP でハッシュと暗号化を適切に処理する方法です。SO に関する一般的な回答の 1 つは、「まだ php.net にアクセスしたことがありますか?」というものです。これは通常、誰かが最も簡単な質問をする質問になることを理解していますが、いくつかの説明が矛盾しているように見え始め、さらに重要なことに、ユーザーの例が古くなっています (2008 年から 2009 年までの多く)。

例: パスワードハッシュを使用する理由と方法を調べる場合: http://www.php.net/manual/en/faq.passwords.php#faq.passwords.fasthash

要約すると、sha1 と md5 は高速で計算効率の高いハッシュ方法であり、パスワードのハッシュには適していないことがわかりました。推奨される方法は、crypt() 関数を使用することです。

crypt() および特にフグのハッシュについてさらに学習する場合、このページに記載されているルールは次のとおりです。

http://www.php.net/manual/en/function.crypt.php

  • 私の塩を$ 2a $から始めます
  • 2つの数値で続行します(以下のユーザーはこれの重要性を述べていますが、php.netはそうではありません)
  • $ を続けてください
  • 22文字の英数字を入力してください

さらに読むと、次の例が得られます。

<?php

    if (CRYPT_BLOWFISH == 1) {
        echo 'Blowfish:     ' . crypt('rasmuslerdorf', '$2a$07$usesomesillystringforsalt$') . "\n";

    }
?>

同じページの例は、使用するように指示されたばかりの規則に従っていないようです (「$2a$07$」の後の 26 文字。

戻り値は次のとおりです。

フグ:
$2a$07$usesomesillystringfore2uDLvp1Ii2e./U9C8sBjqp8I90dH6hi

基本的に、文字列自体は実際に変更されますが、SALT 値のほぼ全体 (上記の最初の 22 文字) は大きく開いています。これにより、実際の文字列が何であるかを判断するのがいくらか簡単になりませんか?

さらに重要なことに、これは 1 つの例にすぎませんが、最終的に、PHP.net などのリソースにどの程度依存する必要があるのでしょうか?

友人のムガトゥがかつて言ったように、「私はクレイジーな薬を飲んでいるような気がします」.

注:上記のページは最初の投稿以降に編集されたため、最初の質問と提供された例から変更されていないことを保証することはできません.

4

3 に答える 3

6

そうです、インターネット (素晴らしくも恐ろしい場所でもあります) は、これをどのように行うべきかについて矛盾した情報でいっぱいです。私には個人的な意見があります (一方向のパスワード ハッシュにはEksBlowfishが好きです) 。

そのリンクをたどらない場合に備えて、1 つの重要な注意事項があります。続く 2 つの数字はランダムで$2a$はありません。これらは、文字列で実行する EksBlowfish のラウンド数の対数ベース 2 です。基本的に、数値を 1 ずつインクリメントするたびに (たとえば、$2a$07$$2a$08$)、ハッシュの計算にかかる時間が2 倍になります。

これは設計によるものです。これにより、EksBlowfish の計算コストが非常に高くなり、ハードウェアがスケールアップすると (ムーアの法則)、元に戻って再び高価になる可能性があります。

私の良き友人が言ったように、良いクラッカーをかわそうとする唯一の本当の方法は、彼らの時間を無駄にすることです. 繰り返しになりますが、(a) EksBlowfish と (b) なぜそれを使用する必要があるかについての詳細が必要な場合は、この恥知らずで利己的なブログ プラグインをチェックしてください。必要に応じて、記事の最後までスキップして、私よりもはるかに頭の良い人が書いたものへのリンクを参照してください。

編集

PHP に SHA-1 や MD5 などの直接実装が含まれている理由は、PHP が昨日発明されたのではなく、(さまざまな形で) 20 年前から存在しているからです。MD5 は安全だと考えられていました。物事は変わります。

于 2011-07-29T17:26:40.747 に答える
3

sha1 や md5 などの古いハッシュ アルゴリズムは、高速検索のためのデータのハッシュなど、いくつかの用途に適しています。は (もはや) 暗号的に安全ではありませんが、依然として有用であり、sha256 などのより安全なアルゴリズムよりもはるかに高速に計算できます。

Sha1 と Md5 は、力ずくでクラックすることが (NSA や KGB でなければ) 商業的に不可能だったとき、かつては計算上比較的安全でした。現在、レインボー テーブルまたは GPU 対応のブルート フォース アルゴリズムを使用すると、誰でもハッシュを適切な時間内にそのハッシュを生成する入力にマッピングできます。数年前、そうではありませんでした。

于 2011-07-29T17:28:21.580 に答える
2

多くのサイト(何について話しているのかわからないサイトを除く)の問題は、1年前に適用可能だったサイトが依然として人気があるが、古い情報が含まれていることです。かつては最高MD5SHA1ハッシュアルゴリズムでした。残念ながら、最近はそうではありません。ハッシュを入力して機能するキーを受け取るためのルックアップテーブルが多数存在します。または、単純にブルートフォースでそれらのテーブルに侵入することもできます。また、残念ながら、多くのソフトウェアパッケージは依然としてそれらに依存しています。これが、それらがまだ存在する理由の1つです。

安全なハッシュアルゴリズムとしての欠点にもかかわらず、ファイルチェックサムの生成などの多くの場合に適用できます。これにMD5を使用すると、すばやく簡単に実行できます。ほとんどのチェックサムチェックソフトウェアは、HD5サムに対するファイルのチェックを引き続きサポートしています。

PHPは、膨大な数のハッシュアルゴリズムをサポートしています。hash()新しいハッシュもサポートするように拡張可能な関数を確認してください。を使用して、サーバーがサポートしているものを確認できますhash_algos()。個人的には、SHA-512をソルトとともに使用します。これは、ハッシュ名の数値が大きいほど、ハッシュが優れていることを意味するためです。右?:)

于 2011-07-29T18:15:36.190 に答える