(57)【要約】  本発明は、分散処理の過程においてデータセキュリティを一貫して保ちつつ、暗号鍵を柔軟に変更することができるデータ処理システムを提供することを目的とする。  本発明に係るデータ処理システムは、アプリケーションプログラムの入出力データと暗号鍵との間の対応関係を管理する鍵管理データベースを備え、各分散ワーカ計算機は、前記鍵管理データベースが保持している暗号鍵を用いて、前記アプリケーションプログラムの入出力データを暗号化または復号化する（図１参照）。
2015162688.tif 000002
【特許請求の範囲】
【請求項１】
１以上のアプリケーションプログラムを分散して実行する１以上のワーカ計算機を有する分散計算機システム、
前記分散計算機システムに対して前記アプリケーションプログラムを実行するよう依頼するローカル計算機、
前記アプリケーションプログラムに対して入力する入力データと前記入力データを暗号化するために用いる第１暗号鍵との間の第１対応関係、および前記アプリケーションプログラムが出力する出力データを暗号化するために用いる第２暗号鍵と前記出力データを出力する前記アプリケーションプログラムとの間の第２対応関係を管理する鍵管理データベース、
を有し、
前記ローカル計算機は、
前記第１暗号鍵を用いて前記入力データを暗号化した上で前記分散計算機システムに対して送信し、前記暗号化された入力データを入力として用いて前記アプリケーションプログラムを実行するよう前記分散計算機システムに対して依頼し、
前記分散計算機システムは、
前記アプリケーションプログラムを実行するよう前記ローカル計算機から依頼されると、前記アプリケーションプログラムを前記ワーカ計算機に対して割り当てるとともに、前記アプリケーションプログラムの識別子および前記入力データの識別子をキーにして前記鍵管理データベースから前記第１および第２暗号鍵を取得し、
前記ワーカ計算機は、
取得した前記第１暗号鍵を用いて前記入力データを復号化して前記アプリケーションプログラムに対して入力し、取得した前記第２暗号鍵を用いて前記アプリケーションプログラムが出力する前記出力データを暗号化する
ことを特徴とするデータ処理システム。
【請求項２】
前記ワーカ計算機は、
前記入力データを復号化し終えると前記第１暗号鍵を前記ワーカ計算機の記憶装置上から消去し、前記出力データを暗号化し終えると前記第２暗号鍵を前記ワーカ計算機の記憶装置上から消去し、
前記分散計算機システムは、
前記ワーカ計算機が前記アプリケーションプログラムを実行し終えると、前記鍵管理データベースから取得した前記第１および第２暗号鍵を消去する
ことを特徴とする請求項１記載のデータ処理システム。
【請求項３】
前記分散計算機システムは、前記ワーカ計算機が前記アプリケーションプログラムを実行し終えるまで、取得した前記第１および第２暗号鍵を揮発性メモリ上に一時的に格納しておき、前記ワーカ計算機が前記アプリケーションプログラムを実行し終えると前記揮発性メモリ上から前記第１および第２暗号鍵を消去する
ことを特徴とする請求項２記載のデータ処理システム。
【請求項４】
前記鍵管理データベースは、
前記ワーカ計算機が複数の前記アプリケーションプログラムを多段的に実行する場合における各前記アプリケーションプログラム間の入出力関係を、前記第１および第２対応関係として記述しており、
前記分散計算機システムは、
前記ワーカ計算機に対して割り当てる前記アプリケーションプログラムの前記入出力関係をクエリキーにして前記鍵管理データベースから前記第１および第２暗号鍵を取得する
ことを特徴とする請求項１記載のデータ処理システム。
【請求項５】
前記分散計算機システムは、
前記アプリケーションプログラムを実行する過程において前記入出力関係に当てはまらないサブプロセスを実行する必要がある場合は、前記第１または第２暗号鍵を新たに生成して前記ワーカ計算機に対して引き渡し、生成した前記第１または第２暗号鍵と前記サブプロセスとの間の前記第１または第２対応関係を前記鍵管理データベースに格納する
ことを特徴とする請求項４記載のデータ処理システム。
【請求項６】
前記鍵管理データベースは、前記第１および第２対応関係それぞれの優先度を管理しており、
前記ワーカ計算機は、前記第１または第２暗号鍵を新たに生成した場合は、その暗号鍵を最も高い前記優先度で前記鍵管理データベースに登録し、
前記分散計算機システムは、前記クエリキーに対応する前記第１または第２暗号鍵が前記鍵管理データベース内に複数存在する場合は、そのなかで前記優先度が最も高いものを取得する
ことを特徴とする請求項５記載のデータ処理システム。
【請求項７】
前記分散計算機システムは、
前記アプリケーションプログラムを前記ワーカ計算機に対して割り当てる前に、前記ワーカ計算機が前記アプリケーションプログラムを実行する権限があるか否かを認証し、認証許可する場合のみ前記アプリケーションプログラムを割り当てる
ことを特徴とする請求項１記載のデータ処理システム。
【請求項８】
前記データ処理システムは、前記第１および第２対応関係の少なくともいずれかを指定するユーザインターフェースを備える
ことを特徴とする請求項１記載のデータ処理システム。
【請求項９】
前記データ処理システムは、前記第１および第２対応関係の少なくともいずれかを指定するユーザインターフェースを備え、
前記ワーカ計算機は、前記アプリケーションプログラムを実行する過程において、前記入出力関係に当てはまらないサブプロセスとして前段において実行したものと同一の前記アプリケーションプログラムを実行する必要がある場合は、前段において実行した前記アプリケーションプログラムに対応する前記第１または第２暗号鍵を流用するか否かを前記ローカル計算機に対して問い合わせ、
前記ローカル計算機は、前記ユーザインターフェースを介して、前記ワーカ計算機からの前記問い合わせに対して回答する
ことを特徴とする請求項４記載のデータ処理システム。
【請求項１０】
前記鍵管理データベースは、前記第１対応関係として、前記第１暗号鍵を用いる前記ワーカ計算機の識別子を管理するとともに、前記第２対応関係として、前記第２暗号鍵を用いる前記ワーカ計算機の識別子を管理し、
前記分散計算機システムは、前記クエリキーに加えて前記アプリケーションプログラムを割り当てる前記ワーカ計算機の識別子を用いて前記第１および第２暗号鍵を取得する
ことを特徴とする請求項１記載のデータ処理システム。
【請求項１１】
前記ワーカ計算機は、複数の前記出力データを一括して暗号化し、一括して暗号化された複数の前記入力データを復号化して個々の前記入力データを取得する
ことを特徴とする請求項１記載のデータ処理システム。
【請求項１２】
１以上のアプリケーションプログラムを分散して実行する１以上のワーカ計算機を有する分散計算機システム、
前記分散計算機システムに対して前記アプリケーションプログラムを実行するよう依頼するローカル計算機、
前記アプリケーションプログラムに対して入力する入力データと前記入力データを暗号化するために用いる第１暗号鍵との間の第１対応関係、および前記アプリケーションプログラムが出力する出力データを暗号化するために用いる第２暗号鍵と前記出力データを出力する前記アプリケーションプログラムとの間の第２対応関係を管理する鍵管理データベース、
を有するデータ処理システムを用いてデータを処理する方法であって、
前記ローカル計算機が、
前記第１暗号鍵を用いて前記入力データを暗号化した上で前記分散計算機システムに対して送信し、前記暗号化された入力データを入力として用いて前記アプリケーションプログラムを実行するよう前記分散計算機システムに対して依頼するステップ、
前記分散計算機システムが、
前記アプリケーションプログラムを実行するよう前記ローカル計算機から依頼されると、前記アプリケーションプログラムを前記ワーカ計算機に対して割り当てるとともに、前記アプリケーションプログラムの識別子および前記入力データの識別子をキーにして前記鍵管理データベースから前記第１および第２暗号鍵を取得するステップ、
前記ワーカ計算機が、
取得した前記第１暗号鍵を用いて前記入力データを復号化して前記アプリケーションプログラムに対して入力し、取得した前記第２暗号鍵を用いて前記アプリケーションプログラムが出力する前記出力データを暗号化するステップ、
を有することを特徴とするデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを分散処理するシステムに関する。
【背景技術】
【０００２】
近年、ビッグデータというキーワードのもとで多くの企業が大量の電子データを利活用するようになった。これは、クラウド計算機環境と、分散並列処理のミドルウェアの普及という２つの大きな理由が背景にある。【０００３】
大量のデータを処理するための計算機環境として、クラウド計算機環境が利用されている。クラウド計算機環境は、一般に、リソースが伸縮可能という特徴があり、必要な時に必要なだけの計算資源を割り当て、必要がない場合には計算資源を解放することにより、リソースを有効活用できる。そのため、クラウド計算機環境は、一時的に大量の計算処理能力が必要なデータ処理に適している。【０００４】
分散並列処理のミドルウェアとして分散バッチ処理のＡｐａｃｈｅ  Ｈａｄｏｏｐ、分散ストリーミング処理のミドルウェアとしてＪｕｂａｔｕｓやＡｐａｃｈｅ  Ｓｔｏｒｍなどのオープンソースソフトウェアが登場し、一般的なＰＣサーバを用いて分散並列計算をする技術が普及した。【０００５】
クラウド計算機環境上に、分散並列処理のシステムを構築する場合、バッチ処理でＡｐａｃｈｅ  Ｈａｄｏｏｐを利用し、その後、ストリーミング処理でＡｐａｃｈｅ  Ｓｔｏｒｍを利用するなど、データ処理の特性に合わせて柔軟にシステムを組み合わせることができる。これにより、大量のデータを短時間で処理するために必要な計算資源やシステム構築のためのコストを、大幅に引き下げることができる。【０００６】
一方で、クラウド計算機環境上での分散並列処理が普及するにつれ、セキュリティの重要性が高まっている。従来から、クラウド計算機環境は、クラウド上のデータに対するアクセス制御機能を提供しており、ほかのユーザが自分のデータにアクセスできないようにすることができる。しかしクラウド環境の管理者は一般に、管理プログラムを利用して、一般ユーザがアクセスすることができないデータであっても閲覧することができる。【０００７】
クラウド管理者からのデータアクセスを防ぐためには、データを暗号化することが必要である。クラウド環境側でデータを暗号化する機能が提供されている場合もある。しかしながら、全てのクラウド環境が暗号化機能を備えているわけではない。【０００８】
下記特許文献１は、第３者による不正を防止する技術として、第３者によるプログラムの改変を検知することができるマイクロプロセッサを開示している。同文献記載のマイクロプロセッサは、プログラムをプロセス単位で実行し、プロセス識別情報とプロセス認証情報とを対応付けて保持する。プロセス識別情報とプロセスの認証情報がマッチしなければ、プログラムが改変されていることを意味し、改変されたプログラムを実行する前に検知することができる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００５−１９６２５７号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
クラウド計算機環境のように、ユーザ、計算機環境の管理者を含めて多人数がアクセスする分散計算機システムにおいては、第３者がデータを閲覧できなくするため、データを分散処理可能な形態で暗号化する必要がある。【００１１】
多段階に渡る分散並列処理においては、暗号化されたデータと鍵の対応を各段に対して追跡する必要があり、管理コストが大きい。従来のデータ暗号化を伴う分散並列処理システムは、個々の分散ノードが暗号化・復号化の鍵の管理をしており、それぞれを連携させるための仕組みがない。【００１２】
分散処理システムに関する上記のような前提の下、単に各分散ノードが暗号化と復号化を実施するのみでは、データが平文のままノード間を流れる箇所が発生する。これを防ぎ分散処理の始めから終わりまで一貫してセキュリティを保つには、各ノードが実施する分散処理の過程において、データ暗号化処理や鍵管理処理（データと鍵の対応関係を管理する処理）を追加することが必要になると考えられる。したがって、分散処理の実装が煩雑になってしまう。【００１３】
また、分散処理システムの用途として、外部データソースから集められたデータを処理し、データソースとは異なる別の外部データ記憶装置に対して処理結果を送信する場合が想定される。暗号化によってデータセキュリティを保ちつつこのようなデータフローに対応するためには、柔軟に鍵を変更することができる鍵管理方法が必要となる。【００１４】
本発明は、上記のような課題に鑑みてなされたものであり、分散処理の過程においてデータセキュリティを一貫して保ちつつ、暗号鍵を柔軟に変更することができるデータ処理システムを提供することを目的とする。
【課題を解決するための手段】
【００１５】
本発明に係るデータ処理システムは、アプリケーションプログラムの入出力データと暗号鍵との間の対応関係を管理する鍵管理データベースを備え、各分散ワーカ計算機は、前記鍵管理データベースが保持している暗号鍵を用いて、前記アプリケーションプログラムの入出力データを暗号化または復号化する。
【発明の効果】
【００１６】
本発明に係るデータ処理システムによれば、分散処理の過程においてデータセキュリティを保ちつつ、分散ノードがデータを暗号化または復号化するために用いる暗号鍵を柔軟に管理することができる。
【図面の簡単な説明】
【００１７】
【図１】実施形態１に係るデータ処理システム１０００の構成図である。
【図２】管理端末１５１のハードウェア構成図である。
【図３】鍵管理データベース２１０の構成とデータ例を示す図である。
【図４】プロセスとプロセス識別子の１例を示す図である。
【図５】図４に示す分散処理フローを前提とする鍵管理データベース２１０のデータ例を示す図である。
【図６】データ処理システム１０００の動作を説明するフローチャートである。
【図７】ステップＳ６１０の詳細を説明するシーケンス図である。
【図８】ステップＳ６２０〜Ｓ６３０の詳細を説明するシーケンス図である。
【図９】実施形態３に係るデータ処理システム１０００のアプリケーション構成図である。
【図１０】実施形態３における鍵管理データベース２１０のデータ例である。
【図１１】実施形態４に係るデータ処理システム１０００のアプリケーション構成図である。
【図１２】実施形態４における鍵管理データベース２１０のデータ例である。
【図１３】実施形態５における分散ワーカ部１４０の処理フローを示す図である。
【図１４】ステップＳ８０６において認証部１２０が提供するユーザインターフェースの画面例である。
【図１５】実施形態６における鍵管理データベース２１０のデータ例である。
【発明を実施するための形態】
【００１８】
以下に説明する本発明の実施形態において、要素の数等に言及する場合、特に指定された場合および原理的に明らかに特定される場合を除き、その特定の数に限定されることはなく、特定の数以上でも以下でもよい。
【００１９】
さらに、以下の実施形態において、その構成要素は、特に指定された場合および原理的に明らかに必要とされる場合を除き、必ずしも必須のものではない。また、同様に以下の実施形態において、構成要素の形状や位置関係について言及するときは、特に明示する場合や原理的に明らかにそうでないと考えられる場合を除き、実質的にその形状等に近似または類似するものを含むものとする。このことは上記数値および範囲に関しても同様である。
【００２０】
＜実施の形態１＞
図１は、本発明の実施形態１に係るデータ処理システム１０００の構成図である。データ処理システム１０００は、データを分散処理するシステムであり、分散計算機システム１００とローカル計算機２００を有する。分散計算機システム１００は、１以上の計算機（図１においては１台の計算機１５２および２台の計算機１５３）によってデータを分散処理するシステムである。ローカル計算機２００は、分散計算機システム１００に対して分散処理を依頼する端末である。ローカル計算機２００と分散計算機システム１００は、ネットワーク３００によって接続されている。
【００２１】
ローカル計算機２００は、鍵管理データベース２１０、鍵生成部２２０、実行命令部２３０、プロセス識別子処理部２４０、暗号化部２５０、復号化部２６０、データ記憶装置２８０、１以上のユーザプログラム２７０（図１においては第１〜第３の３つ）を有する。
【００２２】
鍵管理データベース２１０は、暗号化または復号化において用いる鍵と、その鍵によって暗号化または復号化されるデータとの間の対応関係を管理する。鍵管理データベース２１０が管理する鍵は、例えばパスワードなどの手段により正当な利用者のみが利用できるようにアクセスを制限する。鍵とデータとの間の対応関係は、（ａ）プログラムに対して入力するデータとそのデータを処理するために用いる鍵との間の対応関係、または（ｂ）データを処理するプログラムの識別子とそのプログラムが暗号化または復号化において用いる鍵との間の対応関係、によって記述することができる。ここでいうプログラムとは、具体的にはユーザプログラム２７０のことである。鍵管理データベース２１０の具体例については後述する。
【００２３】
鍵生成部２２０は、暗号化または復号化において用いる鍵を生成する。本発明において暗号化アルゴリズムの制限はなく、ブロック暗号とストリーム暗号いずれも利用することができる。また、共通鍵暗号や公開鍵暗号を利用することもできる。暗号化方式によっては鍵のほかに初期化ベクトルが必要な場合もあるが、以下ではそのような付随情報も含めて鍵と呼ぶ。以下では記載の便宜上、暗号鍵と復号鍵を区別せず一体的に鍵と称する。
【００２４】
プロセス識別子処理部２４０は、鍵管理データベース２１０が鍵とプログラムとの間の対応関係を管理するために用いるプログラム識別子を生成する。また、プログラム識別子がどのプログラムに対応するのかを解釈する役割も有する。鍵管理データベース２１０はさらに鍵とデータとの間の対応関係も管理するので、プロセス識別子処理部２４０はそのデータの識別子についても同様の処理を実施することもできるし、後述するようにデータのファイルパスをそのデータの識別子として代用してもよい。
【００２５】
プロセス（またはデータ）の識別子としては、例えばユーザプログラム２７０のハッシュ値（ＭＤ５、ＳＨＡなど）を用いることができる。ハッシュ値は人間にとっての可読性が低く文字列長が長いため、ハッシュ値よりも簡易な別名（エイリアス）を付けて識別子として用いてもよい。以下では説明の簡易のため、プログラムの名称をプログラム識別子として用いる。
【００２６】
本質的には同じ処理を実装したプログラムであっても、例えば不具合修正などにともなうバージョンアップによって異なるプロセス識別子が割り当てられる可能性がある。そこで、同じプログラムに対して同じ識別子を付与したい場合は、例えばプログラムの署名に論理的な対応表を付加するなどの手段により、同じプログラムに対して常に同じプロセス識別子が割り当てられるようにすることもできる。
【００２７】
プロセス識別子処理部２４０は、プロセス経路をプロセス識別子として用いることもできる。例えばプログラムＡが処理したデータをプログラムＢが処理する部分構造が頻出する場合、これらプログラムの入出力関係をまとめてプログラム識別子ＡＢとすることができる。この場合のプロセス識別子ＡＢは、プログラムＡとＢの合成関数を識別する識別子としてみることができる。
【００２８】
復号化部２６０は、データを記憶装置から読み出して復号化し、対応するユーザプログラム２７０に復号化後のデータを引き渡す。暗号化部２５０は、ユーザプログラム２７０が出力するデータを受け取って暗号化し、ほかのユーザプログラム２７０へ引き渡すか、または記憶装置に格納する。
【００２９】
ユーザプログラム２７０は、分散計算機システム１００上で実行する処理を記述したプログラムである。例えば３つの分散ワーカ部１４０がそれぞれ実行する処理を第１〜第３ユーザプログラム２７０として記述することができる。
【００３０】
実行命令部２３０は、分散計算機システム１００に対してデータ処理を依頼する。分散計算機システム１００が計算機のハードウェア環境のみを提供し、実行すべきプログラムを備えていない（例えばＩａａＳ：Ｉｎｆｒａｓｔｒｕｃｔｕｒｅ  ａｓ  ａ  Ｓｅｒｖｉｃｅタイプのクラウド環境）場合は、実行命令部２３０は分散計算機システム１００が実行すべきプログラムを分散計算機システム１００に対して送信する。本実施形態１においては、プロセス識別子処理部２４０、暗号化部２５０、復号化部２６０、ユーザプログラム２７０はソフトウェアとして実装され、分散計算機システム１００はこれらソフトウェアを備えていないものとする。
【００３１】
分散計算機システム１００は、管理端末１５１、計算機１５２および１５３、データ記憶装置１６０を備える。管理端末１５１は、分散計算機システム１００の管理者が管理作業を実施するため用いる端末である。計算機１５２は、鍵生成部１１０と認証部１２０を実行する。２台の計算機１５３は、それぞれ分散マスタ部１３０と分散ワーカ部１４０を実行する。鍵生成部１１０と認証部１２０は、分散計算機システム１００があらかじめ備えていてもよいし、ユーザプログラム２７０などと併せてローカル計算機２００から送信してもよい。
【００３２】
鍵生成部１１０は、鍵生成部２２０と同様の機能を備える。認証部１２０は、鍵管理データベース２１０が管理している鍵と各対応関係についてのデータを受け取り、各計算機１５３が実行するプログラムに対してその鍵を引き渡す。認証部１２０は、計算機１５３が鍵を受け取る権限を有するか否かを認証する役割も有する。認証部１２０は、例えばＷｅｂサービスにおけるサーバとして実装することができる。認証部１２０と各計算機１５３との間の通信路は、例えばＳＳＬ（Ｓｅｃｕｒｅ  Ｓｏｃｋｅｔ  Ｌａｙｅｒ）などの公知の暗号化技術により暗号化することができる。認証部１２０自身の正当性は、サーバ証明書により証明することができる。
【００３３】
分散マスタ部１３０は、分散計算機システム１００が実行する分散処理を管理する機能部である。分散ワーカ部１４０は、分散計算機システム１００が実行する各分散処理（すなわちローカル計算機２００から受け取るユーザプログラム２７０）を実際に実行する機能部である。図１においては１つの分散ワーカ部１４０を例示したが、分散ワーカ部１４０およびこれを実行する計算機１５３の個数は任意であり、また１台の計算機１５３が複数の分散ワーカ部１４０を実行することもできるし、１台の計算機１５３内で分散マスタ部１３０と分散ワーカ部１４０を実行することもできる。分散マスタ部１３０と分散ワーカ部１４０は分散計算機システム１００によってあらかじめ提供されていることを想定するが、ローカル計算機２００から分散計算機システム１００へインストールすることもできる。
【００３４】
図２は、管理端末１５１のハードウェア構成図である。計算機１５２、１５３、およびローカル計算機２００は同様のハードウェア構成を備えるので、ここでは管理端末１５１の構成についてのみ説明する。
【００３５】
管理端末１５１は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１５１１、メモリ１５１２、ローカルファイルシステム１５１３、入力装置１５１４、出力装置１５１５、ネットワークデバイス１５１６０、バス１５１７を備える。各機能部はバス１７０によって接続されている。ネットワークを介してリモートから管理端末１５１を操作する場合、入力装置１５１４と出力装置１５１５は省略してもよい。また、ローカルファイルシステム１５１３は、ハードディスクドライブ、ソリッドステートドライブなどの記憶装置内の記憶領域上に形成されたファイル格納領域である。ネットワークデバイス１５１６は通信インターフェースである。ＣＰＵ１５１１は、ローカルファイルシステム１５１３が格納しているプログラムを実行する。以下では記載の便宜上、各プログラムを動作主体として説明する場合があるが、実際にこれらプログラムを実行するのはＣＰＵ１５１１などの演算装置である。
【００３６】
図３は、鍵管理データベース２１０の構成とデータ例を示す図である。説明のため、入力データと暗号化データの例を併記した。
【００３７】
図３（Ａ）は分散処理過程の最初に実行されるユーザプログラム２７０に対して入力されるデータの例を示す。入力データはレコード毎に区分してデータ記憶装置１６０または２８０上に格納される。ここでは機械学習における分散処理を想定し、１レコードが１つの数値ベクトルを表す例を示した。
【００３８】
図３（Ｂ）は、入力データの各レコードを暗号化したデータの例を示す。暗号化データの各レコードのヘッダには、暗号化部２５０によってプロセス識別子が付与されている。図３に示す例においては暗号化以外のプロセスを経ていないため、入力データの識別子「Ｄａｔａ１」をプロセス識別子として用いている。
【００３９】
図３（Ｃ）は、鍵管理データベース２１０の構成とデータ例を示す。鍵管理データベース２１０は、環境ＩＤ２１１、優先度２１２、プロセス識別子２１３、暗号鍵２１４を有する。説明の簡易のため暗号鍵と復号鍵が共通である暗号方式を仮定したが、暗号方式に応じて復号鍵を別途設けることもできる。
【００４０】
環境ＩＤ２１１は、ユーザプログラム２７０を実行する環境（すなわち計算機）を区別するＩＤである。プロセス識別子２１３が同じであっても、環境ＩＤ２１１が異なれば、異なる暗号鍵２１４を指定することができる。環境ＩＤ２１１は省略することもできる。以下では説明の便宜上、鍵管理データベース２１０から鍵を取得するとき用いるクエリキーにおいては環境ＩＤ２１１を省略するが、クエリキーとして環境ＩＤ２１１を追加的に指定してもよい。優先度２１２は、プロセス識別子２１３と暗号鍵２１４のペアの優先度を示す。ここでは数値が小さいほど優先度が高く、大きいほど優先度が小さいものとする。認証部１２０が鍵管理データベース２１０から暗号鍵を取得する際には、指定した条件にマッチするプロセス識別子２１３のなかで優先度２１２が最も高いものに対応する暗号鍵２１４を用いる。
【００４１】
プロセス識別子２１３は、ユーザプログラム２７０に対して入力されるデータまたはユーザプログラム２７０の識別子を記述する。分散処理の過程において複数のユーザプログラム２７０が多段的に実行される場合は、ユーザプログラム２７０間の入出力関係をプロセス識別子２１３によって表現することができる。この入出力関係は例えば、プログラミング言語Ｌｉｓｐで用いられるＳ式として表現することができる。
【００４２】
図３（Ｃ）に示すデータ例においては、ユーザプログラム２７０はまずＤａｔａ１を暗号鍵１によって暗号化し（１行目）、さらに暗号化されたＤａｔａ１を入力としてｒｅｍｏｖｅＺｅｒｏという処理が実行される（２行目）ことが分かる。ｒｅｍｏｖｅＺｅｒｏの出力は暗号鍵２によって暗号化される。ｒｅｍｏｖｅＺｅｒｏの処理結果に対してさらにｓｏｒｔＦｅａｔｕｒｅという処理を実行する場合、プロセス識別子は（ｓｏｒｔＦｅａｔｕｒｅ  （ｒｅｍｏｖｅＺｅｒｏ  Ｄａｔａ１））となる。記号ＡＮＹは任意のデータを表す。例えば（ｓｏｒｔＦｅａｔｕｒｅ  ＡＮＹ）は、任意のデータに対してｓｏｒｔＦｅａｔｕｒｅを実行することを意味する。図３（Ｃ）においては、（ｓｏｒｔＦｅａｔｕｒｅ  ＡＮＹ）の優先度は３であるため、（ｒｅｍｏｖｅＺｅｒｏ  Ｄａｔａ１）が先に適用され、その結果に対してさらに（ｓｏｒｔＦｅａｔｕｒｅ  ＡＮＹ）が適用される。
【００４３】
復号鍵は、復号処理を開始する前に準備する必要がある。暗号鍵は必ずしも暗号処理を開始する前に準備する必要はなく、鍵管理データベース２１０において暗号鍵が指定されていないプロセスについては鍵生成部２２０または１１０が暗号鍵を自動生成し、これを鍵管理データベース２１０に反映すればよい。
【００４４】
図４は、プロセスとプロセス識別子の１例を示す図である。図４において、Ｄａｔａ１（４００）は分散処理過程における最初の入力データであり、処理Ａ４１０、処理Ｂ４２０、処理Ｃ４３０がこの順で実行されるとともに互いにデータを入出力し、Ｄａｔａ２（４４０）を出力する分散処理を例示した。プロセス識別子４１５は、Ｄａｔａ１（４００）を処理Ａ４１０が処理した結果に割り当てられるプロセス識別子である。プロセス識別子４２５は、処理Ｂ４２０が処理Ａの出力を処理した結果に割り当てられるプロセス識別子である。プロセス識別子４３５は、処理Ｃ４３０が処理Ｂ４２０の出力を処理した結果に割り当てられるプロセス識別子である。
【００４５】
図５は、図４に示す分散処理フローを前提とする鍵管理データベース２１０のデータ例を示す図である。説明の簡易のため、環境ＩＤ２１１は省略した。
【００４６】
図５（Ａ）は鍵管理データベース２１０のデータ例を示し、図５（Ｂ）はプロセス識別子処理部２４０が図５（Ａ）にしたがって各プロセス識別子に対して鍵を割り当てた結果を示す。鍵管理データベース２１０は、処理の順とは逆順にプロセス識別子を保持している。つまり、処理Ｃ４３０の処理結果の優先度が最も高く、Ｄａｔａ１の優先度が最も低い。Ｄａｔａ１の暗号鍵のみあらかじめ提供されており、そのほかの暗号鍵は指定されていない。
【００４７】
図５（Ｂ）において、復号化部２６０がＤａｔａ１を復号化するために用いるキー１は初めから定義されている。プロセス識別子処理部２４０は、処理Ａ４１０に対応する新たなプロセス識別子（処理Ａ  Ｄａｔａ１）を生成する。鍵管理データベース２１０を参照すると、生成した識別子に対応する（処理Ａ  ＡＮＹ）の暗号鍵は未指定であるため、鍵生成部１１０または２２０は新たに暗号鍵を生成する。（処理Ｂ  （処理Ａ  Ｄａｔａ１））、（処理Ｃ  （処理Ｂ  （処理Ａ  Ｄａｔａ１）））についても同様にプロセス識別子と暗号鍵が生成される。以上の結果、暗号化部２５０はＤａｔａ２を暗号鍵「自動生成３」により暗号化する。
【００４８】
図５（Ｃ）は鍵管理データベース２１０の別データ例を示し、図５（Ｄ）はプロセス識別子処理部２４０が図５（Ｃ）にしたがって各プロセス識別子に対して鍵を割り当てた結果を示す。鍵管理データベース２１０は、Ｄａｔａ１の優先度を最も高く指定している。この場合、全てのプロセス識別子においてＤａｔａ１が優先される。したがって、プロセス識別子と暗号鍵の対応は図５（Ｄ）のようになり、Ｄａｔａ２は暗号鍵「キー１」により暗号化される。
【００４９】
図４〜図５に示すように、鍵管理データベース２１０が格納しているデータと暗号鍵との間の対応関係および各プロセスと暗号鍵との間の対応関係を編集することにより、各ユーザプログラム２７０と暗号鍵との間の対応関係を柔軟に変更することができる。鍵管理データベース２１０が格納する対応関係は、ローカル計算機２００が分散計算機システム１００に対して処理を依頼する前に、例えばローカル計算機２００のユーザが適当な操作インターフェースを介して図４に例示するような各プロセスの処理順とともに定義すればよい。
【００５０】
図６は、データ処理システム１０００の動作を説明するフローチャートである。ここでは、分散ワーカ部１４０による分散計算結果を別の分散ワーカ部１４０が集約し、集約の結果に基づいて改めて分散計算と集約を反復的に繰り返すようなデータ処理を仮定している。このような処理は、具体的にはｋ−ｍｅａｎｓクラスタリングや線形サポートベクタマシンを分散処理化した際に見られる。以下図６の各ステップについて説明する。
【００５１】
（図６：ステップＳ６００〜Ｓ６０５）
ローカル計算機２００のユーザは、鍵管理データベース２１０および各機能部を起動してローカル計算機２００を初期化する（Ｓ６００）。ローカル計算機２００のユーザは、分散計算機システム１００上の計算機１５２および１５３を起動する（Ｓ６０５）。
【００５２】
（図６：ステップＳ６１０）
暗号化部２５０は、ローカル計算機２００のデータ記憶装置２２０が格納している、分散計算機システム１０００に対して処理を依頼する入力データのファイルパスをキーにして、その入力データを暗号化するために用いる暗号鍵を取得する。暗号化部２５０は、取得した暗号鍵によってその入力データを暗号化する。暗号化部２５０は、暗号化された入力データを分散計算機システム１００のデータ記憶装置１６０に格納する。本ステップの詳細は後述の図７で説明する。
【００５３】
（図６：ステップＳ６１５）
ユーザは、ローカル計算機２００上の操作インターフェースを介して、分散計算機システム１０００に対してデータ処理を依頼する。実行命令部２３０はその依頼を分散計算機システム１００に対して送信する。
【００５４】
（図６：ステップＳ６２０）
認証部１２０は、実行命令部２３０から処理依頼を受け取ると、適当な認証処理を実施する。実行命令部２３０は認証を受けた後、分散マスタ部１３０と分散ワーカ部１４０を起動する。実行命令部２３０はさらに、各分散ワーカ部１４０に対してそれぞれ割り当てるユーザプログラム２７０とともに、プロセス識別子処理部２４０、暗号化部２５０、復号化部２６０を分散計算機システム１００に対して配布する。図６に示す例においては、分散ワーカ部１４０が実施する分散処理は、分散処理と集約処理に分かれている。例えば第１ユーザプログラム２７０は分散ワーカ処理を実装し、第２ユーザプログラム２７０は集約ワーカ処理を実装する、などのように各ユーザプログラム２７０の役割を区分することができる。
【００５５】
（図６：ステップＳ６２５：その１）
各分散ワーカ部１４０はそれぞれ、ユーザプログラム２７０、プロセス識別子処理部２４０、暗号化部２５０、復号化部２６０を初期化する。プロセス識別子処理部２４０は、ユーザプログラム２７０のプロセス識別子を計算し、保持する。分散計算を実施する分散ワーカ部１４０に対して割り当てられた第１ユーザプログラム２７０は、入力データをデータ記憶装置１６０から読み取る。データの読み出しはレコード単位で実施され、１つのレコードが複数の分散ワーカ部１４０に分割されることはない。復号化部２６０は、レコードに紐づけられたプロセス識別子をキーにして、鍵管理データベース２１０が管理している復号鍵を取得して入力データを復号化し、第１ユーザプログラム２７０へ引き渡す。プロセス識別子処理部２４０は、第１ユーザプログラム２７０が入力データを処理した結果に対応するプロセス識別子を生成する。暗号化部２５０は、そのプロセス識別子をキーにして、鍵管理データベース２１０から暗号鍵を取得する。暗号化部２５０はその暗号鍵を用いて、第１ユーザプログラム２７０による処理結果を暗号化し、レコードのヘッダに新しいプロセス識別子を追加する。
【００５６】
（図６：ステップＳ６２５：その２）
分散計算処理が多段に渡っている場合、分散ワーカ部１４０は、第１ユーザプログラム２７０による処理結果（暗号化済）を次段の分散ワーカ部１４０へ引き渡す。図６に示す例においては、集約処理を実施する分散ワーカ部１４０（第２ユーザプログラム２７０）に対して引き渡すことになる。分散ワーカ部１４０が１度利用した鍵は再利用される可能性が高いため、分散ワーカ部１４０はこれをメモリ上にキャッシュしてもよい。
【００５７】
（図６：ステップＳ６３０）
集約処理を実施する分散ワーカ部１４０は、分散計算処理を実施する分散ワーカ部１４０から分散計算結果を受け取る。ステップＳ６２５と同様に、プロセス識別子をキーにして、復号化、第２ユーザプログラム２７０による処理、および暗号化が実施される。ステップＳ６２０〜Ｓ６３０の詳細は後述の図８で説明する。
【００５８】
（図６：ステップＳ６３５）
集約処理を実施する分散ワーカ部１４０は、終了判定（分散計算処理が完了したか否かの判定）を実施する。終了と判定された場合はステップＳ６４０に進み、終了と判定されなかった場合はステップＳ６２５に戻って残レコードに対して同様の処理を実施する。
【００５９】
（図６：ステップＳ６４０）
分散マスタ部１３０は、分散ワーカ部１４０による処理が全て完了すると、実行命令部２３０に対して終了通知を発信する。実行命令部２３０は、分散マスタ部１３０より終了通知を受信する。実行命令部２３０は、分散計算機システム１００のデータ記憶装置１６０に保存されている計算結果を取得し、ローカル計算機２００のデータ装置２８０に格納する。計算結果は暗号化されているため、これを閲覧するためには復号化が必要である。復号化部２６０は、計算結果のレコードヘッダに記載されているプロセス識別子をキーにして鍵管理データベース２１０から復号鍵を取得し、その鍵を用いて計算結果を復号する。
【００６０】
（図６：ステップＳ６４５）
ユーザは、分散マスタ部１３０と分散ワーカ部１４０を終了し、計算機１５２と１５３をシャットダウンする。ユーザは、ローカル計算機２００上で起動されているプロセスを終了させ、シャットダウンする。
【００６１】
図７は、ステップＳ６１０の詳細を説明するシーケンス図である。以下図７の各ステップについて説明する。
【００６２】
（図７：ステップＳ７０１）
ユーザは、分散計算機システム１００に対してデータ処理を依頼する際に、ローカル計算機２００の適当なインターフェースを介して、依頼する処理の順番や各処理に対応する暗号鍵などを指定し、鍵管理データベース２１０に格納する。既存の暗号鍵が存在しない場合は、鍵生成部２２０によって新たな鍵を生成し、対応するプロセス識別子とともに鍵管理データベース２１０に格納する。
【００６３】
（図７：ステップＳ７０２〜Ｓ７０３）
ユーザは、データ記憶装置２８０上における入力データのファイルパス、およびデータ記憶装置１６０上における出力データのファイルパスを指定して、分散計算機システム１００に対して処理を依頼するデータを送信するようローカル計算機２００に対して指示する（Ｓ７０２）。暗号化部２５０は、入力データのファイルパスをキーにして鍵管理データベース２１０から暗号鍵を取得し、その鍵を用いて入力データをレコード毎に暗号化し、プロセス識別子をレコードのヘッダに付加した上で、データ記憶装置１６０に暗号化済データを格納する（Ｓ７０３）。
【００６４】
（図７：ステップＳ７０２〜Ｓ７０３：補足）
実行命令部２３０および暗号化部２５０は、本シーケンス図に示す処理が完了すると、自身が保持している暗号鍵（のコピー）を消去する。これにより、暗号鍵が不正に流出する可能性を抑制することができる。各機能部が計算機の揮発性メモリ（例えばＲａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）上に鍵を保持している場合は、計算機またはプログラムを終了することにより鍵は自動的に消去される。不揮発性記憶装置上に鍵を保持している場合は、明示的に削除する必要がある。他の機能部が鍵のコピーを消去する場合も同様である。
【００６５】
図８は、ステップＳ６２０〜Ｓ６３０の詳細を説明するシーケンス図である。以下図８の各ステップについて説明する。なお図８の太線矢印は暗号化通信路を示す。
【００６６】
（図８：ステップＳ８０１）
実行命令部２３０は、分散計算機システム１００に対してデータ処理を依頼する際に、認証部１２０による認証を受ける。認証に成功すると、実行命令部２３０と認証部１２０は暗号化通信路を確立する。
【００６７】
（図８：ステップＳ８０２）
実行命令部２３０は、入力データとユーザプログラム２７０それぞれのプロセス識別子をキーにして、全ての必要な鍵を鍵管理データベース２１０から取得する。実行命令部２３０は、認証部１２０との間で確立した暗号化通信路を通してプロセス識別子と鍵を認証部１２０に対して送信する。認証部１２０に対して鍵を送信する前に、ローカル計算機２００のユーザがパスワードなどによって鍵自体を暗号化してもよい。この場合、ユーザは認証部１２０に対して鍵を送信した後、分散ワーカ部１４０を起動する前に、適当なユーザインターフェースを介して鍵を復号するためのパスワードを入力し、認証部１２０が復号化された鍵を使用できるようにする必要がある。認証部１２０は、実行命令部２３０から受け取った鍵とプロセス識別子を保持する。
【００６８】
（図８：ステップＳ８０３）
実行命令部２３０は、分散マスタ部１３０と分散ワーカ部１４０を起動する。実行命令部２３０は、ユーザプログラム２７０、プロセス識別子処理部２４０、暗号化部２５０、および復号化部２６０を分散マスタ部１３０に対して送信し、分散マスタ部１３０に対してジョブを起動するよう指示する。このとき各ユーザプログラム２７０の処理順や入出力関係などのジョブ情報についても併せて指定することができる。
【００６９】
（図８：ステップＳ８０４）
分散マスタ部１３０は、各分散ワーカ部１４０に対して、対応するユーザプログラム２７０を割り当てるとともに、プロセス識別子処理部２４０、暗号化部２５０、および復号化部２６０を割り当てる。分散マスタ部１３０は分散ワーカ部１４０による分散処理を開始する。分散計算処理を実施する分散ワーカ部１４０は、以下のステップＳ８０５を開始する。集約処理を実施する分散ワーカ部１４０は、以下のステップＳ８０８を開始する。
【００７０】
（図８：ステップＳ８０５）
プロセス識別子処理部２４０は、分散ワーカ部１４０に対して割り当てられたユーザプログラム２７０のプロセス識別子を計算し、保持する。分散ワーカ部１４０は、入力データのレコードを取得すると、レコードのヘッダからプロセス識別子を取得し、そのプロセス識別子をキーにして認証部１２０に対して復号鍵と暗号鍵を要求する。
【００７１】
（図８：ステップＳ８０６）
認証部１２０は、キーとして指定されたプロセス識別子と、分散ワーカ部１４０を実行している計算機１５３のノード情報とに基づいて、認証を実施する。認証許可する場合、認証部１２０は分散ワーカ部１４０に対して復号鍵と暗号鍵を送信する。認証許可しない場合、認証部１２０はその旨を分散ワーカ部１４０に対して通知し、分散ワーカ部１４０はその旨のログを出力するなどして処理を終了する。あるいは、認証部１２０が備えるユーザインターフェースを介して、ローカル計算機２００のユーザに対して認証不成立を通知し、データ処理を継続するか否か、ユーザが鍵を直接指定するか否か、などをユーザによる判断にゆだねることもできる。
【００７２】
（図８：ステップＳ８０６：補足その１）
認証部１２０は、プロセス識別子に対応する鍵が存在しない場合は、鍵生成部１１０により新たな鍵を生成する。認証部１２０は、この新しいプロセス識別子と鍵との間の対応関係を保持しておき、データ処理が終了したとき鍵管理データベース２１０にこれを反映する。特にユーザの指定がない限り、新しく生成された鍵には、もっとも高い優先度が与えられる。優先度が低いと、新しく生成された鍵が使われない可能性があるためである。新しく生成された鍵は、以前のどのプロセス識別子とも対応付けられていないため、優先度を高くしても以前のプロセス識別子との間で競合などの問題は生じない。
【００７３】
（図８：ステップＳ８０６：補足その２）
認証部１２０は、新たな鍵を生成するか、それとも既存の鍵を流用するかについて、ユーザインターフェースを介してユーザに問い合わせることもできる。分散処理過程において新しいプロセス識別子が発生する例としては、例えば同じプログラムを再帰呼び出しする回数が入力データに依拠して変わる場合が考えられる。この場合におけるユーザインターフェースの具体例については後述する。
【００７４】
（図８：ステップＳ８０６：補足その３）
計算機１５３のノード情報とは、例えば計算機１５３のＩＰアドレスやホスト名である。認証は、あらかじめ定められたルールによって自動的に実施することができる。例えば、分散計算過程において利用する計算機１５３のＩＰアドレスをあらかじめ認証部１２０が保持しておき、本ステップにおいて鍵を依頼した分散ワーカ部１４０のノード情報がこれに合致するか否かにより認証を実施することができる。そのほか、認証部１２０のユーザインターフェースを介して、鍵を要求した計算機１５３のノード情報とプロセス識別子を提示し、ユーザがマニュアル操作により認証することもできる。さらに、ユーザによるマニュアル認証を初回のみ実施し、その後は上記のような自動ルールによって認証することもできる。計算機１５３がサーバ証明書を保持している場合は、サーバ証明書を用いた認証も可能である。
【００７５】
（図８：ステップＳ８０７）
復号化部２６０は、取得した復号鍵を用いて、データ記憶装置１６０が格納している入力データをレコード毎に復号化する。ユーザプログラム２７０は、復号化されたレコードを処理（分散計算）する。暗号化部２５０は、ユーザプログラム２７０が出力する出力データをレコード毎に暗号化し、プロセス識別子をレコードのヘッダに追加し、次の処理を実施するユーザプログラム２７０（ここでは集約処理を実施する分散ワーカ部１４０）に対して引き渡す。
【００７６】
（図８：ステップＳ８０８）
集約処理を実施する分散ワーカ部１４０、および認証部１２０は、ステップＳ８０５〜Ｓ８０７と同様の処理を実施する。集約処理を実施する分散ワーカ部１４０は、分散計算結果が集束したか否かを判定し、集束したと判定する場合は処理完了した旨を分散マスタ部１３０に対して通知する。
【００７７】
（図８：ステップＳ８０９）
分散マスタ部１３０は、データ処理が完了した旨を実行命令部２３０に対して通知する。認証部１２０は、新たに作成した鍵を保持している場合は、対応するプロセス識別子とともにこれを鍵管理データベース２１０に反映する。分散計算機システム１００（ここでは認証部１２０および分散ワーカ部１４０）は、自身が保持している鍵（のコピー）を消去する。実行命令部２３０は、データ記憶装置１６０より最終処理結果を取得する。
【００７８】
＜実施の形態１：まとめ＞
以上のように、本実施形態１に係るデータ処理システム１０００は、ユーザプログラム２７０の入出力データと鍵との間の対応関係を記述したプロセス識別子を鍵管理データベース２１０によって管理し、分散計算機システム１００が分散処理を実施する際には、鍵管理データベース２１０が管理しているその対応関係にしたがって各ユーザプログラム２７０に対応する鍵を使用する。これにより、ユーザプログラム２７０が分散処理過程において使用する鍵をユーザがマニュアル作業によって管理する必要がなくなるので、ユーザの利便性を損なうことなく、ノード間のデータ送受信を暗号化することができる。
【００７９】
また、本実施形態１に係るデータ処理システム１０００は、ユーザプログラム２７０の入出力データと鍵との間の対応関係を鍵管理データベース２１０に集約して管理する。鍵管理データベース２１０を暗号化するなどによって保護することにより、分散計算機システム１００の管理者であってもその内容を閲覧することができなくなるので、鍵（および鍵によって暗号化されるデータ）を同管理者から保護することができる。
【００８０】
また、本実施形態１に係るデータ処理システム１０００は、ユーザプログラム２７０とは別に、各ユーザプログラム２７０が使用する鍵を管理する機能（鍵管理データベース２１０と認証部１２０）、暗号化部２５０、および復号化部２６０を提供する。したがってユーザプログラム２７０の作成者は、これらに相当する処理をユーザプログラム２７０内に記述する必要がないので、ユーザプログラム２７０の開発負担を抑制しつつ上記効果を発揮することができる。
【００８１】
＜実施の形態２＞
実施形態１においては、ローカル計算機２００が鍵管理データベース２１０を保持し、認証部１２０は鍵管理データベース２１０からプロセス識別子や鍵を取得することを説明した。鍵管理データベース２１０は必ずしもローカル計算機２００が保持する必要はなく例えば認証部１２０が鍵管理データベース２１０の機能を兼用してもよい。この場合、認証部１２０が新しい鍵を生成したとき鍵管理データベース２１０との間で同期を取る必要がなくなるので、構成や処理が簡易になる利点がある。一方で認証部１２０が全ての鍵を管理するため、認証部１２０における鍵管理の安全性を確保することが求められる。例えば認証部１２０が保持する鍵を暗号化した上で、その暗号鍵はローカル計算機２００上で保持する、などの対処を施すことが望ましい。
【００８２】
実施形態１において、暗号化部２５０と復号化部２６０はデータをレコード毎に暗号化または復号化することを説明したが、処理の効率化の観点から、暗号化部２５０は複数のレコードを束ねて暗号化し、復号化部２６０は束ねられた複数のレコードを復号化した上でレコード単位に展開するようにしてもよい。具体的には、暗号化部２５０は複数のレコードを束ねてより大きな単位でレコードを生成し、データを暗号化する。復号化部２６０は、データを復号化して得られた複数のレコードをいったんバッファに格納し、ユーザプログラム２７０に対してレコード毎にデータを引き渡す。これにより、複数のレコードを束ねたより大きなレコードに対して、１つのプロセス識別子を追加することができる。したがって、データ本体のデータ量に比べて、メタデータであるプロセス識別子のデータ量を小さくすることができる。
【００８３】
＜実施の形態３＞
本発明の実施形態３では、実施形態１〜２で説明したデータ処理システム１０００を文書クラスタリングアプリケーションに対して適用した例を説明する。データ処理システム１０００の構成は実施形態１〜２と同様であるため、以下では主に本実施形態３におけるアプリケーション固有の部分について説明する。
【００８４】
図９は、本実施形態３に係るデータ処理システム１０００のアプリケーション構成図である。本実施形態３において、分散計算機システム１００は、外部にある過去報告書９１０、支社Ａ報告書９１５、および支社Ｂ報告書９２０を入力データとして受け取り、統計値Ａ９５０と統計値Ｂ９５５とを外部にあるデータ記憶装置に出力する。分散ワーカ部１４０が実施するユーザプログラム２７０は、バッチ処理部９００とストリーム処理部９０５に分かれている。
【００８５】
バッチ処理部９００は、過去報告書９１０をクラスタリングし、文書を分類するモデル９４０をつくる。ストリーム処理部９０５は、日々提出される支社Ａ報告書９１５と支社Ｂ報告書９２０をリアルタイムに分類し、それぞれのカテゴリに属する文書数をカウントする。
【００８６】
クラスタリング手法としては、ｋ−ｍｅａｎｓクラスタリングを想定している。ｋ−ｍｅａｎｓクラスタリングは、教師なしクラスタリング手法であり、あらかじめ定められたｋ個のカテゴリに数値ベクトデータセットを分類する。ｋ−ｍｅａｎｓクラスタリングのモデルは、クラスタの重心位置である。その処理内容は、クラスタ判定９３０とクラスタ更新９３５の２つのステップの繰り返しであらわされる。クラスタ判定９３０は、データセットの数値ベクトルを１つ取り出し、現在のクラスタ重心位置のうちもっとも近いクラスタ重心を求め、その数値ベクトルが属するクラスタを判定する処理である。クラスタ判定９３０は初期モデル９２３を用いる。クラスタ更新９３５は、あるクラスタに属する数値ベクトルを入力とし、その重心位置を計算することによりクラスタ重心を更新する処理である。クラスタ判定９３０は、数値ベクトルごとに独立に計算できるため、分散処理することができる。
【００８７】
バッチ処理部９００は、素性抽出９２５、クラスタ判定９３０、クラスタ更新９３５をユーザプログラム２７０によって実装している。素性抽出９２５は、１つの文書を受け取り、その特徴を表す１つの数値ベクトルを返す。クラスタ判定９３０は、文書を表す数値ベクトルとクラスタ重心を表す数値ベクトルを入力として受け取り、文書がどのクラスタに属しているかを判定する。クラスタ更新９３５は、文書を表す数値ベクトルとその文書が属するクラスタを入力として受け取り、新しいクラスタ重心を計算する。
【００８８】
ストリーム処理９０５は、モデル９４０と支社Ａ報告書９１５と支社Ｂ報告書９２０を受け取り、支社Ａの統計値Ａ９５０、支社Ｂの統計値Ｂ９５５を出力する。ストリーミング処理９０５は、素性抽出とクラスタカウント９４５をユーザプログラム２７０によって実装している。素性抽出は、素性抽出９２５と同様の処理である。クラスタカウント９４５は、文書を表す数値ベクトルと、クラスタ重心を表す数値ベクトルを入力として受け取り、クラスタに属する文書数をカウントする。
【００８９】
図１０は、本実施形態３における鍵管理データベース２１０のデータ例である。記載の簡易のため、環境ＩＤ２１１は省略した。以下図１０にしたがって、本実施形態３におけるデータアクセス制限に関する要件について説明する。
【００９０】
管理部門の分析者は、分類モデル９４０を作るため、全ての過去文書にアクセスできる必要がある。各支社の報告書は機密情報を含むため、部外者に見られないようにする必要がある。また、同じ支社の報告書と統計値はその支社のユーザが閲覧できるようにし、異なる支社の報告書と統計値は閲覧できないように制限する必要がある。このため支社の文書作成者はそれぞれの地域で異なった鍵を持っている。分散計算機システム１００の管理者は、データ処理システム１０００を利用する企業にとっては部外者であるため、データを秘匿する必要がある。
【００９１】
図１０に示す鍵管理データベース２１０のデータ例は、上記アクセス制限要件を実現するために構成したものである。図１０において、プロセス識別子「支社Ａ報告書」と「支社Ｂ報告書」にはそれぞれ優先度１と優先度２が割り当てられている。統計値Ｂ９５５の暗号化鍵が「支社Ｂキー」となることを、以下に説明する。
【００９２】
統計値Ｂ９５５のプロセス識別子は、（クラスタカウント  （素性抽出  支社Ｂ報告書） モデル）である。最初のプロセス識別子（クラスタカウント  引数1  引数２）にマッチするプロセス識別子は（クラスタカウント  ＡＮＹ  ＡＮＹ）である。このプロセス識別子の優先度は３である。このプロセス識別子に対応する鍵が候補として保持される。
【００９３】
（クラスタカウント  ＡＮＹ  ＮＹ）の引数は、（素性抽出  ＡＮＹ）と「モデル」である。両者の優先度は６と７であり、（クラスタカウント  ＡＮＹ  ＡＮＹ）の優先度３と比較して優先度が低いため、これらに対応する鍵は採用されない。
【００９４】
（素性抽出  ＡＮＹ）の引数は「支社Ｂ報告書」である。「支社Ｂ報告書」の優先度は２であり、（クラスタカウント  ＡＮＹ  ＡＮＹ）の優先度３と比較して優先度が高いため、「支社Ｂ報告書」に対応する鍵「支社Ｂキー」が最終的に採用される。
【００９５】
＜実施の形態４＞
本発明の実施形態４では、実施形態１〜２で説明したデータ処理システム１０００をストリーミング処理に対して適用した例を説明する。データ処理システム１０００の構成は実施形態１〜２と同様であるため、以下では主に本実施形態４におけるアプリケーション固有の部分について説明する。
【００９６】
図１１は、本実施形態４に係るデータ処理システム１０００のアプリケーション構成図である。本実施形態４において、分散計算機システム１００は、Ｄａｔａ１（１１００）、Ｄａｔａ２（１１１０）、Ｄａｔａ３（１１２０）を入力データとして外部データ記憶装置から受け取り、Ｄａｔａ４（１１３０）を出力として別の外部データ記憶装置に対して出力する。分散計算機システム１００の分散ワーカ部１４０は、入力側処理Ａ１１３５、入力側処理Ａ１１３５のプロセス識別子１１４０、出力側処理Ａ１１４５、出力側処理Ａ１１４５のプロセス識別子１１５０、処理Ｂ１１５５、処理Ｂ１１５５のプロセス識別子１１６０、処理Ｃ１１６５、処理Ｃ１１６５のプロセス識別子１１７０によって構成されている。
【００９７】
図１２は、本実施形態４における鍵管理データベース２１０のデータ例である。記載の簡易のため、環境ＩＤ２１１は省略した。以下図１２にしたがって、本実施形態４における鍵の優先度について説明する。
【００９８】
図１１に示す例においては、入力されるＤａｔａ１（１１００）を処理する時点と、Ｄａｔａ４（１１３０）を出力する時点の双方において、処理Ａが使われている。出力側処理Ａ１１４５は、入力側処理Ａ１１３５とは異なる鍵を用いる必要がある。そこで図１２に示すように、優先度１の項目として（処理Ａ  （処理Ｃ  ＡＮＹ  ＡＮＹ  ＡＮＹ））を追加する。そうすると、出力側処理Ａ１１４５のプロセス識別子１１５０は、（処理Ａ  （処理Ｃ  ＡＮＹ  ＡＮＹ  ＡＮＹ））にマッチするため、公開用キーが利用される。一方で、入力側処理Ａ１１３５のプロセス識別子１１４０は（処理Ａ  （処理Ｃ  ＡＮＹ  ＡＮＹ  ＡＮＹ））にマッチせず、（処理Ａ  ＡＮＹ）にマッチするため、自動生成１が用いられる。
【００９９】
＜実施の形態５＞
本発明の実施形態５では、データ処理システム１０００の仕組みを冗長化に適用した例について説明する。データ処理システム１０００の構成は実施形態１〜２と同様であるため、以下では主に冗長化に関する事項を説明する。
【０１００】
図１３は、本実施形態５における分散ワーカ部１４０の処理フローを示す図である。処理Ａ１２１０はＤａｔａ１（１２００）を入力として受け取って処理結果を処理Ｂ１２２０へ出力し、処理Ｂ１２２０は処理結果を処理Ｃ１２３０へ出力し、処理Ｃ１２３０は処理結果をＤａｔａ２（１２５０）として出力する。処理Ａ１２１０〜処理Ｃ１２３０はそれぞれ異なる計算機１５３に対して割り当てられる。計算機１２４０は分散計算機システム１００内のスタンバイ計算機である。
【０１０１】
処理Ｂ１２２０を実行する計算機１５３に障害が発生し、計算機１２４０がフェイルオーバによって処理Ｂ１２２０を引き継いだと仮定する。この場合であっても、処理Ｂ１２２０の出力のプロセス識別子は障害発生前と変わらず（処理Ｂ  （処理Ａ  Ｄａｔａ１））である。したがって、プロセス識別子をキーにして鍵を管理することにより、障害発生前後において鍵管理データベース２１０を編集する必要はない。
【０１０２】
これに対して、計算機のＩＤをプロセス識別子として用いる場合、例えば計算機２が処理Ｂ１２２０を処理することを表すプロセス識別子は（計算機２  （計算機１  Ｄａｔａ１））であるが、計算機２が計算機４へフェイルオーバすると（計算機４  （計算機１  Ｄａｔａ１））となり、識別子が変更されてしまうので、鍵管理データベース２１０を再編集する必要があり、フェイルオーバ発生時の手続きが煩雑になる。特に、並列処理を実施する場合は、多くの対応関係を管理する必要があり現実的ではない。本発明によれば、フェイルオーバ発生時におけるこのような課題を抑制することができる。
【０１０３】
＜実施の形態６＞
本発明の実施形態６では、認証部１２０が提供するユーザインターフェースの例について説明する。データ処理システム１０００の構成は実施形態１〜２と同様であるため、以下では主にユーザインターフェースに関する事項を説明する。
【０１０４】
図１４は、ステップＳ８０６において認証部１２０が提供するユーザインターフェースの画面例である。ここでは処理Ａ１４３０がＤａｔａ１（１４００）を処理し、処理Ｂ１４４０がＤａｔａ２（１４１０）とＤａｔａ３（１４２０）を処理し、処理Ｃ１４５０が処理Ａ１４３０と処理Ｂ１４４０による処理結果をさらに処理する例を示した。
【０１０５】
図１４に示す例において、処理Ａ１４６０が新たなプロセス識別子として登場したとする。認証部１２０のユーザインターフェースは、指定画面１４７０を提示する。ユーザは指定画面１４７０を用いて処理Ａ１４６０のプロセス識別子と鍵を入力することができる。鍵は鍵管理データベース２１０が保持しているプロセス識別子と鍵の対応関係のなかから選択することができる。
【０１０６】
図１５は、本実施形態６における鍵管理データベース２１０のデータ例である。ユーザインターフェースに何も入力しない場合は、処理Ａ１４３０と同じ鍵である自動生成１が処理Ａ１４６０においても採用される。これは（処理Ａ  ＡＮＹ）に相当する。ユーザインターフェースは、処理Ａ１４３０をハイライトし、処理Ａ１４３０と同じ鍵を利用することをユーザに提示する。ユーザが（処理Ａ  （処理Ｃ  ＡＮＹ  ＡＮＹ））を指定すると、新しい鍵として自動生成４が生成され、処理１４６０の鍵として用いられる。
【０１０７】
上記のほか、ステップＳ８０６においては必ず新規鍵を生成するようにして、ユーザへ確認しないようにすることもできる。
【０１０８】
本発明は上記した実施形態の形態に限定されるものではなく、様々な変形例が含まれる。上記実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。また、ある実施形態の構成の一部を他の実施形態の構成に置き換えることもできる。また、ある実施形態の構成に他の実施形態の構成を加えることもできる。また、各実施形態の構成の一部について、他の構成を追加・削除・置換することもできる。
【０１０９】
上記各構成、機能、処理部、処理手段等は、それらの一部や全部を、例えば集積回路で設計する等によりハードウェアで実現してもよい。また、上記の各構成、機能等は、プロセッサがそれぞれの機能を実現するプログラムを解釈し、実行することによりソフトウェアで実現してもよい。各機能を実現するプログラム、テーブル、ファイル等の情報は、メモリ、ハードディスク、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の記録装置、ＩＣカード、ＳＤカード、ＤＶＤ等の記録媒体に格納することができる。
【０１１０】
例えば、鍵生成部２２０、実行命令部２３０、プロセス識別子処理部２４０、暗号化部２５０、復号化部２６０のうちいずれか１以上をハードウェアとして分散計算機システム１００上またはローカル計算機２００上にあらかじめ実装しておくこともできる。
【符号の説明】
【０１１１】
１００：分散計算機システム、１１０：鍵生成部、１２０：認証部、１３０：分散マスタ部、１４０：分散ワーカ部、１５１：管理端末、１５２〜１５３：計算機、１６０：データ記憶装置、２００：ローカル計算機、２１０：鍵管理データベース、２２０：鍵生成部、２３０：実行命令部、２４０：プロセス識別子処理部、２５０：暗号化部、２６０：復号化部、２７０：ユーザプログラム、２８０：データ記憶装置、３００：ネットワーク、１０００：データ処理システム。
【図１】
2015162688.tif 000003
【図２】
2015162688.tif 000004
【図３】
2015162688.tif 000005
【図４】
2015162688.tif 000006
【図５】
2015162688.tif 000007
【図６】
2015162688.tif 000008
【図７】
2015162688.tif 000009
【図８】
2015162688.tif 000010
【図９】
2015162688.tif 000011
【図１０】
2015162688.tif 000012
【図１１】
2015162688.tif 000013
【図１２】
2015162688.tif 000014
【図１３】
2015162688.tif 000015
【図１４】
2015162688.tif 000016
【図１５】
2015162688.tif 000017
【国際調査報告】
2015162688.tif 000018
2015162688.tif 000019
2015162688.tif 000020
2015162688.tif 000021
2015162688.tif 000022
2015162688.tif 000023