まず初めに、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が定義されているので、これを今後どのように使用していくかについて検討中である。
■質疑応答