2

S/MIME で電子メールに署名するアプレットを作成しようとしています。

明らかに、必要なものだけを入れた小さな瓶を 1 つ作りたいと思っています。明らかに、これを行う Java の方法には、神聖な署名付きの巨大な Bouncy Castle JCE jar を配置する必要があります。

問題は、JCE に触れずに S/MIME を取得し、「認証」「プロバイダー」について文句を言わせる最も簡単な方法は何ですか? JCE に依存しない S/MIME 実装があるのではないでしょうか? JCE に触れずに、軽量 API を使用して Bouncy Castle S/MIME を使用することは可能でしょうか? 多分他の方法はありますか?

Sun が承認するかどうかに関係なく、純粋な Java オープン ソースの暗号化アルゴリズムが機能することを妨げるものは何もないことは明らかです。

もちろん、Bouncy Castle の純粋な Java JCE 実装を取得し、そのパッケージの名前を java.security1 に変更し、必要な変更を加えることで、いつでも初期段階で醜い状態にすることができますが、この方法は今のところあまりにも苦痛に思えます。

更新Bouncy Castle を直接使用する際の現在の問題: キーストアからキーをロードしようとしていますが、これには SecretKeyFactory の使用が含まれ、Bouncy Castle ビルドが拒否されます。

4

2 に答える 2

2

BC S/MIME は CMS パッケージ上に書かれているため、質問は実際には CMS パッケージを変更することに委ねられ、すべての暗号化が軽量クラスを使用して行われます。

Bouncy Castle の .NET バージョンでは、似たようなことが既に行われ、多かれ少なかれ成功しています。CMS が JCE または軽量のいずれかで動作できるように、Java バージョンをリファクタリングしようとしています (確かにそれは遅いプロセスです)。同じ問題が BC API の他の部分にも影響します。たとえば、PKCS#12 キーストアが JCE プロバイダーに組み込まれている、OpenPGP パッケージが JCE に書き込まれているなどです。これらの .NET ポートは、それらを軽量 API に書き直しました。

ただし、問題はおそらく一般的なケースよりも単純です。おそらく、CMSSignedDataGenerator とそれをサポートするクラスだけが必要です。おそらく、addSigner または generate の無数のバリエーションをすべて必要とするわけではありません。事前にダイジェスト/署名アルゴリズムを決定するだけであれば、すべてのプロバイダーのものを、特定の軽量実装へのハードコーディングされた呼び出しに簡単に置き換えることができます。

キーストアの代わりに、単一の秘密鍵を PKCS#8 ファイル (おそらく PEM エンコード) に格納するだけで済むかもしれません。証明書についても同様です。

于 2010-02-13T07:01:59.417 に答える
1

JCE を使用せずにメッセージに署名するのは非常に簡単です。本当の問題は、PKCS#12 キーを読み取ることでした。

私はこれをしました: * JDKPKCS12KeyStore クラスをコピーしました。* どこでも Security.getInstance() を bcProvider.getService().newInstance() (Spi-s を返す) に置き換えました * これらの Spi-s (BC ソース内) で、必要なメソッドを保護ではなく公開にしました。

ハックのように見えますが、実際には機能しているようです。

于 2010-02-16T14:49:37.990 に答える