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

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

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


 署名を行った場合の動作は?

 それでは実際に、「署名」と「署名の検証」を行ってみよう。FormFlow99で作成したフォームを開き、必要事項を申請用紙に記入する。

画面6 FormFlow99で作成したフォームをIEで開いてみたところ。必要事項を記入して、各ボタンの動作を確認してみよう(画面をクリックすると拡大表示します


●署名

 必要事項の入力後、フォーム上にある「署名」ボタンを押すと、電子署名が開始される。申請にはEntrust/Entelligenceを使用する。「エントラスト ログイン」ダイアログボックスが表示されるので、パスワードを入力しログインする。

画面7 フォームへの署名にはEntrustを使用しているため、署名の際にログイン画面が表示される(画面をクリックすると拡大表示します

 署名が終了したらメッセージが表示される。

画面8 署名が完了するとメッセージが表示される


●署名の検証

 上記で行った署名を検証してみよう。署名検証用フォームを開き、「署名データオープン」ボタンで申請者のXMLデータを読み込む。署名されたデータはFormFlow99でロックされているため、変更はできない。

画面9 次に署名検証用のフォームをIEで開く。署名されたデータはFormFlow99でロックされているため、変更はできないことが分かる(画面をクリックすると拡大表示します

 電子署名の検証を行ってみる。「署名検証」ボタンを押すと署名の検証が行われ、署名の有効性が確認されると、画面10のようなダイアログボックスが表示される。

画面10 署名の有効性が確認されると、上記のダイアログボックスが表示される(画面をクリックすると拡大表示します


●CryptoAPIを利用した受付者による署名

 次に、受付者の署名をCryptoAPIを利用して行う。受付用フォームの「受付(署名)」ボタンを押すとプロファイル選択のダイアログボックスが表示されるので、署名に使用したいプロファイル(証明書)を選択し、署名を行う。ここではVeriSignの証明書を使用する。

画面11 CryptoAPIによる署名では、署名の際にどの証明書を使用するかを確認してくる。ここではVeriSignを選択する(画面をクリックすると拡大表示します

 署名が終了するとメッセージが表示される。

画面12 署名が完了するとメッセージが表示される

 受付署名を確認したいときは、新たに確認用ボタンを作り、以下のようなコードを記述すればいい。ボタンを押すことで確認ができる。

リスト5 受付署名確認用のコード

 確認すると、以下のようなダイアログボックスが表示され、署名の検証ができる。

画面13 画面10の場合と同様に、署名の有効性が確認されるとダイアログボックスが表示される(画面をクリックすると拡大表示します


●署名されたXMLデータの内容を確認してみる

 IEでXMLデータを見ると<Sign01>〜</Sign01><Sign02>〜</Sign02>のところに署名がなされている。実際の署名は <XFASig:SignatureValue> 〜 </XFASig:SignatureValue> に囲まれた部分であり、それ以外のところは署名するタグが指定されている。ここに、署名範囲のハッシュ値と署名者の証明書の内容が記述されている。

画面14 署名の施されたXMLデータを開いてみると、署名用のタグに署名範囲のハッシュ値と証明書の内容が記述されていることが確認できる(画面をクリックすると拡大表示します

 このように、FormFlow99で作成したフォームを利用して、XMLデータの指定したタグへの署名のほか、署名の検証ができる。FormFlow99の現行バージョンでは、CryptoAPIを利用した署名検証において、「改ざんの有無のチェック」「証明書の有効期限チェック」「証明書発行機関の証明書確認」については動作確認が行えたが、「証明書の有効性確認」については動作確認ができなかったことを報告しておく。

 改ざんされた場合の動作は?

 では、これまでに作成したフォームを利用して、データが途中で「改ざん」された場合の動作を見てみよう。XMLでのデータ交換はご存じのとおりテキストデータであり、意図すれば改ざんすることが容易なデータ形式である。従って、電子署名を行わないデータ交換は非常に危険であるということが分かっていただけると思う。ここでは、電子署名を行ったXMLデータを実際に改ざんして、本当に改ざんが検知できるかどうかを試してみる。

 先ほど「署名検証」ボタンのコードを記述したとき、署名の有効性が確認できなかった場合「署名の検証に失敗しました」と表示するようにしたが、実際に動作するかどうかを確認してみる。

 申請用フォームで必要事項を入力した後、署名を行いXMLファイルを作成する。

画面15 申請用フォームに必要事項を記入し、署名を行った後にXMLファイルを生成する(画面をクリックすると拡大表示します

 作成されたXMLファイルをテキストエディタなどで開き、署名された個所を書き換えてみる。ここでは、自動車の大きさを428cmから427cmに改ざんしている。

画面16 生成されたXMLファイルをテキストエディタで開き、自動車の大きさが記述された部分(この場合は <length>〜</length>で囲まれている)の値を変更(改ざん)する(画面をクリックすると拡大表示します

 IEで受付用フォームを開き、「署名データオープン」ボタンで改ざんしたXMLファイルを読み込む。改ざんされていないXMLデータの場合と違い、入力済みのテキストボックスはロックされず、内容の変更ができる。

画面17 フォーム上に改ざんされたXMLファイルを読み込むと、署名されたフィールドにロックはかからず、内容の変更ができるようになっている(画面をクリックすると拡大表示します

 「署名検証」ボタンを押すと、「署名の有効性が確認できない」ときのメッセージが表示されることが分かる。

画面18 署名の有効性が確認できないと、画面13の場合とは異なり、上記のダイアログボックスが表示される

 このように、署名後に改ざんが行われると「その署名が有効でない」ことが分かるため、「何らかの改ざんが行われている」ことが確認できる。改ざんが行われている場合は、署名の確認のダイアログボックスの表示が出ず、FormFlow99は署名検証失敗の通知しかしないため、上記のようなメッセージとなる。

 認証局の相互運用を検証する

 今回の検証では、インハウスの認証局(企業内部に構築される独自の認証局)同士(Entrust/PKIとBaltimore UniCERT)は、双方向で相互認証(Cross Certification)している。VeriSignに関しては広く普及している現状を考慮し、これを利用した申請を受け付ける場合もあると考えられる。PKIの立場からいえば、PKIの認証ドメインが違う場合、相互認証パスの形成が必要である。しかし現実の運用を考えた場合、組織外とのデータの交換を行うときなど、必ずしも署名の発行元が同じとは限らないし、署名データの送り手と受け手が双方向の認証パスを形成している保証はない。

 ここでは、PKIのべき論は抜きにして、多様な発行元の証明書を利用した署名検証の例を紹介することにしたい。署名の検証に関してはその証明書を使用するアプリケーションによって違ってくるため、すべてのアプリケーションに当てはまるわけではないが、ここではFormFlow99でどのようにして署名の検証ができるかを紹介しよう。

●署名の検証
 署名の検証では、すでに触れたように次の2つの検証を行うことを目的としている。

  • 改ざんの検知
  • 証明書の検証

●証明書の検証
 署名に含まれる証明書に関しては、その発行元や有効期限などを検証する。証明書を使用して確認される項目は、以下の4つである。

  • 署名された内容は、フォームが署名されてから変更されていません(改ざんの検知)
  • 証明書は失効していません(証明書の検証)
  • 証明書は期限切れではありません(証明書の検証)
  • 証明機関によって認証されています(証明書の検証)

 証明書の発行元に関しては、IE内に取り込まれている「信頼されたルート認証機関」「中間証明機関」を参照して検証を行う。従って、このリストに含まれていない証明機関が発行した証明書が含まれている場合は、ユーザーに「信頼できるか?」というメッセージを表示し警告する。ユーザーがその証明機関を信頼する場合は、証明機関をリストに加えて処理を続行できるが、もし信頼できないのであれば、その時点で署名は無効として扱われる。それ以外にも、「失効された証明書」「有効期限切れの証明書」も検証するため、これらに該当する署名もまた無効となる。

画面19 証明機関が認証されていないときに表示されるメッセージ(画面をクリックすると拡大表示します


●各認証局で発行された証明書の相互署名検証結果

 今回、Entrust/VeriSign/Baltimoreと、異なるPKIシステムで発行された証明書を使用してFormFlow99に署名し、相互に署名検証を行った。

  • Enrust → Entrust/Entelligence、Entrust/WebConnector
  • VeriSign → VeriSign Class 1の証明書
  • Baltimore → UniCertで発行した証明書

  実験結果を以下の表に示す。

:検証成功(改ざんのチェックと証明書の検証)
× :署名の確認ができない

●詳細
(1) (2) (3) (5) (6) (8) (9) (10) (11) (12)
各証明書で署名したのち、署名の検証を実施
→ 電子署名の有無や改ざんの有無などの確認ができる

(4) VeriSignで署名しEntelligenceで検証
→署名されたXMLデータを読み込んだとき、ロックされなければならないテキストボックスが文字入力可能になってしまう。署名の確認もできない

(7) Baltimoreで署名しEntelligenceで検証
→署名されたXMLデータを読み込んだとき、ロックされなければならないテキストボックスが文字入力可能になる。署名の検証もできない。(4)と同じ現象

●検証結果の考察
 Entrust/EntelligenceはEntrust形式のインターフェイスであるために、ほかの証明書の検証は行えない。WebConnectorを利用し、証明書をWebブラウザに発行した場合は、相互に署名の確認ができることが証明された。

 FormFlow99の応用例を考える

 FormFlow99は、電子帳票を作成/運用するうえにおいて非常に有用なツールであり、XML対応の面でも優れている。そのため、実際の適用範囲は広いが、ここでは電子署名を使用した場合の応用例について考えてみたい。

●電子申請
 電子申請は現在、電子政府などで推進されている「e-Japan」実現の重要な目標の1つである(【参考記事】 特集:GPKIとはなにか?)。電子政府が実現したときに、私たちが一番メリットを感じるのが、この「電子申請」だろう。電子申請とは、各政府機関や自治体に対して各種申請を行う場合において、紙ではなく電子的なやりとりで申請作業を行うことだ。現状を見ると、申請を行う場合はその原本性や本人確認が行われることがある。電子申請を行う場合であっても、2001年4月から施行された「電子署名法」に基づき、本人性や原本性が確保された申請が要求されることになる。

 FormFlow99では、すでに上記の申請に対応した各種フォームを提供しているため、これらのフォームに対して電子署名を付加することで、申請として有効になると思われる。現在、FormFlow99を中心として電子申請推進コンソーシアムにて、各種技術の検討や実証実験が積極的に行われている。電子申請の実際の運用においても、電子署名の相互検証は必須の要件となっており、今回の検証結果が生かされるだろう。

●企業間でのXMLデータの交換
 近年、企業間におけるXMLでのデータ交換は現実的なものとなってきている。しかし前述のとおり、XMLのデータは単純なテキスト形式のため、改ざんされやすい構造となっている。企業間取引でのデータ交換は、そのまま企業情報の公開にもつながるため、安全性を確保したXMLデータへの電子署名は必須となるだろう。その際、各社それぞれが個別で構築した認証局で発行する証明書でのやりとりが予想される。この場合、認証局同士が相互認証をしていれば、送受信にかかわる証明書は信頼された署名となり、十分に信頼されたデータの交換が可能である。


 


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


Security&Trust記事一覧


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

注目のテーマ

Security & Trust 記事ランキング

本日 月間