web-dev-qa-db-ja.com

パスフレーズを適用する場合、どのような考慮事項に留意する必要がありますか?

XKCD:Password Strength によると、パスワードが「ランダムな4つの一般的な単語」で構成されている場合、安全で覚えやすいパスワードになります。

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

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

30

それは必ずしも悪い考えではありません。攻撃者は、4つの単語が十分にランダムであることを考慮して、パスワードがその形式であることを知ることができます。しかし、ここで重要なのは、覚えやすい強力なパスワードを作成する他の良い方法があります。ユーザーを好きなユーザーに制限することは、あまりいいことではありません。たとえば、私は本当にランダムな長いパスワードでパスワードマネージャーを使用します。これはあなたが提案したものよりも優れていますが、あなたのサイトではそれができませんでした。

さらに重要なのは、これを行う理由がユーザーに強力なパスワードを使用することを強制することである場合は、4ワードのパスワードを生成することです。このようなパスワードを生成するには、辞書を作成し、1から辞書内の単語数までの乱数を選択して、その単語を取得します。これを4回行って、パスワードを取得します。インスピレーションを得ることができます ここ 。ほとんどのユーザーは4つの真にランダムな単語ではなく、簡単に推測できる4つの単語を選択する可能性があるため、これは重要です。このようなシナリオでは、これは、パスワードを選択させるよりも悪いでしょう。

53
Peter Harmann

Kerckhoff's Principle をほのめかしています。暗号化システムを設計する場合、攻撃者はエントロピー派生部分(通常、キー/パスワードなど)を除いてシステムに関するすべてを知っていると想定します。これは、詳細を知らないことを保証できないためです。彼らは私たちの生成されたキーを知らないと仮定する必要があります。すべてのパスワード生成スキームはこの推論に従います。パスワードスキームが安全であると言われる場合、使用しているスキームを知っている攻撃者が問題ではないと信じることができます。

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

まず、1つのWordの名前空間を特定します。EFFダイスウェアリストでは、5つの6面ダイスを振って、表示される結果を選択します。 6つのオプションを持つ5つの位置があるので、6 ^ 5を計算できます。これにより、7776が得られます。これは、場所ごとに7776の異なる可能な単語があることを意味します。

これで、これらの単語のうち4つの名前空間の最小複雑度を計算できます。これは、可能な単語数を取得し、パスワードの単語数-7776 ^ 4で累乗することで簡単に実行できます。これにより、4つのEFFダイスウェアワードの3656158440062976(3.6兆)の可能な異なるパスワードが得られます。

これがどれくらいかかるかを推測するために、いくつかの仮定を行う必要があります-

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

  2. 攻撃者はコンシューマーグレードのハードウェアを使用しています。 -8x 1080 TIの配列のいくつかのベンチマークを見ていきます。これらは、執筆時点では最上位ですが、最大ハッシュレートと見なすべきではありません。NSAなどには、おそらくハッシュ専用のハードウェアがあります。パスワードをできるだけ早く。

このベンチマーク からわかるように、OpenCLでは、8x 1080 Tiの攻撃者は次のレートで優れたアルゴリズムを攻撃できます。

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

したがって、3.6兆個の可能なパスワードの名前空間の場合、クラックに予想される以下の時間を計算できます。平均して、名前空間の100%ではなく、50%を使い果たす必要があることに注意してください。

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

したがって、優れたハッシュアルゴリズムも実装する必要があることがわかります。

このアルゴリズムには2つの点が欠けています。まず、4文字より短い単語を省略していません。 EFFダイスウェアリストには、3文字の単語が多数含まれています。最小ワード長を増やすと、名前空間が減ります。 EFFのリストには3文字の長さである500語程度の単語があると思いますが、それは推測です。したがって、名前空間は少し複雑ではありません。

次に、これらのパスワードはランダムに派生したものとして扱いました。代わりに文章が欲しかったので、文章はランダムではないことを覚えておく必要があります。文章を意味のあるものにしたい場合は、それらに対して実行できる攻撃があります。マルコフチェーンやその他の楽しいものを使用して、単純な総当たりのパスワードではなく、ありそうな文章を生成できます。これがブルートフォースよりもはるかに簡単であるという統計はありません。そのため、先に進んで、それが大きな違いを生み、はるかに弱いと仮定する必要があります。

パスワードは16文字以上で、4語以上で構成されていることを攻撃者に通知することで、パスワードのセキュリティを損なうことはありません。これは、パスワードに少なくとも10文字、少なくとも1つの大文字、1つの数字、1つの記号が必要であることを伝えるのと同じです。正しい?

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

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

4
ThoriumBR

覚えやすさ。4ワードのパスワードは、ランダムなパスワードよりも間違いなく覚えやすいでしょうが、平均的なユーザーが実際にそれを覚えていなくても、とにかくそれを書き留めるか、パスワードマネージャーを使用します(今日では覚えるには異なるパスワードが多すぎます)。覚えやすさは役に立つし素晴らしいですが、あなたが思うほど役に立たないかもしれません。

セキュリティ。4ワードのパスワードは、十分に大きいワードのセットからランダムにワードが選択された場合にのみ、平均的なパスワードよりも安全になります。 this の記事によると、平均的なユーザーが使用するパスワードのエントロピーは約21ビット(221 = 2.1×106)、これは非常に低いです。 1000の最も一般的な英語の単語のリストから4つの単語をランダムに選択すると、1000になります。4 =1012の可能性があるため、平均的なパスワードよりも総当たりが100万倍難しいパスワード。

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

3
reed

安全で覚えやすいパスワードの使用をユーザーに強制することはできません。

この回答 関連する質問の漫画は、コンピュータの側面ではなく、パスワードのポリシーの人間の側面が「最も重要な関心事である場合が多い」ことを強調するものとして要約されています。

@ Adonalsiumの回答 は、コンピュータの側面をよくカバーしています。 diceware の使用は、コンピュータの側面に悪影響を与えることなく、人間の側面に比較的適しているため、パスワードを生成するための許容できる方法です。

ただし、記憶に残したい場合は、パスワードの生成方法をユーザーに指示することはできません。また、あなたが生成したパスワードを使用するよう要求することもできません。

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

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

これにより、ランダムに生成された比較的短いパスワードと、比較的長いダイスウェアパスワードを、どちらも必要とせずに、またはいずれかを不適切にすることなく使用できます。ユーザーはそれらに最適な方法を選択でき、必要なレベルの耐クラック性を要求できます。

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

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

3
ShadSterling

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

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

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

2
Serge Ballesta

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

1
William Hay

絶対に安全ではないパスワードを設定しようとしているユーザーに警告を与え、本当に設定したいことを確認するようにしてください。

暗記できる以上のパスワードを設定するように人々に強いることは、彼らにそれを書き留めさせるだけでなく、無計画にそして安全でない場所に書き留めさせるでしょう。

また、一部の組織では、(承認されたチーム間で)安全な(複雑さにより)共有されているか、事前に文書化された(ロックとキーの下で)パスフレーズを使用する機能が望ましい-合理的に安全なパスワードを拒否するパスワードガイドラインが現実になる可能性があるここで迷惑。使用シナリオ:「このチームがタイプXYZ​​のすべてのベンダーに使用する複雑なパスフレーズを設定してください。これにより、このチームの別のメンバーが不在時に緊急にアクセスする必要が生じた場合の煩わしさがなくなります。」.

0
rackandboneman