ユーザー名「John」とパスワード「Secret」を使用して、website.comにサインアップするとします。
現在、webbrowserは、website.comに私の本当のプレーンテキストパスワードを提供しています。ハッキングされた場合のユーザーへの被害を最小限に抑えるために、それらを信頼して適切にソルトおよびハッシュする必要があります。
Webブラウザーがパスワードをハッシュしてソルトしないのはなぜですか?代わりに、それが伝達した場合の欠点は何でしょうか:
username: John
password: Sha256("website.com|john|Secret") =>
"655cd29ded358433da16867b682c21621664d26b9ca493ab224488dffce17050"
多分それは世界で最高の計画ではありませんが、何もないより悪いのですか?
このスキームでは、Webサイトはサインアップしたドメインを追跡する必要があり、ハッシュ関数でユーザー名をすべて小文字に変更して、ユーザー名の大文字小文字がどのように関係なくWebブラウザーが同じパスワードを通信できるようにする必要があります。 。
ハッシュにドメインやその他の会社IDを含めることをお勧めする理由は、Rainbowテーブルを一度に複数のサイトで使用できないようにするためです。
-
更新:私の質問は、JavaScriptでの1回限りの実装ではなく、クライアント側ハッシュのWebブラウザー実装に言及しています。クライアント側ハッシュの1回限りの実装に依存することは、サーバー側ハッシュに依存することに似ています。つまり、特定のWebサイト/会社/実装がプレーンテキストのパスワードを漏らしていないかどうかを確認することは困難です。これは、主要なWebブラウザーベンダーに負担を移すことです。
欠点は何ですか?複雑さの大幅な増加を除いて、本当に1、これはめったに良いことではありません。また、パスワードフィールドを持つ文字通りすべてのWebサイトの移行コストが高いことも、良いことではありません。
しかし、とにかくその影響を考慮して、コストを上回るかどうかを確認しましょう。このハッシュを処理する方法は2つあります。
どちらの場合も、あなたは何の利点も得ません。悪意のあるクライアントを検討する場合、#1は明らかに誤りであり、#2はパスワードを盗聴し、他の場所でそれを再利用する攻撃者からのみ保護します。しかし、パスワードを再利用するべきではないので、それは不可能であるべきです。キーロガー、フィッシングサイトなど、他にも非常に多くの攻撃方法があります。そのため、自分が所属するWebサイトでパスワードがどのように処理されても、十分に注意する必要があります。
1:実装が回答する必要があるいくつかの質問は次のとおりです。
これは信じられないほど複雑であり、そのすべての複雑さがバグの余地をたくさん追加しています。セキュリティコードでは、これは特に危険です。
これは理にかなっていますが、大規模な集中型の取り組みを調整するにはsome問題があります。 KOLANICHは、リモートパスワード用の非常に気の利いた、さらに安全なプロトコルであるSRPをすでに提案しています。
主な問題は、IT業界全体がすでに機能しているものを変更するように強制するために実際にセキュリティを気にする人がほとんどいないことです。一方、プライバシーフリークは、長いランダムパスワードを持つパスワードマネージャを使用するだけで、同じ結果を得ることができます。
たとえば、なぜDNS、ARP、SMTPが暗号化されておらず、認証もされていないのかなど、多くの同様の質問をすることができます。それが機能し、誰も気にしないので。
レガシーのため。 https://en.wikipedia.org/wiki/Secure_Remote_Password_protocol を実装し、いくつかの変更を加えてWebに適合させることで、ブラウザーに組み込むことが実際に可能です。しかし、業界では、TEEを使用したWebAuthnなどの集中型ソリューションが好まれます。この方法は、ユーザーのプライバシーとセキュリティにとってより有害であり、デバイスを販売する企業にとってより有益だからです。