説明

難読化された値の生成

データを難読化する方法は、データソースからの複数のレコードの一または複数のフィールドに生じる値を読み込むこと(210)、キー値を保存すること(220)、複数の前記レコードのそれぞれについて、前記レコードの所定のフィールドのオリジナル値を置き換えるための難読化された値を、前記キー値を用いて、前記難読化された値が前記キー値に依存し且つ前記オリジナル値に決定論的に関連するように、生成すること(230)、および、データストレージシステム内の難読化された値を含むレコードを含む難読化された値の前記コレクションを保存すること(240)を含む。

【発明の詳細な説明】
【関連する出願の相互参照】
【0001】
本出願は、2009年6月1日に出願された米国出願No.61/183,054、および、2009年7月2日に出願された米国出願No.12/497,354、に基づく優先権を主張するものであり、その内容はここに参照として取り込まれる。
【背景技術】
【0002】
本記載は、難読化された値の生成に関連する。
多くの企業において、ソフトウェア開発者は、製造環境の外(例えば、実際の顧客データが処理されている環境)にて働き、セキュリティ上の理由から製造データにアクセスすることができない。しかし、彼らがアプリケーションが製造データと共に正常に動作することを確実にするため、彼らは開発の途中にて現実のテストデータを必要とする場合があり、入力製造データのセットは機密情報が残ることがないように難読化される場合があり、難読化されたデータはテストデータとして使用されるべく保存される場合がある。難読化されたデータに要求される事項は、プロジェクトおよび開発者、組織のプライバシーポリシー、および、それが用いられることになる国の法令にさえも応じて、非常に異なる。例えば、データの難読化は、名前、住所、誕生日、社会保障番号、ならびに、クレジットカード番号および銀行口座番号のような個人情報の置換または変換を含む場合がある。
【発明の概要】
【0003】
一の態様において、一般に、データを難読化する方法は、データソースからの複数のレコードの一または複数のフィールドに生じる値を読み込むこと、キー値を保存すること、複数の前記レコードのそれぞれについて、前記レコードの所定のフィールドのオリジナル値を置き換えるための難読化された値を、前記キー値を用いて、前記難読化された値が前記キー値に依存し且つ前記オリジナル値に決定論的に関連するように、生成すること、および、データストレージシステム内の難読化された値を含むレコードを含む難読化された値の前記コレクションを保存すること、を含む。
【0004】
いくつかの態様には、後述する特性の一または複数が含まれ得る。
【0005】
前記方法が、前記フィールドの少なくとも1つの値を特徴付ける統計を含むプロファイル情報を保存することを更に含む。
【0006】
前記難読化された値が、前記キー値および前記所定のフィールドに対して前記保存されたプロファイル情報を用いて生成される。
【0007】
前記難読化された値が、難読化されたデータのコレクションの前記所定のフィールドにおいて、前記所定のフィールドの値を特徴付ける前記保存されたプロファイル情報における統計に基づいて定められる頻度にて、生じる。
【0008】
前記難読化された値が、前記オリジナル値と前記キーとをインデックス値を生成する関数への入力として用いるとともに、前記インデックス値を難読化された値の所定のセットにおいて前記難読化された値をルックアップするために用いることにより、生成される。
【0009】
前記所定の難読化された値のセットが、各々の難読化された値が一または複数のインデックス値に対応しているルックアップテーブルとして保存されている。
【0010】
難読化された値の前記所定のセットにおいて同じ難読化された値に対応する範囲内の複数のインデックス値。
【0011】
前記範囲の前記サイズが、前記所定のフィールドの値を特徴付ける前記保存されたプロファイル情報における前記統計に基づく。
【0012】
前記レコードの所定のフィールドのオリジナル値を置き換えるために前記キー値を用いて難読化された値を生成することは、前記オリジナル値と、前記難読化された値を選択するために用いられる選択値を生むための決定論的な関数を用いる前記キーと、を結合すること、を含む。
【0013】
前記選択値が、決定論的なマッピングを用いる前記難読化された値にマップされる。
【0014】
値のドメインから前記難読化された値が選択されることになるドメインが、前記データソースからの前記レコードの前記所定のフィールドにおける前記オリジナル値の複数を含む。
【0015】
一または複数の前記オリジナル値が、値の前記ドメインに含まれていない。
【0016】
前記ドメインの一または複数の前記値が、前記オリジナル値に含まれていない。
【0017】
前記決定論的な関数が、前記キーを用いて、前記難読化された値から前記オリジナル値を復元することを暗号的に妨げる。
【0018】
前記決定論的な関数が、前記キーの異なる値についての連続的なオリジナル値に対し、選択値の異なるシーケンスを提供する。
【0019】
前記キーの第1の値についての連続するオリジナル値についての選択値の第1のシーケンスが、前記キーの第2の値についての連続するオリジナル値についての選択値の第2のシーケンスから予測できない。
【0020】
前記キー値を用いて前記レコードの前記所定のフィールドの前記オリジナル値を置き換えるための前記難読化された値を生成することが、前記選択値が有効な難読化された値に対応するか否かを判定すること、および、もし違うなら前記選択値と前記追加の選択値が有効な難読化された値と対応するまで追加の選択値を生成する前記決定論的な関数を用いる前記キーとを繰り返し組み合わせること、を含む。
【0021】
有効な難読化された値が、所定の桁数からなる。
【0022】
前記データソースからの前記レコードをレコードの複数のセットに区切り、前記所定のフィールドの前記オリジナル値をレコードの異なるセットのレコードにおける前記生成された難読化された値に異なる計算リソースを用いて並行して置き換えること、を更に含む

【0023】
難読化されたデータの前記コレクションにおける難読化された値を含む少なくとも第1のレコードが、前記難読化された値に置き換えられてない少なくとも1つのオリジナル値を含む。
【0024】
前記第1のレコードのオリジナル値が、前記オリジナル値が前記オリジナル値が生じる複数のレコードに対して同一の難読化された値と常に置き換えられるか否かに基づいて前記キー値を用いて難読化された値に置き換えられるか否かを判定すること、を更に含む。
【0025】
他の態様において、一般に、値を難読化するシステムは、一または複数のフィールドにおける値を有するレコードを提供するデータソースと、データストレージシステムと、実行環境を提供する前記データストレージシステムと接続される一または複数のプロセッサであって、前記実行環境は、前記データソースからの複数のレコードの一または複数のフィールドにおいて生じる値を読み込み、キー値を保存し、複数の前記レコードのそれぞれについて、前記レコードの所定のフィールドのオリジナル値を置き換えるための難読化された値を、前記キー値を用いて、前記難読化された値が前記キー値に依存し且つ前記オリジナル値に決定論的に関連するように、生成し、および、データストレージシステム内の難読化された値を含むレコードを含む難読化された値の前記コレクションを保存する、ためのものである、プロセッサと、を含む。
【0026】
他の態様において、一般に、値を難読化するシステムは、一または複数のフィールドにおける値を有するレコードを提供するデータソースと、データストレージシステムと、前記データソースからの複数のレコードの一または複数のフィールドにおいて生じる値を読み込む手段と、複数の前記レコードのそれぞれについて、前記レコードの所定のフィールドのオリジナル値を置き換えるための難読化された値を、前記キー値を用いて、前記難読化された値が前記キー値に依存し且つ前記オリジナル値に決定論的に関連するように、生成する手段と、データストレージシステム内の難読化された値を含むレコードを含む難読化された値の前記コレクションを保存する手段と、を含む。
【0027】
他の態様において、一般に、コンピュータ読み取り可能な媒体は、データを難読化するためのコンピュータプログラムを格納する。前記コンピュータプログラムは、前記データソースからの複数のレコードの一または複数のフィールドにおいて生じる値を読み込むこと、キー値を保存すること、複数の前記レコードのそれぞれについて、前記レコードの所定のフィールドのオリジナル値を置き換えるための難読化された値を、前記キー値を用いて、前記難読化された値が前記キー値に依存し且つ前記オリジナル値に決定論的に関連するように、生成すること、および、データストレージシステム内の難読化された値を含むレコードを含む難読化された値の前記コレクションを保存すること、をコンピュータに実行させる命令を含む。
【0028】
態様は、一または複数の後述される効果を有する。
【0029】
難読化された値とオリジナルの実際の値との間に決定論的な関係が存在するので、参照完全性を難読化の行程中に保つことができ、難読化されたデータはプロダクションデータとして要求される参照完全性と同等の参照完全性を満たすことができる。難読化の処理は、難読化された値への処理が、例えば「ジョイン」処理におけるキー当たりの数値の数のような特性を保つことを確保できる。所定の難読化された値と対応するオリジナル値との間の決定論的な関係は、保存されたキー値の関数であり、他の難読化された値に依存しないので、難読化は、データセットの異なる部分にてそれら部分間の関係性を保ちながら並行して実行することができる。難読化のプロセスは、権限のない第三者が難読化されたデータをリバースエンジニアリングし、プロダクションデータからオリジナル値を取り出すことを妨げる。レコードフォーマット、可能な値の範囲、静的特性、および、難読化されたデータの一般のプロファイルは、出来る限り厳密にマッチすることができる。例えば、クレジットカード番号は検査数字を用いるので、難読化されたデータはその検査数字のために正しく計算された値を有していもよい。もしオリジナルデータが誤記および不整合を有していると、難読化されたデータは、同じまたは同様の種類の不整合をエラーハンドリングをテストするために持つことができる。名前(すなわち、姓および名)および住所のような値に対して、難読化されたデータにおける定の値の頻度は、プロダクションデータにおけるそれらの頻度を反映することができる。
【0030】
以下、本発明の一または複数の実施形態の詳細について、図面および記述とともに説明する。本発明の他の特性、目的および利点は、同記述、同図面および請求の範囲から理解され得る。
【図面の簡単な説明】
【0031】
【図1】グラフベース計算を実行するシステムのブロック図である。
【図2】データ難読化手順の一例のフローチャートである。
【図3】データ難読化手順のための決定論的なマッピングの概略図である。
【図4】データ難読化のデータフロー図の一例である。
【図5】ルックアップテーブルの一例である。
【図6】擬似ランダム順列の一例を有するテーブルである。
【図7】有効な難読化された値を生成する手順の一例を有するテーブルである。
【発明を実施するための形態】
【0032】
図1を参照すると、難読化されたデータをプログラム開発のために用いるシステム100は、ストレージデバイスまたはオンラインデータストリームへの接続(それら各々が、種々の保存形式(例えば、データベーステーブル、スプレッドシートファイル、ふらっとテキストファイル、または、メインフレームにて用いられるネイティブフォーマット)にてデータを保存し得る。)のような一または複数のデータのソースを含み得るデータソース102を含む。難読化されたデータを生成するための実行環境104は、データプロファイリングモジュール106およびデータ難読化モジュール112を含む。実行環境104は、好適なオペレーティングシステム(UNIX(登録商標)オペレーティングシステムのような)のコントロール下にある一または複数の汎用コンピュータにホストされ得る。例えば、実行環境108は、ローカルに(例えば、SMPコンピュータのようなマルチプロセッサシステム)、ローカルに分散されて(例えば、クラスタまたはMPPsとして結合された複数プロセッサ)、リモートに分散されて(例えば、LANまたはWANネットワークを介して結合された複数プロセッサ)、または、それらの任意の組み合わせであるように、複数の中央演算装置(CPUs)を用いるコンピュータシステムのコンフィグレーションを含む複数ノード並行計算環境を含むことができる。
【0033】
データプロファイリングモジュール106はデータソース102からデータを読み込み、データソース102にて生じるデータ値の種々の特性を記述したプロファイル情報を保存する。データソース102を提供するストレージデバイスは、実行環境104についてローカルであってもよく(例えば、実行環境104を実行しているコンピュータに接続されたストレージ媒体(例えば、ハードドライブ108)に保存されてもよく)、または、実行環境104にリモートされてもよい(例えば、リモートシステム(例えば、メインフレーム110)に実行環境104を実行しているコンピュータとローカルまたは広域データネットワークを介して通信してホストされてもよい)。
【0034】
データ難読化モジュール112は、データプロファイリングモジュール106によって生成されるプロファイル情報を用いて実行環境104にアクセス可能なデータストレージシステム116に保存された難読化データ114のコレクションを生成する。データストレージシステム116は、開発者120が難読化データ114を用いてプログラムを開発しテスト可能な開発環境118にもアクセス可能である。しかし、データソース102内のオリジナルのプロダクションデータは、開発者120がアクセス不可に保つことによって安全性を保つことができる。開発環境118は、いくつかの実装において、頂点間の有向リンク(ワークエレメントのフローを表す。)によって接続された頂点(コンポーネントまたはデータセット)を含むデータフローグラフとしてのアプリケーションの開発のためのシステム、である。例えば、そのような環境は、米国公開2007/0011668号公報「グラフベースアプリケーションのパラメータマネージング」により詳細に記載されており、その内容は参照としてここに取り込まれる。
【0035】
データプロファイリングモジュール106は、データベースシステムの異なる型を含む種々のシステムの型からデータをプロファイルすることができる。データは、それぞれのフィールド(「属性」または「コラム」とも称呼される。)の値を有するレコード(NULL値を含み得る。)として整理されてもよい。プロファイル情報は、異なるフィールドについての個別のプロファイル(それらフィールドにて生じる値を記述する「フィールドプロファイル」と称呼される。)を提供するように整理できる。データソースからデータが最初に読み込まれたとき、データプロファイリングモジュール106は、典型的には、そのデータソースのレコードについての初期フォーマット情報から始まる(いくつかのデータソースのレコード構造が最初に知られておらず、代わりにデータソースの分析の後に決定されるいくつかの環境にも留意。)。レコードについての初期情報は、特有の値、レコードのフィールドの順序、および、ビット数によって表される値の型(例えば、文字列、符号付き/符号なし整数)を表すビット数を含むことができる。データプロファイリングモジュール106がデータソースからレコードを読み込んだとき、統計および所定のフィールドの値を反映する他の記述的情報(例えば、特定の値の頻度)を計算する。データプロファイリングモジュール106は、それら統計および特有の値をデータ難読化モジュール112によるアクセスに関してフィールドプロパティの型で保存する。プロファイル情報はデータソース102のレコードの複数のフィールドと関連付けられた情報(例えば、レコードの全ての数、有効または無効なレコードの全数)を含むことができる。例えば、データソースのフィールドをプロファイルすることについてプロセスについてのひとつの記述は、「データプロファイリング」との名称の公開(2005/0112369号公報と、により詳細に記載されている。)、その内容は参照としてここに取り込まれる。
【0036】
図2は、データ難読化手順200の一例のフローチャートを表す。手順200は、データソースからの複数のレコードの一または複数のフィールドに生じる値の読み込み(210)を含む。オプションとして、少なくとも一つの値を特徴付ける統計を含むプロファイル情報が保存される(例えば、詳細は後述されるように、プロファイル情報における統計に対応するインデックス値の範囲にて決定された難読化された値を伴うテーブル)。手順200は、難読化が容易に解読されないことを確保するセキュリティを提供する暗号化技術とともに用いられキー値の保存220を含む。複数のレコードの各々について、手順200は、難読化された値の生成230を行い、所定のフィールドのオリジナル値を、キー値を用いて、難読化された値がキー値に依存し且つ決定論的にオリジナル値に関連するように置き換える。もしも保存されたプロファイル情報が用いられると、難読化された値は、保存されたプロファイル情報に基づいて定まる頻度にて、難読化されたデータのコレクションにおいて生じる。手順200は、レデータストレージシステムにおける難読化された値を含むレコードを含む難読化されたデータのコレクションの保存(240)を含む。
【0037】
いくつかの実装において、データ難読化手順200は、新しいソースが入手可能である毎に、または、新しいレコードが既存のソースに受け取られる毎に、繰り返される。手順は、ユーザによって呼び出し可能、または、繰り返しインターバルにて又は所定のイベントに応じて自動的に呼び出し可能である。
【0038】
難読化へのいくつかのアプローチにおいて、他のアプローチにおいて難読化プロセスを解読し難読化された値を実際の値に戻すように照合する性能を有することは役に立つ一方、実際のプロダクションデータを難読化する性能は十分であり得る。手順200に示されるようないくつかのアプローチにおいて、例えば、詳細は後述される保存された秘密キーおよび暗号化技術を用いて、難読化プロセスが解読されて実際の値が取得されないことを確保することは有益である。
【0039】
難読化された値の一貫性ある割り当ては、いくつかのケースにて有益である。例えば、特定のカスタマにそれぞれが関連する異なるトランザクションに対応するレコードを含むトランザクションデータは、所定の実際のカスタマIDについての全てのトランザクションが同一の難読化されたカスタマIDに割り当てられるように、あらかじめ難読化されたカスタマIDに一致する必要がある。他の例において、同じ世帯からのデータベースにおけるカスタマは、同じ住所を共有し得る。それらカスタマについての難読化されたデータレコードは同じ難読化された住所を有することが望ましい。もしも難読化されたデータが人間に読まれ理解される必要があるならば、単にそれら値を任意に生成された値に置き換えるよりも、実際の値をあらかじめ定められた認識可能な値のセットから選択される値に置き換えることが望ましい。所定の値と対応する難読化された値との間の一貫性ある割り当てを確実にするための方法には、種々の方法がある。
【0040】
一つのアプローチにおいて、所定の値がエンカウントされた初回にて、難読化された値は、あらかじめ定められたセットからランダムに選択され、その所定の値にマッピングされる。双方の値は、例えば、マッピングデータ構造において互いに関連付けられて保存される。マッピングデータ構造にすでに保存された所定の値が以降に生じると、同一の対応する難読化された値がデータ構造から検索される。
【0041】
他のアプローチにおいて、上述した手順200のように、既にマッピングされた実際の又は難読化された値がマッピングデータ構造に保存されることが要求されることなく、ランダムに見える決定論的なマッピングを提供するためにキーが用いられる。そして、このキー・ベースのアプローチは、いくつかのケースにおいてストレージスペースを節約し得る。例えば、キーおよび暗号化的に強力なハッシュ関数は、難読化された値を所定のセット(例えば、ルックアップテーブル)から検索するために用いることができる。また、キーおよび擬似ランダム順列アルゴリズムが、難読化された値を計算するために用いることができる。双方のケースにおいて、詳細は後述されるように、キーの使用は、対応をランダムに見せながら、所定の実際の値が常に同一の難読化された値に対応することを確実にする。
【0042】
図3は、入力データセットからのオリジナル値のドメイン310と、それらオリジナル値を置き換える難読化された値のドメイン320と、の間の決定論的なマッピング300を表す。キーkは、キーストレージ330に保存され、参照インテグリティが保たれるべき所定の難読化のセッションにおいて、オリジナル値の全てをそれぞれの難読化された値にマッピングするべく一貫して用いられる。異なるキーは、従前のセッションと参照インテグリティを保つ必要がない別の難読化のセッションにおいて使うことができる。ドメイン310からのオリジナル値v1およびキーkは、組み合わせ関数340を用いて組み合わせられ、選択ドメイン350からの選択値xを生む。値v1およびキーkを入力として扱う数学的な関数または数式のような、値v1とキーkとを組み合わせる任意の決定論的な手法を用いることができる。組み合わせ関数340は、同一の値v1とkが常に同一の値xを生むように、決定論的である。
【0043】
選択値xは、ドメイン320からマッピング関数360(例えば、ルックアップテーブルを用いた決定論的なマッピング)を用いて難読化された値v2にマッピングされる。マッピング関数360も、所定の値xが常に同一の難読化された値v2を生成するように、決定論的である。難読化された値のドメイン320は、オリジナル値のドメイン310のように同じ値のいくつかを含んでもよいが、ドメイン310の値のいくつかが可能な難読化された値としてドメイン320に含まれておらずドメイン320の値のいくつかがドメイン310に含まれていないように、完全にオーバーラップしなくてもよい。例えば、可能な難読化された値(例えば、アドレスフィールドの都市あるいは州、または、名前フィールドの一般名)であることは多くのオリジナル値にとって望ましいが、いくつかの機密情報(例えば、クレジットカード番号、社会保障番号、または、電話番号)は可能な難読化された値からフィルタで除去されてもよい。いくつかのケースにおいては難読化された有効な(例えば、難読化されたデータの有効性テストをサポートするために)社会保障番号を持つことは望ましく、いくつかのケースにおいては難読化された有効ではない(例えば、難読化されたデータが個人情報を漏洩するものではないことを確実にするために)社会保障番号を持つことが望ましい。
【0044】
コンビネーション関数340およびマッピング関数360の一方または双方は、難読化プロセスを解読することを困難にし、対応する難読化された値v2からオリジナル値v1を復元するために暗号化技術を含むことができる。後述される暗号化ハッシュ関数およびキー付き擬似ランダム順列技術について、コンビネーション関数340は、難読化された値v2を選択するためにテーブルのインデックスとして用いられる選択値xを生成するための暗号化技術を組み込んでいる。しかし、他の実装において、コンビネーション関数340は、選択値x(難読化された値v2を提供するハッシュ関数または難読化された値v2をルックアップするためのインデックスのような暗号化ハッシュ関数への入力として用いられる。)を生成するために非暗号化技術(例えば、単なる連結)であり得る。他の決定論的なマッピングは、所定のオリジナル値v1から必ずしも中間の選択値xを計算することなく直接に難読化された値v2を生成してもよい。
【0045】
いくつかの実装において、特定の値を難読化するアプローチはその値の特性に依存し得る。例えば、難読化されることになる入力データセットの所定のフィールドにおけるデータ値は、「limited」または「unlimited」ドメインを持つようにカテゴライズされてもよく、「even」または「uneven」ディストリビューションを持つようにカテゴライズされてもよい。キーベース難読化について、それら特性は、難読化された値がルックアップテーブルから検索されるか、擬似ランダム順列によって計算されるか、を決定するために用いることができる。キーが用いられていないくても、それら特性は、難読化されたデータにおける特定の値の頻度が実際のプロダクションデータにおけるそれらの頻度を反映するかを決定するために用いることができる。
【0046】
所定のフィールドに表され得る可能な値の数が有効な値(例えば、数値または固定長の文字列)のあらかじめ定められたセット内の有限の数に限定されている「limitedドメインデータ」。limitedドメインデータの難読化中、難読化された値が有効な値のあらかじめ定められたセット内にあるか否かを判定するために、有効性チェックが用いられてもよい。「unlimitedドメインデータ」は、可能な値(例えば、任意長の値)のあらかじめ定められたセットを必ずしも持たない。Limitedドメインデータのフィールドの例は、社会保障番号(SSN)、クレジットカード番号(CCN)、カスタマID(Custid)、米国電話番号、および、米国郵便番号を含む。unlimitedドメインデータのフィールドの例は、姓、名、および、住所を含む。
【0047】
「evenディストリビューションデータ」について、異なるデータ値は、ほぼ同程度に似ていると仮定され、一般にデータベースにおいて表される個々人に固有のものであると期待される。「unevenディストリビューションデータ」について、異なる値は、異なる頻度にてデータセットに生じ、データベースにおいて表される異なる個人のレコードにおいて繰り返すであろう。unevenディストリビューションデータの難読化中、詳細は後述されるように難読化されたデータの特定の値の頻度が実際のプロダクションデータにおけるそれらの頻度に対応することを確実にするため、「頻度ルックアップ」関数を用いることができる。社会保障番号、クレジットカード番号、カスタマIDおよび米国電話番号といった上記列挙されたフィールドは、evenディストリビューションデータ(所定のカスタマ対して固有であることを期待される。姓、名、米国郵便番号は、他のカスタマについても繰り返され得るunevenディストリビューションデータのフィールドの例である。)のフィールドの例である。
【0048】
unlimitedドメインデータまたはいくつかのunevenディストリビューションデータについて、有効性チェックは、可能ではないか有効に実行することができない場合がある。そのようなケースにおいて、もしも妥当と思われる値が計算できないならば、ルックアップテーブルを用いることができる。例えば、妥当と思われる名前および住所のルックアップテーブルを、それらフィールドを難読化するために保存することができる。unevenディストリビューションデータについて、難読化された値が現実的にディストリビュートされることを確実にするために頻度ルックアップ関数を用いることができ、または、evenディストリビューションであってunlimitedドメインデータについて、難読化プロセスは値がルックアップテーブルから均一に選択されること確実にすることができる。
【0049】
キーベース難読化は、結果がランダムに見えながら実際には繰り返し可能で予測可能な関数を構築するために暗号化技術を用いる。キーは、実際のデータの所定のセットの難読化のために選択される。もしも難読化されたデータが妥協的でさえあっても、キーなしでは実際の値は難読化されたデータから復元することはできないので、キーはプライベートに保持され、安全な方法で保存されるべきである。所定のキーは、実際の値が複数の実行のときに現れるたびに同一の難読化された値が生成されることを確実にするために、難読化プロセスの複数の実行において使うように保存することができる。キーベース難読化プロセスは、キーベース難読化は必ずしも過去に用いられた実際の値と難読化された値とのマッピングデータ構造を保持する必要がないため、複数のデータセットまたは単一のデータセットの複数の部分において並列に実行することができる。例えば、データセットのレコードは、レコードの複数のセットに区分けでき(例えば、カスタマIDのような所定のフィールドに基づいて)、難読化された値の生成と置換は、異なる計算リソース(例えば、異なるプロセッサまたは異なるコンピュータ)を用いてレコードの異なるセットにおいて並列に実行できる。所定のフィールドへのキーベース難読化を行うための特定の技術は、そのフィールドのデータ値の特性に依存する。
【0050】
・Limitedドメインおよびevenディストリビューションのデータについて、値は、キーおよび擬似ランダム順列アルゴリズムを用いて計算される。同一のキーは、複数の実行での使用のために保存される。難読化された値の有効性は、一または複数の有効性関数を用いて確実にされる。
【0051】
・Unlimitedドメインデータまたはunevenディストリビューションデータについて、値は、キーおよび暗号化ハッシュ関数を用いてルックアップテーブルから検索される。同一のキーおよびルックアップテーブルは、複数の実行での使用のために保存される。難読化された値の有効性は、ルックアップテーブルにおける値が有効であることを確実にすることで確実にされる。
【0052】
図4を参照すると、データフローグラフ400の一例は、入力としてのカスタマデータセット402への難読化プロセスを実行する。データセット402のレコードは、読み込まれ、レコードのフローとしてのグラフにおける要素に提供される。難読化を実行するためにデータフローグラフを用いることにより、システム100は、データ難読化プロセスを任意の種々の追加のデータフロー処理に結合させることができ、グラフの任意の要素の実行のために並列計算技術を用いることができる。グラフ400は、入力ポートにて受け取った所定のレコードを所定のフィールドにおける実際の値を難読化された値に置き換えることによってリフォーマットし、出力ポートにてリフォーマットしたレコードを出力する一連の「Reformat」要素を含む。難読化されることになるカスタマデータセット402における複数のフィールド(後エバ、レコードの全てのフィールド、レコードにおけるフィールドの選択されたサブセット)のそれぞれについて、リフォーマット要素が1つある。この例において、難読化されることになる6つのフィールドがある。姓、名、住所、SSN、CCNおよびCustidである。要素404は、姓フィールドの難読化を取り扱い、要素406は住所フィールドの難読化を取り扱い、要素408は住所フィールドの難読化を取り扱い、要素410はSSNフィールドの難読化を取り扱い、要素412はCCNフィールドの難読化を取り扱い、そして、要素414はCustidフィールドの難読化を取り扱う。要素414から出力される難読化されたレコードのフローは、グラフ400の出力として保存される。グラフ400は、詳細は後述される入力データセット402のあるプロパティを特徴付ける情報を保存するデータセット418とも関連付けられる。全てのリフォーマット要素は、グラフ400のパラメータとして保存されている共有のキー値を用いることができる。難読化されたデータセット416のセキュリティは、キーパラメータを秘密に管理することに依存する。キーは、セキュリティ強化のために十分に長く(例えば、12桁あるいは60桁、またはそれ以上)することができる。
【0053】
データセット402からの最初のレコードがある要素にて処理された後または同時に、その要素は、その要素にて取り扱われているフィールドの難読化された値を決定するためにキー無し技術、キー付きテーブルルックアップ技術、または、キー付き擬似ランダム順列技術を用いるか否かを判定する。もしもフィールドが所定のカスタマに関連付けられた異なるレコード間にて一貫して割り当てされる必要がない値(例えば、トランザクション量)を有しており、それが特に機密でなければ、レコードのフィールドの値は、保存されたキー値によらない技術を用いて難読化することができる。例えば、要素は、ランダム値生成関数を用いることができる。もしもフィールドが所定のカスタマに関連付けられた異なるレコード間にて一貫して割り当てられるべき値、および/または、特定のディストリビューション、ドメインまたは有効性テストと対応するべき値、を有しているなら、保存されたキーは、キー付きテーブルルックアップ技術またはキー付き擬似ランダム順列技術の一方を実行するために用いることができる。
【0054】
もしもフィールドがunlimitedドメインまたはunevenディストリビューションな値を有しているなら、要素は、暗号化ハッシュに基づくキー付きテーブルルックアップ技術を用いる。暗号化ハッシュ関数は、インデックス値を計算するために保存されたキー値を用い、インデックス値は可能な難読化された値のテーブルから値をルックアップするために用いられる。暗号化ハッシュはランダムに見える値を生成するので、インデックス(よって、難読化された値)は、ランダムに選択されたように見える。しかし、インデックスは、キー値が知られていれば実際には予測可能であり繰り返し可能である。もしもフィールド値がunevenディストリビューションを有しているなら、要素は、データセット418の一つからのフィールドについての頻度プロファイル情報を用いる「頻度ルックアップ」処理を用いる。
【0055】
例えば、姓、名、住所および米国郵便番号のようなフィールドについて、データセット418は、「頻度」データセットおよび「頻度最大」データセットをそれぞれのフィールドについて含む。頻度最大データセットは、実際の値の所定のフィールドに生じる全ての値の全体のカウントを含み、所定のフィールドについての全体のカウントをルックアップするための頻度ルックアップ処理を可能にする。そのため、各々の頻度最大データセットは、信号全体カウント値を含む。各々の頻度データセットは、オーバーラップしない範囲にてインデックスされたルックアップテーブルを含み、「インターバルルックアップ」関数を用いて所定のインデックス値についての所定のフィールドをルックアップする頻度ルックアップ処理を可能にする。異なるインデックス値が選択されたとき、フィールド値は、実際のデータにおいて生じる頻度に基づいた適切な頻度に選択される。
【0056】
例えば、図5は、姓フィールドについての頻度データセットのルックアップテーブルの例を示す。名前「Norton」が0〜2の範囲におけるインデックス値について選択され、名前「Lee」が3〜10の範囲におけるインデックス値について選択され、名前「Butler」が11のインデックス値について選択されている。範囲のサイズは、プロファイル情報の統計に係る実際のデータにおいて現れる対応する値の頻度に比例する。そのため、もしもインデックス値が等しい可能性にて生じるなら、Name値のそれぞれは実際のデータにて生じるのと同一の頻度にて生じることになる。
【0057】
もしもフィールドがLimitedドメインおよびevenディストリビューションである値を有してるなら、要素は、擬似ランダム数の生成(例えば、Luby−Rackoff擬似ランダム順列ジェネレータ)に基づくキー付き擬似ランダム順列技術を用いる。いくつかの実装において、範囲1,・・・,N(例えば、社会保障番号あたはクレジットカード番号のようなオリジナル値についてのlimitedドメインに対応する範囲の数)の所定のキーおよび入力値について、順列ジェネレータ関数f(k,n)が、ランダムに見える方法における実際の値に関連する難読化された値を生成するために用いられる。例えば、n個の異なる値は、1〜Nの間の整数であるf(k,n)個の異なる値を生成する。nとf(k,n)との関係は決定論的であるが、ランダムに見える(例えば、n個の連続した値は、ランダムに分散したように見えるf(k,n)個の値を生む。)。値kは、k個の異なる値についてのf(k,n)に対してn個の異なるシーケンスを提供するキー値である。キーkの所定の値について、ある値kについてn個の連続する値についてのf(k,n)の値の最終的なシーケンスは、別の値kについてn個の連続する値についてのf(k,n)の値のシーケンスからは予測できない。
【0058】
図6に示されるテーブルは、順列ジェネレータが、f(k,n)の可能な値を、1から20までの間の一連の値nと単一のキー値について1から20の間にて「シャッフル」することができる一例を示す。この例において、1つのシャッフルされた値f(k,n)は、n個の各々の入力値にマッピングされる。入力値とキーとの組み合わせはシャッフルされた値f(k,n)に応じて選択されるので、2つの難読化された値が同一とはならない。図6に示される例は、単純化のために20個のシャッフルされた値を示しているが、より大きいシーケンスを生成することもできる。
【0059】
以下の例は、図4のデータフローグラフにおけるリフォーマット要素のそれぞれの実装について述べるものである。
【0060】
名フィールドの値を難読化する要素404は、keyed_pick関数を外見上はランダムなインデックスを姓のインターバルルックアップテーブル内に生成するために用いることができる。異なるカスタマの実際の姓が同一であっても異なる難読化された姓を得ることを確実にするために、Custidフィールドをkeyed_pickに渡されるキー値の計算にて用いることができる。これをインターバルルックアップと組み合わせて行うことは、姓の分散統計を保つことができる。この例において、実際のデータにおいて同じ姓を持つ家族のメンバーは、難読化されたデータにおいては異なる姓を割り当てられてもよい。
【0061】
姓フィールドの値を難読化する要素406は、要素404と同様に実装できる。keyed_pick関数は、もしもカスタマが男性または女性であるかを特定するフィールドが実際のデータに存在すれば、男性と女性との名を区別することができる。代わりに、その関数は、例えば、追加のルックアップテーブルを用いて「良い推測」を行うことができる。
【0062】
住所フィールドの値を難読化する要素408は、外見上はランダムなインデックスを2つのインターバルルックアップテーブル(1つは郵便番号、都市、および州を格納し、1つは家番号および通りの名前)内に生成するkeyed_pick関数を用いる。インデックスは、キーが知られていれば予測し得る。より機密な情報を引き出すことをより困難にするためには、要素は、郵便番号と通りの名前とを別々に選択することができ、1600 Pennsylvania Avenue,Lexington,MA 02421のような実在しない住所を構築してもよい。代わりに、住所が有効であるべきアプリケーションについて、要素は、通りの名前および郵便番号を同時に選択するように構成することができる。家番号が所定の通りに対して非現実的に大きくならないことを確実にするため、要素は、選択される可能な値の制限を設定することができる。
【0063】
SSNフィールドを難読化する要素410は、擬似ランダム順列技術を用いて、有効なSSNに対応する1つの値が見つかるまでの擬似ランダムな9桁の番号を選択する。要素410は、各々の難読化された値が固有であることを図7に示される技術を用いて確実にすることもできる。単純化のため、図7における値は、古い番号は9桁であって有効なSSNではないが、有効なSSNを表すと仮定する。上述したように、擬似ランダム順列技術は、順列ジェネレータ関数を用いて所定のフィールドについて可能な値を「シャッフル」することができる。図7に示される最初の2列は、どのようにSSNがシャッフルされ得るかを表す。三列目は、有効なSSNが出力されることを確実にするために必要な回数だけSSNを検証する呼び出し関数の結果を表す。
【0064】
テーブルにおける矢印は、ステップの手順を表す。
【0065】
a.各々の入力SSNについて(第1行に表示)、encode_ssn関数は、第2行の同じ列におけるシャッフルされた値を割り当てる。
【0066】
b.もしも第2行の選択された値がeven(有効)であれば、難読化された値として、有効な出力値(第3行に表示)に書き出されてもよい。もしも第2行の選択された値がodd(無効)であれば、関数は、第1行に戻り、選択された番号を見つけ、第2行の列の値が通行であるか否かをチェックする。
【0067】
c.この手順は、有効な番号が見つかるまで繰り返される。第2行の各番号は第1行の1つの番号だけによって到達することができるので(つまり、第1行から第2行へのマッピングは一対一であるので)、第3行における各々の有効な難読化された値は固有の値である。例えば、2〜4を含む入力フィールドのそれぞれについて、要素410は、有効な出力値を見つけるために図7のテーブルの上部に示される順序を横断する。最初の手順は、図7のテーブルにおける矢印を用いて表されている。
【0068】
CCNフィールドの値を難読化する要素412は、CCNが4から始まる16桁の数字であって他の桁または桁の並びを用いることができるという有効性の基準に基づく。最初の6桁は、発行者を特定するのに十分であり得る。最後の桁は、それより前の桁におけるエラーをチェックするためのコントロール番号(例えば、Luhnアルゴリズムを用いて計算された)である。要素412は、擬似ランダム順列技術を用いて、擬似ランダムな15桁の数字を有効である数字を見つけるまで選択し、コントロール桁を計算する。要素414は、ある数字が有効なCCNであるかを長さとコントロール桁とをチェックすることによって検証する有効性チェック関数を提供する。
【0069】
Custidフィールドの値を難読化する要素414は、Custidは1000000000から9999999999までの10桁の数字であるとの仮定に基づく。SSNおよびCCNと同様、この要素は、擬似ランダムな数字を選択するために擬似ランダム順列技術を用いるエンコード関数を定義することができる。難読化は、有効性チェックが必須ではないSSNおよびCCNについて用いられるアプローチと異なってもよい。
【0070】
データを難読化した後、データ難読化モジュール112は、難読化の有効性をテストすることができる。いくつかの実装において、モジュール112は、複数のフィールドの値(例えば、名フィールドの値と組み合わせられた姓フィールドの値)から構成される複合キーであり得るキーを用いるジョイン処理を実行することにより、実際のデータが難読化された値の中に存在しないことを検証する。難読化されたレコードのフィールドの値を実際のレコードの対応するフィールドと比較することにより、モジュール112は、任意の姓および名について、難読化されたデータが実際のデータとは異なる値を含んでいるかを検証することができる。
【0071】
上述した難読化技術は、コンピュータにて実行可能なソフトウェアを用いて実装することができる。例えば、ソフトウェアは、各々が少なくとも1つのプロセッサ、少なくとも1つのデータストレージシステム(揮発性または不揮発性のメモリおよび/またはストレージ要素を含む)、少なくとも1つの入力デバイスまたはポート、および、少なくとも1つの出力デバイスまたはポート、を含む一または複数のプログラムされたまたはプログラム可能なコンピュータシステム(分散、クライアント/サーバ、または、グリッドのような種々のアーキテクチャであり得る)において実行する一または複数のコンピュータプログラムにおける手順を構成する。ソフトウェアは、より大きなプログラムの一または複数のモジュール(例えば、デザインおよびグラフ計算の構成に関連する他のサービスを提供する。)を構成してもよい。グラフのノードおよび要素は、コンピュータ読み取り可能な媒体に格納されるデータ構造として、または、データリポジトリに格納されるデータモデルに準拠する他の体系化データとして、実現され得る。
【0072】
ソフトウェアは、汎用または専用のプログラマブルコンピュータによって読み取り可能な記憶媒体(CD−ROM等)上において提供されてもよく、または、ネットワークの通信媒体を介してソフトウェアが実行されるコンピュータに伝送されてもよい(伝搬信号にエンコードされてもよい。)。関数の全ては、専用コンピュータ上にて、または、コプロセッサなどの専用ハードウエアを用いて、実行され得る。ソフトウェアは、分散方式(ソフトウェアが規定する計算の異なる部分が、異なるコンピュータにより実行される。)にて実行され得る。そのようなコンピュータープログラムの各々は、汎用または専用のプログラマブルコンピュータによって読み取り可能な記録媒体または記憶装置(例えば、固体メモリまたは媒体、あるいは、磁気媒体または光媒体)に格納されるか又はダウンロードされるか、が好ましい。これにより、コンピュータシステムが記憶媒体または記憶装置を読み取ってここに記載されているプロシージャを実行する際、コンピュータが構成されて実行される。本発明のシステムは、コンピュータープログラムにて構成されたコンピュータ読み取り可能な記憶媒体として実施されると考えることもできる。そのように構成された記憶媒体により、コンピューターシステムは、ここに記載した関数を実行する特定の及び所定の方法にて作動する。
【0073】
本発明のいくつかの実施形態を説明した。しかし、当然のことながら、本発明の精神および範囲を逸脱することなく多様な改変を実施し得る。例えば、上述したいくつかのステップの順序は自由であるので、上記と異なる順序にて実行され得る。当然のことながら、上記記載は、本発明を説明することを意図したものであって本発明の範囲を限定することを意図するものではない。本発明は、添付される特許請求の範囲によって定義される。例えば、上述したいくつかの関数ステップは、全体のプロセスに実質的な影響を与えることなく異なる順序にて実行され得る。他の態様は以下の特許請求の範囲に含まれる。

【特許請求の範囲】
【請求項1】
データソースからの複数のレコードの一または複数のフィールドに生じる値を読み込むこと、
キー値を保存すること、
複数の前記レコードのそれぞれについて、前記レコードの所定のフィールドのオリジナル値を置き換えるための難読化された値を、前記キー値を用いて、前記難読化された値が前記キー値に依存し且つ前記オリジナル値に決定論的に関連するように、生成すること、および、
データストレージシステム内の難読化された値を含むレコードを含む難読化された値の前記コレクションを保存すること、
を含む、データを難読化する方法。
【請求項2】
請求項1に記載の方法であって、
前記フィールドの少なくとも1つの値を特徴付ける統計を含むプロファイル情報を保存することを更に含む、データを難読化する方法。
【請求項3】
請求項2に記載の方法において、
前記難読化された値が、前記キー値および前記所定のフィールドに対して前記保存されたプロファイル情報を用いて生成される、データを難読化する方法。
【請求項4】
請求項3に記載の方法において、
前記難読化された値が、難読化されたデータのコレクションの前記所定のフィールドにおいて、前記所定のフィールドの値を特徴付ける前記保存されたプロファイル情報における統計に基づいて定められる頻度にて、生じる、データを難読化する方法。
【請求項5】
請求項4に記載の方法において、
前記難読化された値が、前記オリジナル値と前記キーとをインデックス値を生成する関数への入力として用いるとともに、前記インデックス値を難読化された値の所定のセットにおいて前記難読化された値をルックアップするために用いることにより、生成される、データを難読化する方法。
【請求項6】
請求項5に記載の方法において、
前記所定の難読化された値のセットが、各々の難読化された値が一または複数のインデックス値に対応しているルックアップテーブルとして保存されている、データを難読化する方法。
【請求項7】
請求項5に記載の方法において、
難読化された値の前記所定のセットにおいて同じ難読化された値に対応する範囲内の複数のインデックス値、データを難読化する方法。
【請求項8】
請求項7に記載の方法において、
前記範囲の前記サイズが、前記所定のフィールドの値を特徴付ける前記保存されたプロファイル情報における前記統計に基づく、データを難読化する方法。
【請求項9】
請求項1に記載の方法において、
前記レコードの所定のフィールドのオリジナル値を置き換えるために前記キー値を用いて難読化された値を生成することは、前記オリジナル値と、前記難読化された値を選択するために用いられる選択値を生むための決定論的な関数を用いる前記キーと、を結合すること、を含む、データを難読化する方法。
【請求項10】
請求項9に記載の方法において、
前記選択値が、決定論的なマッピングを用いる前記難読化された値にマップされる、データを難読化する方法。
【請求項11】
請求項9に記載の方法において、
値のドメインから前記難読化された値が選択されることになるドメインが、前記データソースからの前記レコードの前記所定のフィールドにおける前記オリジナル値の複数を含む、データを難読化する方法。
【請求項12】
請求項11に記載の方法において、
一または複数の前記オリジナル値が、値の前記ドメインに含まれていない、データを難読化する方法。
【請求項13】
請求項12に記載の方法において、
前記ドメインの一または複数の前記値が、前記オリジナル値に含まれていない、データを難読化する方法。
【請求項14】
請求項9に記載の方法において、
前記決定論的な関数が、前記キーを用いて、前記難読化された値から前記オリジナル値を復元することを暗号的に妨げる、データを難読化する方法。
【請求項15】
請求項9に記載の方法において、
前記決定論的な関数が、前記キーの異なる値についての連続的なオリジナル値に対し、選択値の異なるシーケンスを提供する、データを難読化する方法。
【請求項16】
請求項15に記載の方法において、
前記キーの第1の値についての連続するオリジナル値についての選択値の第1のシーケンスが、前記キーの第2の値についての連続するオリジナル値についての選択値の第2のシーケンスから予測できない、データを難読化する方法。
【請求項17】
請求項9に記載の方法において、
前記キー値を用いて前記レコードの前記所定のフィールドの前記オリジナル値を置き換えるための前記難読化された値を生成することが、前記選択値が有効な難読化された値に対応するか否かを判定すること、および、もし違うなら前記選択値と前記追加の選択値が有効な難読化された値と対応するまで追加の選択値を生成する前記決定論的な関数を用いる前記キーとを繰り返し組み合わせること、を含む、データを難読化する方法。
【請求項18】
請求項17に記載の方法において、
有効な難読化された値が所定の桁数からなる、データを難読化する方法。
【請求項19】
請求項1に記載の方法であって、
前記データソースからの前記レコードをレコードの複数のセットに区切り、前記所定のフィールドの前記オリジナル値をレコードの異なるセットのレコードにおける前記生成された難読化された値に異なる計算リソースを用いて並行して置き換えること、を更に含む、データを難読化する方法。
【請求項20】
請求項1に記載の方法において、
難読化されたデータの前記コレクションにおける難読化された値を含む少なくとも第1のレコードが、前記難読化された値に置き換えられてない少なくとも1つのオリジナル値を含む、データを難読化する方法。
【請求項21】
請求項1に記載の方法であって、
前記第1のレコードのオリジナル値が、前記オリジナル値が前記オリジナル値が生じる複数のレコードに対して同一の難読化された値と常に置き換えられるか否かに基づいて前記キー値を用いて難読化された値に置き換えられるか否かを判定すること、を更に含む、データを難読化する方法。
【請求項22】
一または複数のフィールドにおける値を有するレコードを提供するデータソースと、
データストレージシステムと、
実行環境を提供する前記データストレージシステムと接続される一または複数のプロセッサであって、前記実行環境は、
前記データソースからの複数のレコードの一または複数のフィールドにおいて生じる値を読み込み、
キー値を保存し、
複数の前記レコードのそれぞれについて、前記レコードの所定のフィールドのオリジナル値を置き換えるための難読化された値を、前記キー値を用いて、前記難読化された値が前記キー値に依存し且つ前記オリジナル値に決定論的に関連するように、生成し、および、
データストレージシステム内の難読化された値を含むレコードを含む難読化された値の前記コレクションを保存する、ためのものである、プロセッサと、
を含む、値を難読化するシステム。
【請求項23】
一または複数のフィールドにおける値を有するレコードを提供するデータソースと、
データストレージシステムと、
前記データソースからの複数のレコードの一または複数のフィールドにおいて生じる値を読み込む手段と、
複数の前記レコードのそれぞれについて、前記レコードの所定のフィールドのオリジナル値を置き換えるための難読化された値を、前記キー値を用いて、前記難読化された値が前記キー値に依存し且つ前記オリジナル値に決定論的に関連するように、生成する手段と、
データストレージシステム内の難読化された値を含むレコードを含む難読化された値の前記コレクションを保存する手段と、
を含む、値を難読化するシステム。
【請求項24】
データを難読化するためのコンピュータプログラムを格納するコンピュータ読み取り可能な媒体において、前記コンピュータプログラムは、
前記データソースからの複数のレコードの一または複数のフィールドにおいて生じる値を読み込むこと、
キー値を保存すること、
複数の前記レコードのそれぞれについて、前記レコードの所定のフィールドのオリジナル値を置き換えるための難読化された値を、前記キー値を用いて、前記難読化された値が前記キー値に依存し且つ前記オリジナル値に決定論的に関連するように、生成すること、および、
データストレージシステム内の難読化された値を含むレコードを含む難読化された値の前記コレクションを保存すること、
をコンピュータに実行させる命令を含む、コンピュータ読み取り可能な媒体。
【請求項25】
請求項9に記載の方法において、
前記決定論的な関数が、前記オリジナル値の同一の値および前記キー値に対して同一の選択値を常に生成する、データを難読化する方法。
【請求項26】
請求項1に記載の方法において、
前記保存されたキーが、難読化された値の異なるそれぞれのコレクションための複数の難読化のセッションのうちの所定の難読化のセッションにおいてそれぞれの難読化された値に全ての前記オリジナル値を置き換えるために用いられる、データを難読化する方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate


【公表番号】特表2012−529114(P2012−529114A)
【公表日】平成24年11月15日(2012.11.15)
【国際特許分類】
【出願番号】特願2012−514029(P2012−514029)
【出願日】平成22年6月1日(2010.6.1)
【国際出願番号】PCT/US2010/036812
【国際公開番号】WO2010/141410
【国際公開日】平成22年12月9日(2010.12.9)
【出願人】(509123208)アビニシオ テクノロジー エルエルシー (37)
【Fターム(参考)】