「JAVA(TM)上で開発した認証サービスの実力」
富士ゼロックス株式会社
ISCソリューション開発センター
稲田 龍氏
return
 まず初めに、PKIの概要として、暗号化、電子署名、PKIの応用範囲について広範な説明があった。次に、認証局と認証モデルとして、認証局を構築するために必要な手順や期間などが時系列で示された。以下に富士ゼロックス社が開発したCAと、その開発を通して得た経験を簡潔にまとめる。

 社内公募によってCAの開発が決まり、当初はSSLeay(OpenSSLの前身)の改造から始まり、ソースを分かり易くするためにC++で作り直したが、技術的な可能性の検証が行われた結果、Javaで書き直されることが決定した。それが現在の社内認証基盤として活用されている「Xnet CA」である。

 そもそも、JavaでCAを実装するきっかけとなった理由は大きく分けて2つ挙げられる。まず、マルチプラットフォームであること。2つ目に、セキュリティ系APIが充実していることである。しかし、当時のJavaに組み込まれていたDSAではブラウザの利用に問題がでる上に、RSA公開鍵暗号が含まれていなかった。(Java SDK1.3より含まれる)。暗号の輸出に関しては、「ワッセナー協約」によって厳しく規制されているので、国際版の機能を備えたCAを作成することは難しかった。国際版を考慮すると、暗号ルーチンの差し替え可能なJCE(Java Cryptographic Extensions)互換が望まれた。セキュリティ系APIが充実しているJavaであるが、それは証明書を「使う」フレームワークであり、「作る」しくみが整備されていなかったという問題があった。また、証明書拡張領域の扱いに煩わされたこともあった。このような問題から、最終的には独自に作成することになり、Javaに移行しても数々の困難があった。

 一方で、これからマルチベンダー、マルチドメインの時代になる中で、他のCAがどのような構成になっているかが非常に気になっていた。例えば、自社のCAが発行している証明書が、他のCAによって認識できないような不都合が生じることがないかなどの不安があった。さらに、e-Japan計画が進む中でそのような不都合が生じた場合、新しいCAへの切り替えを迫られるかもしれないという危惧もあり、それはなんとしても避けたいと考えていた。富士ゼロックスとしては、これからCAの事業に積極的に関わっていきたいという思いがあり、JNSAのChallenge PKI2001に参加した。この実験に参加したことで、いろいろな人の考え方かたを吸収することができ、独り善がりになりがちだったCAの実装を改善することができたことが大きな収穫であった。何よりも、助言と経験の共有、即ち失敗の共有の重要性を感じた。

 富士ゼロックス社が開発したCAは「GuruCA」というコードネームをもつエンジンと、SDES証明書発行サービス、CaJanという2系統のユーザインターフェースを持つ。SDES証明書発行サービス(Secure Document Exchange Services)は、PKI認証をベースとしたASPサービスである。厳密な運用設計、管理の下、2001年11月にサービスを開始した。JAVA Application Server上で稼動し、XnetCAについてはBS7799を取得している。また、EJB1.1ベースであり、Frond-End、Application、Databaseの3階層モデルで作られている。

CaJanは、一般に商品として公開する予定がない実験用プラットフォームであり、プロファイルの切り替えが簡単にできるなど、作り変えやすい構成になっている。JNSA Challenge PKI2001に参加しており、RFC2459、RFC3280準拠のプロファイルを使用している。CaJanでの経験や失敗を踏まえ、それらの成果をSDESに活かすしくみになっている。

GuruCAは、JCE相当部、基盤機能部(GuruCA Core)、拡張機能部(GuruCA Advanced)の3つに機能分割されている。当初から3つに機能分割する予定があったわけではなかったが、3年の年月のうちにこのような形に落ち着いた。パフォーマンスについては、Javaはインタープリタであってもネイティブと同等のスピードがでる。しかしMD5/SHA1によるハッシュ計算に時間がかかるので、この部分の高速化が望まれる。また、剰余計算などについて、高速な暗号ルーチンが必要である。 今後は、JNSA Challenge PKI2001での経験をSDESへフィードバックし、相互認証やブリッジ認証に対応していきたい。RFC3280への対応は難しくなかった。次はほぼ完了しているCMP/CMC対応後の応用例を考えていきたい。CMCはDH証明書が必須だということだったので、対応させたが利用している例があまりないようだ。さらに、RSA暗号に加えて楕円暗号への対応もしていきたいと考えている。また、JAVA1.4でPath Validationが定義されているので、これを今後どのように使用していくかについて検討中である。

■質疑応答

Q:社内認証基盤XnetCAについてBS7799取得したきっかけ、期間、規格に対応させるために苦労したことは何か。
A:2001年9月に(株)JACOさんからお話があり、取得することにした。BS7799の128のクライテリアの中からやることを宣言し、実行するという作業が非常に大変だった。通常6ヶ月かかるところを、無理をしてなんとか3ヶ月で完了したが、この経験から考えて、やはり6ヶ月は見ておいたほうがよいと思う。本当に必要になるまで取得しないほうが良いのではないだろうか。

Q:JCEの提供はあり得るのか。
A:提供に関しては未定。提供したいのは山々だが、暗号エンジンの評価をどうするかが問題である。出すからにはきちんと評価してから出したい。しかし、社内の品質保証部門に評価できる人がいないので、外部の格付け機関などに出すことも考えている。そうすると、NISTのプログラムに参加する必要がでてくるなど悩ましい状況である。

ここからは私の感想であるが、稲田氏のお話から分かるように、開発には実に様々な障害が立ちはだかるものだという感想をもった。それらは大きく分けて、技術的な問題と法的な問題がある。 Xnet CAの場合、二度の書き換えの末Javaで開発を続けることになったが、便利に思われたJavaにも仮想化が進みすぎているなど苦労することはあった。また法的側面からは、暗号関係には必ず「ワッセナー条約」が絡むことや、BS7799取得に向けての綿密な調整など、労力を必要とすることがある。そのような多忙な中でも、Challenge PKI2001のような大規模な社外プロジェクトに参加することで新たな知見を得られたということは大きな収穫であり、このようなプロジェクトで得た経験が開発に活かされるのだろう。

セコムトラストネット株式会社
TS事業部
ソリューション推進部 技術推進グループ
村山 麻子


bottom_bar