1343

私はますます多くの Web サイトや Web アプリケーションを構築し続けているため、ユーザーに問題が発生した場合にパスワードを取得できるように、ユーザーのパスワードを保存するように求められることがよくあります (忘れたパスワードのリンクを電子メールで送信するか、電話など) 私はできる限りこの慣習に激しく反対し、実際のパスワードを保存せずにパスワードのリセットと管理支援を可能にするために多くの「余分な」プログラミングを行います。

戦うことができない (または勝てない) 場合は、常に何らかの方法でパスワードをエンコードして、少なくともデータベースにプレーンテキストとして保存されないようにします。犯人がパスワードを解読するのにそれほど時間はかからないので、私は不快です。

完璧な世界では、人々はパスワードを頻繁に更新し、多くの異なるサイトでパスワードを複製しないでしょう。残念ながら、同じ職場/自宅/電子メール/銀行のパスワードを持っている多くの人々を知っています。私のDBセキュリティ手順が何らかの理由で失敗した場合、私は彼らの経済的終焉の責任者になりたくありません.

道徳的および倫理的に、一部のユーザーにとっては、たとえ彼らがそれをあまり尊重していなくても、彼らの生活を保護する責任があると感じています. ハッシュのソルト化やさまざまなエンコーディング オプションについては、多くのアプローチ方法と議論が必要だと確信していますが、それらを保存する必要がある場合の「ベスト プラクティス」は 1 つありますか? ほとんどの場合、PHP と MySQL を使用していますが、それによって詳細を処理する方法に違いが生じる場合があります。

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

これはあなたがしなければならないことではなく、ほとんどの場合、そうすることを拒否するのが最善であることを私は知っていることを明確にしたいと思います. ただし、このアプローチを採用するメリットについての講義を求めているわけではありません。このアプローチを採用した場合に取るべき最善の手順を探しています。

以下のメモで、主に高齢者、精神障害者、または非常に若い人を対象とした Web サイトは、安全なパスワード回復ルーチンを実行するように求められると、人々を混乱させる可能性があることを指摘しました. そのような場合、単純でありふれたものだと思うかもしれませんが、一部のユーザーは、サービス技術者にシステムへのヘルプを依頼するか、直接電子メールで送信/表示するという追加の支援が必要です.

このようなシステムでは、ユーザーにこのレベルのアクセス支援が提供されていないと、これらの人口統計による減少率がアプリケーションの障害になる可能性があるため、そのような設定を念頭に置いて回答してください。

みんなありがとう

これは多くの議論を伴う楽しい質問であり、私は楽しんでいます. 最後に、パスワードのセキュリティを保持する (プレーン テキストや回復可能なパスワードを保持する必要がない) だけでなく、指定したユーザー ベースがシステムにログインすることを可能にする回答を選択しました。通常のパスワード回復。

いつものように、さまざまな理由で正しいとマークしたい回答が約 5 つありましたが、最良の回答を選択する必要があり、残りはすべて +1 でした。みんな、ありがとう!

また、この質問に投票したり、お気に入りとしてマークしたりした Stack コミュニティの皆さんにも感謝します。私は賛辞として100票を獲得し、この議論が私と同じ懸念を持つ他の誰かを助けることを願っています.

4

26 に答える 26

1037

この問題に別のアプローチや角度をつけてみませんか? パスワードがプレーンテキストである必要がある理由を尋ねます。ユーザーがパスワードを取得できるようにするためである場合、厳密に言えば、設定したパスワードを取得する必要はありません (ユーザーはそれが何であるかを覚えていません)。使用できるパスワードを提供できる必要があります。

考えてみてください。ユーザーがパスワードを取得する必要がある場合、それはパスワードを忘れたためです。その場合、新しいパスワードは古いパスワードと同じくらい有効です。しかし、今日使用されている一般的なパスワード リセット メカニズムの欠点の 1 つは、リセット操作で生成されたパスワードが一般にランダムな文字の集まりであるため、コピーしてコピーしない限り、ユーザーが単純にパスワードを正しく入力するのが難しいことです。ペースト。これは、コンピューターに詳しくないユーザーにとっては問題になる可能性があります。

この問題を回避する 1 つの方法は、多かれ少なかれ自然言語のテキストである自動生成パスワードを提供することです。自然言語の文字列には、同じ長さのランダムな文字の文字列が持つエントロピーがないかもしれませんが、自動生成されたパスワードが 8 (または 10 または 12) 文字だけである必要があるということは何もありません。いくつかのランダムな単語をつなぎ合わせて、高エントロピーの自動生成パスフレーズを取得します (単語の間にスペースを入れて、読める人なら誰でも認識して入力できるようにします)。さまざまな長さの 6 つのランダムな単語は、おそらく 10 個のランダムな文字よりも正確に自信を持って入力するのが簡単であり、エントロピーも高くなる可能性があります。たとえば、大文字、小文字、数字と 10 個の句読記号 (合計 72 個の有効な記号) のエントロピーは 61.7 ビットになります。6 ワードのパスフレーズにランダムに選択できる 7776 ワードの辞書 (Diceware が使用するもの) を使用すると、パスフレーズのエントロピーは 77.4 ビットになります。を参照してください詳細については、 Diceware FAQを参照してください。

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

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

フレーズを入力した方がいいことはわかっています。コピーアンドペーストを使用すると、フレーズはパスワードよりも使いやすいので、失うことはありません. もちろん、あなたのウェブサイト (または保護された資産が何であれ) が、自動生成されたパスフレーズに 77 ビットのエントロピーを必要としない場合は、生成する単語数を減らしてください (ユーザーはそれを歓迎すると確信しています)。

私は、パスワードで保護された資産にはそれほど価値がないという議論を理解しています。そのため、パスワードの侵害は世界の終わりではないかもしれません。たとえば、私がさまざまな Web サイトで使用しているパスワードの 80% が侵害されたとしても、おそらく気にしないでしょう。それは素晴らしいことではありませんが、彼らが私の銀行口座に侵入するわけではありません. しかし、多くの人が銀行口座 (およびおそらく国家安全保障データベース) と同じパスワードを Web フォーラム サイトに使用しているという事実を考えると、それらの「価値の低い」パスワードであっても、 -回復可能。

于 2010-02-28T08:16:51.197 に答える
592

誰かが大きな建物(たとえばバー)の建設を依頼したと想像してみてください。次の会話が行われます。

建築家: このサイズと容量の建物の場合、ここ、ここ、およびここに火の出口が必要になります。
クライアント: いいえ、それは維持するには複雑すぎて費用がかかります。サイドドアやバックドアは必要ありません。
建築家: 先生、消防署はオプションではありません。市の消防法に従って必要です。
クライアント: 私はあなたに議論するためにお金を払っていません。私が尋ねたことをしてください。

次に、建築家は、火の出口なしでこの建物を倫理的に建設する方法を尋ねますか?

建築およびエンジニアリング業界では、会話は次のように終了する可能性が最も高くなります。

建築家: この建物は、火の出口なしで建てることはできません。あなたは他の認可された専門家に行くことができ、彼はあなたに同じことを言うでしょう。私は今出発します。協力する準備ができたら、電話をかけ直してください。

コンピュータープログラミングは認可された職業ではないかもしれませんが、なぜ私たちの職業が民間または機械のエンジニアと同じように尊敬されないのかと人々はしばしば疑問に思うようです-まあ、もう探す必要はありません。それらの職業は、ゴミ(または完全に危険な)要件を渡された場合、単に拒否します。彼らは、「まあ、私は最善を尽くしたが、彼は主張した、そして私は彼の言うことをしなければならない」と言うのは言い訳ではないことを知っている。彼らはその言い訳の免許を失う可能性があります。

あなたまたはあなたのクライアントが上場企業の一部であるかどうかはわかりませんが、パスワードを回復可能な形式で保存すると、いくつかの異なるタイプのセキュリティ監査に失敗する可能性があります。問題は、データベースにアクセスした「ハッカー」がパスワードを回復するのがどれほど難しいかということではありません。 セキュリティの脅威の大部分は内部的なものです。 あなたが保護する必要があるのは、不満を持った従業員がすべてのパスワードを持って立ち去り、それらを最高入札者に売ることです。非対称暗号化を使用して秘密鍵を別のデータベースに保存しても、このシナリオを防ぐことはできません。プライベートデータベースにアクセスできるが常にいることになり、それは深刻なセキュリティリスクになります。

パスワードを回復可能な形式で保存するための倫理的または責任ある方法はありません。限目。

于 2010-02-18T16:05:01.127 に答える
206

パスワードとソルトを公開鍵で暗号化できます。ログインの場合は、保存された値がユーザー入力 + ソルトから計算された値と等しいかどうかを確認してください。パスワードをプレーンテキストで復元する必要がある場合は、秘密鍵を使用して手動または半自動で復号化できます。秘密鍵は別の場所に保存することができ、さらに対称的に暗号化することもできます (その場合、パスワードを解読するには人間の介入が必要になります)。

これは、実際にはWindows 回復エージェントの動作に似ていると思います。

  • パスワードは暗号化されて保存されます
  • 平文に復号化せずにログインできる
  • パスワードはプレーンテキストに復元できますが、システムの外部 (必要に応じて銀行の金庫) に保管できる秘密鍵を使用する必要があります。
于 2010-02-17T20:07:39.800 に答える
133

あきらめてはいけない。クライアントを納得させるために使用できる武器は、否認防止です。何らかのメカニズムでユーザーパスワードを再構築できる場合クライアントに法的否認防止メカニズムを提供したことになり、サプライヤーはパスワードを再構築していないことを証明できる方法がないため、そのパスワードに依存するトランザクションを拒否できます。トランザクションを自分で処理します。パスワードが暗号文ではなくダイジェストとして正しく保存されている場合、エンドクライアントが自分でトランザクションを実行したか、パスワードに関する注意義務に違反したため、これは不可能です。どちらの場合でも、責任は彼に真っ向から残されます。私は、それが数億ドルに達するケースに取り組んできました。あなたが間違って欲しいものではありません。

于 2010-02-18T09:59:17.763 に答える
94

後でプレーンテキストを取得するためにパスワードを倫理的に保存することはできません。それはそれと同じくらい簡単です。Jon Skeet でさえ、後でプレーンテキストを取得するためにパスワードを倫理的に保存することはできません。ユーザーが何らかの方法でプレーン テキストのパスワードを取得できる場合、コードにセキュリティの脆弱性を見つけたハッカーも同様に取得できる可能性があります。これは、1 人のユーザーのパスワードが侵害されただけでなく、すべてのユーザーのパスワードが侵害されたということです。

クライアントがこれに問題を抱えている場合は、パスワードを回復可能に保存することは法律違反であることを伝えてください。ここイギリスでは、1998 年データ保護法 (特にスケジュール 1、パート II、パラグラフ 9) により、データ管理者は、個人データを安全に保つために適切な技術的手段を使用する必要があります。データが危険にさらされた場合に引き起こされる可能性のある損害 - これは、サイト間でパスワードを共有するユーザーにとってかなりの可能性があります。それが問題であるという事実を理解するのにまだ苦労している場合は、このような実際の例を示してください。

ユーザーがログインを回復できるようにする最も簡単な方法は、自動的にログインし、新しいパスワードを選択できるページに直接移動するワンタイム リンクを電子メールで送信することです。プロトタイプを作成し、実際に動かして見せます。

この件に関して私が書いたいくつかのブログ投稿を次に示します。

更新:現在、ユーザーのパスワードを適切に保護していない企業に対する訴訟や起訴が見られ始めています。例: LinkedIn は 500 万ドルの集団訴訟を起こしました。ソニーは PlayStation のデータ ハッキングで 25 万ポンドの罰金を科されました。私の記憶が正しければ、LinkedIn は実際にはユーザーのパスワードを暗号化していましたが、使用していた暗号化は弱すぎて効果がありませんでした。

于 2010-02-23T15:20:55.807 に答える
55

この部分を読んだ後:

以下のメモで、主に高齢者、精神障害者、または非常に若い人を対象とした Web サイトは、安全なパスワード回復ルーチンを実行するように求められると、人々を混乱させる可能性があることを指摘しました. そのような場合、単純でありふれたものだと思うかもしれませんが、一部のユーザーは、サービス技術者にシステムへのヘルプを依頼するか、直接電子メールで送信/表示するという追加の支援が必要です.

このようなシステムでは、ユーザーにこのレベルのアクセス支援が提供されていないと、これらの人口統計による減少率がアプリケーションの障害になる可能性があるため、そのような設定を念頭に置いて回答してください。

これらの要件のいずれかで、取得可能なパスワード システムが義務付けられているかどうか疑問に思っています。たとえば、メーベルおばさんから電話があり、「インターネット プログラムが機能していません。パスワードがわかりません」と言われます。「OK」とカスタマー サービス ドローンは言います。もっと簡単に。"

次に、パスワードのリセットがいつ発生したかを認識し、「新しいパスワードを保持するか、新しいパスワードを選択しますか?」というメッセージを表示するようにシステムが設定されます。

古いパスワードを教えられることよりも、PC に詳しくない人にとってこれはどのように悪いことなのでしょうか? また、顧客サービス担当者がいたずらをする可能性がありますが、データベース自体は、侵害された場合に備えてはるかに安全です.

私の提案の何が悪いのかコメントしてください。最初に望んでいたことを実際に行うソリューションを提案します。

于 2010-02-25T11:27:20.507 に答える
42

Michael Brooks は、CWE-257 についてかなり声を上げてきました。つまり、どの方法を使用しても、管理者はパスワードを復元できるという事実です。では、これらのオプションはどうでしょうか。

  1. 他人の公開鍵(外部機関)を使用してパスワードを暗号化します。そうすれば、個人的に再構築することはできず、ユーザーはその外部機関に行って、パスワードの回復を依頼する必要があります。
  2. 2 番目のパスフレーズから生成されたキーを使用してパスワードを暗号化します。この暗号化はクライアント側で行い、サーバーに平文で送信しないでください。次に、回復するために、入力からキーを再生成することにより、クライアント側で復号化を再度実行します。確かに、このアプローチは基本的に 2 番目のパスワードを使用していますが、パスワードを書き留めるか、古いセキュリティ質問アプローチを使用するようにいつでも指示できます。

1. の方が良いと思います。これにより、クライアントの社内の誰かに秘密鍵を保持させることができるからです。彼らが自分でキーを生成し、指示とともに金庫などに保管するようにしてください。パスワードから特定の文字のみを暗号化して内部の第三者に提供することを選択することで、セキュリティを追加することもできます。それ。これらの文字をユーザーに提供すると、おそらくそれが何であったかを覚えているでしょう!

于 2010-02-18T13:56:46.967 に答える
27

この質問に対するユーザーのセキュリティ上の懸念について多くの議論がありましたが、利点について言及したいと思います。これまでのところ、復元可能なパスワードをシステムに保存することによる正当な利点について言及された例は 1 つもありません。このことを考慮:

  • ユーザーはパスワードを電子メールで受け取ることでメリットがありますか? いいえ。1 回限りのパスワード リセット リンクからより多くのメリットが得られます。これにより、覚えているパスワードを選択できるようになることを願ってます。
  • パスワードを画面に表示することでユーザーにメリットがありますか? いいえ、上記と同じ理由で。新しいパスワードを選択する必要があります。
  • サポート担当者がユーザーにパスワードを話すことは、ユーザーにとってメリットがありますか? いいえ; 繰り返しになりますが、サポート担当者がユーザーのパスワード要求が適切に認証されたと判断した場合は、新しいパスワードとそれを変更する機会が与えられる方がユーザーにとってより有益です。さらに、電話サポートはパスワードの自動リセットよりも費用がかかるため、会社にとってもメリットがありません。

回復可能なパスワードの恩恵を受けることができるのは、悪意のある人、またはサードパーティのパスワード交換を必要とする貧弱な API の支持者だけです (これらの API は絶対に使用しないでください!)。おそらく、回復可能なパスワードを保存することによって、会社は何の利益も得ず、責任だけを負うことを顧客に正直に伝えることで、議論に勝つことができるでしょう。

これらのタイプの要求の行間を読むと、クライアントがおそらくパスワードの管理方法を理解していないか、実際にはまったく気にしていないことがわかります。彼らが本当に求めているのは、ユーザーにとってそれほど難しくない認証システムです。したがって、復元可能なパスワードを実際に必要としないことを伝えるだけでなく、認証プロセスの負担を軽減する方法を提供する必要があります。特に、たとえば銀行のような厳しいセキュリティ レベルが必要ない場合は、次のようにします。

  • ユーザーが自分の電子メール アドレスをユーザー名に使用できるようにします。ユーザーがユーザー名を忘れるケースを数え切れないほど見てきましたが、メール アドレスを忘れたケースはほとんどありません。
  • OpenID を提供し、サードパーティにユーザーの物忘れの費用を負担させます。
  • パスワードの制限を緩和します。「特殊文字を使用できない」、「パスワードが長すぎる」、「パスワードを開始する必要がある」などの無用な要件が原因で、一部の Web サイトが好みのパスワードを許可しない場合、私たちは皆、信じられないほどイライラしたことがあります。手紙で。」また、パスワードの強度よりも使いやすさが重要な場合は、より短いパスワードを許可するか、文字クラスの混在を要求しないようにすることで、ばかげていない要件を緩和することもできます。制限が緩和されると、ユーザーは忘れられないパスワードを使用する可能性が高くなります。
  • パスワードを期限切れにしないでください。
  • ユーザーが古いパスワードを再利用できるようにします。
  • ユーザーが独自のパスワード リセットの質問を選択できるようにします。

しかし、何らかの理由で (その理由を教えてください)本当に、本当に、回復可能なパスワードが必要な場合は、ユーザーにパスワード以外のパスワードを与えることで、他のオンライン アカウントが危険にさらされる可能性を防ぐことができます。ベースの認証システム。人々はすでにユーザー名/パスワード システムに慣れており、それらは十分に活用されたソリューションであるため、これは最後の手段になりますが、パスワードに代わる創造的な方法は確かにたくさんあります。

  • ユーザーに数字の PIN を選択させます。できれば 4 桁ではなく、ブルート フォースの試みが保護されている場合にのみ選択してください。
  • ユーザーに、自分だけが答えを知っていて、決して変わらず、常に覚えていて、他の人に知られることを気にしない短い答えを持つ質問を選択してもらいます。
  • ユーザーにユーザー名を入力してもらい、推測を防ぐために十分な順列で覚えやすい形を描いてもらいます ( G1 が電話のロックを解除するためにこれをどのように行うかについてのこの気の利いた写真を参照してください)。
  • 子供向けの Web サイトの場合、ユーザー名に基づいてあいまいな生き物 (アイデンティコンのようなもの) を自動生成し、その生き物に秘密の名前を付けるようにユーザーに依頼することができます。次に、クリーチャーの秘密の名前を入力してログインするように求められます。
于 2010-02-27T20:10:57.357 に答える
25

質問に対して私が行ったコメントによると、
1つの重要な点がほとんどすべての人によって非常に見過ごされています...私の最初の反応は、@ stefanwのように、ここの問題は要件が壊れていることに気付くまで、@ Michael Brooksと非常に似ていました、しかし、これらはそれらが何であるかです。
しかし、そうではないかもしれないと思いました。ここで欠けているのは、アプリケーションの資産の暗黙の価値です。簡単に言えば、価値の低いシステムの場合、すべてのプロセスが関与する完全に安全な認証メカニズムは過剰であり、セキュリティの選択は間違っています。
明らかに、銀行にとって「ベスト プラクティス」は必須であり、倫理的に CWE-257 に違反する方法はありません。しかし、それだけの価値がない価値の低いシステムを考えるのは簡単です (ただし、単純なパスワードは依然として必要です)。

真のセキュリティの専門知識とは、適切なトレードオフを見つけることであり、誰もがオンラインで読むことができる「ベスト プラクティス」を独断的に吐き出すことではありません。

そのため、別の解決策を提案します。
システムの価値に応じて、システムが「高価な」資産 (ID 自体を含む) がなく適切に低価値であり、かつ適切なプロセスを行う有効なビジネス要件がある場合にのみ不可能(または十分に困難/高価)であり、クライアントはすべての警告を認識しています... その場合、特別なフープを飛び越えずに、単純に可逆暗号化を許可することが適切な場合があります.

暗号化をまったく気にしないとは言いませんが、実装が非常に簡単/安価であり (パスシブルキー管理を考慮しても)、ある程度の保護を提供します (実装コスト以上)。また、元のパスワードをユーザーに提供する方法についても検討する価値があります。これは、電子メール、画面表示などを介して行われます。
ここでの前提は、盗まれたパスワードの価値が (全体としても) 非常に低いことです。これらのソリューションは有効です。


さまざまな投稿や個別のコメント スレッドで活発な議論が行われているため、実際にはいくつかの活発な議論が行われているため、いくつかの説明を追加し、ここの他の場所で提起された非常に良い点のいくつかに対応します。

まず、ユーザーの元のパスワードを取得できるようにすることは悪い習慣であり、一般的には良い考えではないことは、ここにいるすべての人にとって明らかだと思います。それはまったく論争の対象ではありません...
さらに、多くの、いやほとんどの状況では、それは本当に間違っていて、ファウルで、厄介で、醜いことさえあることを強調します.

ただし、問題の核心は、これを禁止する必要のない状況があるかどうか、およびその場合、状況に適した最も正しい方法でどのように禁止するかという原則に関するものです。

さて、@Thomas、@sfussenegger、および他の数人が言及したように、その質問に答える唯一の適切な方法は、特定の(または仮説的な)状況の徹底的なリスク分析を行い、何が危機に瀕しているか、保護する価値があるかを理解することです、およびその保護を提供するために行われているその他の緩和策。
いいえ、流行語ではありません。これは、実際のセキュリティ プロフェッショナルにとって基本的で最も重要なツールの 1 つです。ベスト プラクティスは、ある時点までは (通常、経験の浅い人やハックのためのガイドラインとして) 有効ですが、その後は、思慮深いリスク分析が引き継がれます。

おかしなことに、私は常に自分自身をセキュリティ狂信者の 1 人だと思っていましたが、どういうわけか、いわゆる「セキュリティ専門家」の反対側にいるのです。そして実際の実際のセキュリティ専門家 - 私は、その非常に重要なリスク分析なしで「ベスト プラクティス」のドグマ (または CWE) を吐き出すことを信じていません。
「防御している実際の問題が何かを知らずに、ツールベルトのすべてをすばやく適用するセキュリティ熱狂者に注意してください。より多くのセキュリティが必ずしも優れたセキュリティとは限りません。」
リスク分析、および真のセキュリティ狂信者は、リスク、潜在的な損失、可能性のある脅威、補完的な軽減策などに基づいて、より賢明な価値/リスクベースのトレードオフを指摘するでしょう。彼らの推奨事項の根拠、または論理的なトレードオフをサポートする代わりに、リスク分析の実行方法さえ理解せずにドグマと CWE を吐き出すことを好み、セキュリティ ハッキング以外の何ものでもなく、彼らの専門知識は彼らが印刷したトイレット ペーパーの価値はありません。

確かに、それが空港セキュリティのばかげたことを私たちが得る方法です。

しかし、この状況で行うべき適切なトレードオフについて話す前に、明らかなリスクを見てみましょう (明らかに、この状況に関するすべての背景情報を持っているわけではないため、私たちは皆仮説を立てています。状況が存在する可能性があります...)
LOW-VALUE システムを想定しましょう。ただし、パブリック アクセスほど単純ではありません。システム所有者は、カジュアルななりすましを防止したいと考えていますが、「高い」セキュリティは使いやすさほど重要ではありません。(はい、熟練したスクリプトキディがサイトをハッキングできるリスクを受け入れることは正当なトレードオフです...待ってください、APT は現在流行していませんか...?)
たとえば、今年のキャンプ旅行でどこに行きたいか、誰もがブレインストーミングできるように、大家族の集まりのためにシンプルなサイトを手配しているとしましょう。エルマおばさんが必要なときにログオンできないことを心配しているので、匿名のハッカーや、いとこのフレッドがワンタナマナビキリキ湖に戻るように繰り返し提案することについてはあまり心配していません. さて、核物理学者であるエルマおばさんは、パスワードを覚えるのが苦手で、コンピューターを使うことさえ苦手です。繰り返しますが、私はハッキングを心配しているのではありません。間違ったログインのばかげた間違いをしたくないだけです。誰が来て、何を望んでいるのかを知りたいのです。

ともかく。
では、一方向ハッシュを使用する代わりにパスワードを対称的に暗号化すると、主なリスクは何になるでしょうか?

  • ユーザーになりすます?いいえ、私はすでにそのリスクを受け入れています。面白くありません。
  • 悪の管理者?まあ、たぶん...しかし、繰り返しになりますが、誰かが別のユーザーになりすますことができるかどうかは気にしません。それは、内部であろうとなかろうと...とにかく、悪意のある管理者は何があってもあなたのパスワードを取得します-管理者が悪くなったら、とにかくゲームオーバーです.
  • 提起されたもう 1 つの問題は、ID が実際には複数のシステム間で共有されていることです。ああ!これは非常に興味深いリスクであり、詳しく調べる必要があります。共有されるのは実際のIDではなく、証明または認証資格情報で
    あると主張することから始めましょう。さて、共有パスワードは事実上別のシステム(たとえば、私の銀行口座やGmail)への入り口を許可するので、これは事実上同じIDであるため、単なるセマンティクスです...そうではないことを除いて. このシナリオでは、ID は各システムによって個別に管理されます (ただし、OAuth などのサード パーティの ID システムが存在する場合がありますが、このシステムでは ID とは別のものです。これについては後で詳しく説明します)。
    このように、ここでのリスクの中心的なポイントは、ユーザーが自分の (同じ) パスワードを複数の異なるシステムに喜んで入力することです。そして今、私 (管理者) または私のサイトの他のハッカーは、エルマおばさんのパスワードにアクセスして、核ミサイルサイト。

うーん。

ここで何かおかしいと思いませんか?

そうすべき。

核ミサイルシステムを保護することは私の責任ではないという事実から始めましょう。では、誰の責任ですか?うーん... 核ミサイルシステムはどうですか?当たり前。
第二に、誰かのパスワード (安全なサイトとそうでないサイトの間で同じパスワードを繰り返し使用することが知られている人) のパスワードを盗もうとした場合、わざわざあなたのサイトをハッキングする必要があるでしょうか? または、対称暗号化に苦労していますか? Goshdarnitall、私は自分の簡単なウェブサイトを立ち上げるだけで、ユーザーがサインアップして、彼らが望むものについての非常に重要なニュースを受け取ることができます... Puffo Presto、私は彼らのパスワードを「盗みました」。

はい、ユーザー教育は常に私たちを苦しめるために戻ってきますね。
そして、それについてあなたができることは何もありません...あなたがあなたのサイトで彼らのパスワードをハッシュし、TSAが考えることができる他のすべてをしたとしても、あなたは彼らのパスワードに保護を追加しまし.出くわすすべてのサイトに無差別にパスワードを貼り付けます。気にしないでください。

別の言い方をすれば、あなたは彼らのパスワードを所有していないので、あなたのように振る舞おうとするのをやめてください.

セキュリティ専門家の皆様、老婦人が Wendy's に「リスクはどこにあるのですか?」と尋ねたものです。

上記で提起されたいくつかの問題への回答として、別のいくつかのポイント:

  • CWE は法律でも規制でもなく、標準でもありません。これは、一般的な弱点の集まりです。つまり、「ベスト プラクティス」の逆です。
  • 共有アイデンティティの問題は実際の問題ですが、ここでは否定論者によって誤解されています (または誤って伝えられています)。これは ID を共有すること自体 (!) の問題であり、価値の低いシステムでパスワードを解読することの問題ではありません。価値の低いシステムと価値の高いシステムの間でパスワードを共有している場合、問題はすでにそこにあります。
  • ところで、前のポイントは実際には、これらの価値の低いシステムと価値の高い銀行システムの両方に対して OAuth などを使用してAGAINSTを指すことになります。
  • これは単なる例であることは承知していますが、(悲しいことに) FBI システムは実際には最も安全なシステムではありません。猫のブログのサーバーとはまったく異なりますが、より安全な銀行の一部を上回っているわけでもありません.
  • 暗号化キーの分割知識、または二重管理は、軍隊だけで発生するわけではありません。実際、PCI-DSS は現在、基本的にすべての商人からこれを要求しているため、それほど遠くない (価値がそれを正当化する場合)。
  • このような質問が、開発者という職業の見栄えを悪くしていると不満を漏らしているすべての人へ: セキュリティの専門家の見栄えをさらに悪くするのは、このような回答です。繰り返しになりますが、ビジネスに焦点を当てたリスク分析が必要です。そうしないと、役に立たなくなります。間違っていることに加えて。
  • これが、通常の開発者を採用して、別の考え方や正しいトレードオフを探すためのトレーニングをせずに、セキュリティの責任を彼に任せるのは良い考えではない理由だと思います。気分を害することはありませんが、ここにいる皆さん、私は大賛成です - しかし、より多くのトレーニングが必要です。

うわー。なんと長い投稿...
しかし、元の質問に答えるには、@Shane:

  • 適切な方法をお客様に説明します。
  • 彼がまだ主張する場合は、もう少し説明し、主張し、議論してください。必要に応じて、かんしゃくを投げます。
  • ビジネスリスクを彼に説明してください。詳細は良好で、数値も良好で、通常はライブ デモが最適です。
  • 彼がまだ主張し、正当なビジネス上の理由を提示している場合は、あなたが判断を下す時が来ました:
    このサイトは価値が低いか価値がないか? それは本当に有効なビジネスケースですか?それはあなたにとって十分ですか?正当なビジネス上の理由よりも重要な、他に考慮できるリスクはありますか? (そしてもちろん、クライアントは悪意のあるサイトではありませんが、当然のことです)。
    もしそうなら、ただ先に進んでください。必要なプロセスを導入するための努力、摩擦、および使用の損失 (この仮想的な状況では) に値するものではありません。他の決定 (この状況でも) は、悪いトレードオフです。

つまり、結論と実際の答え - 単純な対称アルゴリズムで暗号化し、強力な ACL とできれば DPAPI などで暗号化キーを保護し、それを文書化し、クライアント (その決定を行うのに十分な上級者) にサインオフしてもらいます。それ。

于 2010-02-23T15:01:47.897 に答える
21

中途半端な家はどうですか?

強力な暗号化を使用してパスワードを保存し、リセットを有効にしないでください。

パスワードをリセットする代わりに、ワンタイム パスワードの送信を許可します (初回ログオン時にすぐに変更する必要があります)。次に、ユーザーが希望するパスワード (選択した場合は前のパスワード) に変更できるようにします。

これを、パスワードをリセットするための安全なメカニズムとして「販売」できます。

于 2010-02-17T20:01:32.173 に答える
12

自問すべき本当の質問は、「どうすれば人を説得するのが上手になるのか?」ということだと思います。

于 2010-02-17T20:53:17.563 に答える
11

同じ問題があります。それと同じように、誰かが私のシステムをハッキングすると、それは「もし」ではなく「いつ」の問題だといつも思います。

したがって、クレジット カードやパスワードなど、回復可能な機密情報を保存する必要がある Web サイトを作成する必要がある場合は、次のようにします。

  • 暗号化: openssl_encrypt (文字列 $data 、文字列 $method 、文字列 $password)
  • データ引数:
    • 機密情報 (ユーザーパスワードなど)
    • 必要に応じてシリアル化します。たとえば、情報が複数の機密情報のようなデータの配列である場合
  • password arg : ユーザーだけが知っている次のような情報を使用します。
    • ユーザーのナンバープレート
    • 社会保障番号
    • ユーザーの電話番号
    • ユーザーの母親の名前
    • 登録時に電子メールおよび/またはSMSで送信されるランダムな文字列
  • メソッド引数:
    • 「aes-256-cbc」などの暗号方式を 1 つ選択します
  • 「パスワード」引数で使用される情報をデータベース (またはシステム内の任意の場所) に保存しないでください。

このデータを取得する必要がある場合は、「openssl_decrypt()」関数を使用して、ユーザーに回答を求めてください。例: 「パスワードを受け取るには、次の質問に答えてください。あなたの携帯電話番号は何ですか?」

PS 1 : データベースに保存されているデータをパスワードとして使用しないでください。ユーザーの携帯電話番号を保存する必要がある場合は、この情報を使用してデータをエンコードしないでください。ユーザーだけが知っている情報、または親戚以外の人が知りにくい情報を常に使用してください。

PS 2 : 「ワンクリック購入」などのクレジット カード情報については、ログイン パスワードを使用しています。このパスワードはデータベース (sha1、md5 など) でハッシュされますが、ログイン時にプレーンテキストのパスワードをセッションまたは非永続 (つまりメモリ) の安全な Cookie に保存します。この単純なパスワードはデータベースに残ることはありません。実際、常にメモリに残り、セクションの最後で破棄されます。ユーザーが「ワンクリック購入」ボタンをクリックすると、システムはこのパスワードを使用します。ユーザーが facebook や twitter などのサービスでログインしていた場合、購入時に再度パスワードを要求するか (完全な「クリック」ではありません)、ユーザーがログインに使用したサービスのデータを使用します。 (フェイスブックIDのように)。

于 2013-04-27T22:24:27.267 に答える
9

クレデンシャルの保護は二者択一の操作ではありません。安全か安全でないかです。セキュリティはリスク評価がすべてであり、連続体で測定されます。セキュリティ狂信者はこのように考えるのを嫌いますが、完全に安全なものなどないという醜い真実があります。厳格なパスワード要件、DNA サンプル、および網膜スキャンを備えたハッシュ化されたパスワードは、より安全ですが、開発とユーザー エクスペリエンスが犠牲になります。プレーンテキストのパスワードは安全性がはるかに劣りますが、実装コストは低くなります (ただし、避けるべきです)。結局のところ、侵害の費用対効果の分析に行き着きます。保護されるデータの価値とその時間価値に基づいてセキュリティを実装します。

誰かのパスワードが流出した場合の代償は? 特定のシステムでのなりすましのコストはいくらですか? FBI のコンピューターにとって、その代償は莫大なものになる可能性があります。ボブの 1 回限りの 5 ページの Web サイトの場合、コストはごくわずかです。専門家は顧客にオプションを提供し、セキュリティに関しては、実装の利点とリスクを説明します。これは、クライアントが業界標準に注意を払わなかったために危険にさらされる可能性のある何かを要求した場合に二重に当てはまります. クライアントが双方向の暗号化を具体的に要求する場合は、異議を文書化するようにしますが、それがあなたが知っている最善の方法での実装を妨げるべきではありません. 結局のところ、それはクライアントのお金です。はい、

双方向暗号化を使用してパスワードを保存している場合、セキュリティはすべてキー管理にかかっています。Windows は、証明書の秘密キーへのアクセスを管理者アカウントとパスワードに制限するメカニズムを提供します。他のプラットフォームでホスティングしている場合は、それらで利用できるオプションを確認する必要があります。他の人が示唆しているように、非対称暗号化を使用できます。

一方向ハッシュを使用してパスワードを保存する必要があることを具体的に述べている法律 (英国のデータ保護法も) はありません。これらの法律の唯一の要件は、セキュリティのために合理的な措置が講じられていることです。データベースへのアクセスが制限されている場合、平文のパスワードであっても、そのような制限の下で法的に適格となる可能性があります。

ただし、これにより、もう 1 つの側面が明らかになります。それは、法的な優先順位です。システムが構築されている業界で一方向ハッシュを使用する必要があるという法的な優先順位がある場合、それはまったく異なります。それは、顧客を説得するために使用する弾薬です。それを除けば、合理的なリスク評価を提供し、異議を文書化し、顧客の要件を考慮して最も安全な方法でシステムを実装するための最良の提案です。

于 2010-02-27T20:38:00.330 に答える
8

ユーザーの秘密の質問への回答を暗号化キーの一部にし、秘密の質問の回答をプレーン テキストとして保存しない (代わりにハッシュ化する)

于 2010-02-18T13:35:06.790 に答える
7

私は生計を立てるために多要素認証システムを実装しているので、パスワードをリセットまたは再構築し、一時的に 1 つ少ない要素を使用してリセット/再作成のワークフローだけでユーザーを認証できると考えるのは自然なことです。特に、追加要素の一部として OTP (ワンタイム パスワード) を使用すると、提案されたワークフローの時間枠が短い場合、リスクの多くが軽減されます。スマートフォン用のソフトウェア OTP ジェネレーター (ほとんどのユーザーがすでに 1 日中持ち歩いているもの) を実装し、大きな成功を収めました。市販のプラグインについて不満が出る前に、私が言いたいのは、パスワードがユーザー認証に使用される唯一の要素ではない場合に、パスワードを簡単に取得またはリセットできるようにしておくことに固有のリスクを軽減できるということです。

于 2010-10-13T15:09:11.360 に答える
5

申し訳ありませんが、パスワードを解読する方法がある限り、パスワードを安全にする方法はありません. ガッツリ戦って、負けたらCYA。

于 2010-02-17T20:48:56.970 に答える
5

この興味深い白熱した議論に出くわしました。しかし、私が最も驚いたのは、次の基本的な質問にほとんど注意が払われていないことです。

  • Q1. ユーザーが平文で保存されたパスワードへのアクセスを主張する実際の理由は何ですか? なぜそれほどの価値があるのでしょうか。

ユーザーが年上か若いかという情報は、その質問に実際には答えません。しかし、顧客の懸念を適切に理解せずに、どのようにビジネス上の決定を下すことができるのでしょうか?

なぜそれが重要なのですか?お客様のご要望の本当の原因がシステムの使いにくさだとしたら、その原因を解決することで実際の問題が解決するのではないでしょうか。

私はこの情報を持っておらず、それらの顧客と話すことができないので、推測することしかできません: それはユーザビリティに関するものです。上記を参照してください。

私が見た別の質問は次のとおりです。

  • Q2. ユーザーがそもそもパスワードを覚えていない場合、古いパスワードが重要なのはなぜですか?

そして、ここに可能な答えがあります。「miaumiau」という名前の猫を飼っていて、彼女の名前をパスワードとして使用していたのに忘れてしまった場合、それが何だったのかを思い出させるのと、「#zy*RW(ew)」のようなメッセージを送信することのどちらを希望しますか?

もう 1 つの考えられる理由は、ユーザーが新しいパスワードを思いつくのは大変な作業だと考えていることです。そのため、古いパスワードを返送してもらうことで、彼女をそのつらい仕事から再び救うことができるという錯覚が生まれます。

その理由を理解しようとしているだけです。しかし、理由が何であれ、対処しなければならないのは原因ではなく理由です。

ユーザーとして、私は物事をシンプルにしたい!頑張りたくない!

新聞を読むためにニュースサイトにログインする場合、パスワードとして 1111 を入力してスルーしたい!!!

安全ではないことは承知していますが、誰かが私の「アカウント」にアクセスすることについて何を気にしますか? はい、彼もニュースを読むことができます!

サイトは私の「個人情報」を保存しますか? 今日読んだニュース?それはサイトの問題であり、私の問題ではありません! サイトは認証されたユーザーに個人情報を表示しますか? だったら最初から見せるな!

これは、問題に対するユーザーの態度を示すためのものです。

要約すると、平文のパスワードを「安全に」保管する方法の問題ではなく (これは不可能であることがわかっています)、顧客の実際の懸念に対処する方法の問題だと思います。

于 2013-08-24T11:52:11.923 に答える
4

紛失/忘れたパスワードの処理:

誰もパスワードを回復できてはなりません。

ユーザーがパスワードを忘れた場合、少なくともユーザー名または電子メール アドレスを知っている必要があります。要求に応じて、Users テーブルで GUID を生成し、パラメーターとして GUID を含むリンクを含む電子メールをユーザーの電子メール アドレスに送信します。

リンクの背後にあるページは、パラメーター guid が実際に存在することを確認し (おそらく何らかのタイムアウト ロジックを使用して)、ユーザーに新しいパスワードを要求します。

ホットライン ヘルプ ユーザーが必要な場合は、いくつかのロールを付与モデルに追加し、ホットライン ロールが識別されたユーザーとして一時的にログインできるようにします。そのようなホットラインへのログインをすべて記録します。たとえば、Bugzilla はそのようななりすまし機能を管理者に提供しています。

于 2010-02-18T14:01:14.170 に答える
3

回復可能なパスワードを保存するという要件を拒否できない場合は、これを反論としてどう思いますか。

パスワードを適切にハッシュしてユーザーのリセット メカニズムを構築するか、システムから個人を特定できる情報をすべて削除することができます。電子メール アドレスを使用してユーザー設定をセットアップできますが、それだけです。Cookie を使用して、今後の訪問時に設定を自動的に取得し、妥当な期間が経過するとデータを破棄します。

パスワード ポリシーに関して見落とされがちなオプションの 1 つは、パスワードが本当に必要かどうかです。パスワード ポリシーがカスタマー サービスの呼び出しを引き起こすことだけである場合は、それを取り除くことができるかもしれません。

于 2010-10-13T14:30:17.983 に答える
3

暗号化されて失われる前に、登録時にプレーンテキストのパスワードを電子メールで送信するのはどうですか? 多くの Web サイトでそれが行われているのを見てきましたが、ユーザーの電子メールからそのパスワードを取得する方が、サーバー/コンプに残すよりも安全です。

于 2010-02-24T12:32:37.943 に答える
2

この件について私が理解していることは、サインオン/パスワードを使用して Web サイトを構築している場合、サーバー上でプレーンテキストのパスワードを表示することすらできないと思います。パスワードは、クライアントを離れる前にハッシュ化する必要があり、おそらくソルト化する必要があります。

プレーンテキストのパスワードが表示されない場合は、取得の問題は発生しません。

また、(Web から) MD5 などの一部のアルゴリズムが (伝えられるところでは) もはや安全とは見なされていないことを収集します。自分では判断しかねますが、参考程度に。

于 2015-07-23T14:16:45.320 に答える
2

ユーザーは、忘れたパスワードを本当に回復する必要があるか (たとえば、教えてもらう必要があるか)、または単にシステムにアクセスできるようにする必要があるだけですか? 彼らが本当に必要なのはログオン用のパスワードである場合、サポート担当者がパスワードを紛失した人に与えることができる古いパスワード (それが何であれ) を新しいパスワードに単純に変更するルーチンを用意してみませんか?

私はまさにこれを行うシステムで働いてきました。サポート担当者は、現在のパスワードが何であるかを知る方法はありませんが、パスワードを新しい値にリセットできます。もちろん、そのようなリセットはすべてどこかに記録する必要があり、パスワードがリセットされたことを知らせる電子メールをユーザーに生成することをお勧めします。

もう 1 つの可能性は、アカウントへのアクセスを許可する 2 つの同時パスワードを持つことです。1 つはユーザーが管理する「通常の」パスワードで、もう 1 つはサポート スタッフだけが知っているスケルトン/マスター キーのようなもので、すべてのユーザーに共通です。そうすれば、ユーザーに問題が発生した場合、サポート担当者はマスター キーを使用してアカウントにログインし、ユーザーがパスワードを変更できるように支援できます。言うまでもなく、マスター キーを使用したすべてのログインも、システムによってログに記録される必要があります。追加の手段として、マスター キーが使用されるたびに、サポート担当者の資格情報も検証できます。

-編集- マスターキーを持っていないというコメントへの返答: ユーザー以外の誰かがユーザーのアカウントにアクセスできるようにするのは悪いことだと思うのと同じように、悪いことであることに同意します。質問を見ると、全体的な前提は、顧客が高度に危険にさらされたセキュリティ環境を要求したということです。

マスター キーは、最初に思われるほど悪いものである必要はありません。私は防衛工場で働いていましたが、そこでは、メインフレーム コンピューター オペレーターが特定の場合に「特別なアクセス」を持つ必要があると認識されていました。特別なパスワードを封印された封筒に入れ、オペレーターのデスクにテープで貼り付けるだけでした。パスワードを使用するには (オペレーターはそれを知りませんでした)、彼は封筒を開けなければなりませんでした。シフトが変わるたびに、シフト監督者の仕事の 1 つは、封筒が開封されているかどうかを確認することでした。開封されている場合は、すぐに (別の部門によって) パスワードが変更され、新しいパスワードが新しい封筒に入れられ、プロセスがすべて開始されました。もう一度。オペレーターは、なぜそれを開けたのかについて質問され、事件は記録のために文書化されます。

これは私が設計する手順ではありませんが、うまく機能し、優れた説明責任を果たしました。すべてがログに記録され、レビューされました。さらに、すべてのオペレーターは国防総省の秘密のクリアランスを取得しており、悪用は一切ありませんでした.

レビューと監視により、すべてのオペレーターは、封筒を開く特権を悪用した場合、即座に解雇され、刑事訴追される可能性があることを知っていました.

したがって、本当の答えは、物事を正しく行いたいのであれば、信頼できる人を雇い、身元調査を行い、適切な経営陣の監視と説明責任を果たすことだと思います.

しかし、この可哀想なクライアントの管理が良ければ、そもそもこのようなセキュリティが侵害されたソリューションを要求することはなかったのではないでしょうか?

于 2010-02-24T23:11:11.663 に答える
1

あなたが考慮していないかもしれない別のオプションは、電子メールを介してアクションを許可することです. 少し面倒ですが、システムの特定の部分を表示 (読み取り専用) するためにシステムの「外部」ユーザーを必要とするクライアントのためにこれを実装しました。例えば:

  1. ユーザーが登録されると、フル アクセスが可能になります (通常の Web サイトと同様)。登録には電子メールが含まれている必要があります。
  2. データまたはアクションが必要で、ユーザーが自分のパスワードを覚えていない場合でも、通常の [送信] ボタンのすぐ隣にある特別な [メールで許可を得る] ボタンをクリックしてアクションを実行できます。
  3. 要求は、アクションを実行するかどうかを尋ねるハイパーリンクを含む電子メールに送信されます。これはパスワード リセットの電子メール リンクに似ていますが、パスワードをリセットする代わりに、ワンタイム アクションを実行します。
  4. 次にユーザーが「はい」をクリックすると、データを表示するか、アクションを実行するか、データを公開するかなどが確認されます。

コメントで述べたように、メールが侵害された場合、これは機能しませんが、パスワードをリセットしたくないという @joachim のコメントに対処します。最終的には、パスワードのリセットを使用する必要がありますが、必要に応じて、より都合の良いときに、または管理者や友人の助けを借りてそれを行うことができます.

このソリューションのひねりとして、サード パーティの信頼できる管理者にアクション リクエストを送信します。これは、高齢者、精神障害者、非常に若いユーザー、または混乱しているユーザーの場合に最適です。もちろん、これには、これらの人々の行動をサポートする信頼できる管理者が必要です。

于 2015-12-02T07:35:16.883 に答える
1

スタンドアロン サーバーで DB を開き、この機能を必要とする各 Web サーバーに暗号化されたリモート接続を提供します。
リレーショナル DB である必要はありません。テーブルと行の代わりにフォルダーとファイルを使用して、FTP アクセスを備えたファイル システムにすることができます。
可能であれば、Web サーバーに書き込み専用パーミッションを付与してください。

パスワードの取得不可能な暗号化をサイトのDBに保存します(「pass-a」と呼びましょう)通常の人が行うように:)
新しいユーザー(またはパスワードの変更)ごとに、パスワードのプレーンコピーをリモートDBに保存します。このパスワードの複合キーとして、サーバーの ID、ユーザーの ID、および「pass-a」を使用します。パスワードに双方向の暗号化を使用して、夜の睡眠を改善することもできます.

パスワードとそのコンテキスト (サイト ID + ユーザー ID + "pass-a") の両方を取得するには、次の手順を実行する必要があります。

  1. Web サイトの DB をハックして ("pass-a", user id ) ペアを取得します。
  2. 設定ファイルからウェブサイトの ID を取得する
  3. リモートパスワードDBを見つけてハッキングします。

パスワード取得サービスのアクセシビリティを制御できます (保護された Web サービスとしてのみ公開する、1 日に一定量のパスワード取得のみを許可する、手動で行うなど)。この「特別なセキュリティ対策」に追加料金を請求することもできます。
パスワード取得 DB サーバーは、多くの機能を提供せず、安全性を高めることができるため、かなり隠されています (アクセス許可、プロセス、およびサービスを厳密に調整できます)。

全体として、ハッカーの作業を困難にしています。単一のサーバーでセキュリティ違反が発生する可能性は変わりませんが、意味のあるデータ (アカウントとパスワードの一致) を収集するのは困難です。

于 2010-02-24T23:50:16.670 に答える
1

通常どおり、ユーザーのパスワードをソルト アンド ハッシュします。ユーザーのログイン時に、ユーザーのパスワード (ソルティング/ハッシュ後) の両方を許可するだけでなく、ユーザーが文字通り入力したものも一致させることを許可します。

これにより、ユーザーは秘密のパスワードを入力できるようになりますが、ソルト化/ハッシュ化されたバージョンのパスワード (誰かがデータベースから読み取るもの) を入力することもできます。

基本的に、salted/hashed パスワードも「プレーンテキスト」パスワードにします。

于 2017-05-04T18:19:38.987 に答える