(57)【要約】【課題】署名が付与されたデータに対して処理を行なう際に、署名の有効性が損なわれることを防ぐことを目的とする。【解決手段】署名に関する情報である署名情報を含んだデータに対して情報の処理を実行する中継装置１２０による署名情報処理方法を提供する。署名情報抽出部１２３は、データから署名情報を抽出して署名情報記憶部１２５に格納する抽出処理を行ない、メッセージ処理部１２２がデータに対して処理を実行した後、署名情報置換部１２４は、処理の実行後のデータに含まれる署名情報を署名情報記憶部１２５に格納されている署名情報に置換する置換処理を行なう。【選択図】図１
2008219585.tif 000002
【特許請求の範囲】
【請求項１】
署名に関する情報である署名情報を含んだデータに対して処理を実行し、情報を処理する処理部と、情報を記憶する記憶部とを備えた情報処理装置による署名情報処理方法であって、
前記処理部は、
前記データから署名情報を抽出して前記記憶部に格納する抽出処理を行ない、
前記データに対して情報の処理を実行した後、
当該情報の処理の実行にかかるデータに含まれる署名情報を前記記憶部に格納されている署名情報に置換する置換処理を行なうこと
を特徴とする署名情報処理方法。
【請求項２】
前記処理部は、
前記署名情報として署名対象情報が前記データに含まれている場合において、
前記データから署名対象情報を抽出して前記記憶部に格納し、
前記データに対して情報の処理を実行した後、
当該情報の処理の実行にかかるデータに含まれる署名対象情報を前記記憶部に格納されている署名対象情報に置換すること
を特徴とする請求項１に記載の署名情報処理方法。
【請求項３】
前記処理部は、
前記データから署名対象情報を抽出するとともに、前記データから署名値を抽出し、
抽出した署名対象情報および署名値を対応付けて前記記憶部に格納し、
前記データに含まれる署名対象情報を置換する際に、
前記データに含まれる署名値と一致する署名値と対応付けられた署名対象情報を前記記憶部から取得し、
取得した署名対象情報に前記データに含まれる署名対象情報を置換すること
を特徴とする請求項２に記載の署名情報処理方法。
【請求項４】
前記処理部は、
前記署名情報として参照先要素が前記データに含まれている場合において、
前記データから参照先要素を抽出して前記記憶部に格納し、
前記データに対して処理を実行した後、
当該情報の処理の実行にかかるデータに含まれる参照先要素を前記記憶部に格納されている参照先要素に置換すること
を特徴とする請求項１に記載の署名情報処理方法。
【請求項５】
前記処理部は、
前記データから参照先要素を抽出するとともに、前記データからダイジェスト値を抽出し、
抽出した参照先要素およびダイジェスト値を対応付けて前記記憶部に格納し、
前記データに含まれる参照先要素を置換する際に、
前記データに含まれるダイジェスト値と一致するダイジェスト値と対応付けられた参照先要素を前記記憶部から取得し、
取得した参照先要素に前記データに含まれる参照先要素を置換すること
を特徴とする請求項４に記載の署名情報処理方法。
【請求項６】
情報を処理する処理部と、情報を記憶する記憶部とを備えた情報処理装置によって、署名の有効性を検証する署名情報処理方法であって、
前記処理部は、
ビジネスプロセスにおける複数箇所で署名の有効性を検証することにより、署名が有効である箇所および署名が無効である箇所を検出すること
を特徴とする署名情報処理方法。
【請求項７】
前記処理部は、
ビジネスプロセスにおける複数箇所で署名の有効性を検証することにより、署名が有効である箇所および署名が無効である箇所を検出し、
署名が有効である箇所において、前記抽出処理を行ない、
署名が無効である箇所において前記置換処理を行なうこと
を特徴とする請求項１ないし請求項５のいずれか１項に記載の署名情報処理方法。
【請求項８】
前記処理部は、
署名が無効である箇所のうち、データの取得時刻が最も早い箇所において前記置換処理を行なうように設定する処理および再びビジネスプロセスを実行する処理を、すべての箇所において署名が有効になるまで繰り返すこと
を特徴とする請求項７に記載の署名情報処理方法。
【請求項９】
請求項１ないし請求項８のいずれか１項に記載の署名情報処理方法をコンピュータに実行させるプログラム。
【請求項１０】
署名に関する情報である署名情報を含んだデータに対して処理を実行し、情報を処理する処理部と、情報を記憶する記憶部とを備えた情報処理装置であって、
前記処理部は、
前記データから署名情報を抽出して前記記憶部に格納する抽出処理を行ない、
前記データに対して情報の処理を実行した後、
当該情報の処理の実行にかかるデータに含まれる署名情報を前記記憶部に格納されている署名情報に置換する置換処理を行なうこと
を特徴とする情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報セキュリティに関するものであり、特に電子署名を付与されたデータを処理する技術に関するものである。
【背景技術】
【０００２】
電子データの正当性を保証するための技術として電子署名がある。電子署名は、署名対象データの作成者を特定すること、署名が付与された後の署名対象データに対する改ざんを検出することなどを可能とする電子データであり、例えば、公開鍵暗号技術を利用することで実現される。
【０００３】
また、近年ＸＭＬ（Extensible Markup Language）と呼ばれるデータ形式が注目を集めている。ＸＭＬは、標準化団体Ｗ３Ｃ（World Wide Web Consortium）によって仕様が公開されているマークアップ言語の１つであり、各種データを保存する際のフォーマットや、異なる計算機間でデータを交換する際のフォーマットとして広く利用されている。
【０００４】
Ｗｅｂサービスと呼ばれるシステム連携技術では、データ交換のフォーマットとしてＳＯＡＰ（Simple Object Access Protocol）と呼ばれるＸＭＬ形式のメッセージ（ＳＯＡＰメッセージ）を利用することで、異なる環境の計算機間でのシステム連携を実現する。このように、ＸＭＬは様々な場面での利用が進められており、ＸＭＬデータのセキュリティを確保することは非常に重要な課題である。
【０００５】
ＸＭＬのセキュリティに関する仕様として、XML-Signature Syntax and Processing（以下、「ＸＭＬ署名」と記す）がある（例えば、非特許文献１参照）。ＸＭＬ署名は、電子署名に関する情報をＸＭＬで記述するための構文や、その情報の処理方法を規定した仕様であり、Ｗ３Ｃによって仕様が公開されている。ＸＭＬ署名では、ＸＭＬデータに対する署名や、その他の電子データに対する署名の方法を規定している。
【０００６】
ＸＭＬの記述方法には自由度が存在するため、同じ内容を意味するデータであってもその表現方法が異なることがある。例えば、「<element></element>」と「<element />」はどちらも空要素を表しており、ＸＭＬデータとしては同じ内容を意味しているが、バイト列としては異なるデータである。電子署名の計算はバイト列に対して行なわれるため、「<element></element>」から計算される署名値と「<element />」から計算される署名値とは異なる。しかし「<element></element>」と「<element />」とは、ＸＭＬデータとしては同じ内容を意味するため、署名値も同じであることが望ましい。
【０００７】
そこで、ＸＭＬ署名では、署名値を計算する前に、署名対象のＸＭＬデータに対して正規化処理を行なうことが一般的である。ＸＭＬ署名の際に利用される正規化処理のアルゴリズムとしては、例えば、Exclusive XML Canonicalizationなどがある（例えば、非特許文献２参照）。Exclusive XML Canonicalizationにより正規化を行なうと、空要素の記述はすべて省略されていない形に統一される。すなわち、「<element />」という要素に対してExclusive XML Canonicalizationを用いて正規化を行なうと「<element></element>」という要素が結果として得られる。このように、署名を付与する計算機と署名の検証を行なう計算機とにおいて、署名値を計算する前に署名対象データに対して正規化処理を行うことで、記述方法が異なっていても、同じ内容を意味するデータから同じ署名値を得ることが可能になる。
【非特許文献１】Donald Eastlake 他、”XML-Signature Syntax and Processing”、[online]、2002年2月12日、W3C、[2006年12月8日検索]、インターネット＜URL：http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/＞
【非特許文献２】John Boyer 他、”Exclusive XML Canonicalization”、[online]、2002年7月18日、W3C、[2006年12月8日検索]、インターネット＜URL：http://www.w3.org/TR/2002/REC-xml-exc-c14n-20020718/＞
【発明の開示】
【発明が解決しようとする課題】
【０００８】
前記したように、署名の付与されたデータ（例えば、ＸＭＬデータ）に対して処理を行なう際に、データ（例えば、ＸＭＬデータ）の形式が変わってしまうために、署名の有効性が損なわれることがある。例えば、図１５に示した例のように、署名装置１５１０が、署名済みのＸＭＬデータを、中継装置１５２０を介して検証装置１５３０に送信し、検証装置１５３０において署名検証を行なう場合について考える。以下では、各装置間で交換されるＸＭＬデータをメッセージとも記すことにする。
【０００９】
図１５に示した例では、まず、署名装置１５１０がメッセージに署名を付与する（ステップＳ１５０１）。その後、署名装置１５１０は、署名付きのメッセージを中継装置１５２０に送信する（ステップＳ１５０２）。中継装置１５２０は、メッセージを受信し（ステップＳ１５０３）、受信したメッセージに対して何らかの処理を行なう（ステップＳ１５０４）。中継装置１５２０は、処理を行なった後のメッセージを検証装置１５３０に送信する（ステップＳ１５０５）。検証装置１５３０は、メッセージを受信し（ステップＳ１５０６）、受信したメッセージに含まれる署名の検証を行なう（ステップＳ１５０７）。
【００１０】
ここで、中継装置１５２０における処理、すなわち、ステップＳ１５０４において、ＸＭＬデータの意味は変わっていなくても、ＸＭＬデータの形式が変わってしまうと、署名の有効性が損なわれることがある。中継装置１５２０における処理、すなわち、ステップＳ１５０４において、署名の有効性が損なわれるような処理を行なった場合には、検証装置１５３０は、メッセージを受信した後における署名検証で失敗する。
【００１１】
署名の有効性を損なう処理の例として、名前空間プレフィックスの変更と改行およびスペースの変更について説明する。まず、名前空間プレフィックスの変更について説明する。ここで、次の２つのＸＭＬデータについて考える。
【００１２】
(1)
<a:elem xmlns:a=”http://example.org” />
【００１３】
(2)
<b:elem xmlns:b=”http://example.org” />
【００１４】
(1)では、名前空間プレフィックスの値として「a」を使用しており、(2)では、名前空間プレフィックスの値として「b」を使用している。名前空間プレフィックス以外については、(1)と(2)は同じデータである。Exclusive XML Canonicalizationでは、名前空間プレフィックスの正規化は行なわないため、(1)に対する署名の結果と(2)に対する署名の結果とは異なる。そのため、例えば、ステップＳ１５０４において、(1)のデータを(2)のデータに変換した場合、署名の有効性が損なわれる。
【００１５】
次に、改行および空白スペースの変更について説明する。次の２つのＸＭＬデータについて考える。
【００１６】
(3)
<a>
<b>xyz</b>
</a>
【００１７】
(4)
<a><b>xyz</b></a>
【００１８】
(3)では、開始タグ<a>の後および終了タグ</a>の前に改行が存在する。また、開始タグ<b>の前にスペースが存在する。(4)では、改行やスペースは存在しない。Exclusive XML Canonicalizationでは、このような要素内容における改行やスペースの正規化は行なわないため、(3)に対する署名の結果と(4)に対する署名の結果とは異なる。そのため、例えば、ステップＳ１５０４において、(3)のデータを(4)のデータに変換した場合、署名の有効性が損なわれる。
【００１９】
そこで、本発明は、署名が付与されたデータに対して処理を行なう際に、署名の有効性が損なわれることを防ぐことを目的とする。
【課題を解決するための手段】
【００２０】
前記した課題を解決するために、本発明は、署名に関する情報である署名情報を含んだデータに対して処理を実行し、情報を処理する処理部と、情報を記憶する記憶部とを備えた情報処理装置による署名情報処理方法である。処理部は、データから署名情報を抽出して記憶部に格納する抽出処理を行ない、データに対して情報の処理を実行した後、処理の実行後のデータに含まれる署名情報を記憶部に格納されている署名情報に置換する置換処理を行なう。
【発明の効果】
【００２１】
本発明によれば、署名が付与されたデータに対して処理を行なう際に、署名の有効性が損なわれることを防ぐことが可能である。
【発明を実施するための最良の形態】
【００２２】
以下、図面を参照しながら本発明を実施するための最良の形態（以下、「実施形態」という）を説明する。
【００２３】
≪第１実施形態≫
以下、図面を参照しながら本発明の第１実施形態について説明する。
図１は、第１実施形態におけるシステムの構成を示す図である。図１に示すように、本システムは、署名装置１１０と、情報処理装置としての中継装置１２０と、検証装置１３０とが、ネットワーク１４０を介して相互に通信可能にされている。ここでは、署名が付与されたデータ、すなわち、署名に関する情報である署名情報を含んだデータが、署名装置１１０から中継装置１２０を介して検証装置１３０に送信される。署名情報に関する詳細な説明は、図４を参照して後記する。本実施形態では、署名が付与されたデータの例として、ＸＭＬ署名が付与されたＸＭＬデータを用いることにする。以下では、各装置間で交換されるＸＭＬデータをメッセージとも記すことにする。
【００２４】
署名装置１１０は、送信するメッセージに対して署名を付与する署名付与部１１１と、メッセージの送受信を行う通信処理部１１２とから構成される。
【００２５】
中継装置１２０は、メッセージの送受信を行う通信処理部１２１と、受信したメッセージに対して処理を行なうメッセージ処理部１２２と、受信したメッセージに含まれる署名情報を抽出する署名情報抽出部１２３と、送信するメッセージに含まれる署名情報を置換する署名情報置換部１２４と、署名情報抽出部１２３によって抽出された署名情報を記憶しておく署名情報記憶部１２５とから構成される。署名情報記憶部１２５は、参照先要素を記憶しておく参照先要素記憶部１２６と、署名対象情報を記憶しておく署名対象情報記憶部１２７とから構成される。参照先要素および署名対象情報に関する詳細な説明は、図４を参照して後記する。また、本実施形態では、署名情報抽出部１２３と、署名情報置換部１２４とによって署名情報処理方法が実施される。
【００２６】
検証装置１３０は、メッセージの送受信を行なう通信処理部１３１と、メッセージに付与された署名の検証を行なう署名検証部１３２とから構成される。
【００２７】
図２は、図１に示した各装置のハードウェア構成を示す図である。図１に示した署名装置１１０と、中継装置１２０と、検証装置１３０とは、図２に示すような一般的な計算機２０１を用いて実現することができる。
【００２８】
計算機２０１は、情報を処理する処理部としてのＣＰＵ（Central Processing Unit）２０５と、情報を記憶する記憶部としてのメモリ２０６と、ハードディスクなどの記憶装置２０７と、キーボードやマウスなどの入力装置２０３と、ディスプレイなどの出力装置２０４と、ネットワークに接続するための通信装置２０２とを備える。計算機２０１は、通信装置２０２を介して例えばインターネットなどのネットワーク１４０に接続している。計算機２０１では、ＣＰＵ２０５が、記憶装置２０７からメモリ２０６上に呼び出された所定のプログラムを実行することにより各機能が実現される。
【００２９】
なお、本実施形態では、署名、中継および検証の各機能が、別の計算機に実装され、それぞれを署名装置１１０、中継装置１２０、検証装置１３０とする場合を例として説明するが、署名、中継および検証の各機能のうち、複数の機能が同一計算機に実装されることとしてもよい。例えば、中継および検証の機能が、同一計算機に実装されることとしてもよい。
【００３０】
図３は、図１に示したシステムが実行する処理の流れを示す図である。図３を参照して（適宜図１および図２参照）、システムが実行する処理について説明する。
【００３１】
署名装置１１０において、署名付与部１１１は、送信するメッセージに対してＸＭＬ署名を付与する（ステップＳ３０１）。本処理は、一般的に実施されているＸＭＬ署名の処理と同様である。通信処理部１１２は、署名済みのメッセージを中継装置１２０に送信する（ステップＳ３０２）。
【００３２】
中継装置１２０において、通信処理部１２１は、署名装置１１０の通信処理部１１２から送信されたメッセージを受信する（ステップＳ３０３）。そして、署名情報抽出部１２３は、受信したメッセージに含まれる署名情報を抽出し、署名情報記憶部１２５に格納する（ステップＳ３０４）。この抽出処理の詳細については、図５を参照して後記する。次に、メッセージ処理部１２２は、メッセージに対して何らかの処理を行なう（ステップＳ３０５）。そして、署名情報置換部１２４は、送信するメッセージに含まれる署名情報を、署名情報記憶部１２５に格納された署名情報で置換する（ステップＳ３０６）。この置換処理の詳細については、図９を参照して後記する。次に、通信処理部１２１は、置換されたメッセージを検証装置１３０に送信する（ステップＳ３０７）。
【００３３】
検証装置１３０において、通信処理部１３１は、中継装置１２０の通信処理部１２１から送信されたメッセージを受信する（ステップＳ３０８）。そして、署名検証部１３２は、受信したメッセージに付与されている署名を検証する（ステップＳ３０９）。
【００３４】
図４は、ＸＭＬ署名の付与されたメッセージの例を示す図である。図４を参照して（適宜図１参照）、ＸＭＬ署名の付与されたメッセージについて説明する。なお、以下の説明では、名前空間プレフィックス「ds」を用いるが、名前空間プレフィックス「ds」は、ＸＭＬ署名で規定される名前空間ＵＲＬ（Uniform Resource Locator）に対応しているものとする。
【００３５】
メッセージに含まれる署名情報は、署名に関する情報を意味する。署名装置１１０は、所定のアルゴリズムに基づいて、この署名情報から出力値を生成し、生成した出力値および署名情報を、中継装置１２０を介して検証装置１３０に送信する。検証装置１３０は、出力値および署名情報を受信し、前記したアルゴリズムに基づいて、受信した署名情報から出力値を生成し、生成した出力値と受信した出力値とが一致することを確認する。このような署名の技術によって、署名情報の改ざんを防止することができる。
【００３６】
署名情報には、署名対象情報、参照先要素などがある。署名対象情報は、前記した出力値としての署名値を算出する際に用いる情報であり、参照先要素は、前記した出力値としてのダイジェスト値を算出する際に用いる情報である。
【００３７】
図４に示した例では、02行目に示された情報（名前に関する情報）、03〜05行目に示された情報（カード番号に関する情報）が参照先要素であり、署名装置１１０は、それぞれの参照先要素からそれぞれのダイジェスト値を生成して、生成したそれぞれのダイジェスト値を、11行目に示されたダイジェスト値、例えば6fyXrYpG...(省略)、15行目に示されたダイジェスト値、例えばfvjUGVLI...(省略)としてメッセージに挿入する。
【００３８】
また、07〜17行目に示された情報が署名対象情報であり、署名装置１１０は、署名対象情報からそれぞれの署名値を生成して、生成した署名値を、18行目に示された署名値、例えばt55PNG2x...(省略)としてメッセージに挿入する。
【００３９】
図５は、図１に示した署名情報抽出部１２３における抽出処理の流れを示す図である。図５を参照して（適宜図１ないし図４参照）、署名情報抽出部１２３における抽出処理について説明する。
【００４０】
署名情報抽出部１２３は、受信したメッセージ内に含まれるすべての<ds:Signature>要素について、以下に説明する署名情報抽出処理（ステップＳ５０２〜ステップＳ５０９）を行なう（ステップＳ５０１）。署名情報抽出処理では、署名情報抽出部１２３は、対象とする<ds:Signature>要素内に含まれる<ds:SignatureValue>要素の内容を署名値として取得する（ステップＳ５０２）。図４に示したメッセージ例の場合、署名値は“t55PNG2x...(省略)”となる。次に、署名情報抽出部１２３は、<ds:Signature>要素に含まれる署名対象情報（例えば<ds:SignedInfo>要素）を取得し、取得した署名対象情報内に、署名対象情報の祖先要素で宣言されている必要な名前空間宣言を取り込む（ステップＳ５０３）。祖先要素で宣言されている名前空間宣言の取り込み処理は、前記した非特許文献２などに記載された処理の一部として一般的に実施されているものである。図４に示したメッセージ例の場合、祖先要素の名前空間宣言を取り込んだ後の署名対象情報は次のようになる。
【００４１】
<ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
...(省略)
<ds:Reference URI="#id-name">
...(省略)
<ds:DigestValue>6fyXrYpG...(省略)</ds:DigestValue>
</ds:Reference>
<ds:Reference URI="#id-card">
...(省略)
<ds:DigestValue>fvjUGVLI...(省略)</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
【００４２】
次に、署名情報抽出部１２３は、ステップＳ５０２で取得した署名値をキーにして、ステップＳ５０３で取得した署名対象情報を署名対象情報記憶部１２７に格納する（ステップＳ５０４）。署名対象情報は、名前空間宣言が取り込まれた状態で署名対象情報記憶部１２７に格納される。署名値および署名対象情報は、それぞれ署名値１２７ａ（図６参照）および署名対象情報１２７ｂ（図６参照）として対応付けられて署名対象情報記憶部１２７（図６参照）に格納される。
【００４３】
次に、署名情報抽出部１２３は、署名対象情報内のすべての<ds:Reference>要素について、以下に説明する参照先要素の取得処理（ステップＳ５０６〜ステップＳ５０８）を行なう（ステップＳ５０５）。参照先要素の取得処理では、署名情報抽出部１２３は、対象とする<ds:Reference>要素内に含まれる<ds:DigestValue>要素の内容をダイジェスト値として取得する（ステップＳ５０６）。図４に示したメッセージ例の最初に出現する<ds:Reference>要素（09〜12行目）の場合、ダイジェスト値は“6fyXrYpG...(省略)”となる。
【００４４】
次に、署名情報抽出部１２３は、対象とする<ds:Reference>要素の参照先要素を取得し、取得した参照先要素内に、参照先要素の祖先要素で宣言されている必要な名前空間宣言を取り込む（ステップＳ５０７）。図４に示したメッセージ例の最初に出現する<ds:Reference>要素（09〜12行目）の場合、<ds:Reference>要素はＵＲＩ=”#id-name”属性を持つ。これは、同じＸＭＬデータ内で、Id属性の値として”id-name”という値を持つ属性を持つ要素を参照していることを表す。したがって、参照先要素は<or:name>要素である。このようにして<or:name>要素を取得し、<or:name>要素の祖先要素で宣言されている名前空間宣言を取り込む。祖先要素で宣言されている名前空間宣言を取り込んだ後の参照先要素は次のようになる。
【００４５】
<or:name Id="id-name" xmlns:or="http://example.com/order">John</or:name>
【００４６】
次に、署名情報抽出部１２３は、ステップＳ５０６で取得したダイジェスト値をキーにして、ステップＳ５０７で取得した参照先要素を参照先要素記憶部１２６に格納する（ステップＳ５０８）。参照先要素は、名前空間宣言が取り込まれた状態で参照先要素記憶部１２６に格納される。ダイジェスト値および参照先要素は、それぞれダイジェスト値１２６ａ（図７参照）および参照先要素１２６ｂとして対応付けられて参照先要素記憶部１２６（図７参照）に格納される。
【００４７】
続いて、署名情報抽出部１２３は、ＬＯＯＰ処理の終端に達すると（ステップＳ５０９）、ステップＳ５０５に戻り、ＬＯＯＰ処理を繰り返す。署名情報抽出部１２３は、ステップＳ５０５で開始されるＬＯＯＰ処理を終了して、ＬＯＯＰ処理の終端に達すると（ステップＳ５１０）、ステップＳ５０１に戻り、ＬＯＯＰ処理を繰り返す。署名情報抽出部１２３は、ステップＳ５０１で開始されるＬＯＯＰ処理を終了すると、抽出処理を終了する。
【００４８】
図６は、図１に示した署名対象情報記憶部１２７に格納される情報例を示す図である。図６に示すように、署名対象情報記憶部１２７に格納される情報は、署名値１２７ａと、署名対象情報１２７ｂとが対応付けられたものである。
【００４９】
図７は、図１に示した参照先要素記憶部１２６に格納される情報例を示す図である。図７に示すように、参照先要素記憶部１２６に格納される情報は、ダイジェスト値１２６ａと、参照先要素１２６ｂとが対応付けられたものである。
【００５０】
図８は、図１に示したメッセージ処理部１２２による処理後のメッセージの例を示す図である。図８を参照して（適宜図１参照）、処理後のメッセージについて説明する。
【００５１】
メッセージ処理部１２２は、メッセージに対して所定の処理を行なう。つまり、メッセージ処理部１２２による処理前のメッセージ（図４参照）と処理後のメッセージ（図８参照）とでは、メッセージの形式が異なっている。図８に示すように、例えば、名前空間ＵＲＩ"http://example.com/order"に対応付けられた名前空間プレフィックスが”or”から”ns”に変更されている。また、図８に示すように、例えば、処理前のメッセージ（図４参照）では<or:card>要素内に改行およびスペースが含まれているが、処理後のメッセージ（図８参照）では<ns:card>要素内に改行およびスペースが含まれていない。これらの変更により、処理後のメッセージ（図８参照）から算出されるダイジェスト値および署名値が、処理前のメッセージ（図４参照）に挿入されているダイジェスト値および署名値と異なるために、処理後のメッセージ（図８参照）では、署名の有効性が損なわれている。
【００５２】
図９は、図１に示した署名情報置換部１２４における置換処理の流れを示す図である。図９を参照して（適宜図１ないし図８参照）、署名情報置換部１２４における置換処理について説明する。
【００５３】
署名情報置換部１２４は、送信するメッセージ内に含まれるすべての<ds:Signature>要素について、以下に説明する署名情報置換処理（ステップＳ９０２〜ステップＳ９０９）を行なう（ステップＳ９０１）。署名情報置換処理では、署名情報置換部１２４は、対象とする<ds:Signature>要素内に含まれる<ds:SignatureValue>要素の内容を署名値として取得する（ステップＳ９０２）。
【００５４】
次に、署名情報置換部１２４は、署名対象情報記憶部１２７に、ステップＳ９０２で取得した署名値と一致する署名値を有する署名対象情報（例えば<ds:SignedInfo>要素）が存在するか否かを判定する（ステップＳ９０３）。署名対象情報記憶部１２７に、署名値が一致する署名対象情報が存在する場合には（ステップＳ９０３で「Ｙｅｓ」）、署名情報置換部１２４は、メッセージ内の署名対象情報を署名対象情報記憶部１２７内の値に置換する（ステップＳ９０４）。つまり、署名情報置換部１２４は、ステップＳ９０２によって取得した署名値と一致する署名値１２７ａと対応付けられた署名対象情報１２７ｂを、署名対象情報記憶部１２７から取得し、ステップＳ９０３によって存在が確認された署名対象情報を、取得した署名対象情報１２７ｂで置換する。署名対象情報記憶部１２７に、署名値が一致する署名対象情報が存在しない場合には（ステップＳ９０３で「Ｎｏ」）、ステップＳ９０５に進む。
【００５５】
次に、署名情報置換部１２４は、ステップ９０２で取得した署名値を含んだ署名対象情報内のすべての<ds:Reference>要素について、以下に説明する参照先要素の置換処理（ステップＳ９０６〜ステップＳ９０８）を行なう（ステップＳ９０５）。参照先要素の置換処理では、署名情報置換部１２４は、対象とする<ds:Reference>要素内に含まれる<ds:DigestValue>要素の内容をダイジェスト値として取得する（ステップＳ９０６）。次に、署名情報置換部１２４は、参照先要素記憶部１２６に、ステップＳ９０６で取得したダイジェスト値と一致するダイジェスト値を有する参照先要素が存在するか否かを判定する（ステップＳ９０７）。参照先要素記憶部１２６に、ダイジェスト値が一致する参照先要素が存在する場合には（ステップＳ９０７で「Ｙｅｓ」）、署名情報置換部１２４は、メッセージ内の参照先要素を参照先要素記憶部１２６内の値に置換する（ステップＳ９０８）。つまり、署名情報置換部１２４は、ステップＳ９０６によって取得したダイジェスト値と一致するダイジェスト値１２６ａと対応付けられた参照先要素１２６ｂを、参照先要素記憶部１２６から取得し、ステップＳ９０７によって存在が確認された参照先要素を、取得した参照先要素１２６ｂで置換する。参照先要素記憶部１２６に、ダイジェスト値が一致する参照先要素が存在しない場合には（ステップＳ９０７で「Ｎｏ」）、ステップＳ９０９に進む。
【００５６】
続いて、署名情報置換部１２４は、ＬＯＯＰ処理の終端に達すると（ステップＳ９０９）、ステップＳ９０５に戻り、ＬＯＯＰ処理を繰り返す。署名情報置換部１２４は、ステップＳ９０５で開始されるＬＯＯＰ処理を終了して、ＬＯＯＰ処理の終端に達すると（ステップＳ９１０）、ステップＳ９０１に戻り、ＬＯＯＰ処理を繰り返す。署名情報置換部１２４は、ステップＳ９０１で開始されるＬＯＯＰ処理を終了すると、置換処理を終了する。
【００５７】
図１０は、図１に示した署名情報置換部１２４による置換処理を行なった後のメッセージの例を示す図である。図１０を参照して（適宜図１参照）、置換処理後のメッセージについて説明する。
【００５８】
中継装置１２０の通信処理部１２１は、置換処理を行なった後のメッセージ（図１０参照）を検証装置１３０に送信する。送信されたメッセージは、検証装置１３０の通信処理部１３１により受信される。検証装置１３０の署名検証部１３２は、一般的なＸＭＬ署名で実施されている技術（例えば、図４を用いて説明した検証装置１３０による検証技術）により、受信したメッセージに含まれるＸＭＬ署名の検証を行なう。検証装置１３０が受信するメッセージは、図１０に示すように、署名の有効性が保たれているため、署名検証部１３２では署名検証を成功する。
【００５９】
このように、本実施形態では、中継装置１２０の署名情報抽出部１２３が、データから署名情報を抽出して署名情報記憶部１２５に格納する抽出処理を行ない、メッセージ処理部１２２がデータに対して処理を実行した後、データに含まれる署名情報を署名情報記憶部１２５に格納されている署名情報に置換する置換処理を行なう。したがって、中継装置１２０の処理において署名の有効性を損なうような処理をしている場合でも、署名の有効性を損なう前の状態に戻すことができる。これにより、署名が付与されたデータに対して処理を行なう際に、署名の有効性が損なわれることを防ぐことが可能である。
【００６０】
本発明は、署名を用いたシステムにおいて幅広く適用することができる。例えば、旅行の予約システムにおいて、署名の付与された旅行予約情報を、旅行代理店、旅行企画会社、宿泊施設等に転送する際に、署名の有効性が損なわれる可能性がある。本発明を旅行予約システムに適用することで署名の有効性を確保したまま予約情報等のデータを転送することができる。また、例えば、情報のライフサイクルに応じてデータを移動することで最適なデータ配置を行なう情報ライフサイクルマネジメントが検討されている。情報ライフサイクルマネジメントにおいて署名の付与されたデータを移動する際に、署名の有効性が損なわれる可能性がある。本発明を情報ライフサイクルマネジメントに適用することで、署名の有効性を確保したままデータの配置を行なうことが可能になる。
【００６１】
≪第２実施形態≫
以下、図面を参照しながら本発明の第２実施形態について説明する。
近年の情報システムでは、ネットワーク上に公開されている様々なサービスを利用してシステムを構築することが多い。このようなシステムにおいて、利用するサービス内で署名の有効性を損なうような処理を行なう可能性がある。
【００６２】
第１実施形態で説明した方法により、署名の有効性を損なう処理を行なった場合でも、署名の有効性を確保することができるようになる。しかし、サービスが複数存在する場合、署名の有効性が損なわれる箇所が分からないと、第１実施形態で説明した抽出処理や置換処理を実施する箇所を特定することができない。本実施形態では、様々なサービスを利用してシステムを構築する際に、署名の有効性が損なわれる箇所を検出し、第１実施形態で説明した技術を利用して、システム全体に渡って署名の有効性を確保する技術について説明する。
【００６３】
図１１は、第２実施形態におけるシステムの構成を示す図である。図１１に示すように、本システムは、情報処理装置１１１０と、サービス提供装置Ａ（１１２０）と、サービス提供装置Ｂ（１１３０）とにより構成される。ここでは、サービス提供装置が２つ存在する場合を例として説明するが、サービス提供装置の数は特に限定されるものではない。各装置間では、データ（例えば、ＸＭＬデータ）が交換される。ＸＭＬデータ（メッセージ）にはＸＭＬ署名が付与されていることがある。本実施形態においては、例えば、情報処理装置１１１０を構築または運用する管理者が、情報処理装置１１１０を用いて署名の有効性が損なわれる箇所を検出する状況が想定される。また、本実施形態は、本管理者がシステムを構築する際に、サービス提供装置Ａ（１１２０）、サービス提供装置Ｂ（１１３０）の内部で行なわれる処理について把握していない状況において、特に有効である。
【００６４】
情報処理装置１１１０は、通信処理部１２１、メッセージ処理部１２２、署名情報抽出部１２３、署名情報置換部１２４、署名情報記憶部１２５、署名有効性検証部１１１１、署名有効性記憶部１１１２により構成される。メッセージ処理部１２２、通信処理部１２１、署名情報抽出部１２３、署名情報置換部１２４、署名情報記憶部１２５は、第１実施形態で説明したものと同じである。本実施形態では、第１実施形態と同様の構成である署名情報抽出部１２３および署名情報置換部１２４に加えて、署名有効性検証部１１１１によって署名情報処理方法が実施される。
【００６５】
情報処理装置１１１０は、サービス提供装置Ａ（１１２０）、サービス提供装置Ｂ（１１３０）の提供するサービスを利用して、一つのビジネスプロセスを実行する。サービス提供装置Ａ（１１２０）の提供するサービスを利用する場合には、情報処理装置１１１０からサービス提供装置Ａ（１１２０）にメッセージが送信される。サービス提供装置Ａ（１１２０）では、受信したメッセージに対して何らかの処理を行なった後、情報処理装置１１１０にメッセージを返信する。情報処理装置１１１０から送信されるメッセージおよびサービス提供装置Ａ（１１２０）から返信されるメッセージには、ＸＭＬ署名が付与されている場合がある。
【００６６】
情報処理装置１１１０から送信されるメッセージにＸＭＬ署名が付与されている場合には、サービス提供装置Ａ（１１２０）における処理の際にＸＭＬ署名の有効性が損なわれる可能性がある。その場合、サービス提供装置Ａ（１１２０）から返信されるメッセージには、有効性の損なわれたＸＭＬ署名が付与されていることがある。また、第１実施形態の場合と同様に、情報処理装置１１１０内のメッセージ処理部１２２においてＸＭＬ署名の有効性を損なう処理を実施することもある。このように、情報処理装置１１１０において、サービス提供装置によるサービスを利用してビジネスプロセスを実行する際には、サービス提供装置、情報処理装置１１１０などにおいて署名の有効性が損なわれる可能性がある。
【００６７】
図１２は、図１１に示したシステムが実行する処理の流れを示す図である。図１２を参照して（適宜図１１参照）、システムが実行する処理について説明する。なお、以下で説明する処理は、主にシステムの構築時に実施されることを想定している。前記したように、本システムは、情報処理装置１１１０がサービス提供装置Ａ（１１２０）、サービス提供装置Ｂ（１１３０）を利用して１つのビジネスプロセスを実現する。
【００６８】
まず、例えば、システムの管理者が端末（不図示）を介して情報処理装置１１１０に対してテストデータを送信する。これによって、通信処理部１２１は、テストデータを受信し、署名有効性検証部１１１１は、通信処理部１２１が受信したテストデータに基づいて、ビジネスプロセスを開始する（ステップＳ１２０１）。ビジネスプロセスの実行の際に、署名有効性検証部１１１１は、各装置間で交換されるすべてのメッセージに関して、署名の有効性の検証を行なう（ステップＳ１２０２）。署名の有効性の検証についての詳細な説明は、図１３を参照して後記する。
【００６９】
署名有効性検証部１１１１は、すべての有効性が保たれているか否かを判定し（ステップＳ１２０３）、すべての有効性が保たれている場合には（ステップＳ１２０３で「Ｙｅｓ」）、本処理を終了する。有効性が保たれていないメッセージがある場合には（ステップＳ１２０３で「Ｎｏ」）、署名有効性検証部１１１１は、有効性が保たれていないメッセージに対して、署名情報の抽出、置換処理の設定を行い（ステップＳ１２０４）、ステップＳ１２０１に戻る。ステップＳ１２０４において署名情報の抽出、置換処理の設定がなされたメッセージについては、次のステップＳ１２０１で開始されるビジネスプロセスによって署名情報の抽出、置換処理が実行され、署名の有効性が保たれる形式に変更される可能性がある。署名情報の抽出、置換処理の設定がなされるメッセージは、有効性が保たれていないメッセージのうち、全部であってもよいし、一部が選択されたものであってもよい。署名情報の抽出、置換処理の設定を行なうメッセージの効率的な選択については、図１４を参照して後記する。
【００７０】
図１３は、図１２に示した署名の有効性検証処理（ステップＳ１２０２）の詳細な流れを示す図である。図１３を参照して（適宜図１１参照）、署名の有効性検証処理について説明する。
【００７１】
まず、署名有効性検証部１１１１は、各装置間で交換されるすべてのメッセージを取得する（ステップＳ１３０１）。そして、取得したすべてのメッセージについて、メッセージの有効性を検証する処理（ステップＳ１３０３〜ステップＳ１３０６）を行なう（ステップＳ１３０２）。メッセージの有効性を検証する処理では、取得したメッセージに含まれるすべての<ds:Reference>要素について、有効性の検証結果取得処理（ステップＳ１３０４〜ステップＳ１３０５）を行なう（ステップＳ１３０３）。有効性の検証結果取得処理では、まず、署名有効性検証部１１１１は、<ds:Reference>要素内のダイジェスト値（<ds:DigestValue>要素の内容）を取得するとともに、対象とする<ds:Reference>要素の参照先要素を取得し、参照先要素からダイジェスト値を算出して取得する。このようにして取得した２つのダイジェスト値が一致するか否かを検証する（ステップＳ１３０４）。この検証処理は、通常のＸＭＬ署名の検証処理の一部として一般的に実施されている処理である。署名有効性検証部１１１１は、検証結果を署名有効性記憶部１１１２に格納する（ステップＳ１３０５）。
【００７２】
続いて、署名有効性検証部１１１１は、ＬＯＯＰ処理の終端に達すると（ステップＳ１３０６）、ステップＳ１３０３に戻り、ＬＯＯＰ処理を繰り返す。署名有効性検証部１１１１は、ステップＳ１３０３で開始されるＬＯＯＰ処理を終了して、ＬＯＯＰ処理の終端に達すると（ステップＳ１３０７）、ステップＳ１３０２に戻り、ＬＯＯＰ処理を繰り返す。署名有効性検証部１１１１は、ステップＳ１３０２で開始されるＬＯＯＰ処理を終了すると、有効性検証処理を終了する。
【００７３】
図１４は、図１１に示した署名有効性記憶部１１１２に格納される情報例を示す図である。図１４を参照して（適宜図１１参照）、署名有効性記憶部１１１２に格納される情報について説明する。
【００７４】
署名有効性記憶部１１１２に格納される情報は、ステップＳ１３０５（図１３参照）において、署名有効性検証部１１１１によって格納される。署名有効性記憶部１１１２に格納される情報は、ダイジェスト値１４０１と、検証対象のメッセージを取得した箇所に関する情報と、時刻１４０４と、署名有効性１４０５とが対応付けられたものである。
【００７５】
ダイジェスト値１４０１は、メッセージ内に<ds:DigestValue>要素の内容として含まれていたダイジェスト値である。
【００７６】
検証対象のメッセージを取得した箇所に関する情報としては、対象サービス１４０２、ＩＮ／ＯＵＴ１４０３などを用いることが可能である。例えば、対象サービス１４０２が「Ａ」となっている場合には、情報処理装置１１１０とサービス提供装置Ａとの間で交換されるメッセージが取得されたことを表す。対象サービス１４０２としては、サービス提供装置を一意に識別可能な情報、例えば、サービス提供装置の識別情報、ＩＰアドレス、ＵＲＬなどを用いることが可能である。また、ＩＮ／ＯＵＴ１４０３が「ＯＵＴ」となっている場合には、情報処理装置１１１０から送信されるメッセージを取得したことを表す。ＩＮ／ＯＵＴ１４０３が「ＩＮ」となっている場合には、情報処理装置１１１０が受信するメッセージを取得したことを表す。
【００７７】
時刻１４０４は、メッセージを取得した時刻である。
【００７８】
署名有効性１４０５は、ステップＳ１３０４において実施した署名の有効性の検証結果である。すなわち、署名有効性１４０５は、ステップＳ１３０３において２つのダイジェスト値が一致した場合には「有効」が、一致しなかった場合には「無効」が、署名有効性検証部１１１１によって格納される。
【００７９】
このようにして、署名有効性検証部１１１１が、情報処理装置１１１０と各サービス提供装置との間で交換されるすべてのメッセージについて署名の有効性を検証する。有効性の検証の結果、すべてのメッセージについて署名が有効な場合、すなわち、ステップＳ１２０３の処理において、署名有効性検証部１１１１が、署名有効性記憶部１１１２の署名有効性１４０５がすべて「有効」であると判定した場合には、図１２に示した処理を終了する。この場合、ビジネスプロセスにおいて署名の有効性を損なう処理をする箇所が存在しなかったことを表す。一方、有効ではない署名が含まれる場合、すなわち、ステップＳ
１２０３の処理において、署名有効性検証部１１１１が、署名有効性記憶部１１１２の署名有効性１４０５に「無効」が含まれると判定した場合には、署名の有効性を損なう処理が存在することを表す。この場合、第１実施形態で説明した方法により、署名情報の抽出、置換処理を行なうことで署名の有効性を確保することができる。
【００８０】
署名有効性１４０５に「無効」が含まれる場合、署名有効性検証部１１１１は、署名有効性１４０５が「無効」であるデータのダイジェスト値１４０１と同じダイジェスト値１４０１を持ち、署名有効性１４０５が「有効」である箇所におけるメッセージを、署名情報の抽出処理が行なわれるメッセージとして選択することが好ましい。図１４に示した署名有効性記憶部１１１２の例の場合、データ１４０７およびデータ１４０８において署名有効性１４０５が「無効」となっている。データ１４０７およびデータ１４０８は、いずれもダイジェスト値１４０１が「6fyXrYpG...(省略)」である。そこで、ダイジェスト値１４０１が「6fyXrYpG...(省略)」で、署名有効性１４０５が「有効」であるデータ１４０６で示される箇所において、署名情報の抽出処理を行なう。すなわち、データ１４０６では、対象サービス１４０２が「Ａ」、ＩＮ／ＯＵＴ１４０３が「ＯＵＴ」であることから、情報処理装置１１１０からサービス提供装置Ａ（１１２０）に送信するメッセージにおいて、第１実施形態で説明した署名情報の抽出処理を行なうように設定する。
【００８１】
また、署名有効性１４０５に「無効」が含まれる場合、署名有効性検証部１１１１は、署名有効性１４０５が「無効」になっている箇所のうち、時刻１４０４が一番早い箇所におけるメッセージを、署名情報の置換処理が行なわれるメッセージとして選択することが好ましい。図１４に示した署名有効性記憶部１１１２の例の場合、データ１４０７およびデータ１４０８において署名有効性１４０５が「無効」となっているが、データ１４０７の方が早い時刻１４０４を有するため、データ１４０７が示す箇所において、署名情報の置換処理を行なうように設定する。すなわち、データ１４０７では、対象サービスが「Ａ」、ＩＮ／ＯＵＴ１４０３が「ＩＮ」であることから、サービス提供装置Ａ（１１２０）から情報処理装置１１１０に対して送信されるメッセージにおいて、第１実施形態で説明した署名情報の置換処理を行なうように設定する。
【００８２】
前記したように、署名情報の抽出処理、置換処理の設定をした後、再び情報処理装置１１１０にテストデータを送信するなどしてビジネスプロセスを開始し、署名の有効性の検証を行なう。署名有効性検証部１１１１は、ステップＳ１２０３において、署名有効性記憶部１１１２の署名有効性１４０５がすべて「有効」であると判定するまで、ステップＳ１２０４、ステップＳ１２０１およびステップＳ１２０２を繰り返す。
【００８３】
このように、署名有効性検証部１１１１は、ビジネスプロセスにおける複数箇所で署名の有効性を検証することにより（例えば、各装置間で交換されるメッセージの署名の有効性を検証することにより）、署名が有効である箇所および署名が無効である箇所を検出し、署名が有効である箇所において、署名情報の抽出処理の設定、署名が無効である箇所において、署名情報の置換処理の設定を行なうことができる。また、署名有効性検証部１１１１に第１実施形態で説明した中継装置１２０の構成を追加することで、適切な署名情報の抽出、置換処理の設定を行なうことができる。
【００８４】
本実施形態では、署名の有効性を検証する際、ダイジェスト値の検証を行なう場合を例として説明した。署名の有効性を検証する際に、ダイジェスト値の検証に加え、署名値の検証を行なってもよい。
【００８５】
なお、本実施形態では、各装置間で交換されるメッセージについて署名の有効性検証を行なったが、他の箇所で署名の有効性の検証を行なってもよい。例えば、情報処理装置１１１０内のメッセージ処理部１２２における処理の途中で署名の有効性の検証を行なってもよい。
【００８６】
また、本実施形態では、メッセージを取得した箇所を表す情報として、対象サービス１４０２およびＩＮ／ＯＵＴ１４０３の情報を用いたが、他の情報を用いてメッセージを取得した箇所を表してもよい。例えば、メッセージ処理部１２２における処理は、ビジネスプロセスとして記述されていることがある。このようなビジネスプロセスを記述するための言語として、ＢＰＥＬ４ＷＳ（Business Process Execution Language for Web Services）などがある。ビジネスプロセスは、アクティビティと呼ばれる複数のステップにより構成される。このようにメッセージ処理部１２２における処理がビジネスプロセスとして記述されている場合、ビジネスプロセスを構成する各アクティビティの前後において署名の有効性の検証を行なってもよい。
【００８７】
また、本実施形態では、メッセージを取得した箇所を表す情報として、対象サービス１４０２およびＩＮ／ＯＵＴ１４０３の情報を用いたが、メッセージ処理部１２２におけるアクティビティの前後で署名の有効性の検証を行なう場合、アクティビティを特定する識別子を用いてメッセージを取得した箇所を表してもよい。
【図面の簡単な説明】
【００８８】
【図１】第１実施形態におけるシステムの構成を示す図である。
【図２】図１に示した各装置のハードウェア構成を示す図である。
【図３】図１に示したシステムが実行する処理の流れを示す図である。
【図４】署名の付与されたメッセージの例を示す図である。
【図５】図１に示した署名情報抽出部における抽出処理の流れを示す図である。
【図６】図１に示した署名対象情報記憶部に格納される情報例を示す図である。
【図７】図１に示した参照先要素記憶部に格納される情報例を示す図である。
【図８】図１に示したメッセージ処理部による処理後のメッセージの例を示す図である。
【図９】図１に示した署名情報置換部における置換処理の流れを示す図である。
【図１０】図１に示した署名情報置換部による置換処理を行なった後のメッセージの例を示す図である。
【図１１】第２実施形態におけるシステムの構成を示す図である。
【図１２】図１１に示したシステムが実行する処理の流れを示す図である。
【図１３】図１２に示した署名の有効性検証処理の詳細な流れを示す図である。
【図１４】図１１に示した署名有効性記憶部に格納される情報例を示す図である。
【図１５】従来技術による処理の流れを示す図である。
【符号の説明】
【００８９】
１１０  署名装置
１１１  署名付与部
１１２  通信処理部
１２０  中継装置
１２１  通信処理部
１２２  メッセージ処理部
１２３  署名情報抽出部
１２４  署名情報置換部
１２５  署名情報記憶部
１２６  参照先要素記憶部
１２７  署名対象情報記憶部
１３０  検証装置
１３１  通信処理部
１３２  署名検証部
１４０  ネットワーク
２０１  計算機
２０２  通信装置
２０３  入力装置
２０４  出力装置
２０５  ＣＰＵ（処理部）
２０６  メモリ（記憶部）
２０７  記憶装置
２４０  ネットワーク
１１１０  情報処理装置
１１１１  署名有効性検証部
１１１２  署名有効性記憶部
１１２０，１１３０  サービス提供装置
１４０１  ダイジェスト値
１４０２  対象サービス
１４０３  ＩＮ／ＯＵＴ
１４０４  取得時刻
１４０５  署名有効性
【図１】
2008219585.tif 000003
【図２】
2008219585.tif 000004
【図３】
2008219585.tif 000005
【図４】
2008219585.tif 000006
【図５】
2008219585.tif 000007
【図６】
2008219585.tif 000008
【図７】
2008219585.tif 000009
【図８】
2008219585.tif 000010
【図９】
2008219585.tif 000011
【図１０】
2008219585.tif 000012
【図１１】
2008219585.tif 000013
【図１２】
2008219585.tif 000014
【図１３】
2008219585.tif 000015
【図１４】
2008219585.tif 000016
【図１５】
2008219585.tif 000017