2011-12-16 10 views
3

私は、ASP.NET MVCサイトに接続されているクライアントがプライベートキーでブロブに署名して解読する方法が必要であるという難しい状況があります。秘密鍵の素材解読の場合、これらは暗号化されたセッションキーです。サーバーは、ユーザーの秘密キーではなく、セッションキーを参照することができます。リモートサイトとクライアントのプライベートキー

つまり、私はブラウザにいくつかのコンテンツを提示し、クライアント上のハードウェアトークンと通信するいくつかのjavascript(またはJavaアプレット、またはSilverlightなど)を実行し、結果を返します。サーバーに送信します。

これはクライアント側の認証ではありません。私は単に証明書を使ってIIS経由で認証する必要はありません。ハードウェアトークンは、HID OmniKey USBリーダーです。

利用可能なオプションの私の理解では、以下のとおりです。

1. Mozilla Javascript Crypto - これは、最適経路のようです。 Firefoxはさまざまなスマートカードのイベントや機能をリモートサイトに公開しているようだ。私はテキストに署名する方法を見ますが、ブロブを解読することは一切ありません(最大の目標)。 PKCS#11モジュールをロードする方法があるようですが、それ以降はドキュメントが停止するようです。

2.高い信頼性を持つSilverlight - Silverlightと.NETに精通しているため、これが第2の優先ルートです。 Silverlight 5にはP/Invoke機能がありますので、いつもPC/SCモジュールを呼び出すことができますが、これにはブラウザから実行する必要がありますが、これは実行できません。高い信頼性を備えたブラウザでSilverlightアプリケーションを実行することに関するいくつかの記事があるようですが、これはグローバルな設定なので、他のアプリケーションのセキュリティを低下させたくありません。

3. ActiveX - ActiveXコンポーネントは、PC/SCモジュールとやりとりすることができますが、これはInternet Explorerのみのソリューションです。必要なブラウザを選択しなければならない場合は、FirefoxまたはChromeを好むでしょう。

3. Firefox/Chrome拡張機能 - Firefox XPCOMはC++であり、PC/SCライブラリを直接呼び出すことができ、拡張機能はリモートサイトのスクリプト/ DOMと対話できます。リモートサイトがFirefoxの拡張機能をどのように起動させるかはわかりません。言い換えれば、遠隔地のサイトはどのようにして拡張機能に「ok、サインする時です」と言うのでしょうか?このルートの1つの例はXSignです(ただし、ハードウェアトークンは使用しません)。

4. Javaアプレット - 最終的にはこれが唯一の方法かもしれません。私はいくつかの例/ガイドを見つけましたが、私はJavaに慣れていません。 Java Applet for Signing with a Smart Card。この場合、トークンと通信して結果をサイトに投稿できる単純なアプレットです。

他にもオプションがありますか?私はオプション(1)、Mozilla Javascript Cryptoが最良のアプローチだと信じていますが、ドキュメンテーションはまばらです。ご指摘ありがとうございます。

+0

同じ問題 – jle

答えて

0

私はすべてのオプションを事実上調べました。最後のオプション(Java Applet)は、あなたのケースに最も適しており、実装が簡単です。欠点は、JRE(Java Runtime Environment)がすでにクライアント側にインストールされていて、ブラウザでうまく動作することです。ユーザーは、最初の実行時にスマートカードに接続するためにアプレットに許可を与えなければなりません。

BTW PKCS#7を使用する場合は、Bouncy Castleを使用できます。 JDKには標準APIはありません。

PS:暗号化にJavaScriptを使用しないでください。 Javascript Cryptography Considered Harmful

0

おそらく、クライアントにネイティブアプリケーションをダウンロードさせてインストールするだけでもいいかもしれません。そのアプリケーションを使用して、認証を行い、サーバーとセッションキーをネゴシエートできるようにすることができます。アプリケーションは起動URLにセッションキーを持つブラウザを起動できます。 "ネイティブ"アプリはおそらくそのネイティブではないかもしれません - javaや.net(あなたが窓だけの場合)やPythonなど。

関連する問題