web-dev-qa-db-ja.com

パスワードを再利用し、1つのソースから公開された場合でもパスワードを保護するにはどうすればよいですか?

すべてのサーバーshould少なくとも私の資格情報をhash(password + salt) + saltとして保存し、安全でよく知られたhash関数とsalt私にとってユニークで、安全で有名なソースから生成されました。

問題は、サーバーはそれを行うべきですができないかもしれないということです。そのため、ユーザーとして私はそれらを信頼できません。

サーバーに送信する前に自分のパスワードにできることを探しています。たとえば、サーバーがプレーンテキストを保存している場合でも、他のサーバーのパスワードのセキュリティが損なわれることはありません。

たとえば、サービスを_"Facebook"_または_"Amazon"_にして、hash(password + service)をサーバーに送信することを考えていました。このように、誰かがそのサービスからプレーンテキストでhash(password + service)を保存した場合、それはまるで私のサービスのパスワード+ saltのハッシュを見つけた場合と同じです。

私はすでにその考えに関する問題を認識しています。誰かがサービスごとにRainbowテーブルを作成して、サービスを塩として使用することは役に立たない可能性があります。

私はルールを知っています独自の暗号化/プロトコルを発明しないでください、それがクライアントが自分自身を保護するための既知のプロトコルが存在するかどうかを知りたい理由ですか?

22
Sinder

あなたがそもそもあるはずのない問題を解決しようとしている:Password Reuse

コンセプトはシンプルです。あなたは「良い」パスワードを考え、それをすべてに使用します。銀行口座、オンラインショッピング、メールプロバイダーなど.

問題は、それらのいずれかによってリークされた場合、他のすべてのアカウントが潜在的に危険にさらされていることです。 これは完全に不要なリスクです!

私の提案したスキームはどうですか?

あなた自身は、車輪を再発明しないでくださいと言いました。実際にそれを行う場合は、ハッシュを計算するアプリケーションを作成するか、ハッシュを自分で計算して保存する必要があります。

クレデンシャルストレージの問題を解決するアプリケーションはすでに存在しており、それらの方法で、より優れた働きをします。オフラインパスワードマネージャー

オフラインパスワードマネージャーの方が優れているのはなぜですか?

本当にランダムで一意のパスワードを生成するためです。これに暗号を導入する必要はありません。私の電子メールアカウントのパスワードを何らかの方法で文字列「gmail.com」を含むパスワードに関連付ける必要はありません。

SN2\ZJ2Cw92DQx^{$OmqAC_P'xR|Md)[hunter2+gmail.comのMD5合計よりも間違いなく優れたパスワードであるためです(ご参考までに、01f9a94a0febf268495d08f5960e7f05です)。

95
MechMK1

この問題に対する確立された解決策は、パスワードマネージャとともに、さまざまなWebサイトにさまざまなパスワードを使用することです。そうすれば、ホイールを再発明する必要はありません。

ルールがあなた自身の暗号/プロトコルを発明しないことを知っています、それがクライアントが自分自身を保護するための既知のプロトコルが存在するかどうかを知りたい理由です?

すべての問題を技術的で複雑すぎるソリューションで解決する必要があるわけではありません。
パスワードを再利用しないことは、エレガントなソリューションです。

23
Vipul Nair

私はかつてあなたが提案したものとほとんど同じように機能するブラウザ拡張を使用していました。 (それは私の実際のパスワード+サイトのURLを取り、それらを一緒にハッシュし、そこからパスワードを生成しました)。それは素晴らしかった...彼らがデータベースを漏らしたのでeBayが私のパスワードを変更させたまで。その時点で、どのサイトが1つのパスワードを使用し、どのサイトが別のパスワードを使用したかを覚えておく必要がありました。

追加の問題は、「パスワード」がプレーンテキストで保存されているサイトがある場合、攻撃者が私のパスワードがどのように生成されたかを認識し、クラックした可能性があることです。

最後の問題は、Amazon.de、Amazon.co.uk、Amazon.comなど、すべてパスワードを共有する必要があるサイトです。

強力でランダムに生成された(ダイスウェア)パスワード(および私の重要なアカウントの2FA)で保護されたパスワードマネージャー(LastPass)に切り替えました。

ルールがあなた自身の暗号/プロトコルを発明しないことを知っています、それがクライアントが自分自身を保護するための既知のプロトコルが存在するかどうか知りたいのはなぜですか?

セキュリティエンジニアリングスペースで発生している問題は、 "Greedy Password"モデルとして知られています。アクセスする各Webサイトは、それがWeb全体で唯一のサイトであると考えており、複雑なパスワードの管理/記憶を依頼しても問題ないと考えています。 Peter GutmannのEngineering Securityも参照してください。

@ MechMK1が示すように、パスワードマネージャーを使用できます。問題は、パスワードの問題を解決し、管理を少し簡単にすることです。それでも、ある時点で実際のパスワードを使用する必要があります。リスク管理フレームワークでは、リスクは低減されていますが、排除されていません。

重要でないすべてのアカウントには、破棄パスワードを使用する必要があります。私は個人的に Strong Random Password Generator を使用して、貪欲なサイトごとにランダムな32バイトのパスワードを生成します。ユーモラスなことに-病的な種類の方法で-一部のサイトは、長いまたは複雑なランダムパスワードを処理できません。一部のサイトでは、より弱いパスワードを提供しています。

サイトにログインすると、パスワードを必要としないサイトのトークン(Cookie)が提供されます。パスワードを再入力する必要がある場合は、ブラウザに資格証明ストアから入力させます。

パスワードが資格情報ストアにない場合は、「パスワードのパスワードの回復」プロセスを実行してください。サイトからメールが送信されます。このプロセスを使用して、別の使い捨てパスワードを設定できます。期限切れのCookieには常に使用します。

回復プロセスの電子メールで送信されるリンクは、「自己認証URL」として知られています。 Pythonは類似のパッケージを使用してパッケージを認証します。PeterGutmannのEngineering Securityも参照してください。

いくつかのアカウントは、実際のパスワードが必要になるほど重要です。たとえば、企業のパスワードと{Gmail | Yahoo | Hotmail | Apple | Microsoft | etc}のメールアカウントのパスワード。彼らのために、強力なパスワードを使用し、それをなくしたり忘れたりしないように書き留めてください。次に、パスワードを財布や財布に入れます。さらに重要なのは、重要なアカウントに2FAを設定して、攻撃者がパスワードとOTP /トークンの両方を必要とするようにすることです。

Spotifyなどの一部のサービスでは、パスワードをすべて廃止することを検討しています。彼らは認証のために「パスワード回復プロセス」を採用しています。ログインするときは、メールアドレスを入力すると、トークンのリンクが送信されます。パスワードは不要になりました。必要なのはメールアカウントだけです。

一番の脅威はネットワーク攻撃者であり、モニターを通過してポストイットノートを読み取ることができませんでした。パスワードマネージャーまたはブラウザーの資格情報ストアに侵入した場合は、使い捨てのパスワードを好きなだけ収集してもらいます。


サーバーに送信する前に自分のパスワードにできることを探しています...サーバーにハッシュ(パスワード+サービス)を送信することを考えていました

これらの種類のこと(リスク分析、攻撃モデリングなど)を実行したい場合は、Peter GutmannのEngineering Security。彼の博士論文はセキュリティとユーザー行動を研究しました。彼の本は、より安全でより安全なシステムを構築するための治療法です。

2
user29925

私はあなたの推論の暗号の側面だけに答えます。ステートレスマスターパスワードを持つことのセキュリティへの影響については、他の回答を参照してください。

概念的には、あなたのアイデアは良いです。ハッシュOracle関数が部分的に同一の入力に対して独立した出力を持っているランダムOracleモデルでは正しいでしょう。ただし、現実の世界では、ハッシュ関数には制限があり、拡張攻撃に対して脆弱になる可能性があります。

ここでのリスクは、攻撃者が侵害されたサービスの出力H(key + service1)を盗み、完全に回復する必要のないH(key + service2)を生成するより効率的な方法を見つける可能性があることです。 password

このため、プリミティブとしてhash(key + service/salt)を使用しません。代わりに、 メッセージ認証コード 関数、MAC(key, service)を使用します。 MAC機能は、この問題を防ぐように特別に設計されています。

2
b0fh

https://getvau.lt/ はあなたの質問に正確に答えるようです、それはあなたのパスワードをサイトの名前でハッシュし、各サイトにユニークなパスワードを与えますが、1つだけを覚えることができます。

個人的にはパスワードマネージャーをお勧めしますが、主張した場合...

0
Jamie Kitson

他の人があなたがあなたのパスワードを再利用してはいけないことを言ったように、しかし私はあなたがあなたのIDを再利用してはいけないことも付け加えます。作成があなたの管理下にある場合は、それぞれにランダムなものを使用してください:-

サーバー1、ID:bluecanary81パスワード:isoudi£&8r902)38rficsu78
サーバー2、ID:tuliptop19パスワード:uiouew893£*(2dferff $()_ 5

などなど.

システムがメールアドレスを要求する場合は、独自のドメインを取得し、サーバー1には[email protected]を使用し、サーバー2には[email protected]を使用します。

そうすれば、誰かがあなたのクレデンシャルを取得したとしても、他のシステムにさらされることはありません。

0
Alan Dev

あなたが自問しなければならない質問は、何を達成しようとしているのですか?

あなたはあなたがハッシュする一意のパスワードを持ちたいと言いました:

Hash(Password + Service)結果のハッシュは、使用されるアルゴリズムに応じて(ヒント:独自のアルゴリズムを作成しないでください)、おそらく32文字の長さになります。

最初の問題は、次のとおりです。ウェブサイトで32文字の長いパスワードを使用できない場合はどうなりますか?

2番目の問題:さまざまなWebサイトごとにこれらの長いパスワードを覚えておくつもりですか?それらをどこかに保存することを計画している場合は、パスワードマネージャーを使用して10文字の長さの一意のランダムパスワードを作成し、他のWebサイトでは使用しない方が簡単で安全です。

これらの32文字の長さのパスワードを覚えておくことを計画している場合でも、固有の10文字のパスワードを覚える方が簡単です。

私の最初の質問に戻るために:あなたは何を達成しようとしているのですか?

データベース内のパスワードをソルトおよびハッシュすることは、次のようなセキュリティの層です。

  • データベースが危険にさらされている場合、ハッカーは元のパスワードを見つけるのに苦労するため、すべてのWebサイトで同じパスワード(または小さなバリエーション)を使用した場合、他のサービスの他のアカウントを危険にさらすことはできません。
  • しかし、各Webサイト/サービスで異なるパスワードを使用している場合、誰かがサイトのパスワードを取得しても、彼はそれをあまり使用できないため、気にする必要はありません

攻撃者が使用しているサービスをサイレントに侵害し、フルアクセス権がある場合、セッションIDを盗んであなたになりすますことができます。攻撃者はアプリケーションの動作を変更して、ハッシュ化する前にクリアテキストのパスワードを送信し、ハッシュ化したパスワードを変更することができます。データベースで自分のハッシュ化パスワードにログインし、自分のパスワードでログインし、DBのパスワードをハッシュ化パスワードに戻します...彼は基本的にシステムを所有しており、あなたはそれについて何もできません。

パスワードをハッシュ化してソルト処理することにより、使用しているサービス/サイトはパスワードを保護しようとせず、他のアカウントが侵害された場合に備えて他のアカウントを保護しようとします。

0
Maxime