【特集】 PKI対応アプリケーションを検証する

〜JetForm「FormFlow99」
XML対応の電子帳票ソフトは、作成データへの電子署名も可能。そのPKI対応機能の数々を追いつつ、いくつかの認証局製品および認証局サービスバンダから発行される証明書プロファイルが異なる署名/証明書の相互認証や実務への応用などを検証する

吉川満広/池谷千尋
ネットマークス
2001/8/8


 前回(「特集:Acrobat 5.0のセキュリティ」)は、PKI対応アプリケーションの例として「Acrobat5.0」を紹介した。今回は、電子帳票を作成/運用し、XML形式でのデータ交換が容易に行えるJetForm社の「FormFlow99」を題材に、XML文書への電子署名や署名の検証、その使用方法やメリットについて解説していこう。

 FormFlow99とは?

 JetForm社は、1982年にカナダで設立された企業だ。日本法人は1998年にジェットフォーム・ジャパン株式会社として設立され、「FormFlow99」をはじめとした製品を提供している。FormFlow99はJetForm社の中心となる製品で、製品を構成するコンポーネントの1つである電子帳票の設計ツール「FormFlow99 Form Designer」を用いることで、電子帳票の画面デザインからデータベースとの連携などの部分が、Visual Basicライクなインターフェイスで操作できる。そのため、比較的容易に電子帳票を作成/運用可能なのが特徴だ。

 FormFlow99の優れた点は、電子帳票作成ツールであるにもかかわらず、非常に高品質な紙の帳票として印刷もできることにある。これにより、従来の仕事の流れをすべて一度に電子化するのではなく、必要に応じて紙として印刷して使用できるため、無理なく電子化へと移行できるのである。

 FormFlow99は、ゼロアドミニストレーションによるTCOの低減、スケーラビリティを考えた設計、オープンアーキテクチャによるActiveXなどとの環境の統合、電子署名のサポートといったさまざまな特徴を持つ。特に、フォームを使用して作成/入力されたデータは、XMLのタグを持つデータとして出力されるので、ほかのXML対応製品との連携が容易に行える。

 XMLタグへの電子署名

 FormFlow99において、データはXMLで処理される。このXMLのデータはテキストファイルとして出力できる。またFormFlow99では、ここで出力されるXMLデータのタグに対して電子署名を付けることができる。

 XMLのタグに電子署名を行うと、以下のようなことが実現できる。

●改ざん防止
 XMLのタグを指定して電子署名を行うことにより、それまでに入力されたデータの改ざんを防止することができる。例えば、データ入力後に電子署名を行いXMLのファイルとして保存、そのファイルをFormFlow99で開いた場合、電子署名された範囲のデータがフォーム内でロックされ、データを新たに入力できない状態となる

●証明書の確認
 電子署名を付加したXMLデータには、署名者の証明書が含まれる。電子署名付きのXMLデータを受け取った人は、証明書の有効性確認と署名の検証を行うことにより、証明書の送信者の本人性とXMLデータが改ざんされていないこと(有効性)を確認できる

 FormFlow99のXMLデータに電子署名をつけることにより、署名後の改ざんや署名者本人かどうか(成りすまし)の確認ができる。XMLは確かにデータとしての融通性や流通性は高いが、データがプレーンなテキスト形式であり、内容の確認が簡単に行えてしまうため、改ざんが容易である。改ざんや成りすましを電子署名により防止し、安全なデータの交換ができるようになるのだ。

 電子証明書にはどんな種類がある?

 電子証明書のフォーマットはX.509の規格で規定され、証明書の使用方法としてIETF RFC2459で定義されている。証明書を発行するベンダ各社(もしくは認証局)により、その使用方法(証明書プロファイルの設定)が証明書ポリシーにより微妙に違っている。ここでは、各社の違いについて簡単に説明してみたい。

●Entrust
 Entrustの証明書は、Entrust社のEntrust/Authorityより発行されたものであり、今回の検証では、同一ドメインの認証局から発行されたデジタル証明書を使用するモデルを想定した。Entrustでは、次の2つの証明書をFormFlow99に対して発行できる。

Entrust/Entelligence
 Entrust/Entelligenceは、Entrust社のPKI製品でもクライアント環境を提供するものである。この製品ではデスクトップで使用するアプリケーションの暗号化や電子署名のほかに、鍵と証明書のライフサイクル管理やPC内のファイルの暗号化などができるようになっている。大きな特徴としてEntrust/Entelligenceは、デュアルキー・ペアをサポートしており、署名用と暗号用にそれぞれ異なるキーペアを使用し、FormFlow99などのEntrust-Readyアプリケーションに暗号/署名機能を提供し、自動的にCRLのチェックや証明書の有効性確認までを行う
Entrust/WebConnector
 Entrust/WebConnectorは、Internet Explorer(IE)やNetscape NavigatorなどのWebブラウザやOutlookExpressなどの電子メールクライアントに格納される証明書を発行する。そのため、ほかのアプリケーションとの親和性も高いが、Entrust/Entelligenceで実現されていたいくつかの機能は使用できない

●VeriSign
 VeriSignの証明書は、VeriSignのWebサービスから購入することで発行される。同社サイトより購入したWebブラウザ用のデジタル証明書は、IEに取り込むことにより署名を行える。デジタル証明書の発行サービスとしては最もポピュラーな存在であり、デジタル証明書の普及度から考えた場合、VeriSignの証明書を利用したデジタル署名は外すことができないテーマである。

●Baltimore
 Baltimoreの証明書は、Baltimore社のUniCERTより発行されたものである。同社からは証明書の発行サービスやPKIホスティングなど多彩なサービスが提供されているが、今回の検証では組織内の認証局から発行されたデジタル証明書を使用するモデルを想定した。Baltimoreの証明書もほかと同様に、IEにデジタル証明書を取り込むことにより署名を行える。

 FormFlow99で電子署名を行う

 FormFlow99で電子署名を行う場合は、署名用のタグを作成し、署名の範囲を指定しなければならない。ここでは、実際にフォームに対してどのように署名が行われるのかを解説しよう。FormFlow99の電子署名には2種類のインターフェイスが用意されている。

  • Entrust
  • CryptoAPI

 これらのインターフェイスはそれぞれ、

  • Entrust → Entrust/Entelligence
  • CryptoAPI → Entrust/WebConnector、VeriSign、Baltimore

で使用されることとなる。

 Entrust/Entelligenceによる電子署名

 では実際に、FormFlow99を使ってフォームを作成してみよう。今回は一般に「車庫証明」と呼ばれている自動車保管場所証明書を例に取り、フォームを作成する。FormFlow99で申請用フォームと受付用フォームを作成し、Entrust/Entelligenceを利用して申請用フォームに入力されたXMLデータに署名を行う。次に、受付用フォームで先ほど署名したXMLデータを読み込んで署名の検証を行い、今度はCryptoAPIを利用してXMLデータに署名を行ってみる。

 まず、FormFlow99を使用して申請用フォームを作成する。

画面1 FormFlow99を起動したところ。VBライクなインターフェイスでフォームの作成が行える(画面をクリックすると拡大表示します

 FormFlow99には、Visual Basicライクの開発ツールが用意されている。フォーム上に画面のようにボタンを配置し、コードを記述することができる。ここでは電子署名を行う「署名」ボタンを配置し、電子署名が行われた入力データをXMLファイルとして保存するコードを記述する。

リスト1 「署名」ボタンに記述するコード

 署名を行うタグを決定するには、フォームに配置したSignature Object(ここではSign01)プロパティを開き、署名したいオブジェクトを「フォームオブジェクト」から「署名されたオブジェクト」へと追加する。また署名にEntrust/Entelligenceを使用する場合は、「セキュリティプロバイダ」の項目を「Entrust」に設定する。この「セキュリティプロバイダ」にてEntrustかCryptoAPIかを選択できる。

画面2 Signature Object(ここではSign01)のプロパティを開き、署名したいオブジェクトを一覧に追加する(画面をクリックすると拡大表示します


 CryptoAPIによる電子署名

 次に、もう1つのフォームとして署名検証用のフォームを作成する。検証用のフォームでは、CryptoAPIを使用している。

画面3 作成した署名検証用フォーム。このフォームではCryptoAPIを使用している(画面をクリックすると拡大表示します

 署名検証用フォームには「署名データオープン」「署名検証」「受付(署名)」の3つのボタンを作り、それぞれ以下のコードを記述する。各ボタンの動作は以下のとおり。

  • 「署名データオープン」
    申請者が申請内容に電子署名を行い、XML形式で保存したファイルを開く

  • 「署名検証」
    申請者の署名検証を行う

  • 「受付(署名)」
    受付者の電子署名を付加する

リスト2 「署名データオープン」ボタンのコード

リスト3 「署名検証」ボタンのコード

リスト4 「受付(署名)」ボタンのコード

 受付者の署名を行うタグは、フォームに配置したSignature Object(ここではSign02)プロパティを開き、署名したいオブジェクトを「フォームオブジェクト」から選択し、「署名されたオブジェクト」へ追加する。受け付けの場合はCryptoAPIを使用するので、「セキュリティプロバイダ」の項目を「CryptoAPI」に設定する。

画面4 画面2のときと同様に、Signature Object(ここではSign02)に署名したいオブジェクトを追加する(画面をクリックすると拡大表示します

 CryptoAPIを通じて署名を行う場合、あらかじめIEに証明書が格納されている必要がある。使用したい証明書がWebブラウザに格納されているかを確認するには、IEのツールバーから「ツール」→「インターネットオプション」→「コンテンツ」タブ→「証明書」ボタン→「個人」タブの順で選択すればいい。ここに表示されている証明書であれば、署名に使用することができる。

画面5 CryptoAPIで使用したい証明書があらかじめ格納されているか、IEのメニューで確認する(画面をクリックすると拡大表示します


  「署名の有効性を検証する」へ


Index
特集:PKI対応アプリケーションを検証する
FormFlow99でXMLデータに署名(Page-1)
・FormFlow99とは?
・XMLタグへの電子署名
・電子証明書にはどんな種類がある?
・FormFlow99で電子署名を行う
・Entrust/Entelligenceによる電子署名
・CryptoAPIによる電子署名
  署名の有効性を検証してみよう(Page-2)
・署名を行った場合の動作を確認する
・改ざんされた場合の動作はどうなる?
・認証局の相互運用を検証する
・FormFlow99の応用例を考える
 


Security&Trust フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Security & Trust 記事ランキング

本日 月間