web-dev-qa-db-ja.com

パスワードが別のユーザーによって既に使用されているかどうかを確認するのはなぜですか?

これは 元はフランス語のジョーク から来ています:

パスワードを入力してください。

carrot

パスワードは8文字以上である必要があります。

carottegéante
巨大なニンジン

パスワードに数字が含まれている必要があります

1carottegéante
1人のにんじん

申し訳ありませんが、パスワードにアクセント付き文字を含めることはできません

50putaindecarottesgeantes
50いまいましい巨大なニンジン

パスワードに大文字を少なくとも1つ含める必要があります

50PUTAINdecarottesgeantes
50 DAMNジャイアントキャロット

パスワードに2つの連続した大文字を含めることはできません

5OPutainDeCarottesGeantesQueJeVaisTeMettreAuCulSiTuNeMedonnesPasImmediatementUnAcces!
すぐにアクセスを許可しない場合、お尻に入れる50の巨大なニンジン!

パスワードに句読点文字を含めることはできません

AttentionMaintenantJeVaisAllerTeTrouverEtTeMettreVraimentLes50CarottesGeantesSiTuContinues注意今、私はあなたを探しに行き、これが続く場合は本当に50人の人参を入れます

このパスワードは既に使用されています。

しかし、友達と話してみると:

  • 私は言った:

    これは組み込みのジョークのみです:3番目の回答にタイプミスがあります:ne soit pas ..そして、すでに使用されているパスワードをチェックするユーザー作成エンジンを知りません。

  • 私の友人の答え:

    そうです、冗談ですが、PAMを設定して、このようなチェックを行うことができます。
    password required pam_pwcheck.so nullok remember=N

よくわかりません!

権限のない人物は、新しい(偽の)アカウントを作成するだけで、パスワードが使用されているかどうかを確認できます。

この種のチェックの目的は何でしょうか?

16
F. Hauri

rememberpam_pwcheckに対して何をしているのかを誤解している。 man page を参照してください:

remember = XX

最後のXXパスワードを覚えておいて、ユーザーが次のXXパスワード変更のためにこれらのパスワードを再利用することを許可しないでください。 XXは1から400までの数値です。

このオプションを使用すると、pam_pwcheckは、以前に使用されたパスワードを再利用する試みを拒否します同じユーザーが。クロスユーザーは何もしません。選択したパスワードが他の誰かに使用されているかどうかについては警告しません。

実際、適切なパスワードハッシュが実施されている場合、このようなチェックの実装にはコストがかかります(ソルトと低速化のために多くの反復を行うと、他の数千のユーザーの推定パスワードを「試行」するのに数分かかります)。あなたが言うように、潜在的なパスワードが別のユーザーによってすでにどのように使用されているかについてユーザーに警告することは、それ自体、重大なセキュリティ問題になります。しかし、これはパスワードが適切に保存されていないことも意味しますanother重大なセキュリティ問題です。

26
Thomas Pornin

pam_pwcheck他の答えが言うように、特定のユーザーのパスワードのみを記憶します。

質問の他の部分は、「この種のチェックの目的は何でしょうか?」です。

実際、すべての既存のパスワードのチェックを行うシステムがあります。一般に、このようなシステムは、パスワードをプレーンテキストで保存するか、ユーザー名や、一致がすぐに見つかるのを妨げるその他の要素に依存しない無塩ハッシュを保存しています。私はこれをユーザーとして、機能要求(以下のように本質的に欠陥があることに加えて、パスワードを保存する合理的な手段で実行することは不可能であることを拒否した)として、またはの使用を修正することに異議を申し立てた平文ストレージ。

そして、目標は2つあります。

  1. パスワードは推測しにくいので、予測不可能性の点でランダムに近い場合が理想です(パスワードを覚えておくという問題は別の問題*であり、パスワードの強度に対する新たな熱意が生まれると忘れられることがよくあります)。直感的に言うと、ランダムとは繰り返しの方法がほとんどないことを意味するため(ここで誰かが知っている可能性が高いのは間違いであるが、間違いは間違いである)、繰り返しは悪い兆候です。

  2. より合理的には、他の誰かがパスワードを使用している場合、それは検出できない弱いパスワードである可能性があります(たとえば、電話番号などの会社のオフィスの詳細を使用して、別の従業員が試行する可能性がある方法でパスワードを作成する強度テスト)、本質的にユーザーが実際に推測しただけなので、推測することができます。

最初に考えた欠点は、ランダム性の繰り返しを理解できず、覚えにくいパスワードを安全に記憶できるポリシーでバックアップしない限り、完全にランダムなパスワードを期待することです。

2番目の考えの欠点は次のとおりです。

  1. そもそもチェックを行うために、パスワードを比較的安全に保存する必要があります。
  2. パスワードを誰かに漏らしました。
  3. 脆弱なパスワードを特定した可能性がありますが、実際にそれを使用している人に警告していません。

しかし、それでも、これらの欠陥はそれが起こらないことを意味しません。ジョークのシステムにはやはり別の欠陥があります。拒否carottegéante分音記号のため。さまざまな場所で分音符号を拒否する技術的な理由があります(ただし、他の人のコードと相互運用する必要がない限り、これらの理由は現代のコードではまったく許されません)。ユーザー名!同様に、多くのシステムはパスワードのスペースなどを拒否します。一般的に、私はこれをカーゴカルトプログラミングに当てはめます。他の誰かがそれをしたので、あなたはそれをコピーします。ある程度、これは完全に不合理ではありません。私はセキュリティに関しては、自分よりもよく知っている人のことをコピーするので、そのようなポリシーを盲目的にコピーしたことで誰かを完全に責めることはしません。それでも、 "jdiwmfojkslofklo"を受け入れ、 "ﬤסּוּ ﭞﻘﺪӐӓҾӌȕ"を受け入れないことは何も改善する方法がなく、実際に攻撃される可能性のあるパスワードの範囲が減少することに気づくのに、ほんの少し時間がかかります。

とにかく、いくつかのシステムがスペースに対して持っているルールは、ジョークを英語に翻訳するアプローチを私たちに与えます。 2番目のパスワードを「巨大なニンジン」にスペースを入れて入力します。

*それがポストイットノートの目的ですよね。

5
Jon Hanna