1. ホーム
  2. security

[解決済み] 後で平文を取り出すためのユーザーパスワードの保管について、倫理的にどのように取り組むべきでしょうか?

2022-03-19 22:55:11

質問

私は、より多くのウェブサイトやウェブアプリケーションを作り続けているため、ユーザーが問題を抱えたときに(パスワードを忘れたリンクをメールで送ったり、電話で説明したりなど)、ユーザーのパスワードを取得できる方法で保存するようよく頼まれます。

しかし、もし私のDBがハッキングされたら、犯人はパスワードを解読するのにそれほど時間はかからないと思うので、その点は気がかりです。

完璧な世界では、人々は頻繁にパスワードを更新し、多くの異なるサイトにパスワードを重複させないだろう。残念ながら、私は同じ仕事/家/電子メール/銀行のパスワードを持っている多くの人々を知っており、彼らが支援を必要とするときに私に自由にそれを与えたことさえある。 もし、私のDBのセキュリティ手順が何らかの理由で失敗した場合、彼らの経済的な破滅の責任を負いたくないのです。

道徳的、倫理的に、私は、あるユーザーにとっては生活の糧となり得るものを、たとえ彼らが敬意を払っていないとしても、保護する責任を感じています。 ハッシュを塩漬けにしたり、さまざまなエンコーディングオプションにアプローチする道や主張があることは確かですが、それらを保存しなければならないときに、単一の「ベストプラクティス」があるのでしょうか? 私はほとんどすべてのケースでPHPとMySQLを使用していますが、もしそれが私が詳細を扱うべき方法に違いをもたらすのであれば。

バウンティに関する追加情報

私は、これはあなたがしなければならないことではなく、ほとんどの場合、これを拒否することが最善であることを知っていることを明確にしたいと思います。 しかし、私はこの方法を取ることの利点について講義を求めているのではなく、この方法を取る場合に取るべき最善の方法を探しているのです。

以下の注釈で、主に高齢者、知的障害者、幼少者を対象としたウェブサイトが、安全なパスワード回復の手順を要求されたときに、人々を混乱させることがあるという指摘をしました。 このような場合、私たちは単純で平凡なことだと思うかもしれませんが、ユーザーによっては、サービス技術者がシステムに入るのを手伝ったり、電子メールで直接表示させたりするなどの特別な支援が必要なのです。

このようなシステムでは、このレベルのアクセス補助をユーザーに与えないと、これらの層からの離脱率がアプリケーションに支障をきたす可能性があるので、そのような設定を念頭に置いて回答してください。

皆様への感謝

この質問は、たくさんの議論があり、楽しいものでした。 最終的に私は、パスワードのセキュリティを維持しつつ(平文や復元可能なパスワードを保持する必要がない)、私が指定したユーザーベースが、通常のパスワード復元による大きな欠点なしにシステムにログインすることを可能にする答えを選択しました。

いつものように、異なる理由で正解としたい回答が5つほどありましたが、ベストな1つを選び、残りはすべて+1しました。 皆さん、ありがとうございました。

また、この問題に投票したり、お気に入りに登録してくれたスタックコミュニティの皆さん、ありがとうございました。 この議論が、私と同じような悩みを持つ誰かの助けになることを願っています。

解決方法は?

この問題を別のアプローチ、角度から見てみるのはどうだろうか。 なぜパスワードが平文であることが必要なのかを考えてみましょう。もしユーザーがパスワードを取得できるようにするためなら、厳密に言えば、ユーザーが設定したパスワードを取得する必要はありません(ユーザーはそれが何であるか覚えていないのですから)。 使える .

考えてみてください。ユーザーがパスワードを取り出す必要がある場合、それはパスワードを忘れたからです。その場合、新しいパスワードは古いパスワードと同じで良いのです。しかし、今日使われている一般的なパスワードリセット機構の欠点は、リセット操作で生成されるパスワードが一般にランダムな文字の集まりであり、コピー&ペーストしない限り、ユーザーが単に正しく入力することが困難であることです。これは、あまりコンピュータに詳しくないユーザーにとっては問題です。

この問題を回避する一つの方法として、自然言語に近いテキストで自動生成されたパスワードを提供することです。 自然言語の文字列は、同じ長さのランダムな文字列が持つエントロピーを持たないかもしれませんが、自動生成されるパスワードが8文字(または10文字、12文字)だけでなければならない、ということは何もありません。 高エントロピーの自動生成パスフレーズを得るには、いくつかのランダムな単語をつなぎ合わせます(単語と単語の間にはスペースを入れ、文字が読める人なら誰でも認識でき、タイプできるようにします)。長さの異なる6つのランダムな単語は、おそらく10個のランダムな文字よりも正しく自信を持って入力しやすく、同様に高いエントロピーを持つことができます。 例えば、大文字、小文字、数字、10個の句読点記号(合計72個の有効な記号)からランダムに選んだ10文字のパスワードのエントロピーは、61.7ビットとなる。 Dicewareが使用している7776語の辞書を使用し、6語のパスフレーズをランダムに選択した場合、パスフレーズのエントロピーは77.4ビットになります。以下はその例です。 ダイスウェアFAQ をご覧ください。

  • 約77ビットのエントロピーを持つパスフレーズ: "散文フレアテーブルの急性フレアを認める"。

  • エントロピーが約74ビットのパスワード: "K:&$R^tt~qkD"

コピー&ペーストを使えば、このフレーズもパスワードと同じように簡単に使えるので、損はない。もちろん、あなたのウェブサイト(または保護された資産)が自動生成されるパスフレーズに77ビットのエントロピーを必要としない場合は、より少ない単語を生成します(これは、あなたのユーザーが喜ぶと確信しています)。

パスワードで保護された資産の中には、本当に価値の高くないものもあるので、パスワードが破られたからといって終わりにはならないかもしれない、という主張も理解できるのですが。例えば、私が様々なウェブサイトで使っているパスワードの80%が破られたとしても、おそらく気にしないでしょう。起こり得るのは、誰かがスパム行為をしたり、しばらく私の名前で投稿したりすることだけです。 でも、銀行口座に侵入されるわけではありません。しかし、多くの人が銀行口座(そしておそらく国家安全保障のデータベース)と同じパスワードをWebフォーラムのサイトに使っているという事実を考えると、私はそれらの「価値の低い」パスワードでさえ回復不可能なものとして扱うのが最善だと思います。