• ベストアンサー

なぜハッシュ関数の値をそのままパスワードに使わない

ハッシュ関数の出力値をそのままパスワードに使うのはなぜ誰もやらないのでしょうか? 変更とか楽でよさそうですが。

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

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.3

種パスワードとID(と連番?)をハッシュの入力にすると言うことですね。 それなら意味はあるシステムだと思いますが、 素直に「種パスワード+ID」をパスワードにするのに対する利点は何になりますかね。 文字数制限とかにもある程度柔軟に対応できる、とかでしょうか。 あ、万が一パスワード(ハッシュ値)を見られても元の「種パスワード+ID」を求めるのが非常に困難というのがありますね。 (なお、辞書攻撃に強くなると言う利点は、 アルゴリズムが既知であると攻撃者も同じアルゴリズムを使ってくるため、無くなってしまう。) ちょっと心配なのは、種パスワードが割れてしまうと すべてのIDに対するパスワードが分かってしまうということですね。 特に、種パスワードを第3者のデバイスに入力することも想定しているようですから、 そこからとられる可能性もあります。 専用デバイスを使うのであればそれは各人専用(携帯電話のアプリとかで容易に実装できるでしょう)が良い気がしますが、 そうなるとハッシュを使う必要性が無くなってしまうかな? ※パスワードは任意の値とし、 その専用デバイスにIDとパスワードの組を覚えさせておく形でよくなってしまう。 (こういうパスワード管理ソフトはすでに存在してますね。) でもハッシュ方式には、個人が複数のデバイス(携帯電話複数とかあまり珍しくもないでしょう)を持ってるときに、 デバイス間でデータの同期をとらなくてもIDからパスワードを引き出せるという利点はありますね。 (クラウド使えっていわれるかもしれませんが^^;) データロストの恐れもない。 > (ひとつに絞れなければ絞る必要がありますがそれはシステム?から考え直さないと) 複数のサイトで同じIDを使うというのは割とあることだと思いますが、 その場合はサイト名を入力値に使用するとかやりようはあると思います。

kasoupctte
質問者

お礼

引き続きお付き合いいただきありがとうございました(^o^)

kasoupctte
質問者

補足

パスワード限定で質問をあげてしまったので分かりづらくなっていますので 全体像(仰るところのハッシュ方式)まとめ気味な補足ですが 結局パスワード電卓、あるいはハッシュ電卓、もしくはなまえ電卓、なまえ作成機、ユニーク値算出機、特定名作成機など、呼び方はいろいろ有り得ると思いますが、専用のデバイスを商品開発し販売、普及させるしかないかなと思います。中身はほとんどいわゆるパソコンと同じで、ただ大きさが電卓並みだとか、(後述のQRコード読み取り用に)カメラがついてるとか、あと肝心なのは(種パスワード割れなどの誤解を招かないように)通信機能はもちろん、データ保存機能は一切ついていないこと(太陽電池駆動の電卓のように)。あとオートパワーオフとか。 結局、こういった専用デバイスを、ネットと切り離された、完全に外部の演算装置として(人間が)利用することで、ある人と別の人がパスワードとしては(IDでも何でもいいですが)全く同じ言葉を利用(使用、採用)しているけれども、現実にそれを入力する段においてはひとりひとりまったく異なる値を入力することができる、その異なり具合はハッシュ関数の対衝突性によって担保できる、ということになります。(それで別質問ではもう別デバイスを使うということで、諦めたほうが良いのではと書きました) 要するに現在の世の中として、抽象化が不徹底ゆえに無駄が発生しているのではという指摘?です。 ハッシュ電卓が普及すると、まずそれがサービス(デバイス)利用の入り口というか最初の手順になるので、携帯電話ならそれを人から借りても即(かどうかはネットの速度等によりますが)自分のものとして使える、ような世界を想像しやすくなります。 たとえばチケットなども携帯すら持たずに現地で提示できるかもしれません(ハッシュ電卓を借りて、公衆ネット端末のようなものの画面からQRで計算式を読み取って種パス入力後再計算で電卓画面に表示させて提示→QRで表示されればさらに受付しやすい) 以下は個別具体的な話です 複数サイトで同じIDについては自分はむしろそれぞれきちんと分けたいほうなので(面倒で完全にはできてませんが)敢えて同じにしたいというのはハッシュ方式だと特別ケースになりそうですね。 複数サイトで同じIDを使いたいということはそれらの利用について少なくとも自分の中であるひとつの言葉なり文なり文章なりでまとめられているということでしょうからそれをそのまま入力値として(勿論先頭なり末尾なりに種パスや変更回数、0回なら0、を付けて)ハッシュ関数を通して得た値をIDにするのはどうでしょう。どのサイトでも自分がIDを決められるのが前提ですが。 万が一(2の256乗が一?)使われていたら変更回数を1加算(0なら1にするだけ) クラウドについても最初の入力値はID・パスワード・電子証明書etcetc・・・ですのでやっぱり専用電卓のようなデバイス普及が究極の?計算(演算)回路(ハード、ソフト)と認証の為の固定値(プログラミングで言う定数?)の分離のかたちかな、と言ったところです。 公開のアルゴリズム・演算回路の組み合わせによるデバイス、webサービス、クラウドを最大限に利用して、ユーザーの個人を特定するための固定値は究極には当人が記憶している256ビットのみということが可能ならば、 上で例にあげたように世の中的に一層無駄が省けるかなと思います。 もちろん公衆ネット端末とか、電車の駅であれば自動改札への組み込みとか(これは混雑的に無理かもですが)情報インフラ整備が必要になりますが。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Kon1701
  • ベストアンサー率24% (1445/5856)
回答No.2

IDのハッシュを求めてそれをパスワードとし、それを入力させる、ということでしょうか? もしそうなら、ハッシュのアルゴリズムが特定されれば全ての利用者のパスワードが破られ他の戸同じになってしまいますね。 (考えが違うのでしたら補足等、お願いします)

kasoupctte
質問者

お礼

回答ありがとうございました。

kasoupctte
質問者

補足

種パスワードならぬ種ハッシュを決めてこれを暗記しかつ秘匿します どう秘匿するかは別途ですが また勿論種ハッシュの変更も容易にできる仕組みも必要だが 頭の中だけで考えるなら、 当人が必ず忘れることなく思い出すことができると自信があり かつ自分以外には誰も(機械でも)まず推測不可能だろうと思えること (勿論証明できないが) lifehackerなどにある程度パスワードの決め方の例が載っているので これらを参考に自分なりにアレンジしてパスワードを決めてこれを種として ハッシュを取ってその値+ID(+変更回数)

全文を見る
すると、全ての回答が全文表示されます。
  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

ハッシュ関数の入力は本来使おうとしていたパスワードですか? 辞書攻撃には強くなりそうですが、変更楽になります? 手間はハッシュ関数通す必要がある分増えると思いますが。 だれもやらないのは、ハッシュ関数通すのが面倒だからでしょう。 パスワードが必要になる度にハッシュとる必要がある。 (そもそもそんなことを考える人がいないっていうのももちろんあるでしょうが。) もし、毎回ハッシュとるのが面倒だからどこかにメモするというなら、 もはやハッシュである必要はなく乱数でいいですね。

kasoupctte
質問者

お礼

妄想にちかい質問にご回答いただきありがとうございました(^o^)

kasoupctte
質問者

補足

パスワードときたら普通IDかそれに該当するものがあると思うので入力はそれですね。(ひとつに絞れなければ絞る必要がありますがそれはシステム?から考え直さないと) パスワード変更についてはIDの末尾に変更回数として数字をつけてインクリメントしていくとか(でその全体をハッシュ関数へ入力する) 面倒なのは電卓のような専用デバイスを開発してそれを用いればよいのでは。 種パスワードならぬ種ハッシュだけは暗記しておく必要がありますが それさえ暗記しておけば使いたいときに人から借りた電卓のようなもので ハッシュを取ってパソコン等に転送。 転送手段は液晶画面にQRコード表示とか。 電卓のようなものにもカメラがついてQR読みとれるなど。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ハッシュ関数について質問です。

    プログラミング・数学? 初心者です。 IDやパスワード管理によく出てくる一次方向(ハッシュ)関数ですが、 よくパスワードとSALTを一緒にしてハッシュ関数を通してハッシュ値を取得しますよね。 そしてその結果(データベースなどに記録済み)とログイン時に入力した値とを照らし合わせるわけですが、 昔まだ若いころ、これとは別のタイプのハッシュ関数を使用したことがあります。 それはある(パスワードなどの)値をハッシュ関数で処理すると「いろんなハッシュ値」が生成され、 そのハッシュ値から当然パスワードは予測できないのですが、 しかしその複数のハッシュ値は全て、そのパスワードから生成されたハッシュ値だということは分かる、という関数を使用したことがあります。 その時はperlのcpanモジュール(名前を覚えていません。すいません。)を使ったのですが、この別のタイプのハッシュ関数はどういう仕組みで作られているのでしょうか? SALTが複数あり、そのそれぞれについて照合している?だけでしょうか? それとも私が無知で、そんな関数がそもそも存在するだけでしょうか? わかりません。教えてください。

  • 暗号学的ハッシュ関数でbit長が適切って作れますか

    SHA256が(224かもですが)最小bit長で、 入力に1bitでも、また2bit以上入力値全体まで、異なれば、 出力のうちほぼ半数のbitが反転する、かつその 反転するbit位置は複数の入力値に対して法則性はなく、 ほぼランダムである。 という暗号学的ハッシュ関数であるのは、正しいですか? また、データの暗号化に使われるパスワードは4096bitを推奨との 事ですが、 SHA4096などその時に合った暗号学的ハッシュ関数を 作るのは難しいのですか? 素人考えでは、今256bitで衝突が見つかってないなら 4096bitならbit長大きいのだから作れそうな気もしますが やはりそういう問題ではないのでしょうか? もし作れるとしたら、データの暗号化に使うパスワードを SHAなんとか・・・の出力そのまま使っては、危険でしょうか? というかデータに限らず認証のパスワードでも SHAなんとかの出力そのままを使うのは何かまずいのでしょうか? もしできたらパスワードを覚えなくてよいのでいいかと思ったのですが。 パスワードは「IDのパスワード」をSHAなんとかに通した値ということで。 IDは「種パスワード+なんとかのサイト」をSHAなんとかに通した値ということで。 種パスワードはしょうがないからネットをパスワードの決め方とかで検索して 出てきた方法を見て理解して自分なりにアレンジして、最後にちゃんと頭に記憶して。 とりあえずここまで、どうでしょうか。

  • ハッシュ関数について

    例えば32ビットのデータなら32ビットのハッシュ値を、64ビットのデータなら64ビットのハッシュ値を作り出してくれるハッシュ関数はないでしょうか?できればそのようなハッシュ関数があったとして、Cのソースを公開しているようなホームページがありましたら教えてください。よろしくお願いします。

  • なんでハッシュ関数はユーザーに直接活用されない?

    何故でしょう? 一番根本のハッシュというか種パスワードみたいのはそりゃ秘匿に充分気を使うから大変かもですが しかしひとつだけに絞れるわけだし 電卓みたいなデバイスを考えてもいいし せっかくインターネットという真の意味でグローバルな(アメリカ一極化という意味でなく)ネットワークがあるのに URLのところにハッシュ値を入れれば即対応する内容が表示されればそれでいいのでは? 認証させたけりゃIDパスワードの2要素で充分だし そのIDパス自体もハッシュで決めればいいし 上流でハッシュ変更したら自動的にIDでもパスでも順番に変更が反映されていくような プロトコルでも開発して全Webサービスが実装すればいいし ハッシュ関数なんてすごいものがありながら何で活用されていないのでしょうか?? 単純に不思議です 一昔前なら誰かがチラとこういうアイデア出せば飛びついて無理やりにでも実装したのに 少し時期がすぎると誰も見向きもしないし、で今熱いのはアンドロイドとかみたいですが 相変わらず情報セキュリティみたいのはダメダメだし もうあきらめてハッシュ電卓にしたらどうですか???

  • VBAにハッシュ関数はないのですか?

    ハッシュ検索がどういうものか理解したばかりです。 概略がわかっただけで、それ以上のことはわかっていません。 VBAでは、Dictionaryを使うと、ハッシュ検索らしきことがやれるそうですが、Dictionaryを使わずにやろうとすると、ハッシュ関数が必要になってくると思います。 VBAにはハッシュ関数というものは用意されていないのですよね? また、他の言語にはハッシュ関数が用意されているのですよね? ハッシュ関数がなければ、ハッシュ検索はできないということですよね? それともVBAの中で、ハッシュ関数と同じ機能を果たす式を作れば良いのでしょうか? 可能ならその式はどんな式になるのでしょうか?

  • ハッシュ関数について

    原文をハッシュ関数で暗号化した場合,そのハッシュ値から逆に複合化することは不可能というふうによく書かれていますが,それは何故でしょうか?「不可能」とは「非常に時間がかかる」ということなのでしょうか?

  • パスワードのハッシュ化

    ログイン機能を作っています。 password_hashしたパスワードをmysqlに保存しているのですがアカウントと照合しtrueを返すところで躓いています。 変数に引っ張て来た変数の中にパスワードがあるか検証したいのですがどのようにすればいいですか? var_dump($pass);//$passの中に上記の変数でハッシュ化された「samplepass」 で、 「$2...」 のような、文字列が出るはずが 「1」 になってしまいます。 不可逆ということは、出力も無理なのでしょうか?

    • ベストアンサー
    • PHP
  • パスワードのハッシュ化について

    ユーザー登録させるようなwebサイトを作ることになりました。 ググッたところパスワードはハッシュ化させDBへ、っていうのが通常らしいんで、 sha256を使って変換しようと思います。 質問(1)ハッシュ化させる元の文字列には文字数など何か制限はないんでしょうか。 質問(2)ハッシュ化させるときにくっつけるsaltは何桁くらいにするのが一般的なんでしょうか。 教えてください。

  • phpのパスワードのハッシュ化について

    phpで会員サイトの作成を学習しています。 PDOを使用してMysqlサーバーに接続しています。 開発環境はxamppでphp Version 5.5.15を使用しています。 入力フォームにユーザーの情報を入力してもらい、 データベースに格納する際、 基本的なセキュリティ要件として パスワードをハッシュ化する必要があるということを こちらのサイトで(http://php.net/manual/ja/faq.passwords.php) 知りました。 ハッシュ化については初耳で、いまいちハッシュアルゴリズムの種類による違い等はまだ理解しきれていないのですが、 PHP5.5.15を使用しているので、パスワードのハッシュアルゴリズムは 上記サイトに載っているようにpassword_hashを使用するのが今のところ最善なのでしょうか? また、ハッシュ化されたパスワードの認証についてですが、 ログイン画面でパスワードを認証する際、 ユーザーが入力したパスワードをハッシュ化して 該当レコードのハッシュ化されて保存されたパスワードと 同じであれば認証が成功するという認識で正しいでしょうか? ご回答、よろしくお願いします。

    • ベストアンサー
    • PHP
  • パスワードの決め方について(SHA3orHMAC)

    パスワードの決め方や保管の方法について、分からなくなってきたので基本から質問させてください。 1.パスワードをホームページ等でネットに公開したら危険ですか? 2.1.はただそのまま公開したら危険なのでやってはいけないと思いますが、暗号化して、パスワードのパスワードがないと解けない状態にして公開しておけば安全ですか? 3.2.の暗号化の手法として、暗号学的ハッシュ関数を用いて、ハッシュ値 h をパスワードにすれば、暗号化したパスワードを公開しても安全ですか? 4.3.について、パスワードにしたハッシュ値 h を公開したのではパスワードをそのまま公開していることになり、危険なため、ハッシュ値 h を算出する暗号学的ハッシュ関数の実行コマンドをホームページ等で公開し、パスワードを確認したいときにはこのコマンドを実行してハッシュ値を得ることにすれば、安全ですか? 5.4.について、暗号学的ハッシュ関数はSHAシリーズなどがありますが、この実行コマンドは広く一般に利用できる状態で提供されているため(ハッシュ計算するソフトウェアやWebサイトなど)、SHAなど既存の暗号学的ハッシュ関数を用いるのではなく、自分で専用に暗号学的ハッシュ関数を考案し、また実行コマンドやソフトウェアを作成する必要がありますか? 6.5.が大変な場合、SHAなど既存の暗号学的ハッシュ関数を用いて4.を実現するにはどうしたらいいですか? 7.4.について、コマンドがパスワードの数だけ存在すると管理が大変です。コマンドは共通にして、オプションスイッチで区別することはできませんか? 8.7.について、コマンドは既存のソフトウェアをあらかじめインストールしておき、オプションスイッチを含む実行コマンド文のみをHP等で公開しておくことはできませんか? 9.6.7.8を実現するには、オプションスイッチのうちのひとつをパスワードのパスワードとして、このスイッチのみを非公開とすれば良いですか? 10.9.について、コマンド文はどのように記述すれば良いですか?たとえばハッシュ関数H()、出力h、パスワードの対となる文字列(IDとかファイル名等)m、パスワードのパスワードをk、||は結合とした場合、 H(k||m)=h と書けると思いますがこれをH(m)として公開し、kはあらかじめPC等コマンドを実行する環境で設定しておけば良いですか? 11.10について、暗号学的ハッシュ関数SHA2シリーズ(256bit等)を用いた場合、Merkle-Damgård 構造であるため、length-extension 攻撃され、危険ですか? 12.10.11.について、暗号学的ハッシュ関数SHA3シリーズを用いた場合、SHA2シリーズのハッシュ関数と異なりスポンジ構造であるため、length-extension 攻撃は成り立たず、安全ですか? 13.12について、length-extension 攻撃以外の危険性はありますか?