(57)【要約】【課題】  本発明の課題は、所定の匿名性を損なうことなくデータを匿名化することを目的とする。【解決手段】  上記課題は、複数ユーザーに関するデータの中から、指定数以上の前記ユーザーのデータに含まれ、且つ、開始から同じ順序で出現する単語の組み合せを抽出する抽出部と、前記複数ユーザーに関する前記データの、前記抽出部によって抽出された前記単語に含まれない文字列を所定文字列に置換する加工を行う置換加工部と、前記置換加工部によって加工された前記データが前記指定数以上のユーザーで匿名性を満たすか否かを検証する検証部と、前記置換加工部によって加工された前記データが匿名性を満たす場合、加工前の前記データを、前記所定文字列の位置に応じて匿名化する匿名化処理部とを有するデータ匿名化装置により達成される。【選択図】  図６
2016115112.tif 000002
【特許請求の範囲】
【請求項１】
複数ユーザーに関するデータの中から、指定数以上の前記ユーザーのデータに含まれ、且つ、開始から同じ順序で出現する単語の組み合せを抽出する抽出部と、
前記複数ユーザーに関する前記データの、前記抽出部によって抽出された前記単語に含まれない文字列を所定文字列に置換する加工を行う置換加工部と、
前記置換加工部によって加工された前記データが前記指定数以上のユーザーで匿名性を満たすか否かを検証する検証部と、
前記置換加工部によって加工された前記データが匿名性を満たす場合、加工前の前記データを、前記所定文字列の位置に応じて匿名化する匿名化処理部と
を有するデータ匿名化装置。
【請求項２】
前記置換加工部は、
前記データにおいて、前記組み合わされた前記単語間が互いに隣接しない箇所を前記所定文字列で置き換える
ことを特徴とする請求項１記載のデータ匿名化装置。
【請求項３】
前記置換加工部は、前記データを加工することで、前記組み合わされた前記単語と前記所定文字列とでなる複数の単語系列を作成し、
前記検証部は、前記指定数以上のユーザーの前記データに前記複数の単語系列のうち２以上が出現する場合、出現した該単語系列同士において抽出元の重複の無い単語系列を選択する
ことを特徴とする請求項２記載のデータ匿名化装置。
【請求項４】
前記抽出部は、前記データを、所定行数単位で前記単語の組み合せを抽出することを特徴とする請求項３記載のデータ匿名化装置。
【請求項５】
複数ユーザーに関するデータの中から、指定数以上の前記ユーザーのデータに含まれ、且つ、開始から同じ順序で出現する単語の組み合せを抽出し、
前記複数ユーザーに関する前記データの、前記抽出された単語に含まれない文字列を所定文字列に置換する加工を行い、
加工された前記データが前記指定数以上のユーザーで匿名性を満たすか否かを検証し、
加工された前記データが匿名性を満たす場合、加工前の前記データを、前記所定文字列の位置に応じて匿名化する
処理をコンピュータに実行させるデータ匿名化プログラム。
【請求項６】
複数ユーザーに関するデータの中から、指定数以上の前記ユーザーのデータに含まれ、且つ、開始から同じ順序で出現する単語の組み合せを抽出し、
前記複数のユーザーに関する前記データの、前記抽出された単語に含まれない文字列を所定文字列に置換する加工を行い、
加工された前記データが前記指定数以上のユーザーで匿名性を満たすか否かを検証し、
加工された前記データが匿名性を満たす場合、加工前の該データを、前記所定文字列の位置に応じて匿名化する
処理をコンピュータが行うデータ匿名化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、データを匿名化する技術に関する。
【背景技術】
【０００２】
近年、プライバシ保護を目的として、様々な技術が提案されている。例えば、プライバシ保護の技術の一つにデータの匿名化がある。匿名化では、置換、削除等により、データの１単語（１以上の行、レコード等）を個人識別性が無いように加工する。個人識別性とは、データの持ち主、データの管理元等のそのデータに関して知識のある人が見たとき、データの持ち主を特定できることである。
【０００３】
具体的には、匿名化処理後のデータの１単位を見たときに、データの持ち主を所定の人数以上にしか絞り込めないようにデータを加工する。例えば、閾値以上のユーザーの文書データに出現する単語の組み合せを「匿名化不要語組み」として定義して抽出し、匿名化処理時には、対象文字列の「匿名化不要語組み」以外の単語を別文字列に置換する技術等が知られている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許５０９５２８１号
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した技術では、「匿名化不要語組み」の単語と、置換に用いた別文字列でなる文字列において、即ち、別文字列で匿名化された文字列において、単語と別文字列の位置関係から、匿名化処理後の文字列が、定めた閾値未満のユーザー数まで特定されてしまう場合がある。
【０００６】
したがって、１つの側面では、本発明は、所定の匿名性を損なうことなくデータを匿名化することを目的とする。
【課題を解決するための手段】
【０００７】
一態様によれば、複数ユーザーに関するデータの中から、指定数以上の前記ユーザーのデータに含まれ、且つ、開始から同じ順序で出現する単語の組み合せを抽出する抽出部と、前記複数ユーザーに関する前記データの、前記抽出部によって抽出された前記単語に含まれない文字列を所定文字列に置換する加工を行う置換加工部と、前記置換加工部によって加工された前記データが前記指定数以上のユーザーで匿名性を満たすか否かを検証する検証部と、前記置換加工部によって加工された前記データが匿名性を満たす場合、加工前の前記データを、前記所定文字列の位置に応じて匿名化する匿名化処理部とを有するデータ匿名化装置が提供される。
【０００８】
また、上記課題を解決するための手段として、上記方法を行う装置、コンピュータに上記処理を実行させるためのプログラム、及び、そのプログラムを記憶した記憶媒体とすることもできる。
【発明の効果】
【０００９】
所定の匿名性を損なうことなくデータを匿名化できる。
【図面の簡単な説明】
【００１０】
【図１】データを匿名化して提供するシステムの構成例を示す図である。
【図２】置換方法を説明するための図である。
【図３】図２の置換方法では匿名性を満たさない第一の例を説明するための図である。
【図４】図２の置換方法では匿名性を満たさない第二の例を説明するための図である。
【図５】データ匿名化装置のハードウェア構成を示す図である。
【図６】図３の第１の例に対する本実施例における匿名化処理を説明するための図である。
【図７】図４の第２の例に対する本実施例における匿名化処理を説明するための図である。
【図８】データ匿名化装置の機能構成例を示す図である。
【図９】データ匿名化処理を説明するためのフローチャート図である。
【図１０】ログデータから作成された判定用ログデータの例を示す図である。
【図１１】開示単語セットから作成した単語系列一覧のデータ例を示す図である。
【図１２】開示単語判定処理を説明するための図である。
【図１３】匿名化処理を説明するための図である。
【発明を実施するための形態】
【００１１】
以下、本発明の実施の形態を図面に基づいて説明する。データの匿名化は、データ全体の内容を解読困難にすることを目的するものではなく、データ内に機密情報が含まれていても、どのユーザーのものであるのかを特定できないようにすることであり、通常、データからユーザーを特定できないようにデータの一部を置換することで、ユーザーと機密情報の関連付けを困難にすることである。
【００１２】
データの匿名化について図１で説明する。図１は、データを匿名化して提供するシステムの構成例を示す図である。図１に示すシステム１０００は、複数のユーザー７が利用するユーザー端末４と、匿名化装置１００と、閲覧者５の閲覧者端末６とを有する。複数のユーザー７は、同一組織又は企業に属するユーザーであってもよいし、複数の組織又は複数の企業のユーザーであってもよい。
【００１３】
データの匿名化では、ｎ人のうちのどのユーザーであるかを特定できないこと、換言すると、ｎ+１人のユーザーまで特定される可能性を許容することを匿名化の条件とすることで、閾値ｎが定義される。閾値ｎは、データをｎ人以下のユーザーにまで特定できないことを指定する。閾値ｎは、匿名化する範囲となる組織単位又は企業単位で与えられる。
【００１４】
図１では、複数のユーザー７は１つの組織に属し、閾値ｎ＝３が与えられた場合で説明する。
【００１５】
匿名化装置１００は、複数のユーザー７が利用するユーザー端末４からのログデータ５１を閾値ｎで匿名化して、匿名化済ログデータ５を閲覧者５に提供する装置である。匿名化装置１００が扱うログデータ５１は、機密情報、ユーザー個人を特定可能な情報等を含むデータである。匿名化済ログデータ５２は、ｎ人以下のユーザーに絞り込むことが困難となったデータである。
【００１６】
複数のユーザー端末４は、複数のユーザー７によって利用される端末である。各ユーザー端末４は、唯一のユーザー７によって利用される端末であってもよいし、複数のユーザー７によって利用される端末であってもよい。
【００１７】
ユーザー７がユーザー端末４を利用すると、ユーザー端末４でログが生成され、ログデータ５１が匿名化装置１００に送信される。このように各ユーザー端末４で生成されたログは、ログデータ５１によって匿名化装置１００に収集される。
【００１８】
収集された複数のログデータ５１のうち、ユーザーＡのログデータ５１は、
「name = Tanaka
C:/usr/tanaka/data」
である。ユーザーＢのログデータ５１は、
「name = Tanaka
C:/usr/tanaka/data」
である。ユーザーＣのログデータ５１は、
「name = Kawada
C:/usr/Kawada/data」
である。
【００１９】
匿名化装置１００は、置換方法によって各ログデータ５１を匿名化し、匿名化済ログデータ５を閲覧者５に参照可能とする。例えば、ユーザーＡのログデータ５１を匿名化済ログデータ５は、
「name = tok001
C:/usr/tok002/data」
となる。ユーザーＢのログデータ５１を匿名化済ログデータ５は、
「name = tok001
C:/usr/tok002/data」
となる。ユーザーＣのログデータ５１を匿名化済ログデータ５は、
「name = tok001
C:/usr/tok002/data」
となる。
【００２０】
置き換え後のこれら３つの匿名化済ログデータ５は、少なくともユーザーＡ、Ｂ、及びＣの３人のうちのどのユーザーのデータであるかを特定できない。従って、閾値ｎ＝３の条件を満たす。
【００２１】
閲覧者５は、匿名化装置１００から提供される匿名化済ログデータ５を解析し、解析した結果を複数のユーザー７の組織に提供する。匿名化済ログデータ５がログデータである場合、閲覧者５は、複数のユーザー端末４を含む組織のシステムに何らかの異常が発生していないかを監視し、その結果を組織に報告する。結果には、異常を示す、又は、異常の原因となった匿名化済ログデータ５を含んでもよい。組織側の管理者が、報告された匿名化済ログデータ５から匿名化される前のログデータ５１を特定すればよい。
【００２２】
次に、匿名化するための種々の置換方法について説明する。置換方法には、「黒塗り」、「トークン化」、「暗号化」等の既存技術がある。
【００２３】
「黒塗り」による置換方法では、置換箇所の内容に関係なく、全て同じ文字列に置換する。ログデータ５１が
「Password = HIMITSU」
の場合、「黒塗り」により「HIMITSU」が「*******」で置き換えられ、
「Password = *******」
が、匿名化された匿名化済ログデータ５となる。このように、「黒塗り」による置換方法では、置換箇所の情報を全く残さない。
【００２４】
「トークン化」による置換方法では、同じ置換箇所が同じ文字列になるように置換する。ログデータ５１が
「'service.exe' is started
'event.exe' is started
'service.exe' is stopped」
の場合、「トークン化」により「service.exe」が「tok01」で置き換えられ、また、「event.exe」が「tok02」で置き換えられ、
「'tok01.exe' is started
'tok02.exe' is started
'tok01.exe' is stopped」
が、匿名化された匿名化済ログデータ５となる。このように、「トークン化」による置換方法では、置換箇所同士の一致・不一致が分かる。
【００２５】
「暗号化」による置換方法では、鍵を持つユーザー７だけが、閲覧できる文字列に置換され、ログデータ５１が
「Password = HIMITSU」
の場合、「暗号化」により「HIMITSU」が「98exioaorwDl」で置き換えられ、
「Password = 98exioaorwDl」
が、匿名化された匿名化済ログデータ５となる。このように、「暗号化」による置換方法では、置換箇所に対し、閲覧権限を付与できる。
【００２６】
上述したような置換方法を用いるために、ログデータ５１の文字列を単語単位に分割する。そして、閾値ｎ以上のユーザー７のデータに出現する１以上の単語を、開示単語として抽出して、開示単語セットが生成される。開示単語セットに含まれる各単語に対して置き換えは行われない。開示単語セットに含まれいない、開示箇所以外の単語が、置き換え対象となる。
【００２７】
開示箇所以外の単語の置き換えについて図２で説明する。図２は、置換方法を説明するための図である。図２において、ユーザーＡのログデータ５１を「name = Yamada. path = c:/data」とし、ユーザーＢのログデータ５１を「name = Tanaka. path = c:/db」とし、ユーザーＣのログデータ５１を「name = Sato. path = c:/doc」とする。
【００２８】
各ログデータ５１を単語に分割する。単語分割は、文字種で分割し、文字種間に区切り文字「，」を挿入した文字列を作成する。単語分割により、ユーザーＡのログデータ５１は{name，=，Yamada,.,path,=,c,:,/,data,}のように表され、ユーザーＢのログデータ５１は{name,=,Tanaka,.,path,=,c,:,/,db}のように表され、ユーザーＣのログデータ５１は{name,=,Sato,.,path,=,c,:,/,db}のように表される。
【００２９】
次に、閾値ｎ＝３で開示単語の抽出を行う。ユーザーＡ、Ｂ及びＣのログデータ５１の全てに含まれる単語を開示単語として残し、開示単語以外の単語は省略する。この例では、{name,=,.,path,=,c,:,/}が開示単語セット５１ｔとして抽出される。
【００３０】
そして、各ユーザーＡ、Ｂ及びＣのログデータ５１において省略した文字列を別の文字列に置換する。この例では、トークン化での置き換え例を示す。ユーザーＡのログデータ５１は「name = tok01. path = c:/tok02」を示す匿名化済ログデータ５となり、ユーザーＢのログデータ５１は「name = tok01. path = c:/tok02」を示す匿名化済ログデータ５となり、ユーザーＣのログデータ５１は「name = tok01. path = c:/tok02」を示す匿名化済ログデータ５となる。
【００３１】
このように、図２の例では、匿名化された３つの各匿名化済ログデータ５のユーザーを特定することができないため、匿名性を満たしている。
【００３２】
次に、上述した置換方法では匿名性を満たさない２つの例について図３及び図４で説明する。図３は、図２の置換方法では匿名性を満たさない第一の例を説明するための図である。図３の第一の例では、同じ開示単語セット５１ｔが適用される文字列において置換箇所の有無が異なる場合に、匿名性を満たさないことを説明する。第一の例では、閾値ｎ＝３とする。
【００３３】
図３において、ユーザーＡのログデータ５１は「name = db . path=c:/data」であり、ユーザーＢのログデータ５１は「name = storage . path=d:/db」であり、ユーザーＣのログデータ５１は「name = admin . path=c:/db/data」であるとする。
【００３４】
各ログデータ５１を単語に分割する。単語分割により、文字種間に区切り文字「，」を挿入した文字列を作成する。単語分割により、ユーザーＡのログデータ５１は{name,=,db,. ,path,=,c,:,/,data}のように表され、ユーザーＢのログデータ５１は{name,=,storage,.,path,=,d,:,/,db}のように表され、ユーザーＣのログデータ５１は{name,=,admin,.,path,=,c,:,/,db,/,data}のように表される。
【００３５】
次に、閾値ｎ＝３で開示単語の抽出を行う。ユーザーＡ、Ｂ及びＣのログデータ５１の全てに含まれる単語を開示単語として残し、開示単語以外の単語は省略する。この例では、{name,=,db}が開示単語セット５１ｔとして抽出される。
【００３６】
そして、開示単語セット５１ｔに含まれる各開示単語を開示し、それ以外の単語に対して置換処理を行う。その結果、ユーザーＡに関して匿名化されたデータ「name = db tok01」を得て、ユーザーＢに関して匿名化された匿名化済ログデータ５「name = tok01 db」を得て、ユーザーＣに関して匿名化された匿名化済ログデータ５「name = tok01 db tok02」を、匿名化済ログデータ５として得る。
【００３７】
この第一の例での結果では、３つの匿名化済ログデータ５において、ユーザーＣのログデータ５１の「db」の前後に単語があるということを知る者であれば、一番下の匿名化済ログデータ５がユーザーＣのログデータ５１であることを一意に判別してしまう。
【００３８】
図４は、図２の置換方法では匿名性を満たさない第二の例を説明するための図である。図４の第二の例では、各ログデータ５１を、複数の開示単語セット５１ｔの少なくとも１つ以上を用いて匿名化した際に、匿名性を満たさないことを説明する。複数の開示単語セット５１ｔのうちのある開示単語セット５１ｔを適用した際のユーザー数が閾値ｎに満たない場合に、匿名性を満たさないことを説明する。第二の例では、閾値ｎ＝２とする。
【００３９】
図４において、ユーザーＡのログデータ５１は「isActive = false」であり、ユーザーＢのログデータ５１は「isActive = false」であり、ユーザーＣのログデータ５１は「isActive = true」であるとする。
【００４０】
各ログデータ５１を単語に分割し、文字種間に区切り文字「，」を挿入した文字列を作成する。単語分割により、ユーザーＡのログデータ５１は{isActive，=，false}のように表され、ユーザーＢのログデータ５１は{isActive，=，false}のように表され、ユーザーＣのログデータ５１は{isActive，=，true}のように表される。
【００４１】
次に、閾値ｎ＝２で開示単語の抽出を行う。ユーザーＡ、Ｂ及びＣのログデータ５１の２人又は３人に共通に含まれる単語を開示単語として残し、開示単語以外の単語は省略する。ユーザーＡとＢの２人のログデータ５１に共通する単語を残した場合、{isActive,=,false}が開示単語セット５１ｔとして抽出される。また、ユーザーＡ、Ｂ及びＣのログデータ５１の３人に共通する単語を残した場合、{isActive,=}が開示単語セット５１ｔとして抽出される。
【００４２】
そして、開示単語セット５１ｔに含まれる各開示単語を開示し、それ以外の単語に対してトークン化による置換処理を行う。その結果、ユーザーＡに関して匿名化されたデータ「isActive = false」、ユーザーＢに関して匿名化されたデータ「isActive = false」、及び、ユーザーＣに関して匿名化されたデータ「isActive = tok01」を、匿名化済ログデータ５として得る。
【００４３】
この第二の例での結果では、３つの匿名化済ログデータ５において、ユーザーＣのログデータ５１の「isActive」の値がfalseでないことを知る者であれば、一番下の匿名化済ログデータ５がユーザーＣのログデータ５１であることを一意に判別してしまう。
【００４４】
上述したように、閾値に基づいて開示単語を判別したのみでは、匿名化処理後に必ずしも閾値に基づく匿名性を維持することができない。従って、本実施例では、匿名化処理後に、匿名化済ログデータ５の閾値ｎを損なうことなくデータを匿名化する技術を提供する。
【００４５】
本実施例に係るデータ匿名化処理を行うデータ匿名化装置は、図５に示すようなハードウェア構成を有する。図５は、データ匿名化装置のハードウェア構成を示す図である。
【００４６】
図５において、データ匿名化装置１００は、コンピュータによって制御される情報処理装置であって、ＣＰＵ（Central Processing Unit）１１と、主記憶装置１２と、補助記憶装置１３と、入力装置１４と、表示装置１５と、通信Ｉ／Ｆ（インターフェース）１７と、ドライブ装置１８とを有し、バスＢに接続される。
【００４７】
ＣＰＵ１１は、主記憶装置１２に格納されたプログラムに従ってデータ匿名化装置１００を制御する。主記憶装置１２には、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）等が用いられ、ＣＰＵ１１にて実行されるプログラム、ＣＰＵ１１での処理に必要なデータ、ＣＰＵ１１での処理にて得られたデータ等を記憶又は一時保存する。
【００４８】
補助記憶装置１３には、ＨＤＤ（Hard Disk Drive）等が用いられ、各種処理を実行するためのプログラム等のデータを格納する。補助記憶装置１３に格納されているプログラムの一部が主記憶装置１２にロードされ、ＣＰＵ１１に実行されることによって、各種処理が実現される。
【００４９】
入力装置１４は、マウス、キーボード等を有し、ユーザがデータ匿名化装置１００による処理に必要な各種情報を入力するために用いられる。表示装置１５は、ＣＰＵ１１の制御のもとに必要な各種情報を表示する。通信Ｉ／Ｆ１７は、有線又は無線などのネットワークを通じて通信を行う。通信Ｉ／Ｆ１７による通信は無線又は有線に限定されるものではない。 
データ匿名化装置１００によって行われる処理を実現するプログラムは、例えば、ＣＤ−ＲＯＭ（Compact Disc Read-Only Memory）等の記憶媒体１９によってデータ匿名化装置１００に提供される。
【００５０】
ドライブ装置１８は、ドライブ装置１８にセットされた記憶媒体１９（例えば、ＣＤ−ＲＯＭ等）とデータ匿名化装置１００とのインターフェースを行う。
【００５１】
また、記憶媒体１９に、後述される本実施の形態に係る種々の処理を実現するプログラムを格納し、この記憶媒体１９に格納されたプログラムは、ドライブ装置１８を介してデータ匿名化装置１００にインストールされる。インストールされたプログラムは、データ匿名化装置１００により実行可能となる。
【００５２】
尚、プログラムを格納する媒体としてＣＤ−ＲＯＭに限定するものではなく、コンピュータが読み取り可能な媒体であればよい。コンピュータ読取可能な記憶媒体として、ＣＤ−ＲＯＭの他に、ＤＶＤディスク、ＵＳＢメモリ等の可搬型記録媒体、フラッシュメモリ等の半導体メモリであっても良い。
【００５３】
上述した匿名性を満たさない第１の例（図３）及び第２の例（図４）との比較において、本実施例を図６及び図７で説明する。図６は、図３の第１の例に対する本実施例における匿名化処理を説明するための図である。
【００５４】
図６において、ユーザＡ、Ｂ及びＣのログデータ５１の内容は、図３と同様である。本実施例との比較を容易とするため、関連技術の側に図３の内容を示し、本実施例の側に以下に説明する本実施例に係る匿名化処理の概要を示している。この比較例においても、閾値ｎ＝３で匿名性を維持することを条件とする。
【００５５】
関連技術では、単語分割後に開示単語を抽出することで得た２つの開示単語セット５１ｔは、ログデータ５１に対して、匿名化する前には閾値ｎ＝３で匿名性を満たす。しかしながら、一方の{name,=,db}を選択して置換した後の匿名化済ログデータ５では、閾値ｎ＝３の匿名性を満たさない。
【００５６】
本実施例では、各ログデータ５１の行頭から行末までの隣接と非隣接とを区別して、非隣接箇所に所定文字列で置き換える。非隣接箇所は、そこに文字列が存在し、非隣接箇所の文字列の前、後、又は前後に開示単語が存在する部分である。
【００５７】
所定文字列は、一の文字種の文字列であっても良いし、２以上の文字種で構成されても良い。ここでは、［ＧＡＰ］を所定文字列とする。所定文字列で置き換えた結果が、閾値ｎ＝３の匿名性を満たすか否かを確認する。
【００５８】
２つの開示単語セット５１ｔから{name,=,db}を選択した場合、単語分割及び非隣接箇所の所定文字列への置き換えによって、ユーザーＡ、Ｂ、Ｃの順に、
{name,=,db,[GAP]}、
{name,=,[GAP],db}、
{name,=,[GAP],db,[GAP]}
となる。この結果が、閾値ｎ＝３の匿名性を満たすか否かが確認される。即ち、開示単語と所定文字列［ＧＡＰ］が示すパターンが、閾値である３個の結果全てで一致しない。従って、この開示単語セット５１ｔ（{name,=,db}）を採用しない。
【００５９】
次に、２つの開示単語セット５１ｔから未選択の{name,=,.,path,=,:,/}を選択し、単語分割及び非隣接箇所の所定文字列への置き換える。その結果は、ユーザーＡ、Ｂ、Ｃの順に、
{name,=,[GAP],path,=,:,/[GAP]}、
{name,=,[GAP],path,=,:,/[GAP]}、
{name,=,[GAP],path,=,:,/[GAP]}
となる。この結果では、開示単語と所定文字列［ＧＡＰ］が示すパターン５１ｇが、閾値である３個の結果全てで一致する。従って、この開示単語セット５１ｔ（{name,=,.,path,=,:,/}）を、匿名化するために採用する。つまり、匿名化後においても閾値ｎ＝３の匿名性を維持する{name,=,.,path,=,:,/}が、匿名化処理で採用する開示単語セット５１ｔとして選択される。
【００６０】
匿名化処理の結果、ユーザーＡ、Ｂ、Ｃの順に、
name = tok01 . path=tok02:/tok03、
name = tok01 . path=tok02:/tok03、
name = tok01 . path=tok02:/tok03
の匿名化済ログデータ５を得る。３つの匿名化済ログデータ５において、単語系列のパターンが一致するため、どの匿名化済ログデータ５がどのユーザーのデータであるのかは判別できない。従って、匿名化後においても閾値ｎ＝３の匿名性が確保されている。
【００６１】
図７は、図４の第２の例に対する本実施例における匿名化処理を説明するための図である。図７において、ユーザＡ、Ｂ及びＣのログデータ５１の内容は、図４と同様である。本実施例との比較を容易とするため、関連技術の側に図４の内容を示し、本実施例の側に以下に説明する本実施例に係る匿名化処理の概要を示している。この比較例においても、閾値ｎ＝２で匿名性を維持することを条件とする。
【００６２】
関連技術では、単語分割後に開示単語を抽出することで得た２つの開示単語セット５１ｔは、ログデータ５１に対して、匿名化する前には閾値ｎ＝２で匿名性を満たす。しかしながら、{isActive,=}を適用して置換した後のユーザーＣの匿名化済ログデータ５では、閾値ｎ＝２の匿名性を満たさない。
【００６３】
本実施例では、ログデータ５１毎に複数の開示単語セット５１ｔのいずれかを選択せず、抽出元が重複している場合に、複数の開示単語セット５１ｔから１つを選択して全てのログデータ５１に適用する。
【００６４】
各ログデータ５１の行頭から行末までの隣接と非隣接とを区別して、非隣接箇所に所定文字列で置き換える。所定文字列は、第一の例と同様に所定文字列［ＧＡＰ］とする。所定文字列で置き換えた結果が、閾値ｎ＝２の匿名性を満たすか否かを確認する。
【００６５】
２つの開示単語セット５１ｔから{isActive,=}を適用した場合、単語分割及び非隣接箇所の所定文字列への置き換えの結果は、ユーザーＡ、Ｂ、Ｃの順に、
{isActive = [GAP]}、
{isActive = [GAP]}、
{isActive = [GAP]}
となる。この結果から、ユーザーＡのログデータ５１（ログＡ）、ユーザーＢのログデータ５１（ログＢ）、及び、ユーザーＣのログデータ５１（ログＣ）間で閾値ｎ＝２の匿名性を満たす。即ち、開示単語と所定文字列［ＧＡＰ］が示すパターンが、３人のログデータ５１で同一である。
【００６６】
２つの開示単語セット５１ｔから{isActive,=,false}を適用した場合、単語分割及び非隣接箇所の所定文字列への置き換えの結果は、ユーザーＡ、Ｂ、Ｃの順に、
{isActive = false}、
{isActive = false}、
{isActive = [GAP]}
となる。この結果から、ユーザーＡのログデータ５１（ログＡ）及びユーザーＢのログデータ５１（ログＢ）間で閾値ｎ＝２の匿名性を満たす。即ち、開示単語と所定文字列［ＧＡＰ］が示すパターンが、２人のログデータ５１で同一である。
【００６７】
閾値ｎ＝２の条件を満たす２つの開示単語セット５１ｔの両方において、ユーザーＡのログデータ５１（ログＡ）であるのか、ユーザーＢのログデータ５１（ログＢ）でるのかを特定できない。特定不可能な抽出元（ユーザＡ及びユーザＢ）が重複しているため、どちらか一方を採用する。重複の無い抽出元を含む方を選択する。この場合、{isActive,=}を選択して匿名化する。その結果は、ユーザーＡ、Ｂ、Ｃの順に、
{isActive = tok001}、
{isActive = tok001}、
{isActive = tok001}
の匿名化済ログデータ５を得る。３つの匿名化済ログデータ５において、開示単語と所定文字列［ＧＡＰ］が示すパターンが一致するため、どの匿名化済ログデータ５がどのユーザーのデータであるのかは判別できない。従って、匿名化後においても閾値ｎ＝２の匿名性が確保されている。
【００６８】
次に、データ匿名化装置１００の機能構成例について説明する。図８は、データ匿名化装置の機能構成例を示す図である。図８において、データ匿名化装置１００は、主に、開示単語系列抽出部６０と、匿名化処理部６５とを有する。開示単語系列抽出部６０と、匿名化処理部６５とは、ＣＰＵ１１が対応するプログラムを実行することで実現される。
【００６９】
開示単語系列抽出部６０は、複数のログデータ５１から、指定された閾値ｎに基づいて、１つ以上の開示単語系列５１ｔを抽出する。抽出された開示単語セット５１ｔは、補助記憶装置１３に記憶される。
【００７０】
開示単語系列抽出部６０は、更に、単語分割部６１と、単語系列列挙部６２と、単語系列ソート部６３と、開示単語判定部６４と、匿名化処理部６５とを有する。
【００７１】
単語分割部６１は、あるユーザー７（例えば、ユーザーＡ）のログデータ５１の文字列を単語単位に分割し、区切り文字「,」を挿入して、開示単語セット５１ｔを生成する。単語単位とは、文字種毎の単位である。文字種間に区切り文字「,」が挿入される。
【００７２】
単語系列列挙部６２は、行頭から行末までの非隣接箇所は所定文字列［ＧＡＰ］で置き換えて、開示単語と所定文字列［ＧＡＰ］が示すパターンが異なる単語系列５５を列挙する。開示単語と所定文字列［ＧＡＰ］が示すパターンが異なる単語系列５５を一覧にした単語系列一覧５６が補助記憶装置１３に記憶される。
【００７３】
単語系列ソート部６３は、単語系列列挙部６２によって作成された単語系列一覧５６をソートする。
【００７４】
開示単語判定部６４は、単語系列一覧５６の各単語系列５５について、閾値ｎの条件を満たす単語系列５５を判定し、匿名化処理に用いる開示単語系列群５７として記憶する。ここでは、全てのユーザー７のログデータ５１を用いて、ユーザーＡのログデータ５１を用いて作成した各単語系列５５の閾値ｎの匿名性を確認する。閾値ｎの匿名性を満たす単語系列５５が複数ある場合には、開示単語判定部６４は、抽出元が重複しない開示単語を含む単語系列５５を選択する（図７）。
【００７５】
匿名化処理部６５は、匿名化処理部６５によって判定された開示単語系列群５７を用いて、ログデータ５１内の単語系列５５の所定文字列［ＧＡＰ］に相当する文字列を、トークン化による置換方法で他の文字列に置換する。ログデータ５１が匿名化された匿名化済データ５２が補助記憶部１３に記憶される。
【００７６】
次に、データ匿名化装置１００によって行われるデータ匿名化処理について図９で説明する。図９は、データ匿名化処理を説明するためのフローチャート図である。図９において、ユーザー端末４からログデータ５１と閾値ｎの入力を受け付けて（ステップＳ１０）、単語分割部６１は、ログデータ５１から判定用ログデータ５９（図１０）を作成し（ステップＳ１１）、各判定用ログデータ５９を単語毎に分割する（ステップＳ１２）。判定用ログデータ５９の作成については、図１０で説明される。
【００７７】
単語系列列挙部６２は、単語分割した判定用ログデータ５９から、非隣接箇所を所定文字列［ＧＡＰ］で置き換えた単語系列５５を全て列挙する（ステップＳ１３）。全ての単語系列５５を示す単語系列一覧５６が補助記憶装置１３に記憶される。そして、単語系列ソート部６３は、単語系列列挙部６２が列挙した単語系列５５をソートする（ステップＳ１４）。単語系列一覧５６がソートされる。
【００７８】
開示単語判定部６４は、ソートした単語系列Ｓｉ（ｉ＝０〜ｋ）（各単語系列５５）の全てに対して、ステップＳ１７及びＳ１８を繰り返す（ステップＳ１７）。単語系列一覧５６から順に単語系列Ｓｉが読み込まれ、以下の処理が行われる。
【００７９】
開示単語判定部６４は、単語系列Ｓｉが判定用ログデータ５９に対して閾値ｎを満たすか否かを判定する（ステップＳ１６）。閾値ｎを満たさない場合、次の単語系列Ｓｉ+１を読み込むためステップＳ１５へと戻り上述同様の処理を繰り返す。
【００８０】
一方、閾値ｎを満たす場合、開示単語判定部６４は、判定用ログデータ５９から単語系列Ｓｉを含む行を削除し（ステップＳ１７）、開示単語系列群５７に単語系列Ｓｉを追加する（ステップＳ１８）。
【００８１】
閾値ｎの匿名性を満たす単語系列Ｓｉが複数ある場合には、開示単語判定部６４は、抽出元が重複しない開示単語を含む単語系列Ｓｉを選択して（図７）、ステップＳ１７及びＳ１８の処理を行うことが望ましい。
【００８２】
単語系列一覧５６に存在する全ての単語系列Ｓｉについて処理を終えると、匿名化処理部６５による匿名化処理が行われる。
【００８３】
匿名化処理部６５は、ログデータ５１の各行Ｌｉ（ｉ＝０〜ｍ）の全てに対して、ステップＳ１９〜Ｓ２３を繰り返す（ステップＳ１９）。ログデータ５１の先頭行から順に１行が読み込まれる。匿名化処理部６５は、更に、開示単語系列群５７の各単語系列Ｐｊ（ｊ＝０〜ｒ）に対して、ステップＳ２１〜Ｓ２３を繰り返す（ステップＳ２０）。開示単語系列群５７から順に１つの単語系列Ｐｊが読み込まれる。
【００８４】
匿名化処理部６５は、行データＬｉが単語系列Ｐｊを含むか否かを判断する（ステップＳ２１）。、行データＬｉが単語系列Ｐｊを含む場合、匿名化処理部６５は、行データＬｉ内の単語系列Ｐｊ以外の単語を置換して、匿名化済ログデータ５２に追加する（ステップＳ２２）。この場合、匿名化処理部６５は、開示単語系列群５７の各単語系列Ｐｊの繰り返し処理を終了し、次の行データＬｉ+１に対する処理を行う。
【００８５】
一方、行データＬｉが単語系列Ｐｊを含まない場合、匿名化処理部６５は、次の単語系列Ｐｊ+１を取得して、上述した同様の処理を行う。全ての単語系列Ｐｊに対して置換処理を終了した場合、次の行データＬｉ+１をログデータ５１から取得して上述した同様の処理を行う。
【００８６】
ログデータ５１の全ての行データＬｉに対して置換処理が終了すると、匿名化済ログデータ５２が補助記憶部１３に出力される（ステップＳ２３）。匿名化済ログデータ５２は、閲覧者５の閲覧者端末５へ送信可能な状態となる。
【００８７】
図１０は、ログデータから作成された判定用ログデータの例を示す図である。図１０では、ユーザーＡ、Ｂ、Ｃのログデータ５１に基づく判定用ログデータの一例として判定用ログデータ５９を示している。
【００８８】
判定用ログデータ５９は、ユーザー名とログデータ５１の１行の２つを組み合わせた形式で作成される（ステップＳ１１）。ユーザー名は、ユーザー端末４のログ処理部がログデータ５１をデータ匿名化装置１００に送信する際に通知される情報であり、ユーザー端末４に設定されたユーザー名等であればよい。ユーザー名として、端末を特定できるＩＰアドレス等のユーザー端末４に固有の情報であってもよい。
【００８９】
判定用ログデータ５９は、ログデータ５１の各行毎に、ユーザー名が先頭に付加されて作成される。
【００９０】
ユーザーＡのログデータ５１が、
name = db . path=c:/data
isActive = false
である場合、１行毎にユーザー名が付加され、
ユーザＡ  name = db . path=c:/data
ユーザＡ  isActive = false
このような２つの判定用ログデータ５９が作成される。従って、判定用ログデータ５９は、ユーザー名を示すユーザー名部分５９ｕと、ログデータ５１の１行分を示すログ部分５９ｄとを有する。
【００９１】
ユーザーＢ及びＣについても同様である。この例では、１行毎に判定用ログデータ５９が作成されるが、２行毎、又は、３行以上の単位で判定用ログデータ５９を作成してもよい。
【００９２】
単語分割部６１は、複数のユーザー７のログデータ５１から判定用ログデータ５９を生成し、生成した各判定用ログデータ５９のログ部５９ｄを文字種で分割し、文字種間に区切り文字「，」を挿入した文字列を作成する（ステップＳ１２）。
【００９３】
単語系列列挙６２は、単語分割部６１によって作成された文字種間に区切り文字「，」が挿入された文字列に対して、閾値ｎを満たす開示単語を抽出し、開示単語の組を示す開示単語セット５１ｔを作成する。
【００９４】
単語系列列挙６２は、作成した開示単語セット５１ｔ毎に、ログ部５９ｄの文字種間の隣接又は非隣接を判定し、隣接と非隣接の組み合せた単語系列５５を全て作成する（ステップＳ１３）。
【００９５】
図１１は、開示単語セットから作成した単語系列一覧のデータ例を示す図である。図１１に示す単語系列一覧５６は、ユーザーＡ、Ｂ、及びＣを含む複数のユーザー７のログデータ５１を収集した場合で示している。図１１では、ソート後の単語系列一覧５６を示している（ステップＳ１４）。
【００９６】
単語系列一覧５６において、例えば、開示単語セット５１ｔが{name,=,db}の場合、１４個の単語系列一覧５６−１が作成された例を示している。開示単語セット５１ｔが{name,=,.,path,=,:,/}の場合の一例として、単語系列一覧５６−２{name,=,[GAP],.,path,=, [GAP],:,/,[GAP]}を示している。
【００９７】
次に、開示単語判定部６４による、匿名化処理の前に匿名化後においても閾値ｎを満たす開示単語列を判定する開示単語判定処理について説明する。図１２は、開示単語判定処理を説明するための図である。閾値ｎ＝２が与えられているとする。
【００９８】
図１２において、開示単語判定部６４は、図１１に示すような単語系列一覧５６から１つずつ単語系列Ｓｉを読み出して、判定用ログデータ５９のログ部５９ｄから、読み出した単語系列Ｓｉと、開示単語と非隣接箇所とで表されるパターンが一致するデータを抽出する（ステップＳ３１）。
【００９９】
図１２の例では、単語系列Ｓｉが{name,=,[GAP],.,path,=, [GAP],:,/,[GAP]}の場合に、抽出された判定用ログデータ５９の例が示される。文字９ｐが非隣接箇所に相当し、単語系列Ｓｉ内の所定文字列［ＧＡＰ］の出現位置と一致する場合に抽出される。
【０１００】
開示単語判定部６４は、抽出した判定用ログデータ５９が閾値ｎの匿名性を満たすか否かを判定する（ステップＳ３２）。開示単語判定部６４は、ユーザー名部分５９ｕを参照して、ユーザー７の人数をカウントして、閾値ｎ以上の値を示すか否かを判断する。この例では、ユーザーＡ、Ｂ、及びＣの異なる３人をカウントし、閾値ｎ＝２を満たす。従って、開示単語判定部６４は、{name,=,[GAP],.,path,=, [GAP],:,/,[GAP]}は、閾値ｎ＝２の匿名性を満たすと判断する。
【０１０１】
閾値ｎ＝２の匿名性を満たすと判断した場合、開示単語判定部６４は、複数の判定用ログデータ５９から抽出した判定用ログデータ５９を削除する（ステップＳ３３）。
【０１０２】
そして、開示単語判定部６４は、単語系列一覧５６から次の単語系列Ｓｉ+１を読み出して、上述同様の処理を繰り返す。単語系列一覧５６の最後の単語系列Ｓｉとの照合が終了すると、開示単語判定部６４による開示単語判定処理は終了する。
【０１０３】
上述した開示単語判定処理によって、少なくとも{name,=,[GAP],.,path,=, [GAP],:,/,[GAP]}を含む開示単語系列群５７が補助記憶装置１３に出力される。{name,=,[GAP],.,path,=, [GAP],:,/,[GAP]}を一例として、図１９のステップＳ１９からＳ２２における匿名化処理部６５による匿名化処理について図１３で説明する。
【０１０４】
図１３は、匿名化処理を説明するための図である。図１３において、匿名化処理部６５は、ログデータ５１から、判定用ログデータ５９の作成時と同一の行単位でデータ（行データＬｉ）を順に読み込む（ステップＳ１９）。ここでは、１行単位で読み込むものとする。
【０１０５】
匿名化処理部６５は、ログデータ５１から読み込んだ行データＬｉを、開示単語系列群５７の各単語系列Ｐｊと照合して、行データＬｉが単語系列Ｐｊを含むか否かを判断する（ステップＳ２１）。
【０１０６】
行データＬｉは「name = db . path=c:/data」であり、単語系列Ｐｊは{name,=,[GAP],.,path,=, [GAP],:,/,[GAP]}である場合、「name = db . path=c:/data」が{name,=,[GAP],.,path,=, [GAP],:,/,[GAP]}のパターンを含むか否かが判断される。この例では、行データＬｉは、単語系列Ｐｊを含むと判断される。
【０１０７】
匿名化処理部６５は、トークン化による置換方法により、行データＬｉを匿名化する（ステップＳ２２）。匿名化処理部６５は、行データＬｉにおいて所定文字列［ＧＡＰ］に相当する文字列部分を別の文字列に置き換える。
【０１０８】
例えば、文字列「db」は別の文字列「tok01」に置き換えられ、文字列「c」は別の文字列「tok02」に置き換えられ、文字列「data」は別の文字列「tok03」に置き換えられる。そして、匿名化処理部６５は、非隣接箇所の文字列が置換られた行データＬｉを匿名化済ログデータ５２に追加する。
【０１０９】
全ての行データＬｉについて処理を終えると、匿名化処理部６５は、匿名化済ログデータ５２を出力する（ステップＳ２３）。閾値ｎ＝２の匿名性を満たす匿名化済ログデータ５２が出力され、外部機関等の閲覧者５へ提供可能となる。
【０１１０】
上述したように、本実施例では、匿名化処理の前に、匿名化後において条件とされたユーザー数以下を特定できないことを確認して、開示する単語を決定する。従って、開示単語以外の文字列を置き換え後においても、指定されたユーザー数以上で匿名性を確保することができる。
【０１１１】
本発明は、具体的に開示された実施例に限定されるものではなく、特許請求の範囲から逸脱することなく、主々の変形や変更が可能である。
【０１１２】
以上の実施例を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
複数ユーザーに関するデータの中から、指定数以上の前記ユーザーのデータに含まれ、且つ、開始から同じ順序で出現する単語の組み合せを抽出する抽出部と、
前記複数ユーザーに関する前記データの、前記抽出部によって抽出された前記単語に含まれない文字列を所定文字列に置換する加工を行う置換加工部と、
前記置換加工部によって加工された前記データが前記指定数以上のユーザーで匿名性を満たすか否かを検証する検証部と、
前記置換加工部によって加工された前記データが匿名性を満たす場合、加工前の前記データを、前記所定文字列の位置に応じて匿名化する匿名化処理部と
を有するデータ匿名化装置。
（付記２）
前記置換加工部は、
前記データにおいて、前記組み合わされた前記単語間が互いに隣接しない箇所を前記所定文字列で置き換える
ことを特徴とする付記１記載のデータ匿名化装置。
（付記３）
前記置換加工部は、前記データを加工することで、前記組み合わされた前記単語と前記所定文字列とでなる複数の単語系列を作成し、
前記検証部は、前記指定数以上のユーザーの前記データに前記複数の単語系列のうち２以上が出現する場合、出現した該単語系列同士において抽出元の重複の無い単語系列を選択する
ことを特徴とする付記２記載のデータ匿名化装置。
（付記４）
前記抽出部は、前記データを、所定行数単位で前記単語の組み合せを抽出することを特徴とする付記３記載のデータ匿名化装置。
（付記５）
複数ユーザーに関するデータの中から、指定数以上の前記ユーザーのデータに含まれ、且つ、開始から同じ順序で出現する単語の組み合せを抽出し、
前記複数ユーザーに関する前記データの、前記抽出された単語に含まれない文字列を所定文字列に置換する加工を行い、
加工された前記データが前記指定数以上のユーザーで匿名性を満たすか否かを検証し、
加工された前記データが匿名性を満たす場合、加工前の前記データを、前記所定文字列の位置に応じて匿名化する
処理をコンピュータに実行させるデータ匿名化プログラム。
（付記６）
複数ユーザーに関するデータの中から、指定数以上の前記ユーザーのデータに含まれ、且つ、開始から同じ順序で出現する単語の組み合せを抽出し、
前記複数のユーザーに関する前記データの、前記抽出された単語に含まれない文字列を所定文字列に置換する加工を行い、
加工された前記データが前記指定数以上のユーザーで匿名性を満たすか否かを検証し、
加工された前記データが匿名性を満たす場合、加工前の該データを、前記所定文字列の位置に応じて匿名化する
処理をコンピュータが行うデータ匿名化方法。
【符号の説明】
【０１１３】
４            ユーザー端末
５            閲覧者
６            閲覧者端末
７            ユーザー
１１          ＣＰＵ
１２          主記憶装置
１３          補助記憶装置
１４          入力装置
１５          表示装置
１７          通信Ｉ／Ｆ
１８          ドライブ装置
１９          記憶媒体
５１          ログデータ
５１ｔ        開示単語セット
５１ｇ        パターン
５２          匿名化済ログデータ
５５          単語系列
５６          単語系列一覧
５７          開示単語系列群
６０          開示単語系列抽出部
６１          単語分割部
６２          単語系列列挙部
６３          単語系列ソート部
６４          開示単語判定部
６５          匿名化処理部
【図１】
2016115112.tif 000003
【図２】
2016115112.tif 000004
【図３】
2016115112.tif 000005
【図４】
2016115112.tif 000006
【図５】
2016115112.tif 000007
【図６】
2016115112.tif 000008
【図７】
2016115112.tif 000009
【図８】
2016115112.tif 000010
【図９】
2016115112.tif 000011
【図１０】
2016115112.tif 000012
【図１１】
2016115112.tif 000013
【図１２】
2016115112.tif 000014
【図１３】
2016115112.tif 000015