(57)【特許請求の範囲】
【請求項１】
システムであって、
１つ以上のプロセッサと、
前記１つ以上のプロセッサに結合され、前記１つ以上のプロセッサに命令を提供するように構成された１つ以上のメモリと、を備え、
前記１つ以上のプロセッサは、
クライアントデバイスからページリクエストを受信することと、
前記ページリクエストの受信に応えて、暗号化トークンを生成することと、
前記ページリクエストに関係付けられたウェブページデータに、前記暗号化トークンを含めることと、
暗号化トークンを含む前記ウェブページデータを送信することと、
スクリプトリソース・リクエストを受信することであって、前記スクリプトリソース・リクエストは、前記暗号化トークンを含む、スクリプトリソース・リクエストの受信と、
暗号化キーおよび復号化キーを生成することと、
暗号化技術を選択することであって、前記暗号化キーは、前記選択された暗号化技術に追加される、暗号化技術の選択と、
前記暗号化キーを含む前記選択された暗号化技術を実現するコンピュータコードを、前記スクリプトリソース・ソースデータセットに含めることと、
複数の意味単位を決定するために、前記スクリプトリソース・ソースデータセットを解析することと、
少なくとも一部には、前記複数の意味単位の値を複数の意味構造のそれぞれにマッピングすることに基づいて、ツリー構造化ソースデータを決定することと、
前記ツリー構造化ソースデータに適用するための難読化手順を選択することであって、前記選択された難読化手順は、１つ以上の難読化技術を含む、難読化手順の選択と、
少なくとも一部には、前記選択された難読化手順を前記ツリー構造化ソースデータに適用することによって、難読化されたツリー構造化ソースデータを決定することと、
前記難読化されたツリー構造化ソースデータを、難読化されたスクリプトリソース・ソースデータセットに変換することであって、前記難読化されたスクリプトリソース・ソースデータセットは、前記クライアントデバイスにおいて１つ以上のクライアント関連パラメータを収集するように、および前記収集された１つ以上のクライアント関連パラメータを、前記選択された暗号化技術と、前記暗号化キーとを使用して暗号化するように構成される、前記難読化されたツリー構造化ソースデータの変換と、
検証リクエストを受信することであって、前記検証リクエストは、前記暗号化トークンと、前記暗号化された１つ以上のクライアント関連パラメータとを含む、検証リクエストの受信と、
前記暗号化トークンに関係付けられた前記復号化キーおよび復号化技術を決定することと、
前記復号化キーおよび前記復号化技術を使用して、前記暗号化された１つ以上のクライアント関連パラメータに対してデータ検証を実施することと、
前記データ検証の実施に続いて、前記暗号化トークンを暗号化トークンライブラリから削除し、前記暗号化キーに対応する暗号化キーを暗号化キーライブラリから削除することと、
を行うように構成される、システム。
【請求項２】
請求項１に記載のシステムであって、
前記１つ以上のプロセッサは、さらに、前記複数の意味単位のそれぞれに対応する複数の意味構造を、所定のツリー構造化意味構造定義ライブラリから決定するように構成される、システム。
【請求項３】
請求項１に記載のシステムであって、
前記複数の意味単位を決定するために、スクリプトリソース・ソースデータセットを解析することは、コンパイルプロセスの一環として実施される、システム。
【請求項４】
請求項１に記載のシステムであって、
前記選択された難読化手順は、前記１つ以上の難読化技術が実施される順序を含む、システム。
【請求項５】
請求項１に記載のシステムであって、
前記１つ以上の難読化技術は、変数名置換、関数名置換、数値置換、文順序置換、空白排除、無効コード挿入、およびコード暗号化のうちの１つ以上の難読化技術を含む、システム。
【請求項６】
請求項１に記載のシステムであって、
前記難読化されたツリー構造化ソースデータを、難読化されたスクリプトリソース・ソースデータセットに変換することは、逆コンパイルプロセスの一環として実施される、システム。
【請求項７】
請求項１に記載のシステムであって、
前記難読化されたツリー構造化ソースデータを、難読化されたスクリプトリソース・ソースデータセットに変換することは、
前記難読化されたツリー構造化ソースデータをトラバースすることと、
少なくとも一部には、所定のツリー構造化意味構造定義ライブラリに含まれる意味構造に基づいて、前記難読化されたツリー構造化ソースデータに含まれる複数の意味構造を抽出することと、
前記複数の意味構造から、難読化された複数の意味単位を決定することと、を含む、システム。
【請求項８】
請求項１に記載のシステムであって、
前記復号化キーおよび前記復号化技術を使用して、前記暗号化された１つ以上のクライアント関連パラメータに対してデータ検証を実施することは、
前記暗号化された１つ以上のクライアント関連パラメータのいずれかがヌル値を含むかどうかを判断することと、
前記暗号化された１つ以上のクライアント関連パラメータのいずれもヌル値を含まない場合に、前記暗号化された１つ以上のクライアント関連パラメータが、前記復号化技術および前記復号化キーを使用して複数の復号化されたパラメータに復号化可能であるかどうかを判断することと、
前記暗号化された１つ以上のクライアント関連パラメータが、前記複数の復号化されたパラメータに復号化可能である場合に、前記複数の復号化されたパラメータに前記暗号化トークンが含まれるかどうかを判断することと、を含む、システム。
【請求項９】
請求項８に記載のシステムであって、
前記暗号化された１つ以上のクライアント関連パラメータの少なくとも１つがヌル値を含む場合に、前記１つ以上のプロセッサは、さらに、前記データ検証が失敗に終わったと判断して前記クライアントデバイスに警告を送信するように構成される、システム。
【請求項１０】
請求項８に記載のシステムであって、
前記暗号化された１つ以上のクライアント関連パラメータが、複数の復号化されたパラメータに復号化可能でない場合に、前記１つ以上のプロセッサは、さらに、前記データ検証が失敗に終わったと判断して前記クライアントデバイスに警告を送信するように構成される、システム。
【請求項１１】
請求項８に記載のシステムであって、
前記複数の復号化されたパラメータに前記暗号化トークンが含まれない場合に、前記１つ以上のプロセッサは、さらに、前記データ検証が失敗に終わったと判断して前記クライアントデバイスに警告を送信するように構成される、システム。
【請求項１２】
請求項８に記載のシステムであって、
前記複数の復号化されたパラメータに前記暗号化トークンが含まれる場合に、前記１つ以上のプロセッサは、さらに、データ検証好結果メッセージを前記クライアントデバイスに送信するように構成される、システム。
【請求項１３】
方法であって、
クライアントデバイスからページリクエストを受信することと、
前記ページリクエストの受信に応えて、暗号化トークンを生成することと、
前記ページリクエストに関係付けられたウェブページデータに、前記暗号化トークンを含めることと、
暗号化トークンを含む前記ウェブページデータを送信することと、
スクリプトリソース・リクエストを受信することであって、前記スクリプトリソース・リクエストは、前記暗号化トークンを含む、スクリプトリソース・リクエストの受信と、
暗号化キーおよび復号化キーを生成することと、
暗号化技術を選択することであって、前記暗号化キーは、前記選択された暗号化技術に追加される、暗号化技術の選択と、
前記暗号化キーを含む前記選択された暗号化技術を、コンピュータに実現させるためのコンピュータコードを、前記スクリプトリソース・ソースデータセットに含めることと、
１つ以上のプロセッサを使用し、複数の意味単位を決定するために前記スクリプトリソース・ソースデータセットを解析することと、
少なくとも一部には、前記複数の意味単位の値を複数の意味構造のそれぞれにマッピングすることに基づいて、ツリー構造化ソースデータを決定することと、
前記ツリー構造化ソースデータに適用するための難読化手順を選択することであって、前記選択された難読化手順は、１つ以上の難読化技術を含む、難読化手順の選択と、
複数の難読化手順を格納しているメモリから前記選択された難読化手順を読み出し、少なくとも一部には、前記選択された難読化手順を前記ツリー構造化ソースデータに適用することによって、難読化されたツリー構造化ソースデータを決定することと、
前記難読化されたツリー構造化ソースデータを、難読化されたスクリプトリソース・ソースデータセットに変換することであって、前記難読化されたスクリプトリソース・ソースデータセットは、前記クライアントデバイスにおいて１つ以上のクライアント関連パラメータを収集するように、および前記収集された１つ以上のクライアント関連パラメータを、前記選択された暗号化技術と、前記暗号化キーとを使用して暗号化するように構成される、前記難読化されたツリー構造化ソースデータの変換と、
前記難読化されたスクリプトリソース・ソースデータセットを、通信手段を使用して、他のデバイスに送信することと、
検証リクエストを受信することであって、前記検証リクエストは、前記暗号化トークンと、前記暗号化された１つ以上のクライアント関連パラメータとを含む、検証リクエストの受信と、
前記暗号化トークンに関係付けられた前記復号化キーおよび復号化技術を決定することと、
前記復号化キーおよび前記復号化技術を使用して、前記暗号化された１つ以上のクライアント関連パラメータに対してデータ検証を実施することと、
前記データ検証の実施に続いて、前記暗号化トークンを暗号化トークンライブラリから削除し、前記暗号化キーに対応する暗号化キーを暗号化キーライブラリから削除することと、
を備える方法。
【請求項１４】
請求項１３に記載の方法であって、
前記選択された難読化手順は、前記１つ以上の難読化技術が実施される順序を含む、方法。
【請求項１５】
請求項１３に記載の方法であって、
前記１つ以上の難読化技術は、変数名置換、関数名置換、数値置換、文順序置換、空白排除、無効コード挿入、およびコード暗号化のうちの１つ以上の難読化技術を含む、方法。
【請求項１６】
請求項１３に記載の方法であって、
前記難読化されたツリー構造化ソースデータを、難読化されたスクリプトリソース・ソースデータセットに変換することは、
前記難読化されたツリー構造化ソースデータをトラバースすることと、
少なくとも一部には、所定のツリー構造化意味構造定義ライブラリに含まれる意味構造に基づいて、前記難読化されたツリー構造化ソースデータに含まれる複数の意味構造を抽出することと、
前記複数の意味構造から、難読化された複数の意味単位を決定することと、を含む、方法。
【発明の詳細な説明】
【技術分野】
【０００１】
［関連出願の相互参照］
本出願は、２０１３年５月２０日に出願された、発明の名称を「ＤＡＴＡ  ＰＲＯＴＥＣＴＩＯＮ  ＭＥＴＨＯＤ  ＡＮＤ  ＤＥＶＩＣＥ（データ保護の方法およびデバイス）」とする中国特許出願第２０１３１０１８６２８７．７号の優先権を主張する。該出願は、あらゆる目的のために、参照によって本明細書に組み込まれる。
【０００２】
本出願は、データセキュリティの分野に関し、特に、データ保護の技術に関する。
【背景技術】
【０００３】
今日、コンピュータおよびその他の端末機器の使用範囲が広がるにつれて、クライアントデバイスに格納されるまたはクライアントデバイス間で伝送されるソースデータのセキュリティが、益々重要な課題になっている。ソースデータ保護の実施の失敗または不適切な保護手段の採用は、ユーザがｅｍａｉｌ、ウェブブラウザ、およびその他のソフトウェアアプリケーションを使用してソースデータを伝送、交換、および／または格納する過程でそのソースデータの偽造、改ざん、置き換え、喪失、および／または漏出を招いてきた。ソースデータには、例えば、コンピュータコードがある。
【０００４】
例えば、ウェブ開発においてクライアントデバイスによって広く使用されているスクリプト言語であるＪａｖａＳｃｒｉｐｔ（登録商標、以下同じ）が、ウェブページに動的関数を追加するためにしばしば使用される。ＪａｖａＳｃｒｉｐｔの使用は、ウェブページとユーザとの間におけるリアルタイムで動的で双方向性の関係を可能にした。しかしながら、ＪａｖａＳｃｒｉｐｔソースコード（例えばソースデータ）は、通例、平文のフォーマット（cleartext format）でクライアントデバイスに提示されるので、ＪａｖａＳｃｒｉｐｔを使用して収集された重要なデータは、悪意あるユーザによっておよび／またはクライアントデバイスで実行されているプログラムによって偽造される、改ざんされる、および置き換えられるリスクがあるだろう。平文で提示された機密ソースデータまたは重要情報は、クライアントデバイス内において容易に取得可能であり、そのような情報は、クライアントデバイスにおいて違法操作の実施に使用される恐れがある。
【０００５】
従来のシステムでは、クライアントデバイスにおいてソースデータを使用するセキュリティを強化するために、サーバ側ではソースデータが難読化され、クライアント側ではサーバへの伝送のために収集された機密データが暗号化される。しかしながら、従来のシステムの大半は、決まった暗号化技術、決まった暗号化キー、および決まった難読化パラメータを用いている。しかしながら、このような決まった難読化および暗号化の技術がひとたび悪意あるユーザまたはプログラムによって解読されると、データが極めて容易に偽造および改ざんされ、これは、ソースデータのセキュリティにとって直接的な脅威となる。
【図面の簡単な説明】
【０００６】
本発明の様々な実施形態が、以下の詳細な説明および添付の図面で開示される。
【０００７】
【図１】データ保護のための一実施形態を示した図である。
【０００８】
【図２】データを保護するためのプロセスの一実施形態を示したフローチャートである。
【０００９】
【図３】リクエストされたウェブページデータを送信するためのプロセスの一実施形態を示したフローチャートである。
【００１０】
【図４】スクリプトリソース・リクエストに応答するためのプロセスの一実施形態を示したフローチャートである。
【００１１】
【図５】スクリプトリソース・リクエストに応答するためのプロセスの一実施形態を示したフローチャートである。
【００１２】
【図６】ウェブページデータをリクエストする一実施形態を示したフローチャートである。
【００１３】
【図７】データを保護するように構成されたサーバの一実施形態を示した図である。
【発明を実施するための形態】
【００１４】
本発明は、プロセス、装置、システム、合成物、コンピュータ読み取り可能ストレージ媒体に実装されたコンピュータプログラム製品、ならびに／または結合先のメモリに記憶された命令および／もしくは結合先のメモリによって提供される命令を実行するように構成されたプロセッサなどのプロセッサのような、数々の形態で実現可能である。本明細書では、これらの実現形態、または本発明がとりえるその他のあらゆる形態が、技術と称されてよい。総じて、開示されるプロセスの各ステップの順番は、本発明の範囲内で変更されてよい。別途明記されない限り、タスクを実施するように構成されるものとして説明されるプロセッサまたはメモリなどのコンポーネントは、所定時にタスクを実施するように一時的に構成された汎用コンポーネントとして、またはタスクを実施するように製造された特殊コンポーネントとして実装されてよい。本明細書で使用される「プロセッサ」という用語は、コンピュータプログラム命令などのデータを処理するように構成された１つ以上のデバイス、回路、ならびに／または処理コアを言う。
【００１５】
本発明の原理を例示した添付の図面とともに、以下で、本発明の１つ以上の実施形態の詳細な説明が提供される。本発明は、このような実施形態に関連付けて説明されるが、いずれの実施形態にも限定されない。本発明の範囲は、特許請求の範囲によってのみ限定され、本発明は、数々の代替形態、変更形態、および均等物を包含している。以下の説明では、本発明の完全な理解を与えるために、数々の具体的詳細が明記されている。これらの詳細は、例示を目的として提供されるものであり、本発明は、これらの詳細の一部または全部を伴わずとも、特許請求の範囲にしたがって実施されてよい。明瞭を期するために、本発明に関連した技術分野で知られる技工物は、本発明が不必要に不明瞭にされないように、詳細な説明を省略されている。
【００１６】
本明細書では、データ保護の実施形態が説明される。様々な実施形態において、データ保護は、クライアントデバイスによってリクエストされたスクリプトリソース・ソースデータセットに対して難読化を実施することを含む。スクリプトリソース・ソースデータセットは、複数の意味単位を決定するために解析される。例えば、スクリプトリソース・ソースデータセットは、ＪａｖａＳｃｒｉｐｔコードでなる。少なくとも一部には、複数の意味単位の値を複数の意味構造のそれぞれにマッピングすることに基づいて、ツリー構造化ソースデータが決定される。ツリー構造化ソースデータに適用するための難読化手順が選択される。難読化手順は、特定の順序の１つ以上のタイプの難読化技術を含むことができる。難読化されたツリー構造化ソースデータは、少なくとも一部には、選択された難読化手順をツリー構造化ソースデータに適用することによって、決定される。難読化されたツリー構造化ソースデータは、難読化されたスクリプトリソース・ソースデータセットに変換される。難読化されたスクリプトリソース・ソースデータセットは、クライアントデバイスに送信することができる。
【００１７】
一部の実施形態では、クライアントデバイスに送信される暗号化ツール（例えば、選択された暗号化技術と、暗号化キーと）が、クライアントデバイスに送信される前に難読化されるスクリプトリソース・ソースデータセットに含められることによって保護される。一部の実施形態では、難読化されたスクリプトリソース・ソースデータセットは、クライアントデバイスにおいて実行されるときに、特定のクライアント関連パラメータを収集するように、および該収集されたクライアント関連パラメータを、難読化されたスクリプトリソース・ソースデータセットに含められた暗号化ツールを使用して暗号化するように、および該暗号化されたクライアント関連パラメータをサーバに送信するように構成される。一部の実施形態では、サーバは、クライアントデバイスにおいて悪意ある活動が発生したかもしれないかどうかを判断するために、受信された暗号化されたクライアント関連パラメータに対してデータ検証を実施することができる。
【００１８】
図１は、データ保護の一実施形態を示した図である。この例では、システム１００は、クライアントデバイス１０２と、ネットワーク１０３と、サーバ１０４と、データベース１０５とを含む。ネットワーク１０３は、高速データネットワークおよび／または電気通信ネットワークを含む。クライアントデバイス１０２は、ネットワーク１０３を通じてサーバ１０４と通信するように構成される。
【００１９】
図中、クライアントデバイス１０２は、ラップトップとして示されているが、クライアントデバイス１０２のその他の例として、デスクトップコンピュータ、タブレット端末、スマートフォン、モバイル機器、または任意の計算機器が挙げられる。クライアントデバイス１０２は、サーバ１０４に対してスクリプトリソース・ソースデータセットをリクエストするように構成される。様々な実施形態において、サーバ１０４は、スクリプトリソース・ソースデータセットを求めるリクエストをデータベース１０５から取り出し、該リクエストされたスクリプトリソース・ソースデータセットに対し、それをクライアントデバイス１０２に送信する前に難読化を実施するように構成される。難読化は、ソースデータの可読性を下げるためにおよびソースデータの解読の難易度を上げるために実施される。難読化は、スクリプトリソースソースデータに含まれる、データ構造、データプロセス、関数入り口点、および／またはパラメータなどの機密性である可能性がある情報を悪意ある者が読み出せる可能性を下げることによって、ソースデータの保護およびセキュリティを強化することができる。
【００２０】
リクエストされたスクリプトリソース・ソースデータセットを難読化するために、サーバ１０４は、スクリプトリソース・ソースデータセットを解析して複数の意味単位を決定するように構成される。一部の実施形態では、「意味単位」は、意味内容に関係付けられるスクリプトデータの一部分を言う。例えば、意味単位は、スクリプトリソース・ソースデータセットが記述された言語に関係付けられた構文および／または文法に基づいて見分けられる。サーバ１０４は、少なくとも一部には、複数の意味単位の値を複数の意味構造のそれぞれにマッピングすることに基づいて、ツリー構造化ソースデータを決定するように構成される。ソースデータのツリー構造は、様々な意味構造およびそれらの構成要素の間における論理的および／または意味的関係を維持している。サーバ１０４は、ツリー構造化ソースデータに適用する難読化手順を選択するように構成され、選択された難読化手順は、１つ以上の難読化技術を含む。サーバ１０４は、少なくとも一部には、選択された難読化手順をツリー構造化ソースデータに適用することによって、難読化されたツリー構造化ソースデータを生成するように構成される。サーバ１０４は、難読化されたツリー構造化ソースデータを、難読化されたスクリプトリソース・ソースデータセットに変換するように構成される。サーバ１０４は、次いで、難読化されたスクリプトリソース・ソースデータセットをクライアントデバイス１０２に送信する。
【００２１】
一部の実施形態では、難読化されたスクリプトリソース・ソースデータセットは、暗号化技術および暗号化キーを含むように構成される。一部の実施形態では、難読化されたスクリプトリソース・ソースデータセットは、クライアントデバイス１０２において実行されるときに、特定のクライアント関連パラメータを収集するように、および該収集されたクライアント関連パラメータを、難読化されたスクリプトリソース・ソースデータセットに含められた暗号化ツールを使用して暗号化するように、および該暗号化されたクライアント関連パラメータをサーバ１０４に送信するように構成される。暗号化は、機密データを含むかもしれない収集されたクライアント関連パラメータのセキュリティを、それらのパラメータが悪意ある者によって理解される可能性を下げることによって強化することができる。サーバ１０４は、クライアントデバイス１０２において悪意ある活動が発生したかもしれないかどうかを判断するために、受信された暗号化されたクライアント関連パラメータに対してデータ検証を実施するように構成される。
【００２２】
したがって、クライアントデバイス１０２とサーバ１０４との間で送信されるスクリプトリソース・ソースデータセットおよび／またはクライアント関連パラメータに対する難読化および／または暗号化は、特定の者がそれらがアクセス権限を有していないデータにアクセスすることを防ぐことができる。
【００２３】
図２は、データを保護するためのプロセスの一実施形態を示したフローチャートである。一部の実施形態では、プロセス２００は、図１のシステム１００において実行される。具体的には、一部の実施形態では、プロセス２００は、図１のシステム１００のサーバ１０４において実行される。
【００２４】
プロセス２００は、平文のスクリプトリソースソースデータ（例えば、ＪａｖａＳｃｒｉｐｔコード）を、結果として得られる難読化されたスクリプトリソースソースデータが難読化前の元の平文のリソースソースデータを実行して得られたであろう実行結果と同一の実行結果を得られるように実行可能であるように難読化する一例を説明している。様々な実施形態において、「平文」は、難読化および／または暗号化されていないデータを言う。プロセス２００は、「等価難読化」を実施する一例を説明している。これは、結果として得られた難読化されたデータが元の平文の難読化されたデータと同一の結果を得るように実行されることが可能であるようなタイプの難読化を言う。
【００２５】
例えば、スクリプトリソース・ソースデータセットを求めるクライアントデバイスからのリクエストが、サーバにおいて受信される。リクエストに応えて、サーバは、プロセス２００を実施して、リクエストされたスクリプトリソース・ソースデータセットを難読化し、次いで、該難読化されたスクリプトリソース・ソースデータセットを、クライアントデバイスに送り返すことができる。
【００２６】
２０２では、複数の意味単位を決定するために、スクリプトリソース・ソースデータセットが解析される。
【００２７】
一部の実施形態では、（例えば、クライアントデバイスによってリクエストされた）スクリプトリソース・ソースデータセットに対して構文および／または意味解析が実施される。例えば、スクリプトリソース・ソースデータセットは、ＪａｖａＳｃｒｉｐｔコードである。ＪａｖａＳｃｒｉｐｔコードは、クライアントデバイスにおいて１つ以上の関数を実施するように構成することができる。例えば、解析において、スクリプトリソース・ソースデータセットは、長い文字列として抽出される。この長い文字列に対してスキャンおよび構文解析が実施され、この長い文字列に含まれる有意な意味単位が特定され、スクリプトリソースソースデータに含まれる意味単位として抽出される。一部の実施形態では、解析は、少なくとも一部には、（例えば、スクリプトリソース・ソースデータセットが記述された言語のタイプに関係付けられた）意味規則に基づいて実施される。意味規則は、様々なタイプの意味単位の特性（例えば構文もしくは文法）、および／または各タイプの意味に関係付けられた基準を含む。例えば、或る意味規則は、キーワード「for」がループの存在を示すこと、およびこのようなループが構造「for (;;) {}」に関係付けられていることを示すことができる。この意味規則の例を適用するにあたっては、長い文字列のなかで、「for (;;) {}」を含むスクリプトリソース・ソースデータセットの部分（例えばコードセクション）が検索される。長い文字列から抽出される各意味単位は、元のリソースソースデータセットのなかでその意味単位のパラメータに関係付けられている値および／または文字列を含んでいる。意味単位の例として、関数宣言、（１つ以上の）文、関数呼び出し、スクリプトルートノード、変数宣言、変数値割り当て、およびループが挙げられるが、これらに限定はされない。
【００２８】
一部の実施形態では、スクリプトリソース・ソースデータセットは、さらに詳しく後述されるように、選択された暗号化キーと、選択された暗号化技術とを含むことができる。
【００２９】
一部の実施形態では、意味解析は、スクリプトリソース・ソースデータセットをコンパイルするにあたってコンパイラプログラムによって実施される。
【００３０】
２０４では、少なくとも一部には、複数の意味単位の値を複数の意味構造のそれぞれにマッピングすることに基づいて、ツリー構造化ソースデータが決定される。
【００３１】
様々な実施形態において、複数の意味構造が、所定のツリー構造化意味構造定義ライブラリに格納される。例えば、所定のツリー構造化意味構造定義に格納された意味構造は、その意味構造のための一般的／汎用的パラメータ値および／または文字列を含む。また、例えば、所定のツリー構造化意味構造定義に格納された意味構造は、そのパラメータどうしの間、および／またはその意味構造自身とライブラリに格納されたその他の意味構造との間における、階層および／またはツリー関係も含むことができる。
【００３２】
ライブラリに格納された意味構造定義の例として、以下の１つ以上が挙げられる。
【００３３】
ａ）スクリプトルートノード
【００３４】
スクリプトルートノード下では、ＪａｖａＳｃｒｉｐｔの特徴に合致する任意のノードがツリー構造ソースデータに追加可能である。
【００３５】
スクリプトルートノードの一例は、次のとおりである。
Struct script{
Node1 node1；
Node2 node2；
……………
}
【００３６】
ｂ）ブロック構造
【００３７】
一部の実施形態では、ブロック構造は、０または１つ以上の文が集まったグループである。
【００３８】
ブロック構造の一例は、次のとおりである。
Struct BLOCK(){
Node1 node1；
Node2 node2；
……………
}
【００３９】
ｃ）関数宣言
【００４０】
関数宣言の一例は、次のとおりである。
Struct Function(){
FunctionParam param1;
FunctionParam param2;
……………….
//argument declarations
BLOCK doBlock; //define main executive structure
FunctionReturnNode return;
}
【００４１】
ｄ）関数呼び出し
【００４２】
関数呼び出しは、宣言された関数の呼び出しを示している。関数呼び出しは、関数名および関数のパラメータを含む。
【００４３】
関数呼び出しの一例は、次のとおりである。
Struct FunctionCall () {
StringNode functionName;
numNode param1;
numNode param2;
……………….
//Parameter input function 
}
【００４４】
ｅ）下位のデータノード宣言
【００４５】
基本データノードの宣言の例は、次のとおりである。
ＮｕｍＮｏｄｅは、特定の数を表わすノードの数値型を宣言する。
ＳｔｒｉｎｇＮｏｄｅは、ノードの文字列型を宣言し、該文字列は、特定の文字列を表している。
【００４６】
ｆ）変数宣言
【００４７】
変数宣言の宣言例は、次のとおりである。
Struct var () {
VarName name;
(NumNode num1 ;)
(StringNode string1 ;)
…………….
}
【００４８】
ｇ）変数値割り当て
【００４９】
宣言された変数のための値が割り当て可能である。変数値割り当ての一例は、次のとおりである。
Struct SetValue () {
VarName name;
(NumNode num1 ;) or (StringNode string1 ;)
}
【００５０】
示されてはいないが所定のツリー構造化意味構造定義ライブラリに含められてよい意味構造のその他の例として、変数参照、変数演算子、およびループ構文構造のうちの１つ以上が挙げられる。
【００５１】
スクリプトリソース・ソースデータセットの解析から決定される各意味単位について、対応する意味構造が、所定のツリー構造化意味構造定義ライブラリから決定される。次いで、スクリプトリソース・ソースデータセットの解析から決定された各意味単位が、その対応する意味構造に搭載される。様々な実施形態において、意味単位をその対応する意味構造に「搭載する」とは、意味単位の文字列値および／または数値をその対応する意味構造内の適切な位置にマッピングすることを言う。例えば、（元のスクリプトリソース・ソースデータセットから抽出された、）関数を包含した意味単位を搭載することは、意味単位の実際の値をマッピングして、（所定のツリー構造化意味構造定義ライブラリから得られた）対応する意味構造内における対応する一般的／汎用的パラメータ名に取って代わらせるおよび／または（所定のツリー構造化意味構造定義ライブラリから得られた）対応する意味構造内の適切な位置に追加することを含む。
【００５２】
意味単位からの値を対応する意味構造にマッピングする（例えば、意味単位を対応する意味構造に搭載する）一例は、以下のとおりである。すなわち、もし、（ステップ２０２における）解析を通じて、長い文字列が文「function add (num1, num2)」を含むと判断され、意味単位抽出規則に基づいて、この位置のコードが関数宣言を含むと判断されるならば、文「function add (num1, num2)」は、意味単位として抽出可能である。関数宣言意味単位に対応する意味構造「struct function ()」が、所定のツリー構造化意味構造定義ライブラリにおいて見つけられる。関数宣言意味単位「function add (num1, num2)」は、関数名の値「add」およびパラメータ値「num1」および「num2」を意味構造内の適切な位置にマッピングすることによって、対応する意味構造「struct function ()」に搭載され、搭載された意味構造「struct function add (num1, num2)」が得られる。
【００５３】
対応する意味単位を搭載された意味構造は、集められてツリー構造化ソースデータを形成する。一部の実施形態では、ツリーは、抽象構文ツリーであり、これは、スクリプトリソース・ソースデータセットの抽象統語構造を表わす。例えば、ツリー意味構造の各ノードは、スクリプトリソース・ソースデータセットの解析によって決定された対応する意味単位からマッピングされた値で満たされる（例えば、対応する意味単位を搭載される）。例えば、ツリー構造化ソースデータは、所定のツリー構造化意味構造定義ライブラリにおいて見つけられた意味構造で形成されてよく、所定のツリー構造化意味構造定義ライブラリにおいて指定された、意味構造間におけるおよび／または各意味構造内の構成要素間におけるツリー関連および／またはその他の論理的関係に基づいて、そのそれぞれの意味単位を搭載される。一部の実施形態では、ツリー構造化ソースデータは、コンパイラプログラムがスクリプトリソース・ソースデータセットをコンパイルすることによって決定される。一部の実施形態では、コンパイラプログラムは、少なくとも一部には、所定のツリー構造化意味構造定義ライブラリにおいて指定された、意味構造間におけるおよび／または各意味構造内の構成要素間におけるツリー関連関係に基づいて、ツリー構造化ソースデータを決定することができる。
【００５４】
２０６では、ツリー構造化ソースデータに適用される難読化手順が選択される。選択される難読化手順は、１つ以上の難読化技術を含む。
【００５５】
難読化手順は、１つ以上のタイプの難読化技術を特定の順序で適用することを含む。様々な実施形態において、難読化手順の選択は、１つ以上の特定の難読化技術を選択すること、および／または選択された特定の難読化技術をどのような順番でツリー構造化ソースデータに適用するかを決定することを含む。選択されてツリー構造化ソースデータに適用される難読化手順は、その結果がサーバによる等価難読化の実施であることが望ましい、すなわち、その結果として得られた難読化されたスクリプトリソース・ソースデータセットが難読化前の平文のスクリプトリソース・ソースデータセットを実行して得られるだろう結果と同じ結果が得られるように実行可能であることが望ましい。
【００５６】
一部の実施形態では、ツリー構造化ソースデータのための難読化手順として、所定の難読化手順が事前に選択可能である。一部の実施形態では、ツリー構造化ソースデータのための難読化手順として、複数の所定の難読化技術のなかから、１つ以上の難読化技術が動的に且つ無作為に選択可能である。
【００５７】
一部の実施形態では、難読化手順に含めるための１つ以上の難読化技術が、所望のレベルの難読化を達成するように選択可能である。例えば、難読化されたデータの解読が困難であるほど、難読化のレベルは高く、難読化されたデータの解読が容易であるほど、難読化のレベルは低い。
【００５８】
一部の実施形態では、選択された難読化手順は、変数名置換、関数名置換、数値置換、文順序置換、空白排除、無効コード挿入、およびコード暗号化のうちの１つ以上から選択される１つ以上の難読化技術を含むことができる。以下は、このような難読化技術の各例の説明である。
【００５９】
１）変数名置換
【００６０】
変数名置換タイプの難読化技術は、ツリー構造化ソースデータに含まれる変数名を、変数定義、変数値割り当て、および変数操作が正しいことを保証しつつ、代替の変数名で置き換えることでなる。変数名置換は、変数宣言ノード、変数値割り当て、および変数参照ノードに含まれる同じ変数の変数名を置き換えることを含む。さらに、変数名置換では、一部の実施形態では、代替の変数名パラメータ（例えば難読化パラメータ）は無作為に生成され、同じ変数の範囲内では変数が異なれば変数名が異なることおよびロジックが正しいことが保証される。例えば、ツリー構造化ソースデータに変数名置換タイプの難読化技術を適用するにあたっては、代替となる実際の変数名として、「a」および「b」などの意味のない無作為の文字またはフレーズを使用することができる。
【００６１】
２）関数名置換
【００６２】
関数名置換タイプの難読化技術は、ツリー構造化ソースデータに含まれる関数名を代替の関数名で置き換えることでなる。関数名置換は、意味のある元の関数名を意味のない文字および／またはフレーズで置き換えることと、ならびに関数が異なれば関数名が異なることおよび同じ関数内ではロジックが正しいことを保証することを含む。関数名置換は、関数宣言ノードおよび関数参照ノードに含まれる同じ関数の関数名を置き換えることを含む。さらに、関数名置換では、一部の実施形態では、関数名置換パラメータ（例えば難読化パラメータ）は無作為に生成される。例えば、無作為に生成された語句「aa」が、ツリー構造化ソースデータに含まれる実際の関数名に置き換わることができる。
【００６３】
上述された変数名置換および関数名置換の難読化技術では、意味があるものとして選ばれたであろうツリー構造化ソースデータの元の変数名および関数名が、意味のない（例えば無作為に生成された）文字で置き換えられることが可能であり、そうして、解読者にとっての読解の難易度および解析の難易度のレベルを上げることができる。
【００６４】
３）数値置換
【００６５】
数値置換タイプの難読化技術は、ツリー構造化ソースデータに含まれる数値の数式を置き換えることでなり、ここでは、置き換え後の数式の計算結果が、置きわる間の元の数値に等しくなる。例えば、２つの数値置換パラメータ、rand1およびrand2が、無作為に生成される。これら２つの数値置換パラメータは、数値を表わすために使用できる数式：(num + rand1 * rand2) % rand2を形成することができる。該数式は、難読化のレベルを高めるために、基数８または基数１６で表わすことができる。例えば、ツリー構造化ソースデータに含まれる数値var1 = 1は、数式：(base 16) var1 = 0307 % 0x63で置き換え可能である。
【００６６】
４）文順序置換
【００６７】
文順序置換タイプの難読化技術は、所要の呼び出し順序を有さないデータの順序を、ツリー構造化ソースデータの正常な実行が影響されないという条件下で編成し直すことでなる。具体的には、例えば、順序がごちゃまぜにされてよい複数の文が、文順序を選択するための切り替え機能を使用したループ構造内に配される。したがって、元の文順序は変更されるが、実行の際は、これらの文は依然として元の文順序にしたがって実行される。
【００６８】
５）空白排除
【００６９】
空白排除タイプの難読化技術は、文間の全ての改行および空白ならびにその他の任意のタイプの空白文字についてツリー構造化ソースデータをチェックすることと、データの可読性を下げるためにそのような改行および空白を排除することとでなる。
【００７０】
６）無効コードの挿入
【００７１】
無効コードの挿入は、ツリー構造化ソースデータに無効コードが挿入されるタイプの難読化技術でなる。挿入された無効コードは、ツリー構造化ソースデータに固有なロジックにもツリー構造化ソースデータの正常な実行にも影響を及ぼさない。したがって、無効コードライブラリが事前に決定可能であり、この無効コードライブラリから、ツリー構造化ソースデータに挿入するための１つ以上の無効コードが無作為に選択可能である。ツリー構造化ソースデータに無効コードが挿入された後も、該ツリー構造化ソースデータは依然として正しく実行することができる。
【００７２】
７）コード暗号化
【００７３】
コード暗号化は、ツリー構造化ソースデータに含まれるコードの暗号化が実施されるタイプの難読化技術でなる。例えば、暗号化は、ツリー構造化ソースデータ内の指定のタイプのキーワードおよび指定の長さの文字列、または指定の長さ基準を満たす文字列に対して実施することができる。一部の実施形態では、難読化技術のタイプとして暗号化が選択された場合、難読化されたソースデータがクライアントデバイスにおいて実行されるときに復号化技術を使用して暗号化が戻せるように、対応する復号化技術が難読化ソースデータに含められる。
【００７４】
一部の実施形態では、コード暗号化タイプの難読化を実施するために、所定のコード化技術ライブラリからコード暗号化技術が無作為に選択され、コード暗号化キーが無作為に生成される。選択されたコード暗号化技術と、コード暗号化キーとに基づいて、暗号化対象とされるコードに対応する暗号文が算出される。コード化技術ライブラリにおいて、コード暗号化技術に対応するコード復号化技術も検索される。コード暗号化キーがコード復号化キーとして機能することもできる、またはこのコード暗号化キーに対応する異なるコード復号化キーが生成可能である。所定のツリー構造化意味構造定義ライブラリにおいて、コード復号化技術に対応する意味構造が見つけられ、該意味構造のパラメータとして機能するコード復号化キーおよび暗号文が、意味構造内の適切な位置にマッピングされる。この搭載された意味構造は、次いで、ツリー構造化ソースデータ内の対応する位置に追加される。この位置のコードは、全て、適切なコード復号化技術を呼び出せることを保証される。ツリー構造化ソースデータの暗号化対象コードは、該コードを実行するときがきたら、コード復号化技術およびコード復号化キーを使用して暗号文の復号化および実行が可能であるように、復号化技術呼び出しフォーマットで置き換えられる。
【００７５】
選択された難読化手順は、上述された様々な難読化技術例のうちの任意の１つを含んでいてよい。或いは、選択された難読化手順は、上述された様々な難読化技術例の複数を組み合わせたものを含んでいてよく、この場合、これらの難読化技術は、指定の順序で相次いで各自実施される。各難読化技術、または複数の難読化技術の各組み合わせは、異なるレベルの難読化に関係付けられる。
【００７６】
複数の難読化技術を異なる組み合わせで且つ異なる順序で適用することによって、異なる難読化結果が実現される。異なる難読化結果は、難読化されたツリー構造化ソースデータに関係付けられる難読化のレベルおよび量が異なる。
【００７７】
次の表１は、様々な難読化手順の例を示している。表１において、難読化手順は、「組み合わせ１」、「組み合わせ２」、「組み合わせ３」、および「組み合わせ４」として標識されている。各難読化手順の例は、上述のような複数の難読化技術と、それらの難読化技術がツリー構造化ソースデータに適用される順序とを指定している。
【表１】
0006257754.tif 000002
【００７８】
表１において、組み合わせ１〜３は、７つの異なるタイプ例の難読化技術を適用する３つの異なる順序を表している。組み合わせ１〜３の各組み合わせに含まれる７つのタイプの難読化技術は同じであるが、組み合わせごとに難読化技術の順序が異なるゆえに、結果として得られる難読化されたツリー構造化ソースデータの難読化のレベルは、組み合わせ１から組み合わせ３にかけて順次小さくなり、データの量もまた、組み合わせ１から組み合わせ３にかけて順次小さくなる。例えば、より低いレベルの難読化を得るためには、表１に示された組み合わせ４のように、より少ない数の難読化技術を組み合わせて難読化手順を形成することができる。
【００７９】
選択された難読化手順に含めることができる難読化技術は、本明細書で説明された幾つかのタイプに限定されず、本明細書で説明された以外の難読化技術を含むことができる。
【００８０】
２０８では、少なくとも一部には、選択された難読化手順をツリー構造化ソースデータに適用することに基づいて、難読化されたツリー構造化ソースデータが決定される。
【００８１】
ツリー構造化ソースデータは、選択された難読化手順をツリー構造化ソースに適用することによって難読化される。もし、選択された難読化手順が複数の難読化技術を指定しているならば、一部の実施形態では、選択された難読化手順は、そのような難読化技術を実施する指定の順序も指定している。
【００８２】
選択された難読化手順における各タイプの難読化技術が適用されている間に、対応する難読化パラメータが生成可能である。例えば、難読化パラメータは、置換パラメータ（例えば、置換変数名、置換関数名、置換数値／数式、文順序置換に使用されるループ構造、選択された無効コード、暗号化キー）と、特定のタイプの難読化技術を実施する際に（例えば無作為にまたはそれ以外のやり方で）生成または選択されるその他のデータとを含むことができる。
【００８３】
選択された難読化手順における１つ以上の難読化技術として指定された或る難読化技術に対応する難読化パラメータは、その難読化技術のタイプに応じて生成可能である。難読化手順ごとに異なる選択される難読化技術のタイプの相違、難読化手順ごとに異なる組み合わされる難読化技術の順序の相違、または難読化技術ごとに異なるその難読化技術によって生成される難読化パラメータの相違は、本明細書で説明される難読化を、無作為性および廃棄可能性によって特徴付けられるものにすることができる。要するに、難読化の結果は、スクリプトリソースソースデータが同じであっても、プロセス２００で説明された難読化プロセスが用いられるたびに、選択された難読化手順に関係付けられる相違および／または無作為性に基づいて異なるものになるだろう。本明細書で説明されるプロセス２００に記載された難読化プロセスによって導入される可変性は、ソースデータのセキュリティを効果的に強化する。
【００８４】
ツリー構造化ソースデータに適用されるものとして、いずれの難読化手順が選択されるかにかかわらず、ツリー構造化ソースデータに対して実施される難読化は等価難読化であり、これは、難読化されたツリー構造化ソースデータと、難読化前の平文のツリー構造化ソースとで、実行結果が同じであることを示している。例えば、ツリー構造化ソースデータの文字列「javascript」は、コード暗号化タイプの難読化技術に基づいて難読化され、暗号化結果「GvajecsaGpirot」が得られる。例えば、ツリー構造化ソースデータの難読化に使用される暗号化に対応する復号化技術は、暗号化されたデータを復号化するためにクライアントデバイスによって使用可能であるように、ツリー構造化ソースデータ自体に含めることができる。「javascript」と「GvajecsaGpirot」は、異なる文字列ではあるが、これらは、難読化されたツリー構造化ソースデータにおいて難読化文字列「GvajecsaGpirot」を含むソースデータの部分がクライアントデバイスにおいて実行されるときに、クライアントデバイスが「GvajecsaGpirot」を復号化し、実行に使用するための「javascript」を得られるように、意味的に同じやり方で使用される。したがって、難読化された「GvajecsaGpirot」は、「javascript」と等価である。
【００８５】
２１０において、難読化されたツリー構造化ソースデータは、難読化されたスクリプトリソース・ソースデータセットに変換される。
【００８６】
様々な実施形態において、難読化されたツリー構造化ソースデータを、難読化されたスクリプトリソース・ソースデータセット（例えば、難読化されたスクリプトリソース・ソースデータセットは、フォーマットがツリー構造ではない）に変換することは、難読化されたツリー構造化ソースデータをトラバースすることと、所定のツリー構造化意味構造定義ライブラリに含まれる意味構造に基づいて、難読化されたツリー構造化ソースデータに含まれる意味構造を解析することとを含む。所定のツリー構造化意味構造定義ライブラリに含まれる意味構造に基づいて、難読化されたツリー構造化ソースデータを解析することによって、難読化されたツリー構造化ソースデータから、難読化された複数の意味構造を特定および抽出することができる。抽出された難読化された意味構造からは、対応する難読化された意味単位を決定することができる。難読化されたスクリプトリソース・ソースデータセットは、難読化された意味単位から構成され、該難読化された意味単位は、抽出された難読化された意味構造から決定することができる。難読化されたツリー構造化ソースデータとは異なり、難読化されたスクリプトリソース・ソースデータセットは、ツリータイプの構造をとらず、しかしながら、難読化されたスクリプトリソース・ソースデータセットは、クライアントデバイスに伝送可能なおよびクライアントデバイス（例えばクライアントデバイスのアプリケーション）によって実行可能な形態をとっている。
【００８７】
難読化されたスクリプトリソース・ソースデータセットは、クライアントデバイスに送信され、該クライアントデバイスにおいて、（例えばクライアントデバイスにおいて特定の関数を実施するためにおよび／または関連のウェブページを変更するために）抽出することができる。ツリー構造化ソースデータに対して実施される難読化は、等価難読化であったので、クライアントデバイスにおける難読化されたスクリプトリソースソースデータの実行結果は、難読化前の平文のスクリプトリソースソースデータが代わりに実行された場合と同じになる。
【００８８】
一部の実施形態では、難読化されたツリー構造化ソースデータの、難読化されたスクリプトリソース・ソースデータセットへの変換が、逆コンパイラプログラムによって実施可能である。
【００８９】
ツリー構造化ソースデータが難読化されているゆえに、難読化されたスクリプトリソース・ソースデータセットの内容は、難読化前のスクリプトリソース・ソースデータセットの内容とは異なるように見える。難読化されたスクリプトリソース・ソースデータセットは、より複雑で且つ読みにくく見え、これは、解読の難易度を上げて、ソースデータのセキュリティを保護する。難読化されたスクリプトリソース・ソースデータセットは、先ず難読化を解くことをしなくても、クライアントデバイスにおいて実行されることが可能である。なぜならば、選択された難読化手順は、平文のソースデータの元の文字列および／もしくは数値の少なくとも一部を意味のない値で置き換えるが元のコード文法は維持しているか、ならびに／または難読化ソースデータが実行されている間に復号化可能であるような値の暗号化を行うかのいずれかであるからである。
【００９０】
上記プロセス２００において説明されたように、スクリプトリソース・ソースデータセットは、ツリー構造化ソースデータにおける複数の意味構造の論理関係変換および／または意味置換（難読化）を使用して、ツリー構造化ソースデータの形に解析および編成することができる。ツリー構造化ソースデータは、難読化前のツリー構造化ソースデータとの間における実行結果の一貫性を維持しつつ難読化されることが可能である。難読化されたツリー構造化ソースデータは、次いで、難読化されたスクリプトリソースソースデータに変換される。難読化されたスクリプトリソースソースデータの実行結果は、難読化前の平文のフォーマットの実行結果と同一である。また、難読化パラメータは、無作為に生成可能であり、これは、同じスクリプトリソースソースデータでも難読化のたびに異なる難読化結果が生じることを可能にする。このような難読化結果の相違は、難読化されたスクリプトリソースソースデータの解読の難易度を上げ、スクリプトリソースソースデータのセキュリティを強化することができる。
【００９１】
一部の実施形態では、重要データは、スクリプトリソース・ソースデータセットに追加されることによって、およびスクリプトリソース・ソースデータセットに対して（例えばプロセス２００などのプロセスによって実現される）等価難読化を実施することによって保護することができる。重要データの一例は、暗号化ツール（例えば暗号化技術および暗号化キー）であってよい。例えば、暗号化ツールは、難読化される前のスクリプトリソース・ソースデータセットに含めることができる。次いで、暗号化技術および暗号化キーを含むスクリプトリソース・ソースデータセットは、等価難読化を経ることができる。等価難読化を経た後、暗号化技術および暗号化キーの内容は変化するかもしれないが、実行結果は変わらない。したがって、暗号化技術および暗号化キーの難読化は、その後に続く使用には影響を及ぼさないが、暗号化技術および暗号化キーの解読の難易度は上げる。暗号化ツールを保護することによって、クライアントデバイスに格納されて暗号化ツールによって暗号化される機密データも保護することができる。
【００９２】
図３および図４は、クライアントデータの暗号化に暗号化ツールが使用される例を説明している。
【００９３】
図３は、リクエストされたウェブページデータを送信するためのプロセスの一実施形態を示したフローチャートである。一部の実施形態では、プロセス３００は、図１のシステム１００において実行される。具体的には、一部の実施形態では、プロセス３００は、図１のシステム１００のサーバ１０４において実行される。
【００９４】
プロセス３００は、クライアントデバイスによってリクエストされたウェブページデータをクライアントデバイスに送信するプロセスの一例を説明している。クライアントデバイスに送信されるウェブページデータは、さらに、スクリプトリソース・ソースデータセットに埋め込まれた暗号化ツール（例えば、暗号化技術および暗号化キーを実現するコンピュータコード）をリクエストするためにクライアントデバイスによって使用される暗号化トークンを含む。クライアントデバイスによって暗号化ツールを求めてなされる続くリクエストに応答するプロセスは、図４においてさらに詳しく後述される。
【００９５】
３０２では、クライアントデバイスからページリクエストが受信される。
【００９６】
クライアントデバイスからページリクエストが受信される。ページリクエストは、クライアントデバイスとサーバとの間にオンラインセッションを確立するために使用される。ページリクエストは、新しいオンラインセッションのためのセッショントークンも確立する。セッショントークンは、サーバにアクセスするために、およびそれによって最終的にページリクエストに対応するウェブページデータを取り出すために使用することができる。オンラインセッションのセッショントークンは、クライアントデバイスとサーバとの間における連続通信時間間隔を表わすために使用される一意の識別子であってよい。セッショントークンは、クライアントデバイスを識別するために、およびこのクライアントデバイスとサーバとの間における通信を維持するためにも使用することができる。
【００９７】
３０４では、ページリクエストの受信に応えて暗号化キーが生成される。
【００９８】
ページリクエストに対応するセッショントークンのために、暗号化トークンが生成可能である。一部の実施形態では、暗号化トークンは、無作為に生成される。セッショントークンと暗号化トークンとの間における１対１の対応関係を示すデータが、サーバにおける暗号化トークンライブラリに格納される。例えば、暗号化トークンは、データまたは文字でなる１６ビット以上の無作為な文字列であってよい。
【００９９】
３０６では、暗号化トークンは、ページリクエストに関係付けられたウェブページデータに含められる。
【０１００】
一部の実施形態では、暗号化トークンは、受信されたページリクエストに関係付けられたウェブページデータ内の関連の場所に書き込まれる。一部の実施形態では、ウェブページデータは、クライアントデバイスがスクリプトリソース・ソースデータセットをリクエストする元になるアドレスを含む。
【０１０１】
例えば、生成された暗号化トークンは、リクエストされたウェブページデータの文：<script type="text/javascript" src="http://xyz.com/yyy.js?token=abcdefghijklmn0123456789"></script>に書き込まれる。この文例では、「token=abcdefghijklmn0123456789」が暗号化トークンであり、この暗号化トークンの値、すなわち「abcdefghijklmn0123456789」は、サーバによって無作為に生成される。さらに、この例の文では、「http://xyz.com/yyy.js」が、クライアントデバイスがリクエストする必要があるＪａｖａＳｃｒｉｐｔスクリプトリソースのアドレスである。例えば、指定のアドレスにおいて入手可能なＪａｖａＳｃｒｉｐｔスクリプトリソースは、実行されたときに、クライアントデバイスに格納された特定のパラメータを収集するようにおよびまた暗号化もするように構成される。
【０１０２】
３０８では、暗号化トークンを含むウェブページデータがクライアントデバイスに送信される。
【０１０３】
クライアントデバイス（またはクライアントデバイスにおいて実行される、ウェブブラウザなどのアプリケーション）は、暗号化トークンを含む受信されたウェブページデータをレンダリングするように構成される。
【０１０４】
クライアントデバイスにおいてウェブページデータがレンダリングされるのに伴って、ウェブページにおいて参照されるＪａｖａＳｃｒｉｐｔスクリプトリソースがクライアントデバイスに存在しないことが決定される。したがって、クライアントデバイスは、スクリプトリソースソースデータを取り出してスクリプトリソースの取り込みを完了させるために、ウェブページデータに含まれるアドレスに関係付けられたサーバにスクリプトリソース・リクエストを送信するように構成される。図４においてさらに後述されるように、スクリプトソースデータは、暗号化ツールを含んでいてよく、暗号化ツールを含むスクリプトソースデータは、クライアントデバイスに送信される前に難読化されることが可能である。
【０１０５】
図４は、スクリプトリソース・リクエストに応答するためのプロセスの一実施形態を示したフローチャートである。一部の実施形態では、プロセス４００は、図１のシステム１００において実行される。具体的には、一部の実施形態では、プロセス４００は、図１のシステム１００のサーバ１０４において実行される。
【０１０６】
プロセス４００は、スクリプトリソース・リクエストに応答するプロセスの一例を説明しており、該プロセスは、リクエストされたスクリプトリソース・ソースデータセットに暗号化技術および暗号化キーを含めることを含む。プロセス４００は、さらに、スクリプトリソース・ソースデータセットを、クライアントデバイスに送信する前に難読化することも説明している。図５においてさらに詳しく後述されるように、一部の実施形態では、スクリプトリソース・ソースデータセットは、クライアントデバイスにおいて実行されるときに、クライアントデバイスに格納されている特定のパラメータを収集するように、および該収集されたパラメータを暗号化技術と暗号化キーとを使用して暗号化するように、および該暗号化されたデータをサーバによる検証のためにサーバに送り返すように構成される。
【０１０７】
４０２では、クライアントデバイスからスクリプトリソース・リクエストが受信される。スクリプトリソース・リクエストは、暗号化トークンパラメータを含む。
【０１０８】
一部の実施形態では、スクリプトリソース・リクエストは、クライアントデバイスにおいてウェブページデータがレンダリングされている間にクライアントデバイスにおいて生成される。ウェブページデータは、図３のプロセス３００などのプロセスを使用してサーバからクライアントデバイスに送信されたものである。例えば、スクリプトリソース・リクエストは、ウェブページデータによって参照されるスクリプトリソース・ソースデータセットがクライアントデバイスでは入手可能ではないというクライアントデバイスによる決定に応えてクライアントデバイスにおいて生成される。ウェブページデータは、スクリプトリソース・ソースデータセットを得るためにクライアントデバイスがスクリプトリソース・リクエストを送信することができる送信先のアドレスを含んでいてよい。
【０１０９】
スクリプトリソース・リクエストは、暗号化トークンパラメータを含み、このパラメータの値は、ウェブページデータに含まれていた暗号化トークンである。一部の実施形態では、暗号化トークンは、サーバにおいて無作為に生成されて格納されたものである。様々な実施形態において、スクリプトリソース・リクエストは、図３のプロセス３００におけるサーバによるページリクエストの受信に応えて確立されたのと同じオンラインセッションに関係付けられる。
【０１１０】
４０４では、暗号化トークンパラメータに対応する暗号化キーおよび復号化キーが生成される。
【０１１１】
一部の実施形態では、一意の暗号化キーが無作為に生成される。一部の実施形態では、少なくとも一部には、このスクリプトリソース・リクエストに含まれる暗号化トークンパラメータに基づいて、一意の暗号化キーがサーバにおいて生成される。暗号化キーと暗号化トークンとの間における対応関係を示すデータが、サーバにおける暗号化キーライブラリに格納される。
【０１１２】
暗号化キーに対応する復号化キーも生成され、サーバにおけるこの暗号化キーライブラリに格納される。一部の実施形態では、復号化キーは、暗号化キーと同一であるように生成される。一部の実施形態では、復号化キーは、暗号化キーに基づいて生成される。
【０１１３】
４０６では、暗号化技術が選択される。暗号化キーは、この選択された暗号化技術に追加される。
【０１１４】
一部の実施形態では、既定の暗号化技術ライブラリから、暗号化技術が無作為に選択される。一部の実施形態では、暗号化技術は、所定の規則および／または暗号化トークンパラメータに基づいて、既定の暗号化技術ライブラリから選択することができる。既定の暗号化技術ライブラリに格納されている暗号化技術は、対称暗号化技術または非対称暗号化技術であってよい。既定の暗号化技術ライブラリに格納されている暗号化技術は、維持および定期的なアップデータが可能である。暗号化技術に関係付けられたラベルと暗号化トークンとの間における対応関係を示すデータが、サーバに格納される。ラベルは、（例えば既定の暗号化技術ライブラリから）選択された暗号化技術と、該選択された暗号化技術に対応する復号化技術とを一意に識別するために使用される。
【０１１５】
暗号化キーは、暗号化技術に書き込まれる。例えば、暗号化キーは、選択された暗号化技術を実現するコンピュータコードに、暗号化技術パラメータとして追加される。
【０１１６】
４０８では、暗号化キーを含む選択された暗号化技術を実現するコンピュータコードが、スクリプトリソース・ソースデータセットに含められる。
【０１１７】
（暗号化キーを含む）選択された暗号化技術コードを実現するコンピュータコードは、ＪａｖａＳｃｒｉｐｔスクリプトリソースを表わすスクリプトリソースソースコードに組み込まれる。暗号化キーを含む選択された暗号化技術を実現するコードは、スクリプトリソース・ソースデータセット内の関連の場所に配される。例えば、暗号化キーを含む選択された暗号化技術を実現するコードは、スクリプトリソースソースコードセット内の、ループ構造にネスト化されていない部分に配される。
【０１１８】
４１０では、スクリプトリソース・ソースデータセットが難読化される。
【０１１９】
暗号化キーを伴う暗号化技術を実現するコンピュータコードを含むスクリプトリソース・ソースデータセットは、スクリプトリソース・ソースデータセットおよび埋め込まれた暗号化情報がクライアントデバイスにおいて解読される可能性を下げるために難読化される。一部の実施形態では、スクリプトリソース・ソースデータセットは、図２のプロセス２００などのプロセスを使用して難読化可能である。
【０１２０】
４１２では、難読化されたスクリプトリソース・ソースデータセットが、クライアントデバイスに送信される。難読化されたスクリプトリソース・ソースデータセットは、クライアントデバイスにおいて１つ以上のクライアント関連パラメータを収集するように、および該収集された１つ以上のクライアント関連パラメータを、選択された暗号化技術と、暗号化キーとを使用して暗号化するように構成される。
【０１２１】
難読化されたスクリプトリソース・ソースデータセットは、クライアントデバイスに送信される。一部の実施形態では、クライアントデバイスは、クライアントデバイスに格納されているパラメータを収集するために、および該収集されたクライアント関連パラメータをスクリプトリソース・ソースデータセット内の暗号化技術と暗号化キーとを用いて暗号化および保護するために、難読化されたスクリプトリソース・ソースデータセットを実行することができる。
【０１２２】
難読化されたスクリプトリソース・ソースデータセットの実行によって収集可能なクライアント関連パラメータは、クライアントデバイスに格納されたパラメータを含む。このようなクライアント関連パラメータの少なくとも一部は、機密データであるかもしれない。難読化されたスクリプトリソース・ソースデータセットの実行によって収集可能なクライアント関連パラメータの例として、クライアント環境パラメータ、ユーザ行為パラメータ、およびブラウザプラグイン呼び出しパラメータのうちの１つ以上が挙げられる。クライアント環境パラメータの具体例として、ウェブブラウザのヴァージョン、オペレーティングシステムのヴァージョン、クライアントデバイスの画面の寸法（例えばサイズおよびアスペクト）、ならびにクライアントデバイスの画面解像度が挙げられる。ユーザ行為パラメータの具体例として、マウスの動き情報、マウスのクリック情報、キー操作情報、および焦点の動き情報が挙げられる。ブラウザプラグイン呼び出しパラメータの具体例として、その他のブラウザ制御およびクライアントＭＡＣアドレスの呼び出しが挙げられる。様々な実施形態において、収集されたクライアント関連パラメータは、暗号化トークンパラメータも含み、これは、ウェブページデータに含められた暗号化トークンの値を有する。
【０１２３】
難読化されたスクリプトリソース・ソースデータセットの実行によって収集される特定のタイプのクライアント関連パラメータは、事前にスクリプトリソースソースデータに書き込まれることが可能であり、このようなパラメータは、次いで、クライアントがスクリプトリソースソースデータを実行するときに収集されることが可能である。
【０１２４】
関連のパラメータが収集された後、クライアントデバイスにおける難読化されたスクリプトリソース・ソースデータセットの実行は、難読化されたスクリプトリソース・ソースデータセットに含まれる難読化された暗号化技術および難読化された暗号化キーを使用して、収集されたパラメータに対してデータ暗号化を実施する。暗号化されたパラメータは、検証のためにサーバに送信される。以下で図５においてさらに詳細に説明されるように、暗号化されたデータ（クライアントデバイスから収集された暗号化された関連パラメータ）および暗号化トークンを含む検証リクエストがサーバに送信される。サーバは、クライアントデバイスにおいて生じたかもしれない偽造、改ざん、または置き換えなどの違法操作の存在を決定するために、送信されたパラメータに対してデータ完全性の検証を実施することができる。
【０１２５】
図５は、スクリプトリソース・リクエストに応答するためのプロセスの一実施形態を示したフローチャートである。一部の実施形態では、プロセス５００は、図１のシステム１００において実行される。具体的には、一部の実施形態では、プロセス５００は、図１のシステム１００のサーバ１０４において実行される。
【０１２６】
プロセス５００は、暗号化されたクライアント関連パラメータがクライアントデバイスから受信され、悪意ある活動がクライアントデバイスにおいて起きたかどうかを判断するために検証される、プロセスの一例を説明している。
【０１２７】
５０２では、クライアントデバイスから検証リクエストが受信される。検証リクエストは、暗号化トークンパラメータと、１つ以上の暗号化されたクライアント関連パラメータとを含む。
【０１２８】
例えば、クライアントデバイスからのページリクエストの受信に応えて、サーバは、図３のプロセス３００などのプロセスによって実行されるように、暗号化トークンと、スクリプトリソース・ソースデータセットを得るのに有用なデータとを含むウェブページデータをクライアントデバイスに送信する。ウェブページデータがクライアントデバイスにおいて処理されている間に、サーバは、（ウェブページデータからの）暗号化トークンを含むスクリプトリソース・リクエストをクライアントデバイスから受信することができる。スクリプトリソース・リクエストの受信に応えて、サーバは、リクエストされたスクリプトリソース・ソースデータセットを見つけることができる。スクリプトリソース・ソースデータセットは、少なくとも、クライアント関連パラメータを収集するように、および暗号化技術と暗号化キーとを選択するように構成される。図４のプロセス４００などのプロセスによって説明されるように、サーバは、選択された暗号化技術と暗号化キーとを実現するコンピュータコードをスクリプトリソースデータセットに含め、随意として、（例えば、図２のプロセス２００などのプロセスにおいて説明された難読化技術を使用して）スクリプトリソースデータセットを難読化し、該（難読化された）スクリプトリソースデータセットをクライアントデバイスに送信する。上記のように、クライアントデバイスにおいて実行される（難読化された）スクリプトリソース・ソースデータセットは、クライアント関連パラメータを収集するように、および該収集されたパラメータを、（難読化された）スクリプトリソース・ソースデータセットに含まれる暗号化技術と暗号化キーとを使用して暗号化するように構成される。クライアントデバイスにおいて実行される（難読化された）スクリプトリソース・ソースデータセットは、次いで、検証リクエストをサーバに送信するように構成される。様々な実施形態において、検証リクエストは、暗号化トークンパラメータと、１つ以上の暗号化されたクライアント関連パラメータとを含む。検証リクエストの暗号化トークンパラメータの値は、前もってサーバに送信されたウェブページデータに含まれていた暗号化トークンである。
【０１２９】
一部の実施形態では、暗号化されたデータが存在するかどうか（例えば、空白値は、暗号化されたデータが存在しないことを示す）、暗号化されたデータが復号化可能であるかどうか、およびデータの置き換えがあったかどうかを判断するために、サーバにおいて、暗号化されたパラメータに対してデータ完全性検証プロセスが実施される。図５においてさらに詳しく後述されるように、もし、暗号化されたデータが存在する、暗号化されたデータが復号化可能でない、および／またはデータの置き換えが検出されたならば、データの完全性の検証は失敗したと判断され、少なくともクライアントデバイスに格納されているデータは損なわれたと想定される。
【０１３０】
一部の実施形態では、検証リクエストのなかの暗号化されたデータに含まれるパラメータとして、暗号化トークンパラメータ、クライアント環境パラメータ、ユーザ行為パラメータ、およびブラウザプラグイン呼び出しパラメータが挙げられる。
【０１３１】
様々な実施形態において、検証リクエストが関連付けられているオンラインセッションは、図３のプロセス３００などのプロセスにおける、サーバによるページリクエストの受信に応えて確立されたオンラインセッションと同じであって、図４のプロセス４００などのプロセスにおける、スクリプトリソース・リクエストに関係付けられたオンラインセッションである。
【０１３２】
５０４では、暗号化トークンパラメータに関係付けられた復号化キーおよび復号化技術が決定される。
【０１３３】
検証リクエストに含まれる暗号化トークンに対応する暗号化技術の逆操作を実施する復号化技術が、サーバの暗号化技術ライブラリに格納されている。検証リクエストに含まれる暗号化トークンに対応する暗号化キーに対応する復号化キーが、サーバの暗号化キーライブラリに格納されている。したがって、検証リクエストに含まれる暗号化トークンパラメータを使用することによって、サーバにおけるライブラリから、そこに格納されている対応関係に基づいて適切な復号化技術および復号化キーを取り出すことができる。暗号化技術および暗号化キーは、等価難読化を経た後も意味的に変わらないままであるので、暗号化技術ライブラリおよび暗号化キーライブラリでは、難読化前の元の暗号化技術に対応する復号化技術および難読化された暗号化キーに対応する難読化前の元の復号化キーをそれぞれ検索することができる。
【０１３４】
５０６では、検証リクエストに含まれる１つ以上の暗号化されたパラメータに対し、復号化キーおよび復号化技術を使用してデータ検証が実施される。
【０１３５】
一部の実施形態では、検証リクエストに含まれる暗号化されたパラメータのデータ検証を実施するために、先ず、暗号化されたパラメータが非ヌル値データを含むかどうかが判断される。もし、暗号化されたパラメータがヌル値を有するならば、これは、暗号化されたパラメータが存在しないことを示しており、ゆえに検証は無効であり、暗号化されたパラメータは疑わしいデータであると判断され、データ検証は失敗に終わる。他方、もし、暗号化されたパラメータが非ヌル値を有するならば、次は、データ復号化検証が実施される。
【０１３６】
データ復号化検証の際に、検証リクエストに含まれる非ヌル値の暗号化されたパラメータは、決定された復号化キーおよび復号化技術を使用して復号化される。もし、（例えば、暗号化されたデータのフォーマットが、復号化技術によって求められるフォーマットに適合しないゆえに、および／または復号化技術が、暗号化されたデータを成功裏に復号化することができないゆえに、）暗号化されたパラメータが、決定された復号化キーおよび復号化技術を使用して復号化可能でないならば（例えば、復号化が、無効であると判断されたならば）、暗号化されたパラメータに対して悪意ある操作が生じたかもしれないとの想定がなされ、データ完全性検証は無効結果を出力し、暗号化されたパラメータは疑わしいデータであると判断され、データ検証は失敗に終わる。そうではなく、もし、暗号化されたパラメータが、成功裏に復号化可能であるならば、暗号化されたパラメータに対応する復号化されたパラメータが生成され、これらの復号化されたパラメータに対し、データ置換防止検証（置換防止検証とも呼ばれる）が実施される。
【０１３７】
置換防止検証において、復号化されたパラメータに含まれるなかから暗号化トークンパラメータが抽出され、検証リクエストに含まれる暗号化トークンパラメータと比較される。抽出された暗号化トークンパラメータが、検証リクエストに含まれる暗号化トークンパラメータと同一である場合、暗号化されたパラメータは、データ検証に合格したと判断される。
【０１３８】
（例えば、図３のプロセス３００などのプロセスにおいて説明されたように）クライアントデバイスが最初にサーバにページリクエストを送信して以降における、クライアントデバイスとサーバとの間の通信は、同じオンラインセッションに、およびそれゆえに同じオンライントークンに関係付けられており、したがって、サーバにおける暗号化トークンライブラリでは、このオンラインセッションに対応するセッショントークンを探すことができる。一部の実施形態では、置換防止検証は、さらに、暗号化トークンライブラリにおいて探し出されたセッショントークンに対応する暗号化トークンが、復号化されたパラメータから抽出された暗号化トークンパラメータの値と同一であるかどうかを判断することを含む。もし、暗号化トークンライブラリにおいて探し出されたセッショントークンに対応する暗号化トークンが、復号化されたパラメータから抽出された暗号化トークンパラメータの値と同一でないならば、クライアントデバイスにおけるデータが置換されており、それゆえにこれらの復号化されたパラメータは疑わしいデータであると判断され、データ検証は失敗に終わったと判断される。そうではなく、もし、暗号化トークンライブラリにおいて探し出されたセッショントークンに対応する暗号化トークンが、復号化されたパラメータから抽出された暗号化トークンパラメータの値と同一であるならば、暗号化されたパラメータは、データ検証に合格したと判断される。
【０１３９】
もし、検証リクエストを通じてクライアントデバイスによってサブミットされた暗号化されたパラメータが、データ検証に合格したならば、暗号化されたパラメータは、正当なデータであり、クライアント操作行為の解析を実施するのに足る信頼性を有すると判断される。一部の実施形態では、サーバは、データ検証好結果メッセージをクライアントデバイスに送信する。
【０１４０】
しかしながら、もし、検証リクエストを通じてクライアントデバイスによってサブミットされた暗号化されたパラメータが、データ検証に合格しなかったならば、暗号化されたパラメータは、疑わしいデータであると判断され、異常な／悪意ある活動を示す警告を含むデータ検証結果メッセージがクライアントデバイスに送信される。
【０１４１】
５０８では、暗号化トークンパラメータに対応する暗号化トークンが、暗号化トークンライブラリから削除され、暗号化トークンパラメータに対応する暗号化キーが、暗号化キーライブラリから削除される。
【０１４２】
様々な実施形態において、データ検証プロセスが完了した後、現オンラインセッションにおいて生成された暗号化トークンおよび暗号化キーは、暗号化トークンおよび暗号化キーが再使用されないことを保証するために、暗号化トークンライブラリおよび暗号化キーライブラリから削除される。このようなクリーンアップは、暗号化トークンおよび暗号化キーの一度限りの使用を保証し、これは、ソースデータの解読の難易度を上げることができる。
【０１４３】
図６は、ウェブページデータをリクエストする一実施形態を示したフローチャートである。一部の実施形態では、プロセス６００は、図１のシステム１００において実行される。具体的には、一部の実施形態では、プロセス６００は、図１のシステム１００のクライアントデバイス１０２において実行される。
【０１４４】
プロセス６００は、クライアントデバイスがサーバに対してウェブページデータをリクエストし、最終的に、暗号化されたクライアントパラメータをデータ検証のためにサーバに送信するように促される、プロセスの一例を説明している。
【０１４５】
６０２では、ページリクエストがサーバに送信される。例えば、クライアントデバイスは、ユーザによるウェブアドレスの選択または入力の受信に応えてページリクエストを送信することができる。
【０１４６】
６０４では、サーバからウェブページデータが受信され、該ウェブページデータは、暗号化トークンを含む。サーバは、新しいオンラインセッションを確立し、暗号化トークンを生成し、該暗号化トークンを、リクエストされたウェブページデータに含め、ウェブページデータをクライアントデバイスに送り返す。例えば、サーバは、ページリクエストを処理するために、図３のプロセス３００などのプロセスを実施することができる。
【０１４７】
６０６では、サーバにスクリプトリソース・リクエストが送信される。スクリプトリソース・リクエストは、ウェブページデータに含まれる暗号化トークンに対応する暗号化トークンパラメータを含む。様々な実施形態において、ウェブページデータは、提供されたウェブアドレスからリクエストされることになるスクリプトリソース・ソースデータセット（例えばＪａｖａＳｃｒｉｐｔスクリプトリソース）への参照を含む。クライアントデバイスは、ウェブページデータをレンダリングするのに伴って、スクリプトリソース・ソースデータセットへの参照をウェブページデータのなかに検出し、該検出に応えて、ウェブアドレスに基づいてサーバに送信するための暗号化トークンパラメータを含むスクリプトリソース・リクエストを生成する。スクリプトリソース・リクエストに含まれる暗号化トークンパラメータは、ウェブページデータに含まれていた暗号化トークンと同じ値を有する。例えば、サーバは、スクリプトリソース・リクエストを処理するために、図４のプロセス４００を実施することができる。一部の実施形態では、クライアントデバイスは、ページリクエストに応えて確立されたオンラインセッションと同じオンラインセッションの一環として、スクリプトリソース・リクエストを送信する。
【０１４８】
６０８では、サーバから、難読化されたスクリプトリソース・ソースデータセットが受信され、該難読化されたスクリプトリソース・ソースデータセットは、暗号化技術および暗号化キーを含む。例えば、スクリプトリソース・ソースデータセットは、図２のプロセス２００などのプロセスを使用して難読化されたものである。
【０１４９】
６１０では、難読化されたスクリプトリソース・ソースデータセットが実行され、該難読化されたスクリプトリソース・ソースデータセットの実行は、１つ以上のクライアント関連パラメータを収集するように、および暗号化技術と暗号化キーとを使用して１つ以上のクライアント関連パラメータを暗号化するように、および１つ以上の暗号化されたクライアント関連パラメータをサーバに送信するように構成される。一部の実施形態では、難読化されたスクリプトリソース・ソースデータセットは、クライアントデバイスに格納されているデータを、クライアントデバイスにおいて悪意ある活動が起きた可能性があるかどうかを判断するサーバによる検証のために収集することができる。
【０１５０】
６１２では、サーバに検証リクエストが送信され、該検証リクエストは、暗号化トークンパラメータと、１つ以上の暗号化されたクライアント関連パラメータとを含む。例えば、サーバは、受信された検証リクエストのなかの暗号化されたクライアント関連パラメータに対し、図５のプロセス５００などのプロセスを使用してデータ検証を実施するように構成される。一部の実施形態では、クライアントデバイスは、ページリクエストに応えて確立されたオンラインセッションと同じオンラインセッションの一環として、検証リクエストを送信する。
【０１５１】
６１４では、サーバからデータ検証結果が受信される。検証リクエストのなかの暗号化されたクライアント関連パラメータが検証に合格したかまたは合格しなかったかを示すメッセージが、クライアントデバイスに送信される。暗号化されたクライアント関連パラメータが検証に合格しなかった場合、メッセージは、クライアントデバイスに格納されたデータが損なわれたかもしれないという警告を含んでいてよい。暗号化されたクライアント関連パラメータが検証に合格した場合、メッセージは、クライアント関連パラメータが成功裏に受信されたという確証を含んでいてよい。一部の実施形態では、暗号化されたクライアント関連パラメータが検証に合格した場合にクライアントデバイスにメッセージは一切送信されない。
【０１５２】
図７は、データを保護するように構成されたサーバの一実施形態を示した図である。この例では、システム７００は、解析モジュール７０１と、形成モジュール７０３と、選択モジュール７０５と、難読化モジュール７０７と、逆コンパイルモジュール７０９とを含む。
【０１５３】
モジュールおよびエレメントは、１つ以上のプロセッサ上で実行されるソフトウェアコンポーネントとして、またはプログラマブルロジックデバイスおよび／もしくは特定の機能を実施するように設計された特殊用途向け集積回路などのハードウェアとして、またはそれらの組み合わせとして実装されることが可能である。一部の実施形態では、モジュールおよびエレメントは、本発明の実施形態で説明される方法を（パソコン、サーバ、ネットワーク機器などの）計算装置に実行させるための幾つかの命令を含み尚且つ（光ディスク、フラッシュストレージデバイス、モバイルハードディスクなどの）不揮発性のストレージ媒体に記憶させることができるソフトウェア製品の形で具現化されることが可能である。モジュールおよびエレメントは、１つのデバイス上に実装されてよい、または複数のデバイスに分散されてよい。
【０１５４】
解析モジュール７０１は、複数の意味単位を決定するために、スクリプトリソース・ソースデータセットを解析するように構成される。
【０１５５】
形成モジュール７０３は、少なくとも一部には、複数の意味単位の値を複数の意味構造のそれぞれにマッピングすることに基づいて、ツリー構造化ソースデータを決定するように構成される。
【０１５６】
選択モジュール７０５は、ツリー構造化ソースデータに適用するための難読化手順を選択するように構成され、該選択された難読化手順は、１つ以上の難読化技術を含む。選択された難読化手順は、変数名置換、関数名置換、数値置換、文順序置換、空白排除、無効コード挿入、およびコード暗号化のうちの少なくとも１つ以上の難読化技術の組み合わせを含んでいてよい。
【０１５７】
難読化モジュール７０７は、少なくとも一部には、選択された難読化手順をツリー構造化ソースデータに適用することに基づいて、難読化されたツリー構造化ソースデータを決定するように構成される。
【０１５８】
難読化モジュール７０７は、さらに、生成エレメント７０７１と、難読化エレメント７０７３とを含む。生成エレメント７０７１は、選択された難読化手順に含まれる各難読化技術に対応する０のまたは１つ以上の難読化パラメータを生成するように構成される。難読化エレメント７０７３は、１つ以上の難読化技術と、生成エレメント７０７１によって生成された対応する難読化パラメータとに基づいて、ツリー構造化ソースデータの難読化を実施するように構成される。
【０１５９】
逆コンパイルモジュール７０９は、難読化されたツリー構造化ソースデータを、難読化されたスクリプトリソース・ソースデータセットに変換するように構成される。逆コンパイルモジュール７０９は、さらに、解体エレメント７０９１と、構築エレメント７０９３とを含む。解体エレメント７０９１は、難読化されたツリー構造化ソースデータを解体することによって、難読化された意味構造を得るように構成される。構築エレメント７０９３は、難読化された意味構造に対応する難読化された意味単位を使用して、難読化されたスクリプトリソースソースデータを構築するように構成される。
【０１６０】
本説明における様々な実施形態は、総じて進行順に説明されている。各実施形態の説明は、その他の実施形態との相違箇所に焦点を当てており、その説明は、各実施形態の同一のまたは類似の部分を相互に参照可能である。
【０１６１】
本出願は、プログラムモジュールまたはプログラムユニットのように、コンピュータによって実行されるコンピュータ実行可能コマンドを一般的な背景として説明することができる。総じて、プログラムモジュールまたはプログラムユニットは、特定のタスクを実行するためのまたは特定の抽象データ型を実現するための、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含むことができる。通常、プログラムモジュールまたはプログラムユニットは、ソフトウェア、ハードウェア、または両者の組み合わせによって実現することができる。本出願は、分散コンピューティング環境のなかで行うこともできる。このような分散コンピューティング環境では、タスクは、通信ネットワークを通じて接続された遠隔処理機器によって実行される。分散コンピューティング環境では、プログラムモジュールまたはプログラムユニットは、ストレージ機器を含むローカルコンピュータまたはリモートコンピュータにおけるストレージ媒体上に位置付けることができる。
【０１６２】
当業者ならば、本出願の実施形態が、方法、システム、またはコンピュータプログラム製品として提供可能であることがわかるはずである。したがって、本出願は、完全にハードウェアで構成される実施形態、完全にソフトウェアで構成される実施形態、またはハードウェアとソフトウェアとを組み合わせた実施形態の形態をとることができる。また、本出願は、コンピュータ操作可能なプログラムコードを含む１つ以上のコンピュータ操作可能なストレージ媒体（磁気ディスクストレージデバイス、ＣＤ−ＲＯＭ、および光ストレージデバイスを含むがこれらに限定はされない）に実装されたコンピュータプログラム製品の形態をとることができる。
【０１６３】
本文書は、本出願の原理および実装形態を解説するために、具体的な実施形態を用いてきた。上記の実施形態の説明は、本開示の方法およびその核となる概念の理解を助けるためのものにすぎない。さらに、当業者ならば、本開示の概念をもとにして、実装の具体的形態および適用の範囲に対して変更を加えることができる。以上をまとめると、本説明の内容は、本出願を制限するものと理解されてはならない。
【０１６４】
以上の実施形態は、理解を明瞭にする目的で幾らか詳細に説明されてきたが、本発明は、提供された詳細に限定されない。本発明を実現するには、数々の代替的手法がある。開示された実施形態は、例示的なものであり、限定的なものではない。
本発明は、たとえば、以下のような態様で実現することもできる。
［適用例１］
システムであって、
１つ以上のプロセッサと、
前記１つ以上のプロセッサに結合され、前記１つ以上のプロセッサに命令を提供するように構成された１つ以上のメモリと、を備え、
前記１つ以上のプロセッサは、
複数の意味単位を決定するために、スクリプトリソース・ソースデータセットを解析することと、
少なくとも一部には、前記複数の意味単位の値を複数の意味構造のそれぞれにマッピングすることに基づいて、ツリー構造化ソースデータを決定することと、
前記ツリー構造化ソースデータに適用するための難読化手順を選択することであって、前記選択された難読化手順は、１つ以上の難読化技術を含む、難読化手順の選択と、
少なくとも一部には、前記選択された難読化手順を前記ツリー構造化ソースデータに適用することによって、難読化されたツリー構造化ソースデータを決定することと、
前記難読化されたツリー構造化ソースデータを、難読化されたスクリプトリソース・ソースデータセットに変換することと、を行うように構成される、システム。
［適用例２］
適用例１のシステムであって、
前記１つ以上のプロセッサは、さらに、前記複数の意味単位のそれぞれに対応する複数の意味構造を、所定のツリー構造化意味構造定義ライブラリから決定するように構成される、システム。
［適用例３］
適用例１のシステムであって、
前記複数の意味単位を決定するために、スクリプトリソース・ソースデータセットを解析することは、コンパイルプロセスの一環として実施される、システム。
［適用例４］
適用例１のシステムであって、
前記選択された難読化手順は、前記１つ以上の難読化技術が実施される順序を含む、システム。
［適用例５］
適用例１のシステムであって、
前記１つ以上の難読化技術は、変数名置換、関数名置換、数値置換、文順序置換、空白排除、無効コード挿入、およびコード暗号化のうちの１つ以上の難読化技術を含む、システム。
［適用例６］
適用例１のシステムであって、
前記難読化されたツリー構造化ソースデータを、難読化されたスクリプトリソース・ソースデータセットに変換することは、逆コンパイルプロセスの一環として実施される、システム。
［適用例７］
適用例１のシステムであって、
前記難読化されたツリー構造化ソースデータを、難読化されたスクリプトリソース・ソースデータセットに変換することは、
前記難読化されたツリー構造化ソースデータをトラバースすることと、
少なくとも一部には、所定のツリー構造化意味構造定義ライブラリに含まれる意味構造に基づいて、前記難読化されたツリー構造化ソースデータに含まれる複数の意味構造を抽出することと、
前記複数の意味構造から、難読化された複数の意味単位を決定することと、を含む、システム。
［適用例８］
適用例１のシステムであって、
前記１つ以上のプロセッサは、さらに、
クライアントデバイスからページリクエストを受信することと、
前記ページリクエストの受信に応えて、暗号化トークンを生成することと、
前記ページリクエストに関係付けられたウェブページデータに、前記暗号化トークンを含めることと、
前記暗号化トークンを含む前記ウェブページデータを送信することと、を行うように構成される、システム。
［適用例９］
適用例８のシステムであって、
前記１つ以上のプロセッサは、さらに、
スクリプトリソース・リクエストを受信することであって、前記スクリプトリソース・リクエストは、前記暗号化トークンを含む、スクリプトリソース・リクエストの受信と、
暗号化キーおよび復号化キーを生成することと、
暗号化技術を選択することであって、前記暗号化キーは、前記選択された暗号化技術に追加される、暗号化技術の選択と、
前記暗号化キーを含む前記選択された暗号化技術を実現するコンピュータコードを、前記スクリプトリソース・ソースデータセットに含めることと、を行うように構成される、システム。
［適用例１０］
適用例９のシステムであって、
前記難読化されたスクリプトリソース・ソースデータセットは、前記クライアントデバイスにおいて１つ以上のクライアント関連パラメータを収集するように、および前記収集された１つ以上のクライアント関連パラメータを、前記選択された暗号化技術と、前記暗号化キーとを使用して暗号化するように構成される、システム。
［適用例１１］
適用例１０のシステムであって、
前記１つ以上のプロセッサは、さらに、
検証リクエストを受信することであって、前記検証リクエストは、前記暗号化トークンと、前記暗号化された１つ以上のクライアント関連パラメータとを含む、検証リクエストの受信と、
前記暗号化トークンに関係付けられた前記復号化キーおよび復号化技術を決定することと、
前記復号化キーおよび前記復号化技術を使用して、前記暗号化された１つ以上のクライアント関連パラメータに対してデータ検証を実施することと、
前記データ検証の実施に続いて、前記暗号化トークンを暗号化トークンライブラリから削除し、前記暗号化キーに対応する暗号化キーを暗号化キーライブラリから削除することと、を行うように構成される、システム。
［適用例１２］
適用例１１のシステムであって、
前記復号化キーおよび前記復号化技術を使用して、前記暗号化された１つ以上のクライアント関連パラメータに対してデータ検証を実施することは、
前記暗号化された１つ以上のクライアント関連パラメータのいずれかがヌル値を含むかどうかを判断することと、
前記暗号化された１つ以上のクライアント関連パラメータのいずれもヌル値を含まない場合に、前記暗号化された１つ以上のクライアント関連パラメータが、前記復号化技術および前記復号化キーを使用して複数の復号化されたパラメータに復号化可能であるかどうかを判断することと、
前記暗号化された１つ以上のクライアント関連パラメータが、前記複数の復号化されたパラメータに復号化可能である場合に、前記複数の復号化されたパラメータに前記暗号化トークンが含まれるかどうかを判断することと、を含む、システム。
［適用例１３］
適用例１２のシステムであって、
前記暗号化された１つ以上のクライアント関連パラメータの少なくとも１つがヌル値を含む場合に、前記１つ以上のプロセッサは、さらに、前記データ検証が失敗に終わったと判断して前記クライアントデバイスに警告を送信するように構成される、システム。
［適用例１４］
適用例１２のシステムであって、
前記暗号化された１つ以上のクライアント関連パラメータが、複数の復号化されたパラメータに復号化可能でない場合に、前記１つ以上のプロセッサは、さらに、前記データ検証が失敗に終わったと判断して前記クライアントデバイスに警告を送信するように構成される、システム。
［適用例１５］
適用例１２のシステムであって、
前記複数の復号化されたパラメータに前記暗号化トークンが含まれない場合に、前記１つ以上のプロセッサは、さらに、前記データ検証が失敗に終わったと判断して前記クライアントデバイスに警告を送信するように構成される、システム。
［適用例１６］
適用例１２のシステムであって、
前記複数の復号化されたパラメータに前記暗号化トークンが含まれる場合に、前記１つ以上のプロセッサは、さらに、データ検証好結果メッセージを前記クライアントデバイスに送信するように構成される、システム。
［適用例１７］
方法であって、
１つ以上のプロセッサを使用し、複数の意味単位を決定するためにスクリプトリソース・ソースデータセットを解析することと、
少なくとも一部には、前記複数の意味単位の値を複数の意味構造のそれぞれにマッピングすることに基づいて、ツリー構造化ソースデータを決定することと、
前記ツリー構造化ソースデータに適用するための難読化手順を選択することであって、前記選択された難読化手順は、１つ以上の難読化技術を含む、難読化手順の選択と、
少なくとも一部には、前記選択された難読化手順を前記ツリー構造化ソースデータに適用することによって、難読化されたツリー構造化ソースデータを決定することと、
前記難読化されたツリー構造化ソースデータを、難読化されたスクリプトリソース・ソースデータセットに変換することと、
を備える方法。
［適用例１８］
適用例１７の方法であって、
前記選択された難読化手順は、前記１つ以上の難読化技術が実施される順序を含む、方法。
［適用例１９］
適用例１７の方法であって、
前記１つ以上の難読化技術は、変数名置換、関数名置換、数値置換、文順序置換、空白排除、無効コード挿入、およびコード暗号化のうちの１つ以上の難読化技術を含む、方法。
［適用例２０］
適用例１７の方法であって、
前記難読化されたツリー構造化ソースデータを、難読化されたスクリプトリソース・ソースデータセットに変換することは、
前記難読化されたツリー構造化ソースデータをトラバースすることと、
少なくとも一部には、所定のツリー構造化意味構造定義ライブラリに含まれる意味構造に基づいて、前記難読化されたツリー構造化ソースデータに含まれる複数の意味構造を抽出することと、
前記複数の意味構造から、難読化された複数の意味単位を決定することと、を含む、方法。
［適用例２１］
適用例１７の方法であって、さらに、
クライアントデバイスからページリクエストを受信することと、
前記ページリクエストの受信に応えて、暗号化トークンを生成することと、
前記ページリクエストに関係付けられたウェブページデータに、前記暗号化トークンを含めることと、
前記暗号化トークンを含む前記ウェブページデータを送信することと、を備える方法。
［適用例２２］
適用例２１の方法であって、さらに、
スクリプトリソース・リクエストを受信することであって、前記スクリプトリソース・リクエストは、前記暗号化トークンを含む、スクリプトリソース・リクエストの受信と、
暗号化キーおよび復号化キーを生成することと、
暗号化技術を選択することであって、前記暗号化キーは、前記選択された暗号化技術に追加される、暗号化技術の選択と、
前記暗号化キーを含む前記選択された暗号化技術を実現するコンピュータコードを、前記スクリプトリソース・ソースデータセットに含めることと、を備える方法。
［適用例２３］
適用例２２の方法であって、
前記難読化されたスクリプトリソース・ソースデータセットは、前記クライアントデバイスにおいて１つ以上のクライアント関連パラメータを収集するように、および前記収集された１つ以上のクライアント関連パラメータを、前記選択された暗号化技術と、前記暗号化キーとを使用して暗号化するように構成される、方法。
［適用例２４］
適用例２３の方法であって、さらに、
検証リクエストを受信することであって、前記検証リクエストは、前記暗号化トークンと、前記暗号化された１つ以上のクライアント関連パラメータとを含む、検証リクエストの受信と、
前記暗号化トークンに関係付けられた前記復号化キーおよび復号化技術を決定することと、
前記復号化キーおよび前記復号化技術を使用して、前記暗号化された１つ以上のクライアント関連パラメータに対してデータ検証を実施することと、
前記データ検証の実施に続いて、前記暗号化トークンを暗号化トークンライブラリから削除し、前記暗号化キーに対応する暗号化キーを暗号化キーライブラリから削除することと、を備える方法。
［適用例２５］
クライアントデバイスであって、
１つ以上のプロセッサと、
前記１つ以上のプロセッサに結合され、前記１つ以上のプロセッサに命令を提供するように構成された１つ以上のメモリと、を備え、
前記１つ以上のプロセッサは、
ページリクエストをサーバに送信することと、
前記サーバからウェブページデータを受信することであって、前記ウェブページデータは、暗号化トークンを含む、ウェブページデータの受信と、
スクリプトリソース・リクエストを前記サーバに送信することであって、前記ウェブページデータは、暗号化トークンを含む、スクリプトリソース・リクエストの送信と、
難読化されたスクリプトリソース・ソースデータセットを前記サーバから受信することであって、前記難読化されたスクリプトリソース・ソースデータセットは、暗号化技術および暗号化キーを含む、難読化されたスクリプトリソース・ソースデータセットの受信と、
前記難読化されたスクリプトリソース・ソースデータセットを実行することであって、前記難読化されたスクリプトリソース・ソースデータセットの実行は、１つ以上のクライアント関連パラメータを収集するように、前記暗号化技術と前記暗号化キーとを使用して前記１つ以上のクライアント関連パラメータを暗号化するように、および前記１つ以上の暗号化されたクライアント関連パラメータを前記サーバに送信するように構成される、前記難読化されたスクリプトリソース・ソースデータセットの実行と、
検証リクエストを前記サーバに送信することであって、前記検証リクエストは、前記暗号化トークンと、前記１つ以上の暗号化されたクライアント関連パラメータとを含む、検証リクエストの送信と、
データ検証結果を前記サーバから受信することと、を行うように構成される、クライアントデバイス。
【図１】
0006257754.tif 000003
【図２】
0006257754.tif 000004
【図３】
0006257754.tif 000005
【図４】
0006257754.tif 000006
【図５】
0006257754.tif 000007
【図６】
0006257754.tif 000008
【図７】
0006257754.tif 000009