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

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

ただいまの
回答率

90.33%

  • Security+

    25questions

    Security+は、IT業界団体であるCompTIA認定の資格の一つです。ネットワークセキュリティやコンプライアンスと運用セキュリティといったセキュリティ分野における知識・技術の証明になり、セキュリティインシデントに対応するための知識も評価されます。

sha256でパスワードをハッシュ化するだけで安全か?

解決済

回答 9

投稿

  • 評価
  • クリップ 6
  • VIEW 2,945
退会済みユーザー

退会済みユーザー

パスワードをデータベースで保存します。

その際に、sha256でソルト値与えて、ハッシュ化してそのままDBに保存します。
パスワードを復元するつもりはございません。

これで安全でしょうか?

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 9

checkベストアンサー

+5

ハッシュは辞書攻撃に弱いのでソルトを追加しますがソースコードも一緒に流出するとソルトもバレます
なので全部の解析に膨大な時間がかかるようにストレッチ(複数回ハッシュ関数を通す)という処理を行います

難読化目的のハッシュ関数は時間とともに劣化していくと考えたほうがよくて、いつかは破られるので
アルゴリズムを変更できるようなデータ構造も必要です。
データを格納するとき、ハッシュ値に加えバージョン番号やストレッチ回数などを追加してアルゴリズム変更にたえらるようにします

このような処理を行うためのbcryptというアルゴリズムがあります。
bcryptはBlowfishをハッシュアルゴリズムに使っていることが多いですが、72文字切り捨て問題を除けば耐性の高いアルゴリズムと言われています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+4

既に他の方が書かれている通り、安全ではありません。
PBKDF2(NIST規格のパスワードハッシュ化規格)やcrypt+blowfish(デファクト標準のパスワードハッシュ化規格+BCryptのblowfishハッシュ)でも、安全ではありません。
まず何故パスワードをハッシュ化するのか?その理由を知る必要があります。

パスワードをハッシュ化する理由は

  • システム管理者などでもユーザーのパスワードを”容易に”知りえないようにする
  • 攻撃者の攻撃によりパスワードデータベースが盗まれてもパスワードを”容易に”知りえないようにする

の2つがあります。

”容易に”とクオートした通り、PBKDF2やcrypt+blowfishの標準的なパスワードハッシュ化方法に従っても”必ず”パスワードを知りえないようには出来ません。パスワードの解析に時間がかかるようにしているだけです。

PBKDF2やcrypt+blowfishを使ってもパスワードを知りえる事の証明は簡単です。パスワードがユーザー名と同じ、簡単に推測できる文字列なら容易にパスワードを知り得ます。PBKDF2やcrypt+blowfishを使っても、弱いパスワードは保護できません。

従って、PBKDF2やcrypt+blowfishを利用する場合でも、ユーザーが設定するパスワードが十分な強さを持っていることがパスワードを保護できる条件になります。

理想的にはパスワードは十分に長い暗号学的にランダムな文字列である必要があります。覚えるパスワードにランダムパスワードは厳しいので少し工夫が必要です。覚えないパスワード、覚えるパスワード、どちらとも比較的長い文字列が必要です。

従って、PBKDF2やcrypt+blowfishを使っていても安全にパスワードを保存できるようにするには

  • ユーザーが弱いパスワードを設定しないようにする
  • 上記の為にパスワードの長さ制限を短くしすぎない(最低でも64バイト以上の制限にする)
  • 十分なストレッチを行う

といった対策が必要です。

これらに加えて、システムログなどにパスワードが記録されないようにする、ネットワーク通信で盗聴できないようにする、必要があります。システムログに記録したり、非暗号化通信で平文パスワードを送信してしまうとシステム管理者などが容易にユーザーのパスワードを知り得ます。

非暗号化通信でもパスワードを安全にやり取りできるチャレンジレスポンス方式もありますが、説明は省略します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/21 16:51 編集

    ご回答ありがとうございます。
    生かさせて頂きます。

    キャンセル

  • 2018/11/13 14:48

    blowfishを使うがベストアンサーになっていますが、salt+blowfishハッシュを使うだけ、では”不十分”です。

    なぜcrypt+blowfishを使うと十分だと考えられている理由は"ストレッチ"にあります。ストレッチ(Streching)とはその意味の通り、強さを伸長する、ことで”ハッシュ関数”を繰り返し適用することで力ずくの解析をより困難にします。crypt+blowfishを使っていてもストレッチが不十分だと、十分に安全とは考えられません。

    ストレッチ無しのsaltとハッシュ関数だと力ずくの解析がかなり容易になります。

    PBKDF2+SHA2なら最低でも1万回、crypt+blowfishなら最低でも千回以上のストレッチが必要です。blowfishは遅いのでストレッチングが少なくて済みます。これも昔の基準なので実際にはもっと多いストレッチングが必要です。ただ、多くしすぎるとDoSに脆弱になったりもするので多すぎるストレッチも問題になります。PDKDF2+SHA2を利用するパスワードマネージャーなどでは10万回や100万回のストレッチをしている物があります。これらの数値は参考になると思います。

    キャンセル

+2

安全かどうかを質問されると恐らく多くの方は’保障はねぇ’となるでしょう。

私の回答は’とりあえず使えるかも’でも破る気になれば。となる気がします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+2

安全かどうかを検討するには、まず想定される脅威を定義する必要があります。
脅威の分析から始めてください。

追記
パスワードのハッシュ化は、総当たり攻撃や単純なパスワード対策としては意味を持ちません。
別の方法を検討する必要があります。

一般的にハッシュ化が有効と言われるのは、「DB データ流出時の時間稼ぎ」です。
これも適切なハッシュ化とストレッチングやパスワード文字列の複雑性の保証等の複合評価なので、質問にある内容では不十分です。

一方で、質問にある方法は「DB 管理者のカジュアルな覗き見」に対しては有効です。

想定する脅威がわからなければ、安全性の評価は無意味です。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

システム構成がよく分かりませんが。

まずハッシュ化暗号化は違います。
パスワードに対してsha256を使ってハッシュ化するのではなく鍵導出関数を使用してくださいな。
PHPならpassword_hash、他ならArgon2


暗号という言葉を回答に入れたのが間違いでした、暗号という言葉は忘れてください。
私が言いたいことは、暗号ハッシュ関数(SHA-256)を使って自作するのではなく、鍵導出関数(Argon2)を使用してください。
質問文にストレッチングという文字がなかったので、ハッシュ化するときにストレッチング処理が入っていないのではと思いましたので。

◇参考情報
パスワードはハッシュ化するだけで十分?
ユーザー アカウント、承認、パスワード管理に効く 12 のベスト プラクティス

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/17 00:08

    そうですね。回答していて’モヤモヤ感’がありました。ただ質問が’これで安全か?’の質問でしたので。

    キャンセル

  • 2018/07/17 06:19

    ハッシュ化→平分を復元しづらくする。
    個人的にはこれでパスワードは盗まれても復元に苦労するかな、と思ったのですが、
    ハッシュ化する前に暗号化することは何に対する対策なのでしょうか?

    キャンセル

  • 2018/07/17 06:23

    ハッシュ化することによって、パスワードを盗まれても復元に苦労するかなと思いました。
    なので、ハッシュ化で十分と思いましたが、
    暗号化は何に対する対策なのでしょうか?
    これも、復元に苦労するようにするためなのでしょうか?

    キャンセル

+1

何をもって安全と考えるかです。もっとも、セキュリティにおいて完全な安全はありえません。

また、最低限の機能要望を提示しなければ、極論、全サービスを捨てるという結論になりかねません。

平時の利益はどれだけか?
異常の発生率はどれだけか?
異常時の損害はどれだけか?
→結局、採算が取れるものか?

と、リスクを定量分析しなければセキュリティに答えは出ません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

「パスワード」と「パスワードをハッシュ化したもの」はまったく別の情報です。
したがって、「パスワードをデータベースで保存」したことにはなりません。
パスワードを保存したくないからハッシュ化します。

ハッシュ関数の程度として sha256 は十分だと考えますが、
そもそもハッシュ化によってどんなメリットを得ようとしているかによると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

DBのデータのみが流出した場合、ユーザーIDがわかるのであれば、ID+想定パスワード等で認証を試みることが出来ると思います。
この場合は、パスワードの設定要件(文字数や文字種)と利用ユーザーの設定パスワード次第になると思われます。
また、他サイトで流出したパスワードに、対象ユーザーのIDとパスワードがあれば、認証できる可能性が高いかと。

DBデータとソルトが分かれば、解析するのもありかと思います。
(やったことはないので、想像の範囲ですが・・・)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-1

It is safe because mostly sha-256 implemented for security purpose, if need more security then use merkel trees with sha-256 

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • Security+

    25questions

    Security+は、IT業界団体であるCompTIA認定の資格の一つです。ネットワークセキュリティやコンプライアンスと運用セキュリティといったセキュリティ分野における知識・技術の証明になり、セキュリティインシデントに対応するための知識も評価されます。