• ベストアンサー
  • 暇なときにでも

SSLとMD5について

今、ログイン周りを勉強しているのですが、 MD5でハッシュ化すればO.K.と思ってたら、 本の下の方に、 「いくらサーバー側で暗号化しても、パスワードは裸の状態で経路のネットワークを流れてくるわけですから気休めですけどね」 って書いてました。 MD5ってのは、平文で流れる場合、一応やった方がいい、ぐらいの感じなのでしょうか? ・平文で送らないためには、SSLにするしかないのでしょうか? ・SSLにしたら、MD5にしなくてもよいのでしょうか? ・チャレンジ/レスポンス認証というのは、どうやってやるんでしょうか? 「ここら辺の関連性」、「何が違うのか」、「注意したらいい点」、「それぞれのメリット・デメリット」等、教えてください。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数409
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • 回答No.1
  • notnot
  • ベストアンサー率47% (4675/9832)

>MD5でハッシュ化すればO.K.と思ってたら、 何をハッシュ化する話ですか?パスワードをDBに保存する際の話でしたら、何らかの文字列を付加した上でMD5とかSHA1とかでハッシュした物だけを保存するのは必須です。これは通信路が何であるかと関係ありません。 ハッシュ化して保存しないと、DBにアクセス出来る人(クラッカーも含む)だと全員のパスワードが見放題です。 一方通信路の方は、盗聴者が罠を仕掛けた状態で、誰かがログインすると平文でパスワードが流れたときにそのパスワードだけが漏れます。そもそも通信路に罠を仕掛けるのは、サーバに侵入するよりは困難なはず。 というわけで、重大度がかなり違います。 平文で通信路を流さないためには、お書きのように、SSLかチャレンジレスポンスがありますが、チャレンジレスポンスだとクライアント側でプログラムが必要ですね。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答ありがとうございました。 頭の中がこんがらがってたのですが、 「DB保存」と「通信路」に分けて考えればよいことが分かり、 すっきりしました。 >パスワードをDBに保存する際の話でしたら、何らかの文字列を付加した上でMD5とかSHA1とかでハッシュした物だけを保存するのは必須です。これは通信路が何であるかと関係ありません。 これだけはっきり書いていただくと、分かりやすくて、助かります。 >重大度がかなり違います この辺りの説明も大変分かりやすかったです。

関連するQ&A

  • POP3 over SSL と APOPを併用した方がよいか

    お世話になります。 APOPの脆弱性は、MD5やSHA-1のハッシュの問題と合わせて色々と難しい理屈のようですが、私の場合はPOP3S(POP3 over SSL)でメールサーバーと通信しているため、IDとパスワードは暗号化されています。 そこで思ったのですが、この暗号化はそれなりに強力な物だとは思っていますが、このSSL接続の中でさらにAPOPを使った方がすこしは安全性がマシになる、といった事はあるのでしょうか。 普通はPOP3を使用すると思いますが、もしSSL接続の中身が見られたとき、APOPならさらにこれを解読(?)する必要がありますよね。 しかし、一般のSSLを破るほどならAPOPなんて数秒で解読できる意味のない物なのでしょうか。 メーラーでかんたんに選べる設定だけに、無意味に悩んでいます。 平文で送るのとAPOPで送るのと (どちらも、それをさらにSSLで送るわけですが)どちらがよいのでしょうか? もちろんメール本文はどちらにしろサーバーの先で平文になりますよね、それは分かっています。 理解が間違っていたらご指摘ください。

  • ログインする際、SSLにした方がいいのか?

    SSLを調べたら: SSLは公開鍵暗号や秘密鍵暗号、デジタル証明書、ハッシュ関数などのセキュリティ技術を組み合わせ、データの盗聴や改ざん、なりすましを防ぐことができる。 と書かれています。 このごろメール、また会員制などにログインする際、 SSLもしくは非SSLの2種類のログイン方法があるのですが、何か大きな違いというのはあるのでしょうか。 セキュリティを考えたら、当然SSLでログインだと思うのですが、非SSLでログインするメリットは何かあるのでしょうか。 ぜひとも教えて頂けますか。

  • 無料のSSLと無料のサーバ…

    wkey.meでサーバを借りました。 ドメインは、「wkeya.com」でサイトのアドレスは「http://○○○.wkeya.com」となります。 それで、Wordpressを使うことにしたのですが、SSLサーバ証明書を自分で用意しないといけないとわかり、いろいろ調べた末にStartSSLにたどり着きました。 StartSSLの設定も終わり、いざ証明書を発行しようとした所… ドメイン認証で「wkeya.com」が使えないと判明!証明書が発行せず今に至ります。このままでは、Wordpressに平文ログイン、フォームを用意したとしても平文やりとり。これでは危ないですよね? そこで、トップレベルドメインを取ろうと思い無料のものを探した結果、「.tk」に行き着きました。 しかし、StartSSLを見ると「.tk」も未対応と来たもんです。 もうどうすればいいのか八方塞がりになってしまいました。 無料でWordpressが使え、無料でSSL暗号化通信を導入できるにはどうすればいいのでしょうか? レンタルサーバから暗号化通信まで、びた一文払わずにやるというのは不可能なのでしょうか? 「.free」というトップレベルドメインが開始されるとかされないとからしいのですが、StartSSLで使えるかも不透明でしょうし^^; 貧乏人はサイト作るべからずですかね?w

その他の回答 (2)

  • 回答No.3

> ・平文で送らないためには、SSLにするしかないのでしょうか? MD5等のハッシュ関数をうまく利用して、パスワードまたは パスワードをハッシュ化したものを直接送らなくても、 正しいパスワードを知っていることを伝える方法があります。 それが、チャレンジ/レスポンス方式です。 > ・SSLにしたら、MD5にしなくてもよいのでしょうか? 他の方も書かれている通り、SSLは通信路の暗号化に役立ちますが、 通信路に関係なく、パスワードをDBに保存する際は、MD5等の ハッシュ化をすべきです。 > ・チャレンジ/レスポンス認証というのは、どうやってやるんでしょうか? http://www.ipa.go.jp/security/awareness/vendor/programmingv1/b09_01_main.html の「チャレンジ/レスポンス方式」の解説がわかりやすいと思いますので 参考にしてください。 httpプロトコルレベルで、MD5を使ってチャレンジ/レスポンス方式で 認証する方式を「ダイジェスト認証」と言います。ダイジェスト認証は ApacheやIIS等のサーバ側を設定するだけで簡単に利用できますし、 クライアント側もIEやFirefox等の一般的なブラウザなら必ず対応しています。 (参考) http://www.adminweb.jp/apache/allow/index8.html フォーム認証でチャレンジ/レスポンス方式を実現する場合は、 ブラウザ上でJavaScriptを使ってハッシュ処理を実行させる必要があります。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ダイジェスト認証って、初めて聞きました。 取っ掛かりとなる「キーワード」を全然知らないと、何を検索していいのかすら、 分からないので、 こんなのもあるよ、って情報は大変有難かったです。 また、チャレンジ/レスポンス方式もそうですが、 詳しい説明と、有用な参考サイトを教えていただき、 ありがとうございました! みなさんのアドバイスを参考にして、 これから色々、勉強・検討・試行錯誤していきたいと思います。

  • 回答No.2

MD5する理由-> SQLインジェクションなどでパスワードが流出した場合そのまま使われてしまいます。 ですので、ハッシュ化したものを保存しておくのがいいと思います。 出来ればパスワード+SALTしたものをmd5とかsha1かけるのがいいと思います。 SSL-> こちらは通信経路なのでパスワードをハッシュかけるのとは別物ですね。 例えばネカフェやマンションなどはルーターを使用してると思います。このルーターに流れるパケットをのぞき見された場合sslにしていないと丸見えです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

>出来ればパスワード+SALTしたものをmd5とかsha1かけるのがいいと思います。 回答ありがとうございます。SALTの存在とか、すっかり忘れてました。SALTのこともこれから勉強しときたいと思います。

関連するQ&A

  • SSLについて

    おはよう御座います。お世話になっております。 題名にある「SSL」に関して、諸先輩方々のご意見を伺えればと思い、投函させていただきます。 その理由とは、 先日からレンタルサーバ(共有)を借り始め、SSLとすべくファイル(ログインやメールフォームなど)を、secureディレクトリに設置して試みているところですが、ログインなど、secureディレクトリにおいて認証されたセッションなどを通常のルートディレクトリに引き継ぐ為には、セッションではなく、クッキーを用いてその情報を受け渡すよう指導を受けました。 しかしながら、この流れの条件は通常のルートディレクトリにおいてクッキーを読み込ませる為、クッキー送信時、secure属性を付加しないという条件だったのですが、これだと暗号化されずSSLを用いるメリットが半減されるというものでした。 私自身、このSSLというのを触るのは今回が初めてなのですが、当初はセッションでその情報を引き渡す?といった感覚で居たところ、上記のようにサーバ会社からの指導は『セッションではなくクッキーで!』という反面『通常のルートディレクトリからクッキーが読み込めなくなるのでクッキーはsecure属性にしないで』、『secure属性じゃないのでSSLのメリットがありません』といった内容です。 ちなみに、現在のファイル構成は、ログインや各フォームなどのファイルをsecureディレクトリに設置しており、httpとhttpsを跨ぐような構成になっております。 些か回りくどい説明になってしまいましたが、SSLの機能を保つためには、セッション、クッキー問わず、どのような流れが適当なのでしょうか?簡単な流れを含むヒントだけでも結構です。皆様のお知恵を頂戴できれば幸いに思います。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • md5の認証が通らない

    PHP 5.1.6 MySQL 5.0.77 で開発しています。 ログインの処理で以下のコードを書いています。 入力したパスワードをサーバに送っているところです。 print $row["user_password"] . "<br />"; $entry_password = mysql_real_escape_string(trim($_POST['password'])); $crypted_password = hash('md5',$entry_password) ; print "crypted_passwordは " . $crypted_password . "<br />"; // 認証OK? //ハッシュ化後の処理 if ( $_POST["mode"] == "login" && mysql_num_rows($res) > 0 && $crypted_password == $row["user_password"] ) { $_SESSION["userid"] = $row["user_id"]; header("Location: top.php"); } ?> $row["user_password"] はデータベース内に格納してあるユーザーパスワードで 既に「md5」でハッシュ化されて格納されています。 利用者が入力したパスワードを「$_POST['password'」でサーバに送り、 同じく「md5」でハッシュ化して「$crypted_password」としています。 ここからが問題ですが、 「$_POST['password'」も「$crypted_password」もまったく同じわけのわからない 同じ32文字のテキストですが、(「print」で目視確認しています。) 何回やっても認証が通りません。 目視した限りではまったく同じ文字列です。 $_POST["mode"]が「"login"」になっているのも確認しました。 「mysql_num_rows($res) > 0」は $row["user_password"] が帰ってきているので 間違いありません。 どこに原因があるのでしょうか。 お分かりの方、教えて下さい。

    • ベストアンサー
    • PHP
  • PHP PEAR AUTH 認証でのパスワードを忘れた場合

    AUTHを利用しての、認証を行う場合、usernameとpasswordの カラムを持つテーブルを参照しますが、このpasswordは MD5でハッシュした値で、テーブルに格納しなければならないようです。 この場合、パスワードを忘れてしまった際など、テーブルを 見てすぐにpasswordの値が確認できないので不便です。 なのでテーブルに格納するパスワードは平文としたいと思います。 平文でpasswordを格納しても、'cryptType'=>"none"とすれば 認証は通りますが、やはり平文では心配な所があります。 良い解決方法があれば教えてください。

    • ベストアンサー
    • PHP
  • PAPについて質問

    現在認証方式としてPAPとCHAPを調べています。CHAPはパスワードをMD5することによって暗号化できますが、PAPは平文で送る為読み取られると書いてあるのですが、ここで言っている「平文」とは何を指すのでしょうか? 「目に見える文字」(0~9、A~Z、a~z)のことなのか、あくまでも「読み取ることが出来る」(バイナリデータでも可?)なのかいまいち理解できません。後者であるのならPAPを使用しようと考えております。 どなたかご存知の方がいらっしゃいましたらご教授よろしくお願いいたします。

  • サーバ証明書等の正当性の確認について。

    サーバ証明書、証明書には、 認証局の署名をSHA-1等のハッシュ関数で、 ハッシュ化されたハッシュ値を、 認証局の秘密鍵で暗号化された認証局の電子署名が付加されていると思いますが、 その部分の信頼性についてですが、 認証局から、 公開鍵を取り寄せて、 ハッシュ値を取り出すと思うのですが、 もともとの平文(署名)を認証局から取り寄せることは可能でしょうか。 認証局の公開鍵で復号できたから、 認証局の秘密鍵で暗号化されているといえるのですが、 もともとの署名が何かがわかりません。 (ちょっと信頼性にかけるような気がします。) 署名を取り寄せることができれば、 署名をSHA-1等を使って、 ハッシュ値を取り出して、 公開鍵で復号したハッシュ値と比較することができます。 公開鍵と平文(署名)を取り寄せることはできないのでしょうか。

  • MySQLのログインを暗号化できますか?

    MySQLのログインを暗号化できますか? connectを張るときに"user id=○○; password=××; database=△△;Data Source=■■" をインターネット経由で送ってます。 この部分はオラクルだとデフォルトで暗号化されてるが、 MySQLでは平文のままだという話をききます。 1.平文のまま流れてるというのは本当なんでしょうか? 2.もし、平文のままなんだとすると、SSLみたく暗号通信化する方法は MySQL自体に実装されてるんでしょうか? それとも自前でトンネルを掘る必要があるんでしょうか? 平文のまま流れてるなら、いつかは盗聴されるように感じています。 上記について、ご存知の方おられましたらよろしくお願い申し上げます。

    • ベストアンサー
    • MySQL
  • SMTP AUTHについて教えて下さい

    SMTP AUTHをおこなう場合、よく LOGIN、CRAM-MD5、PLAIN という3つの認証方式を目にしますが、 これらの違いが良く分かりません。 CRAM-MD5、PLAINに関しては自分なりに調べたところ、 smtpサーバにログインする際に何か暗号化するようですがLOGINの場合も暗号化を行うのでしょうか?

  • Gmailのパスワード暗号化についての質問です。

    どのケースでもメール本文は「SSL/TLS」に設定できるのでいいのですが、 問題はパスワード認証です。 PCではTunderbirdを使っていますが、 その設定で 受信はポート番号995で「TLS証明書」を用いて認証できるので安心なのですが、 送信はポート番号465に設定可能なものの、 「TLS証明書」が選択項目になく、 「暗号化されたパスワード認証」 「NTLM」 「Kerberos/GSSAPI」 のいずれもうまくいかず、 「通常のパスワード認証」しかできません。 AndroidではK-9 mailを使用しています。 受信は「認証タイプ」、送信は「セキュリティ設定」という項目のようですが ともに 「CRAM_MD5」がうまくいかず、 「PLAIN」「AUTOMATIC」「LOGIN」などでしか認証できません。 パスワードが平文のまま流れているというのは かなり不安になります。 これって、どうにかならないのでしょうか?

    • ベストアンサー
    • Gmail
  • FedoraCore3のアパッチで

    インターネット上のブラウザと IDやパスワードや文章をやり取りしたいのですが 平文でなく暗号文でやり取りしたいのですが SSLだと認証を受けないとブラウザに警告メッセージが出るようなのですが 警告がでないで暗号でのやり取りができる方法はないでしょうか?

  • ユーザーパスワードのDBの格納について

    あるメーカーのソフトウェアを使用しており、Webからログインするときのユーザ名、パスワードがユーザーデータベースのテーブルに平文で格納されています。 そのソフトで使用しているデータベースはSQL Server 2008R2になります。 平文で格納されているのが気になっており、SQL Server 2008R2を使用してテーブルに格納するパスワードをハッシュ+ソルト+ストレッチングして格納すること仕組みとして可能かどうか気になっております。 もし仕組みとして可能な場合、Webからログインした際にユーザーが入力したパスワードをハッシュ+ソルト+ストレッチングして、テーブルに格納されているハッシュ+ソルト+ストレッチングしたパスワードと比較して認証を行うようにプログラミングは可能でしょうか。