多くの登録制のウェブサイト(Twitterとfacebookで確認しました)は、ログイン時のパスワードをformのパラメーターに直接載せています。
しかし、パスワードが直接渡ると、サーバー側で**(分かりづらかったため追記3:
"クラッカー"ではなく"サーバー管理者"に)**パスワードが抜き取られる可能性が出てくるので、ユーザーにとっては不安であると思います。
そこで、パスワードをブラウザ側でハッシュ化してから送るような仕組みにすればこの心配は無くなると思うのですが、そのようなことは行われていません。これはどのような理由によるものなのでしょうか。
ハッシュ化することの問題点として、
パスワードが推測されやすい文字列になっていないか確認できない。
というのが考えられますが、
レインボーテーブルなどを使えば最低限のチェックはできるのではないかと考えました。
追記1 質問の重複について: SSLを利用したWebサービスでログインパスワードを安全に保存するには?(https://teratail.com/questions/49293) 既に同じような質問がありました。重複した質問をしてしまいました。すみません。(何故か議論が途中で途切れているようにみえますが)
追記2 タイトルの修正: すでに解決した質問ですが、質問内容が伝わりづらかったため、タイトルに対して修正を行いました。 旧題:多くのサービスがログイン時に生のパスワードをそのまま送っているのはなぜか 改題:多くのサービスがログイン時に生のパスワードをそのまま送っているが、「サーバー管理者」にパスワードを悪用されることはないのか
追記4 感想: ユーザーがサービス毎にパスワードを変えないことに問題があるという回答をいただき、解決済みとしました。 恥ずかしながら、私はサーバー管理者による悪用の対策としてパスワードを使いまわすことの問題点を知りませんでした。 要するにパスワードを使い回すな、ということで、質問文が分かりづらかったので、難しい質問だと捉えられてしまった方はすみませんでした。 しかし、パスワードを使いまわしているユーザーが8割以上いる現状を考えると、 パスワードを使いまわさないように周知すると同時に、 生のパスワードを送らせないためのなんらかの対策があったらいいなと思いました。 サービス側がクライアントサイドでハッシュ化していることを証明するのは無理でしょうが、クライアント側で解決できる問題なので、 例えばブラウザに、 デフォルトで1Passwordなどのツールをユーザーに使わせるようにしたり、 パスワードの入力画面を検出して、パスワードとドメイン名を結合したものをハッシュ化して置き換える、 (これならクライアント内で完結できますし、複数のコンピュータでも問題なく使えるはず) などのような対策があったらいいのかなと思いました。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
解決されたようですので、簡単に補足します。
そこで、パスワードをブラウザ側でハッシュ化してから送るような仕組みにすればこの心配は無くなると思うのですが、そのようなことは行われていません。これはどのような理由によるものなのでしょうか。
確かに広く使われてはいませんが、HTTP認証の一種「ダイジェスト認証」としてブラウザ等に実装されています。詳しくは、以下をご覧ください。
では、なぜダイジェスト認証がそれほど普及していないかというと、安全性が中途半端だからではないかと推測します。
ダイジェスト認証が安全でない理由を説明します。Wikipediaからダイジェスト認証のダイジェストの求め方を引用しますが…
クライアントが計算するresponseは以下のようにして求められる:
A1 = ユーザ名 ":" realm ":" パスワード A2 = HTTPのメソッド ":" コンテンツのURI response = MD5( MD5(A1) ":" nonce ":" nc ":" cnonce ":" qop ":" MD5(A2) )
サーバ側では、MD5(A1) をあらかじめ計算し格納してある。nonce,nc,cnonce,qopとHTTPのメソッド(GETなど)とコンテンツのURIはクライアントから送られてくるので、サーバ側でもresponseの正解を計算できる。
サーバーにはMD5(A1)の計算結果が保存してあるわけですが、これが攻撃者に漏洩すると、攻撃者はダイジェスト認証のハッシュ値(response)が計算できるので、認証を突破できてしまいます。
しかるに、パスワードが漏れやすい経路はどこかですが、(1)通信路、(2)パスワード情報が格納されたDB等、ですから、(2)からパスワードのハッシュ値が漏れるのは、現実に起こりやすいわけです。つまり、ダイジェスト認証は、通信路からの漏洩に対策するものであって、これはTLSを使えば十分安全にできます。
これに対して、大手サイトも用いる一般的な方式ですと、
(1)通信路 : TLSにより暗号化する
(2)パスワードDB : ソルト+ストレッチングを用いたハッシュ
により、いくらでも強固にできるのです。
ということで、独自のハッシュを送信する方法は思わぬ穴が生じやすく、一般的な方法を越えるのは中々難しいのではないかと思います。
投稿2017/12/06 22:06
編集2017/12/06 23:54総合スコア11705
0
パスワードAについてハッシュしたA'をクライアント側で送信したとします。
クラッカーは、元のパスワードは知らずとも、ハッシュ化されたA'でサーバーへログインするリクエストを投げれば、簡単にログインできてしまいます。
ユーザーが、自分で決めた何かのパスフレーズをハッシュして、それをパスワードとして採用しただけのことと同じです。
>レインボーテーブルなどを使えば
これは、ハッシュ化しても復号できてしまう、という「ブーメラン」を示してしまっていますよ。。
パスワード方式は、記憶に頼るもので面倒であるし完全なものでありませんが、カジュアルなハッキングを防ぐ意味では役立っています。家の錠前・鍵も、1000円かからずに簡単にコピーできるものであれ基本的な侵入はだいぶ防げますからね。
強固さを求めるなら、IDとパスワードを入力したらメールやSMSで認証URL等を送る(5分間有効)、など多要素にして、さらに不正なリクエストを検出して遮断するほうが有効かと。この方式は、いくつかのIT系大手サイトで採用されていますね。
投稿2017/12/12 02:10
編集2017/12/12 02:19総合スコア728
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
回答者の回答が、質問者の質問意図とズレてませんか?
「サーバー管理者」にパスワードを悪用されることはないのか
結論としては、ありえます。
多くの人はパスワードを使いまわしています。
ログインIDがメールアドレスの場合、生のパスワードが保存されていると、容易にそのメールアドレスにログインできます。
もちろん他人のアカウントにログインすることは現在では犯罪です。(過去、罰する法律がない時代がありました)
追記:
ちなみにですが、もう10年以上も前の話ですが、とある会社のエンジニアは、ログインIDとして使われていたメールアドレスとパスワードで、実際にGMailやYahoo!メールにログインして遊んでいました。私はその光景を見ていて、これは将来、犯罪に使われるなと思っていました。
投稿2017/12/12 01:27
編集2018/12/04 02:14総合スコア108
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/12 01:35
2017/12/12 01:41
2017/12/12 02:00
2017/12/12 02:03
退会済みユーザー
2017/12/12 02:05
2017/12/12 02:06
2017/12/12 02:10
退会済みユーザー
2017/12/12 02:13
2017/12/12 02:19
2017/12/12 03:02 編集
2017/12/12 03:16
2017/12/12 12:03
2018/03/08 16:39
退会済みユーザー
2018/03/08 23:04
2018/06/06 01:03 編集
2019/01/29 07:37
退会済みユーザー
2019/01/29 08:06
2019/01/29 08:20
0
みなさんなぜか、hskさんが言ってる観点について触れてませんが、ブラウザ側でハッシュ化してという仕組みになったとしても、それはサービスとしてハッシュ化後の状態でリクエストを可能にしているということなので、攻撃者にとってはどちらでも同じ。
一応回答を・・・
多くのサービスがログイン時に生のパスワードをそのまま送っているが、「サーバー管理者」にパスワードを悪用されることはないのか
ある。それが普通であり、そのサービスに渡しても良いと思う個人情報を入力すべきである。
パスワードをブラウザ側でハッシュ化してから送るような仕組みにすればこの心配は無くなると思うのですが、そのようなことは行われていません。これはどのような理由によるものなのでしょうか。
全くやる意味がない。なぜなら、ハッシュ化したら、今度はハッシュ化後の文字列を他人に知られてはいけなくなるだけです。
ハッシュ化後の文字列で通信すれば処理が通ってしまうからです。
(追記1のリンク先での回答と同義)
今回のケースを「サービス毎にパスワードを変更する」という答えで締めくくるのは、いささか正確な理解ではないように思います。
サービスに対して、ユーザーが自ら送信する情報について
これは、サービスの人に見せる情報だと思うべきだと思います。もちろんSSLなどを使って、第三者に対して情報が漏洩しないようにはしますが、
基本的に、入力するということは、情報を見せるという行為です。
こと「ログイン」という処理のみに限って言えば、見せない方法があるとすれば、「facebookでログインする」などのソーシャルログインですね。
もちろんこの場合でも、最初にfacebook側には通常通りログインする必要がありますが、新しく利用するサービス側にログイン情報を与える必要はなくなります。
ちなみにサービス管理者が悪だという話で、パスワード問題を議論すると、パスワードどころの話ではないですよ。サービス管理者が悪なら、例えばFacebookなら自由になりすまし投稿できますし、amazonなら自由になりすましてお買い物が可能でしょう。
つまり、サービス側を悪だと仮定すると、なんでも出来ちゃいます。
サービス管理者(開発者)が、パスワードをハッシュ化して保存しているか否かについて
これは、当初の議論とは、ずれた話ですが。
基本的にエンジニアとして、パスワード情報は(ログなどに)出力せず、保管はハッシュ化するのは、至極当たり前の新卒並みの知識ですが、
どの世界にもレベルが低い方がいるように、ITの世界にもいます。
このレベルの話になると、「信用できないようなサービスは利用しない」が正しいかと思います。
サービス毎にパスワードを変更する
サービス毎にパスワードを変更するのは、素晴らしいことですが、
全部のパスワードを違うようにすれば漏れても大丈夫だという議論は、ちょっと乱暴な答えな気がします。
投稿2017/12/15 11:18
編集2017/12/15 11:50総合スコア139
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
私は、サーバ側には生パスワードを送信すべきでないと思います。
「クライアントのJavaScriptは公開される以上、「パスワードを直接サーバに送る」より強固なセキュリティを確保することは困難」であったとしても、クライアント側でハッシュ化するのは意味があると思っています。それは、サーバ側に立った場合、生パスワードを知らないという事実が重要になるケースがあると思うからです。
パスワードが漏れるのはDBであるとは限りません。サーバの至る所で漏洩元になる可能性があるのです。生のPWを送ってしまうと、サーバ側でハッシュする前の段階で、例えばアクセスログなどにPWを出力してしまうなどやらかしてしまうかもしれません。クラッカーはログファイルを入手すればいいわけです。
たしかに、クライアントでハッシュ化しても、結局のところそれはPWと同等であって、セキュリティを確保するのには不十分なわけですが、ハッシュから元のパスワードが推測困難であれば、サーバからの漏洩が疑われたとしても少なくとも生PWを知らないわけですから漏洩元でないことを主張できるわけです。
それと、WebサービスごとにPWを変えるべきというのは理想論ですが、現実はそうしている人は少ないということも認識すべきかと。
投稿2017/12/12 01:10
編集2017/12/12 01:13総合スコア46
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/12 01:31
0
以前、同じような質問をしました。
参考になれば^^
まず理解しなくてはいけないのは、Zuishin さんの回答にある
クライアント側でハッシュ化して送信し、それをサーバーで保存、これはつまり生パスワードの保存なのではないですか?
保存したものがそのままパスワードとして通用するということですよね?
です。
ここを押さえたうえで、その先を検討する必要があります。
私はいろいろ考えましたが、「それってようするにHTTPSだよね」って結論で納得しました。
投稿2017/12/06 16:48
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/06 18:01
退会済みユーザー
2017/12/07 00:00 編集
2017/12/07 02:51
退会済みユーザー
2017/12/07 03:23
2017/12/07 03:35
退会済みユーザー
2017/12/07 04:09
0
ベストアンサー
サーバー側でパスワードが抜き取られる可能性が出てくるので、ユーザーにとっては不安であると思います。
理想論を言えば、パスワードはサービスごとにばらばらにすべきなので、不安ならぜんぜん違うパスワードを設定すれば、漏洩してもそのサイト以外に影響することはありません。そして、現実問題として、そこまで不安がるユーザーはそもそもサービスに登録しない、という選択肢を取るのではないかと思います。
その問題を除いてセキュリティ的に考えてみれば、クライアントのJavaScriptは公開される以上、「パスワードを直接サーバに送る」より強固なセキュリティを確保することは困難です。
投稿2017/12/06 14:31
総合スコア145932
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/06 22:21 編集
2018/12/04 02:16
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/07 14:12