デスクトップアプリケーションでのユーザーパスワードの保護(Rev 2)

StackOverflow https://stackoverflow.com/questions/225838

  •  03-07-2019
  •  | 
  •  

質問

Twitterクライアントを作成しています。ユーザーのログイン情報を保護するさまざまな方法を評価しています。

重要:他のアプリケーションからユーザーのデータを保護する必要があります。たとえば、ボットがユーザーのデスクトップで実行されるアプリケーションからTwhirlパスワードまたはHotmail / GMail / Yahoo / Paypalを盗み出した場合にどうなるかを想像してください。

明確化:以前に「重要な」部分なしでこれを尋ねましたが、stackoverflowのUIは後でQ / A会話内に詳細を追加するのに役立ちません。

  • ハッシュは明らかにそれをしません
  • 可逆的な方法で難読化することは、指の後ろに隠れようとするようなものです
  • プレーンなテキストが聞こえ、おそらく無差別です
  • 毎回パスワードを入力するようユーザーに要求すると、アプリケーションが面倒になります

任意のアイデア?

役に立ちましたか?

解決

これはcatch-22です。毎回ユーザーにパスワードを入力させるか、安全でない状態(難読化、暗号化など)で保存します。

これを修正する方法は、OS Xのキーチェーンなど、組み込みのパスワードマネージャーを組み込むオペレーティングシステムを増やすことです。そうすれば、パスワードをキーチェーンに保存するだけで、OSはそれを安全に保ち、ユーザーは1つのマスターパスワードを入力するだけで済みます。 OS X上の多くのアプリケーション(Skypeなど)は、キーチェーンを使用して、まさにあなたが説明していることを実行します。

しかし、おそらくWindowsを使用しているので、難読化と暗号化を行ってください。パスワードを盗むボットについて、あなたは少し妄想的かもしれません。アプリケーションに大きなユーザーベースがない場合、誰かがそれをターゲットにし、特にパスワードを盗もうとする可能性はかなり低くなります。それに加えて、被害者のファイルシステムへのアクセスも必要です。その場合、おそらくウイルス/ワームに感染しており、より大きな問題を抱えています。

他のヒント

ここに大きな画像が欠けていると思います:

デスクトップが危険にさらされている場合、あなたはF#*%EDです!

プログラムからパスワードを盗むには、システム上で管理者としてウイルスを実行する必要があります。ウイルスがそれを達成した場合、あなたのプログラムからパスワードを盗むことは、それがしたい悪意のあるもののリストにずっと下がっています。

プレーンテキストで保存し、ユーザーに知らせる

そのようにして、どのレベルのセキュリティを達成したかについての誤解はありません。ユーザーが苦情を申し立てる場合は、Webサイトに公開されている定数をxemすることを検討します。ユーザーから苦情が続く場合は、「隠す」コードの定数を使用して、セキュリティが悪いことを伝えます。

ユーザーが悪意のある人々を箱から出しておくことができない場合、所有しているすべての秘密データは実質的に 知られています。暗号化されているかどうかは関係ありません。そして、もし彼らが邪悪な人々を締め出すことができるなら、なぜ平文でパスワードを保存することを心配するのですか?

もちろん、ここで自分のお尻を話すことができます。パスワードをプレーンテキストで保存すると、パスワードを難読化して保存するよりもセキュリティが低下することを示す研究がありますか?

Twitterクライアントを作成している場合は、そのAPIを使用します

Twitterには非常に優れたドキュメントがあるため、クライアントを作成する前にすべてを読むことをお勧めします。この質問に関連する最も重要な部分は、パスワードを保存する必要がなく、を保存することです代わりにOAuth トークン。 xAuth ステージを使用してOAuthトークンを取得し、他のTwitter APIを使用する必要があります。必要に応じて、このOAuthトークン。

  

xAuthは、デスクトップおよびモバイルアプリケーションが   OAuthアクセストークンのユーザー名とパスワード。一度アクセストークン   取得された場合、xAuth対応の開発者はログインを破棄し、   ユーザーに対応するパスワード。

パスワードで逃げることができる場合、パスワードを保存することはありません

OAuthを使用して最悪の事態が発生するのは、サードパーティ(ブラックハットハッカー)がそのTwitterアカウントにアクセスするが、パスワードではないことです。これにより、複数のオンラインサービスに同じパスワードを単純に使用するユーザーが保護されます。

何らかのキーチェーンを使用する

最後に、OSXのキーチェーンなどの既成のソリューションを使用して機密のOAuth情報を保存する必要があることに同意します。侵害されたマシンは、現在ロックされていないキーチェーンの情報のみを公開します。これは、マルチユーザーシステムでは、ログインしているユーザーのみがキーチェーンが脆弱になることを意味します。

その他の損傷制限

「セキュリティのベストプラクティス」のためにGoogleを見逃したことがあるかもしれません。関連する可能性のあるものを読み始めます。

編集(finnwが希望する一般的なケースソリューションに対応)

ユーザーの入力なしで、オンラインサービスにアクセスしたい。これは、通常、キーチェーンのようなものを介して、認証資格情報へのユーザーレベルのアクセス制御を最大で持つことを意味します。

OSXキーチェーンを使用したことがないため、SELinuxについて説明します。 SELinuxでは、これらの認証資格情報がプログラムにのみ与えられるようにすることもできます。また、OSレベルのものを使用し続ける場合、他のプログラムがプログラムを模倣していないことを確認して、ブートから暗号化までのすべてのプロセスに署名することもできます。これは一般的なユーザーシステムを超えており、このレベルのセットアップを考えると、ユーザーが危険にさらされるほど素朴ではないこと、またはシステム管理者が十分な能力を持っていることを保証できます。このレベルでは、これらの資格情報を保護できます。

これらの資格情報の保護にそれほど進んでいないと仮定すると、システムが危険にさらされたと想定できます。この時点で認証資格情報が危険にさらされ、ローカル側でこれらの資格情報を難読化/暗号化しても実際のセキュリティは追加されず、その一部またはすべてがサードパーティのサーバーに保存されません。これは、ユーザーの入力がない場合、プログラムがこれらの資格情報を取得するためにブートストラップする必要があるため、簡単にわかります。あなたのプログラムが入力なしでそれを行うことができるなら、あなたの難読化/暗号化/サーバープロトコルをリバースエンジニアリングした人もそうすることができます。

この時点では損傷の制限です。パスワードを認証資格情報として保存しないでください。 OAuth、Cookieセッション、ソルトハッシュなどを使用します。これらはすべて、過去のある時点でパスワードを知っていることを証明したことを表す単なるトークンです。優れたシステムでは、アクティブなセッション中にこれらのトークンを失効させたり、時間切れになったり、新しいトークンと定期的に交換したりできます。

トークン(それがどのような形式であっても)には、他の場所でそれらを使用する能力を制限する追加の非ユーザー入力認証情報を含めることもできます。たとえば、ホスト名やIPアドレスをカプセル化できます。これは困難です

さらに熟考すると、方法を見つけたと思います。アプリケーションデスクトップアプリケーションにASP.net認証を使用し、資格情報をオンラインで保存し、Internet Explorerのパスワードマネージャーにこのセカンダリペアまたは資格情報のローカルキャッシュを処理させます。

最初のログイン時にFacebook-APIのような形式で認証する必要があります。

わかりません...暗号化がダメなのはなぜですか?大きなキーを使用して、マシンのキーストアにキーを保存します(Windowsの場合)。完了、完了。

OSX:キーチェーンを使用

Windows:CryptProtectDataおよびCryptUnprotectDataを使用

Linux:GNOMEキーリングとKDE KWalletを使用

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top