(57)【要約】【課題】データベースの機能性を有するソフトウェアアプリケーションにとって、データベースを難読化すること。【解決手段】その機能性を保存する間、オリジナルのキャラクターの標準的な順序を維持するように、オリジナルのテーブル名、カラム名、テーブル順序、カラム順序、及び／又はデータのキャラクターセットを変更することにより、データベースのスキーマを難読化するためのシステム及び方法。【選択図】図３
2010129089.tif 000002
【特許請求の範囲】
【請求項１】
データベースの機能性を保存する間、データベースのスキーマを難読化するための方法であって、：
オリジナルのデータベースを準備する工程にして、 該データベースは、オリジナルのテーブル名を有する少なくとも一つのテーブルを備え、前記各テーブルは、オリジナルのカラム名を有する少なくとも一つのカラムを備え、 データベースはオリジナルのキャラクターが標準的な順序を有している、オリジナルのキャラクターセットのオリジナルキャラクターを使用したデータを保存する工程;
データベースのスキーマを難読化する工程にして、次の:
少なくとも一の前記オリジナルのテーブル名の全てのインスタンスをそれぞれ難読化したテーブル名に変更；
少なくとも一の前記オリジナルのカラム名の全てのインスタンスをそれぞれ難読化したカラム名に変更；
少なくとも二つの前記データベースのテーブルの順序を変更；
少なくとも一の前記テーブルの少なくとも二つの前記カラムの順序を変更； 及び
オリジナルのキャラクターセット中のオリジナルのキャラクターの標準的な順序が、難読化したキャラクターセット中の対応する難読化したキャラクターの順序と同じになるように、データベースのデータの少なくとも一のキャラクターの全てのインスタンスを、難読化したキャラクターセットのそれぞれの難読化したキャラクターに変更；
のうち少なくとも一つによる工程；及び
難読化したデータベースを出力する工程を含む方法。
【請求項２】
請求項１に記載の方法であって、さらに：
難読化番号Ｒを取得する工程；及び
データベースを難読化するためにＲを用いる工程
を含む方法。
【請求項３】
請求項２に記載の方法であって、番号Ｒが乱数である方法。
【請求項４】
請求項２に記載の方法であって、難読化番号Ｒがオリジナルのテーブル名を伴うテーブルの、オリジナルのカラム名を伴うカラム中の難読化されたデータベース中に保存される方法。
【請求項５】
請求項２に記載の方法であって、前記難読化されたテーブル名はＲ及びオリジナルのテーブル名を用いて発生させる方法。
【請求項６】
請求項５に記載の方法であって、前記難読化されたテーブル名は 以下の一つによって発生させる方法：
Ｒ及びオリジナルのテーブル名を共にハッシュ化；及び
オリジナルのテーブル名をＲを暗号鍵として用いて暗号化。
【請求項７】
請求項２に記載の方法であって、前記難読化されたカラム名はＲとオリジナルのカラム名を用いて発生させる方法。
【請求項８】
請求項７に記載の方法であって、前記難読化されたカラム名は、以下の一つによって発生させる方法：
Ｒ及びオリジナルのカラム名を共にハッシュ化；及び
オリジナルのカラム名をＲを暗号鍵として用いて暗号化。
【請求項９】
請求項１に記載の方法であって、さらに、それぞれランダム化されたテーブル名として、前記難読化されたテーブル名の少なくとも一つを切り捨てる（ｔｒｕｎｃａｔｅする）工程を含む方法。
【請求項１０】
請求項１に記載の方法であって、さらに、それぞれランダム化されたカラム名として、前記難読化されたカラム名の少なくとも一つを切り捨てる工程を含む方法。
【請求項１１】
請求項１に記載の方法であって、さらに、データベース中のテーブルを再度順序付ける（ｒｅｏｒｄｅｒｉｎｇする）方法。
【請求項１２】
請求項１に記載の方法であって、さらに、前記テーブル中の少なくとも一つの中のカラムを再度順序付ける方法。
【請求項１３】
請求項１に記載の方法であって、さらに、データベース中の十進数文字のフィールド及び日付／時間フィールドの少なくとも一つのデータを、オリジナルデータの標準的な順序が、対応する難読化されたデータでも保存されるように難読化する工程を含む方法。
【請求項１４】
コンピューターが読み取り可能な記録媒体であって、該記録媒体はコンピュータが読み取り可能な指示を記録し、該指示は、コンピューターによって読み込まれたときに、データベースの機能性を保存する間、コンピューターにデータベースのスキーマを難読化する方法を実行させる指示であり、該方法は以下の工程を含む： 
オリジナルのテーブル名を有する少なくとも一のテーブルを備えるデータベースのデータベーススキーマを難読化する工程で、各前記テーブルは、オリジナルのカラム名を有する少なくとも一のカラムを備え、データベースは、オリジナルのキャラクターが標準的な順序を有しているオリジナルのキャラクターセットのオリジナルキャラクターを用いるデータを保存し、難読化は少なくとも以下の工程の少なくとも一つを含む：
少なくとも一の前記オリジナルのテーブル名の全てのインスタンスをそれぞれの難読化したテーブル名に変更；
少なくとも一の前記オリジナルのカラム名の全てのインスタンスをそれぞれ難読化したカラム名に変更；
少なくとも二つの前記データベースのテーブルの順序を変更；
少なくとも一の前記テーブルの少なくとも二つの前記カラムの順序を変更；及び
オリジナルのキャラクターセット中のオリジナルのキャラクターの標準的な順序が、難読化したキャラクターセット中の対応する難読化したキャラクターの順序と同じになるように、データベースのデータの少なくとも一のキャラクターの全てのインスタンスを、難読化したキャラクターセットのそれぞれの難読化したキャラクターに変更。
【請求項１５】
データベースの機能性を保存する間、データベースのスキーマを難読化するのに用いるためのシステムであって、該システムは以下を含む：
オリジナルのデータベースを受け取るための入力；
難読化されたデータベースの発生における使用のための、難読化指示セット；
難読化されたデータベースの発生における使用のための、難読化指示セットのオプションを決定するための難読化構築パラメーター；
乱数発生装置；
前記入力、前記乱数発生装置、前記指示セット及び、前記構築パラメーターと連結した、難読化処理装置であって、指示セット及び構築パラメーターに従い、オリジナルデータベース及び乱数を用いて難読化されたデータベースを発生させるための処理装置；及び
難読化されたデータベースを出力するための、難読化処理装置に連結した出力。
【請求項１６】
請求項１５に記載のシステムであって、オリジナルのデータベースの少なくとも一つを保存するためのデータストレージ、発生した乱数、難読化指示セット、難読化構築パラメーター、及び難読化されたデータベースをさらに備えるシステム。
【請求項１７】
請求項１５に記載のシステムであって、難読化処理装置は、難読化番号Ｒを取得し、データベースを難読化するためにＲを用いるように動作するシステム。
【請求項１８】
請求項１７に記載のシステムであって、番号Ｒが、乱数発生装置からの乱数であるシステム。
【請求項１９】
請求項１７に記載のシステムであって、難読化処理装置が、オリジナルのテーブル名を伴うテーブルの、オリジナルカラム名を伴うカラム中の難読化されたデータベース中に、難読化番号Ｒを保存するように動作するシステム。
【請求項２０】
請求項１７に記載のシステムであって、難読化処理装置が、Ｒとオリジナルのテーブル名を用いて、前記難読化されたテーブル名を発生させるように動作するシステム。
【請求項２１】
請求項２０に記載のシステムであって、難読化処理装置が、以下のうちの一つによって、前記難読化されたテーブル名を発生させるように動作するシステム：
Ｒとオリジナルのテーブル名を共にハッシュ化；及び
オリジナルのテーブル名をＲを暗号鍵として用いて暗号化。
【請求項２２】
請求項１７に記載のシステムであって、難読化処理装置がＲとオリジナルのカラム名を用いて、前記難読化されたカラム名を発生させるように動作するシステム。
【請求項２３】
請求項２２に記載のシステムであって、難読化処理装置が、以下のうちの一つによって、前期難読化されたカラム名を発生させるように動作するシステム：
Ｒとオリジナルのカラム名を共にハッシュ化；及び
オリジナルのカラム名をＲを暗号鍵として用いて暗号化。
【請求項２４】
請求項１５に記載のシステムであって、難読化処理装置は、それぞれランダム化されたテーブル名として、前記難読化されたテーブル名の少なくとも一つを切り捨てるように動作するシステム。
【請求項２５】
請求項１５に記載のシステムであって、難読化処理装置は、それぞれランダム化されたカラム名として、前記難読化されたカラム名の少なくとも一つを切り捨てるように動作するシステム。
【請求項２６】
請求項１５に記載のシステムであって、難読化処理装置が、データベース中でテーブルを再度順序付けるように動作するシステム。
【請求項２７】
請求項１５に記載のシステムであって、難読化処理装置が、前記テーブル中の少なくとも一つの中のカラムを再度順序付けるように動作するシステム。
【請求項２８】
請求項１５に記載のシステムであって、難読化処理装置が、データベース中の十進数文字のフィールド及び日付／時間フィールドの少なくとも一つのデータを、オリジナルデータの標準的な順序が、対応する難読化されたデータでも保存されるような形で難読化するように動作するシステム。
【発明の詳細な説明】
【背景技術】
【０００１】
ソフトウェアの複製防止は、常にソフトウェア保護ベンダー、それらの顧客（すなわち、非認可の複製からソフトウェアを保護するために、彼らのソフトウェアの複製防止を利用している独立したソフトウェアベンダー（ＩＳＶ））と、コンピュータソフトウェア中の複製防止を回避するソフトウェアクラッカーとの競争である。典型的には、新たな複製防止の方法が市場に到来すると（根本的に新しい方法か、既存の防止方法の改良かに関わらず）、ソフトウェアクラッカーは、ＩＳＶが請求する価格よりも安い価格で、クラックされたソフトウェアを販売することができるように、その防止手段を破壊しようと試みる。
【０００２】
ソフトウェア複製防止の開発者は、クラッカーにとって、クラッキングが極力困難で失望するものになるようにすることを望む。一つの重要な目標として、クラッカーが「ジェネリッククラック」を見つけ出す可能性を回避することがある。これによって、いったん防止機構が分析され及びクラックされると、その防止機能を用いるいかなるソフトウェアも簡単にクラックされ得る。これはソフトウェアセキュリティベンダーにとって特に重要であり、かれらの製品は多くのＩＳＶによって利用されている。ジェネリッククラックの存在は、彼らの顧客（ＩＳＶ）全てに、不利に影響することになるだろう。一方で、各防止アプリケーションが個別にクラックされなければならないとしたならば、クラッカーは各アプリケーションをクラックするために、より多くの時間とエネルギーを費やす必要が出てくる。結果的に、限られた期間の中で、数個の防止アプリケーションがクラックされるだけで済む。
【０００３】
複製防止アプリケーションソフトウェアに関するライセンス情報を保存及び管理するために、ソフトウェアセキュリティソリューションとして、構造型クエリー言語（ＳＱＬ）データベースなどのデータベースを利用することができる。ライセンス情報は、データベースに保存されているときには、暗号化等によってそれ自体保護されているかもしれない。しかし、セキュリティソリューションの分析及びクラックをより困難にするためには、クラッカーとなりそうな者にとって、何のデータがデータベースに保存されているか、どのように保存しているのか、及びどのようにデータベースのレコードを操作しているのかについて、理解することがより困難になるようなデータベースをつくることが望ましい。さらには、各ライセンスデータベースインスタンスをユニークなもの、すなわち他の全てのものと異なるものにすることが望ましい。そうすれば、たとえあるクラッカーがあるライセンスデータベースを分析しても、その知識は、他のデータベースインスタンスへ直接は応用することはできない。例えば、もしデータベーススキーマが、「ライセンス」、「ライセンス属性」などのテーブルのラベルを有しており、かつライセンスレコードが、「ベンダー」「シリアルナンバー」「ライセンス特性」及びそれらに類似するものといったフィールド（即ちテーブルのカラム名）を有しているなら、クラッカーは、データベース閲覧プログラムで、データベースを簡単に読み取ることができ、すぐにそこに何があるのか分かってしまうだろう。そして、その情報はセキュリティソリューションをクラックする試みに活用され得ることだろう。従って、データベースに保存されているデータだけでなく、データベーススキーマも同様に安全性を確保することが望まれる。
【０００４】
データベースセキュリティを提供する一つのソリューションとして、暗号化を用いて、データベース内に保存されているデータを暗号化する方法がある。そのような暗号化は幅広く応用されており、医療保険の携行と責任に関する法律（ＨＩＰＡＡ）といった法律や、ＰＣＩデータセキュリティスタンダード（ＰＣＩ  ＤＳＳ）といった規格により、多くの場所で実際に指定されている。これらのケースでは、暗号化はデータ（例えば、患者の名前、クレジットカード番号、及びそれに類似するもの）を保護するものの、データベーススキーマ（テーブル名やカラム名）を保護するわけではない。そのようなセキュリティソリューションによって保護されているセキュリティの脅威は、認証されていないユーザーがデータベースからデータを盗むことである。
【０００５】
一方、ソフトウェアライセンスのケースにおける、脅威の対象は異なる。この場合、ソフトウェアを所有するＩＳＶの敵は、非認可のソフトウェアの複製を製造及び販売しようとするエンドユーザーである。この場合、ソフトウェアはサーバーといった、ユーザーのコンピューター上で使用されるため、エンドユーザーはデータベースをコントロールできる。このため、単純なデータの暗号化では、ソフトウェアの非認可の複製を阻止するのに役に立たないだろう。なぜなら、暗号鍵はソフトウェアの中に埋め込まれており、ソフトウェアはユーザーがコントロールできる状況のため、ユーザーにとって暗号鍵にアクセス可能だからである。高価なハードウェアの暗号化モジュールを追加することは、同様の理由、即ちエンドユーザーがそのハードウェアを同様にコントロールでき、単純にそのモジュールを使うことによってデコードするための全体のデータベースにアクセスできることから、役には立たない。
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ソフトウェアを保護するために、暗号化を用いることに加えて、ソフトウェアの操作及び内容の隠蔽化又は難読化の様々な方法が、ソフトウェアベンダーによって用いられている。そのようなクラッカーが、ソフトウェアを分析することをより困難にするために、あるソフトウェア保護製品では、（製品が何をおこなっているかを隠蔽する）様々な難読化方法を採用しており、またアンチデバッギング方法も採用しているかもしれない。データベースの機能性を有するソフトウェアアプリケーションにとって、データベースを難読化することが望ましい。
【課題を解決するための手段】
【０００７】
ここで記述するシステム及び方法の実施形態は、その機能性を保存する間の、データベーススキーマの難読化を提供し、オリジナルのテーブル名、カラム名、テーブル順序、カラム順序を変更すること、及び／又はデータのキャラクターセットを、オリジナルのキャラクターの標準的な順序を維持するように変更することを含む。
【０００８】
前記の概略的な記述と、後記の詳細な記述の両方とも、典型的かつ説明的なものであり、請求項に記載された発明のさらなる説明を提供する意図であることを理解しなければならない。
【０００９】
添付図は、公開された実施形態の更なる理解を提供することを含む。幾つかの図は、Ｃ言語の文法を用いた擬似コードなど、プログラムの擬似コード中におけるある機能性の典型的な実装を示す。しかし、いかなる他のプログラミング言語でも、同様の結果を達成するために用いることができるものと解釈する。
【図面の簡単な説明】
【００１０】
【図１】図１は、ここで記述するシステム及び方法に従った使用のための典型的なコンピューティングシステムのブロック図である。
【図２】図２は、ここで記述するシステム及び方法に従った使用のための、典型的なネットワークコンピュータの環境を示すブロック図である。
【図３】図３は、ここで記述するシステム及び方法に従った典型的なシステムによって実行される処理を示すフローチャート図である。
【図４】図４は、ここで記述するシステム及び方法に従った典型的なシステムの典型的なコンポーネントが協働することを示すブロック図である。
【図５】図５Ａ及び５Ｂは、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のための擬似コードである。
【図６】図６は、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のためのオプションリストである。
【図７】図７Ａ、７Ｂ、及び７Ｃは、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のための擬似コードである。
【図８】図８は、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のための擬似コードである。
【図９】図９は、ここで記述するシステム及び方法に従った典型的なシステムによって実行される処理を示すフローチャート図である。
【図１０】図１０は、ここで記述するシステム及び方法に従った典型的なシステムの使用における使用のための擬似コードである。
【図１１】図１１は、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のための、置換物のリストである。
【図１２】図１２Ａ、１２Ｂ、及び１２Ｃは、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のための擬似コードである。
【図１３】図１３は、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のための擬似コードである。
【発明を実施するための形態】
【００１１】
以降ここで用いるときは、用語「データベースの難読化」は、その機能性が維持されている間は、その構造が隠蔽されるように、データベースのインスタンスを変更することを示す。用語「データベースのスキーマ」はここで用いるときは、そのテーブル名、テーブル間の関係、各テーブルのカラム名、及び各カラムに保存されたデータのデータ型及び他の属性を含んだ、データベースの構造の記述を示す。実施形態において、データベースのスキーマは、データベース内にデータを保存するために使用されるキャラクターセットにおけるキャラクターの順序も含めることができる。
【００１２】
典型的な実施形態では、一つ又はそれ以上の次の一般的な特性が、実装されることができ、データベースの各インスタンスのデータベーススキーマ、及び／又は、例えば、ソフトウェアライセンスの情報を有しているライセンスデータベースと言った、データベースの各インスタンスに保存されたデータを難読化する。各データベースインスタンスにおいては、ユニークで意味の無いテーブル名を使用することができる。また、各データベースインスタンスの一つ又はそれ以上のテーブルにおいては、ユニークで意味の無いカラム名を使用することができる。テーブル内のテーブル及び／又はカラムは、各データベースインスタンスのデータベーススキーマにおいて、再度順序付けられることができる。例えば、あるデータベースインスタンス内のテーブル３におけるカラム５であるものは、他のデータベースインスタンス内のテーブル６におけるカラム１０であるかもしれない。さらには、レコードデータ自体は、各データベースインスタンス内でユニークにエンコードされることができる。リレーショナルデータベース（即ち、主キーやリレーショナルデータベースのテーブルを関連付けるための外部キーの使用）のテーブル間のような、参照整合性が保存される。さらには、数値や日付／時間データの順序といった、一つ又はそれ以上のデータ型のデータの順番が保存される。その結果、大小比較オペレーターのような、比較オペレーターを用いた検索で、難読化されていないデータベースの検索結果と同じ結果を生み出すだろう。
【実施例】
【００１３】
図１は、ここで記述するシステム及び方法の実施形態とともに使用するための、典型的なコンピューティングシステム１００を表す。コンピューティングシステム１００は、オペレーティングシステム（ＯＳ）や様々なコンピューティングアプリケーション１８０といった、ソフトウェアを実行することができる。典型的なコンピューティングシステム１００の操作は、ハードディスクドライブ（ＨＤＤ）１１５、光学ディスク（図示せず）、ＳＳＤ（図示せず）又はその類似物といった、コンピュータが読み取り可能な記録媒体に保存されたインストラクションなどの、コンピューター読み取り可能なインストラクションによって主に制御されている。そのようなインストラクションは、中央演算処理装置（ＣＰＵ）１１０内で実行され、コンピューティングシステム１００の稼動を引き起こす。多くの知られたコンピューターサーバー、ワークステーション、及びパソコンにおいて、ＣＰＵ１１０は、集積回路と呼ばれるマイクロエレクトロニクスチップ上に実装されている。
【００１４】
典型的なコンピューティングシステム１００は、単一のＣＰＵ１１０を備えているように図示しているが、そのような記述は単に実例に過ぎず、コンピューティングシステム１００は、複数のＣＰＵ１１０を備えていてもよい。さらには、コンピューティングシステム１００は、通信ネットワーク１７０又は他の幾つかのデータ通信手段（図示しない）を通した、遠隔ＣＰＵ（図示しない）のリソースを使用してもよい。
【００１５】
操作中は、ＣＰＵ１１０は、ＨＤＤ１１５などのコンピューター読み取り可能記録媒体からのインストラクションを、フェッチし、デコードし、そして実行する。そのようなインストラクションは、オペレーティングシステム（ＯＳ）、実行可能なプログラム、又は類似物といった、ソフトウェア中に含まれることができる。コンピューターのインストラクション及び他のコンピューター読み取り可能データなどの情報は、コンピューティングシステム１００のコンポーネント間を、コンピューターの主要なデータ転送パスを介して転送される。シリアルな通信パスでデバイス間のデータ通信を行うために、シリアライザー・デシリアライザー（ＳｅｒＤｅｓ）を用いたアーキテクチャーなどの、他のコンピューターアーキテクチャー（図示せず）も用いることができるが、主要なデータ転送パスは、システムバスアーキテクチャー１０５を用いてもよい。システムバス１０５は、データ送信のためのデータライン、アドレス送信のためのアドレスライン、及び中断処理の送信やシステムバスの操作のための制御ラインを含むことができる。いくつかのバスは、拡張カード、コントローラー、及びＣＰＵ１１０によるバスへのアクセスを制御するバスの調整を提供する。バスに付随してバスへのアクセスを調整するデバイスをバスマスターと呼ぶ。バスマスターサポートは、プロセッサー及びそのサポートチップを有するバスマスターのアダプターを追加することにより、バスのマルチプロセッサー構造の構築も可能にする。
【００１６】
システムバス１０５に連結したメモリーデバイスは、ランダムアクセスメモリー（ＲＡＭ）１２５及びリードオンリーメモリー（ＲＯＭ）１３０を含む。そのようなメモリーは、情報を保存したり、取り出したりすることを可能にする回路を含む。ＲＯＭ１３０は通常、変更不可能な保存データを有している。ＲＡＭ１２５に保存されたデータは、ＣＰＵ１１０又は他のハードウェアデバイスによって読み取ることも変更することもできる。ＲＡＭ１２５及び／又はＲＯＭ１３０へのアクセスは、メモリーコントローラー１２０によって制御されてもよい。メモリーコントローラー１２０は、インストラクションが実行される際に、仮想アドレスを物理アドレスに変換するアドレス変換機能を提供してもよい。メモリーコントローラー１２０は、システム内のプロセスを分離したり、ユーザープロセスからシステムプロセスを分離する、メモリー保護機能を提供してもよい。従って、ユーザーモードで実行するプログラムは、通常、そのプロセスの仮想アドレス空間で割り当てられてメモリーのみアクセスできる；そのプロセス間で共有されたメモリーがセットアップされない限りは、他のプロセスの仮想アドレス空間内のメモリーにアクセスすることはできない。
【００１７】
さらには、コンピューティングシステム１００は、ＣＰＵ１１０から、プリンター１４０、キーボード１４５、及びマウス１５０といった周辺機器への周辺バスを用いたインストラクションの通信を担う周辺機器コントローラー１３５を含むことができる。周辺バスの例として、ＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バスがある。
【００１８】
ディスプレイ１６０（ディスプレイコントローラー１５５によって制御されている）、はコンピューティングシステム１００によって発生した視覚的な出力を表示するために使用される。そのような視覚的な出力は、テキスト、グラフィックス、アニメ化されたグラフィックス及びビデオを含むことができる。ディスプレイ１６０は、ＣＲＴベースのビデオディスプレィ、ＬＣＤベースのフラットパネルディスプレー、ガスプラズマベースのフラットパネルディスプレー、タッチパネル、又はその類似物によって実装されてもよい。ディスプレイコントローラー１５５は、ディスプレイ１６０に送信されるビデオシグナルを発生させるのに必要な電子コンポーネントを含む。
【００１９】
さらには、コンピューティングシステム１００は、外部通信ネットワーク１７０へコンピューティングシステム１００を連結させるために用いることができるネットワークアダプター１６５を含んでもよく、外部通信ネットワークは、インターネットへの接続を含みあるいは提供してもよい。通信ネットワーク１７０は、ソフトウェア及び情報を電子的に通信及び転送する手段を、コンピューターユーザーに提供してもよい。さらには、通信ネットワーク１７０は分散処理を提供してもよく、分散処理は、複数のコンピューター並びに、タスクを実行する際の負荷の共有及び協働作用を含む。ここで示したネットワーク通信は典型的なものであり、コンピューター間の通信接続を確立する他の手段を用いてもよいものとして解釈する。
【００２０】
ここで記述する発明の概念が、様々なコンポーネント及び構築物を有する様々なコンピューティング環境において実装されるので、典型的なコンピューティングシステム１００は、単にここで記述するシステム及び方法を稼動させるためのコンピューティング環境の例示にすぎず、異なるコンポーネント及び構築物を有するコンピューティング環境において、ここで記述するシステム及び方法の実装を制限するものではないものとして解釈する。
【００２１】
図２に示すように、コンピューティングシステム１００は、コンピューターネットワークの一部として配置されることができる。一般的に、コンピューティング環境に関する上記記述は、ネットワーク環境内に配置されたサーバーコンピューター及びクライアントコンピューターの両方に当てはまる。図２は、通信ネットワークを介してクライアントのコンピューティング環境と通信を行うサーバーと共に、典型的かつ例示的なネットワーク化されたコンピューティング環境２００を図示しており、当該通信ネットワークにおいて、ここで記述するシステム及び方法が用いられる。図２に示すように、サーバー２０５は、通信ネットワーク２３０（固定線、ワイヤレスＬＡＮ、ＷＡＮ、イントラネット、エクストラネット、ピアツーピアネットワーク、ＶＰＮ、インターネット、又は他の通信ネットワークのいずれか又はそれらの組み合わせを含む）を介して、ラップトップコンピューター２１０、携帯電話２１５、ＶｏＩＰ電話２２０、ＰＤＡ端末２２５、コンピューティングシステム１００、及び／又は他のネットワーク可能に配置されたデバイス／システム（図示せず）といった、いくつかのクライアントコンピューティング環境と相互接続されてもよい。サーバー２０５は、ハイパーテキスト・トランスファー・プロトコル（ＨＴＴＰ）、ファイル転送プロトコル（ＦＴＰ）、シンプル・オブジェクト・アクセス・プロトコル（ＳＯＡＰ）、ワイヤレス・アプリケーション・プロトコル（ＷＡＰ）及びその類似物といった、幾つかの既知のプロトコルのいずれかを介して、クライアントコンピューティング環境１００、２１０、２１５、２２０、２２５などへ又はこれらからデータを処理又は通信するように動作するサーバーを含んでもよい。さらには、ネットワーク化された環境２００は、セキュアド・ソケット・レイヤー（ＳＳＬ）、プリティ・グッド・プロトコル（ＰＧＰ）、又はその類似物といった、様々なデータセキュリティプロトコルを用いることができる。各クライアントコンピューティング環境１００、２１０、２１５、２２０、２２５などは、ウェブ・ブラウザー（図示せず）若しくは他のグラフィカル・ユーザー・インターフェーズ（図示せず）といった一つ又はそれ以上のコンピューティングアプリケーション、又はサーバー２０５と相互作用するモバイルデスクトップ環境（図示せず）をサポートするように動作するオペレーティングシステムを備えることができる。
【００２２】
典型的な実装において、難読化されたデータベースは、ソフトウェアライセンス情報をサーバー２０５上に保存するために用いられることができる。しかし、そのような実装は、単に例示的なものである。他のタイプのアプリケーションにおける利用のために、データベースの他のタイプが難読化されることができるものとして解釈する。好ましくは、難読化されていないデータベースは、データベースの稼動に不利に影響することなく、ここで開示したシステム及び方法に従って難読化された同じデータベースのバージョンに置き換えることができる。言い換えれば、データベースが難読化されているかされていないかに関わらず、データベースは、ユーザーとの同じ相互作業及び同じ結果を提供する。
【００２３】
従って、動作時には、ユーザー（図示せず）は、データベースに保存されているデータのような、所望のデータ及び／又はコンピューティングアプリケーションを手に入れるために、クライアントコンピューティング環境で実行されているコンピューティングアプリケーションとやり取りをすることができる。データ及び／又はコンピューティングアプリケーションは、サーバーコンピューティング環境２０５上に保存することができ、典型的な通信ネットワーク２３０上で、クライアントコンピューティング環境１００、２１０、２１５、２２０及び２２５を通して協働ユーザーと通信することができる。参加ユーザーは、サーバーコンピューティング環境２０５上全体又は一部に保存された特定のデータ及びアプリケーションにアクセスすることを求めることができる。そのようなデータは、処理及び／又は保存のために、サーバー２０５とクライアントコンピューティング環境１００、２１０、２１５、２２０及び２２５間で通信される。サーバー２０５は、世代、認証、暗号化、難読化、並びにデータ及びアプリケーションの通信のためのコンピューティングアプリケーション、処理並びにアップレットを司り、他のサーバーコンピューティング環境（図示せず）、サードパーティサービスプロバイダ（図示せず）、ネットワーク・アタッチト・ストレージ（ＮＡＳ）及びストレージ・エリア・ネットワーク（ＳＡＮ）と協働して、アプリケーション／データの処理を実現する。
【００２４】
特に、サーバー２０５は、ソフトウェアライセンスデータベース２４０で、ソフトウェアライセンスデータを管理することができる。そのようなソフトウェアライセンス情報は、例えば、ソフトウェアのメータリングやモニタリングに用いることができる。これは、例えば、許可されたライセンスの数だけが使用されることを確証するためのソフトウェアライセンスの追跡及び管理を含むことができる。ソフトウェアの同時利用の監視により、リアルタイムでライセンス制限の執行を可能にし、登録されていない又はライセンスされていないソフトウェアの検出ができ、一定時間以内にあるソフトウェアの実行を停止するか又は実行を制限することができる。ライセンスデータベースは、特定のポリシーに従って、ライセンスされたアプリケーションの使用をメータリングするため、並びに使用及び使用を試みた記録を管理するために使用することができる。組織は、モバイルユーザーのためのライセンスのチェックアウト及びチェックインを行うこともでき、使用状態にある全てのライセンスの記録を維持することができる。これは、例えば、厳密なライセンスコントロールを犯すことを回避するために制限されたライセンス数が入手可能な時に使用することができる。ソフトウェアのメータリングは、さらに、組織の全てのレベル間での一致した規格のセットを、設定し管理する手段を提供する。従って、ソフトウェアライセンスデータベースは、ライセンスされたソフトウェアの使用の追跡を維持したり、ネットワーク環境でインストールされたソフトウェアの詳細を提供したり、ソフトウェアの使用の詳細を追跡するために使用できる（特定部門でどの程度一定のライセンスされたソフトウェアが使用されているか、使用されたピーク時間及び／又は同時に実行された複製のピーク数、どのようなアドオンが共に使用されたかなど）。そのような情報は、例えば組織内でソフトウェアのライセンスのコストを管理するのに使用することができる。
【００２５】
典型的な実装において、ソフトウェアライセンス情報を有するライセンスデータベース２４０を備えるサーバー２０５は、ネットワーク２３０を介して、コンピューティング環境１００、２１０、２１５、２２０及び２２５と通信をすることができ、ライセンスされたソフトウェアのインストール及び／又は操作が、ライセンスされたソフトウェア及びそれに類似ずるものの使用をモニターすることを可能にする。ソフトウェアライセンスデータベース２４０は、データベースの複製の作成及び販売から保護するためなどで、その構造及び／又は操作は隠蔽するために難読化されることができる。難読化は、データベース操作に不利に影響することなく成し遂げることができる。ある実施形態においては、サーバー２０５にインストールされた後で、データベースは難読化されることができる。他の実施形態においては、既に難読化された状態でインストールされることができる。また他の実施形態においては、サーバー２０５にインストール処理を行っている最中に難読化されることができる。
【００２６】
図３は、データベースの難読化の際の実行される処理を示すフローチャート図である。処理は、オリジナルデータベースを取得するブロック３００から開始する。データベースのスキーマは、難読化され３１０、一つ又はそれ以上の３２０から３６０までのステップを含み、いずれかの順序で達成される。データベース３１０の難読化は、一つ又はそれ以上の：一つ又はそれ以上のデータベースのテーブル名の変更  ３２０；一つ又はそれ以上のテーブルの一つ又はそれ以上のカラムの変更  ３３０；テーブルの再順序付  ３４０；一つ又はそれ以上のテーブルのカラムの再順序付  ３５０；及びそのデータ型に用いられるキャラクターの標準的な順序が維持されるように、一つ又はそれ以上のデータベースのデータ型において用いられるキャラクターセットの変更  ３６０、を含めることができる。標準的な順序は、大小比較オペレーター又はその類似物のような、データの標準的な順序に依存する操作を保存するように、維持される。そして、難読化されたデータベースは、出力される  ３７０。
【００２７】
図４は、難読化されたデータベースを発生させるための、典型的なデータベース難読化システム４００の、典型的なコンポーネントの協働を示す、ブロック図である。システム４００は、オリジナルデータベース４１０の取得、オリジナルのデータベースの難読化、及び難読化されたデータベース４６０の出力を行う、難読化処理装置４２０を含む。難読化処理装置４２０は、典型的には、コンピューター読み取り可能記録デバイスに保存されたコンピューターコードを含む、難読化指示セット４３０と連結している。難読化処理装置４２０は、難読化構築パラメーター４４０とも連結し、コンピューター読み取り可能記録デバイスに保存されたコンピューターコードをも含む。構築パラメーター４４０は、ユーザーによって選択され、又は例えば、特定の実装に望ましいといった、オリジナルのデータベースの特性及び／又は難読化されたデータベースの所望の特性に基づいて、自動的に又はユーザーが選択したパラメーターと共に、決定されてもよい。難読化処理装置４２０は、乱数発生装置４５０とも連結する。難読化処理装置４２０は、乱数発生装置４５０によって発生した乱数を用いて、難読化指示セット４３０及び難読化構築パラメーター４４０に従い、オリジナルのデータベース４１０を処理して、難読化されたデータベース４６０を出力する。
【００２８】
図５Ａは、データベースの各インストールされたインスタンスにおいて、ユニークで意味のないテーブル名を発生させる典型的な実装の擬似コード５００を示す。テーブル名及びカラム名はヘッダーファイル５０４、５０６において定義されるが、内部開発のためのソフトウェア保護ベンダーによる使用のためなどのデバッグモード５１０のため、及び顧客に輸送される製品のためなどのリリースモード５１５のために異なって定義される。デバッグモードのときには、テーブル名及びカラム名は難読化されず５０４、しかし、デバッグモードではないときには、テーブル名及びカラム名は難読化される５０６。難読化されたテーブル名及びカラム名において、「ｒｒｒｒｒｒｒｒｒｒ」は、各テーブル又はカラムの定義行のためのランダムな１６進数の文字である。１０の「ｒ」が示されているが、いかなるランダムな１６進数のいずれか、あるいはランダムな文字を用いることもできる。そしてコードは、データベース記述構造体５２０を構築する。スタートアップコードは、例えば図５Ｂで使用するコードのような、実際のポインターを設定する。そして、追加コード（図示しない）は、これらの静的な構造を通して、テーブル名及びカラム名を用いる。ある実施形態においては、他の情報は、テーブル又はカラム構造に保存されてもよい。例えば、構造体は各カラムのデータ型、各カラムに許容されるデータの最大長、及びその類似物について決定できる。
【００２９】
ユニークなテーブル名及びカラム名を発生させるために、好ましくは乱数発生装置によって乱数Ｒを発生させて保存しておく。乱数Ｒは、例えば固定名称テーブル、即ちテーブル名が難読化されていないテーブルに保存することができる。他の選択可能な実施形態として、データベースがインストールされたコンピューターから取得できる、コンピューターのフィンガープリント値のように、ユニークだが一定で、ランダムではない値Ｃを用いることができる。例えば、ディスクのシリアルナンバー、ネットワークカードのアドレス又はそれらに類似するものといったコンピューターの特性を用いて、ユニークで意味のないテーブル名及びカラム名を発生させることができる。少なくとも、乱数を使用することにより、同じコンピューター上に存在する複数のユニークなデータベースを許容できることから、乱数Ｒを用いることが好ましい。さらには、難読化された名前を発生させるのにハードウェアコンポーネントが使用された場合、コンポーネントの交換などの、ハードウェアコンポーネントの変更は、データベースを無効にしてしまう可能性がある。
【００３０】
典型的な実施形態において、データベーススキーマの難読化は、Ｒ又はＣの値及びテーブル若しくはカラムのオリジナルの名前又は特定番号を用いて、一つ又はそれ以上のテーブル及びテーブルにおける一つ又はそれ以上のカラム名の「難読化された名前」を派生させることを伴う。難読化された名前を派生させるのに多くの方法がある。他の又は更なる関数を用いることができるが、図６は、使用可能な典型的な難読化関数のリストである。図６にリストされたある関数においては、新暗号規格（ＡＥＳ）が用いられる。ＡＥＳは米国政府によって、暗号規格として採用されたブロック暗号であり、全世界で使用されている。他の代替として、データ暗号化標準（ＤＥＳ）を用いることができる。
【００３１】
ある実施形態において、発生した名前の長さを変えることで、さらに難読化を行うことができる。例えば、１６文字の名前を発生させたなら、決められた減少長（最初の文字及び３）を用いることによってなど、最後の０〜３文字は切り捨てることができる。
【００３２】
難読化された名前を発生させた後、これらはＡＳＣＩＩ文字に変換することができる。例えば、１６進数で表すことができる。そして、保護コードは、難読化された名前に従って、構造体中のネームポインターを変更することができる。
【００３３】
ある実施形態において、乱数Ｒが用いられると、データベース内の特定のテーブルの特定のカラムに保存されることができる。この場合、そのテーブルの名前は難読化されるべきではないし、Ｒを有するカラム名も然りである。難読化されたテーブル名及びカラム名が再度生成されるようにデータベースがオープンされたときには、Ｒは再度取得されることができる。ある実施形態では、たった一つのカラムを有するテーブルなど、ユニークなテーブルを、Ｒを保存するのに用いることができる。そして、データベーススタートアップコードが、データベーススキーマを列挙し、たった一つのカラムを有する唯一のテーブルを特定し、そしてＲを再取得するためにそのスキーマ自体からテーブル名及びカラム名を使用する。
【００３４】
さらに、データベーススキーマを難読化するために、スキーマの要素を再度順序付けることができる。テーブル及びカラムがリネームされた後で、クラッカーはなおも、あるテーブルのあるカラムが何を有しているか決定でき、その情報を用いて、保存されたスキーマからカラム名及びテーブル名を決定することができてしまうため、この方法は役に立つ。テーブル名及びカラム名の特定をより困難にするために、スキーマの定義は、ランダムに再順序付けることができる。
【００３５】
ある典型的な実施形態では、データベースが、複数のＣＲＥＡＴＥ  ＴＡＢＬＥ  ＳＱＬコマンドで、作成された場合、ＤｂＴａｂｌｅの構造体配列が処理される。通常は、図７Ａのコードのようなコードが、テーブルのアウターループトゥロープで使用され、図７Ｂのコードのようなコードが各テーブルのカラムのインナーループトゥロープで使用される。ある実施形態においては、そのコードは、例えば「ｉ１，ｉ２、．．．ｉＮとして、（ＮｕｍＯｆＬｉｃｅｎｓｅＴａｂｌｅｓ−１）」のようなコードを用いて、「０、１、．．．」といった一連の番号のランダムな置き換えを発生させるようなコードに置き換えることができる。置き換えられた番号は、「ＴａｂｌｅＰｅｒｍｕｔｅ［ＮｕｍＯｆＬｉｃｅｎｓｅＴａｂｌｅｓ］」のようなコードを用いて、配列に入力される。そして、アウターループは、図７Ｃのようになる。同様に、各テーブル構造体のカラムインデックスも置き換えることができ、インナーループはカラムの置き換えられた順序を使用することができる。
【００３６】
図８は、例えば、サーバー２０５などのサーバーにインストールするためといった、データベースインスタンスを作成するための典型的な実装の図である。図８は、その中で、記述内容のインデント部分がプログラミングループを表している擬似コードを使用している。実際のコンピューターコードは、適切なプログラミング言語で記述されることができる。
【００３７】
図８において、乱数Ｒが発生する８００。例えば以前記述したように、固定された名前を保持した一つのテーブルを除いて、難読化されたテーブル名及びカラム名はＲ及びオリジナルの名前から派生する８１０。以降に記述するように、固定名称テーブルは、Ｒを保存するために使用されることができる。テーブルインデックスのランダムに置き換えられた配列が作成される８２０。そして、置き換え中の各テーブルにおいて、難読化されたテーブル名を用いて、ＣＲＥＡＴＥ  ＴＡＢＬＥ行が発行される８３０。カラム名インデックスのランダムな置き換え配列が作成される８４０。次に、各カラムの置き換えにおいて、難読化されたカラム名及び関連するカラムデータは、ＣＲＥＡＴＥ  ＴＡＢＬＥ文のために発行される８５０。ＳＱＬコマンドが実行されてテーブルが作成される８６０。最後に、難読化されたテーブル名及び／又はカラム名を再度発生させる際の使用のため、Ｒが名称固定テーブルに挿入される８７０。
【００３８】
図９は、上記処理を用いて難読化されたデータベースを使用するための典型的なステップを示すフロー図である。難読化されたデータベースはオープンされ９００、Ｒは名称固定テーブルから読み込まれる９１０。名称固定テーブルは、例えばデータベースを列挙して、単一のカラムを有するテーブルを特定することによって、特定することができる。難読化されたテーブル名及びカラム名は、Ｒ及びオリジナルの名前を用いて派生する９２０。そして、データベースは、難読化されたテーブル名及びカラム名を用いて使用される９３０。
【００３９】
データベーススキーマが、ランダムに見えるテーブル名及びカラム名を用い、スキーマの要素を再度順序付けされて難読化された後、二つの異なるデータベースインスタンスのスキーマは、全体として異なって見え、クラッカーにとって、どのテーブルのどのカラムが何の情報を有しているのか理解するのに、よりいっそう困難にな経験をすることであろう。
【００４０】
上記のようにテーブル及びカラムをリネーム及び再配置することによってデータベーススキーマを難読化することに加えて、様々なレコード内の実際のデータを難読化することも望ましい。データの難読化は、データの標準的な順序に影響しないように行われるべきであり、そこで標準的な順序に依存するオペレーターは、難読化したデータと難読化されていないデータの両方で同一の結果を生み出すだろう。例えば、大小比較オペレーターのような、比較オペレーターの結果は、データの標準的な順序に依存している。オリジナルのデータと難読化されたデータを用いて同一の結果を生み出すべきそのようなオペレーターを用いた、ステートメントの例が図１０に示されている。難読化されたデータは、単純に暗号化されたデータとは同一ではない。なぜなら、通常の暗号化は、このような能力を提供しないからである。通常の暗号化は、正確な一致（レコード値＝＝予想値）のためのデータ比較には有用であるが、例えば、大小比較が必要な場合には使用できない。
【００４１】
最低でも４つの異なるデータ型が、データの難読化に関して別々に考えられ、そのデータ型として、整数型若しくは他の数値型のデータ、日付及び日付＋時間型のデータ、テキストデータ、及び、バイナリラージオブジェクト（ＢＬＯＢ）のデータが含まれる。ＢＬＯＢ型は、画像、オーディオ、ビデオ、又は他のマルチメディアオブジェクト及びその類似物といった、単一の実体として保存されるバイナリーデータを含む。
【００４２】
さらには、データベースのテーブルは、例えば、リレーショナル・データベースス・マネージメント・システム（ＲＤＢＭＳ）のテーブル間の関係を定義する際に、データベースを編成するのを補助する主キーや外部キーを、通常は有している。キーは、例えば、一次正規形、二次正規形、又は三次正規形といった正規形にデータベースを正規化するために、データベースをリファクタリングすることも可能にする。例えば１６進数形で、ランダム値をキーに割り当てて、クラッカーにとって意味のないものにみえるようにすることができる。
【００４３】
数値型あるいは他の数値型データに関して、そのようなデータは、０〜９までの文字のからなる十進数の文字を含んでいる。難読化されたデータの比較を可能にするために、これらはテキストだが、整数値は、先頭をゼロで穴埋めされた固定長の十進数として提示される。例えば、１０桁の固定された値が用いられる。１０桁以外の固定長又はゼロ以外の文字を用いた穴埋めといった、他の配置を整数の難読化に用いることができるものと理解する。
【００４４】
日付／時間型のデータに関しては、日付データは、例えば、ｙｙｙｙｍｍｄｄの形式で、及び日付／時間型のデータに関しては、ｙｙｙｙｍｍｄｄｈｈｍｍｓｓの十進数の文字形式で表され、これらも０〜９までの文字から構成され、以前公開した整数置換と同じタイプを用いて難読化されることができる。日、月、年、時間、分、及び秒、又はそれに類似するものの異なる順序といった、他の配置を日付型及び日付／時間型の難読化に用いることができると解釈する。
【００４５】
テキストデータに関しては、テキストデータは、限られた文字エンコーディングの範囲を使用している。例えばＡＳＣＩＩ文字エンコーディングは０ｘ２０〜０ｘ７Ｆである。テキストデータは、異なる範囲を用いて難読化することができる。しかし、攻撃を受けやすい結果を生まないような範囲を選択することに注意を払わなければならない。例えば、ＳＱＬインジェクションは、ある置換から生じ得るセキュリティーの弱点を突くテクニックである。ＳＱＬインジェクションの攻撃を回避するために、ある文字や、文字のシーケンスはテキストフィールド内に許容すべきではなく、これらの文字や、文字のシーケンスが使用されないように難読化されたデータを発生させることができる。ＳＱＬ攻撃は、Ｂａｓｅ６４表現などの、代替表現に変換することでテキストデータを難読化することによって回避することもできる。
【００４６】
ＢＬＯＢ型のデータは、バイナリーで任意のバイト配列から構成されている。多くのデータベースシステムでは、ＢＬＯＢデータ型を許容している。ＢＬＯＢ型のデータは、例えば、バイナリーデータをＢａｓｅ６４（テキスト）表現に変換することで、難読化することができる。
【００４７】
好ましくは、大小比較オペレーターなどの比較オペレーターの操作は、データが難読化された後で維持される。特に、数値並びに日付／日付＋時間型のデータの比較は、保存されなければならない。そこで、難読化された後も、データの標準的な順序を保存するような変換形式を用いるべきである。例えば、図１１に示した置換関数ｆ（）を使用することができ、該関数はｘ０＜ｘ１＜ｘ２＜ｘ３＜ｘ４＜ｘ５＜ｘ６＜ｘ７＜ｘ８＜ｘ９に対するアウトプット文字がｘ０．．．ｘ９となることがｔｒｕｅであることを保持する。ほとんどすべてのＡＳＣＩＩ文字はこのような置換に用いることができるが（即ち、０ｘ２１＝‘§’から０ｘ７Ｅ＝‘〜’まで）、しかし、前述したようにＳＱＬインジェクション攻撃に悪用されるものを除外している。従って、値が単調に増加するような１０ＡＳＣＩＩやその他の適切な文字の適切な配列を、整数及び日付／日付＋時間型のデータの難読化に用いることができる。他の関数も用いることができると解釈するが、例として、ｘ［１０］＝｛ｘ０，ｘ１，ｘ２，．．．ｘ９｝に関して、ｆ（ｃ）＝ｘ［ｃ−‘０’］となるいかなる関数も、置換関数として用いることができる。
【００４８】
各データベースインスタンスのためにユニークなマッピング関数をもつことが望ましいため、ランダムに見えるがある既知の種を用いる値ｘｉは発生させることができ、それゆえ、データベースがオープンされる度に、難読化された文字のｘ［１０］配列は再度生成することができる。以前データベースの特定のテーブルで使用され保存された乱数Ｒは、この目的のために使用される。ある実施形態では、Ｒを用いて、データベース全体における使用のために、単独のｘ［１０］配列が生成される。別の実施形態では、各テーブルごとに別々の配列が生成される。さらに別の実施形態では、各レコードフィールドの十進数文字の難読化配列ごとに、別々の配列が生成される。またさらには、十進数文字における全ての文字のためにある配列が用いられ、あるいは選択的に、二次元配列が用いられる。そして十進数文字における各位置（インデックス）は独立した難読化配列を有している。実装の際には、３２ビットの整数が保存され、整数は１０桁の十進数を用いて表現される。データは、日付データは８文字配列を用いることができ、日付＋時間データは１４文字十進数配列を用いることができる。従って、整数及び日付／時間型のデータを表現するのに必要な最大長の十進数文字は、ｘ［１４］［１０］の２次元配列を用いて提供することができる。ある実装においては、ｓ＝｛ｃ０，ｃ１，．．．ｃＮ｝といったオリジナルの十進数文字は、ｏｂｆ（ｓ）＝｛ｘ［０］［ｃ０−‘０’］，ｘ［１］［ｃ１−‘０’］，．．．ｘ［Ｎ］［ｃＮ−‘０’］｝といった難読化された文字を用いて表現することができる。
【００４９】
文字列置換によるデータ難読化における使用のために、適切で単調な順序の文字列を決定するために、シード値を発生することができる。様々な実施形態において、シード値は、データベースで、テーブル単位で、カラム単位で、又はカラム内の位置ごとにグローバルであることができる。例えば、グローバルなシード値Ｓは、単純に乱数Ｒであることもでき、又はＲの適切な変形であることもできる。各テーブルごとに発生したシード値Ｓに関して、Ｓは例えば図１２Ａに示すように決定される。他の方法も用いることができるものと理解されるが、図１２Ａでは各テーブルにユニークなＳを発生させるための、２つの異なる方法の典型的な擬似コードを示す。各カラムごとに発生したシード値Ｓに関して、他の方法を用いることもできるが、Ｓは例えば図１２Ｂに示すように決定される。最もきめの細かい１４×１０の配列のために、例えば図１２Ｃに示すように、シード配列が生成される。図１２に示された関数は、単に例示的なものであり、他の適切な関数も用いることができると理解する。
【００５０】
いったんシードＳが決定されると、ＡＳＣＩＩキャラクターセットのサブセットのような、文字の順序セットが、データの難読化のために決定される。ある実施形態においては、０から７の値が最初に決定される。例えば、ｙ０＝ＡＥＳ（Ｓ，Ｒ）が最初のバイトで、ｙ１が二番目のバイト、．．．ｙ９が１０番目のバイトである。あるいは、ｙｉは、ｈａｓｈ（Ｓ）のｉ番目のバイト、又は他の幾つかのＳの変形であることができる。バイトは０〜２５５の間の値であり、しかし、ｗｅ及びｔｈｅｍが０ｘ０７である場合は、各ｙｉ*＝ｙｉ＆７は０〜７の間である。
【００５１】
次に、値は図１３に示すように割り当てられ、基本的にはＡＳＣＩＩ表から次のｙｉ*番目の文字を拾い上げる。ＡＳＣＩＩ表は整列されており、より後ろの文字列がそこから拾い上げられるため、この手法は、もしｋ＜ｎでさえあればｘ［ｋ］＜ｘ［ｎ］であるように、結果的に得られるｘ［１０］の配列は並べられる。
【００５２】
もし大小比較オペレーターのような、比較オペレーターが、あるアプリケーションの特定のデータ型に必要ない場合は、いかなる通常の暗号化もこれらの型のフィールドに用いられる。例えば、比較オペレーターは、通常はテキスト型やＢＬＯＢ型には用いられない。従ってこれらのデータ型のデータについては暗号化できる。あるいは、そのような型のデータは、データのＢａｓｅ６４表現を用いて難読化することができる。ある実施形態において、難読化は、Ｂａｓｅ６４のキャラクターセットの置き換えを発生させて、「標準の」Ｂａｓｅ６４のエンコーディングセットの代わりにその置き換えを用いることによって達成され、テキスト型やＢＬＯＢ型のデータがエンコード／デコードされる。そのような置き換えは、例えば、乱数Ｒ及び既に難読化されたテーブル名／カラム名に基づいて発生させることができる。
【００５３】
公開されたシステム及び方法において、本発明の思想及び範囲を離れることなく、さまざまな変更及びバリエーションがなされる。従って、それらが添付した特許請求の範囲及びその均等物に入るものであれば、そのような変更及びバリエーションを本願発明はカバーすることを意図する。
【図１】
2010129089.tif 000003
【図２】
2010129089.tif 000004
【図３】
2010129089.tif 000005
【図４】
2010129089.tif 000006
【図５】
2010129089.tif 000007
【図６】
2010129089.tif 000008
【図７】
2010129089.tif 000009
【図８】
2010129089.tif 000010
【図９】
2010129089.tif 000011
【図１０】
2010129089.tif 000012
【図１１】
2010129089.tif 000013
【図１２】
2010129089.tif 000014
【図１３】
2010129089.tif 000015
【外国語明細書】
2010129089000001.pdf