web-dev-qa-db-ja.com

パスワードに複数のパスワードの組み合わせを含めることはできますか?

パスワードに複数のパスワードの組み合わせを含めることはできますか?

物理的な組み合わせロック(数字で開くロック)を調べたところ、組み合わせロックには複数の組み合わせがあり得ることを知りました。

また、私は最初の電話、つまりパスワードで保護された通常のNokiaの電話(スマートフォンではない)を手に入れました。この電話の正確なパスワードではないパスワードでデバイスを開くことができました。同様に、パスワードが4545に設定されていて1111と入力した場合、電話はまだロック解除されています。または、電話のパスワードが4114に設定されていて、「2141」と入力したとすると、電話はまだロックされていません。

問題は、私のラップトップPCのパスワードが!78ghA,NJ58*#3&*、次の組み合わせが私の背後で機能することは可能ですか、それとも脆弱性がある場合にのみ機能しますか?

28

ほとんどのパスワードで保護されたシステムでは、それは通常可能ですが、ほとんどありません。

多くのパスワード検証メカニズムの背後には、ソルトハッシュ関数の使用があります。簡単にするために、少し塩を忘れましょう。

ユーザーがパスワードを設定すると、hash(password)がデータベースに保存されます。ユーザーが_password'_を提示してログインすると、hash(password')hash(password)と比較されます。一致する場合、ユーザーはログインを許可されます。

ただし、ハッシュ関数は無制限の長さのデータを取得し、それを制限されたサイズのデータ​​に変換することを覚えておいてください。 128ビット。したがって、特定の関数から同じハッシュを生成するメッセージが複数存在する可能性があることを理解するのは難しくありません。それは衝突と呼ばれ、それがあなたが心配していることです。

問題は、ハッシュ関数が非常にランダムに生成されるため、衝突を簡単に見つけたり、生成したりしないようにすることです。理論的には「可能」ですが、最新の優れたハッシュ関数を使用している場合は、実際には「不可能」です。

44
CristianTM

まず、数学的理論による-はい(実際には、この宇宙での計算によって達成可能な最新のハッシュ関数と数値については、これを完全に無視できます)。システムがパスワードをプレーンテキストまたはリバーシブル暗号化を介して保存せず、代わりにハッシュする場合(ベストプラクティス)、ハッシュに一致するハッシュを生成する潜在的なパスワードは無限にあります(理想的な暗号化ハッシュを想定しています)。関数)。

たとえば、パスワードがpassword = '!78ghA,NJ58*#3&*'そして、3バイトのソルトでソルトされたsha256ハッシュを使用しました(ブルートフォースを困難にするために、これは多くのラウンドでキー強化されることに注意してください):d7 35 e6次に、パスワードハッシュは4fe5bbb74a21fb6d20785ce7fce1cd51d6fc87c5a55f65d75e8f37096ed54a53(pythonで計算できます):

>>> import hashlib
>>> salt = '\xd7\x35\xe6'
>>> password = '!78ghA,NJ58*#3&*'
>>> hashlib.sha256(salt + password).hexdigest()
'4fe5bbb74a21fb6d20785ce7fce1cd51d6fc87c5a55f65d75e8f37096ed54a53'

このハッシュは256ビットであることに注意してください。だから2つしかありません256 〜1077 可能なハッシュ。ハッシュ関数が適切に機能し、可能なすべての入力に対して均一にハッシュを選択する場合(つまり、ハッシュ関数が random Oracle として機能する場合)、10を大幅に超えて試行すると77 ハッシュ、いくつかのハッシュは衝突します( pigeonhole原理 によって証明可能)。 10を試した場合80 ハッシュの場合、任意のハッシュと一致する約1000個のパスワードが見つかることを期待する必要があります。

ただし、1077 非常に大きな数です。これは、おおよそ観測可能な宇宙の原子数です。または、すべてのatomが太陽系の場合(〜1057)それぞれがナノ秒ごとにハッシュを計算し、10を計算するまでに約3000年かかりました77 ハッシュなので、これは実際に心配する必要のあるものではありません。

(100年間、毎秒50億のハッシュを試み、非常に強力なパスワードがあった場合、ランダムに256ビットハッシュに一致する別のパスワードを見つける可能性は、7.4 x 10分の1です。57;これは、連続する週に7つのパワーボールチケットを購入し、ジャックポットを最初に6回獲得し、次に7回プレイし、5つの数字(パワーボールなし)に一致して100万ドルしか獲得できないというオッズに似ています。


確かに、これは実際にはパスワードが一意であることを意味しません。ユーザーに通知せずに、12文字のランダムパスワードを8文字に切り捨てる展開されたCisco VPNシステムに実際に遭遇しました(最初に入力した文字が速すぎて文字を省略したところ、それでも機能しましたが、試行錯誤した)。したがって、最初の8文字が正しい限り、その後に何でも入力でき、機能します。

これも単独のケースではありません。たとえば、Microsoftは Windows Live IDパスワードをサイレントに16文字 に切り捨てていましたが、現在はパスワードを16文字に制限していることをユーザーに通知しています。

Windows Live IDのパスワードは常に16文字に制限されていました。追加のパスワード文字はサインインプロセスで無視されました。 「Windows Live ID」を「Microsoftアカウント」に変更すると、サインインページも更新され、パスワードの最初の16文字のみが必要であることを通知します。」

また、適切に設計されていない認証システムにより、パスワードの途中から特殊文字が削除される可能性もあります。私の友人は、T-Mobileが2011年に 不適切に設計された「パスワードを忘れた」機能を使用してパスワードをプレーンテキスト で送ったときにこれを行ったことがわかりました。彼のパスワードの。

10
dr jimbob