質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

2577閲覧

ハッシュ関数のソルトについて

aaaaaaaa

総合スコア501

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/03/30 11:17

phpのハッシュ関数に関する疑問です。第二版php逆引きレシピの574pで、可能な組み合わせをすべて試すブルートフォース攻撃から安全性を保つためにpasword_hash()という関数は、ソルトという
無作為に作られたデータをパスワードに付与する、と記述してあります。つまり、計算量が多くなるから、不正な接続や攻撃に時間がかかるようになるということです。
しかし下記のページでは、総当たりに攻撃を行うブルートフォース攻撃から身を守るためにソルトは役に立たない、効果がないと書いてあります。
http://securityblog.jp/words/6452.html
いったいどちらが正しいのでしょうか。
不正な攻撃や接続を行う人は、相当な知識を持っていらっしゃると思うので、計算量が増えた程度では、安全性は保てないという認識で良いのでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ソルトは、レインボーテーブルのような事前計算による攻撃への対策です。

例えば8桁以下のパスワードの全組み合わせに対して
ハッシュ値を事前計算しておき、ハッシュ関数への入力値であるパスワードとのペアをテーブルに格納しておきます。
このような準備をしておけば、8桁以下のパスワードについては
ハッシュ値から元のパスワードを求めることが容易にできるようになります。

しかし、パスワードにソルトを付けておけば、ソルトの分だけ(事前計算されたテーブルを使うという観点では)実質的なパスワード長が増えるので、事前計算による攻撃は困難になります。

一方、ソルトはブルートフォース攻撃に対しては効果はありません。
ソルトは攻撃者にとって既知(ソルトは普通ハッシュ値と一緒に保管するので、ハッシュが知られている時点でソルトも知られる)なので、パスワードにソルトをくっつけた上で総当たりすれば済むからです。

投稿2016/03/30 13:13

編集2016/03/30 13:14
YsMana

総合スコア257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

プルートフォースアタックは予測を行わずに可能性のある候補を総当りで試す方法ですが、この要素を踏襲しても目的や状況によって手法は複数に分かれます。

攻撃者に対象のユーザID以外何も情報が無い場合、単純にあるユーザのパスワードをプルートフォースアタックで破ろうとするなら、ログイン画面でパスワードの候補を片っ端から試していく手法が考えられます。
パスワードが英語小文字で8文字と決まっているなら26^8≒2088億回程試せば、相当運が悪くても正解が見つかります。この方法であれば、試すのは暗号化前の文字列ですから(ログイン画面に打ち込んだ文字列をPHPがハッシュ化してDBのハッシュ済みの値と比較する)どのように変化されていようとも試行回数に代わりはありません。なのでソルトをつけて暗号化しても(この方法での解析の)難易度は変わりません。
でも考えてみてください。ログイン画面から何億回もパスワードを変更しながらトライを繰り返すと相当時間が必要になります(1回辺りの処理時間はサービスサーバの処理能力や間の回線によって制限をうけます)し、その間に管理者に不自然なログが発見され対策されると思います。

では目的のユーザの暗号化済みのパスワードを入手していたらどうでしょう?
これなら攻撃者が自前の設備を使って自由に解析作業を進める事ができます。
全く意味不明の文字列からどのようにして(総当りを使って)元の文字列を割り出すのかちょっと想像できませんが、単純にユーザの入力した文字列をハッシュ化したものより、プログラムがソルトを付け足した文字列がハッシュ化されている場合のほうが難易度が増すように思いませんか?

投稿2016/03/30 12:50

編集2016/03/30 13:04
hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問