web-dev-qa-db-ja.com

マイクロソフトがWindowsのユーザーパスワードにソルトを実装しないのはなぜですか?

非常に簡単です。つまり、Rainbowテーブルを使用して、ハッシュからユーザーのパスワードを取得します。では、なぜMicrosoftはWindowsのパスワードにソルトをhash(password+salt)に実装しないのでしょうか?

この実装は、少なくともローカルユーザーのパスワードクラッキングを処理するときにSAMファイルに実装されている間、多くの悲しみを節約しませんか?

17
Franko

Microsoft OSでのパスワードの処理は、パスワードを多くの用途で使用するため、複雑です。 OS(またはそのドメインコントローラー)は、パスワードのハッシュバージョンを格納しますが、パスワードまたはそのハッシュから派生したキーで対称的に暗号化された値もあります。認証プロトコルには、クライアント側でハッシュを実行する必要がある場合にソルトを交換するためのプロビジョニングは含まれていません。多くのサブシステムに影響を与えたり、下位互換性を壊したりせずにパスワード処理アルゴリズムを変更することは困難です。これは、Windowsエコシステムの原動力です。

それは戦略的な優先順位にまで及びます。マイクロソフトは、ソルトを含めるようにパスワードハッシュと認証プロトコルを変更すると、無視できないコストがかかることを知っています(影響を受けるすべてのコンポーネントを修正することにより)。一方、notパスワードハッシュの変更は、「無料」です。フレークハッシュアルゴリズムは、顧客に他の非-Microsoftシステム(OS市場は実際には キャプティブ市場 );潜在的な顧客に非常に高価なOSスイッチを想定させるには、さらに多くの時間がかかります。また、パスワードハッシュは間違いなく "defence in depth" として修飾できます。これは、違反がすでに発生した場合にのみ影響を与える2番目の層です。そのため、それは二次的な重要性として提示される可能性があります。したがって、もしも苛立たしい場合は、マイクロソフトが不十分なパスワード処理慣行を更新しないことは論理的です。

歴史的に、Microsoftは [〜#〜] ntlm [〜#〜] v1からv2に切り替えたときに1回だけ更新を行いましたが、古いLMハッシュは とても弱いので恥ずかしくなり始めました 。私の推測では、それは多くの内部の面倒を伴い、彼らは再びそれをしようとはしていません。

23
Thomas Pornin

Microsoftのシステムモデルは、通常の「Web」(および程度の低いUNIX)モデルとは大幅に異なります。MSの世界では、通常、いくつかの中央リポジトリに緊密にバインドされた独自の制御下にある多数のマシンがあり、多くの場合、それらがどこにあるかを知っている可能性があります。 (これはIISに関してはうまく機能しません。多くのWebアプリが独自のユーザーコントロールを行います。)

別の回答で述べたように のように、Microsoftのハッシュは伝統的に脆弱であり、下位互換性のためにおそらくそのように保たれています。ただし、セキュリティモデルにとって重要ではありません。Microsoftモデルでは、パスワードを変更することは比較的簡単です。 allのパスワードを強制的に変更するのは比較的簡単です。また、パスワードを期限切れにするための強力な方法もあります(そのため、失われたハッシュは、確実に1〜2か月以内にすぐに値を失います)。

また、慈悲深い管理者がコンピューティングの落とし穴から技術者ではないユーザーの意見を聞く世界でも活動しています。ほんの一例として:ソルトしないことは、ユーザーがドメインコントローラーと通信できないときにパスワードを更新することができ、ドメインコントローラーがユーザーの現在の資格情報(ユーザー+ドメイン+新しいパスワード)と以前の資格情報。これは、ユーザーエクスペリエンス(xxx日ごとにパスワードを変更する)がネットワークアクセスによって変化しないことを意味するため、大きな利点です。

興味があるかもしれません Microsoftのパスワードシステムに関する技術的な説明

7
Bob Watson