場合によっては、最初のタイマーとしてキー/パスワード/証明書を確立する必要があり、次にクライアントとして、このキー/パスワード/証明書を使用して認証を受ける必要があります。したがって、キー/パスワード/証明書はクライアント側に保存する必要があります。
このキーを保護する方法は?
もちろん、ハッシュすることはできますが、再度ログインするには、ハッシュされた値ではなくキーが必要です。
上からのコメントを考えると、これは可能ですが、非常に複雑であり、多くの落とし穴があります。
まだそれほど一般的ではありませんが、 CardSpace(nee InfoCard) を調べることを強くお勧めします。基本的に、これはあなたが探しているものの非常に安全な実装と追加の利点を提供します(たとえば、ユーザーは誰にどの情報を送信するかをより詳細に制御できます)。もちろん、トレードオフがないわけではありません。ユーザーはそれに慣れておらず、実装するのが少し複雑です...
クライアント側で機密情報を安全に保存する「正しい」方法は、オペレーティングシステムが提供する機能を使用することです。 KeyChain MacOS Xでは [〜#〜] dpapi [〜#〜] Windowsでは。クライアント側のデータを保護することは難しい問題ですが、場合によっては、いくつかの役立つハードウェア(スマートカードなど)があります。 OSはハードウェアに直接アクセスでき、すでに設定されている場合もあります。また、OSに実装された保護システムは、通常のユーザー認証システムにうまく統合される可能性があります。
理論的な観点から見ると、ソフトウェアだけでできることは多くありません。
難読化。アプリケーションは、不道徳な方法であることが望まれる方法で物事を壊します-しかし、アプリケーションは難読化されたデータを解明できるコードであるため、攻撃者がコードをリバースエンジニアリングしない限り、つまり、長いです。
パスワードベースの暗号化。パスワードから派生した対称鍵を使用して、データを暗号化します。これは、パスワードのエントロピーが高く、適切に「強化」されている場合に安全になります( bcrypt を使用)。それは、OSベースのソリューションがとにかく行う傾向があることです。純粋なアプリケーションの実装の場合、ネイティブで実行できる GnuPG の使用を検討してください(コマンドラインツールを使用すると、gpg -c file
)。
対称暗号 を使用して証明書をローカルで暗号化し、ユーザーにキーとして強力なパスフレーズを選択させる。
したがって、最初にパスフレーズを指定せずに証明書を使用することは不可能になります。