パスフレーズを適用するときに注意する必要がある考慮事項は何ですか?

XKCD:パスワードの強度によると、パスワードが「ランダムな4つの一般的な単語」で構成されている場合は安全です。記憶に残る。

このようにしてWebアプリケーションを作成し、ユーザーにパスワードを作成させます。各パスワードは最低16文字で、より安全で覚えやすいものにするために最低4語の文である必要があります。しかし、これは攻撃者にすべてのパスワードがそのようなものであることを知らせるでしょう。これは悪い考えですか?

より安全で覚えやすいパスワードを同時に強制するためのより良い方法は何ですか?

31
ところで: haveibeenpwned /パスワードを検討してください。これにより、あなたは既知の漏洩したパスワードを禁止することができます(私はこれが最も一般的なパスワードの多くをカバーすると思います...)
追加された 著者 coder,
追加された 著者 Frank Hale,
あなたはどんな脅威から身を守ろうとしていますか?ユーザーが6桁の小文字のパスワードを使用する場合、どのようにして脅威が成功する可能性が高くなりますか?あなたのサイトでブルートフォース検出があり、あなたのパスワードを安全に保存しているならば、それはウェブアプリケーションのために十分以上であるべきです。
追加された 著者 JeffUK,
それは私のパスワードマネージャによって生成された32文字のランダムな文字列を受け入れなかった場合、それは超迷惑でしょう。
追加された 著者 Metaathron,
ユーザーベースの50%が Password1、Password2、Password3、Password4 のバリエーションを選択し、他の50%が正しい馬の定番バッテリーを選択しても、驚くことはありません。そのようなシステムを実装するというあなたのサイトの決定はあなたのサイトを使用するための形式的なものにすぎないと見なされます。ユーザーはセキュリティを高く評価しておらず、何らかのタスクを実行して目的を達成することを望んでいるので、目的は最小限の摩擦です。
追加された 著者 WalkingFortress,

9 答え

それは必ずしも悪い考えではありません。 4語が十分にランダムであることを考えると、攻撃者はパスワードがその形式であることを知ることができます。しかし、これが事実です、思い出に残る強力なパスワードを作るための他の良い方法があります。ユーザーを好きなユーザーに制限するのはあまり良くありません。例えば、私はあなたが提案したものよりもさらに優れている、真にランダムな長いパスワードでパスワードマネージャを使用しますが、私はあなたのサイトでそれをすることができませんでした。

もっと重要なことは、あなたがこれをしたい理由が強いパスワードを使うことをユーザに強いることであるなら、そして彼らのために4ワードのパスワードを生成することです。あなたは辞書を持っていて1からあなたの辞書の単語の数までの間の乱数を選んでその単語を取ることによってそのようなパスワードを生成することができます。これを4回実行すると、パスワードがわかります。あなたはインスピレーションを得ることができますこちら。ほとんどのユーザーは4つの本当にランダムな単語を選ぶのではなく、4つの簡単に推測できる単語を選ぶので、これは重要です。そのようなシナリオでは、これは彼らに任意のパスワードを選択させるよりも悪いでしょう。

54
追加された
ユーザーにパスワードを割り当てる代わりに、パスワードを作るためのランダムな単語のリストを渡します。ユーザーが4を選んで欲しい順番を並べることができる16の単語のリストは、少なくともポストイットに頼ることなくそれを思い出すことができる機会を彼らに与えるでしょう。
追加された 著者 Jack Mills,
うん私は知っている!私はちょうど私の2セントをどこかに置きたかった、そしてそれはあなたが言っていたものと一致
追加された 著者 TheHidden,
パスワードルールを作成するときは、覚えておく必要があります。それは愚かなことになると人々は非常に賢いです。彼らはあなたがそれを容易にするためにあなたが設定した規則を回避する方法を見つけるでしょう。だからPassword1の誕生、P @ ssword1 ...など
追加された 著者 TheHidden,
あなたがあなたのユーザのためにランダムなパスワードを作成するならば、彼はそれを暗記する代わりにそれを書き留めることをほとんど強制されています。彼がすでにパスワードマネージャを使っているのなら、これは必要ない。これは元の考えより悪いかもしれません。
追加された 著者 eaglemango,
それが優れていますが、あなたの答えが言っていることではありません。私はもう一度それを読み終えたので、私はあなたの意図であったかもしれないものを見ることができます。これをより明確にするために、これを改善したいと思うかもしれません。 :)
追加された 著者 eaglemango,
推奨パスワードとしてアカウント作成時にパスワードを生成します。パスワード強度計を持っていて、「強い」より低いものを拒絶しなさい - あなたのパスワードは基準を通過するだろう、しかしユーザーはまだ代わりにパスワードマネージャか何かを使うことが自由である。
追加された 著者 om39a,
@DavidStarkeyあなたはほとんどすべての単語の組み合わせを覚えていることができます。このような選択をすると、パスフレーズの強度がさらに大幅に低下します。私は個人的に彼らに別のパスワードを要求する機会を与えるでしょう、しかしそれが現れるのにより長い時間がかかるようにしなさい。おそらく5秒です。このようにして妥当なパスワードを取得できますが、パスを何度も再生成しないため、強度があまり低下しません。
追加された 著者 Mada,
@EsaJokinen私は彼がランダムなパスワードを生成することを提案していません、私は彼がこのサイトのように、彼らが使用したかったので彼が4つの単語を生成することを提案します。 correcthorsebatterystaple.net
追加された 著者 Mada,
それは私が彼にユーザーに選択させるのではなく4つの単語を生成することを勧めた理由です。
追加された 著者 Mada,
@htmlcoderexe私が同じことを考えていた、私はそれを書き留めていない理由は、それはパスワード強度のための信頼性の高いメーターを行うことはほぼ不可能です。そして質問は彼がそれを強制したいと思うように聞こえた。述べたように、愚かであることを試みるとき人々は本当に賢いです。
追加された 著者 Mada,
@EsaJokinenが編集しました。今は太陽と同じくらい明瞭です:)
追加された 著者 Mada,
パスフレーズにランダムに単語を選択しないでください。単語の辞書を持って、それを大きくしなさい、しかし意図せずに不快な組み合わせをするかもしれない単語を削除しなさい。たとえば、アカウント設定用のパスワードを私が作成したとき、最初に削除した単語の一部は、人間の肌の色調に密接に関連した色でした。 (あなたが適応できる中立単語のリストがあるかもしれません。)
追加された 著者 Mauro Rocha,
特にあまり一般的ではないバージョンを使用している場合は特に覚えにくいため、同義語ペアも削除してください。
追加された 著者 Mauro Rocha,
その答えは、1Passwordがパスフレーズに対して取るアプローチと似ています。
追加された 著者 nicholas,

あなたは Kerckhoffの原則をほのめかしています。暗号システムを設計するとき、私たちは攻撃者がエントロピー派生部分(典型的には鍵/パスワードなど)を除いてあなたのシステムについてすべてを知っていると仮定します - 彼らが詳細を知らないことを保証できないので、しかし彼らは私たちの生成したキーを知らないと仮定しなければなりません。どのようなパスワード生成スキームでもこの理由に従います。パスワードスキームが安全であると言われている場合は、使用しているスキームを知っている攻撃者は問題にならないと考えることができます。

これが問題にならないのは、パスワードの名前空間が機能する方法によるものです。 EFFリストなどの既知のダイスウェアリストに基づいてユーザーがパスワードを生成することを要求し、それが4ワード以上であることを要求する場合は、名前空間の複雑さを計算できます。

最初に、私たちは単一の単語の名前空間を把握します - EFFダイスウェアリストでは、5つの6面ダイスをロールアップして表示される結果を選びます。 6つのオプションを持つ5つの位置があるので、6 ^ 5を計算することができ、それは7776を与えます - これは単に各場所に7776の可能な異なる単語があることを意味します。

これで、これら4つの単語の最小の名前空間の複雑さを計算できます。これは単純に可能な単語の数を取り、それをパスワード内の単語の数の累乗にすることで行われます - 7776 ^ 4。

さて、これがどれくらいかかるかを推測するために、我々はいくつかの仮定をしなければなりません -

  1. scrypt、bcrypt、PBKDF2など、優れたハッシュアルゴリズムを使用しています。

  2. 攻撃者は消費者グレードのハードウェアを持っています。 - 私たちは8×1080 TIの配列のいくつかのベンチマークを見てみましょう。これはこの記事の執筆時点ではトップクラスですが、最大ハッシュレートとは見なさないでください。できるだけ早くパスワードを設定してください。

このベンチマークから、OpenCLでは、8×1080 Tiの攻撃者が次の攻撃に対して優れたアルゴリズムを攻撃できることがわかります。以下の料金

  1. 1秒あたり640万ハッシュまでの割合で暗号化します。
  2. 1秒あたり184,000ハッシュのレートでbcryptします。
  3. 1秒あたり775,000ハッシュのレートで
  4. PBKDF2-SHA256。
  5. SHA1(比較のために、これをパスワードには使用しないでください)で、毎秒1010億ハッシュの割合で。

したがって、私たちの与えられた3.6兆6000億の可能なパスワードの名前空間のために、私たちはクラックするために以下の予想される時間を計算することができます -

  1. scrpyt - 571274756.25984秒(〜9年)
  2. bcrypt - 19870426304.690086956521739130435秒(〜315年)
  3. PBKDF2 - 4717623793.6296464516129032258065秒(〜75年)
  4. SHA1 - 36199.588515475009900990099009901秒(〜2日)

だから、私たちはあなたが同様に良いハッシュアルゴリズムを実装する必要があることがわかります。

このアルゴリズムには2つのことが欠けています - まず、4文字より短い単語を除外しませんでした。 EFFダイスウェアリストには3文字の単語がたくさんあります。最小語長を増やすと、ネームスペースが減ります。私はEFFリストには3文字の長さの500語までがあると思いますが、それは推測です。したがって、名前空間はやや複雑ではありません。

次に、これらのパスワードはランダムに導出されたものとして扱いました。あなたが代わりに文章を望んだので、文章はランダムではないことを心に留めておく必要があります。文章に意味を持たせるためには、それらに対して実行できる攻撃があります。単純なパスワードを強要するのではなく、マルコフ連鎖や他の楽しいものを使用して可能性のある文を生成することができます。私がこれが強引な強制よりどれほど簡単であるかについての統計を持っていません、それで私は先に行くつもりです、そして、あなたがそれが大きな違いを作るとはるかに弱いと仮定するべきです。

14
追加された
私は、scrypt、bcrypt、PBKDF2がすべて自分のハッシュを自動的に魔法で塩にすると信じています。
追加された 著者 Sarah Jean,
@MooingDuck OPは、問題の記述に16文字以上の4ワードを必要としました。私が述べたのは、3文字の単語を除外しないように多少警告するためです。また、EFFリストの長さはわずか7776ワードです。
追加された 著者 Sarah Jean,
@Adonalsium:ランダムな単語が良い理由の1つは、それらのうちの30k-60kがあるからです。短い単語をすべて除外してアイデアを弱めないでください。
追加された 著者 michael aubert,
@Aaron PHPによるArgon2ハッシュのように、あなたは正しいと思います。 PHPはパスワードとsaltとすべてからハッシュを作成しますが、アルゴリズム自体にはsaltが必要です。
追加された 著者 Georg Leber,
ウィキペディアによると、これらの3つのアルゴは、式への入力の1つとして特にソルトを必要とします。舞台裏でそれらのいくつかを処理しようとするライブラリがあるかもしれませんが、ハッシュ関数内で生成されるsaltを持つことは不可能です。
追加された 著者 nbr11,
(あるいは、一度に複数のパスワードを解読するためにハッシュを再利用することを不可能にする)
追加された 著者 nbr11,
名前空間全体をハッシュする時間に関する詳細を計算するのであれば、塩味のハッシュを使用することの意味を考慮する必要があります(絶対に常に実行する必要があります)。それはハッシュ名前空間をかなり大きくします。
追加された 著者 nbr11,

パスワードの長さは16文字以上で、4語以上の単語で構成されていることを攻撃者に知らせることで、パスワードのセキュリティを損なうことはありません。これは、パスワードに10文字以上、大文字、小文字、数字、記号をそれぞれ1文字以上含める必要があることを伝えるのと同じです。右?

4ワードで、ブルートフォースのコストは10ランダム文字よりも大きいです。ユーザーに少なくとも1つの大文字を使用するように依頼すると、コストはさらに上がります。

オックスフォードの辞書によると、英語の単語数は175,000弱です。 8.64×10 20の可能な組み合わせがある。英語キーボードで95文字すべてを使うと、5.98×10 19の可能な組み合わせがあります。

4
追加された
「4語の場合、総当りのコストは10ランダム文字よりも大きい」これは、単語リストと文字セットのサイズによって異なります。
追加された 著者 Jay Corbett,
@PeterHarmann:2kの単語数が少ないことに驚かれることでしょう。 sciencemag.org/news/2016/08/… によると、ほとんどのアメリカ人は27Kから52Kの単語に慣れています。その3万ワードのマークは、高い水準ではありません。
追加された 著者 michael aubert,
最も簡単なケース:それぞれ4文字の4ワード、その間に1つのスペース、大/小文字混合。 19文字、53文字、53 ^ 19 = 5.17E32。 10個のランダムなASCII文字:128 ^ 10 = 1.18E21。
追加された 著者 ThoriumBR,
わかりました、オックスフォードの辞書を取ります。それは171476の言葉を持っており、4ワードのパスワードは8.64E20を意味します。しかし、すべてのユーザーが英語の単語を使用しているかどうかはわかりません。また、ユーザーが難しい単語を使用することを頼りにできないため、完全なUnicode文字からパスワードを取得するユーザーを頼りにすることはできません。
追加された 著者 ThoriumBR,
「もしそれが標的型攻撃であれば…」:もしそれが標的型攻撃であれば、攻撃者は常に勝つ。そうでなければ、4ワードは攻撃者がブルートフォースを忘れるのに十分な大きさのスペースであり、漏洩したパスワードリストは無駄です。
追加された 著者 ThoriumBR,
@ThoriumBRあなたは他の要因を考慮する必要がありますが、私は人々のパスワードの大半が "toTk uTpC lmen PQZt"になるとは思わない。それはおそらく "私の名前はjimmybob"です
追加された 著者 TheHidden,
@ThoriumBR繰り返しますが、ユーザーにパスワードの形式を表示して4語を選択すると言うと、実際には4つのランダムな語が選択されます。ほとんどの場合それは起こりません。私は、ほとんどの人が推測できるパスワードを持っていることを保証します。それは、彼らがごく少数の非常に一般的な単語から選択するからというだけの理由です。
追加された 著者 Mada,
@ThoriumBRそうですね、ほとんどの人は辞書に171kの単語を使用しないでしょう。 2kを使っている人はラッキーになるでしょう。しかし、2kは、本当にランダムに選択されていれば、まだ十分です。だからこそ私は彼らのためにパスワードを生成することを勧めます。そしてはい、他の言語を使用しているユーザーはほとんどいませんが、気にする人はいますか?それが標的型攻撃であれば、あなたは国籍を知っています、そしてそうでなければ、彼らが彼らが試みているものを推測することができないならば、あなたは単により簡単な標的に移ります。
追加された 著者 Mada,
@LieRyanあなたはそれをより安全にするためにあなたの辞書に30,000語以上の単語が必要になるでしょう。それで可能かもしれないがありそうもない。あなたの計算は明らかに間違っています。強度を計算する適切な方法は、xkcdコミックにあります。
追加された 著者 Mada,
「4つの言葉で、総当りのコストは10のランダムな文字より大きいです」本当ではありません。
追加された 著者 Mada,

安全で記憶に残るパスワードをユーザーに使用させることはできません。

This answer to a related question summarizes the comic as emphasizing that the human aspect of password policies, not the computer aspect, "should often be the overriding concern".

@Adonalsium's answer covers the computer aspect well. Using diceware is relatively good for the human aspect without being bad for the computer aspect, so it's an acceptable way to generate passwords.

しかし、あなたが思い出に残ることを望むなら、あなたはユーザーにパスワードを生成する方法を指示することはできません。あなたが彼らのために生成したパスワードを彼らが使うことを要求することもできません。

パスワードの長さを不当に短いものに制限する、特定のリストからの文字(数字や句読点など)を要求する、特定のリストからの文字を禁止する(スペースや引用符など)など、避けるべき明白なことが少しあります。それでは、どのようにしてそれを回避しながらも安全なパスワードを要求することができるでしょうか。

入力したパスワードのエントロピーの下限を推定し、推定値がある最小値を超えるパスワードのみを受け入れるようにポリシーを設定する必要があります(おそらく最小のクラックタイムに基づく)。私が知っている唯一のそのような推定ツールは zxcvbn です(残念ながらこれは正しい馬のバッテリーの定番を拒絶しません) ")。

これは、比較的短いランダムに生成されたパスワードと比較的長いダイスウェアパスワードの使用を可能にします。ユーザーはそれらに最適な方法を選択することができ、あなたはあなたが必要とするレベルの亀裂抵抗を要求することができます。

ダイスウェアのパスワードを生成して推奨することは役に立つかもしれません、そしてそれは良い考えだと思いますが、私がそれを自分で使う前にプロセスが新しい脆弱性を導入しなかったことを確かめる必要があります。 (あなたがそうするならば、リンクを提供するためのもう一つのこと。)

(私はパスワードセキュリティカオスモンキーが常にあなたのユーザーのパスワードをクラックし、成功するたびにリセットを強制しようとする傾向があります。しかし、それが実際に不幸なパスワードより頻繁に弱いパスワードで成功するかどうか私はわかりません。 )

3
追加された
@ joeytwiddle、視覚的表示は簡単な部分です!
追加された 著者 ShadSterling,
zxcvbnには包括的な辞書は含まれていませんが、少なくともユーザーが正しい方向に動いているときに視覚的に示すことができます。それはまた拡張され改良されることができます...
追加された 著者 Matt Campbell,

Memorability. A 4-word password will definitely be easier to remember than a random password, but that doesn't mean the average user will actually remember it without writing it down or using a password manager anyway (there are just too many different passwords to remember nowadays). So memorability is useful and is great, but it might not be as useful as you think.

Security. A 4-word password will be more secure than the average password only if the words are chosen randomly from a sufficiently large set of words. According to this article I've found the entropy of the password used by an average user is expected to be about 21 bits (221 = 2.1 × 106), which is worryingly low. If you choose 4 words randomly from a list of the 1000 most common English words, you would have 10004 = 1012 possibilities, so a password that is 1 million times harder to bruteforce than the average password.

したがって、一般的に言って、ユーザーに自分の言葉を選んでもらわないか、「pass pass pass pass」や「1 2 3 4」などのパスワードを選択しない限り、あなたの考えは悪くありません。もちろん、あなたの方法が実際にパスワードのセキュリティを低下させるという特定のケースが確かにあるので、これはすべて一般的に言っていることです。たとえば、デフォルトでは長いランダムパスワードを使用する傾向があるため、あなたの方法では私のパスワードのセキュリティが低下します。そのため、アプリケーションでこの方法を使用するよう強制された場合いつもより。このようなコミュニティでも同じことがおそらく当てはまります。ここでは、平均パスワードエントロピーが21ビットよりはるかに大きく、おそらくあなたの4ワードのパスワードより大きいことを願っています。

3
追加された

私のアドバイスはしないです。私はそれが password セキュリティ(パスワードマネージャによって生成された32のランダムな文字パスワードについてすでにコメントを得ている)を実施するかどうかについて議論するつもりはありませんが、グローバルセキュリティへの影響。

エンドユーザーに制約を追加しています。何人か(教育を受けていない)は常に同じパスワードを使います。彼らはそれをほとんど覚えておらず、新しいものに煩わされたくないので、できればあなたのWebアプリを使いません。他の人は言うでしょう:それは良い考えですが、私は長い間それを思い出すことができないでしょう...それをそのシートに書き留めましょう!優れたパスワードマネージャに慣れている人は、私がランダムジェネレータを使えないというのはなんてばかげていることでしょう!と言うでしょう。

パスワードルールを受け入れることができる唯一の使用例は、企業環境におけるメインパスワードです。従業員は毎日それを使用することになっています(毎日勤務日...)、そしてシングルサインオンソリューションのおかげで通常は1つだけが必要とされるので、それを問題にしないでください。他のすべてのユースケースでは、エンドユーザーが自分のデータに責任を持つと想定され、最小長を超えるものは<�迷惑な制約であると考え、私は使用しないようにします。そのサイト。

2
追加された

私はあなたがこれの有用なパスワード強制を持つことができるとは思わない。 XKCD方式のAKAダイスウェアの強みは、フレーズの単語がランダムであることによって異なります。 4つの選択された単語、特に文を作る4つの選択された単語は非常に弱いパスフレーズであり、それらが入力する単語がランダムであるか選択されているかどうかを確認する方法はありません。

1
追加された

より安全で安全なパスワードを強制するためのより良い方法   同時に思い出に残る?

2つのことが頭に浮かびます(どちらもパスワードの "alphabet"を増やすことに関連しています)。

1)数字や特殊文字が許可されているかどうかはあなたの投稿では不明です。そうではないと仮定すると、それはたった32種類の異なる文字のアルファベットをあなたに残すでしょう。私はあなたのユーザーがそれらを使うようにし、そして積極的に動機付けるでしょう。

2)英単語のみを使用すると仮定して、攻撃者は2つの直接的な攻撃を受けます。 (A)英語の辞書に基づいて、(A)各文字をブルートフォース、または(B)各文字を4ワードずつブルートフォースします。世界の人口の大部分が第2言語として英語を使用していることを考慮すると、ユーザーが言語を混在させるように動機付けます。

1
追加された

しないでください、しかし、完全に安全でないパスワードを設定しようとしているユーザーに警告を与えて、彼らが本当にそれを設定したいかどうかを確認させます。

暗証番号を超えたパスワードを設定するように強制すると、パスワードを書き留めてしまうだけでなく、何気なく安全な場所に書き留めます。

また、一部の組織では、(複雑ではあるが)安全な(承認されたチーム間で)共有されたパスフレーズおよび/または(ロックと鍵の下で)事前に文書化されたパスフレーズを使用できることが望ましい。ここで煩わしさ。使用シナリオ:「このチームがXYZタイプのすべてのベンダーに使用する複雑なパスフレーズを設定してください。そうすれば、このチームの別のメンバーがあなたの不在で緊急にアクセスする必要がない場合でも面倒になりません」。

0
追加された