説明

データベース難読化のシステム及び方法

【課題】データベースの機能性を有するソフトウェアアプリケーションにとって、データベースを難読化すること。
【解決手段】その機能性を保存する間、オリジナルのキャラクターの標準的な順序を維持するように、オリジナルのテーブル名、カラム名、テーブル順序、カラム順序、及び/又はデータのキャラクターセットを変更することにより、データベースのスキーマを難読化するためのシステム及び方法。

【発明の詳細な説明】
【背景技術】
【0001】
ソフトウェアの複製防止は、常にソフトウェア保護ベンダー、それらの顧客(すなわち、非認可の複製からソフトウェアを保護するために、彼らのソフトウェアの複製防止を利用している独立したソフトウェアベンダー(ISV))と、コンピュータソフトウェア中の複製防止を回避するソフトウェアクラッカーとの競争である。典型的には、新たな複製防止の方法が市場に到来すると(根本的に新しい方法か、既存の防止方法の改良かに関わらず)、ソフトウェアクラッカーは、ISVが請求する価格よりも安い価格で、クラックされたソフトウェアを販売することができるように、その防止手段を破壊しようと試みる。
【0002】
ソフトウェア複製防止の開発者は、クラッカーにとって、クラッキングが極力困難で失望するものになるようにすることを望む。一つの重要な目標として、クラッカーが「ジェネリッククラック」を見つけ出す可能性を回避することがある。これによって、いったん防止機構が分析され及びクラックされると、その防止機能を用いるいかなるソフトウェアも簡単にクラックされ得る。これはソフトウェアセキュリティベンダーにとって特に重要であり、かれらの製品は多くのISVによって利用されている。ジェネリッククラックの存在は、彼らの顧客(ISV)全てに、不利に影響することになるだろう。一方で、各防止アプリケーションが個別にクラックされなければならないとしたならば、クラッカーは各アプリケーションをクラックするために、より多くの時間とエネルギーを費やす必要が出てくる。結果的に、限られた期間の中で、数個の防止アプリケーションがクラックされるだけで済む。
【0003】
複製防止アプリケーションソフトウェアに関するライセンス情報を保存及び管理するために、ソフトウェアセキュリティソリューションとして、構造型クエリー言語(SQL)データベースなどのデータベースを利用することができる。ライセンス情報は、データベースに保存されているときには、暗号化等によってそれ自体保護されているかもしれない。しかし、セキュリティソリューションの分析及びクラックをより困難にするためには、クラッカーとなりそうな者にとって、何のデータがデータベースに保存されているか、どのように保存しているのか、及びどのようにデータベースのレコードを操作しているのかについて、理解することがより困難になるようなデータベースをつくることが望ましい。さらには、各ライセンスデータベースインスタンスをユニークなもの、すなわち他の全てのものと異なるものにすることが望ましい。そうすれば、たとえあるクラッカーがあるライセンスデータベースを分析しても、その知識は、他のデータベースインスタンスへ直接は応用することはできない。例えば、もしデータベーススキーマが、「ライセンス」、「ライセンス属性」などのテーブルのラベルを有しており、かつライセンスレコードが、「ベンダー」「シリアルナンバー」「ライセンス特性」及びそれらに類似するものといったフィールド(即ちテーブルのカラム名)を有しているなら、クラッカーは、データベース閲覧プログラムで、データベースを簡単に読み取ることができ、すぐにそこに何があるのか分かってしまうだろう。そして、その情報はセキュリティソリューションをクラックする試みに活用され得ることだろう。従って、データベースに保存されているデータだけでなく、データベーススキーマも同様に安全性を確保することが望まれる。
【0004】
データベースセキュリティを提供する一つのソリューションとして、暗号化を用いて、データベース内に保存されているデータを暗号化する方法がある。そのような暗号化は幅広く応用されており、医療保険の携行と責任に関する法律(HIPAA)といった法律や、PCIデータセキュリティスタンダード(PCI DSS)といった規格により、多くの場所で実際に指定されている。これらのケースでは、暗号化はデータ(例えば、患者の名前、クレジットカード番号、及びそれに類似するもの)を保護するものの、データベーススキーマ(テーブル名やカラム名)を保護するわけではない。そのようなセキュリティソリューションによって保護されているセキュリティの脅威は、認証されていないユーザーがデータベースからデータを盗むことである。
【0005】
一方、ソフトウェアライセンスのケースにおける、脅威の対象は異なる。この場合、ソフトウェアを所有するISVの敵は、非認可のソフトウェアの複製を製造及び販売しようとするエンドユーザーである。この場合、ソフトウェアはサーバーといった、ユーザーのコンピューター上で使用されるため、エンドユーザーはデータベースをコントロールできる。このため、単純なデータの暗号化では、ソフトウェアの非認可の複製を阻止するのに役に立たないだろう。なぜなら、暗号鍵はソフトウェアの中に埋め込まれており、ソフトウェアはユーザーがコントロールできる状況のため、ユーザーにとって暗号鍵にアクセス可能だからである。高価なハードウェアの暗号化モジュールを追加することは、同様の理由、即ちエンドユーザーがそのハードウェアを同様にコントロールでき、単純にそのモジュールを使うことによってデコードするための全体のデータベースにアクセスできることから、役には立たない。
【発明の概要】
【発明が解決しようとする課題】
【0006】
ソフトウェアを保護するために、暗号化を用いることに加えて、ソフトウェアの操作及び内容の隠蔽化又は難読化の様々な方法が、ソフトウェアベンダーによって用いられている。そのようなクラッカーが、ソフトウェアを分析することをより困難にするために、あるソフトウェア保護製品では、(製品が何をおこなっているかを隠蔽する)様々な難読化方法を採用しており、またアンチデバッギング方法も採用しているかもしれない。データベースの機能性を有するソフトウェアアプリケーションにとって、データベースを難読化することが望ましい。
【課題を解決するための手段】
【0007】
ここで記述するシステム及び方法の実施形態は、その機能性を保存する間の、データベーススキーマの難読化を提供し、オリジナルのテーブル名、カラム名、テーブル順序、カラム順序を変更すること、及び/又はデータのキャラクターセットを、オリジナルのキャラクターの標準的な順序を維持するように変更することを含む。
【0008】
前記の概略的な記述と、後記の詳細な記述の両方とも、典型的かつ説明的なものであり、請求項に記載された発明のさらなる説明を提供する意図であることを理解しなければならない。
【0009】
添付図は、公開された実施形態の更なる理解を提供することを含む。幾つかの図は、C言語の文法を用いた擬似コードなど、プログラムの擬似コード中におけるある機能性の典型的な実装を示す。しかし、いかなる他のプログラミング言語でも、同様の結果を達成するために用いることができるものと解釈する。
【図面の簡単な説明】
【0010】
【図1】図1は、ここで記述するシステム及び方法に従った使用のための典型的なコンピューティングシステムのブロック図である。
【図2】図2は、ここで記述するシステム及び方法に従った使用のための、典型的なネットワークコンピュータの環境を示すブロック図である。
【図3】図3は、ここで記述するシステム及び方法に従った典型的なシステムによって実行される処理を示すフローチャート図である。
【図4】図4は、ここで記述するシステム及び方法に従った典型的なシステムの典型的なコンポーネントが協働することを示すブロック図である。
【図5】図5A及び5Bは、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のための擬似コードである。
【図6】図6は、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のためのオプションリストである。
【図7】図7A、7B、及び7Cは、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のための擬似コードである。
【図8】図8は、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のための擬似コードである。
【図9】図9は、ここで記述するシステム及び方法に従った典型的なシステムによって実行される処理を示すフローチャート図である。
【図10】図10は、ここで記述するシステム及び方法に従った典型的なシステムの使用における使用のための擬似コードである。
【図11】図11は、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のための、置換物のリストである。
【図12】図12A、12B、及び12Cは、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のための擬似コードである。
【図13】図13は、ここで記述するシステム及び方法に従った典型的なシステムの実装における使用のための擬似コードである。
【発明を実施するための形態】
【0011】
以降ここで用いるときは、用語「データベースの難読化」は、その機能性が維持されている間は、その構造が隠蔽されるように、データベースのインスタンスを変更することを示す。用語「データベースのスキーマ」はここで用いるときは、そのテーブル名、テーブル間の関係、各テーブルのカラム名、及び各カラムに保存されたデータのデータ型及び他の属性を含んだ、データベースの構造の記述を示す。実施形態において、データベースのスキーマは、データベース内にデータを保存するために使用されるキャラクターセットにおけるキャラクターの順序も含めることができる。
【0012】
典型的な実施形態では、一つ又はそれ以上の次の一般的な特性が、実装されることができ、データベースの各インスタンスのデータベーススキーマ、及び/又は、例えば、ソフトウェアライセンスの情報を有しているライセンスデータベースと言った、データベースの各インスタンスに保存されたデータを難読化する。各データベースインスタンスにおいては、ユニークで意味の無いテーブル名を使用することができる。また、各データベースインスタンスの一つ又はそれ以上のテーブルにおいては、ユニークで意味の無いカラム名を使用することができる。テーブル内のテーブル及び/又はカラムは、各データベースインスタンスのデータベーススキーマにおいて、再度順序付けられることができる。例えば、あるデータベースインスタンス内のテーブル3におけるカラム5であるものは、他のデータベースインスタンス内のテーブル6におけるカラム10であるかもしれない。さらには、レコードデータ自体は、各データベースインスタンス内でユニークにエンコードされることができる。リレーショナルデータベース(即ち、主キーやリレーショナルデータベースのテーブルを関連付けるための外部キーの使用)のテーブル間のような、参照整合性が保存される。さらには、数値や日付/時間データの順序といった、一つ又はそれ以上のデータ型のデータの順番が保存される。その結果、大小比較オペレーターのような、比較オペレーターを用いた検索で、難読化されていないデータベースの検索結果と同じ結果を生み出すだろう。
【実施例】
【0013】
図1は、ここで記述するシステム及び方法の実施形態とともに使用するための、典型的なコンピューティングシステム100を表す。コンピューティングシステム100は、オペレーティングシステム(OS)や様々なコンピューティングアプリケーション180といった、ソフトウェアを実行することができる。典型的なコンピューティングシステム100の操作は、ハードディスクドライブ(HDD)115、光学ディスク(図示せず)、SSD(図示せず)又はその類似物といった、コンピュータが読み取り可能な記録媒体に保存されたインストラクションなどの、コンピューター読み取り可能なインストラクションによって主に制御されている。そのようなインストラクションは、中央演算処理装置(CPU)110内で実行され、コンピューティングシステム100の稼動を引き起こす。多くの知られたコンピューターサーバー、ワークステーション、及びパソコンにおいて、CPU110は、集積回路と呼ばれるマイクロエレクトロニクスチップ上に実装されている。
【0014】
典型的なコンピューティングシステム100は、単一のCPU110を備えているように図示しているが、そのような記述は単に実例に過ぎず、コンピューティングシステム100は、複数のCPU110を備えていてもよい。さらには、コンピューティングシステム100は、通信ネットワーク170又は他の幾つかのデータ通信手段(図示しない)を通した、遠隔CPU(図示しない)のリソースを使用してもよい。
【0015】
操作中は、CPU110は、HDD115などのコンピューター読み取り可能記録媒体からのインストラクションを、フェッチし、デコードし、そして実行する。そのようなインストラクションは、オペレーティングシステム(OS)、実行可能なプログラム、又は類似物といった、ソフトウェア中に含まれることができる。コンピューターのインストラクション及び他のコンピューター読み取り可能データなどの情報は、コンピューティングシステム100のコンポーネント間を、コンピューターの主要なデータ転送パスを介して転送される。シリアルな通信パスでデバイス間のデータ通信を行うために、シリアライザー・デシリアライザー(SerDes)を用いたアーキテクチャーなどの、他のコンピューターアーキテクチャー(図示せず)も用いることができるが、主要なデータ転送パスは、システムバスアーキテクチャー105を用いてもよい。システムバス105は、データ送信のためのデータライン、アドレス送信のためのアドレスライン、及び中断処理の送信やシステムバスの操作のための制御ラインを含むことができる。いくつかのバスは、拡張カード、コントローラー、及びCPU110によるバスへのアクセスを制御するバスの調整を提供する。バスに付随してバスへのアクセスを調整するデバイスをバスマスターと呼ぶ。バスマスターサポートは、プロセッサー及びそのサポートチップを有するバスマスターのアダプターを追加することにより、バスのマルチプロセッサー構造の構築も可能にする。
【0016】
システムバス105に連結したメモリーデバイスは、ランダムアクセスメモリー(RAM)125及びリードオンリーメモリー(ROM)130を含む。そのようなメモリーは、情報を保存したり、取り出したりすることを可能にする回路を含む。ROM130は通常、変更不可能な保存データを有している。RAM125に保存されたデータは、CPU110又は他のハードウェアデバイスによって読み取ることも変更することもできる。RAM125及び/又はROM130へのアクセスは、メモリーコントローラー120によって制御されてもよい。メモリーコントローラー120は、インストラクションが実行される際に、仮想アドレスを物理アドレスに変換するアドレス変換機能を提供してもよい。メモリーコントローラー120は、システム内のプロセスを分離したり、ユーザープロセスからシステムプロセスを分離する、メモリー保護機能を提供してもよい。従って、ユーザーモードで実行するプログラムは、通常、そのプロセスの仮想アドレス空間で割り当てられてメモリーのみアクセスできる;そのプロセス間で共有されたメモリーがセットアップされない限りは、他のプロセスの仮想アドレス空間内のメモリーにアクセスすることはできない。
【0017】
さらには、コンピューティングシステム100は、CPU110から、プリンター140、キーボード145、及びマウス150といった周辺機器への周辺バスを用いたインストラクションの通信を担う周辺機器コントローラー135を含むことができる。周辺バスの例として、PCI(Peripheral Component Interconnect)バスがある。
【0018】
ディスプレイ160(ディスプレイコントローラー155によって制御されている)、はコンピューティングシステム100によって発生した視覚的な出力を表示するために使用される。そのような視覚的な出力は、テキスト、グラフィックス、アニメ化されたグラフィックス及びビデオを含むことができる。ディスプレイ160は、CRTベースのビデオディスプレィ、LCDベースのフラットパネルディスプレー、ガスプラズマベースのフラットパネルディスプレー、タッチパネル、又はその類似物によって実装されてもよい。ディスプレイコントローラー155は、ディスプレイ160に送信されるビデオシグナルを発生させるのに必要な電子コンポーネントを含む。
【0019】
さらには、コンピューティングシステム100は、外部通信ネットワーク170へコンピューティングシステム100を連結させるために用いることができるネットワークアダプター165を含んでもよく、外部通信ネットワークは、インターネットへの接続を含みあるいは提供してもよい。通信ネットワーク170は、ソフトウェア及び情報を電子的に通信及び転送する手段を、コンピューターユーザーに提供してもよい。さらには、通信ネットワーク170は分散処理を提供してもよく、分散処理は、複数のコンピューター並びに、タスクを実行する際の負荷の共有及び協働作用を含む。ここで示したネットワーク通信は典型的なものであり、コンピューター間の通信接続を確立する他の手段を用いてもよいものとして解釈する。
【0020】
ここで記述する発明の概念が、様々なコンポーネント及び構築物を有する様々なコンピューティング環境において実装されるので、典型的なコンピューティングシステム100は、単にここで記述するシステム及び方法を稼動させるためのコンピューティング環境の例示にすぎず、異なるコンポーネント及び構築物を有するコンピューティング環境において、ここで記述するシステム及び方法の実装を制限するものではないものとして解釈する。
【0021】
図2に示すように、コンピューティングシステム100は、コンピューターネットワークの一部として配置されることができる。一般的に、コンピューティング環境に関する上記記述は、ネットワーク環境内に配置されたサーバーコンピューター及びクライアントコンピューターの両方に当てはまる。図2は、通信ネットワークを介してクライアントのコンピューティング環境と通信を行うサーバーと共に、典型的かつ例示的なネットワーク化されたコンピューティング環境200を図示しており、当該通信ネットワークにおいて、ここで記述するシステム及び方法が用いられる。図2に示すように、サーバー205は、通信ネットワーク230(固定線、ワイヤレスLAN、WAN、イントラネット、エクストラネット、ピアツーピアネットワーク、VPN、インターネット、又は他の通信ネットワークのいずれか又はそれらの組み合わせを含む)を介して、ラップトップコンピューター210、携帯電話215、VoIP電話220、PDA端末225、コンピューティングシステム100、及び/又は他のネットワーク可能に配置されたデバイス/システム(図示せず)といった、いくつかのクライアントコンピューティング環境と相互接続されてもよい。サーバー205は、ハイパーテキスト・トランスファー・プロトコル(HTTP)、ファイル転送プロトコル(FTP)、シンプル・オブジェクト・アクセス・プロトコル(SOAP)、ワイヤレス・アプリケーション・プロトコル(WAP)及びその類似物といった、幾つかの既知のプロトコルのいずれかを介して、クライアントコンピューティング環境100、210、215、220、225などへ又はこれらからデータを処理又は通信するように動作するサーバーを含んでもよい。さらには、ネットワーク化された環境200は、セキュアド・ソケット・レイヤー(SSL)、プリティ・グッド・プロトコル(PGP)、又はその類似物といった、様々なデータセキュリティプロトコルを用いることができる。各クライアントコンピューティング環境100、210、215、220、225などは、ウェブ・ブラウザー(図示せず)若しくは他のグラフィカル・ユーザー・インターフェーズ(図示せず)といった一つ又はそれ以上のコンピューティングアプリケーション、又はサーバー205と相互作用するモバイルデスクトップ環境(図示せず)をサポートするように動作するオペレーティングシステムを備えることができる。
【0022】
典型的な実装において、難読化されたデータベースは、ソフトウェアライセンス情報をサーバー205上に保存するために用いられることができる。しかし、そのような実装は、単に例示的なものである。他のタイプのアプリケーションにおける利用のために、データベースの他のタイプが難読化されることができるものとして解釈する。好ましくは、難読化されていないデータベースは、データベースの稼動に不利に影響することなく、ここで開示したシステム及び方法に従って難読化された同じデータベースのバージョンに置き換えることができる。言い換えれば、データベースが難読化されているかされていないかに関わらず、データベースは、ユーザーとの同じ相互作業及び同じ結果を提供する。
【0023】
従って、動作時には、ユーザー(図示せず)は、データベースに保存されているデータのような、所望のデータ及び/又はコンピューティングアプリケーションを手に入れるために、クライアントコンピューティング環境で実行されているコンピューティングアプリケーションとやり取りをすることができる。データ及び/又はコンピューティングアプリケーションは、サーバーコンピューティング環境205上に保存することができ、典型的な通信ネットワーク230上で、クライアントコンピューティング環境100、210、215、220及び225を通して協働ユーザーと通信することができる。参加ユーザーは、サーバーコンピューティング環境205上全体又は一部に保存された特定のデータ及びアプリケーションにアクセスすることを求めることができる。そのようなデータは、処理及び/又は保存のために、サーバー205とクライアントコンピューティング環境100、210、215、220及び225間で通信される。サーバー205は、世代、認証、暗号化、難読化、並びにデータ及びアプリケーションの通信のためのコンピューティングアプリケーション、処理並びにアップレットを司り、他のサーバーコンピューティング環境(図示せず)、サードパーティサービスプロバイダ(図示せず)、ネットワーク・アタッチト・ストレージ(NAS)及びストレージ・エリア・ネットワーク(SAN)と協働して、アプリケーション/データの処理を実現する。
【0024】
特に、サーバー205は、ソフトウェアライセンスデータベース240で、ソフトウェアライセンスデータを管理することができる。そのようなソフトウェアライセンス情報は、例えば、ソフトウェアのメータリングやモニタリングに用いることができる。これは、例えば、許可されたライセンスの数だけが使用されることを確証するためのソフトウェアライセンスの追跡及び管理を含むことができる。ソフトウェアの同時利用の監視により、リアルタイムでライセンス制限の執行を可能にし、登録されていない又はライセンスされていないソフトウェアの検出ができ、一定時間以内にあるソフトウェアの実行を停止するか又は実行を制限することができる。ライセンスデータベースは、特定のポリシーに従って、ライセンスされたアプリケーションの使用をメータリングするため、並びに使用及び使用を試みた記録を管理するために使用することができる。組織は、モバイルユーザーのためのライセンスのチェックアウト及びチェックインを行うこともでき、使用状態にある全てのライセンスの記録を維持することができる。これは、例えば、厳密なライセンスコントロールを犯すことを回避するために制限されたライセンス数が入手可能な時に使用することができる。ソフトウェアのメータリングは、さらに、組織の全てのレベル間での一致した規格のセットを、設定し管理する手段を提供する。従って、ソフトウェアライセンスデータベースは、ライセンスされたソフトウェアの使用の追跡を維持したり、ネットワーク環境でインストールされたソフトウェアの詳細を提供したり、ソフトウェアの使用の詳細を追跡するために使用できる(特定部門でどの程度一定のライセンスされたソフトウェアが使用されているか、使用されたピーク時間及び/又は同時に実行された複製のピーク数、どのようなアドオンが共に使用されたかなど)。そのような情報は、例えば組織内でソフトウェアのライセンスのコストを管理するのに使用することができる。
【0025】
典型的な実装において、ソフトウェアライセンス情報を有するライセンスデータベース240を備えるサーバー205は、ネットワーク230を介して、コンピューティング環境100、210、215、220及び225と通信をすることができ、ライセンスされたソフトウェアのインストール及び/又は操作が、ライセンスされたソフトウェア及びそれに類似ずるものの使用をモニターすることを可能にする。ソフトウェアライセンスデータベース240は、データベースの複製の作成及び販売から保護するためなどで、その構造及び/又は操作は隠蔽するために難読化されることができる。難読化は、データベース操作に不利に影響することなく成し遂げることができる。ある実施形態においては、サーバー205にインストールされた後で、データベースは難読化されることができる。他の実施形態においては、既に難読化された状態でインストールされることができる。また他の実施形態においては、サーバー205にインストール処理を行っている最中に難読化されることができる。
【0026】
図3は、データベースの難読化の際の実行される処理を示すフローチャート図である。処理は、オリジナルデータベースを取得するブロック300から開始する。データベースのスキーマは、難読化され310、一つ又はそれ以上の320から360までのステップを含み、いずれかの順序で達成される。データベース310の難読化は、一つ又はそれ以上の:一つ又はそれ以上のデータベースのテーブル名の変更 320;一つ又はそれ以上のテーブルの一つ又はそれ以上のカラムの変更 330;テーブルの再順序付 340;一つ又はそれ以上のテーブルのカラムの再順序付 350;及びそのデータ型に用いられるキャラクターの標準的な順序が維持されるように、一つ又はそれ以上のデータベースのデータ型において用いられるキャラクターセットの変更 360、を含めることができる。標準的な順序は、大小比較オペレーター又はその類似物のような、データの標準的な順序に依存する操作を保存するように、維持される。そして、難読化されたデータベースは、出力される 370。
【0027】
図4は、難読化されたデータベースを発生させるための、典型的なデータベース難読化システム400の、典型的なコンポーネントの協働を示す、ブロック図である。システム400は、オリジナルデータベース410の取得、オリジナルのデータベースの難読化、及び難読化されたデータベース460の出力を行う、難読化処理装置420を含む。難読化処理装置420は、典型的には、コンピューター読み取り可能記録デバイスに保存されたコンピューターコードを含む、難読化指示セット430と連結している。難読化処理装置420は、難読化構築パラメーター440とも連結し、コンピューター読み取り可能記録デバイスに保存されたコンピューターコードをも含む。構築パラメーター440は、ユーザーによって選択され、又は例えば、特定の実装に望ましいといった、オリジナルのデータベースの特性及び/又は難読化されたデータベースの所望の特性に基づいて、自動的に又はユーザーが選択したパラメーターと共に、決定されてもよい。難読化処理装置420は、乱数発生装置450とも連結する。難読化処理装置420は、乱数発生装置450によって発生した乱数を用いて、難読化指示セット430及び難読化構築パラメーター440に従い、オリジナルのデータベース410を処理して、難読化されたデータベース460を出力する。
【0028】
図5Aは、データベースの各インストールされたインスタンスにおいて、ユニークで意味のないテーブル名を発生させる典型的な実装の擬似コード500を示す。テーブル名及びカラム名はヘッダーファイル504、506において定義されるが、内部開発のためのソフトウェア保護ベンダーによる使用のためなどのデバッグモード510のため、及び顧客に輸送される製品のためなどのリリースモード515のために異なって定義される。デバッグモードのときには、テーブル名及びカラム名は難読化されず504、しかし、デバッグモードではないときには、テーブル名及びカラム名は難読化される506。難読化されたテーブル名及びカラム名において、「rrrrrrrrrr」は、各テーブル又はカラムの定義行のためのランダムな16進数の文字である。10の「r」が示されているが、いかなるランダムな16進数のいずれか、あるいはランダムな文字を用いることもできる。そしてコードは、データベース記述構造体520を構築する。スタートアップコードは、例えば図5Bで使用するコードのような、実際のポインターを設定する。そして、追加コード(図示しない)は、これらの静的な構造を通して、テーブル名及びカラム名を用いる。ある実施形態においては、他の情報は、テーブル又はカラム構造に保存されてもよい。例えば、構造体は各カラムのデータ型、各カラムに許容されるデータの最大長、及びその類似物について決定できる。
【0029】
ユニークなテーブル名及びカラム名を発生させるために、好ましくは乱数発生装置によって乱数Rを発生させて保存しておく。乱数Rは、例えば固定名称テーブル、即ちテーブル名が難読化されていないテーブルに保存することができる。他の選択可能な実施形態として、データベースがインストールされたコンピューターから取得できる、コンピューターのフィンガープリント値のように、ユニークだが一定で、ランダムではない値Cを用いることができる。例えば、ディスクのシリアルナンバー、ネットワークカードのアドレス又はそれらに類似するものといったコンピューターの特性を用いて、ユニークで意味のないテーブル名及びカラム名を発生させることができる。少なくとも、乱数を使用することにより、同じコンピューター上に存在する複数のユニークなデータベースを許容できることから、乱数Rを用いることが好ましい。さらには、難読化された名前を発生させるのにハードウェアコンポーネントが使用された場合、コンポーネントの交換などの、ハードウェアコンポーネントの変更は、データベースを無効にしてしまう可能性がある。
【0030】
典型的な実施形態において、データベーススキーマの難読化は、R又はCの値及びテーブル若しくはカラムのオリジナルの名前又は特定番号を用いて、一つ又はそれ以上のテーブル及びテーブルにおける一つ又はそれ以上のカラム名の「難読化された名前」を派生させることを伴う。難読化された名前を派生させるのに多くの方法がある。他の又は更なる関数を用いることができるが、図6は、使用可能な典型的な難読化関数のリストである。図6にリストされたある関数においては、新暗号規格(AES)が用いられる。AESは米国政府によって、暗号規格として採用されたブロック暗号であり、全世界で使用されている。他の代替として、データ暗号化標準(DES)を用いることができる。
【0031】
ある実施形態において、発生した名前の長さを変えることで、さらに難読化を行うことができる。例えば、16文字の名前を発生させたなら、決められた減少長(最初の文字及び3)を用いることによってなど、最後の0〜3文字は切り捨てることができる。
【0032】
難読化された名前を発生させた後、これらはASCII文字に変換することができる。例えば、16進数で表すことができる。そして、保護コードは、難読化された名前に従って、構造体中のネームポインターを変更することができる。
【0033】
ある実施形態において、乱数Rが用いられると、データベース内の特定のテーブルの特定のカラムに保存されることができる。この場合、そのテーブルの名前は難読化されるべきではないし、Rを有するカラム名も然りである。難読化されたテーブル名及びカラム名が再度生成されるようにデータベースがオープンされたときには、Rは再度取得されることができる。ある実施形態では、たった一つのカラムを有するテーブルなど、ユニークなテーブルを、Rを保存するのに用いることができる。そして、データベーススタートアップコードが、データベーススキーマを列挙し、たった一つのカラムを有する唯一のテーブルを特定し、そしてRを再取得するためにそのスキーマ自体からテーブル名及びカラム名を使用する。
【0034】
さらに、データベーススキーマを難読化するために、スキーマの要素を再度順序付けることができる。テーブル及びカラムがリネームされた後で、クラッカーはなおも、あるテーブルのあるカラムが何を有しているか決定でき、その情報を用いて、保存されたスキーマからカラム名及びテーブル名を決定することができてしまうため、この方法は役に立つ。テーブル名及びカラム名の特定をより困難にするために、スキーマの定義は、ランダムに再順序付けることができる。
【0035】
ある典型的な実施形態では、データベースが、複数のCREATE TABLE SQLコマンドで、作成された場合、DbTableの構造体配列が処理される。通常は、図7Aのコードのようなコードが、テーブルのアウターループトゥロープで使用され、図7Bのコードのようなコードが各テーブルのカラムのインナーループトゥロープで使用される。ある実施形態においては、そのコードは、例えば「i1,i2、...iNとして、(NumOfLicenseTables−1)」のようなコードを用いて、「0、1、...」といった一連の番号のランダムな置き換えを発生させるようなコードに置き換えることができる。置き換えられた番号は、「TablePermute[NumOfLicenseTables]」のようなコードを用いて、配列に入力される。そして、アウターループは、図7Cのようになる。同様に、各テーブル構造体のカラムインデックスも置き換えることができ、インナーループはカラムの置き換えられた順序を使用することができる。
【0036】
図8は、例えば、サーバー205などのサーバーにインストールするためといった、データベースインスタンスを作成するための典型的な実装の図である。図8は、その中で、記述内容のインデント部分がプログラミングループを表している擬似コードを使用している。実際のコンピューターコードは、適切なプログラミング言語で記述されることができる。
【0037】
図8において、乱数Rが発生する800。例えば以前記述したように、固定された名前を保持した一つのテーブルを除いて、難読化されたテーブル名及びカラム名はR及びオリジナルの名前から派生する810。以降に記述するように、固定名称テーブルは、Rを保存するために使用されることができる。テーブルインデックスのランダムに置き換えられた配列が作成される820。そして、置き換え中の各テーブルにおいて、難読化されたテーブル名を用いて、CREATE TABLE行が発行される830。カラム名インデックスのランダムな置き換え配列が作成される840。次に、各カラムの置き換えにおいて、難読化されたカラム名及び関連するカラムデータは、CREATE TABLE文のために発行される850。SQLコマンドが実行されてテーブルが作成される860。最後に、難読化されたテーブル名及び/又はカラム名を再度発生させる際の使用のため、Rが名称固定テーブルに挿入される870。
【0038】
図9は、上記処理を用いて難読化されたデータベースを使用するための典型的なステップを示すフロー図である。難読化されたデータベースはオープンされ900、Rは名称固定テーブルから読み込まれる910。名称固定テーブルは、例えばデータベースを列挙して、単一のカラムを有するテーブルを特定することによって、特定することができる。難読化されたテーブル名及びカラム名は、R及びオリジナルの名前を用いて派生する920。そして、データベースは、難読化されたテーブル名及びカラム名を用いて使用される930。
【0039】
データベーススキーマが、ランダムに見えるテーブル名及びカラム名を用い、スキーマの要素を再度順序付けされて難読化された後、二つの異なるデータベースインスタンスのスキーマは、全体として異なって見え、クラッカーにとって、どのテーブルのどのカラムが何の情報を有しているのか理解するのに、よりいっそう困難にな経験をすることであろう。
【0040】
上記のようにテーブル及びカラムをリネーム及び再配置することによってデータベーススキーマを難読化することに加えて、様々なレコード内の実際のデータを難読化することも望ましい。データの難読化は、データの標準的な順序に影響しないように行われるべきであり、そこで標準的な順序に依存するオペレーターは、難読化したデータと難読化されていないデータの両方で同一の結果を生み出すだろう。例えば、大小比較オペレーターのような、比較オペレーターの結果は、データの標準的な順序に依存している。オリジナルのデータと難読化されたデータを用いて同一の結果を生み出すべきそのようなオペレーターを用いた、ステートメントの例が図10に示されている。難読化されたデータは、単純に暗号化されたデータとは同一ではない。なぜなら、通常の暗号化は、このような能力を提供しないからである。通常の暗号化は、正確な一致(レコード値==予想値)のためのデータ比較には有用であるが、例えば、大小比較が必要な場合には使用できない。
【0041】
最低でも4つの異なるデータ型が、データの難読化に関して別々に考えられ、そのデータ型として、整数型若しくは他の数値型のデータ、日付及び日付+時間型のデータ、テキストデータ、及び、バイナリラージオブジェクト(BLOB)のデータが含まれる。BLOB型は、画像、オーディオ、ビデオ、又は他のマルチメディアオブジェクト及びその類似物といった、単一の実体として保存されるバイナリーデータを含む。
【0042】
さらには、データベースのテーブルは、例えば、リレーショナル・データベースス・マネージメント・システム(RDBMS)のテーブル間の関係を定義する際に、データベースを編成するのを補助する主キーや外部キーを、通常は有している。キーは、例えば、一次正規形、二次正規形、又は三次正規形といった正規形にデータベースを正規化するために、データベースをリファクタリングすることも可能にする。例えば16進数形で、ランダム値をキーに割り当てて、クラッカーにとって意味のないものにみえるようにすることができる。
【0043】
数値型あるいは他の数値型データに関して、そのようなデータは、0〜9までの文字のからなる十進数の文字を含んでいる。難読化されたデータの比較を可能にするために、これらはテキストだが、整数値は、先頭をゼロで穴埋めされた固定長の十進数として提示される。例えば、10桁の固定された値が用いられる。10桁以外の固定長又はゼロ以外の文字を用いた穴埋めといった、他の配置を整数の難読化に用いることができるものと理解する。
【0044】
日付/時間型のデータに関しては、日付データは、例えば、yyyymmddの形式で、及び日付/時間型のデータに関しては、yyyymmddhhmmssの十進数の文字形式で表され、これらも0〜9までの文字から構成され、以前公開した整数置換と同じタイプを用いて難読化されることができる。日、月、年、時間、分、及び秒、又はそれに類似するものの異なる順序といった、他の配置を日付型及び日付/時間型の難読化に用いることができると解釈する。
【0045】
テキストデータに関しては、テキストデータは、限られた文字エンコーディングの範囲を使用している。例えばASCII文字エンコーディングは0x20〜0x7Fである。テキストデータは、異なる範囲を用いて難読化することができる。しかし、攻撃を受けやすい結果を生まないような範囲を選択することに注意を払わなければならない。例えば、SQLインジェクションは、ある置換から生じ得るセキュリティーの弱点を突くテクニックである。SQLインジェクションの攻撃を回避するために、ある文字や、文字のシーケンスはテキストフィールド内に許容すべきではなく、これらの文字や、文字のシーケンスが使用されないように難読化されたデータを発生させることができる。SQL攻撃は、Base64表現などの、代替表現に変換することでテキストデータを難読化することによって回避することもできる。
【0046】
BLOB型のデータは、バイナリーで任意のバイト配列から構成されている。多くのデータベースシステムでは、BLOBデータ型を許容している。BLOB型のデータは、例えば、バイナリーデータをBase64(テキスト)表現に変換することで、難読化することができる。
【0047】
好ましくは、大小比較オペレーターなどの比較オペレーターの操作は、データが難読化された後で維持される。特に、数値並びに日付/日付+時間型のデータの比較は、保存されなければならない。そこで、難読化された後も、データの標準的な順序を保存するような変換形式を用いるべきである。例えば、図11に示した置換関数f()を使用することができ、該関数はx0<x1<x2<x3<x4<x5<x6<x7<x8<x9に対するアウトプット文字がx0...x9となることがtrueであることを保持する。ほとんどすべてのASCII文字はこのような置換に用いることができるが(即ち、0x21=‘§’から0x7E=‘〜’まで)、しかし、前述したようにSQLインジェクション攻撃に悪用されるものを除外している。従って、値が単調に増加するような10ASCIIやその他の適切な文字の適切な配列を、整数及び日付/日付+時間型のデータの難読化に用いることができる。他の関数も用いることができると解釈するが、例として、x[10]={x0,x1,x2,...x9}に関して、f(c)=x[c−‘0’]となるいかなる関数も、置換関数として用いることができる。
【0048】
各データベースインスタンスのためにユニークなマッピング関数をもつことが望ましいため、ランダムに見えるがある既知の種を用いる値xiは発生させることができ、それゆえ、データベースがオープンされる度に、難読化された文字のx[10]配列は再度生成することができる。以前データベースの特定のテーブルで使用され保存された乱数Rは、この目的のために使用される。ある実施形態では、Rを用いて、データベース全体における使用のために、単独のx[10]配列が生成される。別の実施形態では、各テーブルごとに別々の配列が生成される。さらに別の実施形態では、各レコードフィールドの十進数文字の難読化配列ごとに、別々の配列が生成される。またさらには、十進数文字における全ての文字のためにある配列が用いられ、あるいは選択的に、二次元配列が用いられる。そして十進数文字における各位置(インデックス)は独立した難読化配列を有している。実装の際には、32ビットの整数が保存され、整数は10桁の十進数を用いて表現される。データは、日付データは8文字配列を用いることができ、日付+時間データは14文字十進数配列を用いることができる。従って、整数及び日付/時間型のデータを表現するのに必要な最大長の十進数文字は、x[14][10]の2次元配列を用いて提供することができる。ある実装においては、s={c0,c1,...cN}といったオリジナルの十進数文字は、obf(s)={x[0][c0−‘0’],x[1][c1−‘0’],...x[N][cN−‘0’]}といった難読化された文字を用いて表現することができる。
【0049】
文字列置換によるデータ難読化における使用のために、適切で単調な順序の文字列を決定するために、シード値を発生することができる。様々な実施形態において、シード値は、データベースで、テーブル単位で、カラム単位で、又はカラム内の位置ごとにグローバルであることができる。例えば、グローバルなシード値Sは、単純に乱数Rであることもでき、又はRの適切な変形であることもできる。各テーブルごとに発生したシード値Sに関して、Sは例えば図12Aに示すように決定される。他の方法も用いることができるものと理解されるが、図12Aでは各テーブルにユニークなSを発生させるための、2つの異なる方法の典型的な擬似コードを示す。各カラムごとに発生したシード値Sに関して、他の方法を用いることもできるが、Sは例えば図12Bに示すように決定される。最もきめの細かい14×10の配列のために、例えば図12Cに示すように、シード配列が生成される。図12に示された関数は、単に例示的なものであり、他の適切な関数も用いることができると理解する。
【0050】
いったんシードSが決定されると、ASCIIキャラクターセットのサブセットのような、文字の順序セットが、データの難読化のために決定される。ある実施形態においては、0から7の値が最初に決定される。例えば、y0=AES(S,R)が最初のバイトで、y1が二番目のバイト、...y9が10番目のバイトである。あるいは、yiは、hash(S)のi番目のバイト、又は他の幾つかのSの変形であることができる。バイトは0〜255の間の値であり、しかし、we及びthemが0x07である場合は、各yi*=yi&7は0〜7の間である。
【0051】
次に、値は図13に示すように割り当てられ、基本的にはASCII表から次のyi*番目の文字を拾い上げる。ASCII表は整列されており、より後ろの文字列がそこから拾い上げられるため、この手法は、もしk<nでさえあればx[k]<x[n]であるように、結果的に得られるx[10]の配列は並べられる。
【0052】
もし大小比較オペレーターのような、比較オペレーターが、あるアプリケーションの特定のデータ型に必要ない場合は、いかなる通常の暗号化もこれらの型のフィールドに用いられる。例えば、比較オペレーターは、通常はテキスト型やBLOB型には用いられない。従ってこれらのデータ型のデータについては暗号化できる。あるいは、そのような型のデータは、データのBase64表現を用いて難読化することができる。ある実施形態において、難読化は、Base64のキャラクターセットの置き換えを発生させて、「標準の」Base64のエンコーディングセットの代わりにその置き換えを用いることによって達成され、テキスト型やBLOB型のデータがエンコード/デコードされる。そのような置き換えは、例えば、乱数R及び既に難読化されたテーブル名/カラム名に基づいて発生させることができる。
【0053】
公開されたシステム及び方法において、本発明の思想及び範囲を離れることなく、さまざまな変更及びバリエーションがなされる。従って、それらが添付した特許請求の範囲及びその均等物に入るものであれば、そのような変更及びバリエーションを本願発明はカバーすることを意図する。

【特許請求の範囲】
【請求項1】
データベースの機能性を保存する間、データベースのスキーマを難読化するための方法であって、:
オリジナルのデータベースを準備する工程にして、 該データベースは、オリジナルのテーブル名を有する少なくとも一つのテーブルを備え、前記各テーブルは、オリジナルのカラム名を有する少なくとも一つのカラムを備え、 データベースはオリジナルのキャラクターが標準的な順序を有している、オリジナルのキャラクターセットのオリジナルキャラクターを使用したデータを保存する工程;
データベースのスキーマを難読化する工程にして、次の:
少なくとも一の前記オリジナルのテーブル名の全てのインスタンスをそれぞれ難読化したテーブル名に変更;
少なくとも一の前記オリジナルのカラム名の全てのインスタンスをそれぞれ難読化したカラム名に変更;
少なくとも二つの前記データベースのテーブルの順序を変更;
少なくとも一の前記テーブルの少なくとも二つの前記カラムの順序を変更; 及び
オリジナルのキャラクターセット中のオリジナルのキャラクターの標準的な順序が、難読化したキャラクターセット中の対応する難読化したキャラクターの順序と同じになるように、データベースのデータの少なくとも一のキャラクターの全てのインスタンスを、難読化したキャラクターセットのそれぞれの難読化したキャラクターに変更;
のうち少なくとも一つによる工程;及び
難読化したデータベースを出力する工程を含む方法。
【請求項2】
請求項1に記載の方法であって、さらに:
難読化番号Rを取得する工程;及び
データベースを難読化するためにRを用いる工程
を含む方法。
【請求項3】
請求項2に記載の方法であって、番号Rが乱数である方法。
【請求項4】
請求項2に記載の方法であって、難読化番号Rがオリジナルのテーブル名を伴うテーブルの、オリジナルのカラム名を伴うカラム中の難読化されたデータベース中に保存される方法。
【請求項5】
請求項2に記載の方法であって、前記難読化されたテーブル名はR及びオリジナルのテーブル名を用いて発生させる方法。
【請求項6】
請求項5に記載の方法であって、前記難読化されたテーブル名は 以下の一つによって発生させる方法:
R及びオリジナルのテーブル名を共にハッシュ化;及び
オリジナルのテーブル名をRを暗号鍵として用いて暗号化。
【請求項7】
請求項2に記載の方法であって、前記難読化されたカラム名はRとオリジナルのカラム名を用いて発生させる方法。
【請求項8】
請求項7に記載の方法であって、前記難読化されたカラム名は、以下の一つによって発生させる方法:
R及びオリジナルのカラム名を共にハッシュ化;及び
オリジナルのカラム名をRを暗号鍵として用いて暗号化。
【請求項9】
請求項1に記載の方法であって、さらに、それぞれランダム化されたテーブル名として、前記難読化されたテーブル名の少なくとも一つを切り捨てる(truncateする)工程を含む方法。
【請求項10】
請求項1に記載の方法であって、さらに、それぞれランダム化されたカラム名として、前記難読化されたカラム名の少なくとも一つを切り捨てる工程を含む方法。
【請求項11】
請求項1に記載の方法であって、さらに、データベース中のテーブルを再度順序付ける(reorderingする)方法。
【請求項12】
請求項1に記載の方法であって、さらに、前記テーブル中の少なくとも一つの中のカラムを再度順序付ける方法。
【請求項13】
請求項1に記載の方法であって、さらに、データベース中の十進数文字のフィールド及び日付/時間フィールドの少なくとも一つのデータを、オリジナルデータの標準的な順序が、対応する難読化されたデータでも保存されるように難読化する工程を含む方法。
【請求項14】
コンピューターが読み取り可能な記録媒体であって、該記録媒体はコンピュータが読み取り可能な指示を記録し、該指示は、コンピューターによって読み込まれたときに、データベースの機能性を保存する間、コンピューターにデータベースのスキーマを難読化する方法を実行させる指示であり、該方法は以下の工程を含む:
オリジナルのテーブル名を有する少なくとも一のテーブルを備えるデータベースのデータベーススキーマを難読化する工程で、各前記テーブルは、オリジナルのカラム名を有する少なくとも一のカラムを備え、データベースは、オリジナルのキャラクターが標準的な順序を有しているオリジナルのキャラクターセットのオリジナルキャラクターを用いるデータを保存し、難読化は少なくとも以下の工程の少なくとも一つを含む:
少なくとも一の前記オリジナルのテーブル名の全てのインスタンスをそれぞれの難読化したテーブル名に変更;
少なくとも一の前記オリジナルのカラム名の全てのインスタンスをそれぞれ難読化したカラム名に変更;
少なくとも二つの前記データベースのテーブルの順序を変更;
少なくとも一の前記テーブルの少なくとも二つの前記カラムの順序を変更;及び
オリジナルのキャラクターセット中のオリジナルのキャラクターの標準的な順序が、難読化したキャラクターセット中の対応する難読化したキャラクターの順序と同じになるように、データベースのデータの少なくとも一のキャラクターの全てのインスタンスを、難読化したキャラクターセットのそれぞれの難読化したキャラクターに変更。
【請求項15】
データベースの機能性を保存する間、データベースのスキーマを難読化するのに用いるためのシステムであって、該システムは以下を含む:
オリジナルのデータベースを受け取るための入力;
難読化されたデータベースの発生における使用のための、難読化指示セット;
難読化されたデータベースの発生における使用のための、難読化指示セットのオプションを決定するための難読化構築パラメーター;
乱数発生装置;
前記入力、前記乱数発生装置、前記指示セット及び、前記構築パラメーターと連結した、難読化処理装置であって、指示セット及び構築パラメーターに従い、オリジナルデータベース及び乱数を用いて難読化されたデータベースを発生させるための処理装置;及び
難読化されたデータベースを出力するための、難読化処理装置に連結した出力。
【請求項16】
請求項15に記載のシステムであって、オリジナルのデータベースの少なくとも一つを保存するためのデータストレージ、発生した乱数、難読化指示セット、難読化構築パラメーター、及び難読化されたデータベースをさらに備えるシステム。
【請求項17】
請求項15に記載のシステムであって、難読化処理装置は、難読化番号Rを取得し、データベースを難読化するためにRを用いるように動作するシステム。
【請求項18】
請求項17に記載のシステムであって、番号Rが、乱数発生装置からの乱数であるシステム。
【請求項19】
請求項17に記載のシステムであって、難読化処理装置が、オリジナルのテーブル名を伴うテーブルの、オリジナルカラム名を伴うカラム中の難読化されたデータベース中に、難読化番号Rを保存するように動作するシステム。
【請求項20】
請求項17に記載のシステムであって、難読化処理装置が、Rとオリジナルのテーブル名を用いて、前記難読化されたテーブル名を発生させるように動作するシステム。
【請求項21】
請求項20に記載のシステムであって、難読化処理装置が、以下のうちの一つによって、前記難読化されたテーブル名を発生させるように動作するシステム:
Rとオリジナルのテーブル名を共にハッシュ化;及び
オリジナルのテーブル名をRを暗号鍵として用いて暗号化。
【請求項22】
請求項17に記載のシステムであって、難読化処理装置がRとオリジナルのカラム名を用いて、前記難読化されたカラム名を発生させるように動作するシステム。
【請求項23】
請求項22に記載のシステムであって、難読化処理装置が、以下のうちの一つによって、前期難読化されたカラム名を発生させるように動作するシステム:
Rとオリジナルのカラム名を共にハッシュ化;及び
オリジナルのカラム名をRを暗号鍵として用いて暗号化。
【請求項24】
請求項15に記載のシステムであって、難読化処理装置は、それぞれランダム化されたテーブル名として、前記難読化されたテーブル名の少なくとも一つを切り捨てるように動作するシステム。
【請求項25】
請求項15に記載のシステムであって、難読化処理装置は、それぞれランダム化されたカラム名として、前記難読化されたカラム名の少なくとも一つを切り捨てるように動作するシステム。
【請求項26】
請求項15に記載のシステムであって、難読化処理装置が、データベース中でテーブルを再度順序付けるように動作するシステム。
【請求項27】
請求項15に記載のシステムであって、難読化処理装置が、前記テーブル中の少なくとも一つの中のカラムを再度順序付けるように動作するシステム。
【請求項28】
請求項15に記載のシステムであって、難読化処理装置が、データベース中の十進数文字のフィールド及び日付/時間フィールドの少なくとも一つのデータを、オリジナルデータの標準的な順序が、対応する難読化されたデータでも保存されるような形で難読化するように動作するシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate


【公開番号】特開2010−129089(P2010−129089A)
【公開日】平成22年6月10日(2010.6.10)
【国際特許分類】
【外国語出願】
【出願番号】特願2009−266302(P2009−266302)
【出願日】平成21年11月24日(2009.11.24)
【出願人】(505308641)セーフネット インコーポレイテッド (15)
【Fターム(参考)】