(57)【要約】      （修正有）【課題】データに対する匿名化処理の正当性を、削除や置換等の匿名化処理を施した後でも検証できる匿名化システム及び匿名化方法を提供する。【解決手段】匿名化データ提供サーバは、患者データレコード拡張処理Ｓ０１を行い、拡張患者データテーブルへ処理結果を格納する。次いで、拡張患者データテーブルのデータを入力とし、デジタル署名を生成する署名生成処理Ｓ０２を行い、生成した署名値を元となった患者データ名とともに、Ｗｅｂサーバ登録Ｓ０３を経由して、匿名化データ利用者端末へ取得Ｓ０５させる。匿名化データ取得依頼Ｓ０６を受けた匿名化データ提供サーバは、患者データ名及び匿名化条件を入力として検証可能匿名化処理Ｓ０７を行い、匿名化データを生成して、匿名化データ利用者端末へ取得Ｓ０８させる。匿名化データ利用者端末は、匿名化データ及び署名値を入力として署名検証処理Ｓ０９を行い、匿名化データの正当性を検証する。【選択図】図１０
2020077256.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置により秘密情報を匿名化して利用者に提供する匿名化システムであって、
秘密情報を記憶する秘密情報記憶手段と、
前記秘密情報を抽象化する情報の候補群である抽象化候補群情報記憶手段と、
前記秘密情報に抽象化する情報の候補群を追加した拡張秘密データを記憶する拡張秘密データ記憶手段と、
前記秘密情報から一部の情報を削除または置換した匿名化データを記憶する匿名化データ記憶手段と、
前記秘密情報と前記抽象化候補群情報を用い、前記拡張秘密データを生成する拡張秘密データ生成手段と、
前記拡張秘密データまたは匿名化データを用いて前記秘密情報のハッシュ値を中間値とするデジタル署名を生成する署名生成手段と、
前記拡張秘密データを用いて匿名化データを生成する匿名化手段と、
与えられた匿名化データの正当性を検証する匿名化データ正当性検証手段とを備え、
前記拡張秘密データ生成手段は、前記秘密情報記憶手段により記憶された秘密情報と前記抽象化候補群情報記憶手段により記憶された前記秘密情報を抽象化する情報の候補群を参照して、前記拡張秘密データを生成し、
前記匿名化手段は、前記拡張秘密データに対して、前記署名生成手段の署名生成の中間値と同一のハッシュ値に置き換える処理を実行して、匿名化データを生成し、
前記署名生成手段は、前記拡張秘密データ生成手段より生成された拡張秘密データより、第一の署名値を、前記匿名化手段に生成された匿名化データより、第二の署名値をそれぞれ生成し、
前記匿名化データ正当性検証手段は、前記第一の署名値と前記第二の署名値を比較することにより、与えられた匿名化データの正当性を検証することを特徴とする匿名化システム。
【請求項２】
さらに、前記拡張秘密データに乱数を追加する乱数生成手段を備え、
前記署名生成手段は、中間値とするハッシュ値を、前記乱数生成手段により生成された乱数を追加した前記拡張秘密データから生成することを特徴とする請求項１記載の匿名化システム。
【請求項３】
前記乱数生成手段は、前記拡張秘密データの各属性に対して、各々一つの乱数を追加し、
前記署名生成手段は、属性ごとに乱数を入力に含めたハッシュ値の中間値を生成することを特徴とする請求項２記載の匿名化システム。
【請求項４】
情報処理装置により秘密情報を匿名化して利用者に提供する匿名化方法であって、
秘密情報を記憶する秘密情報記憶ステップと、
前記秘密情報を抽象化する情報の候補群である抽象化候補群情報記憶ステップと、
前記秘密情報に抽象化する情報の候補群を追加した拡張秘密データを記憶する拡張秘密データ記憶ステップと、
前記秘密情報から一部の情報を削除または置換した匿名化データを記憶する匿名化データ記憶ステップと、
前記秘密情報と前記抽象化候補群情報を用い、前記拡張秘密データを生成する拡張秘密データ生成ステップと、
前記拡張秘密データまたは匿名化データを用いて前記秘密情報のハッシュ値を中間値とするデジタル署名を生成する署名生成ステップと、
前記拡張秘密データを用いて匿名化データを生成する匿名化ステップと、
与えられた匿名化データの正当性を検証する匿名化データ正当性検証ステップとを有し、
前記拡張秘密データ生成ステップにおいて、前記秘密情報記憶ステップより記憶された秘密情報と前記抽象化候補群情報記憶ステップにより記憶された前記秘密情報を抽象化する情報の候補群を参照して、前記拡張秘密データを生成し、
前記匿名化において、前記拡張秘密データに対して、前記署名生成手段の署名生成の中間値と同一のハッシュ値に置き換える処理を実行して、匿名化データを生成し、
前記署名生成ステップにおいて、前記拡張秘密データ生成手段より生成された拡張秘密データより、第一の署名値を、前記匿名化手段に生成された匿名化データより、第二の署名値をそれぞれ生成し、
前記匿名化データ正当性検証ステップにおいて、前記第一の署名値と前記第二の署名値を比較することにより、与えられた匿名化データの正当性を検証することを特徴とする匿名化方法。
【請求項５】
さらに、前記拡張秘密データに乱数を追加する乱数生成ステップを有し、
前記署名生成ステップにおいて、中間値とするハッシュ値を、前記乱数生成手段により生成された乱数を追加した前記拡張秘密データから生成することを特徴とする請求項４記載の匿名化方法。
【請求項６】
前記乱数生成ステップにおいて、前記拡張秘密データの各属性に対して、各々一つの乱数を追加し、
前記署名生成手段は、属性ごとに乱数を入力に含めたハッシュ値の中間値を生成することを特徴とする請求項５記載の匿名化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、匿名化システムおよび匿名化方法に係り、医療情報等の個人情報を匿名化して医学研究等に活用するために提供する際に、改竄を検知して、提供された情報の正当性を検証するのに好適な匿名化システムおよび匿名化方法に関する。
【背景技術】
【０００２】
近年、２０１７年５月の改正個人情報保護法の全面施行により、個人情報の適切な保護を前提とした匿名加工情報の利用・活用が進みつつある。また、２０１８年５月には、国民の医療情報を匿名加工して、大学や製薬企業の研究開発などでの活用を可能にする仕組みを定めた次世代医療基盤法が施行された。こうした法規制により、医療分野の研究開発等に匿名化データが活用可能となってきている。
【０００３】
医療分野では、研究に用いる医療データに対し“バリデーション”と呼ばれる正当性の検証を行っている。今後、匿名加工に対しても、同様の正当性の検証が課題となると考えられる。
【０００４】
臨床情報等の個人情報を匿名化して提供する技術としては、例えば、特許文献１に開示がある。特許文献１に記載された情報管理システムによれば、臨床情報等の被検体情報（個人情報）の匿名化処理後、被検体情報の所有者や閲覧権限所有者が、匿名化処理された情報に関連付けられて蓄積された情報を特定可能とする。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２００８／０６９０１１号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記従来技術の特許文献１では、正当性保証の対象が元データの一部（識別子ないし準識別子の組合せ）が対象であるため、データ全体に対し匿名化の正当性を保証することができない。
【０００７】
一般的に、データに対する正当性を保証する技術としては、デジタル署名技術がある。しかしながら、単純にデジタル署名を適用するだけでは、データの削除や置換等の匿名化処理を施すと、正当性を検証できない。不正な匿名化データを利用した場合、研究成果が不正となる事態などが発生する恐れがある。
【０００８】
本発明の目的は、データに対する匿名化処理の正当性を、削除や置換などの匿名化処理を施した後でも検証できる匿名化の正当性を検証可能な匿名化システムおよび匿名化方法を提供することにある。
【課題を解決するための手段】
【０００９】
本発明の匿名化システムの構成は、好ましくは、情報処理装置により秘密情報を匿名化して利用者に提供する匿名化システムであって、秘密情報を記憶する秘密情報記憶手段と、秘密情報を抽象化する情報の候補群である抽象化候補群情報記憶手段と、秘密情報に抽象化する情報の候補群を追加した拡張秘密データを記憶する拡張秘密データ記憶手段と、秘密情報から一部の情報を削除または置換した匿名化データを記憶する匿名化データ記憶手段と、秘密情報と抽象化候補群情報を用い、拡張秘密データを生成する拡張秘密データ生成手段と、拡張秘密データまたは匿名化データを用いて秘密情報のハッシュ値を中間値とするデジタル署名を生成する署名生成手段と、拡張秘密データを用いて匿名化データを生成する匿名化手段と、与えられた匿名化データの正当性を検証する匿名化データ正当性検証手段とを備え、拡張秘密データ生成手段は、秘密情報記憶手段により記憶された秘密情報と抽象化候補群情報記憶手段により記憶された秘密情報を抽象化する情報の候補群を参照して、拡張秘密データを生成し、匿名化手段は、拡張秘密データに対して、署名生成手段の署名生成の中間値と同一のハッシュ値に置き換える処理を実行して、匿名化データを生成し、署名生成手段は、拡張秘密データ生成手段より生成された拡張秘密データより、第一の署名値を、匿名化手段に生成された匿名化データより、第二の署名値をそれぞれ生成し、匿名化データ正当性検証手段は、第一の署名値と第二の署名値を比較することにより、与えられた匿名化データの正当性を検証するようにしたものである。
【発明の効果】
【００１０】
本発明によれば、データに対する匿名化処理の正当性を、削除や置換などの匿名化処理を施した後でも検証できる匿名化の正当性を検証可能な匿名化システムおよび匿名化方法を提供することができる。
【図面の簡単な説明】
【００１１】
【図１】匿名化システムの全体構成図である。
【図２】匿名化データ提供サーバの機能構成図である。
【図３】匿名化データ利用者端末の機能構成図である。
【図４】匿名化データ提供サーバおよび匿名化データ利用者端末のハードウェア・ソフトウェア構成図である。
【図５】患者データテーブルのデータ構造の一例を示す図である。
【図６】抽象化パタン群のデータ構造の一例を示す図である。
【図７】拡張患者データテーブルのデータ構造の一例を示す図である。
【図８】署名データテーブルのデータ構造の一例を示す図である。
【図９】匿名化データのデータ構造の一例を示す図である。
【図１０】利用者が匿名化データ提供サーバから匿名化データを取得して検証するまでの一連の処理を示すシーケンス図である。
【図１１】患者データレコード拡張処理を示すフローチャートである。
【図１２Ａ】署名生成処理を示すフローチャートである（その一）。
【図１２Ｂ】署名生成処理を示すフローチャートである（その二）。
【図１３】検証可能匿名化処理を示すフローチャートである。
【図１４】レコード削除処理を示すフローチャートである。
【図１５】属性削除処理を示すフローチャートである。
【図１６】属性置換処理を示すフローチャートである。
【図１７】署名検証処理を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本発明の一実施形態を、図１ないし図１７を用いて説明する。
本実施形態では、病院等が患者の医療情報を匿名化して医学研究、統計資料等に活用するために提供する例について説明する。
先ず、図１ないし図４を用いて匿名化システムの構成について説明する。
【００１３】
先ず、図１を用いて匿名化システムの全体構成について説明する。
匿名化データ提供システムは、個人情報を含む情報を保持するデータ所有者（データホルダ）が、情報を匿名化した上で、データ利用者へ提供するためのシステムである。匿名化データ提供システムは、図１に示されるように、匿名化データ提供サーバ１と匿名化データ利用者端末２からなり、それらをネットワーク３により接続した形態である。
【００１４】
匿名化データ提供サーバ１は、データホルダが個人情報を格納し提供用の匿名化処理を行う機能を提供するサーバである。匿名化データ利用者端末２は、データ利用者が匿名化データをダウンロードし、正当性の検証を行うクライアント端末である。ネットワーク３は、インターネットのようなグローバルなネットワークであってもよいし、構内に設置されるＬＡＮ（Local Network）であってもよい。
【００１５】
次に、図２を用いて匿名化データ提供サーバの機能構成について説明する。
匿名化データ提供サーバ１は、図２に示されるように、Ｗｅｂサーバ機能部１０１、レコード拡張機能部１０２、匿名化処理機能部１０３、乱数生成部１０４、ハッシュ値生成部１０５、署名生成部１０６、記憶部１１０からなる。
【００１６】
Ｗｅｂサーバ機能部１０１は、データ利用者へ患者データ名とデジタル署名値をＷｅｂページにより公開する処理を行う機能部である。レコード拡張機能部１０２は、匿名化処理に先立ち患者データを拡張する前処理を行う機能部である。匿名化処理機能部１０３は、検証可能な匿名化処理を行う機能部である。乱数生成部１０４は、ハッシュ値の安全性を高めるために付与する乱数を生成する機能部である。ハッシュ値生成部１０５は、一方向関数などによるハッシュ値の生成を行う機能部である。署名生成部１０６は、拡張患者データを入力としてデジタル署名を生成する機能部である。記憶部１１０は、匿名化データ提供サーバ１で使用されるデータを記憶する機能部である。
【００１７】
記憶部１１０には、患者データテーブル３０１、抽象化パタン群３０２、拡張患者データテーブル３０３、署名データテーブル３０４、匿名化データ３０５が格納されている。
【００１８】
患者データテーブル３０１は、個人情報を含む患者データを格納するテーブルである。抽象化パタン群３０２は、患者データの匿名化における置換処理のパタン群のデータである。拡張患者データテーブル３０３は、匿名化処理の前処理として拡張処理を行った患者データを格納するテーブルである。署名データテーブル３０４は、患者データ名とその患者データの拡張患者データのデジタル署名値のペアを格納するテーブルである。匿名化データ３０５は、患者データを匿名化したデータである。
なお、データの具体的な構造は、後に詳説する。
【００１９】
次に、図３を用いて匿名化データ利用者端末の機能構成に説明する。
匿名化データ利用者端末２は、図３に示されるように、ブラウザ機能部２０１、署名検証処理部２０２、ハッシュ値生成部２０３、署名生成部２０４、記憶部２１０からなる。Ｗｅｂブラウザ機能部２０１は、Ｗｅｂページを参照する処理を行う機能部である。署名検証処理部２０２は、Ｗｅｂページから取得した署名値と受領した匿名化データの署名値とを比較し匿名化の正当性を検証する機能部である。ハッシュ値生成部２０３は、一方向関数などによるハッシュ値の生成を行う機能部である。署名生成部２０４は、匿名化データ提供サーバ１の署名生成部１０６と同等の機能を有し、匿名化データを入力としてデジタル署名を生成する機能部である。記憶部２１０は、匿名化データ利用者端末２で使用されるデータを記憶する機能部である。
【００２０】
記憶部２１０には、匿名化データ３０５、署名値３１１が格納される。匿名化データ３０５、患者データを匿名化したデータであり、匿名化データ提供サーバ１からネットワーク３経由で受領したデータである。署名値３１１は、Ｗｅｂページから取得した検証用のデジタル署名値および匿名化データ３０５より生成したデジタル署名値である。
【００２１】
次に、図４を用いて匿名化データ提供サーバおよび匿名化データ利用者端末のハードウェア構成、ソフトウェア構成について説明する。
匿名化データ提供サーバ１のハードウェア構成としては、例えば、図４に示されるサーバ装置のような一般的な情報処理装置で実現される。また、実計算機上に構築される仮想マシンであってもよい。
【００２２】
匿名化データ提供サーバ１は、ＣＰＵ（Central Processing Unit）４０１、主メモリ４０２、ネットワークインタフェース４０３、表示装置４１０、入力装置４２０がバスにより結合された形態になっている。
【００２３】
ＣＰＵ４０１は、匿名化データ提供サーバ１の各部を制御し、主メモリ４０２に必要なプログラムをロードして実行する。
【００２４】
主メモリ４０２は、通常、ＲＡＭなどの揮発メモリで構成され、ＣＰＵ４０１が実行するプログラム、参照するデータが記憶される。
【００２５】
ネットワークインタフェース４０３は、ネットワーク３と接続するためのインタフェースである。
【００２６】
表示装置４１０は、ＬＣＤ（Liquid Crystal Display）などの情報を表示する装置である。
【００２７】
入力装置４２０は、コマンドやデータなどの情報を入力したり、装置を制御するための入力を行う装置であり、例えば、キーボードやポインティングデバイスのマウスなどである。
【００２８】
ハードディスクドライブ（ＨＤＤ：Hard Disk Drive）４３０は、大容量の記憶容量を有しており、本実施形態を実行するためのプログラムが格納されている。匿名化データ提供サーバ１のハードディスクドライブ４３０には、Ｗｅｂサーバ機能プログラム６０１、レコード拡張機能プログラム６０２、匿名化処理機能プログラム６０３、乱数生成プログラム６０４、ハッシュ値生成プログラム６０５、署名生成プログラム６０６がインストールされている。Ｗｅｂサーバ機能プログラム６０１、レコード拡張機能プログラム６０２、匿名化処理機能プログラム６０３、乱数生成プログラム６０４、ハッシュ値生成プログラム６０５、署名生成プログラム６０６は、それぞれ、Ｗｅｂサーバ機能部１０１、レコード拡張機能部１０２、匿名化処理機能部１０３、乱数生成部１０４、ハッシュ値生成部１０５、署名生成部１０６の機能を実行するプログラムである。
【００２９】
また、ハードディスクドライブ４３０は、患者データテーブル３０１、抽象化パタン群３０２、拡張患者データテーブル３０３、署名データテーブル３０４、匿名化データ３０５が格納されている。
【００３０】
匿名化データ利用者端末２のハードウェア構成としては、例えば、図４に示されるパーソナルコンピュータのような一般的な情報処理装置で実現される。また、スマートフォンであってもよいし、専用端末であってもよい。
【００３１】
匿名化データ利用者端末２のハードウェア構成の各部は、匿名化データ提供サーバ１と同一である。
【００３２】
匿名化データ利用者端末２のハードディスクドライブ５３０には、ブラウザ機能プログラム７０１、署名検証処理プログラム７０２、ハッシュ値生成プログラム７０３、署名生成プログラム７０４がインストールされている。ブラウザ機能プログラム７０１、署名検証処理プログラム７０２、ハッシュ値生成プログラム７０３、署名生成プログラム７０４は、それぞれブラウザ機能部２０１、署名検証処理部２０２、ハッシュ値生成部２０３、署名生成部２０４の各機能を実行するプログラムである。
【００３３】
また、ハードディスクドライブ５３０には、匿名化データ３０５、署名値３１１が格納されている。
【００３４】
次に、図５ないし図９を用いて匿名化システムで用いられデータ構造について説明する。
患者データテーブル３０１は、患者の個人情報や関連データを格納するテーブルであり、図５に示されるように、「氏名」「住所（都道府県名）」「性別」から構成される。例えば、レコード３０１１は、ある患者の氏名が「日立太郎」であり、住所が「東京都」であり、性別が「男性」であることを示している。
【００３５】
抽象化パタン群３０２は、患者データテーブル３０１のカラムの表す属性を抽象化するときに用いられるデータであり、図６（ａ）に示されるように、例えば、一般化階層木３０２ａというツリー構造のデータで表現される。
【００３６】
一般化階層木３０２ａにおいては、ツリー構造の葉ノードには、最も抽象度の低い値が配置され、根ノードには最も抽象度の高い値が配置され、中間ノードは、葉ノードに近いノードから根ノードに近いノードになるにつれて抽象度が高い値が配置される。例えば、図６（ａ）に示される属性「住所」の一般化階層木３０２ａは、葉ノードが「東京都」「神奈川県」などの“都道府県名”であり、中間ノードがより抽象度の高い「関東地方」「近畿地方」などの“地方名”であり、根ノードがこれらの中では最も抽象度の高い「日本」という“国名”である一般化階層木を示している。
【００３７】
抽象化パタン群３０２は、図６（ｂ）に示される抽象化パタンテーブル３０２ｂの形式で表現されていてもよい。例えば、属性「住所」の抽象化パタンテーブル３０２ｂは、「住所」と「抽象化パタン」のカラムからなるテーブル構造のデータで表現される。抽象化パタンテーブル３０２ｂは、現在「住所」カラムの値である各“都道府県名”に対し、より抽象度の高い匿名化処理における置換対象の候補となる“地方名”および“国名”の値を対応付ける。例えば、抽象化パタンテーブル３０２ｂの「住所」の値「東京都」の抽象化パタンは、“地方名”を示す「関東地方」および“国名”を示す「日本」がより抽象度の高い匿名化処理における置換対象の候補であることを示している。
【００３８】
拡張患者データテーブル３０３は、患者データテーブル３０１の患者データに対し、検証可能な匿名化処理を実現するための前処理を施したテーブルである。拡張患者データテーブル３０３は、置換による匿名化を実行する際に置換候補となる抽象化パタン群３０２の各値を患者データに追加し、さらに削除や置換の匿名化処理の代替処理として実行するハッシュ化の安全性を高めるための乱数を追加したデータ構造を有する。例えば、図７に示される例では、患者データテーブル３０１に対して、属性「住所」の抽象化パタンである「住所３」および「住所４」の値を追加し、さらに、各属性に対してハッシュ化の安全性を高めるための乱数である「氏名１」「住所１」「性別１」の乱数の値を追加している。
【００３９】
この属性ごとに乱数を追加するデータ構造と、後に説明する属性ごとにハッシュ値を段階的に生成するアルゴリズムにより、すべての要素に乱数を付与する場合に比べてデータサイズを削減しつつ、乱数によるハッシュ化の安全性向上をデータ全体に適用することができる。
【００４０】
署名データテーブル３０４は、患者データに対しての署名値を保持するテーブルであり、図８に示されるように、「対象データ」、「署名値」から構成される。「対象データ」は、患者データ名を格納するカラムであり、「署名値」は、各患者データに対し署名生成処理により生成した署名値を格納するカラムである。
【００４１】
本実施形態では、署名データテーブル３０４のデータは、匿名化データ提供サーバ１のＷｅｂサーバ機能部１０１部により読み込まれ、Ｗｅｂページとして、ネットワーク３経由で匿名化データ利用者端末２からＷｅｂブラウザ等による閲覧およびダウンロードを可能とする。
【００４２】
匿名化データ３０５は、拡張患者データテーブル３０３に匿名化処理を実行したデータである。例えば、図９には、図７に示された、拡張患者データテーブル３０３のデータに対し、匿名化処理を実行した結果の一例が示されている。例えば、レコード削除されたレコード３０５１は、削除されたレコードであることを示すラベルである“Ｄｅｌｅｔｅ＿Ｒ”および削除の代替処理として実行するハッシュ化により生成されたレコードハッシュ値“２２８９１Ｆ”および空値を示す“−”（Ｎｕｌｌ）により構成される。また、例えば、属性削除および属性置換されたレコード３０５２は、属性「氏名」が属性削除されたことを示すラベルである“Ｄｅｌｅｔｅ＿Ａ”、属性削除の代替処理として実行するハッシュ化により生成された属性ハッシュ値“４６５ＦＣ４”、属性「住所」が置換されたことを示す“Ｒｅｐｌａｃｅ”、属性置換の代替処理として実行するハッシュ化により生成された属性ハッシュ値“Ｂ０Ｄ８Ｃ７”により構成される。
レコード削除、属性削除、属性置換の各処理の詳細は、後に説明する。
【００４３】
これらのハッシュ値は、署名生成処理における中間処理の値であり、このデータ構造により、匿名化データ利用者端末２の署名検証処理における署名生成処理のデータ処理量が削減できるので、署名検証処理を高速化することができる。
【００４４】
次に、図１０ないし図１７を用いて匿名化システムの処理について説明する。
【００４５】
先ず、図１０を用いて利用者が匿名化データ提供サーバから匿名化データを取得して検証するまでの一連の処理について説明する。
先ず、匿名化データ提供サーバ１のレコード拡張機能部１０２は、患者データテーブル３０１および抽象化パタン群３０２を入力とし、匿名化処理の前処理として患者データレコード拡張処理を行い、拡張患者データテーブル３０３へ処理結果を格納する（Ｓ０１）。なお、患者データレコード拡張処理は、後に、図１１を用いて詳説する。
【００４６】
次に、匿名化データ提供サーバ１の署名生成部１０６は、拡張患者データテーブル３０３のデータを入力とし、デジタル署名を生成する署名生成処理を行い、生成した署名値を元となった患者データ名とともに署名データテーブル３０４に格納する（Ｓ０２）。なお、署名生成処理は、後に、図１２Ａおよび図１２Ｂを用いて詳説する。
【００４７】
次に、匿名化データ提供サーバ１のＷｅｂサーバ機能部１０１は、署名データテーブル３０４に格納された患者データ名および署名値を読出し、ネットワーク３からアクセス可能なＷｅｂページを生成し、ＷｅｂページのＵＲＬ（Uniform Resource Locator）を匿名化データ利用者端末２のＷｅｂブラウザ機能へ通知する（Ｓ０３）。
【００４８】
次に、匿名化データ利用者端末２のＷｅｂブラウザ機能部２０１は、患者データ名および署名値を含むＷｅｂページを取得し、患者データ名および署名値の一覧をデータ利用者にディスプレイ等の表示装置５１０により表示する（Ｓ０６）。
【００４９】
次に、匿名化データのデータ利用者は、匿名化データ利用者端末２のマウスなどの入力装置５２０を操作し、利用する患者データの患者データ名に対応する署名値を、Ｗｅｂページからダウンロードし、匿名化データ利用者端末２の主メモリ５０２またはハードディスクドライブ５３０に検証用の署名値３１１として保存する（Ｓ０５）。
【００５０】
次に、データ利用者は、利用する患者データ名および匿名化条件を匿名化データ利用者端末２のＷｅｂブラウザ機能部２０１に入力する。本実施形態では、以下の三つの匿名化条件が入力されるものとする。
【００５１】
匿名化条件１：属性「住所」が“日本”以外のレコードを削除
匿名化条件２：属性「氏名」を削除
匿名化条件３：属性「住所」を“都道府県名”から“地方名”に置換
【００５２】
そして、Ｗｅｂブラウザ機能部２０１は、患者データ名および匿名化条件からなる匿名化データ取得依頼を匿名化データ提供サーバ１のＷｅｂサーバ機能部１０１に通知する（Ｓ０６）。
【００５３】
次に、匿名化データ提供サーバ１のＷｅｂサーバ機能部１０１は、通知された患者データ名および匿名化条件を匿名化処理機能部１０３に送信する。匿名化処理機能部１０３は、患者データ名および匿名化条件を入力として検証可能匿名化処理を実行して、匿名化データ３０５を生成し、Ｗｅｂサーバ機能部１０１に送信する。そして、Ｗｅｂサーバ機能部１０１は、匿名化データ３０５をデータ利用者向けのダウンロード用Ｗｅｂページに登録し、そのＵＲＬを匿名化データ利用者端末２のＷｅｂブラウザ機能へ通知する（Ｓ０７）。なお、検証可能匿名化処理の詳細は、後に、図１３を用いて詳説する。
【００５４】
次に、匿名化データ利用者端末２のＷｅｂブラウザ機能部２０１は、通知されたＵＲＬを入力としてデータ利用者向けのダウンロード用Ｗｅｂページにアクセスし、匿名化データをダウンロードにより取得し、匿名化データ利用者端末２の主メモリ５０２またはハードディスクドライブ５３０に匿名化データ３０５として格納する（Ｓ０８）。
【００５５】
最後に、匿名化データ利用者端末２の署名検証処理部２０２は、匿名化データ３０５および検証用の署名値３１１を入力として、匿名化の正当性を検証する署名検証処理を実行し、正当性が検証された場合“ＯＫ”を、正当でない場合“ＮＧ”を、匿名化データ利用者端末２のディスプレイ等の表示装置５１０により、データ利用者に表示する（Ｓ０９）。なお、署名検証処理の詳細は、後に、図１７を用いて詳説する。
【００５６】
上記の利用者が匿名化データ提供サーバから匿名化データを取得して検証するまでの一連の処理により、データ利用者は、入手した匿名化データが正当な匿名化処理で匿名化されたか否かを確認できる。これにより、例えば、医療分野では研究に用いる患者、被験者等の匿名化データの匿名化の正当性を検証できるので、不正な匿名化データにより研究結果が誤る事態を避けることができる。
【００５７】
次に、図１１を用いて患者データレコード拡張処理について説明する。
これは、図１０のＳ０１に該当する処理である。
【００５８】
先ず、匿名化データ提供サーバ１のレコード拡張機能部１０２は、患者データテーブルのレコード数をカウントし、レコード数Ｎとする（Ｓ１０１）。なお、図１１に示した処理で使用する変数ｍ（ｍは、レコードのカウンタ）の初期値は１とする。
【００５９】
次に、レコード拡張機能部１０２は、患者データテーブルのレコードを一つ読出す（Ｓ１０２）。
【００６０】
例えば、読み出したレコードが図５に示すレコード３０１１の場合、当該レコードは属性「氏名」の要素が「日立太郎」、属性「住所」の要素が「東京都」、属性「性別」の要素が「男性」となる。
【００６１】
次に、レコード拡張機能部１０２は、抽象化パタン群３０２から、読出した当該レコードの抽象化パタン群を読み出す（Ｓ１０３）。例えば、当該レコードの属性「住所」の「東京都」の抽象化パタンを、図６（ｂ）に示す属性「住所」の抽象化パタン群の抽象化パタンテーブル３０２ｂから読み出す場合、抽象化パタンとして、図６（ｂ）における属性「住所」の要素が「東京都」であるレコード３０２１の「関東地方」「日本」を読み出す。
【００６２】
次に、レコード拡張機能部１０２は、当該レコードに、取得した抽象化パタンの各要素を追加する（Ｓ１０４）。例えば、図５のレコード３０１１が当該レコードである場合、Ｓ１０３で抽象化パタンのレコード３０２１から読出した要素である「関東地方」「日本」を追加する。これにより、置換による匿名化時の置換先の値の候補を含むレコードが生成される。
【００６３】
次に、レコード拡張機能部１０２は、レコードの各属性に対して乱数生成部１０４から取得したそれぞれ乱数を一つずつ追加する（Ｓ１０５）。例えば、図５のレコード３０１１が当該レコードである場合、三つの属性に対して、異なる三つの乱数を取得し、そのレコードに追加する。このように属性毎に一つ乱数を付与することにより、すべての要素（カラム）に乱数を付与する場合に比べてレコードのデータサイズを小さくすることができる。
【００６４】
次に、レコード拡張機能部１０２は、属性の置換、乱数の付与をおこなったレコードを拡張患者データテーブル３０３のレコードとして出力する（Ｓ１０６）。例えば、図５のレコード３０１１が当該レコードである場合、Ｓ１０３〜Ｓ１０５により生成したレコードは、図７の３０３１に示すように、属性「氏名」に追加された乱数を示す属性「氏名１」の値が「５ＥＦ４ＢＥ」、属性「氏名」の元の値を示す属性「氏名２」の値が「日立太郎」、属性「住所」に追加された乱数を示す属性「住所１」の値が「Ａ７５４Ｂ９」、属性「住所」の元の値を示す属性「住所２」の値が「東京都」、属性「住所」に追加された抽象化パタンの第一の要素を示す属性「住所３」の値が「関東地方」、属性「住所」に追加された抽象化パタンの第二の要素を示す属性「住所４」の値が「日本」、属性「性別」に追加された乱数を示す属性「性別１」の値が「７７０Ｅ６７」、属性「性別」の元の値を示す属性「性別２」の値が「男性」となる。
【００６５】
次に、レコード拡張機能部１０２は、変数ｍの値を１インクリメントする（Ｓ１０７）。
【００６６】
最後に、レコード拡張機能部１０２は、変数ｍの値と患者データのレコード数Ｎを比較し、ｍがＮ以下の場合には（Ｓ１０８：Ｎｏ）、Ｓ１０２〜Ｓ１０７の処理を実行し、ｍがＮより大きい場合には（Ｓ１０８：Ｙｅｓ）、処理を終了する。
【００６７】
次に、図１２Ａおよび図１２Ｂを用いて署名検証処理について説明する。
これは、図１０のＳ０２とＳ０９に該当する処理であり、匿名化データ提供サーバ１の署名生成部１０６および匿名化データ利用者端末２の署名生成部２０４で実施される両者の共通の処理である。本実施形態においては、匿名化データ提供サーバ１の署名生成部１０６は、拡張患者データを入力としてデジタル署名値を出力し、一方、匿名化データ利用者端末２の署名生成部２０４は、匿名化データを入力としてデジタル署名値を出力する。
【００６８】
以下では、署名検証処理が匿名化データ提供サーバ１の署名生成部１０６で行われるものとするが、匿名化データ利用者端末２の署名生成部２０４での署名検証処理も同様である。
【００６９】
先ず、署名生成部１０６は、対象データから、レコード数Ｎ、属性数ｎを取得する（Ｓ２０１）。なお、本フローチャートで使用する変数ｉ，ｊ，ｔ，ｑ，ｋ，ｌ，ｍの初期値はすべて１とする。
【００７０】
次に、署名生成部１０６は、対象データから、レコードを一つ読み出す（Ｓ２０２）。例えば、対象データが図７の拡張患者データテーブル３０３の場合、読み出すレコードは、レコード３０３１となる。また、対象データが図９の匿名化データ３０５の場合、読み出す対象レコードはレコード３０５２となる。
【００７１】
次に、署名生成部１０６は、読み出した当該レコードの１番目の要素が、当該レコードが削除されていることを示す“Ｄｅｌｅｔｅ＿Ｒ”である場合（Ｓ２０３：Ｙｅｓ）には、Ｓ２０４の処理を実行し、それ以外の場合（Ｓ２０３：Ｎｏの場合）は、Ｓ２０５の処理を実行する（Ｓ２０３）。例えば、当該レコードが匿名化データ３０５のレコード３０５１である場合には、レコードの１番目の要素が“Ｄｅｌｅｔｅ＿Ｒ”であるため、次にＳ２０４の処理を実行する。一方、当該レコードが拡張患者データテーブル３０３のレコード３０３１の場合には、レコードの１番目の要素が“５ＥＦ４ＢＥ”であるため、次にＳ２０５の処理を実行する。
【００７２】
次に、署名生成部１０６は、当該レコードの２番目の要素の値をｉ番目（ｉは、属性のカウンタ）のレコードのハッシュ値Ｈｒｉの値とし、次にＳ２１５の処理を実行し（Ｓ２０４）、次にＳ２１６の処理を実行する。例えば、当該レコードが匿名化データ３０５のレコード３０５１である場合、その２番目の要素の値“２２８９１Ｆ”をＨｒｉの値とする。
【００７３】
次に、署名生成部１０６は、当該レコードのｉ番目の属性Ａｉの要素数を取得しＥｉｎとする（Ｓ２０５）。例えば、拡張患者データテーブル３０３のレコード３０３１の１番目の属性「氏名」をＡ１とした場合、拡張された二つの属性「氏名１」「氏名２」から構成されるため、Ｅｉｎの値は“２”となる。
【００７４】
次に、署名生成部１０６は、属性Ａｉの１番目の要素が、“Ｄｅｌｅｔｅ＿Ａ”である場合には（Ｓ２０６：“Ｄｅｌｅｔｅ＿Ａ”）、次にＳ２０７の処理を実行し、“Ｒｅｐｌａｃｅ”である場合には（Ｓ２０６：“Ｒｅｐｌａｃｅ”）、次にＳ２０８の処理を実行し、いずれでもない場合（Ｓ２０６：Ｏｔｈｅｒｗｉｓｅ）には、次にＳ２０９の処理を実行する（Ｓ２０６）。例えば、当該レコードが匿名化データ３０５のレコード３０５２、当該属性Ａｉが「氏名」である場合、１番目の要素が属性「氏名１」の“Ｄｅｌｅｔｅ＿Ａ”であるため、次にＳ２０７の処理を実行する。また例えば、当該レコードが匿名化データ３０５のレコード３０５２、当該属性Ａｉが「住所」である場合、１番目の要素が属性「住所１」の“Ｒｅｐｌａｃｅ”であるため、次にＳ２０８の処理を実行する。また例えば、当該レコードが拡張患者データテーブル３０３の３０３１、当該属性Ａｉが「氏名」である場合、１番目の要素が属性「氏名１」の“５ＥＦ４ＢＥ”であるため、次にＳ２０９の処理を実行する。
【００７５】
次に、署名生成部１０６は、当該属性Ａｉの２番目の要素の値をハッシュ値Ｈｒｉの値とし（Ｓ２０７）、次にＳ２１６の処理を実行する。例えば、当該レコードが匿名化データ３０５のレコード３０５２、当該属性Ａｉが「氏名」である場合、２番目の要素の属性「氏名２」の値である“４６５ＦＣ４”をＨｒｉの値とする。
【００７６】
次に、署名生成部１０６は、当該属性Ａｉの２番目の要素の値をハッシュ値Ｈｒｉの値とし、次にＳ２１０の処理を実行する（Ｓ２０８）。例えば、当該レコードが匿名化データ３０５のレコード３０５２、当該属性Ａｉが「住所」である場合、２番目の要素の属性「住所２」の値である“Ｂ０Ｄ８Ｃ７”をＨｒｉの値とする。
【００７７】
次に、署名生成部１０６は、変数ｊ（ｊは、要素のカウンタ）の値を１インクリメントする（Ｓ２１０）。
【００７８】
次に、署名生成部１０６は、当該属性Ａｉのｊ番目の要素Ａｉｊと（ｊ＋１）番目の要素Ａｉ（ｊ＋１）を入力として、ハッシュ値生成部１０５からハッシュ値を取得し、当該レコードのハッシュ値Ｈｒｉとする（Ｓ２０９）。例えば、当該レコードが拡張患者データテーブル３０３のレコード３０３１、当該属性Ａｉが「氏名」、ｉ＝１、ｊ＝１である場合、当該属性Ａｉのｊ番目の要素は属性「氏名１」の値“５ＥＦ４ＢＥ”、（ｊ＋１）番目の要素は属性「氏名２」の値“日立太郎”となり、この二つの値をハッシュ値生成部１０５に入力して得たハッシュ値“Ａ８Ｅ０Ｃ２”をＨｒｉの値とする。
【００７９】
次に、署名生成部１０６は、当該属性Ａｉのｊ番目の要素の値が“−”（Ｎｕｌｌ）である場合（Ｓ２１２：Ｙｅｓ）には、次にＳ２１３の処理を実行し、それ以外の場合（Ｓ２１２：Ｎｏ）には、次にＳ２１２の処理を実行する。例えば、当該レコードが匿名化データ３０５のレコード３０５１、当該属性Ａｉが「住所」、ｊ番目の要素が属性「住所１」の値“−”である場合、次にＳ２１３の処理を実行する。
【００８０】
次に、署名生成部１０６は、変数ｊの値を１インクリメントし、次に、Ｓ２１３の処理を実行する（Ｓ２１２）。
【００８１】
次に、署名生成部１０６は、当該属性Ａｉの要素数Ｅｉｎと変数ｊの値を比較し、Ｅｉｎがｊより大きい場合（Ｓ２１３：Ｙｅｓ）には、次にＳ２１６の処理を実行し、Ｅｉｎがｊ以下の場合（Ｓ２１３：Ｎｏ）には、次にＳ２１４の処理を実行する。
【００８２】
次に、署名生成部１０６は、当該属性Ａｉのｊ番目の要素Ａｉｊおよびその時点の当該レコードのハッシュ値Ｈｒｉを入力として、ハッシュ値生成部１０５から新たなハッシュ値を取得して、新たなＨｒｉとする（Ｓ２１４）。例えば、当該レコードが拡張患者データテーブル３０３のレコード３０３１、当該属性Ａｉが「住所」、ｊ＝３であり、当該属性Ａｉの３番目の要素は属性「住所３」の値、“関東地方”、その時点のＨｒｉの値を“Ｂ７ＥＦ１４”である場合、“関東地方”および“Ｂ７ＥＦ１４”をハッシュ値生成部１０５に入力して得た“７Ｃ６４８Ｂ”を新たなＨｒｉの値とする。
【００８３】
次に、署名生成部１０６は、変数ｊの値を１インクリメントし、次に、Ｓ２１１の処理を実行する（Ｓ２１５）。
【００８４】
次に、署名生成部１０６は、Ｓ２１５では、変数ｉの値を１インクリメントし、次にＳ２１７の処理を実行する（Ｓ２１６）。
【００８５】
次に、署名生成部１０６は、属性数ｎと変数ｉを比較し、ｉがｎ以下の場合（Ｓ２１７：Ｙｅｓ）には、次にＳ２０３の処理を実行し、ｉがｎより大きい場合（Ｓ２１７：Ｎｏ）には、次にＳ２１８の処理を実行する。
【００８６】
次に、ｎとｑ（ｑは、属性のカウンタ）を比較し、ｎがｑより大きい場合（Ｓ２１８：Ｙｅｓ）には、次にＳ２１９を実行し、ｎがｑ以下の場合（Ｓ２１８：Ｎｏ）には、次にＳ２２１を実行する。
【００８７】
次に、署名生成部１０６は、ハッシュ値Ｈｒｑとハッシュ値Ｈｒ（ｑ＋１）を入力として、ハッシュ値を生成し、新たなＨｒ（ｑ＋１）とする（Ｓ２１９）。
【００８８】
次に、ｑを１インクリメントし（Ｓ２２０）、Ｓ２１８に戻る。
【００８９】
次に、署名生成部１０６は、ハッシュ値ＨＲｔ（ｔは、レコードのカウンタ）に、ハッシュ値Ｈｒｎ（これは、ｎ≧２のとき、Ｈｒ（ｑ＋１）の値に等しいことに注意）の値を代入する（Ｓ２２１）。
【００９０】
次に、署名生成部１０６は、変数ｔの値を、１インクリメントし、変数ｉおよび変数ｊの値を１として、次にＳ２１８の処理を実行する（Ｓ２１７）。
【００９１】
次に、署名生成部１０６は、対象データのレコード数Ｎと変数ｔの値を比較し、ｔがＮ以下の場合（Ｓ２２３：Ｎｏ）には、次にＳ２０２〜Ｓ２２２の処理を実行し、ｔがＮより大きい場合（Ｓ２２３：Ｙｅｓ）には、次に図１２ＢのＳ２５１の処理を実行する。
【００９２】
以降の過程は、レコードハッシュ値からなる二分木構造のハッシュ木（Hash Tree）からルートのハッシュ値を生成する過程である。
【００９３】
次に、署名生成部１０６は、レコードハッシュ値ＨＲｉの残項目数としてｍ（ｍは、レコードの処理の残項目数のカウンタ）の値を対象データのレコード数Ｎとし、次にＳ２５２の処理を実行する（図１２ＢのＳ２５１）。
【００９４】
次に、署名生成部１０６は、残項目数ｍと変数ｌの値を比較し、等しくない場合（Ｓ２５２：Ｎｏ）には、次にＳ２５３の処理を実行し、等しい場合（Ｓ２５２：Ｙｅｓ）には、次にＳ２６０の処理を実行する。
【００９５】
次に、署名生成部１０６は、Ｓ２５３では、ｋ番目（ｋは、レコードのカウンタ）のレコードのハッシュ値ＨＲｋと（ｋ＋１）番目のハッシュ値ＨＲ（ｋ＋１）を入力として、ハッシュ値生成部１０５から新たなハッシュ値を取得し、ｌ番目（ｌは、レコードのカウンタ）のレコードハッシュ値ＨＲｌの新たな値とする（Ｓ２５３）。例えば、ｋ＝１、ｌ＝１の場合、ＨＲ１とＨＲ２を入力としてハッシュ値生成部１０５から新たに取得したハッシュ値を、ＨＲ１の新たな値とする。
【００９６】
次に、署名生成部１０６は、残項目数ｍの値が２以外の場合（Ｓ２５４：Ｎｏ）には、次にＳ２５５の処理を実行し、残項目数ｍの値が２である場合（Ｓ２５４：Ｙｅｓ）には、次にＳ２６０の処理を実行する。
【００９７】
次に、署名生成部１０６は、２ｋ＋１を新たなｋの値とし、ｌの値を１インクリメントする（Ｓ２５５）。
【００９８】
次に、署名生成部１０６は、残項目数ｍと変数ｋの値を比較し、ｍがｋよりも大きい場合（Ｓ２５６：Ｙｅｓ）には、次にＳ２５３の処理を実行し、ｍがｋ以下の場合（Ｓ２５６：Ｎｏ）には、次にＳ２５７の処理を実行する。
【００９９】
次に、署名生成部１０６は、残項目数ｍと変数ｋの値を比較し、ｍとｋが異なる場合（Ｓ２５７：Ｎｏ）には、次にＳ２５８の処理を実行し、ｍとｋが等しい場合（Ｓ２５７：Ｙｅｓ）には、次にＳ２５９の処理を実行する。
【０１００】
署名生成部１０６は、（ｍ／２＋ｍ％２）の値を新たな残項目数ｍの値とし、ｋおよびｌの値を１として、次にＳ２５３の処理を実行する（Ｓ２５８）。ここで、ｍ％２は、ｍを２で割った剰余を表す。
【０１０１】
次に、署名生成部１０６は、Ｈｒｌの新しい値としてＨｒｋの値を代入する（Ｓ２５９）。
【０１０２】
次に、署名生成部１０６は、その時点のＨｒｌの値を対象データの全体ハッシュ値Ｈｄの値とする（Ｓ２６０）。
【０１０３】
最後に、署名生成部１０６は、ＨｄからＲＳＡなどのデジタル署名アルゴリズムにより署名値δを生成して出力し（Ｓ２６１）、処理を終了する。なお、デジタル署名アルゴリズムは、既存のアルゴリズムを利用することができる。
【０１０４】
以上説明した署名生成処理により、図１３〜図１６を用いて後述する検証可能匿名化処理が施された匿名化データに対しては、匿名化処理後であっても、匿名化前の拡張患者データが同一である場合は、拡張患者データに対して生成される署名の値と匿名化データに対して生成される署名の値が同一となるため、匿名化の正当性を検証することが可能となる。
【０１０５】
次に、図１３を用いて検証可能匿名化処理について説明する。
これは、図１０のＳ０７に該当する処理である。
【０１０６】
先ず、匿名化データ提供サーバ１の匿名化処理機能部１０３は、Ｗｅｂサーバ機能部１０１から送信された患者データ名に対応する拡張患者データを拡張患者データテーブル３０３から読み出す（Ｓ３０１）。例えば、図１０のＳ０６において、対応する拡張患者データとして、図７の拡張患者データテーブル３０３のデータを取得する。
【０１０７】
次に、匿名化処理機能部１０３は、Ｗｅｂサーバ機能部１０１から送信された匿名化条件を読出す（Ｓ３０２）。例えば、本実施形態では、以下の三つの匿名化条件を読み出すものとする。
【０１０８】
匿名化条件１：属性「住所」が“日本”以外のレコードを削除
匿名化条件２：属性「氏名」を削除
匿名化条件３：属性「住所」を“都道府県名”から“地方名”に置換
【０１０９】
次に、匿名化処理機能部１０３は、レコードを削除する匿名化条件がある場合には、単にレコードを削除するのではなく、対象レコード全体のハッシュ化を拡張患者データに対して行うレコード削除処理を実行する（Ｓ３０３）。例えば、本実施形態の場合、匿名化条件１がレコードを削除する匿名化条件であるため、拡張患者データテーブル３０３から読み出した拡張患者データに対して、レコード削除処理を実行する。なお、レコード削除処理の詳細は、後に、図１４を用いて後述する。
【０１１０】
次に、匿名化処理機能部１０３は、属性を削除する匿名化条件がある場合、単に属性を削除にするのでなく、対象属性全体のハッシュ化を拡張患者データに対して行う属性削除処理を実行する（Ｓ３０４）。例えば、本実施形態の場合、匿名化条件２が属性「氏名」を削除する匿名化条件であるため、拡張患者データに対して属性削除処理を実行する。なお、属性削除処理の詳細は、図１５を用いて後述する。
【０１１１】
次に、匿名化処理機能部１０３は、属性の要素を置換する匿名化条件がある場合、単に、属性の要素の置換するのでなく、対象属性の一部の要素のハッシュ化を拡張患者データに対して実行する属性置換処理を実行する（Ｓ３０５）。例えば、本実施形態の場合、匿名化条件３が属性「住所」の要素を“都道府県名”から“地方名”に置換する匿名化条件であるため、各条患者データに対して属性置換処理を実行する。なお、属性置換処理の詳細は、図１６を用いて後述する。
【０１１２】
最後に、匿名化処理機能部１０３は、Ｓ３０３〜Ｓ３０５の処理を実行後の拡張患者データを匿名化データ３０５としてファイルに出力し（Ｓ３０６）、Ｗｅｂサーバ機能部１０１へ送信し、処理を終了する。
【０１１３】
次に、図１４を用いてレコード削除処理について説明する。
これは、図１３のＳ３０３に該当する処理である。
【０１１４】
先ず、匿名化データ提供サーバ１の匿名化処理機能部１０３は、レコード削除の匿名化条件を読み出す。例えば、本実施形態の場合、匿名化条件１を読み出す（Ｓ４０１）。なお、変数ｉ，ｊ，ｔの初期値を１とする（匿名化条件１：属性「住所」が“日本”以外のレコードを削除）。
【０１１５】
次に、匿名化処理機能部１０３は、拡張患者データから削除対象のレコード群Ｒｄを特定し、Ｒｄのレコード数をＮ，Ｒｄの属性の属性数をｎとする。例えば、本実施形態では、図７の拡張患者データテーブル３０３から読み出した拡張患者データから、属性「住所」が“日本”以外の“アメリカ”であるレコード３０３２をＲｄとし、Ｎ＝１、ｎ＝３（属性「氏名」「住所」「性別」）とする（Ｓ４０２）。
【０１１６】
次に、匿名化処理機能部１０３は、削除対象のレコード群Ｒｄからｔ番目（ｔは、レコードのカウンタ）のレコードを一つ読み出す。例えば、本実施形態では、Ｓ４０２でＲｄとして特定したレコード３０３２を読み出す（Ｓ４０３）。
【０１１７】
次に、匿名化処理機能部１０３は、読み出した当該レコードのｉ番目（ｉは、属性のカウンタ）の属性Ａｉの要素数Ｅｉｎを取得する。例えば、当該レコードがレコード３０３２、ｉ＝１の場合、１番目の属性「氏名」の要素数２をＥｉｎの値とする（Ｓ４０４）。
【０１１８】
次に、匿名化処理機能部１０３は、属性Ａｉのｊ番目の要素Ａｉｊと（ｊ＋１）番目の要素Ａｉ（ｊ＋１）をハッシュ値生成部１０５に入力してハッシュ値を取得し、レコードハッシュ値Ｈｒｉの値とする。例えば、当該レコードがレコード３０３２、属性Ａｉが属性「氏名」かつｊ＝１の場合、属性「氏名」の１番目の要素“７４１ＤＣ３”と２番目の要素“Ｔｏｍ”をハッシュ値生成部１０５に入力してハッシュ値を取得し、Ｈｒｉの値とする（Ｓ４０５）。
【０１１９】
次に、匿名化処理機能部１０３は、Ｅｉｎと変数ｊの値を比較し、Ｅｉｎがｊよりも大きい場合（Ｓ４０６：Ｙｅｓ）には、次にＳ４０７の処理を実行し、Ｅｉｎがｊ以下の場合（Ｓ４０６：Ｎｏ）には、次にＳ４１０の処理を実行する（Ｓ４０９）。
【０１２０】
次に、匿名化処理機能部１０３は、ｊの値を１インクリメントする（Ｓ４０７）。
【０１２１】
次に、匿名化処理機能部１０３は、属性Ａｉの番目の要素Ａｉｊとその時点のＨｒｉの値をハッシュ値生成部１０５に入力して新たなハッシュ値を取得し、新たなＨｒｉの値とする（Ｓ４０８）。
【０１２２】
次に、匿名化処理機能部１０３は、Ｅｉｎと変数ｊの値を比較し、Ｅｉｎがｊよりも大きい場合（Ｓ４０９：Ｙｅｓ）には、次にＳ４０７の処理を実行し、Ｅｉｎがｊ以下の場合（Ｓ０９：Ｎｏ）には、次にＳ４１０の処理を実行する。
【０１２３】
次に、匿名化処理機能部１０３は、変数ｉの値を１インクリメントし、次にＳ４１１の処理を実行する（Ｓ４１０）。
【０１２４】
次に、匿名化処理機能部１０３は、Ｓ４１１では、属性数ｎと変数ｉの値を比較し、ｎがｉよりも小さい場合（Ｓ４１１：Ｎｏ）には、次にＳ４０４の処理を実行し、ｎがｉ以上の場合（Ｓ４１１：Ｙｅｓ）には、次にＳ４１２の処理を実行する。
【０１２５】
次に、ｎとｋ（ｋは、属性のカウンタ）を比較し、ｎがｋより大きい場合（Ｓ４１２：Ｙｅｓ）には、次にＳ４１３を実行し、ｎがｋより大きくない場合（Ｓ４１２：Ｎｏ）には、次にＳ４１５を実行する。
【０１２６】
次に、匿名化処理機能部１０３は、ハッシュ値Ｈｒｋとハッシュ値Ｈｒ（ｋ＋１）を入力として、ハッシュ値を生成し、新たなＨｒ（ｋ＋１）とする（Ｓ４１３）。
【０１２７】
次に、ｋを１インクリメントし（Ｓ４１４）、Ｓ４１２に戻る。
【０１２８】
次に、匿名化処理機能部１０３は、変数ｔの値（ｔは、レコードのカウンタ）を１インクリメントし、変数ｉおよび変数ｊの値を１とする（Ｓ４１５）。
【０１２９】
次に、匿名化処理機能部１０３は、削除対象の当該レコードの１番目の要素の値をレコードが削除されたことを示すラベルである“Ｄｅｌｅｔｅ＿Ｒ”とし、当該レコードの２番目の要素の値をその時点のレコードハッシュ値Ｈｒｎ（これは、ｎ≧２のとき、Ｈｒ（ｋ＋１）の値に等しいことに注意）とし、当該レコードの３番目以降の要素の値をすべて値なしを示す“−”（Ｎｕｌｌ）として、次にＳ４１４の処理を実行する（Ｓ４１６）。例えば、当該レコードが図７のレコード３０３２の場合、本処理の結果は、図９のレコード３０５１に示す１番目の要素が「Ｄｅｌｅｔｅ＿Ｒ」、２番目の要素が「２２８９１ｆ」というレコードハッシュ値、３番目以降の要素がすべて「−」とする。
【０１３０】
最後に、匿名化処理機能部１０３は、Ｒｄのレコード数Ｎと変数ｔの値を比較し、Ｎがｔ以上の場合（Ｓ４１７：Ｎｏ）には、次にＳ４０３以降の処理を実行し、Ｎがｔ未満の場合（Ｓ４１７：Ｙｅｓ）には、処理を終了する。
【０１３１】
次に、図１５を用いて属性削除処理について説明する。
これは、図１３のＳ３０４に該当する処理である。
【０１３２】
先ず、匿名化データ提供サーバ１の匿名化処理機能部１０３は、属性削除の匿名化条件を読み出す（Ｓ５０１）。例えば、本実施形態の場合、匿名化条件２を読み出す（匿名化条件２：  属性「氏名」を削除）。なお、変数ｉ，ｊ，ｔの初期値を１とする。
【０１３３】
次に、匿名化処理機能部１０３は、拡張患者データのレコード数をＮ、属性数をｎとし、削除対象の属性群をＡｄとし、Ａｄの属性数をａｎとする。例えば、拡張患者データが、図７に示された拡張患者データテーブル３０３のデータの場合、Ｎ＝４、ｎ＝３、Ａｄの要素は、属性「氏名」、Ａｄの属性数ａｎ＝１とする（Ｓ５０２）。
【０１３４】
次に、匿名化処理機能部１０３は、拡張患者データのｔ番目（ｔは、レコードのカウンタ）のレコードを読み出す（Ｓ５０３）。
【０１３５】
次に、匿名化処理機能部１０３は、Ａｄから属性を一つ読み出しＡｄｉとする（ｉは、属性のカウンタ）（Ｓ５０４）。
【０１３６】
次に、匿名化処理機能部１０３は、属性Ａｄｉの要素数を、Ｅｉｎの値とする（Ｓ５０５）。
【０１３７】
次に、匿名化処理機能部１０３は、属性Ａｄｉのｊ番目の要素Ａｄｉｊと（ｊ＋１）番目の要素Ａｄｉ（ｊ＋１）をハッシュ値生成部１０５に入力して、新たなハッシュ値を取得し、属性ハッシュ値Ｈａの値とする（Ｓ５０６）。例えば、当該レコードが図７のレコード３０３１、属性Ａｄｉが属性「氏名」、ｊ＝１である場合、１番目の要素「５ＥＦ４ＢＥ」と２番目の要素「日立太郎」をハッシュ値生成部１０５に入力して、新たなハッシュ値“４６５ＦＣ４”取得し、Ｈａの値とする。
【０１３８】
次に、匿名化処理機能部１０３は、Ｅｉｎと変数ｊの値を比較し、Ｅｉｎがｊより大きい場合（Ｓ５０７：Ｙｅｓ）には、次にＳ５０８の処理を実行し、Ｅｉｎがｊ以下の場合（Ｓ５０７：Ｎｏ）には、次にＳ５１０の処理を実行する。
【０１３９】
次に、匿名化処理機能部１０３は、変数ｊの値を１インクリメントする（Ｓ５０８）。
【０１４０】
次に、匿名化処理機能部１０３は、属性Ａｄｉのｊ番目の要素ＡｄｉｊとＨａをハッシュ値生成部１０５に入力して、新たにハッシュ値を取得し、それを新たなＨａの値とする（Ｓ５０９）。
【０１４１】
次に、匿名化処理機能部１０３は、Ｅｉｎと変数ｊの値を比較し、Ｅｉｎがｊより大きい場合（Ｓ５１０：Ｙｅｓ）には、次にＳ５０８の処理を実行し、Ｅｉｎがｊ以下の場合（Ｓ５１０：Ｎｏ）には、次にＳ５１１の処理を実行する。
【０１４２】
次に、匿名化処理機能部１０３は、Ｓ５１１では、当該レコードの属性Ａｄｉの１番目の要素の値を属性が削除されたことを示すラベルである“Ｄｅｌｅｔｅ＿Ａ”とし、２番目の要素の値をその時点の属性ハッシュ値Ｈａとし、３番目以降の要素の値を“−”（Ｎｕｌｌ）とする（Ｓ５１１）。例えば、当該レコードが図７のレコード３０３１、削除対象の属性が「氏名」である場合、本処理の結果、図９のレコード３０５２に示すように、属性「氏名」の１番目の要素である「氏名１」の値が“Ｄｅｌｅｔｅ＿Ａ”とし、属性「氏名」の２番目の要素である「氏名２」の値がその時点の属性ハッシュ値Ｈａの値である“４６５ＦＣ４”とし、属性「氏名」には３番以降の要素がないため“−”の値は使用しない。
【０１４３】
次に、匿名化処理機能部１０３は、変数ｉの値を１インクリメントする（Ｓ５１２）。
【０１４４】
次に、匿名化処理機能部１０３は、Ａｄの属性数ａｎと変数ｉの値を比較し、ａｎがｉ以上の場合（Ｓ５１３：Ｎｏ）には、次にＳ５０４の処理を実行し、ａｎがｉより小さい場合（Ｓ５１３：Ｙｅｓ）には、次にＳ５１４の処理を実行する。
【０１４５】
次に、匿名化処理機能部１０３は、変数ｔの値を１インクリメントし、変数ｉおよび変数ｊの値を１とする（Ｓ５１４）。
【０１４６】
最後に、匿名化処理機能部１０３は、拡張患者データのレコード数Ｎと変数ｔの値を比較し、Ｎがｔ以上の場合（Ｓ５１５：Ｎｏ）には、次にＳ５０３以降の処理を実行し、Ｎがｔ未満の場合（Ｓ５１５：Ｙｅｓ）には、属性削除処理を終了する。
【０１４７】
次に、図１６を用いて属性置換処理について説明する。
これは、図１３のＳ３０５に該当する処理である。
【０１４８】
先ず、匿名化データ提供サーバ１の匿名化処理機能部１０３は、属性置換の匿名化条件を読み出す（Ｓ６０１）。例えば、本実施形態の場合、匿名化条件３を読み出す（匿名化条件３  属性「住所」を“都道府県名”（住所２）から“地方名”（住所３）に置換）。なお、変数ｉ，ｊ，ｔの初期値を１とする。
【０１４９】
次に、匿名化処理機能部１０３は、拡張患者データのレコード数をＮ，属性数をｎとし、置換対象の属性群をＡｒ、Ａｒの属性数をｒｎとする。例えば、拡張患者データが拡張患者データテーブル３０３のデータの場合、Ｎ＝４、ｎ＝３、Ａｒの要素は属性「住所」、Ａｒの属性数ｒｎ＝１とする（Ｓ６０２）。
【０１５０】
次に、匿名化処理機能部１０３は、拡張患者データのｔ番目（ｔは、レコードのカウンタ）のレコードを読み出す（Ｓ６０３）。
【０１５１】
次に、匿名化処理機能部１０３は、Ａｒから属性を一つ読み出し、Ａｒｉ（ｉは、属性のカウンタ）とする（Ｓ６０４）。
【０１５２】
次に、匿名化処理機能部１０３は、属性Ａｒｉの置換対象となる要素数をＥｉｒの値とする（Ｓ６０５）。例えば、属性Ａｒが「住所」の場合、“都道府県名”（住所２）を置換するため、Ｅｉｒ＝２とする。
【０１５３】
次に、匿名化処理機能部１０３は、属性Ａｒｉのｊ番目（ｊは、要素のカウンタ）の要素Ａｒｉｊと（ｊ＋１）番目の要素Ａｒｉ（ｊ＋１）をハッシュ値生成部１０５に入力して、新たなハッシュ値を取得し、属性ハッシュ値Ｈａの値とする（Ｓ６０６）。例えば、当該レコードが図７のレコード３０３１、属性Ａｒｉが属性「住所」、ｊ＝１である場合、１番目の要素「住所１」の値“Ａ７５４Ｂ９”と２番目の要素「住所２」の値“東京都”をハッシュ値生成部１０５に入力して得た新たなハッシュ値“Ｂ０Ｄ８Ｃ７”をＨａの値とする。
【０１５４】
次に、匿名化処理機能部１０３は、Ｅｉｒと変数ｊ＋１の値を比較し、Ｅｉｒがｊ＋１より大きい場合（Ｙｅｓ：Ｓ６０７）には、次にＳ６０８の処理を実行し、Ｅｉｒがｊ以下の場合（Ｎｏ：Ｓ６０７）には、次にＳ６１１の処理を実行する。
【０１５５】
次に、匿名化処理機能部１０３は、変数ｊの値を１インクリメントする（Ｓ６０８）。
【０１５６】
次に、匿名化処理機能部１０３は、属性Ａｒｉのｊ番目の要素ＡｒｉｊとＨａをハッシュ値生成部１０５に入力して新たなハッシュ値を取得し、それを新たなＨａの値とする（Ｓ６０９）。
【０１５７】
次に、匿名化処理機能部１０３は、Ｅｉｒと変数ｊの値を比較し、Ｅｉｒがｊ＋１より大きい場合（Ｓ６１０：Ｙｅｓ）には、次にＳ６０８の処理を実行し、Ｅｉｒがｊ＋１以下の場合（Ｓ６１０：Ｎｏ）には、次にＳ６１１の処理を実行する。
【０１５８】
次に、匿名化処理機能部１０３は、当該レコードの属性Ａｒｉの１番目の要素の値を属性が置換されたことを示すラベルである“Ｒｅｐｌａｃｅ”とし、２番目の要素の値をその時点の属性ハッシュ値Ｈａとし、Ｅｉｒが３より大きい場合は属性Ａｒｉの３番目からＥｉｒ番目までの要素の値を“−”（Ｎｕｌｌ）として、次にＳ６１２の処理を実行する（Ｓ６１１）。例えば、当該レコードが図７のレコード３０３１、置換対象の属性が「住所」である場合、本処理の結果、図９のレコード３０５２に示すように、属性「住所」の１番目の要素である「住所１」の値が”Ｒｅｐｌａｃｅ“とし、２番目の要素である「住所２」の値がその時点の属性ハッシュ値Ｈａの値である“Ｂ０Ｄ８Ｃ７”とする。
【０１５９】
次に、匿名化処理機能部１０３は、変数ｉの値を１インクリメントする（Ｓ６１２）。
【０１６０】
次に、匿名化処理機能部１０３は、Ａｒの属性数ｒｎと変数ｉの値を比較し、ｒｎがｉ以上の場合（Ｓ６１３：Ｎｏ）には、次にＳ６０４の処理を実行し、ｒｎがｉより小さい場合（Ｓ６１３：Ｙｅｓ）には、次にＳ６１４の処理を実行する（Ｓ６１３）。
【０１６１】
次に、匿名化処理機能部１０３は、変数ｔの値（ｔは、レコードのカウンタ）を１インクリメントし、変数ｉおよび変数ｊの値を１とする（Ｓ６１４）。
【０１６２】
最後に、匿名化処理機能部１０３は、拡張データのレコード数Ｎと変数ｔの値を比較し、Ｎがｔ以上の場合（Ｓ６１５：Ｎｏ）には、次にＳ６０３以降の処理を実行し、Ｎがｔ未満の場合（Ｓ６１５：Ｙｅｓの場合）には、属性置換処理を終了する。
【０１６３】
次に、図１７を用いて署名検証処理について説明する。
これは、図１０のＳ０９に該当する処理である。
【０１６４】
先ず、匿名化データ利用者端末２の署名検証処理部２０２は、図１０のＳ１０８において、匿名化データ利用者端末２の主メモリ５０２またはハードディスクドライブ５３０に保存された匿名化データ３０５および検証用の署名値である署名値３１１を読み出す（Ｓ７０１、Ｓ７０２）。
【０１６５】
次に、署名検証処理部２０２は、匿名化データ３０５を匿名化データ利用者端末２の署名生成部２０４に入力して、生成された署名値δを取得する（Ｓ７０３）。
【０１６６】
最後に、署名検証処理部は、検証用署名値である署名値３１１とδを比較し、二つの値が同一である場合（Ｓ７０４：Ｙｅｓ）には、匿名化データは、正当なものであると認定され、匿名化データ利用者端末２の表示装置５１０などによりデータ利用者に“ＯＫ”を表示する（Ｓ７０５）。一方、二つの値が異なる場合（Ｓ７０４：Ｎｏ）には、匿名化データは、改竄や取り違えなどの理由による正当なものではない認定され、匿名化データ利用者端末２の表示装置５１０などによりデータ利用者に“ＮＧ”を表示し（Ｓ７０６）、処理を終了する。
【０１６７】
以上で説明したように、実施形態の匿名化データ提供システムでは、予め対象データの置換候補の値を対象データに追加した上で、単に削除や置換を行うのではなく、署名生成処理の中間処理であるハッシュ化によるハッシュ値への置き換えを行うので、削除や置換などの匿名化処理を施した後でも署名値による匿名化の正当性の検証を可能とすることができる。
【０１６８】
また、ハッシュ化のプロセスにおいても、元データに対し乱数を追加した上で、各属性の値と乱数を入力値としてハッシュ化を行うことにより、ハッシュ値から元データを特定するために必要な計算量が膨大となるため、匿名化データから元データを復元されるリスクを低減することができる。
【０１６９】
また、元データに対し乱数を追加する際に、各属性に一つ乱数を追加した上で、図１２Ａないし図１６に示したアルゴリズムにおいて、各属性内で段階的に乱数を含むハッシュ化を行うので、元データのすべての要素に乱数を追加する場合に比べて、匿名化データのデータサイズを削減することができる。
【０１７０】
また、ハッシュ化処理を署名生成処理の中間処理と同一としているので、匿名化データの署名検証処理における署名生成処理を減らし、署名検証処理を高速化することができる。
【０１７１】
以上説明したように、本実施形態によれば、医療分野の研究開発等に匿名化データを活用する際に、データの削除や置換等の匿名化処理を施した場合でも匿名化の正当性の検証を可能とするので、不正な匿名化データの利用により研究成果が不正となる事態などを避けることができる。
【符号の説明】
【０１７２】
１…匿名化データ提供サーバ、２…匿名化データ利用者端末、３…ネットワーク、１０２…レコード拡張機能部、１０３…匿名化処理機能部、１０５…ハッシュ値生成部、１０６…署名生成部、１１０…記憶部、３０１…患者データテーブル、３０２…抽象化パタン群、３０３…拡張患者データテーブル、３０４…署名データテーブル、３０５…匿名化データ、２０１…ブラウザ機能部、２０２…署名検証処理部、２０３…ハッシュ値生成部、２０４…署名生成部、２１０…記憶部、３１１…署名値
【図１】
2020077256.tif 000003
【図２】
2020077256.tif 000004
【図３】
2020077256.tif 000005
【図４】
2020077256.tif 000006
【図５】
2020077256.tif 000007
【図６】
2020077256.tif 000008
【図７】
2020077256.tif 000009
【図８】
2020077256.tif 000010
【図９】
2020077256.tif 000011
【図１０】
2020077256.tif 000012
【図１１】
2020077256.tif 000013
【図１２Ａ】
2020077256.tif 000014
【図１２Ｂ】
2020077256.tif 000015
【図１３】
2020077256.tif 000016
【図１４】
2020077256.tif 000017
【図１５】
2020077256.tif 000018
【図１６】
2020077256.tif 000019
【図１７】
2020077256.tif 000020