2点あります。
PHP(larabel)でファイルに対しパスワードを設定するため、パスワードを登録するWebサイトを作成しています。
MySqlにデータを保存する際、暗号化するのが一般的ですがそれは一体どこでどうやって複合しますか?
また、可逆である必要がある場合(暗号化をせずにdb保存)、保存の際に注意点がありますか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/21 08:28
回答6件
0
既に皆さんが指摘されているように、パスワードはハッシュ値で保存することが一般的ですが、その理由をまず説明します。
- パスワードが復号できると管理者による悪用が心配
- 暗号鍵が攻撃者に知られないように保存する必要があるが、これが難しい
- 暗号利用モードなど、暗号化の実装が意外に難しい
暗号鍵についてですが、そもそもパスワードを保護しなければならない理由は、ウェブサイトに仮に侵入された場合でもパスワードは保護したいからです。ところが、ウェブサイトに侵入した攻撃者はウェブアプリケーションが動作する権限と同じ権限を持ちます。なので、ファイルパーミッション等でパスワードを保護することができません。ウェブアプリケーションが読み出せる情報はすべて侵入した攻撃者のコードも読み出しができます。
このため、暗号鍵を安全に保管するシンプルな方法はありません。
次に、暗号利用モードについてですが、これの不備によりパスワードが解読されてしまった例があります。皆様御存知のAdobe社の事例です。下記のブログ記事を参考にしてください。
Adobeサイトから漏えいした暗号化パスワードはなぜ解読されたか | 徳丸浩の日記
結論としては、tanatさんの紹介された password_hash / password_verify を利用するのが簡明ですが、どうしても復号可能な形でパスワードを保存したいのであれば、上記に気をつけて実装する必要があります。こちらは現在のベストプラクティスではないので、お手本となるようなコードはほとんどないと思います。少なくとも私は見たことがありません。
投稿2021/08/19 12:08
総合スコア11705
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/19 22:57
0
ベストアンサー
Webサイト上でパスワードを登録するとして、パスワードはdbへ保存する際、暗号化するのが一般的ですが
暗号化するのは一般的では無く、ハッシュ化するのが一般的です。
(細かい話と思われるかもしれませんが、ハッシュ化と暗号化は完全に別物なので区別をしないと前提が嚙み合わなくなってしまいます)
ハッシュ化には
password_hash()
を
ハッシュの一致確認には
password_verify()
を使用するのが一般的です。
また、可逆である必要がある場合(暗号化をせずにdb保存)、保存の際に注意点がありますか?
(可逆である=暗号化されているという事なので、用語上の噛み合わなさが出ていますが、)
まずはどういった情報をどの様な脅威から守る必要があるかの要件を定義するところから始める必要があります。
要件によってはコードの話では無く、DBMSやハードウェア自体の暗号化機能を使用する方が適正な場合も多くあるかと思いますよ。
投稿2021/08/19 09:11
総合スコア18716
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/19 09:33
2021/08/19 10:16 編集
2021/08/19 10:47
0
入力に対して同じ暗号化手順で処理したものと、
DB上の暗号化してあるデータが合致すればよいので
複合しません
投稿2021/08/19 09:05
総合スコア116443
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/19 09:07
2021/08/19 09:12
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。