26

Javaデスクトップアプリケーションにパスワードを保存するための推奨される方法は何ですか?

ユーザーが資格情報を一度だけ入力できるようにし、再度プロンプトが表示されないようにしたい。

個人的なプロジェクトでは、Preferences API を使用してきましたが、これはプレーン テキストで保存するのと変わらないと思います (セキュリティ上の観点から)。

どうもありがとう

編集:

ご提案いただきありがとうございます。質問をあまり明確にしていない可能性があるため、間違いなく混乱があるようです...

仮説的なシナリオを示します。

ユーザー名/パスワードで接続文字列を作成するリモートデータベース用の単純なフロントエンドを作成しているとします。通常、ユーザーは、アプリケーションが起動するたびにユーザー名とパスワードの組み合わせを入力するよう求められます。

そのパスワードを再入力する必要なく (アプリケーションの起動時に自動的に接続する)、そのパスワードをユーザーのマシンに保存する最良の方法は何でしょうか。

一種の「記憶」機能 (それ自体はあまり良い習慣ではないことを私は知っています...)

EDIT2:

皆様、ご回答ありがとうございます。Paŭlo Ebermann は目前の問題について非常に有益であり、Chris Smith のリンクは興味深いものでしたが、JVerstry のリンクを受け入れました。キーストアが私が取っているルートかもしれないからです。

4

3 に答える 3

13

秘密鍵の代わりにパスワードを入れることができるローカル キーストアを使用できます。

編集への回答:

キーストアは、ニーズに最適です。追加の保護が必要な場合は、ユーザーがアプリケーションを起動するときに、すべてのパスワードにアクセスするための 1 つのパスワードをユーザーに求めることができます。次に、アプリケーションの起動時に使用された 1 つのパスワードを使用して、単純なソルト アンド ストレッチ メソッド (暗号化キーを生成する) で保存されたデータベース パスワードを保護できます。

于 2011-08-10T21:30:31.923 に答える
5

Java プログラムが (ユーザーがパスワードを入力せずに) 検索できる方法で何かをコンピューターに保存する方法はありませんが、このコンピューター上の (同じユーザーのアカウントで実行されている) 他のプログラムはそれを取得できません。

なんらかの方法で暗号化して、復号化アルゴリズムをプログラムの復号化キーと一緒に隠すこともできますが (ホワイトボックス暗号化)、攻撃者はプログラムをデバッガーで実行してデータを復号化するだけです。

システムの許可システムを使用することもできますが、攻撃者が Java プログラムと同じユーザー アカウントで実行されているプログラムである場合、これは通常役に立ちません (攻撃者がルート アクセス権を持っている場合は、さらに効果が低くなります)。

パスワードを USB メモリに保存し、使い終わったら取り出すようにユーザーに伝えるのが最善の策ですが、スティックから秘密を読み取っている間に攻撃プログラムが実行され監視されている場合は、これでも実行されます。助けません。

于 2011-08-10T23:46:15.953 に答える
-3

言語に関係なく、これが当てはまると思います:http: //codahale.com/how-to-safely-store-a-password/

要約すると、bCryptハッシュ関数を使用します。

プリファレンスAPIはメモリに依存する実装であるため、JVMベンダーに翻弄されます。Sun / Oracle JVMの場合、データを取得するのは簡単です。ただし、ハッシュして適切なパスワードポリシーを適用すると、非常に安全になります。元のパスワードを特定するのは非常に困難です。

于 2011-08-10T21:15:54.580 に答える