(57)【要約】      （修正有）【課題】識別情報を安全にかつ高速に秘匿化する情報秘匿化装置を提供する。【解決手段】情報秘匿化装置は、識別情報を含むデータが入力されて、入力されたデータをランダムの順序で出力する第１のランダム化装置と、第１のランダム化装置から出力されたデータの識別情報をトークンで置換するトークン化部と、を備える。トークン管理装置は、トークン化装置と復元装置とを備える。識別情報は、データベースシステムで管理しているレコードを特定するキー情報（フィールド）であり、利用者の個人情報やＩＤなど、個人を特定可能な情報を含んでいる。このため、外部の分析システムで情報を分析し、識別情報をトークンに置換して分析システムに送信する。【選択図】図３
2014194621.tif 000002
【特許請求の範囲】
【請求項１】
識別情報を含むデータが入力されて、入力された前記データをランダムの順序で出力する第１のランダム化装置と、
前記第１のランダム化装置から出力された前記データの前記識別情報をトークンで置換するトークン化部と、を備えた情報秘匿化装置。
【請求項２】
前記第１のランダム化装置は、
所定の格納数の格納場所を有して、入力された前記データを前記格納場所に逐次格納する第１の格納部と、
前記第１の格納部の格納数に応じた第１の乱数を生成させる第１の乱数生成部と、を備え、
前記第１の乱数によってランダムに特定される前記第１の格納部の格納場所から格納された前記データを取り出して出力する請求項２に記載の情報秘匿化装置。
【請求項３】
前記第１の格納部の格納場所は、入力順序が早い入力データに対して入力順序が遅い入力データを優先的に取り出す請求項１又は２に記載の情報秘匿化装置。
【請求項４】
前記トークンを発生させるトークン発生器と、
前記トークン発生器で発生された前記トークンが入力されて、入力された前記トークンをランダムの順序で出力する第２のランダム化装置と、をさらに備えた請求項１乃至３のいずれか一項に記載の情報秘匿化装置。
【請求項５】
前記第２のランダム化装置は、
所定の格納数の格納場所を有して、入力された前記トークンを前記格納場所に逐次格納する第２の格納部と、
前記第２の格納部の格納数に応じた第２の乱数を生成させる第２の乱数生成部と、を備え、
前記第２の乱数によってランダムに特定される前記第２の格納部の格納場所から格納された前記トークンを取り出して出力する請求項４に記載の情報秘匿化装置。
【請求項６】
前記第２の格納部の格納場所は、入力順序が早い入力データに対して入力順序が遅い入力データを優先的に取り出す請求項４又は５に記載の情報秘匿化装置。
【請求項７】
識別情報を含むデータが入力されて、入力された前記データをランダムの順序で出力する第１のランダム化処理と、
前記第１のランダム化処理で出力された前記データの前記識別情報をトークンで置換するトークン化処理と、をコンピュータが実行する識別情報の情報秘匿化方法。
【請求項８】
データに含まれる識別情報をトークンで置換するトークン化部と、
前記トークン化部で出力されたデータが入力されて、入力された該データをランダムの順序で出力する第一のランダム化装置と、を備えたことを特徴とする識別情報の情報秘匿化装置。
【請求項９】
データに含まれる識別情報をトークンで置換するトークン化処理と、
前記トークン化処理で出力されたデータが入力されて、入力された該データをランダムの順序で出力する第一のランダム化処理と、をコンピュータが実行する識別情報の情報秘匿化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報秘匿化装置、及び情報秘匿化方法に関する。
【背景技術】
【０００２】
クラウドコンピューティングの発達に伴い、ネットワークを経由して、データベースに蓄積された識別情報を含むデータを外部の情報処理サービスへ送信して分析等を依頼することが増えている。識別情報は、利用者の個人情報やＩＤなど、個人を特定可能な情報を含んでいる場合があるため、情報漏洩の防止のために、外部にデータを送信する際には識別情報を秘匿化していた。
【０００３】
一方、データベースシステムの仕様によっては、蓄積されたデータを、例えば記録した日時順に出力する等、データベースの仕様に基づく特定の出現パターンを有したものが多く、単に識別情報を秘匿化するのみでは、そのデータの並び順から利用者の特定が可能になってしまう場合があった。
【０００４】
例えば、特定の疾病を持つ患者のデータを月例で解析する場合、喩え患者の識別情報を秘匿化したとしても、データベースへの登録順序でデータを出力した場合、データの並び順である程度の患者の特定ができてしまう場合があった。
【０００５】
そこで、従来のデータベースシステムにおいては、例えば、(SELECT * FROM table ORDER BY RAND())等のコマンドを使用して、蓄積データをランダムにソート処理して出力させる方法が用いられていた。
【０００６】
また、利用者の識別情報を管理するトークンにより管理する方法があった。さらに、データベースにおける記憶領域内のデータ格納率を向上させる目的として、同時に扱うデータの集合を１つのまとまりで扱う方法があった（例えば、特許文献１−３等参照）。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００５−２８４６７９号公報
【特許文献２】特開２０１１−２１１５９３号公報
【特許文献３】特開２００８−２７６３３６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、上記先行技術において、ソートを使用したランダム化処理は、データのレコード数が増えると累積的に処理時間が遅くなるという問題があった。
【０００９】
そこで、一側面では、識別情報を安全にかつ高速に秘匿化する情報秘匿化装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
一つの案では、情報秘匿化装置は、識別情報を含むデータが入力されて、入力された前記データをランダムの順序で出力する第１のランダム化装置と、前記第１のランダム化装置から出力された前記データの前記識別情報をトークンで置換するトークン化部と、を備える。
【発明の効果】
【００１１】
一態様によれば、識別情報を安全にかつ高速に秘匿化する情報秘匿化装置を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】システム全体構成図
【図２】トークン化部の構成図
【図３】トークン化部の動作フローチャート
【図４】順序ランダム化装置のデータ入力フローチャート
【図５】順序ランダム化装置のデータ出力フローチャート
【図６】順序ランダム化装置の処理フローチャート
【図７】識別子発番対応表
【図８】第1の実施形態における順序ランダム化装置の初期処理フローチャート
【図９】第1の実施形態における順序ランダム化装置のプール保存フローチャート
【図１０】第1の実施形態における順序ランダム化装置のプール取出しフローチャート
【図１１】第1の実施形態における仮想配列イメージ図
【図１２】第２の実施形態における概要を説明する図
【図１３】第２の実施形態におけるプール配列を説明する図
【図１４】第２の実施形態における順序ランダム化装置の初期処理フローチャート
【図１５】第２の実施形態における順序ランダム化装置の保存動作フローチャート
【図１６】第２の実施形態における順序ランダム化装置のプール取出し動作フローチャート
【図１７】第３の実施形態における概要を説明する図
【図１８】第３の実施形態における順序ランダム化装置の初期処理フローチャート
【図１９】第３の実施形態における順序ランダム化装置の動作フローチャート
【図２０】第４の実施形態におけるシステム全体構成図
【図２１】トークン管理装置のハードウエア構成図
【発明を実施するための形態】
【００１３】
以下、図面に基づいて本発明の実施の形態を説明する。
【００１４】
図１は、情報分析を行うためのシステムの全体構成の一例を説明する全体構成図である。
【００１５】
図１において、分析者は、分析者端末２０を操作する。分析者端末２０は、データベースシステム２１に接続されており、データベースシステム２１から分析対象のデータを収集する。分析者端末２０は、トークン化装置１を介して分析システム２２に接続されており、分析対象の情報を分析システム２２に送信して、分析結果を受信する。
【００１６】
データベースシステム２１は、データベース管理システム２１１と記憶部２１２を備えている。データベース管理システム２１１は、データベース管理ソフトウエアによってデータベースの管理、運用を行うシステムである。データモデルとしてはリレーショナルデータベース（ＲＤＢ）やオブジェクト関係データベースなどが利用され、データベース管理ソフトウエアに応じたデータ構造のデータベースが構築される。本実施形態においては、複数の情報項目（フィールド）が１件のレコードを構成するデータ構造であるＲＤＢについて主に説明する。
【００１７】
トークン管理装置１は、トークン化装置１０と復元装置１１とを備える。ここで、「トークン」とは、識別情報を秘匿化した情報であり、識別情報と１対1の対応が可能な情報のことをいう。識別情報は、データベースシステム２１で管理しているレコードを特定するキー情報（フィールド）であり、利用者の個人情報やＩＤなど、個人を特定可能な情報を含んでいる場合がある。このため、外部の分析システムで情報を分析する場合、識別情報をトークンに置換して分析システム２２に送信する。また、トークン化とは、識別情報をトークンに置き換える処理のことをいう。トークン化は、例えば、ＩＤなどの文字列を特定の文字列（トークン）に置換する処理である。トークン化装置１０は、「情報秘匿化装置」として、分析システム２２に送信されるデータ中の識別情報をトークン化するとともに、それぞれのトークンが一意の識別情報と対応可能なように対応を記憶して管理する。復元装置１１は、分析システム２２によって分析された結果に含まれるトークンを元の識別情報に復元する。トークンは、トークン化装置１０によって管理されており、トークンと識別情報の一意の対応によって復元される。
【００１８】
トークン管理装置１は、例えば分析者端末とＬＡＮ接続された装置によって実施がされる。トークン管理装置１は、独立の装置として構成することもできるが、例えば、トークン化装置と復元装置をそれぞれ独立させても良い。また、複数の装置によってシステムとして構成しても良い。また、ネットワーク上のＷｅｂサービスのような仮想的な装置として構成しても良い。さらには、分析者端末２０上で実行されるソフトウエアとして実装しても良い。
【００１９】
分析システム２２は、情報の分析を行う、例えば分析者の社外の業務委託先のシステムである。分析依頼者が、自前で分析システムを構築した場合、システムの構築や維持に多大のコストが掛かってしまう。このため、分析システムの利用頻度が低く、稼働率が低いことが予想される場合には、計算機資源の有効利用の観点から、外部の分析システムを利用した方が良い。このときに、分析対象の情報をそのまま外部のシステムに預けると、情報の漏洩の危険が生じるため、分析依頼者は、データベースシステム２１から収集したデータの中から、情報分析に必要最低限の情報を選択するとともに、万一情報漏洩が発生したとしても被害を少なくするために、識別情報を秘匿化したデータを分析システム２２に送信する。
【００２０】
次に、本システムにおけるデータ分析の外部委託処理の概要を、分析データ収集と、分析依頼の二つの手順として説明する。文中の（）書きの数字は、図１のステップと対応している。
（分析データの収集）
【００２１】
データベースシステム２１のデータベース管理システム２１１は、分析者端末２０からの、SQL（Structured Query Language）やXQueryなどのクエリ（問い合わせ）に応じて（１）、記憶部２１２に記憶されたデータの検索などのデータベース操作を行う。データベース管理システム２１１はクエリへのレスポンス（応答）として検索結果等を分析者端末２０に返す（２）。この一連の動作によって、分析者端末２０は、分析対象となるデータの収集を行う。
（分析依頼）
【００２２】
分析者端末２０は、データベースシステム２１から収集したデータを基に、分析システム２２に送信する分析対象のデータをトークン管理装置１に送信する（３）。分析者端末２０は、収集したデータの中で、分析に不要なレコードやフィールドを削除したり、年齢情報を年代情報（２０代、３０代等）に変更したりする情報の選定をしても良い。この情報の選定は、トークン化装置１０で行っても良い。
【００２３】
トークン管理装置１は、送信された分析対象データに含まれる識別情報をトークン化して秘匿化し、分析システム２２に送信する（４）。分析システム２２は、送信されたデータに含まれる情報を分析して、分析結果をトークン管理装置１に送信する（５）。トークン管理装置１は、分析システム２２から送信された分析結果の中で、トークンの部分を元の識別情報に復元して、分析結果を分析者端末２０に送信する（６）。以上の手順にて情報分析の外部委託が実施される。
【００２４】
次に、図２を用いて、トークン管理装置１のトークン化装置１０の構成を説明する。図２は、トークン化装置の構成の一例を説明する構成図である。
【００２５】
図２において、トークン化装置１０は、順序ランダム化装置１０１（入力データのシャッフリング）、トークン管理部１０２、識別子発番対応表１０３、順序ランダム化部１０４（トークンのランダム化）、及びトークン発生器１０５を備えている。
【００２６】
順序ランダム化装置１０１は、入力データのシャッフリングを行う。この実施例では、入力データの中で秘匿したい情報は、識別情報としての「ＩＤ」、及び個人情報としての「年齢」であるものとする。ＩＤと年齢は対応付けられて、一つのレコード（データセット）となっている。
【００２７】
順序ランダム化装置１０１は、格納部１０１１と、乱数発生部１０１２と、を備える。格納部１０１１は、内部の記憶領域である「プール」を有し、入力データをプールに格納する。格納部１０１１は、所定の格納数（レコード数）の入力データをプールの格納場所に格納する。プールは、レコードを記憶する仮想の配列（テーブル）である。
【００２８】
乱数発生部１０１２は、プールの格納数に応じた乱数を発生させる。例えば、格納数がｎ個の場合に対応して、乱数発生部１０１２は、０〜（ｎ−１）のｎ個の範囲で乱数を発生させる。
【００２９】
順序ランダム化装置１０１は、乱数発生部１０１２で発生させた乱数により、格納部１０１１のプールに逐次格納されたレコードを任意の順番（ランダム）に取り出す。これにより、データベースシステム２１の仕様に依存しているデータの出力順序の規則性を破壊することができるため、データベースシステム２１でのデータ出力時のランダム化処理が不要となり、データベースシステム２１から高速にデータを出力させることができる。図２では、ＩＤが９５０００１、９５０００２、９５０００３、・・・とＩＤの昇順でデータが入力されているが、入力データ順序ランダム化部１０１から出力されるデータは、ＩＤが、９５０００３、９５００７３、９５００２９と、プールされたデータの中からランダムな順序で出力される。
【００３０】
トークン管理部１０２は、トークン化部１０２１と、トークン登録部１０２２とを備える。トークン登録部１０２２は、入力されたデータのＩＤについて、そのＩＤが既に登録されているかを識別子発番対応表１０３に問い合わせる。識別子発番対応表１０３には、ＩＤと既に発番されているトークンとが対応づけられて登録されている。識別子発番対応表１０３は、問い合わされたＩＤが既に登録済みである場合は、応答としてそのＩＤのトークン値をトークン登録部１０２２に返却する（１）。一方、問い合わされたＩＤの登録が無い場合には、ＩＤ未登録の応答を返却する。トークン登録部１０２２は、ＩＤ未登録の応答を受けると、順序ランダム化装置１０４に対してトークンの発番依頼をする（２）。
【００３１】
順序ランダム化装置１０４は、格納部１０４１と、乱数発生部１０４２と、を備える。格納部１０４１及び乱数発生部１０４２は、順序ランダム化装置１０１の格納部１０１１及び乱数発生部１０１２と同様の構成であり、説明は省略する。
【００３２】
順序ランダム化装置１０４は、トークン管理部１０２から発番依頼を受けると、トークン発生器１０５にて発番されたトークンを、順序ランダム化装置１０１と同様に、格納部１０４１のプールに入れて、乱数発生部１０４２によって発生された乱数により、ランダムな順序でトークンを取り出すシャッフリングを行う。
【００３３】
トークン発生器１０５は、例えばトークンを、００００１、００００２、００００３、のようなシリアル番号として発番する。トークン発生器１０５は、シリアル番号を発生することにより、発番されたトークンのユニーク（重複）チェックを行う必要がなくなり、処理が高速化される。また、トークン発生器１０５は、発番されたトークンの番号を記録しておく必要がないため、トークン発生器１０５の処理負荷が軽減できる。なお、トークン発生器１０５で発番されるトークンに、例えばシリアル番号に特定の関数を適用させて、それをトークンとして使用しても良い。
【００３４】
発番されたトークンは、順序ランダム化装置１０４によって、００３９５、００１５３、００２１６のようにランダムな順序にされて、トークン管理部１０２に送信される（３）。順序ランダム化装置１０４により発番されたトークンがランダム化されることにより、トークン発生器１０５で発生させるトークンを発番するときに乱数を発生させる必要がなくなるため、発番の高速化が可能となる。
【００３５】
トークン管理部１０２のトークン化部１０２１は、ＩＤをトークンに置換する。また、トークン登録部１０２２は、送信されたトークン値を、ＩＤと対応付けて、識別子発番対応表１０３に登録する（４）。トークン管理部１０２は、トークンと年齢をデータセットにして出力データとして出力する。
【００３６】
次に、識別子発番対応表１０３の詳細を、図７を用いて説明する。図７は、識別子発番対応表の一例である。
【００３７】
図７において、識別子発番対応表１０３は、識別子（ＩＤ）とトークン値とを対応づけて保存している。ここで識別子（ＩＤ）とトークン値とは、一意に対応づけられている。従って、トークン値から識別子に復元することが可能になる。なお、識別子発番対応表１０３は、トークン値から識別子への復元をすることが目的であるため、例えば、復元の必要がなくなった時点でトークン発生器１０５と識別子発番対応表１０３をクリアすることにより、クリア前のトークンとクリア後のトークンが同じ番号で登録されても構わない。
【００３８】
次に、図２で説明したトークン化装置１０の動作を、図３のフローチャートを用いて説明する。図３は、トークン化装置１０の動作の一例を説明するフローチャートである。
【００３９】
図３において、トークン化装置１０には、分析者端末２０から、秘匿化する情報を含むデータが入力される（Ｓ１００）。順序ランダム化装置１０１は、情報をプールに入力する（Ｓ１０１）。トークン管理部１０２は、順序ランダム化装置１０１から、レコード単位でデータを取り出す（Ｓ１０２）。取り出されたレコードは、順序ランダム化装置１０１によって、取り出される順序がランダム化（シャッフリング）されている。なお、ステップＳ１０１及びＳ１０２のランダム化装置１０１の動作詳細については、ランダム化装置１０４の動作詳細とともに後述する実施形態１〜実施形態３にて説明する。
【００４０】
次に、格納部１０１１のプールにデータがあるか否かをチェックして（Ｓ１０３）、もしデータが全て処理されていれば（Ｓ１０３でＮＯ）、このフローチャートでの処理を終了し、データがプールに残っている場合には（Ｓ１０３でＹＥＳ）、ＩＤ部分が識別子発番対応表１０３に既に存在しているか否かをチェックする（Ｓ１０４）。
【００４１】
ＩＤ部分が既存の場合（Ｓ１０４でＹＥＳ）、識別子発番対応表１０３は、問い合わされたＩＤに対してトークン値を返却し、トークン化部１０２１は、トークン値でＩＤ部分を置き換えて（Ｓ１０５）、レコード単位の情報が出力される（Ｓ１０６）。
【００４２】
一方、ＩＤ部分が識別子発番対応表１０３に無い場合（Ｓ１０４でＮＯ）、トークン登録部１０２２は、順序ランダム化装置１０４にトークン値を要求する（Ｓ１０７）。トークン発生器１０５は予めトークンを発生させておき、順序ランダム化装置に入力してランダム化されたトークンが準備されている（Ｓ１０８）、トークン登録部１０２２は、ＩＤとトークンを対応づけて識別子発番対応表１０３に登録する（Ｓ１０９）。そして、トークン化部１０２１は、トークン値でＩＤ部分を置き換えて（Ｓ１０５）、レコード単位で情報が出力する（Ｓ１０６）。以上の処理は、順序ランダム化装置１０１の格納部１０１１のデータが無くなるまでループ処理される（Ｓ１０３）。
【００４３】
次に、図３のステップＳ１０１の情報入力処理の詳細を、図４を用いて説明する。図４は、順序ランダム化装置１０１及び順序ランダム化装置１０４のデータ入力の一例を説明するフローチャートである。なお、以下の説明で、順序ランダム化装置１０１及び順序ランダム化装置１０４に共通するものは、「順序ランダム化装置」のように符号の記載を省略している。
【００４４】
図４において、順序ランダム化装置は、情報の入力があると（Ｓ１０１１）、プールに空きがあるか否かをチェックする（Ｓ１０１２）。プールに空きが無い場合には（Ｓ１０１２でＮＯ）、空きが出るまで情報の保存が待ち状態となる。これにより、プールは入力される情報が終了するまで、確保されたプールを常に全て使用することとなる。
【００４５】
プールに空きがあった場合（Ｓ１０１２でＹＥＳ）、情報をプールに保存する（Ｓ１０１３）。
【００４６】
次に、図３のステップＳ１０２の情報出力処理の詳細を、図５を用いて説明する。図５は、順序ランダム化装置のデータ出力の一例を説明するフローチャートである。
【００４７】
図５において、図２のトークン管理部１０２は、順序ランダム化装置に対して情報要求を行う（Ｓ１０２１）。次に、順序ランダム化装置は、プールからランダムに一つの情報を取り出して（Ｓ１０２２）、トークン管理部１０２に情報を出力する（Ｓ１０２３）。
【００４８】
次に、図３で説明した、ステップ１０８の処理の詳細を、図６を用いて説明する。図６は、順序ランダム化装置１０４の処理の一例を説明するフローチャートである。
【００４９】
図６において、順序ランダム化装置１０４は、トークン値の発生をトークン発生器１０５に要求して、トークン値を発生させる（Ｓ１０８１）。トークン発生器１０５はトークン値を発生させて、発生させたトークン値を順序ランダム化装置１０４に入力する（Ｓ１０８２）。順序ランダム化装置１０４のプールに空きがある場合は（Ｓ１０８３でＹＥＳ）、順序ランダム化装置１０４は、続けてトークン発生器１０５にトークン値を発生させて、プールに空きが無くなるまで（Ｓ１０８３でＮＯ）処理を繰り返す。つまり、順序ランダム化装置１０４は、トークン管理部１０２からの発番依頼がされる前にプールにトークン値を事前に準備しておく。これにより、発番依頼があってからトークン値を発番する場合に比べて、トークン値の発番からプールへの保存までのオーバーヘッドが無くなり、処理の高速化が可能になる。
【００５０】
次に、図３のステップＳ１０１とステップＳ１０２で説明したプールの管理アルゴリズムについて、以下、実施形態１〜実施形態３にて詳細に説明する。
【００５１】
順序ランダム化装置におけるプールの大きさや管理方法は、ランダム化の性能に大きく影響する。実施形態１〜実施形態３では、それぞれのプール管理アルゴリズムについてデータの入出力処理の方法が相違している。なお、ランダム化装置１０１とランダム化装置１０４は、以下のいずれの実施形態で実施しても良く、例えば、ランダム化装置１０１とランダム化装置１０４とで、同じ実施形態で実施しても良いし、それぞれ異なった実施形態で実施しても良い。
［第1の実施形態］
【００５２】
第１の実施形態は、格納数ｎのプールを用意して、入力データを格納数分入力して、格納数までを発番可能な乱数を用いることにより、格納場所からランダムの順序にデータを出力する。データを出力した格納場所は空きとなる。空きとなった格納場所は、例えば次に入力されるデータによって上書きされながら補充される。また、空きとなった格納場所を後ろのデータにて順次前詰めしても良い。乱数の発生は格納個数の範囲で行い、データベースシステムにおけるランダム化処理はしないため、処理が高速化できる。
【００５３】
図８〜図１１を用いて、第１の実施形態を説明する。図８は、第1の実施形態における順序ランダム化装置の初期処理の一例を説明するフローチャートである。図９は、第1の実施形態における順序ランダム化装置のプール保存の一例を説明するフローチャートである。図１０は、第1の実施形態における順序ランダム化装置のプールからの取出しの一例を説明するフローチャートである。さらに、図１１は、第1の実施形態における仮想配列の一例を説明するイメージ図である。
【００５４】
図８において、順序ランダム化装置の初期処理は、図４におけるステップＳ１０１１における初期処理である。初期処理は、データベースシステム２１から新たな入力データが入力されたときに１回行われる。順序ランダム化装置は、データサイズに応じたプール（仮想配列）を確保する。本実施例では、０〜（ｎ−１）のｎ個のプールを確保している（Ｓ１０１１１）。次に、確保したプールの「格納個数」を０にセットして（Ｓ１０１１２）、初期化処理を終了する。格納個数は、実際に情報が入力されたプールの数を計数するカウンタであり、この値を格納個数分、フルに保つように入力データを逐次入力する。
【００５５】
図９において、順序ランダム化装置の入力データのプール保存は、図４におけるステップ１０１３の処理の詳細を説明したものである。順序ランダム化装置は、プールの空いている格納場所に入力データを格納する（Ｓ１０１３１）。次に、格納個数に１を追加してカウンタをインクリメントして処理を終了する（Ｓ１０１３２）。
【００５６】
図１０において、順序ランダム化装置のプール取出しは、図５におけるステップＳ１０２２の詳細を説明したものである。図２のランダム発生器１０５は、０〜（格納個数−１）の間の整数ｒを発生する乱数にて、取り出し対象の格納場所を特定する仮想配列の番号である整数ｒをランダムに生成する（Ｓ１０２２１）。次に、プールのｒ番目に格納されているデータを取り出して、取り出された格納場所は番号が詰められて（Ｓ１０２２２）、仮想配列の番号に抜けが無いようにする。次に格納個数に−１を追加して、カウンタをデクリメントして終了する（Ｓ１０２２３）。
【００５７】
図１１は、プールで使用される格納場所の仮想配列を説明するイメージ図である。プールには、仮想配列の番号０〜ｎに対応してデータが格納されている。仮想配列は同一のデータ型がメモリ上に連続して接しているとみなされる仮想的な配列であり、プログラミング上の特定のオペレータによって配列の長さを指定できる。図１１では、ｎが指定されており、ｎ＋１個のデータ配列の場合を表している。配列の長さは生成される乱数と対応している。
【００５８】
以上説明した第１の実施形態においては、格納場所に空きができると次の入力データがすぐに格納されるため、入力されるデータはプールに載せられるだけ載せられることになる。入力データのランダム化は、プールの格納個数が大きい（仮想配列が長い）程入力データの順番をランダムに並び替えるシャッフル効果が高い。しかし、大きなプールを使うには大きなメモリリソースが必要になる。このため、初期化で確保するプールの格納数は、入力されるデータサイズや情報秘匿の必要性によって適宜調整される。
［第２の実施形態］
【００５９】
第１の実施形態においては、一度プールに格納されたデータは、同確率でプールから取り出されるため、先に格納されたデータほど先に取り出される確立が高くなる。つまり、取り出されるデータの順番が入力順序に依存することになる。そこで、第２の実施形態においては、プールの構造によって、第１の実施形態の課題を改善している。
【００６０】
第２の実施形態の概要を図１２及び図１３を用いて説明する。図１２は、第２の実施形態におけるプール管理の概要の一例を説明する図である。図１３は、２の実施形態におけるプール配列の一例を説明する図である。
【００６１】
図１２において、順序ランダム化装置は、格納部にプール管理情報を備えている。プール管理情報には、プール配列の要素数（Ｌ）、乱数終了値、情報追加する要素番号（０〜Ｌ−１）、情報追加するカウンタ、１要素に情報追加する数、及びプールに格納する数（Ｌ以下）が記録される。要素数Ｌ個に設定されたプール配列の１要素の詳細は、重み、乱数アクセス用開始ポイント、乱数アクセス用終了ポイント、レコードを格納する仮想配列である。
【００６２】
プール管理情報の初期設定において、プール配列の要素数（Ｌ）、1配列に情報追加する数、プールに格納する数、各要素の重みが設定される、他の項目の初期値は０又はNULLである。
【００６３】
図１３において、この実施例ではプール配列Ｌは４である。すなわち、０〜４の５つの要素を備え総データ数よりここでは、上記「プールに格納する数」を４として、最後の１要素は空きとしている。例えば、配列番号０は、重み：１、格納個数：４８、乱数アクセス用開始ポイント：０、…、データを格納する仮想配列（４８要素）と設定される。また、配列番号１〜３も図１３に図示すように設定されている。
【００６４】
ここで、「重み」とは、各配列間において格納個数に対して、１レコードに割り当てられる乱数の数である。例えば、配列番号０では重み１であり、一つのレコードに一つの乱数が割り当てられ、一方、配列番号３では重み８であり、一つのレコードに８の乱数が割り当てられる。したがって、配列番号０では４８×１＝４８個の乱数が割り当てられて、配列番号１では３２×２＝６４個、配列２では２１×４＝８４個、配列３では８×９＝７２個の乱数が割り当てられる。つまり、重みが低い場合には格納するレコードの個数を増やして1レコードに割り当てられている乱数の幅を狭くする一方、重みが高い場合には、逆に格納するレコードの個数を減らして1レコードに割り当てられている乱数の幅を広くしている。
【００６５】
本実施形態においては、配列番号が後ろの要素に対して、配列番号が前の要素より重みを高く設定している。このプールの管理方法によって、格納された情報が取り出される確率を調整して、シャッフル効果を高くすることができる。
【００６６】
この実施例では、上記の通り、発生させる乱数の個数は、４８＋６４＋８４＋７２＝２６８個であるため、乱数の幅は０〜２６７である。例えば、乱数が１５３であったとすると、プールから取り出されるレコードは、配列番号２の仮想配列１０となる。レコードを一つ取り出した場合、取り出したレコードの後ろのレコードは順次前詰にされていく。したがって、配列番号３の要素数は９→８へと減算されることになり、次のレコードが追加されると再び要素数が９に戻ることになる。
【００６７】
次に、第２の実施形態における動作を図１４〜図１６のフローチャートを用いて説明する。図１４は、第２の実施形態における順序ランダム化装置の初期処理の一例を説明するフローチャートである。図１５は、第２の実施形態における順序ランダム化装置の保存動作の一例を説明するフローチャートである。図１６は、第２の実施形態における順序ランダム化装置部のプール取出し動作の一例を説明するフローチャートである。
【００６８】
図１４において、先ず、プール（仮想配列）に格納する数を仮決めする（Ｓ２１１）。仮決めされた格納数を基に、プールの分割数Lを決める（Ｓ２１２）。この分割数が図１２で説明した「プール配列の要素数（Ｌ）」になる。
【００６９】
次に、プール（仮想配列）に格納する数を決める（Ｓ２１３）。この数は、分割数Ｌを決めた上で、実際に使用する数を決めるものであり、Ｌ以下で任意に設定可能である。
【００７０】
次に、図１２で説明したプール管理情報の初期化を行う（Ｓ２１４）。具体的には、乱数終了値、情報追加する要素番号、及び情報追加するカウンタを０にセットする。
【００７１】
次に、プール配列の確保と初期化を行う（Ｓ２１５）。具体的には、「乱数アクセス用開始ポイント」、及び「乱数アクセス用終了ポイント」に０をセットする。また、「データを格納する仮想配列」は、１要素に情報追加する数の仮想配列を用意する。さらに、「重み」はプール配列の順番が大きいほど大きい値にする。図１３においては１、２、４、８、１６・・・を例示している。以上で、初期処理を終了する。
【００７２】
図１５において、順序ランダム化装置の保存動作は、先ず、情報入力がされると（Ｓ２００）、「情報追加する要素番号」から、データを格納するプール配列の要素を求める（Ｓ２０１）。
【００７３】
次に、その要素の「要素のデータを格納する仮想配列」の「情報追加するカウンタ」番目にデータを格納して、次の操作を行う（Ｓ２０２）。「情報追加するカウンタ」をインクリメントする（++）。「乱数アクセス用終了ポイント」に重みを加算代入する（+=重み）。「乱数終了値」に重みを加算代入する（+=重み）。
【００７４】
次に、「情報追加するカウンタ」が「１要素に情報追加する数」になったか否かを判断し（Ｓ２０３）、ＮＯである場合は本フローチャートの動作を終了する。
【００７５】
ステップＳ２０３でＹＥＳの場合、情報を追加する要素がＬ番目のプール配列の要素であるか否かを判断し（Ｓ２０４）、ＮＯである場合には、「情報追加する要素番号」をインクリメントし、追加するカウンタを０、次のプール配列の要素の「乱数アクセス用開始ポイント」と、「乱数アクセス終了ポイント」の値を求めセットする（Ｓ２０５）。一方、ステップＳ２０４でＹＥＳの場合には、プール配列の１番目を０番目にマージして１番目を空にし、１番目が空いた分、１つずつ前詰めして移行させ、L番目が空の状態になるようにする。
【００７６】
図１６において、順序ランダム化装置部のプール取出し動作は、先ず、０〜乱数終了値の間の整数ｒをランダムに生成する（Ｓ２２１）。整数ｒは、例えば使用するプログラミング言語の最大値を指定した整数乱数生成関数によって得ることができる。整数ｒを決定する乱数は、取出しのタイミングで逐次生成する。しかし、例えば取出しのタイミングとは非同期に乱数を用意しておき、取出しのタイミングで整数ｒに適用しても良い。特に乱数の計算に時間が掛かる場合には、事前準備によって処理を高速化することができる。
【００７７】
次に、プール配列の「乱数アクセス用開始ポイント」と「乱数アクセス用終了ポイント」から、整数rに対応するプール配列の要素を求める（Ｓ２２２）。図１２及び図１３で説明したとおり、整数ｒによって対応する配列が一意に決まることになる。
【００７８】
次に、プール配列の要素からｒに該当するレコードのデータを格納する仮想配列の格納場所を求め取出し、取り出した格納場所は後ろのレコードによって前詰めされる（Ｓ２２３）。前詰めのタイミングは、レコードを取り出して直ぐに行う。但し、例えば、所定数のレコードを読出してから一度に所定数分前詰めしても良い。その場合、読出しに使用される整数ｒについて、空のレコードが指定された場合の整数ｒの再指定について考慮しておく。これにより、保存と読出しの処理を非同期に行うことも可能となる。
【００７９】
次に、プール配列の要素以降の「乱数アクセス用開始ポイント」、「乱数アクセス用終了ポイント」、及び「乱数終了値」のメンテナンスを行う（Ｓ２２４）。レコードが前詰めされた場合、上記各設定値も前詰めに合わせて変更される。しかし、ステップＳ２２３で説明したとおり、前詰めのタイミングによっては上記メンテナンスのタイミングも変わってくる。以上で順序ランダム化装置部のプール取出し動作を終了する。
［第３の実施形態］
【００８０】
第１の実施形態、および第２の実施形態おいては、プール配列によって入力データのシャッフリングを行ったが、例えば、データベースのレコード数が多く、レコードの登録日や更新日順に入力されるデータに対しては、実施形態１又は２における局所的な並び替えでは全体的なシャッフリングが不十分となる場合がある。そこで、第３の実施形態においては、データ全体をランダム化することにより、より高いシャッフリング効果を得ることができる。
【００８１】
第３の実施形態を、図１７〜図１９によって説明する。図１７は、第３の実施形態における概要を説明する図である。図１８は、第３の実施形態における順序ランダム化装置の初期処理の一例を説明するフローチャートである。図１９は、第３の実施形態における順序ランダム化装置の動作の一例を説明するフローチャートである。
【００８２】
図１７において、順序ランダム化装置のプールは、ｎ個のテーブルを有する２次記憶装置に接続されている。プールに入力された全入力データは、ｎ個のテーブルにランダムに全て分配されて記憶される。それぞれのテーブルに記憶されたデータは、各テーブル毎にランダムに指定されて読出されて出力データとなる。
【００８３】
図１８において、順序ランダム化装置の初期処理は、先ず、プールの内部を複数に分割して、テーブル用キャッシュを作れる数をｎとする（Ｓ３１０）。プールは２次記憶とのデータのキャッシュで使用するだけなので、容量についてはキャッシュとして十分であれば良い。それぞれのキャッシュは２次記憶の入出力キャッシュとして使用される。
【００８４】
次に、ｎ個の集合を管理するテーブルを２次記憶上に作成する（Ｓ３１１）。
【００８５】
次に、入力データを１つずつ読み込みながら、１〜ｎの乱数を生成して、生成された乱数に対応するプールに作成されたテーブル用キャッシュに格納し、一杯になったら２次記憶上のテーブルに退避させる（Ｓ３１２）。
【００８６】
次に、各テーブル毎に、ランダムに最初の読み出し位置と読み出し順（前から後、後ろから前）を決めセットする（Ｓ３１３）。読み出しテーブルを１とする。
【００８７】
図１９において、順序ランダム化装置のプールからの取出しは、先ず、読み出しテーブルがないか否かを判断する（Ｓ３００）。読み出しテーブルが無い場合には、このフローチャットの動作を終了する（Ｓ３００でＹＥＳ）。読み出しテーブルがある場合（Ｓ３００でＮＯ）、読み出しテーブルからデータを取出す（Ｓ３０１）。
【００８８】
次に、読み出しテーブルのスキャンが一巡したか否かを判断する（Ｓ３０２）。スキャンが一巡した場合（Ｓ３０２でＹＥＳ）、読み出しテーブルから除外する（Ｓ３０３）。
【００８９】
次に、読み出しテーブルがないか否かを判断する（Ｓ３０４）。読み出しテーブルがある場合（Ｓ３０４でＮＯ）、又は読み出しテーブルのスキャンが一巡していない場合（Ｓ３０２でＮＯ）、読み出しテーブルを次に勧める（Ｓ３０５）。
【００９０】
全てのテーブルの読み出しが終了した場合（Ｓ３０４でＹＥＳ）、順序ランダム化装置のプールからの取出し処理を終了する。
［第４の実施形態］
【００９１】
第１の実施形態〜第３の実施形態は、トークン管理装置１の順序ランダム化装置についての実施形態であったが、同様の順序ランダム化装置は、データベースシステムの中に構築することもできる。順序ランダム化装置をデータベースシステムの中に構築することで、検索結果の規則性を無くすことができ、出力データの順番によるデータの特性がデータベースシステム外部に漏れることを防ぐことができる。
【００９２】
第４の実施形態を、図２０を用いて説明する。図２０は、第４の実施形態におけるシステム全体構成の一例を説明する構成図である。
【００９３】
図２０において、データベースシステム３１は、データベース管理システム３１１と記憶部３１２を備えている。データベース管理システム３１１１は、コマンド処理部３１１１、および順序ランダム化装置３１１２を備えている。なお、図２０において、データベースシステム３１以外の他の装置は、既に説明した第１の実施形態〜第３の実施形態と同じものについては同じ符号を付して説明を省略する。コマンド処理部３１１１は、順序ランダム化装置３１１２を介して記憶部３１２と接続されており、記憶部３１２からデータを読み出す際に順序ランダム化装置３１１２にてデータがランダム化される。ランダム化装置内部のプールの管理方法は第１の実施例から第３の実施例と同様である。
【００９４】
第４の実施形態においては、データベースの出力段階にプールを入れることにより、データベースの内部構造から分離した高速な出力が可能になる。これによりデータベースの内部構造がデータベースシステム３１の外部からは見えなくなる。また、順序ランダム化装置３１１２にアクセス制限を設け、順序ランダム化装置３１１２の存在を意識することなくデータの出力が可能になり、データベースシステムのデータ出力特性を秘匿化することが可能になる。
【００９５】
また、第４の実施形態は、第１の実施形態から第３の実施形態との併用が可能である。両者の併用によって、シャッフリングの効果を高めることができ、順序ランダム化装置３１１２にアクセス可能な場合は、それぞれの順序ランダム化装置にて、ランダム化の負荷を分散させることができる。
【００９６】
図２１は、トークン管理装置１のコンピュータシステムの一例を示すブロック図である。図２１に示すトークン管理装置１は、ＣＰＵ１２、記憶部１３、インタフェース（Ｉ／Ｆ）１４、入力装置１５、及び表示部１６がバス１７により接続された構成を有する。尚、ＣＰＵ１２と、記憶部１３、Ｉ／Ｆ１４、入力装置１５、及び表示部１６との接続は、図２１に示すバス接続に限定されるものではない。
【００９７】
図２１において、ＣＰＵ１２は、記憶部１３に格納されたプログラムを実行することによりトークン管理装置１全体を制御する。記憶部１３は、半導体記憶装置、磁気記録媒体、光記録媒体、光磁気記録媒体等のコンピュータ読み取り可能な記憶媒体で形成可能であり、上記のプログラムや各種データを格納すると共に、ＣＰＵ１２が実行する演算の中間結果や演算結果等を一時的に格納する一時メモリとしても機能する。記憶部１３は、図２に示す識別子発番対応表１０３の記憶部としても機能する。Ｉ／Ｆ１４は、分析者端末２０や分析システム２０とネットワーク（図示せず）を介しての通信を行うインタフェースである。入力装置１５は、キーボード等により形成可能である。表示部１６は、ディスプレイ等により形成可能である。入力装置１５及び表示部１６は、タッチパネルのように入力装置と表示部の両方の機能を有する入出力装置で形成しても良い。
【００９８】
ＣＰＵ１２は、記憶部１３に格納されたプログラムを実行することにより、コンピュータシステムをトークン管理装置１として機能させる。つまり、図２で説明したトークン化装置１０の順序ランダム化装置１０１、１０４、トークン管理部１０２、識別子発番対応表１０３は、プログラムの機能として記憶部１３の記憶領域に実装されて、ＣＰＵ１２により実行されるようにすることができる。
【００９９】
以上、本発明を実施するための形態について詳述したが、本発明は斯かる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【０１００】
本発明は、以下に記載する付記のような構成が考えられる。
（付記１）
識別情報を含むデータが入力されて、入力された前記データをランダムの順序で出力する第１のランダム化装置と、
前記第１のランダム化装置から出力された前記データの前記識別情報をトークンで置換するトークン化部と、を備えた情報秘匿化装置。
（付記２）
前記第１のランダム化装置は、
所定の格納数の格納場所を有して、入力された前記データを前記格納場所に逐次格納する第１の格納部と、
前記第１の格納部の格納数に応じた第１の乱数を生成させる第１の乱数生成部と、を備え、
前記第１の乱数によってランダムに特定される前記第１の格納部の格納場所から格納された前記データを取り出して出力する付記２に記載の情報秘匿化装置。
（付記３）
前記第１の格納部の格納場所は、入力順序が早い入力データに対して入力順序が遅い入力データを優先的に取り出す付記１又は２に記載の情報秘匿化装置。
（付記４）
前記トークンを発生させるトークン発生器と、
前記トークン発生器で発生された前記トークンが入力されて、入力された前記トークンをランダムの順序で出力する第２のランダム化装置と、をさらに備えた付記１乃至３のいずれか一に記載の情報秘匿化装置。
（付記５）
前記第２のランダム化装置は、
所定の格納数の格納場所を有して、入力された前記トークンを前記格納場所に逐次格納する第２の格納部と、
前記第２の格納部の格納数に応じた第２の乱数を生成させる第２の乱数生成部と、を備え、
前記第２の乱数によってランダムに特定される前記第２の格納部の格納場所から格納された前記トークンを取り出して出力する付記４に記載の情報秘匿化装置。
（付記６）
前記第２の格納部の格納場所は、入力順序が早い入力データに対して入力順序が遅い入力データを優先的に取り出す付記４又は５に記載の情報秘匿化装置。
（付記７）
識別情報を含むデータが入力されて、入力された前記データをランダムの順序で出力する第１のランダム化処理と、
前記第１のランダム化処理で出力された前記データの前記識別情報をトークンで置換するトークン化処理と、をコンピュータが実行する識別情報の情報秘匿化方法。
（付記８）
前記第１のランダム化処理は、
所定の格納数の格納場所を有して、入力された前記データを前記格納場所に逐次格納する第１の格納処理と、
前記第１の格納処理の格納数に応じた第１の乱数を生成させる第１の乱数生成処理と、を備え、
前記第１の乱数によってランダムに特定される前記第１の格納処理で格納される格納場所から格納された前記データを取り出して出力する処理をコンピュータが実行する付記７に記載の識別情報の情報秘匿化方法。
（付記９）
前記第１の格納処理は、入力順序が早い入力データに対して入力順序が遅い入力データを優先的に取り出す付記７又は８に記載の情報秘匿化方法。
（付記１０）
前記トークンを発生させるトークン発生処理と、
前記トークン発生処理で発生された前記トークンが入力されて、入力された前記トークンをランダムの順序で出力する第２のランダム化処理と、をさらに備えた付記７乃至９のいずれか一に記載の情報秘匿化方法。
（付記１１）
前記第２のランダム化処理は、
所定の格納数の格納場所を有して、入力された前記トークンを前記格納場所に逐次格納する第２の格納処理と、
前記第２の格納処理の格納数に応じた第２の乱数を生成させる第２の乱数生成処理と、を備え、
前記第２の乱数によってランダムに特定される前記第２の格納処理で格納される格納場所から前記トークンを取り出して出力する付記１０に記載の情報秘匿化方法。
（付記１２）
前記第２の格納処理は、入力順序が早い入力データに対して入力順序が遅い入力データを優先的に取り出す付記４又は５に記載の情報秘匿化方法。
（付記１３）
クエリを受け付けるコマンド処理部と、
前記コマンド処理部からの指示によって記憶しているデータを出力する記憶部と、
ランダム化装置と、を備えたデータベースシステムであって、
ランダム化装置は、
所定の格納数の格納場所を有して、前記記憶部から出力されたデータを前記格納場所に逐次格納する格納部と、
前記格納部の格納数に応じた乱数を生成させる乱数生成部と、を備えたデータベースシステム。
【符号の説明】
【０１０１】
１  トークン管理装置
１０  トークン化装置
１０１、１０４  順序ランダム化装置
１０１１、１０４１  格納部
１０１２，１０４２  乱数発生部
１０２  トークン管理部
１０２１  トークン化部
１０２２  トークン登録部
１０３  識別子発番対応表
１０５  トークン発生器
１１  復元装置
１２  ＣＰＵ
１３  記憶部
１４  インタフェース
１５  入力装置
１６  表示部
１７  バス
２０  分析者端末
２１、３１  データベースシステム
２１１、３１１  データベース管理システム
２１２、３１２  記憶部
２２  分析システム
３１１１  コマンド処理部
３１１２  順序ランダム化装置
【図１】
2014194621.tif 000003
【図２】
2014194621.tif 000004
【図３】
2014194621.tif 000005
【図４】
2014194621.tif 000006
【図５】
2014194621.tif 000007
【図６】
2014194621.tif 000008
【図７】
2014194621.tif 000009
【図８】
2014194621.tif 000010
【図９】
2014194621.tif 000011
【図１０】
2014194621.tif 000012
【図１１】
2014194621.tif 000013
【図１２】
2014194621.tif 000014
【図１３】
2014194621.tif 000015
【図１４】
2014194621.tif 000016
【図１５】
2014194621.tif 000017
【図１６】
2014194621.tif 000018
【図１７】
2014194621.tif 000019
【図１８】
2014194621.tif 000020
【図１９】
2014194621.tif 000021
【図２０】
2014194621.tif 000022
【図２１】
2014194621.tif 000023