2012-02-13 11 views
1

eTokenデバイスから送信された「my」証明書ストアでx509Certificate2を使用する.NET(c#)アプリケーションがあります。複数のプロセスでeToken PINをキャッシュする方法

証明書を使用すると(データを復号化するか、Web要求のクライアント証明書として使用する)、デバイスのPINを一度尋ねます。その後、キャッシュされ、ユーザーはxx分ごとにパスワード要求に煩わされることはありません。

ここでは、すべてが証明書を使用する複数のプロセスがあります。 これらの各プロセスは、デバイスPINを要求します。 (キャッシュはプロセスごとにあるようです)。

簡単な方法はありますか? PINを何度も要求せずにすべてのプロセスがトークンにアクセスできるように、どこかにキャッシュすることはできますか?

答えて

2

注意:この種の「PIN」キャッシングを行うことは本当に悪いセキュリティ実践です。システムのメモリを監視して攻撃者がPINに関する情報を得るのを避けるため、資格情報はできるだけ短時間だけメモリに保存する必要があります。一般に、これはマシンへのローカルアクセスを必要としますが、システム管理者がPINにスヌーピングすることを望まないので、これは非常に関連性の高い脅威とみなされます:)

しかし、 1秒おきにPINを入力する必要があるユーザーのためのPITA。非常に多くのセキュリティと同様に、セキュリティとユーザビリティの間にはトレードオフがあります。

多くのスマートカードドライバは、気付いたように、この形式のキャッシュを行います。カードには、カード上に2つの証明書/キーがあります.1つは、文書に署名を付けるなどの高いセキュリティ操作とみなされる否認防止キーの使用であり、もう1つは、常に繰り返される雑用のために使用される「認証証明書」サービスで認証すること。通常、非拒否キーにアクセスするたびにPINを再入力する必要がありますが、ドライバは認証キーのPINをキャッシュすることがよくあります。

したがって、実際には特定のユースケースに依存します。操作が非常に重要であると考える場合は、キャッシュを行うことを控えてください。代わりにユーザーを教育してみてください。自分の利益などのためです:)

リスクが許容範囲にあると考えられる場合は、プロセス間でPINを共有するのに最適な任意の形式のプロセス間通信を使用できます。簡単な解決策は、アプリケーションだけが読み書き権限を持つディレクトリに「PINファイル」を作成することです。 PINが必要なときにファイルの存在を確認します(競合状態に注意してください)。 - ファイルがまだ存在しない場合は、PINを尋ねてファイルに書き込んでください。暗証番号の伝達に使用されたゼロでメモリを上書きするようにしてください。

+0

私はこれがセキュリティ上賢明なやり方であることを知っています。 – kclement

+0

アプリケーションは定期的に証明書を使用するバックグラウンドサービスです(約5分ごと)。実際には機能しません。 5分ごとにキーを尋ねる(バックグラウンド)。私は一度(ある種のログオン/スタートアップ)キーを尋ねることを好むだろう。 また、PINにアクセスしていません(また、アクセスしたくありません)。 PINを要求する情報を要求すると、ドライバは質問をポップアップし、私に証明書を返します。私はPINを見ないので、それを格納することはできません。 – kclement

+0

スマートカードを複数のプロセスで同時に使用するのは、灰色の領域です:)しかし、直接PKCS#11に行くだけでなく、ドライバのPINコールバックをいつでも無効にすることができます。これが正しく処理されていれば、これは本当に非倫理的なことは何もありません。しかし、物理的にPINを保存したくない場合は、プロセスではなくスレッドに切り替えることができますか? – emboss

関連する問題