(57)【要約】      （修正有）【課題】暗号方式による処理制約に関わらず、暗号化されたデータに対する処理そのものをセキュリティが担保された環境で処理できるよう、アプリケーションの処理を変更する方法を提供する。【解決手段】ユーザシステム１００からデータベース４００に格納された暗号化されたデータ処理を行うアプリケーション３００を使用するときに、ユーザシステムからアプリケーション拡張部２００経由でアプリケーション３００を起動し、アプリケーション拡張部２００はアプリケーション３００がデータベース４００に格納された暗号化されたデータを処理するときに、データベースシステムで暗号化されたままのデータを処理できる暗号化ＳＱＬ関数が登録されていれば平文を処理するＳＱＬ関数を暗号化ＳＱＬ関数に置き替え、代替処理が登録されている場合は代替処理が行えるよう代替処理用関数に置き換える処理を行う。【選択図】図１
2016177400.tif 000002
【特許請求の範囲】
【請求項１】
データベースとネットワークで接続されたアプリケーション拡張部を備える暗号処理システムであって、
前記データベースは平文データを暗号化した暗号化データを格納し、
前記アプリケーション拡張部は、
アプリケーションからの前記データベースへの前記データの処理要求を受け付ける処理要求受付部と、
暗号処理対応表を参照し、処理要求に含まれる平文データ処理関数に対応する暗号化データ処理関数が前記暗号処理対応表に格納されていた場合は前記処理要求の平文データ処理関数を暗号化データ処理関数に変更し、
処理要求に含まれる平文データ処理関数に対応する暗号化データ処理関数が前記暗号処理対応表に格納されていない場合は平文データ処理関数が処理を実行するのに必要な暗号化データを要求する処理に変更し、
変更された処理要求を前記データベースへ送付するデータベース処理拡張部と、
前記データベースから受け取った暗号化データ処理関数の処理結果と、平文データ処理関数が処理を実行するのに必要な暗号化データを含む処理要求の実行結果をユーザシステムへ返す実行結果返信部を備える暗号処理システム。
【請求項２】
前記ユーザシステムは、平文データ処理関数が処理を実行するのに必要な暗号化データを含む処理要求の実行結果を受け取ったとき、前記受け取った暗号化データを復号し、復号した暗号化データを用いて暗号化データ処理関数がない平文データ処理関数の処理を実行する暗号処理部を備えることを特徴とする請求項１に記載の暗号処理システム。
【請求項３】
前記ユーザシステムは、データと当該データの暗号化方式を対応づけて格納した暗号化データ対応表を備え、
前記受け取った暗号化データを復号化するとき暗号化データ対応表を参照し暗号化データに対応した暗号化方式に対応した復号を行うことを特徴とする請求項２に記載の暗号処理システム。
【請求項４】
平文データ処理関数の実行に必要な演算処理内容を格納する変換処理記憶部を備え、
前記実行結果返信部は、平文データ処理関数に対応する暗号化データ処理関数が前記暗号処理対応表に格納されていない場合、前記変換処理記憶部を参照し、平文データ処理関数の処理に必要な演算処理を前記ユーザシステムへ通知することを特徴とする請求項１に記載の暗号処理システム。
【請求項５】
前記ユーザシステムは、アプリケーションとアプリケーションで処理するデータを対応づけてアプリケーションの実行を前記アプリケーション拡張部へ要求することを特徴とする請求項３に記載の暗号処理システム。
【請求項６】
前記実行結果返信部は、平文データ処理関数に対応する暗号化データ処理関数が前記暗号処理対応表に格納されておらず、変換処理記憶部に平文データ処理関数の処理に必要な演算処理も格納されていないとき、処理できない要求であることを示す情報をユーザシステムへ返することを特徴とする請求項４に記載の暗号処理システム。
【請求項７】
データベースとネットワークで接続されたアプリケーション拡張部を備える暗号処理システムの暗号処理方法であって、
前記データベースは平文データを暗号化した暗号化データを格納し、
前記アプリケーション拡張部は処理要求受付部とアプリケーション処理拡張部と実行結果返信部を備え、
処理要求受付部がアプリケーションからの前記データベースへの前記データの処理要求を受け付け、
アプリケーション処理拡張部が暗号処理対応表を参照し、処理要求に含まれる平文データ処理関数に対応する暗号化データ処理関数が前記暗号処理対応表に格納されていた場合は前記処理要求の平文データ処理関数を暗号化データ処理関数に変更し、
処理要求に含まれる平文データ処理関数に対応する暗号化データ処理関数が前記暗号処理対応表に格納されていない場合は平文データ処理関数が処理を実行するのに必要な暗号化データを要求する処理に変更し、
実行結果返信部が変更された処理要求を前記データベースへ送付するデータベース処理拡張部と、
前記データベースから受け取った暗号化データ処理関数の処理結果と、平文データ処理関数が処理を実行するのに必要な暗号化データを含む処理要求の実行結果をユーザシステムへ返す暗号処理方法。
【請求項８】
前記ユーザシステムは、平文データ処理関数が処理を実行するのに必要な暗号化データを含む処理要求の実行結果を受け取ったとき、前記受け取った暗号化データを復号し、復号した暗号化データを用いて暗号化データ処理関数がない平文データ処理関数の処理を実行する暗号処理部を備えることを特徴とする請求項７に記載の暗号処理方法。
【請求項９】
前記ユーザシステムは、データと当該データの暗号化方式を対応づけて格納した暗号化データ対応表を備え、
前記受け取った暗号化データを復号化するとき暗号化データ対応表を参照し暗号化データに対応した暗号化方式に対応した復号を行うことを特徴とする請求項８に記載の暗号処理方法。
【請求項１０】
平文データ処理関数の実行に必要な演算処理内容を格納する変換処理記憶部を備え、
前記実行結果返信部は、平文データ処理関数に対応する暗号化データ処理関数が前記暗号処理対応表に格納されていない場合、前記変換処理記憶部を参照し、平文データ処理関数の処理に必要な演算処理を前記ユーザシステムへ通知することを特徴とする請求項７に記載の暗号処理方法。
【請求項１１】
前記ユーザシステムは、アプリケーションとアプリケーションで処理するデータを対応づけてアプリケーションの実行を前記アプリケーション拡張部へ要求することを特徴とする請求項９に記載の暗号処理方法。
【請求項１２】
前記実行結果返信部は、平文データ処理関数に対応する暗号化データ処理関数が前記暗号処理対応表に格納されておらず、変換処理記憶部に平文データ処理関数の処理に必要な演算処理も格納されていないとき、処理できない要求であることを示す情報をユーザシステムへ送付することを特徴とする請求項１０に記載の暗号処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、暗号化されたデータを活用するシステムに関する。
【背景技術】
【０００２】
各種情報システムにおいて、利用者の名前や住所・現在位置などの個人情報や生体情報などをシステム外に提供すべきではない。しかしながらこのような情報を使用して運用しなければならないシステムがあるのが現実である。
この対策として、物理的に他システムと分離した環境を構築して運用する方法がある。これはデータ漏洩対策として効果があるものの、実現コストがかかりがちである。
【０００３】
別の対策として、データを暗号化して漏洩リスクを下げる方法がある。データを暗号化することで、万一データ漏洩が発生しても、そのままでは意味のある情報を取得できないため、データを安全に扱うことができる。多くのシステムではデータベースが利用されており、データベース自身が持つデータ暗号化機能を利用することで実現できる。
【０００４】
一方で、システムの運用コスト削減、計算機リソースの迅速な利用を実現するために、クラウド環境が利用されるようになってきている。結果、システム内で秘匿すべきデータが、今後ますますクラウド環境に蓄積されることが予想される。
【０００５】
従来の方法ではデータの暗号化はデータベースで実施しているため、データベースがクラウドなどの従来システムの外部環境で動作する場合、その暗号処理に利用する鍵情報もデータベースの利用場所、つまり外部に保存する必要がある。このため、クラウドサービス業者などの外部リソース管理者がユーザから指定された暗号鍵を使って秘匿すべきデータの中身を取得する、などのデータ漏洩が発生する可能性がある。
【０００６】
こういった問題に対応するため、データが暗号化された状態のまま処理できる特殊な暗号方式を使うという解決策が提案されている。ただ現時点では、暗号化状態で処理できる演算はその暗号方式により制約がある。この制約を踏まえて、アプリケーションまたは事前の設定情報に応じて、利用する暗号処理方式を変更して対応する方法が考えられている（特許文献１）。また、各種暗号方式に対応したデータをあらかじめ用意しておくことで対応する方法も考えられている。（非特許文献１）
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開2014-013582
【非特許文献】
【０００８】
【非特許文献１】CyrptDBhttp://people.csail.mit.edu/nickolai/papers/raluca-cryptdb.pdf
【発明の概要】
【発明が解決しようとする課題】
【０００９】
これらの方法では各種暗号方式に対応できるが、アプリケーションは復号後の生データを使って動作する必要があるため、アプリケーションが動作できるのはセキュリティが担保された環境内だけであった。このため、PaaS(Platform as a Service)、SaaS(Software as a Service)などクラウド環境で提供される様々なアプリケーションを自由に利用できないという課題がある。
【課題を解決するための手段】
【００１０】
そこで本発明では、暗号方式による処理制約に関わらず、暗号化されたデータに対する処理そのものをセキュリティが担保された環境で処理できるよう、アプリケーションの処理を変更する。例えば、オリジナルのアプリケーションの処理のうち、暗号データを操作する部分の処理を文字列化する処理に置き換え、この文字列化した処理と暗号データを共にセキュリティが担保された環境に送信し、暗号データを復号した上で文字列化した処理をその領域内で実行する。
【発明の効果】
【００１１】
本発明により、暗号化データに対する処理を、外部環境ではその暗号を復号することなく処理することができる。このため、データ漏洩リスクを削減することができる。また、アプリケーションはデータが暗号化されているかどうかを意識する必要がないため、自由に実装できるだけでなく他社が開発したアプリケーションも安全に利用することが可能になる。さらにユーザは自身のユースケースや要求に応じた暗号方式を利用することができ、アプリケーション開発者は利用する暗号方式の制約を意識することなく開発できる。
【図面の簡単な説明】
【００１２】
【図１】本発明の実施例における構成図の例
【図２】実施例におけるアプリケーション、データベースがユーザシステム外部にある場合の論理構成図の例
【図３】実施例における暗号処理対応表の例
【図４】実施例におけるアプリケーション変換処理フローの例
【図５】実施例におけるパラメータ操作記憶表の例の一部
【図６】実施例におけるパラメータ操作記憶表の例の一部
【図７】実施例におけるアプリケーション、データベースがユーザシステム外部にある場合の処理フローの例
【図８】実施例における秘匿処理部における暗号化対象データの検出と暗号化の処理フローの例
【図９】実施例における暗号化データ対応表の一例
【図１０】実施例におけるカラム・パラメータに対する暗号方式を設定するユーザインタフェースの一例
【図１１】実施例におけるアプリケーション、秘匿処理部からデータベースに処理依頼する際の処理フローの例
【図１２】実施例におけるデータベース処理結果後のアプリケーション、アプリケーション拡張部の処理フローの例
【図１３】実施例におけるアプリケーション処理後の秘匿処理部の処理フロー
【図１４】実施例におけるSQL関数変更時の処理例
【図１５】実施例におけるアプリケーション処理変更時の処理例
【図１６】本発明の実施例における別構成図の例
【発明を実施するための形態】
【００１３】
以下、図面を用いて本発明の実施例を説明する。なお、本発明が本実施例に限定されるものではない。
【００１４】
図１は本発明を実現するための一実施例における全体システムの構成例である。システムは大きくユーザシステム100と、これとネットワーク500で接続されるそれ以外の部分に分けられる。
【００１５】
ユーザシステム100には、ユーザからの操作受付・処理結果提示などに利用されるユーザインタフェース110、データに対する暗号処理を実施する秘匿処理部120、暗号処理で利用するために必要な鍵情報を安全に扱うための鍵管理部140、外部環境と相互通信するための通信部130がある。この図ではユーザシステム100は1台の機器で処理するイメージになっているが、各処理部がそれぞれ別の機器内で実装され、各処理部がユーザシステム内に構築された内部ネットワークで接続される構成でもよい。また、ユーザシステム100内部に別の処理を行うアプリケーション（図示していない）が存在し、それがユーザインタフェース100や秘匿処理部120と連係して動作しても良い。鍵管理部140の実装例としては、適切なアクセス権限を設定したファイルに鍵情報を格納する方法や、耐タンパ性機能を備えたハードウェアチップや、Hardware Secure Module（HSM）のような別サーバで管理する方法などが考えられる。
【００１６】
ユーザシステム100は、例えば企業のオンプレミス環境のようにセキュリティが担保された領域、つまり、この内部であればデータを安全に扱える領域である。したがって、ユーザシステム100内部ではデータの暗号化は必要なく、そのままの状態で利用できる。本構成では、生データをユーザシステム100の外部に提供する際に秘匿処理部120を介し、秘匿すべきデータを暗号化した上で通信処理部130を経由して外部のネットワーク500に接続された別機能・システム情報を提供する。また、ネットワーク500から通信処理部130が受け取る外部からの暗号データは、秘匿処理部120にて生データに復号されてユーザシステム100内部で利用される。
【００１７】
ユーザシステム100がネットワーク500を経由して利用するものとして、アプリケーション拡張部200、アプリケーション300、データベース400がある。アプリケーション拡張部200の内部には、データベース処理拡張部210、データ処理検出部220、アプリケーション処理拡張部230がある。アプリケーション拡張部200は本構成のような、アプリケーションがユーザシステム外の非セキュアな領域で動作する場合でも、暗号化データを問題なく処理するための機能を提供する。アプリケーション拡張部200の提供方法の1例として、PaaS/SaaSを提供するプラットフォーム内の機能として提供する方法が考えられる。プラットフォームの一部として提供することで、既存のアプリケーション300やデータベース400は、その存在を意識することなく、さらに暗号方式による演算の制約を意識せずにアプリケーションを実行できる。
【００１８】
アプリケーション300はどのようなアプリケーションでもよい。例えばサードパーティやオープンソースとして公開されているアプリケーション全般を指す。もちろんユーザ自身が開発したアプリケーションも含まれる。
【００１９】
データベース400はユーザシステム100から提供されたデータ、あるいはアプリケーション300が処理したデータを格納するために利用される。データベース内部には暗号処理に対応した暗号処理部410があり、暗号データに対する処理を実行する際に、この機能を呼ぶ。暗号処理部410の具体的な実現方法の例としてはユーザ定義関数（User Defined Function/UDF）がある。データベースが提供するこの機能を利用することで、データベースそのものを変更することなく、独自処理を追加することができる。
【００２０】
ネットワーク500はこれらの機能を互いに連係させるためのネットワークである。例えばインターネットが相当する。各機能が連動できればよく、通信プロトコルや物理的な実現方法は問わない。図1は、各構成要素の物理的配置を意識した図であるが、図2は図1の各処理部の連係に注目して整理した図である。図1の要素に加えて、秘匿処理部120内部にはアプリケーションまたはデータベースに通知するデータのうち、どのデータをどの暗号方式で暗号化するかを定義した暗号化データ対応表150が存在する。アプリケーション拡張部200内部には、ユーザシステムからの要求に対してどの暗号処理を利用するかを定義し、その暗号方式が処理可能な演算などを記載した暗号処理対応表240と、データベース用の処理を変更した場合に利用する変換処理記憶部250、パラメータ操作記憶表260とデータベース向け暗号対応処理管理表270、ユーザシステム、データベースとの入出力を行う入出力部280が存在する。
【００２１】
また、アプリケーション拡張部200は、アプリケーション300を動作させるプラットフォームとして動作する。つまり、アプリケーション300とユーザシステム100またはデータベース400とのやりとりは、アプリケーション拡張部200を介して実施される。なお、秘匿処理部120とアプリケーション拡張部200の間には通信処理部130が存在するが、図2では省略している。また、この例では図1、図2のユーザシステム100、アプリケーション拡張部200、アプリケーション300、データベース400はそれぞれ別々の環境で動作しており、暗号化されていないデータが扱えるのはユーザシステム100内のみという状況であることを想定している。
【００２２】
近年、暗号状態のままでも演算ができる暗号アルゴリズムが考案されているが、全ての演算が適用できるものはない。つまり、ある暗号方式は暗号状態で加減算はできるが剰余算はできない、一致判定は可能だが大小比較はできない、など方式によって暗号状態のまま処理できることに制約がある。この制約および暗号状態で演算するために具体的に呼び出す処理を管理するための表が暗号処理対応表240であり、これを図3に示す。
【００２３】
ユーザシステムから通知されたデータは、アプリケーション内部で各種演算の実施および必要に応じてデータベース内で実施する機能（例えばSQL関数）の引数として利用されてデータベースに処理を依頼する。またデータベースからの応答は、受け取ったアプリケーションが必要に応じて各種演算を実施してユーザシステムに返す。本例では、ユーザシステム外部で利用するデータは暗号化されている。このため、アプリケーション内におけるユーザシステムおよびデータベースから通知されたデータの処理部とSQL関数を、利用している暗号方式に対応した処理に変更する必要がある。暗号処理対応表240ではこの変更内容を保持する。具体的には、SQLカラムに平文のデータを処理するSQL関数に対応して呼び出す暗号化されたデータを処理する暗号処理用SQL関数を、Appカラムに受け取ったデータに対するアプリケーションで実施する処理に対応して呼び出す暗号処理対応関数の一覧を持つ。また、演算と1対1に対応する関数だけでなく、変更を実施するスクリプトなどを登録してもよい。
【００２４】
この内容を必要に応じて追加・変更することで、新暗号方式や新規演算に対応できる。暗号処理対応表240は事前に設定しておく、ユーザ要求に応じて追加するなどして暗号方式に対応する処理方法を保持する。
【００２５】
暗号に対応させるため、本発明は「既存アプリケーションを暗号処理向け変更」と「ユーザ要求と応答を暗号対応処理に変更」の、大きく2つの処理に区別することができる。以下、「既存アプリケーションの暗号処理向け変更」について説明する。
【００２６】
図4は、オリジナルのアプリケーションを暗号方式に対応したアプリケーションに変更する処理フローを説明したものである。まず、ユーザが利用したいアプリケーションにアクセスする、アプリケーション提供者がアプリケーション拡張部に自身のアプリケーションを登録する、システム提供者が事前にアプリケーションを登録するなどのきっかけで、アプリケーション拡張部200が変更対象となるアプリケーションそのものを受け取り（ステップS100）、アプリケーションを変更して暗号対応に変更する（ステップS200）。
【００２７】
変更対象アプリケーションを受け取ったアプリケーション拡張部200は、データ処理検出部220でそのアプリケーションを解析し、アプリケーションが利用者からパラメータを受け取る処理を特定する（ステップS210）。そして、そのインタフェースで通知されるパラメータを特定する（ステップS220）。
【００２８】
例えばアプリケーションがRESTを使ったWebアプリケーションであれば、HTTPのGET/POSTなどのメソッドに対応する処理部分と、それらの処理で通知されるパラメータを把握する処理を実行する。通知されたパラメータはアプリケーション内で活用されるため、具体的にどのような処理に利用されるのか、引き続き解析を続けて把握する（ステップS230）。
【００２９】
また、この処理ステップでは、データベースからの戻り値を格納するパラメータの利用のされ方についても解析する。追跡対象のパラメータを利用した処理を実行している部分を特定すると、その内容をパラメータ操作記憶表260に追加する（ステップS240）。この特定した場所が暗号対応処理に置き換えるべき場所であるため、アプリケーション処理拡張部230は暗号処理対応表240を参照して暗号化されたパラメータに対する処理を実行できるようにアプリケーションの処理を置き換える（ステップS250）。一例として、WebアプリケーションのGETメソッド処理で説明すると、GETメソッドのパラメータが暗号化されて通知されるため、暗号処理対応表240を参照して、各暗号方式に対応した処理を呼びだすようにアプリケーションを変更する。例えば、パラメータの暗号方式に応じて分岐する処理を入れる、アプリケーションを実装している言語におけるパラメータ表現型を拡張して暗号方式に応じた型を作成する、などの方法で対応できる。
【００３０】
暗号処理対応表240に記載のない処理は、暗号状態では処理ができないことを意味する。このような処理に対する対応方法の一例として、パラメータが関連する処理を全て文字列化するという方法が考えられる。これらの処理をユーザからパラメータを受け取る全てのインタフェース部分、及びデータベースからの応答部分に対して実行する。例えば、元々の処理が「A ＋ B」のようにパラメータAとパラメータBを加算して結果を返す処理があった場合、この処理を「”A ＋ B”」という処理そのものを文字列化したものを返す処理に変更する。これを暗号データと共にユーザシステム100に通知して、そちらで実行する。
【００３１】
この一連の処理により、アプリケーション全体が解析される。この解析処理において、暗号対応処理に変換するステップS200と同時にMySQL、Oracleなど、具体的にどのデータベースを利用するかの情報も蓄積しておき、その情報とデータベース向け暗号処理管理部270を参照して利用するデータベースに応じた暗号処理の登録をする（ステップS300）。データベースに格納した暗号データに対して暗号独自の演算を施す必要がある場合、データベースの暗号処理部410に事前にその処理を登録する必要がある。
【００３２】
利用するデータベースはシステムやアプリケーション、利用者により異なるため、このデータベースの違いに応じて適切な暗号処理用機能を提供するためにデータベース向け暗号処理管理表270を利用する。データベース向け暗号処理管理表270は具体的には、暗号方式の種別とその暗号方式に対応した処理の名称、その処理を利用するためにMySQLやOracleなどの実際に利用するデータベースに登録するモジュール（動的ライブラリ、Java（登録商標）のjarファイルなど）などの情報を管理する。必要であれば、登録処理を実行するためのスクリプトなどを登録してもよい。なお、利用するデータベースに既に同じ暗号処理が登録されている場合はなにもしない。また、利用するデータベースに暗号処理を追加できない場合は、アプリケーション拡張部200管理下にあるリソースまたは外部リソースを使い、新規にデータベースを提供してもよい。この場合、アプリケーションが利用している元々のデータベース設定を変更する。
【００３３】
必要であれば、元々のデータベースが利用しているテーブル名やカラム名を暗号化したものを利用する、別名を利用するなどの変更を実施する。この場合、変更したテーブル名・カラム名を秘匿処理部120に通知しておいてもよい。
【００３４】
なお、この暗号対応処理への変換フローの例では、ユーザから通知される外部パラメータを利用する処理を見つけるタイミングで変更処理を実施しているが、変更箇所の情報はパラメータ操作記憶表260に蓄積するため、アプリケーション全ての解析を終了してから、一度に暗号化対応処理に置き換えてもよい。
【００３５】
図5、図6はパラメータ操作記憶表260の一例である（記載の都合で2つの図になっているが一つのテーブルとして実現しても良い。）。この表ではユーザシステム100が利用する外部インタフェースであるAPIとそのパラメータ、そのパラメータと関連するデータベースのカラムの情報とを対応付けて管理する。
【００３６】
次に、「ユーザ要求と応答を暗号対応処理に変更」方法について説明する。
【００３７】
図7は本発明における処理フローの概略である。ここでは、データベース400に既に暗号化されたデータが格納されており、このデータをアプリケーション300が利用する場合の処理を一例として記載している。
【００３８】
ユーザインタフェース110は、例えばWebブラウザであり、ユーザシステム100外部のアプリケーション300にアクセスしている。ユーザはユーザインタフェース110に対して操作してアプリケーション300にデータを送信する（ステップS1000）。ユーザインタフェース110からユーザシステム100の外部に向かう通信は、まず秘匿処理部120に通知される。ここで通信データ内から生データを検出して、秘匿すべきデータを暗号化してアプリケーションに通知する（ステップS2000）。
【００３９】
データを受け取ったアプリケーション300は、そのデータを使ってデータベース400に問い合わせる（ステップS3000）。データが暗号化されているため、データに対する処理はそのままでは実行できない。このため、アプリケーション処理拡張部200がアプリケーション300からデータベース400への問い合わせを、暗号データに対する処理を呼び出すよう、問い合わせ処理を更新する（ステップS4000）。
【００４０】
データベース400は、通知された内容を元にデータベース側の処理を実行して結果を返す（ステップS5000）。この結果はアプリケーション300に返されるが、その前にアプリケーション処理拡張部200がその応答を受信し、必要に応じて処理結果を変更して（ステップS6000）アプリケーション300に返す。アプリケーション300はそれを用いて自身の処理を進める（ステップS7000）。このとき、戻ってきたデータは暗号化されているため、アプリケーション300はそのままでは処理できない。
【００４１】
このため、暗号データに関連する処理部分は、アプリケーション300の元々のものでなくアプリケーション拡張部200により生成される処理に変更する。例えば、暗号データに対する処理を別の表現に置き換える処理を実行する（ステップS8000）。そして、使用先の処理結果を含めて、アプリケーション300での処理結果をユーザシステム100に返す（ステップS7000）。データを受け取った秘匿処理部120は、受け取ったデータのうち、暗号データを検出して復号する。次に、データが暗号化されていたために外部で実行できずに別表現に置き換えられた処理をここで実行する（ステップS9000）。この結果をユーザインタフェース110が受け取り、結果としてユーザに提供する（ステップS10000）。
【００４２】
図８は、ステップS2000の詳細フローであり、秘匿処理部120内部で処理される内容について説明した図である。ユーザインタフェース110からアプリケーション300に通知される情報は、秘匿処理部120に通知される（ステップS1000）。秘匿処理部120内部のデータ検出部121は、通知された情報からデータ部分を検出する（ステップS2100）。次に検出したデータを暗号化する必要があるかどうかを確認する（ステップS2200）。具体的には暗号化データ対応表150を参照し、検出したデータのうち、どのデータを暗号化する必要があるかを判断する。
【００４３】
図9は暗号化データ対応表150の一例である。表にはアプリケーションとそのアプリケーション向け、およびデータベースに通知するデータのうち、どのデータを暗号化すべきかが記載されている。データ暗号化の要否はユーザのみが判断できるため、この情報は、基本的にはユーザシステムの利用者が設定することになる。
【００４４】
例えば、ユーザがアプリケーションを利用する前、あるいは直前に図10のような画面を提示し、アプリケーションがデータベースに格納するデータのうち、どの部分をどの暗号方式で暗号化するかを設定してもらう。この画面は、パラメータ操作記憶表260を参照して作成される。
【００４５】
図10ではカラム名起点で暗号方式を決定する画面になっているが、パラメータ起点で暗号方式を決定するものにすることもできる。また、API・パラメータとデータベース格納先の対応関係が把握できているため、その対応関係を使ってユーザに適切な暗号方式の提案や、ある程度の自動設定も可能になる。あるいは、ユーザシステムが要求する暗号強度などを入力として提供してアプリケーション拡張部がこの情報を動的に生成する、システム的・アプリケーション的に暗号方式が確定しているためこの情報をもたなくてもよいようにする運用方式でもよい。
【００４６】
また、データベース400に格納しているテーブル名やカラム名などを暗号化したものや別名に変更したものを利用している場合、その対応関係をこの表で保持し、暗号対象データの変更に合わせてこれらの変換処理を実施してもよい。暗号データ対応表150はアプリケーション拡張部200に通知してもよい。この場合、アプリケーション拡張部200は要求先の情報と共に、この情報を管理する。こうすることで、ユーザに応じて暗号方式及び暗号対象パラメータを個別に設定することができる。
【００４７】
例えば、パラメータ操作記憶表260に通知元の情報を追加して、ユーザに応じた暗号処理方法でアプリケーションを実行できる。または、ユーザシステム100からアプリケーション拡張部200に通知する暗号パラメータ自体に暗号方式の情報を埋め込んでもよい。この方式であれば、通知元の情報をアプリケーション拡張部200で管理することなく、通知された暗号方式に対応できる。
【００４８】
暗号化が必要なデータの場合、暗号処理部122は鍵管理部140と連係して必要な鍵情報を取得・設定し、対象データを暗号化する（ステップS2500）。その後、ユーザインタフェース110から通知された情報のうち、暗号化対象データの部分を暗号化したデータに置き換える（ステップS2300）。これを指定されたデータに対して実施し、秘匿処理部120の処理を終えて通信部130を介してアプリケーション300に指定されたデータを暗号化した情報を通知する。
【００４９】
図11はアプリケーション300で処理されるステップS3000およびステップS4000の詳細フローである。この図は、まずアプリケーション300がアプリケーション拡張部200を介してユーザシステム100から通知された情報を受け取る所から始まる。動的にアプリケーションを暗号対応処理に置き換える場合など、暗号処理に対応したアプリケーションを保持していない場合を除き、アプリケーション拡張部200は暗号処理対応のアプリケーションを呼び出す。初めて指定されたアプリケーションの場合であれば、まず呼び出されたAPIの処理を暗号対応の処理に変更した上で処理を実行する。
【００５０】
ユーザシステム100から情報を受け取った暗号処理対応済みアプリケーション300は、そのデータを使って独自処理を実行する。ここで、ユーザシステム100から通知された暗号データに対する処理をする場合と、特に処理せずにそのまま利用する場合の、大きく2通りに処理を区別できる。
【００５１】
例えば、アプリケーション100から受け取った暗号データをそのままSQLにデータをセットするという場合、暗号データに対する処理が発生しないためそのままデータベースに処理を要求する（ステップS3900）。暗号データに何かしらの操作を行う場合、アプリケーション拡張部200によって変更された処理を呼び出す。（ステップS3200）。ここでは、通知されたパラメータに対する処理が文字列化されたものとして説明する。なお、処理そのものも秘匿化が必要であれば、文字列化した処理も暗号化して送信してもよい。
【００５２】
文字列に変換された処理と暗号データは、秘匿処理部120のデータ検出部121に通知され、まず暗号データ部分を特定する（ステップS3300）。暗号データは暗号処理部122に通知されて復号され（ステップS3400）、秘匿処理部120に通知された情報の復号前のデータ部分を置き換える（ステップS3500）。これを暗号データがある間繰り返す。こうして、元々の文字列で表現されていた暗号データに対する処理を実行する（ステップS3600）。この結果をアプリケーション300に返すため、暗号化した上で（ステップS3700）、秘匿処理部120での処理結果をアプリケーション300に返す（ステップS3800）。
【００５３】
この結果を使い、暗号データに対する処理がないときと同様にデータベースに処理を依頼する（ステップS3900）。なお、アプリケーション拡張部200は、パラメータ操作記憶表260作成時にユーザシステム100から通知されたパラメータに対して処理を施すかどうかを把握できる。このため、図10のような画面を使って暗号方式を設定する際に、暗号化されたデータが再度秘匿処理部120に戻ることを秘匿処理部120に通知しておいてもよい。この情報を秘匿処理部120が知っているのであれば、アプリケーション呼び出し時に暗号化したパラメータを通知せずにダミー情報を通知し、図11のステップS3400の復号処理を実施せずに、通知したダミー情報を平文のデータに置換することでも対応することができる。
なお、暗号処理対応したアプリケーション300からのデータベースへの処理要求（ステップS3900）は、実際にはアプリケーション拡張処理部200に通知される。アプリケーション拡張処理部200内部のデータベース処理拡張部210は、暗号処理対応表240あるいは通知されたデータそのものを参照して、要求元のユーザシステム100が利用している暗号方式を確認する（ステップS4100）。この情報を使って、データベースへの処理要求を更新する（ステップS4200）。変更方法として、暗号処理対応表240に記載されているスクリプトを呼び出す、暗号処理対応表240に記載されている設定情報を読み込んでそれに応じて処理する、対応する演算部分の記述を暗号処理対応表240に記載されている文字列（例えばUDF関数の名称）に置き換える、などの方法が考えられる。この処理により、データベース側でも適切に暗号データを扱える要求を発行する。例えば、ユーザシステム100が利用している暗号方式で処理できない演算がデータベースに対する処理に指定されている場合は、その演算を記憶した上でデータベースに対する指示を別のものに置き換える。
【００５４】
例えば、暗号状態ではデータの大小関係を判断できない暗号方式を利用している際にある範囲内での最大値を求める指示をデータベース400に通知する場合、元々の指示が最大値を求める指示であることを変換処理記憶部250に記憶させた上で、最大値を求める指示の代わりに指定された範囲全てを取得する指示に置き換える。
【００５５】
この置き換え処理の具体的な内容は暗号処理対応表240にスクリプトなどの形式で記載される。変換処理記憶部250には、この置き換えた結果が通知された際に実行すべき処理を登録する。これらの処理はアプリケーション拡張部200内のデータベース処理拡張部210で処理される。データベースへの処理要求を適切に変更できた後、実際にデータベースに処理を要求する（ステップS4300）。
【００５６】
これを受け取ったデータベース400は、変更指示に対応した処理を、暗号処理部410に指示して処理を実行する（ステップS5000）。例えば、UDFとしてデータベース400に追加された暗号処理部410を呼び出す。データベース400は処理結果をアプリケーション拡張部200に返す。図12は、アプリケーション拡張部200及びアプリケーション300がデータベース400の処理結果を処理する各ステップS6000、S7000、S8000の詳細フローである。
【００５７】
データベース処理結果は、アプリケーション拡張部200に通知される。アプリケーション拡張部200内のデータベース処理拡張部210がこの通知を受け取り、データベースの戻り値の各値を、例えば文字列として表現する（ステップS6100）。処理要求時にデータベース処理拡張部210にて元々の処理が変更されている場合は、データベースの戻り値を表現した文字列全体に対して変換処理機億部250に記憶した元々の演算を施すことを表現して返す（ステップS6200）。例えば、上記の最大値を求める指示に対する処理を「MAX({戻り値1｝， {戻り値2｝， …)」という文字列表現に変更し、この文字列をデータベース400の処理結果としてアプリケーションに返す。
【００５８】
なお、「MAX()」という文字列が通知された場合、括弧内に格納された文字列を復号し、その結果から最大値を求める処理を実行するという意味を、事前に秘匿処理部120とアプリケーション拡張部200とで定義しておく、文字列表現と実行する処理の対応表を用意し、この情報を共有して対応する。ここでは文字列で表現したが、別の表現方法でもかまわない。
【００５９】
暗号処理対応したアプリケーション300は、受け取った文字列データをデータベースの処理結果としてそのまま利用する。このため、特にデータに対する処理がない場合はアプリケーション300がユーザシステム100に返す応答の一部として利用する（ステップS7200）。受け取ったデータベース処理結果に何かしらの演算・処理を施す場合は、その部分の処理はアプリケーション300のオリジナル処理ではなくアプリケーション拡張部200のアプリケーション処理拡張部230に処理が委譲される。具体的にはステップS3200と同様の処理を実行する。この処理で暗号データに対する処理が、例えば文字列として表現される（ステップS8100）。アプリケーション300としては、通常通り処理を実行できたものとしてユーザシステム100に応答を返す（ステップS7200）。こうして、暗号データ及び暗号データに対する処理は、例えば文字列化されてユーザシステム100に通知される。
【００６０】
図13は、アプリケーション処理拡張部200を介して実行されたアプリケーション300の処理結果を受け取った秘匿処理部120の処理ステップS9000の詳細フローである。
【００６１】
まず、暗号処理対応したアプリケーション300から戻ってきた処理結果は、通信処理部130から秘匿処理部120内部のデータ検出部121に通知される。ここでは、アプリケーション300から通知された処理結果から、暗号データを検出する（ステップS9100）。ここで暗号データを検出した場合、暗号処理部122にそのデータを送って復号し（ステップS9200）、応答データにある元々のデータを復号したデータで書き換える（ステップS9300）。これが、暗号データが存在する間、繰り返す。
【００６２】
なお、図13では一つの暗号データを検出するたびに復号する処理になっているが、応答データ内の全暗号データを検出した上でまとめて復号処理依頼をしてもよい。
【００６３】
全暗号データが復号できた後、応答データ内にアプリケーション300側で処理できなった暗号データに対する処理がなければ、復号したデータに置き換えた応答データをユーザインタフェース110に送信して処理を終了する。アプリケーション処理拡張部200にて暗号データに対する処理を別処理に置き換えた場合、このアプリケーション側で未処理であった処理を実行する（ステップS9400）。そして、未実施処理がなかった場合と同様、この処理結果をユーザインタフェース110に送信して秘匿処理部120としては処理を終了する。
【００６４】
以上の処理ステップを実行することにより、外部環境にあるアプリケーション300はユーザシステム100が利用している暗号方式を全く意識することなく、暗号データを処理することができる。
【００６５】
以下、より具体的な処理例として「特定年齢における平均体重を算出する」「特定年齢における平均BMIを算出する」場合のデータが変化する例を図14、図15に示し、上記の処理フローについて説明する。なお、図1記載のアプリケーション300はWebアプリケーションとして提供されており、ユーザが指定した項目（身長、体重、年齢、…）に対し、指定した処理（合計、平均、BMI平均、最大値、最小値、…）を実施する単純なアプリケーションとする。
【００６６】
また、データは暗号化状態でも検索可能な暗号方式で暗号化されているものとし、データベース400には個人情報として、身長、体重、年齢、性別などの情報が暗号化されて格納されているものとする。アプリケーション300からデータベース400にはSQLでアクセスし、データベース400に対する暗号処理（ここでは、データの一致確認処理）はUDFとして実現されているものとする。また、図14、図15ではデータが暗号化されていることを示すため「{｝」で平文データを囲って表現する。
【００６７】
図14は「特定年齢における平均体重を算出する」場合の処理を説明したものであり、平均処理自体はSQLで提供される「AVG」関数を利用して実現できる。この例では、暗号データに対してSQL関数処理が必要な場合の処理方法について説明する。
【００６８】
まず、ユーザがブラウザを操作してアプリケーションに「30歳の人の体重を平均する」よう指示する（ステップS1000）。図8の例では、HTTPのGETメソッドでデータなどを送信した例だが、POSTで送信してもよく、YAML、JSONなどの形式で送信してもよい。ここでは「kind」に処理種別、「column」に平均対象のデータ、「age」に処理対象を限定する年齢情報が設定されている。
【００６９】
これを受け取った秘匿処理部120は暗号化データ対応表150を参照してどのパラメータを暗号化するかを確認し、暗号化する（ステップS2000）。
【００７０】
暗号化されたデータを受け取ったアプリケーション300は、そのデータをそのまま利用してデータベース400に問い合わせるためのSQLを生成する（ステップS3000）。
【００７１】
ここで暗号処理対応表240を参照して、平均を算出するSQL関数「AVG」の暗号対応関数の有無を確認する。対応関数が存在する場合、「AVG」の部分をその関数に置き換えてSQL文をデータベースに通知する。対応関数が存在しない場合は、この暗号方式では処理できないSQL関数がアプリケーションから要求されたということになる。この場合、アプリケーション拡張部からユーザシステムへ入出力部280を経由して、処理できなかったのがどのSQL関数に対応する処理なのかを示す情報と暗号種別(Encryption Type)を送付することにより、処理ができなかった理由をエラーとして知らせてもよい。ユーザはユーザシステムのユーザインタフェース110を通して理由を参照し、適切な対策を実施する。以下では、「AVG」の暗号対応関数が存在しない場合にエラーを通知せず、既存処理拡張する方法の一例について説明する。暗号処理対応表240を参照した結果「AVG」が利用できないため、データベース処理拡張部210がSQL文から「AVG」を削除し、単純に対象テーブルから全エンティティの体重データを取得するようSQL文を変更する。処理できなかった「AVG」は変換処理記憶部250で記憶しておく。また、暗号処理表240を参照して呼び出すUDF名称などを取得し（ここでは「UDF」という文字列で表現）、それを呼び出すようにSQL文を変更する。必要であればカラム名・テーブル名の暗号化・別名への変更も実施する。このSQL文変更処理は暗号処理表240に記載されている処理を呼び出すことで対応してもよい（ステップS4000）。データベース400は変更されたSQLを受け取り、その実行結果を返す（ステップS5000）。
【００７２】
その結果を受け取るデータベース処理拡張部210は、変換処理記憶部250を確認してSQL関数「AVG」が実行できなかったこと把握する。これが処理できなかったことを示すため、結果として受け取った体重情報を文字列化し、それを「平均」することを示す印をつける（ここでは「AVG」という語句を先頭につけることで表現）（ステップS6000）。
【００７３】
アプリケーション300は、データベース400から戻ってきた値は既に平均化された体重の値と認識して処理するが、実際には文字列として返ってきているため、そのままでは処理できない。このため、アプリケーション処理拡張部230が変更した処理を呼び出す。この例の場合、データベース400から戻ってくる値は平均値であるため「数値」であるはずだが、この部分を「文字列」として扱うように変更された処理を実行する（ステップS8000）。こうしてアプリケーション300での処理は終了し、ブラウザに表示させるHTML文書を処理結果としてユーザシステム100に返す（ステップS7000）。
【００７４】
ユーザシステム100に通知されたHTML文書には、文字列化された「平均処理」が含まれているため、秘匿処理部120のデータ検出部121でこれを検出する。そして暗号データを復号し、その後、アプリケーション300側で処理できなかった平均処理を実行してHTML文書を更新する（ステップS9000）。
【００７５】
こうして、秘匿処理部120にて暗号データは平文化され、アプリケーション側で処理できなかった処理も実行されて、ユーザインタフェース110であるブラウザに通知されて表示される（ステップS10000）。
【００７６】
図15は「特定年齢における平均BMIを算出する」場合の処理を説明したものである。基本的な処理の流れは「特定年齢における平均体重を算出する」と同様だが、SQL関数は利用されておらず、アプリケーション内部で暗号データに対する演算を実施している点が異なる。この例では、暗号データに対してアプリケーション内部処理の変更が必要な場合の処理方法について説明する。
【００７７】
まず、ユーザがブラウザ操作によってアプリケーション300にデータと処理方法を通知する。この通知されたデータを暗号化してアプリケーション300に送信し、アプリケーション処理拡張部により暗号方式に対応したSQL文を生成してデータベース400に通知して結果を得るまでの処理は、平均体重を算出する場合と全く同様である。ただ、この例ではSQL関数を利用していないため、データベース内の暗号データを処理するためのUDFを呼び出すためにSQLを変更する以外の変更はなく、データベース400の処理結果もそのまま利用する（ステップS1000〜S6000）。
【００７８】
アプリケーション300は、戻ってきた値を使ってBMIを算出する演算を実施する。しかし、実際に戻ってきた値は暗号化されているため処理できない。そこで、アプリケーション処理拡張部230が暗号処理対応表240を参照して暗号データへの演算を実現する暗号対応関数または処理変更用のスクリプトなどが存在する場合は、その関数に置き換えた上で処理を実行してアプリケーションに返す。暗号対応関数が無い場合はSQL関数の置換と同様、エラーを返してユーザに通知してもよい。このときユーザから要求があった処理のうち処理できなかったのがどのＳＱＬ関数に対応する処理なのかを示す情報と暗号種別（Encryption Type）をユーザシステムへ入出力部280を経由して送付し、ユーザがユーザインタフェース110から参照するようにすれば、ユーザはエラーに対する適切な対策を講じることができる。
【００７９】
以下ではSQL関数の場合と同様、既存処理を拡張する場合を説明する。このとき、暗号対応関数が存在しないため暗号データに対する処理そのものをユーザシステム100に通知した上で処理する必要がある。例えば、暗号データに対する演算を文字列化するよう拡張された処理を呼び出す。また、文字列化された処理は秘匿処理部120側で処理することを示す印をつける（ここでは文字列化し「PROC」という語句を先頭につけることで表現）（ステップS8000）。
【００８０】
平均体重の場合と同様、アプリケーション300としては問題なく演算できたものとして実行した処理結果をユーザシステム100に返す（ステップS7000）。
【００８１】
以降の処理は平均体重の場合と同様に処理を進めて、秘匿処理部120にてデータの復号と文字列化されたBMI算出処理を実行し、ユーザインタフェース110に応答を返す。こうして、アプリケーション内部処理で暗号データを扱う場合も、アプリケーションは意識することなく暗号データに対する処理を実現できる。
【００８２】
なお、上記2つの例では、ブラウザから通知したデータをそのままSQLに利用していたが、実際にはアプリケーション側で何かしら演算を施してその結果をSQL文に利用する場合がある。このときの処理は基本的にステップS8000と同様であり、処理としては図11のステップS3300〜ステップS3800の処理に対応する。したがって、このような場合でも問題なく暗号データを扱うことが可能である。
【００８３】
また、以上の例では、アプリケーション300側で暗号データに対する処理は文字列化して秘匿処理部120で処理する例について説明したが、別の実現方法の例として、ユーザシステム100側に返す処理を文字列ではなくJavaScript（登録商標）化してユーザシステム100に返してもよい。このとき、暗号データは秘匿処理部120内で復号させて、JavaScript化した暗号データに対する処理はユーザインタフェース110として利用するブラウザで実行させればよい。さらに以上の実施例では、アプリケーションのソースコードを書き換えるイメージで説明したが、JavaやC言語などのバイナリイメージを利用するもので実施してもよい。
【００８４】
以上はユーザシステム100、アプリケーション拡張部200、アプリケーション300、データベース400がそれぞれ別の環境で動作する環境についての例であった。別の実施例として、アプリケーション拡張部200とアプリケーション300がユーザシステム100内に存在してデータベース400のみが外部にあるもの、データベース400がユーザシステム内にありアプリケーション拡張部200とアプリケーション300がユーザシステム100の外部にある構成も考えられる。これらの構成を図16に示す。データベース100が外部にあるものを構成800、アプリケーションが外部にあるものを構成900とする。このように自由な構成を選択できるため、データの秘匿度合いやシステム構成に合わせた構成にすることが可能である。
【００８５】
構成800の場合、アプリケーション300が生データを扱えるユーザシステム100内で動作するため、アプリケーション300の内部処理を変換する必要はない。ただし、データベースに対する処理については変更する必要がある。データ検出部121および暗号化データ対応表150は、ユーザインタフェース110とアプリケーション300間でのやり取りには利用せず、秘匿処理部120からデータベース400とのやり取りで利用する。つまり、暗号データ対応表150には、利用するデータベースとテーブル名・カラム名と暗号方式の対応するものになる。
【００８６】
ユーザシステム内部のような外部から隔離された環境で動作するアプリケーションを開発する場合、隔離環境を維持するため、その開発者はユーザ自身、あるいはユーザから委託を受けた者のみになる。また、暗号を利用する場合、開発者はその暗号方式が利用可能な演算を意識して実装する必要があり、アプリケーションの可搬性が落ちてしまう。だが、本発明のアプリケーション拡張部200を導入することにより、アプリケーション開発者はその暗号方式を意識することなく開発することが可能になる。この場合の処理フローは、処理順序が変更になったことを除けば概ね第一の実施例と同じ手順であるが、ユーザインタフェース110→アプリケーション300→アプリケーション拡張部200→秘匿処理部120→データベース400という処理順となる。
【００８７】
構成900の場合、アプリケーション300で実行している暗号データに対する処理を、例えば文字列化やJavaScript化してユーザシステム100で実行できれば実現できる。一方、データベース400がユーザシステム100内にあるため、データベースに対する処理はユーザシステム内部では暗号化を意識することなく利用できる。このため、第一の実施例と比べると、アプリケーション拡張部200内のデータベース処理拡張部210、変換処理記憶部250、データベース向け暗号処理管理表270とデータベース400内の暗号処理部410は不要となる。処理フローは、ユーザインタフェース110→秘匿処理部120→アプリケーション300→アプリケーション拡張部200→アプリケーション300→データベース400と、アプリケーション300が外でデータベース400がユーザシステム100内にあるため、アプリケーション拡張部200を何度か介して処理をすることになる。各処理部における処理は他の構成と基本的に同様である。
【００８８】
以上の実施例は、アプリケーション拡張部200というフレームワークを利用して本発明の特徴を実現する例であった。このように動的、あるいはアプリケーション300のデプロイ時にアプリケーション拡張部200によるアプリケーション300の処理内容を変更するのではなく、事前に、アプリケーション拡張部200が実施する処理を施したアプリケーションをアプリケーション開発者側で用意し、これを利用することで本方式を実現することもできる。イメージとしては、ソースコードをコンパイルして対応環境に合わせた実行可能ファイルを作成する方法と同じである。
【００８９】
また、上記全ての実施例において、ユーザシステム100外部のシステムを第三者がサービスとして提供する場合が考えられる。このとき、サービス提供者が提供している暗号方式にしか利用できない場合も発生しうる。このため、ユーザが利用している、あるいは利用したい暗号方式とサービスで利用できる暗号方式が異なる場合は、アプリケーション300に最初にアクセスしたタイミング、デプロイしたタイミングなど適切なタイミングで、ユーザに通知する仕組みを備えてもよい。
【符号の説明】
【００９０】
100-ユーザシステム、110-ユーザインタフェース、120-秘匿処理部、121-データ検出部、122-暗号処理部、130-通信処理部、140-鍵管理部、150-暗号化データ対応表、200-アプリケーション拡張部、210-データベース処理拡張部、220-データ処理検出部、230-アプリケーション処理拡張部、240-暗号処理対応表、250-変換処理記憶部、260-パラメータ操作記憶表、270-データベース向け暗号処理管理表、300-アプリケーション、400-データベース、410-暗号処理部
【図１】
2016177400.tif 000003
【図２】
2016177400.tif 000004
【図３】
2016177400.tif 000005
【図４】
2016177400.tif 000006
【図５】
2016177400.tif 000007
【図６】
2016177400.tif 000008
【図７】
2016177400.tif 000009
【図８】
2016177400.tif 000010
【図９】
2016177400.tif 000011
【図１０】
2016177400.tif 000012
【図１１】
2016177400.tif 000013
【図１２】
2016177400.tif 000014
【図１３】
2016177400.tif 000015
【図１４】
2016177400.tif 000016
【図１５】
2016177400.tif 000017
【図１６】
2016177400.tif 000018