(57)【要約】  クライアントシステム上で実行するブラウザによって処理されるウェブページまたはウェブアプリをセキュリティ保護するための方法が提供され、方法はブラウザがホワイトボックス保護コードのインスタンスを実行するステップを含み、ホワイトボックス保護コードのインスタンスの実行は、クライアントシステムに、1つまたは複数のセキュリティテストを実行するために制御システムによって使用されるメッセージデータを含むメッセージを生成するステップであって、制御システムはネットワークを介してクライアントシステムに通信可能に接続される、ステップと、メッセージを制御システムに送信し、制御システムがメッセージデータを使用して1つまたは複数のセキュリティテストを実行することを可能にするステップと、少なくとも一部にはメッセージに基づき制御システムから応答を受信することステップと、応答を処理するステップとを実行させる。
2019502997.tif 000002
【特許請求の範囲】
【請求項１】
クライアントシステム上で実行するブラウザによって処理されるウェブページまたはウェブアプリをセキュリティ保護するための方法であって、前記ブラウザがホワイトボックス保護コードのインスタンスを実行するステップを含み、ホワイトボックス保護コードの前記インスタンスの実行は、前記クライアントシステムに、
1つまたは複数のセキュリティテストを実行するために制御システムによって使用されるメッセージデータを含むメッセージを生成するステップであって、前記制御システムはネットワークを介して前記クライアントシステムに通信可能に接続される、ステップと、
前記メッセージを前記制御システムに送信し、前記制御システムが前記メッセージデータを使用して前記1つまたは複数のセキュリティテストを実行することを可能にするステップと、
前記メッセージに少なくとも一部基づき前記制御システムから応答を受信するステップと、
前記応答を処理するステップとを実行させる方法。
【請求項２】
クライアントシステム上で実行するブラウザによって処理されるウェブページまたはウェブアプリをセキュリティ保護するための方法であって、ネットワークを介して前記クライアントシステムに通信可能に接続されている制御システムにおいて、
前記クライアントシステムからメッセージを受信するステップであって、前記メッセージは1つまたは複数のセキュリティテストを実行するために前記制御システムによって使用されるメッセージデータを含み、ホワイトボックス保護コードのインスタンスによって生成される前記メッセージは前記ブラウザによって実行される、ステップと、
前記メッセージデータを使用して前記1つまたは複数のセキュリティテストを実行するステップと、
前記メッセージに少なくとも一部基づき応答を生成するステップと、
前記クライアントシステムによる処理のために前記応答を前記クライアントシステムに送信するステップとを含む方法。
【請求項３】
ホワイトボックス保護コードの前記インスタンスは、前記ウェブページまたはウェブアプリの一部である請求項1または2に記載の方法。
【請求項４】
前記メッセージデータの少なくとも一部は、ホワイトボックス保護コードの前記インスタンスの同一性を示す請求項1から3のいずれか一項に記載の方法。
【請求項５】
前記1つまたは複数のセキュリティテストは、
(a)ホワイトボックス保護コードの前記インスタンスの一部または全部の完全性を検証するためのテスト、
(b)前記ウェブページまたはウェブアプリの一部または全部の完全性を検証するためのテスト、
(c)ホワイトボックス保護コードの前記インスタンスがデバッガを使用して実行されているかどうかを識別するためのテスト、
(d)前記ウェブページもしくはウェブアプリに関係する、または前記ウェブページもしくはウェブアプリによって提供されるデータがコピーされているか、またはすでにコピーされているかを識別するためのテスト、
(e)前記ウェブページもしくはウェブアプリのデータフィールドの妥当性確認がオンにされているかまたはオフにされているかを識別するためのテスト、
(f)広告ブロックがオンにされているかまたはオフにされているかを識別するためのテスト
のうちの1つまたは複数を含む請求項1から4のいずれか一項に記載の方法。
【請求項６】
前記ウェブページまたはウェブアプリの一部または全部の完全性を検証するための前記テストは、前記ウェブページまたはウェブアプリのDOMの一部または全部の完全性を検証するステップを含む請求項5に記載の方法。
【請求項７】
前記応答は、前記1つまたは複数のセキュリティテストの結果に少なくとも一部基づき生成される請求項1から6のいずれか一項に記載の方法。
【請求項８】
前記応答は、前記クライアントシステムによって処理されたときに、前記クライアントシステムに、
(a)前記ウェブページまたはウェブアプリの機能を提供するか、または提供し続けるステップ、
(b)前記ウェブページまたはウェブアプリの機能の提供を妨げるか、またはその提供を停止するステップ、
(c)前記ウェブページまたはウェブアプリの機能の代替となるか、または補完する機能を提供するステップ、
(d)前記クライアントシステムおよび/または前記ブラウザの1つまたは複数の構成設定を変更するステップのうちの1つまたは複数を実行させる請求項1から7のいずれか一項に記載の方法。
【請求項９】
前記応答は、応答データを含み、ホワイトボックス保護コードの前記インスタンスは、前記応答データに基づき、前記1つまたは複数のセキュリティテストを実行するために前記制御システムによって使用されるその後のメッセージのメッセージデータを生成するように配置構成される請求項1から8のいずれか一項に記載の方法。
【請求項１０】
前記応答データは、(i)ホワイトボックス保護コードの前記インスタンスの1つまたは複数の部分、および/または(ii)前記ウェブページもしくはウェブアプリの1つまたは複数の部分を識別し、完全性検証テストは、前記1つまたは複数の部分に基づき前記制御システムによって実行されるべきである請求項9に記載の方法。
【請求項１１】
ホワイトボックス保護コードの前記インスタンスは、前記メッセージを暗号化形式で生成するように配置構成され、前記制御システムは、前記応答を暗号化形式で生成するように配置構成される請求項1から10のいずれか一項に記載の方法。
【請求項１２】
前記ネットワークは、インターネットを含む請求項1から11のいずれか一項に記載の方法。
【請求項１３】
前記ウェブページまたはウェブアプリは、ネットワークを介して前記クライアントシステムに通信可能に接続されているサービスシステムをインタラクティブに操作するように配置構成され、前記メッセージは、前記サービスシステムに送信されるべき要求を含む請求項1から12のいずれか一項に記載の方法。
【請求項１４】
請求項2に従属するときに、
(a)前記制御システムが前記サービスシステムをインタラクティブに操作するステップ、
(b)前記1つまたは複数のセキュリティテストの結果に基づき、前記制御システムが前記サービスシステムをインタラクティブに操作すべきかどうかを決定し、前記制御システムが前記サービスシステムをインタラクティブに操作すべきと決定された場合に、前記制御システムが前記サービスシステムをインタラクティブに操作するステップのうちの少なくとも1つを含む請求項13に記載の方法。
【請求項１５】
前記応答は、前記制御システムによる前記サービスシステムの前記インタラクティブな操作に少なくとも一部基づき生成される請求項14に記載の方法。
【請求項１６】
前記応答は、前記要求への、前記サービスシステムからの返信を含む請求項15に記載の方法。
【請求項１７】
請求項2に従属するときに、前記制御システムが、前記メッセージに基づき、前記サービスシステムによるその後のアクセスに備えてデータをリポジトリに記憶するステップを含む請求項13から16のいずれか一項に記載の方法。
【請求項１８】
請求項2に従属するときに、前記制御システムが前記サービスシステムに前記1つまたは複数のセキュリティテストの結果の指示を提供するステップを含む請求項13から17のいずれか一項に記載の方法。
【請求項１９】
前記サービスシステムは、金融サービスを提供し、前記ウェブページまたはウェブアプリは、前記金融サービスへのアクセスを提供する請求項13から18のいずれか一項に記載の方法。
【請求項２０】
前記金融サービスは、
金融口座にアクセスするステップ、および/または
マーチャントと金融に関してインタラクティブにやり取りするステップのうちの1つまたは複数を含む請求項19に記載の方法。
【請求項２１】
前記ウェブページまたはウェブアプリは、コンテンツ配布ネットワークを介してコンテンツへのアクセスを提供する請求項1から18のいずれか一項に記載の方法。
【請求項２２】
パケットボックス保護コードの前記インスタンスは、暗号化されたコンテンツの修正バージョンを取得するように配置構成され、暗号化されたコンテンツの前記修正バージョンは第1の修正が適用された前記暗号化されたコンテンツを含み、
前記応答は、暗号化されたコンテンツの前記修正バージョンに適用する第2の修正を示すデータを含み、
前記応答を処理するステップは、ホワイトボックス保護コードの前記インスタンスが前記第2の修正を暗号化されたコンテンツの前記修正バージョンに適用して処理済みの修正された暗号化されたコンテンツを形成するステップを含み、
前記ウェブページまたはウェブアプリは、前記処理済みの修正された暗号化されたコンテンツに基づきコンテンツを出力するように配置構成される請求項21に記載の方法。
【請求項２３】
前記第2の修正は、前記処理済みの修正された暗号化されたコンテンツが、前記1つまたは複数のテストの結果が前記クライアントシステムが前記コンテンツにアクセスすることを許可されていることを指示する場合にのみ前記暗号化されたコンテンツに等しくなるように配置構成される請求項22に記載の方法。
【請求項２４】
ホワイトボックス保護コードの前記インスタンスは、前記暗号化されたコンテンツを受信し、前記第1の修正を前記受信された暗号化されたコンテンツに適用し、それによって、暗号化されたコンテンツの前記修正バージョンを取得するように配置構成されるか、または
ホワイトボックス保護コードの前記インスタンスは、前記ネットワークを介して暗号化されたコンテンツの前記修正バージョンを受信するように配置構成される請求項22または23に記載の方法。
【請求項２５】
前記1つまたは複数のセキュリティテストの少なくとも1つは、ホワイトボックス保護コードの前記インスタンスに関連付けられているメタデータに少なくとも一部基づき、前記メタデータは前記制御システムによってアクセス可能である請求項1から24のいずれか一項に記載の方法。
【請求項２６】
プロセッサによって実行されたときに、前記プロセッサに、請求項2に記載の、または請求項2に従属するときに請求項3から25のいずれか一項に記載の方法を実行させるコンピュータプログラム。
【請求項２７】
請求項2に記載の、または請求項2に従属するときに請求項3から25のいずれか一項に記載の方法を実行するように配置構成されているシステム。
【請求項２８】
ホワイトボックス保護コードのインスタンスであって、クライアントシステムのブラウザによるホワイトボックス保護コードの前記インスタンスの実行は、前記クライアントシステムに、請求項1に記載の、または請求項1に従属するときに請求項3から25のいずれか一項に記載の方法を実行させるホワイトボックス保護コードのインスタンス。
【請求項２９】
ウェブページまたはウェブアプリをクライアントシステムに提供する方法であって、請求項28に記載のホワイトボックス保護コードのインスタンスを含むウェブページまたはウェブアプリを提供するステップを含み、それによってホワイトボックス保護コードの前記インスタンスの実行は前記ウェブページまたはウェブアプリをセキュリティ保護する方法。
【請求項３０】
請求項27に記載のシステムによって、前記クライアントシステムに提供する前記ウェブページまたはウェブアプリの一部として含めるべき特定のインスタンスを、ホワイトボックス保護コードの複数のインスタンスから決定するステップを含む請求項29に記載の方法。
【請求項３１】
ウェブページまたはウェブアプリをクライアントシステムに提供する方法であって、請求項28に記載のホワイトボックス保護コードのインスタンスが取得可能であるアドレスを含むウェブページまたはウェブアプリを提供するステップを含み、それによってホワイトボックス保護コードの前記インスタンスの実行は前記ウェブページまたはウェブアプリをセキュリティ保護する方法。
【請求項３２】
請求項27に記載のシステムによって、前記アドレスを介して前記クライアントシステムからの要求に応答して、前記クライアントシステムに提供すべき特定のインスタンスを、ホワイトボックス保護コードの複数のインスタンスから決定するステップを含む請求項31に記載の方法。
【請求項３３】
請求項28に記載のホワイトボックス保護コードの複数のインスタンスを生成するステップと、
請求項27に記載のシステムによってアクセス可能なデータベース内にホワイトボックス保護コードの前記複数のインスタンスを記憶するステップとを含む方法。
【請求項３４】
ホワイトボックス保護コードの前記複数のインスタンスの各々に関連付けられているそれぞれのメタデータを生成し、前記データベースに記憶するステップであって、前記メタデータは前記1つまたは複数のセキュリティテストを実行するために前記システムによって使用され、前記メタデータは前記システムによってアクセス可能である、ステップを含む請求項33に記載の方法。
【請求項３５】
請求項29から34のいずれか一項に記載の方法を実行するように配置構成されているシステム。
【請求項３６】
1つまたは複数のプロセッサによって実行されたときに、前記1つまたは複数のプロセッサに、請求項29から34のいずれか一項に記載の方法を実行させるコンピュータプログラム。
【請求項３７】
請求項26または36に記載のコンピュータプログラムを記憶するか、または請求項28に記載のホワイトボックス保護コードのインスタンスを記憶するコンピュータ可読媒体。
【請求項３８】
システムのブラウザによるホワイトボックス保護コードのインスタンスを実行するように配置構成されているシステムであって、前記ブラウザによるホワイトボックス保護コードの前記インスタンスの実行は、前記システムに、請求項1に記載の、または請求項1に従属するときに請求項3から25のいずれか一項に記載の方法を実行させるシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ウェブページまたはウェブアプリ(または他のアプリケーション)をセキュリティ保護するための方法、ウェブページまたはウェブアプリ(または他のアプリケーション)を提供するための方法、ならびにそのような方法を実行するためのシステムおよびコンピュータプログラムに関する。
【背景技術】
【０００２】
ウェブページ、ウェブアプリ、または他のアプリケーションをユーザのコンピュータシステムに提供することはよく知られている。ウェブページおよびウェブアプリは、ユーザのコンピュータシステム上で走っているブラウザを使用して、処理されるか、または実行され得る。他のアプリケーションは、プラザ環境の外側、またはそれとは独立して実行されるものとしてよい。ユーザのコンピュータシステムおよびブラウザは、一般的に、ウェブページ、ウェブアプリ、またはアプリケーションのプロバイダの制御の外にある。これは、コンピュータシステムのユーザが、ウェブページ、ウェブアプリ、またはアプリケーションに対する、またはその使用に対する攻撃を開始することを試みることができることを意味する。そのような攻撃には、ユーザのための金融上の利益、機密情報の不正利用、ユーザには権利のないコンテンツまたはサービスへのアクセス、などの様々な目的があり得る。ユーザは、コンピュータシステムおよび/またはブラウザを、そのような攻撃を開始することを容易にするように、もしくは攻撃が成功する確率を高めることを試みるように、構成するか、または使用することができ得る。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許第61/055.694号
【特許文献２】国際公開第WO2009/40774号
【特許文献３】米国特許第7,350,085号
【特許文献４】米国特許第7,397,916号
【特許文献５】米国特許第6,594,761号
【特許文献６】米国特許第6,842,862号
【特許文献７】米国特許第6,779,114号
【特許文献８】国際公開第WO2012/126077号
【特許文献９】米国特許第7,395,433号
【特許文献１０】国際公開第WO2011/120123号
【特許文献１１】国際公開第WO2015/150391号
【特許文献１２】国際公開第WO2015/150376号
【特許文献１３】国際公開第WO2013/142981号
【特許文献１４】国際公開第WO2013/142979号
【特許文献１５】国際公開第WO2013/142983号
【特許文献１６】国際公開第WO2013/142980号
【非特許文献】
【０００４】
【非特許文献１】「White-Box Cryptography and an AES Implementation」、S. Chowら、Selected Areas in Cryptography、9th Annual International Workshop、SAC 2002、Lecture Notes in Computer Science 2595 (2003年)、250〜270頁
【非特許文献２】「A White-box DES Implementation for DRM Applications」、S. Chowら、Digital Rights Management、ACM CCS-9 Workshop、DRM 2002、Lecture Notes in Computer Science 2696 (2003年)、1〜15頁
【非特許文献３】https://en.wikipedia.org/wiki/Web_application
【非特許文献４】https://en.wikipedia.org/wiki/Single_sign-on
【非特許文献５】https://dvcs.w3.org/hg/user-interface-safety/raw-file/tip/user-interface-safety.html
【発明の概要】
【発明が解決しようとする課題】
【０００５】
したがって、よりセキュリティの高い方式でウェブページ、ウェブアプリ、または他のアプリケーションをユーザのコンピュータシステムに提供し、ウェブページ、ウェブアプリ、または他のアプリケーションがセキュリティの高い方式で処理されるか、または実行されることを可能にすることができると、望ましいであろう。これは、攻撃が開始されるのをより難しくするか、または攻撃が成功する確率を低くする。これは、財務上の損失を低減するかまたは回避すること、機密情報の不正利用を回避すること、攻撃者には権利のない、または許可されていないコンテンツもしくはサービスへの攻撃者によるアクセスを拒絶することなど、攻撃成功の重大性を低減するのに役立つ。
【課題を解決するための手段】
【０００６】
本発明の第1の態様によれば、クライアントシステム上で実行されているブラウザによって処理されるウェブページまたはウェブアプリをセキュリティ保護するための方法が提供され、この方法はブラウザがホワイトボックス保護コード(white-box protected code)のインスタンスを実行するステップを含み、ホワイトボックス保護コードのインスタンスの実行は、クライアントシステムに、1つまたは複数のセキュリティテストを実行するために制御システムによって使用されるメッセージデータを含むメッセージを生成するステップであって、制御システムはネットワークを介してクライアントシステムに通信可能に接続される、ステップと、メッセージを制御システムに送信し、制御システムがメッセージデータを使用して1つまたは複数のセキュリティテストを実行することを可能にするステップと、少なくとも一部にはメッセージに基づき制御システムから応答を受信するステップと、応答を処理するステップとを実行させる。
【０００７】
本発明の第2の態様によれば、クライアントシステム上で実行されているブラウザによって処理されるウェブページまたはウェブアプリをセキュリティ保護するための方法が提供され、方法は、ネットワークを介してクライアントシステムに通信可能に接続されている制御システムにおいて、クライアントシステムからメッセージを受信するステップであって、メッセージは1つまたは複数のセキュリティテストを実行するために制御システムによって使用されるメッセージデータを含み、ホワイトボックス保護コードのインスタンスによって生成されるメッセージはブラウザによって実行される、ステップと、メッセージデータを使用して1つまたは複数のセキュリティテストを実行するステップと、少なくとも一部にはメッセージに基づき応答を生成するステップと、クライアントシステムによる処理のために応答をクライアントシステムに送信するステップとを含む。
【０００８】
第1および第2の態様のいくつかの実施形態において、ホワイトボックス保護コードのインスタンスは、ウェブページまたはウェブアプリの一部である。
【０００９】
第1および第2の態様のいくつかの実施形態において、メッセージデータの少なくとも一部は、ホワイトボックス保護コードのインスタンスの同一性を示す。
【００１０】
第1および第2の態様のいくつかの実施形態において、1つまたは複数のセキュリティテストは(a)ホワイトボックス保護コードのインスタンスの一部または全部の完全性を検証するためのテスト、(b)ウェブページまたはウェブアプリの一部または全部の完全性を検証するためのテスト、(c)ホワイトボックス保護コードのインスタンスがデバッガを使用して実行されているかどうかを識別するためのテスト、(d)ウェブページもしくはウェブアプリに関係する、またはウェブページもしくはウェブアプリによって提供されるデータがコピーされているか、またはすでにコピーされているかを識別するためのテスト、(e)ウェブページもしくはウェブアプリのデータフィールドの妥当性確認がオンにされているかまたはオフにされているかを識別するためのテスト、(f)広告ブロックがオンにされているかまたはオフにされているかを識別するためのテストのうちの1つまたは複数を含む。ウェブページまたはウェブアプリの一部または全部の完全性を検証するためのテストは、ウェブページまたはウェブアプリのDOMの一部または全部の完全性を検証するステップを含み得る。
【００１１】
第1および第2の態様のいくつかの実施形態において、応答は、少なくとも一部には1つまたは複数のセキュリティテストの結果に基づき生成される。
【００１２】
第1および第2の態様のいくつかの実施形態において、応答は、クライアントシステムによって処理されたときに、クライアントシステムに、(a)ウェブページまたはウェブアプリの機能を提供するか、または提供し続けるステップ、(b)ウェブページまたはウェブアプリの機能の提供を妨げるか、またはその提供を停止するステップ、(c)ウェブページまたはウェブアプリの機能の代替となるか、または補完する機能を提供するステップ、(d)クライアントシステムおよび/またはブラウザの1つまたは複数の構成設定を変更するステップのうちの1つまたは複数を実行させる。
【００１３】
第1および第2の態様のいくつかの実施形態において、応答は、応答データを含み、ホワイトボックス保護コードのインスタンスは、応答データに基づき、1つまたは複数のセキュリティテストを実行するために制御システムによって使用されるその後のメッセージのメッセージデータを生成するように配置構成される。応答データは、(i)ホワイトボックス保護コードのインスタンスの1つまたは複数の部分、および/または(ii)ウェブページもしくはウェブアプリの1つまたは複数の部分を識別するものとしてよく、完全性検証テストは、前記1つまたは複数の部分に基づき制御システムによって実行されるべきである。
【００１４】
第1および第2の態様のいくつかの実施形態において、ホワイトボックス保護コードのインスタンスは、暗号化形式でメッセージを生成するように配置構成され、制御システムは、応答を暗号化形式で生成するように配置構成される。
【００１５】
第1および第2の態様のいくつかの実施形態において、ネットワークは、インターネットを含む。
【００１６】
第1および第2の態様のいくつかの実施形態において、前記ウェブページまたはウェブアプリは、ネットワークを介してクライアントシステムに通信可能に接続されているサービスシステムをインタラクティブに操作するように配置構成され、メッセージは、サービスシステムに送信されるべき要求を含む。第2の態様については、方法は、(a)制御システムがサービスシステムをインタラクティブに操作するステップ、および(b)1つまたは複数のセキュリティテストの結果に基づき、制御システムがサービスシステムをインタラクティブに操作すべきかどうかを決定し、制御システムがサービスシステムをインタラクティブに操作すべきと決定された場合に、制御システムがサービスシステムをインタラクティブに操作するステップのうちの少なくとも1つを含み得る。応答は、制御システムによるサービスシステムのインタラクティブな操作に少なくとも一部基づき生成されてよく、次いで、応答は、要求への、サービスシステムからの返信を含み得る。それに加えて、または代替的に、方法は、制御システムがメッセージに基づきサービスシステムによるその後のアクセスに備えてデータをリポジトリに記憶するステップを含み得る。それに加えて、または代替的に、方法は、制御システムがサービスシステムに1つまたは複数のセキュリティテストの結果の指示を提供するステップを含み得る。
【００１７】
サービスシステムは、金融サービスを提供するものとしてよく、ウェブページまたはウェブアプリは、金融サービスへのアクセスを提供する。金融サービスは、金融口座にアクセスするステップ、および/またはマーチャントと金融に関してインタラクティブにやり取りするステップのうちの1つまたは複数を含み得る。
【００１８】
第1および第2の態様のいくつかの実施形態において、ウェブページまたはウェブアプリは、コンテンツ配布ネットワークを介してコンテンツへのアクセスを提供する。
【００１９】
そのような実施形態において、ホワイトボックス保護コードのインスタンスは、暗号化されたコンテンツの修正バージョンを取得するように配置構成されてよく、暗号化されたコンテンツの修正バージョンは第1の修正が適用された暗号化されたコンテンツを含み、応答は、暗号化されたコンテンツの修正バージョンに適用する第2の修正を示すデータを含んでいてよく、応答を処理するステップは、ホワイトボックス保護コードのインスタンスが第2の修正を暗号化されたコンテンツの修正バージョンに適用して処理済みの修正された暗号化されたコンテンツを形成するステップを含んでいてよく、ウェブページまたはウェブアプリは、処理済みの修正された暗号化されたコンテンツに基づきコンテンツを出力するように配置構成され得る。次いで、第2の修正は、処理済みの修正された暗号化されたコンテンツが、1つまたは複数のテストの結果がクライアントシステムがコンテンツにアクセスすることを許可されていることを指示する場合にのみ暗号化されたコンテンツに等しくなるように配置構成されてよい。それに加えて、または代替的に、(i)ホワイトボックス保護コードのインスタンスは、暗号化されたコンテンツを受信し、第1の修正を受信された暗号化されたコンテンツに適用し、それによって、暗号化されたコンテンツの修正バージョンを取得するように配置構成され得るか、または(ii)ホワイトボックス保護コードのインスタンスは、ネットワークを介して暗号化されたコンテンツの修正バージョンを受信するように配置構成され得る。
【００２０】
第1および第2の態様のいくつかの実施形態において、1つまたは複数のセキュリティテストの少なくとも1つは、ホワイトボックス保護コードのインスタンスに関連付けられているメタデータに少なくとも一部基づき、メタデータは制御システムによってアクセス可能である。
【００２１】
本発明の第3の態様によれば、プロセッサによって実行されたときに、プロセッサに、第2の態様(または第2の態様の上で説明されている実施形態のうちのどれか)の方法を実行させるコンピュータプログラムが提供される。
【００２２】
本発明の第4の態様によれば、第2の態様(または第2の態様の上で説明されている実施形態のうちのどれか)の方法を実行するように配置構成されているシステムが提供される。
【００２３】
本発明の第5の態様によれば、ホワイトボックス保護コードのインスタンスが提供され、クライアントシステムのブラウザによるホワイトボックス保護コードのインスタンスの実行は、クライアントシステムに、第1の態様(または第1の態様の上で説明されている実施形態のうちのどれか)の方法を実行させる。
【００２４】
本発明の第6の態様によれば、ウェブページまたはウェブアプリをクライアントシステムに提供する方法が提供され、方法は上記の第5の態様によるホワイトボックス保護コードのインスタンスを含むウェブページまたはウェブアプリを提供するステップを含み、それによって、ホワイトボックス保護コードのインスタンスの実行によりウェブページまたはウェブアプリをセキュリティ保護する。
【００２５】
第6の態様のいくつかの実施形態において、方法は、上記の第4の態様によるシステムによって、クライアントシステムに提供するウェブページまたはウェブアプリの一部として含めるべき特定のインスタンスを、ホワイトボックス保護コードの複数のインスタンスから決定するステップを含む。
【００２６】
本発明の第7の態様によれば、ウェブページまたはウェブアプリをクライアントシステムに提供する方法が提供され、方法は上記の第5の態様によるホワイトボックス保護コードのインスタンスを取得可能であるアドレスを含むウェブページまたはウェブアプリを提供するステップを含み、それによって、ホワイトボックス保護コードのインスタンスの実行によりウェブページまたはウェブアプリをセキュリティ保護する。
【００２７】
第7の態様のいくつかの実施形態において、方法は、上記の第4の態様によるシステムによって、アドレスを介してクライアントシステムからの要求に応答して、クライアントシステムに提供すべき特定のインスタンスを、ホワイトボックス保護コードの複数のインスタンスから決定するステップを含む。
【００２８】
本発明の第8の態様によれば、上記の第5の態様によるホワイトボックス保護コードの複数のインスタンスを生成するステップと、上記の第5の態様によるシステムによってアクセス可能なデータベース内にホワイトボックス保護コードの複数のインスタンスを記憶するステップを含む。
【００２９】
第8の態様のいくつかの実施形態において、方法は、ホワイトボックス保護コードの複数のインスタンスの各々に関連付けられているそれぞれのメタデータを生成するステップと、そのメタデータをデータベースに記憶するステップとを含み、メタデータは前記1つまたは複数のセキュリティテストを実行するためにシステムによって使用され、メタデータはシステムによってアクセス可能である。
【００３０】
本発明の第9の態様によれば、第6の態様、第7の態様、または第8の態様(またはこれらの実施形態)のいずれか1つによる方法を実行するように配置構成されているシステムが提供される。
【００３１】
本発明の第10の態様によれば、1つまたは複数のプロセッサによって実行されたときに、1つまたは複数のプロセッサに、第6の態様、第7の態様、または第8の態様(またはこれらの実施形態)のいずれか1つによる方法を実行させるコンピュータプログラムが提供される。
【００３２】
本発明の第11の態様によれば、上記の第3の態様もしくは上記の第10の態様の請求項26もしくは36によるコンピュータプログラムを記憶するか、または上記の第5の態様によるホワイトボックス保護コードのインスタンスを記憶するコンピュータ可読媒体が提供される。
【００３３】
本発明の第12の態様によれば、システムのブラウザによるホワイトボックス保護コードのインスタンスを実行するように配置構成されているシステムが提供され、ブラウザによるホワイトボックス保護コードのインスタンスの実行は、システムに、第1の態様(または第1の態様の上で説明されている実施形態のうちのどれか)の方法を実行させる。
【００３４】
本発明の実施形態は、添付図面を参照しつつ、例のみを用いて、以下で説明される。
【図面の簡単な説明】
【００３５】
【図１】コンピュータシステムの一例の概略を示す図である。
【図２ａ】本発明のいくつかの実施形態による例示的なシステムの概略を示す図である。
【図２ｂ】本発明のいくつかの実施形態による例示的なシステムの概略を示す図である。
【図２ｃ】本発明のいくつかの実施形態による例示的なシステムの概略を示す図である。
【図３】本発明のいくつかの実施形態によるクライアントシステムと制御システムとのインタラクティブなやり取りの例示的な方法を示すフローチャートである。
【図４】本発明のいくつかの実施形態による保護システムを動作させる例示的な方法を示すフローチャートである。
【図５ａ】本発明のいくつかの実施形態によるシステムを動作させるそれぞれの例示的な方法を示すフローチャートである。
【図５ｂ】本発明のいくつかの実施形態によるシステムを動作させるそれぞれの例示的な方法を示すフローチャートである。
【図６ａ】本発明のいくつかの実施形態による図3の方法の一部としてコントローラアプリケーションによって実行され得る例示的な方法を示すフローチャートである。
【図６ｂ】本発明のいくつかの実施形態による図3の方法の一部でいくつかの実施形態において実行され得る例示的な処理を示すフローチャートである。
【図７ａ】完全性/修正検査および強制を実装するために保護されたコードがコントローラアプリケーションと連携し得る(図3の方法で規定している方式で)、本発明のいくつかの実施形態による、方法を示すフローチャートである。
【図７ｂ】本発明のいくつかの実施形態によるこの完全性/修正検査および強制を達成するために保護されたコードの一部として(セキュリティ保護された方式で)実装され得るモジュールのうちのいくつかの概略を示す図である。
【図７ｃ】本発明のいくつかの実施形態による保護されたコンテンツプレーヤの実装の概略を示す図である。
【図７ｄ】本発明のいくつかの実施形態による保護されたコンテンツプレーヤの実装の概略を示す図である。
【図８】完全性/修正検査および強制を実装するために保護されたコードがコントローラアプリケーション232と連携し得る(図3の方法で規定している方式で)、本発明のいくつかの実施形態による、別の方法を示すフローチャートである。
【図９】本発明のいくつかの実施形態によりシステムを最初に構成するか、またはセットアップするための方法を示すフローチャートである。
【図１０ａ】本発明のいくつかの実施形態による保護されたコードについて生成されるメタデータの例の概略を示す図である。
【図１０ｂ】本発明のいくつかの実施形態による保護されたコードについて生成されるメタデータの例の概略を示す図である。
【発明を実施するための形態】
【００３６】
次の説明および図において、本発明のいくつかの実施形態が説明されている。しかしながら、本発明は説明されている実施形態に限定されないこと、いくつかの実施形態は以下で説明されている特徴のすべてを含むわけではないことが理解されるであろう。しかしながら、添付の請求項に規定されているような本発明のより広い趣旨および範囲から逸脱することなく様々な変更および変形が行われ得ることは明白であろう。
【００３７】
1-例示的なコンピュータシステム
図1は、コンピュータシステム100の一例の概略を示している。システム100は、コンピュータ102を備える。コンピュータ102は、記憶媒体104、メモリ106、プロセッサ108、インターフェース110、ユーザ出力インターフェース112、ユーザ入力インターフェース114、およびネットワークインターフェース116を備え、これらはすべて1つまたは複数の通信バス118上で一緒にリンクされる。
【００３８】
記憶媒体104は、ハードディスクドライブ、磁気ディスク、光ディスク、ROMなどのうちの1つまたは複数などの、任意の形態の不揮発性データ記憶デバイスであってよい。記憶媒体104は、プロセッサ108を動作させ、コンピュータ102を機能させるためのオペレーティングシステムを記憶し得る。記憶媒体104は、また、1つまたは複数のコンピュータプログラム(またはソフトウェアもしくは命令もしくはコード)も記憶し得る。
【００３９】
メモリ106は、データおよび/またはコンピュータプログラム(またはソフトウェアもしくは命令もしくはコード)を記憶するのに適しているランダムアクセスメモリ(記憶装置または揮発性記憶媒体)であってよい。
【００４０】
プロセッサ108は、1つまたは複数のコンピュータプログラム(記憶媒体104および/またはメモリ106に記憶されているものなど)を実行するのに適しているデータ処理ユニットであってよく、そのうちのいくつかは、本発明の実施形態によるコンピュータプログラム、またはプロセッサ108によって実行されたときに、プロセッサ108に、本発明のいくつかの実施形態による方法を実行させ、システム100を本発明のいくつかの実施形態によるシステムとなるように構成するコンピュータプログラムであってよい。プロセッサ108は、単一のデータ処理ユニット、または並列に、別々に、または互いに連動して動作する複数のデータ処理ユニットを備え得る。プロセッサ108は、本発明の実施形態に対するデータ処理オペレーションを実行する際に、記憶媒体104および/またはメモリ106との間でデータを記憶し、および/または読み出し得る。
【００４１】
インターフェース110は、コンピュータ102の外部の、またはコンピュータ102から取り外し可能であるデバイス122にインターフェースを提供するためのユニットであってよい。デバイス122は、データ記憶デバイス、たとえば、光ディスク、磁気ディスク、固体記憶装置デバイスなどのうちの1つまたは複数であってよい。デバイス122は、処理能力を有するものとしてよく、たとえば、デバイスはスマートカードであってよい。したがって、インターフェース110は、プロセッサ108から受信する1つまたは複数のコマンドに従ってデバイス122からデータにアクセスするか、またはデバイス122にデータを供給するか、またはデバイス122とインターフェースし得る。
【００４２】
ユーザ入力インターフェース114は、システム100のユーザ、または操作者から入力を受信するように配置構成される。ユーザは、ユーザ入力インターフェース114に接続されるか、または通信する、マウス(または他のポインティングデバイス)126および/またはキーボード124などの、システム100の1つまたは複数の入力デバイスを介してこの入力を提供するものとしてよい。しかしながら、ユーザが、1つまたは複数の追加のもしくは代替的な入力デバイス(タッチスクリーンなど)を介して入力をコンピュータ102に送るものとしてよいことは理解されるであろう。コンピュータ102は、プロセッサ108がその後アクセスし、処理できるようにユーザ入力インターフェース114を介して入力デバイスから受信された入力をメモリ106内に記憶し得るか、またはそれを直接、プロセッサ108に受け渡し、プロセッサ108がユーザ入力にしかるべく応答できるようにし得る。
【００４３】
ユーザ出力インターフェース112は、システム100のユーザ、または操作者にグラフィック/画像および/またはオーディオ出力を供給するように配置構成される。そのようなものとして、プロセッサ108は、所望のグラフィック出力を表す画像/ビデオ信号を形成し、この信号をユーザ出力インターフェース112に接続されているシステム100のモニタ(または画面もしくはディスプレイユニット)120に送ることをユーザ出力インターフェース112に指示するように配置構成され得る。したがって、または代替的に、プロセッサ108は、所望のオーディオ出力を表すオーディオ信号を形成し、この信号をユーザ出力インターフェース112に接続されているシステム100の1つまたは複数のスピーカ121に送ることをユーザ出力インターフェース112に指示するように配置構成され得る。
【００４４】
最後に、ネットワークインターフェース116は、1つまたは複数のデータ通信ネットワークからデータをダウンロードし、および/または1つまたは複数のデータ通信ネットワークにデータをアップロードする機能をコンピュータ102に提供する。
【００４５】
図1に示され、上で説明されているシステム100のアーキテクチャは、単なる例にすぎないこと、および異なるアーキテクチャを有する(たとえば、図1に示されているものと比べて少ないコンポーネントを有するか、または図1に示されているものと比べて追加されたおよび/または代替的なコンポーネントを有する)他のコンピュータシステム100が本発明の実施形態において使用され得ることは理解されるであろう。たとえば、コンピュータシステム100は、パーソナルコンピュータ、サーバコンピュータ、携帯電話、タブレット、ラップトップ、テレビ受像機、セットトップボックス、ゲーム機、他のモバイルデバイスもしくは家庭用電子機器などのうちの1つまたは複数を備えることも可能である。
【００４６】
2-システムのアーキテクチャおよび使用
図2aは、本発明のいくつかの実施形態による例示的なシステム200の概略を示している。システム200は、クライアントシステム210と、保護システム220と、制御(またはマネージャ)システム230と、プロバイダシステム280と、ネットワーク270とを備える。システム200は、また、オプションのサービスシステム250とオプションのデータリポジトリ260とを備え得る。
【００４７】
要するに、クライアントシステム210は、ウェブページ214(またはウェブアプリ214もしくはアプリケーション214)を実行するか、または処理するように配置構成される。これがセキュリティ保護された信頼できる仕方で実行されることを確実にするために、保護システム220は、ウェブページ214の一部を形成し(またはウェブページ214からアクセスされ)クライアントシステム210によって実行されるように、保護されたコード216を生成するステップに関わる。制御システム230は、クライアントシステム210(またはクライアントシステム210で実行している保護されたコード216)をインタラクティブに操作し、その結果、保護されたコード216の認証、保護されたコード216の完全性検証などのオペレーションを実行し、これらのオペレーションの結果に基づき、制御システム230は、対応する機能(クライアントシステム210がウェブページ214を処理し続けることを可能にするか、またはクライアントシステム210がウェブページ214のコンテンツもしくは機能にアクセスすることを拒否する、など)を実行する。クライアントシステム210は、最初に、ウェブページ214をプロバイダシステム280に要求する(およびその少なくとも一部をプロバイダシステム280から取得する)、たとえば、プロバイダシステム280は、ウェブサイトのホストであり得るか、またはアプリストアであってよい。サービスシステム250は、ウェブページ214が処理の一部としてインタラクティブにやり取りしたい相手であるシステムであってよい。サービスシステム250はプロバイダシステム280と異なるシステムであってよいが、後で説明されるように、サービスシステム250はプロバイダシステム280と同じであるか、またはプロバイダシステム280のサブシステムであり得る。
【００４８】
明らかなように、システム200は、ウェブページ214が使用されているクライアントシステム210および/または環境を信頼しなくても(すなわち、信頼できないブラウザが使用され得る)ウェブページ214(これらが処理し/取り扱う機能およびデータを含む)の保護が実装され実施されることを可能にする。
【００４９】
クライアントシステム210、保護システム220、プロバイダシステム280、および制御システム230は、ネットワーク270上で、またはネットワーク270を介して、互いに通信するように配置構成され得る。ネットワーク270は、クライアントシステム210、保護システム220、プロバイダシステム280、および制御システム230のうちのいずれか1つからのデータをクライアントシステム210、保護システム220、プロバイダシステム280、および制御システム230のうちの別の1つに伝送するか、または伝達するのに適している種類のネットワークであれば何でもよい。たとえば、ネットワーク270は、ローカルエリアネットワーク、ワイドエリアネットワーク、メトロポリタンエリアネットワーク、インターネット、ワイヤレス通信ネットワーク、ケーブルネットワーク、デジタルブロードキャストネットワーク、衛星通信ネットワーク、電話網などのうちの1つまたは複数を含むことが可能である。クライアントシステム210、保護システム220、プロバイダシステム280、および制御システム230は、データを互いに伝達するために好適な通信メカニズム/プロトコルを介してネットワーク270上で通信し得る。しかしながら、他の通信シナリオが可能であることは理解されるであろう。
【００５０】
図2aは、単一のクライアントシステム210、単一の保護システム220、単一のプロバイダシステム280、および単一の制御システム230示しているが、複数のクライアントシステム210および/または複数の保護システム220および/または複数のプロバイダシステム280および/または複数の制御システム230があってよいこと、および図2aは、例示を簡単にするために簡素化されていることは理解されるであろう。
【００５１】
クライアントシステム210、保護システム220、プロバイダシステム280、および制御システム230は、各々、図1を参照しつつ上で説明されているような1つまたは複数のコンピュータシステム100であるか、または各々これを含み得る。たとえば、クライアントシステム210は、パーソナルコンピュータ、サーバコンピュータ、ラップトップ、携帯電話、タブレットコンピュータ、テレビ受像機などであってよい。同様に、保護システム220、プロバイダシステム280、および制御システム230は、たとえば、各々、1つまたは複数のサーバコンピュータを含み得る。
【００５２】
保護システム220および制御システム230は、別々のエンティティによって操作され得るか、または同じエンティティによって操作され得る。保護システム220および制御システム230は、互いから物理的に分離し得るか、または1つまたは複数のコンピュータシステム100を共有し得る(たとえば、これらは、少なくとも一部には1つまたは複数の共通のサーバを使用して実装され得る)。したがって、保護システム220および制御システム230は、保護および制御システム240(図2aにおいて点線で示されている)として一緒に表示され得る。
【００５３】
述べられているように、本発明のいくつかの実施形態は、オプションのサービスシステム250を使用し得る。サービスシステム250は、ネットワーク270上で制御システム230と通信するように配置構成され得る。サービスシステム250および制御システム230は、データを互いに伝達するために好適な通信メカニズム/プロトコルを介してネットワーク270上で通信し得る。しかしながら、他の通信シナリオが可能であることは理解されるであろう。図2aは、単一のサービスシステム250を例示しているが、複数のサービスシステム250があり得ること、および図2aが例示を簡単にするために簡素化されていることは理解されるであろう。サービスシステム250は、図1を参照しつつ上で説明されているような1つまたは複数のコンピュータシステム100であり得るか、または含み得る。たとえば、サービスシステム250は、1つまたは複数のサーバコンピュータを備え得る。
【００５４】
サービスシステム250を使用する本発明の実施形態は、また、様々なデータ262を記憶するように配置構成されているオプションのデータリポジトリ(またはデータボールトまたはデータベース)260も使用し得る。データリポジトリ260は、制御システム230の一部をなすものとしてよい。データリポジトリ260は、サービスシステム250の一部をなすものとしてよい。データリポジトリ260は、制御システム230から分離し、またサービスシステム250からも分離しているものとしてよい。制御システム230および/またはサービスシステム250は、データリポジトリ260内にデータ262を記憶し(または保存しまたはアップロードし)、および/またはネットワーク270を介してデータリポジトリ260からデータ262を読み出す(またはアクセスするまたは取得するまたはダウンロードする)ように配置構成され得る。しかしながら、制御システム230および/またはサービスシステム250は、データリポジトリ260内にデータ262を記憶し(または保存しまたはアップロードし)、および/または異なるネットワーク(安全なプライベートネットワークなど)を介してデータリポジトリ260からデータ262を読み出す(またはアクセスするまたは取得するまたはダウンロードする)ように配置構成され得る。
【００５５】
クライアントシステム210は、ウェブブラウザ212(Internet Explorer、Mozilla Firefox、Safari、Google Chromeなど)を実行するように配置構成される。ウェブブラウザはよく知られており、したがって、本明細書で詳しく説明されない。ブラウザ212は、クライアントシステム210によって実行されるソフトウェアアプリケーションである。
【００５６】
ブラウザ212は、ウェブページ214を(たとえば、ウェブサイトのサーバ/ホストから、たとえば、これはプロバイダシステム280とすることも可能である)取得し、または受信するように配置構成される。ウェブページ214は、典型的には、HTMLコード(HTML5コードなど)または他の何らかのマークアップ言語(XMLなど)によるコードを含む(または少なくとも一部にはこのようなコードを使用して符号化される/書き込まれる)。ブラウザ212は、ウェブページ214を処理するように配置構成され、たとえば、ウェブページ214の表示(または視覚的表現)を(たとえば、クライアントシステム210の画面120上に)出力するか、またはレンダリングし得る。このために、ウェブページ214は、ウェブページ214のコンテンツ(たとえば、HTMLを使用して符号化されるような)がどのように提示されるか、または表示されるべきかを記述するCSS(カスケーディングスタイルシート)コードを含み得る。
【００５７】
ウェブページ214は、実行可能コード215(または1つもしくは複数のスクリプト)を、含み得るか、または実行するか、もしくは使用するように配置構成され得る。コード215は、たとえば、JavaScript(登録商標)で書かれるものとしてよい(ただし、WebAssemblyなどの他のコーディング/スクリプティング言語が使用され得ることは理解されるであろう)。したがって、ブラウザ212は、1つまたは複数のコーディング/スクリプティング言語をサポートするものとしてよく(たとえば、ブラウザ212はJavaScript(登録商標)をサポートするものとしてよく)、これはブラウザ212が、コード215を実行するか、もしくは走らせるように、配置構成されるか、または構成されることを意味する。これは、コンピュータプログラム(コード215によって表されているような)がサーバサイドではなくクライアントサイドで実行されることを可能にする(すなわち、そのコードを実行しなければならない、プロバイダシステム280などのウェブサイトホスト/サーバの代わりに)。
【００５８】
クライアントシステム210の操作者は、操作者がコード215に対して(またはコード215に基づきまたは使用して)攻撃を開始することを望んでいる可能性があるという点で攻撃者であり得る。たとえば、以下のとおりである。コード215は、攻撃者が取得することを望んでいる機密情報を含んでいる可能性がある、攻撃者は、コード215を使用して攻撃者が資格もしくは許可を与えられていない機能を、セキュリティチェックの裏をかくまたは阻止することなどによって達成することを望んでいる可能性がある、攻撃者は、コード215で元々意図されていない新しい/代替的機能を達成することを望んでいる可能性がある、攻撃者は、コード215を使用して1つまたは複数のサーバ(たとえば、ウェブページ214に関連付けられているウェブサイト、プロバイダシステム280、またはサービスシステム250をホストしているサーバ)から機能もしくはデータへの不正アクセスを得ようとすることを望んでいる可能性がある、などである。
【００５９】
クライアントシステム210およびブラウザ212は、一般的に、いわゆる「ホワイトボックス」環境をコード215の実行用に用意している。ここで、「ホワイトボックス」環境は、ソフトウェアのアイテムの攻撃者がソフトウェアのアイテムの操作されるデータ(中間値を含む)、メモリ内容、および実行/プロセスフローへの完全なアクセス、およびそれらの可視性を有すると仮定されるソフトウェアのアイテムまたはコンピュータプログラム(この場合、コード215)に対する実行環境である。さらに、ホワイトボックス環境において、攻撃者は、ソフトウェアのアイテムの操作されるデータ、メモリ内容、および実行/プロセスフローを、たとえば、デバッガを使用することによって修正することができると仮定され、このようにして、攻撃者は、最初に意図されていた機能の裏をかき、および/または秘密情報を識別することを目的として、および/または他の目的のために、ソフトウェアのアイテムの実験をし、ソフトウェアのアイテムのオペレーションを操作することを試みることができる。実際、基盤となるアルゴリズムがソフトウェアのアイテムによって実行されることに攻撃者が気付いていると仮定することすらあってよい。しかしながら、ソフトウェアのアイテムは、機密情報(たとえば、1つまたは複数の暗号鍵もしくは識別子)を使用するか、または記憶しておく必要があるものとしてよく、この情報は、攻撃者から隠されるか、または攻撃者からは使用できないままである必要がある。クライアントシステム210およびブラウザ212の両方のセットアップ、構成、および能力は、ウェブページ214のプロバイダ(またはサービスシステム250などのウェブページ214に関連付けられている別のエンティティ)に必ずしも知られておらず(または完全には知られておらず)、および/またはそのプロバイダによって制御可能(または完全には制御可能)ではなく、したがって、ウェブページ214および215は、ホワイトボックス環境内で実行中であると仮定され得る。これは、コード215が、JavaScript(登録商標)などのスクリプトまたはインタプリタ型言語で書かれたときに(すなわち、コンパイルされた実行可能バイナリファイルとは対照的に)、スクリプトまたはインタプリタ型言語の人間が読めるという性質により、特に当てはまり、クライアントシステム210のユーザは、コード215の実行を表示し、監視し、修正することができ(たとえば、ブラウザ212内で、解釈実行中、またはジャストインタイムコンパイルの後に)、これは攻撃者がコード215をコピーし、修正してコード215に対して/使用して攻撃を開始することを試みることを容易にする。
【００６０】
その点を念頭に置き、ウェブページ214のコード215の一部または全部は保護された(またはセキュリティ保護された)コード216である。保護されたコード216の性質、およびオペレーションは、後でより詳しく説明されるものとする。
【００６１】
上記の内容は、ウェブページ214を参照しつつ説明されているが、いくつかの実施形態において、ブラウザ212は、ウェブページ214の代わりにウェブアプリ214を実行するように配置構成されることが理解されるであろう。ウェブアプリの概念は、よく知られており、したがって、本明細書では詳しく説明されないものとする(しかし、たとえば、開示全体が参照により本明細書に含まれるhttps://en.wikipedia.org/wiki/Web_applicationを参照されたい)。したがって、次の説明では、「ウェブページ」214を参照しているが、本明細書で述べられている説明および実施形態は、ウェブページ214の代わりにウェブアプリ214を使用することに等しく適用され、ウェブアプリ214はコード215を含む(その一部または全部が保護されたコード216である)ことが理解されるであろう。
【００６２】
さらに、いくつかの実施形態において、クライアントシステム210は、ブラウザ212を実行している必要はなく、ウェブページ214またはウェブアプリ214を使用する実施形態の代わりに、クライアントシステム210は、ブラウザの環境の外でアプリケーションを実行しているものとしてよい。したがって、本明細書で述べられている説明および実施形態は、ウェブページ214の代わりにアプリケーション214を使用することに等しく適用され、アプリケーション214はコード215を含む(その一部または全部が保護されたコード216である)ことが理解されるであろう。図2bは、本発明のいくつかの実施形態によるそのような例示的なシステム200の概略を示している。図2bのシステム200は、クライアントシステム210がウェブページ214またはウェブアプリ214を処理するためにもはやブラウザ212を使用していないことを除き、図2aのシステム200と同じである、すなわち、その代わりに、クライアントシステム210は、アプリケーションのコード215(保護されたコード216を含む)を実行するように配置構成される。
【００６３】
図2cは、本発明のいくつかの実施形態によるさらなる例示的なシステム200の概略を示している。図2cのシステム200は、それに加えてクライアントシステム210がウェブページ214またはウェブアプリ214のコードに加えてさらなる保護されたコードを含むさらなるコードを実行するように配置構成されていることを除き、図2aのシステム200と同じである。したがって、図2cにおいて、保護されたコード216は、保護されたコード216aおよび保護されたコード216bを含むものとして示され、保護されたコード216aは、ウェブページ214またはウェブアプリ214のコード215aの一部であり、保護されたコード216bは、ブラウザ環境内で実行されないコード215bの一部である。ブラウザ212は、ブラウザ機能のすべてを提供する代わりにウェブビューであってよい。コード215bおよび/または保護されたコード216bの実行は、クライアントシステム210に、ウェブページ214またはウェブアプリ214を取得するか、またはロードすることを行わせ得る。
【００６４】
したがって、図2aのシステム200において、コード215および保護されたコード216は、ウェブページ214が最初に取得されるか、またはロードされたときに取得されるものとしてよく、および/または動的にロードされるか、または取得されるものとしてよい(たとえば、クライアントシステム210のユーザがブラウザ212によって表示されたときにウェブページ214によって提供されるリンクをクリックしたことに応答して)。対照的に、図2bのシステム200では、コード215および保護されたコード216は、クライアントシステム210のネイティブ環境に適したバイトコードもしくはバイナリ形式であり、実行する前にクライアントシステム210において取得されるか、またはロードされ(図2aのように場合によっては動的に取得されるかれ、またはロードされるのとは対照的に)、たとえば、ユーザは、実行されるべきアプリケーションを選択し、それによって、プリインストールされているコード215の実行を行わせる。最後に、図2cのシステム200では、コード215aおよび保護されたコード216aは、ウェブページ214が最初に取得されるか、またはロードされたときに取得されるものとしてよく、および/または動的にロードされるか、または取得されてよいが(たとえば、クライアントシステム210のユーザがブラウザ212によって表示されたときにウェブページ214によって提供されるリンクをクリックしたことに応答して)、コード215bおよび保護されたコード216bは、クライアントシステム210のネイティブ環境に適したバイトコードもしくはバイナリ形式であり、実行の前にクライアントシステム210において取得されるか、またはロードされ(場合によっては動的に取得されるか、またはロードされるのとは対照的に)、たとえば、ユーザは実行されるべきアプリケーションを選択し、それによってプリインストールされているコード215bの実行を行わせる。したがって、図2cのシステム200は、図2aおよび図2bのシステム200のハイブリッドと見なしてよい。他の実行環境も可能であること、および本発明の実施形態はこれらおよび他のそのような実行環境に適用可能であることが理解されるであろう。したがって、本発明の実施形態は、図2aのシステム200を参照しつつ説明されるものとするが、本発明の実施形態は、図2bおよび図2cのシステム200、ならびに他の実行環境に等しく適用可能であることが理解されるであろう。
【００６５】
制御システム230は、コントローラアプリケーション232を備えるか、または実行するように配置構成される。コントローラアプリケーション232および保護されたコード216は、ネットワーク270を介して互いに通信するように配置構成される。これは、典型的には、クライアントサーバ方式で動作する。保護されたコード216が要求(またはメッセージ)をコントローラアプリケーション232に送信し、コントローラアプリケーション232は、対応する応答(または返信メッセージ)を保護されたコードに送り返す。後でより詳しく説明されるように、要求は、コントローラアプリケーション232が検証および/または認証および/または他の機能を実行するために使用することができる様々な情報を含み得る。同様に、後でより詳しく説明されるように、返信は、保護されたコード216(またはコード215またはウェブページ214)が使用し得る様々な情報を含むものとしてよく、その一部は、保護されたコード216(またはコード215またはウェブページ214)の機能、オペレーション、またはコンテンツを有効化するか、無効化するか、修正するか、増強するか、または他の何らかの形で変更し得る。返信は、制御システム230に送信されるべきその後の要求を形成するときに保護されたコード216が使用し得る情報を含み得る(この一例については後で示す)。たとえば、以下のとおりである。
・  保護されたコード216に送り返される応答は、コード215および/またはウェブページ214が意図された/通常の機能を実行することを可能にする、すなわち、クライアントシステム210のユーザに、ウェブページ214の所望のオペレーションをもたらすものとしてよく、したがって、コントローラアプリケーション232は、それが実行した検証および/または認証および/または他の機能が、クライアントシステム210がコード215および/またはウェブページ214によって提供される「通常の」機能へのアクセスを許されるべきであるか、または実行することを(または実行を続けることを)許されるべきであることを識別した場合にそのような応答を送り得る。
・  保護されたコード216に送り返される応答は、コード215および/またはウェブページ214が意図された/通常の機能を実行することを禁止するか、または防ぐ、すなわち、クライアントシステム210のユーザに、ウェブページ214の所望の「通常の」オペレーションをもたらさないものとしてよく、したがって、コントローラアプリケーション232は、それが実行した検証および/または認証および/または他の機能が、クライアントシステ210がコード215および/またはウェブページ214によって提供される「通常の」機能へのアクセスを許されるべきでないか、または実行することを(または実行を続けることを)許されるべきでないことを識別した場合にそのような応答を送り得る。
・  保護されたコード216に送り返される応答は、コード215および/またはウェブページ214が意図された/通常の機能を実行することを可能にする、すなわち、クライアントシステム210のユーザに、ウェブページ214の所望のオペレーションをもたらすものとしてよいが、コード215にいくつかの追加のオペレーションを実行させることもあり得る、したがって、コントローラアプリケーション232は、それが実行した検証および/または認証および/または他の機能が、クライアントシステム210がコード215および/またはウェブページ214によって提供される「通常の」機能へのアクセスを許されるべきであるか、または実行することを(または実行を続けることを)許されるべきであること、ただし、いくつかの追加のオペレーションも実行される必要があること(たとえば、セキュリティの弱点または不正な/不適切な構成/設定が識別されており、したがってそれらの弱点または構成/設定に対するオペレーションが実行される必要がある場合)を識別した場合にそのような応答を送り得る。
・  保護されたコード216に送り返される応答は、コード215および/またはウェブページ214が意図された/通常の機能の修正バージョンを実行することを可能にする、すなわち、クライアントシステム210のユーザに、ウェブページ214の所望のオペレーションを、ただし修正された仕方で、もたらすものとしてよく、したがって、コントローラアプリケーション232は、それが実行した検証および/または認証および/または他の機能が、クライアントシステム210がコード215および/またはウェブページ214によって提供される「通常の」機能の変更形態へのアクセスを許されるか、または実行することを(または実行を続けることを)許されるべきである場合にそのような応答を送り得る。
・  保護されたコード216に送り返される応答は、保護されたコード216を異なる方式で動作させ得る(たとえば、次回要求を制御システム230に送信したときに異なる機能を実行するか、または異なるデータを供給する)。これは、応答が使用する保護されたコード216に対する構成データを含むことを伴う可能性があり、および/または応答が保護されたコード216の一部または全部を置き換えるか、または補完する更新されたコードを含むことを伴う可能性がある。
・  保護されたコードに116に送り返される応答は、保護されたコード216が次回送信されるべきであるときに好適な要求をコントローラアプリケーション232に送信することを可能にするか、または送信するように構成する情報を含み得る。
・  後で述べる例から明らかなように、他の応答シナリオも可能であることは理解されるであろう。
【００６６】
このようにして、コントローラアプリケーション232(およびしたがってコントローラシステム230)は、(i)コントローラアプリケーション232が1つまたは複数のセキュリティもしくはアクセス基準もしくは許可に対して、および/または1つまたは複数の他の条件に対して保護コード216から受信した要求内のデータを検証し、クライアントシステム210がコード215および/またはウェブページ214によって提供される機能へのアクセスを有するかまたはその機能の実行を許されるべきかどうかを決定し得るという点で、ベリファイヤ(verifier)、(ii)コントローラアプリケーション232によって提供される応答が、クライアントシステム210がコード215および/またはウェブページ214の所望の機能へのアクセスを有するかまたはその機能の実行を許されることを妨げ得るという点で、これらの基準、許可、および条件のエンフォーサ(enforcer)、(iii)コントローラアプリケーション232によって提供される応答が、クライアントシステム210がコード215および/またはウェブページ214の所望の機能(または所望の機能の修正バージョン)、または実際に、他の何らかの機能へのアクセスを有するかまたはその機能を実行することを可能にし得るという点で、イネーブラ(enabler)のうちの1つまたは複数として活動するものとして見なされ得る。
【００６７】
保護されたコード216およびコントローラアプリケーション232がどのようにインタラクティブにやり取りするかについての選択は(たとえば、保護されたコード216がコントローラアプリケーション232に要求、それらの要求に含まれるべき情報、それらの要求に基づきコントローラアプリケーション232によって実行されるべきテスト/処理、コントローラアプリケーション232によるテスト/処理の様々な可能な結果の所望の重大性、およびしたがって応答がどのように形成されるべきかなどを送信するべきときに)、図9に関して後で説明されるように、セキュリティ/構成ポリシーとして見なされるか、またはセキュリティ/構成ポリシーにおいて指定され得る。
【００６８】
ネットワーク270上の通信は、ネットワーク通信保護技術、たとえば、SSL(セキュアソケットレイヤ)および/またはTLS(トランスポートレイヤセキュリティ)を使用して保護されることが知られている。しかしながら、攻撃者によって悪用され得るSSLおよび/またはTLSにおける脆弱性を回避するのを助けるために、コントローラアプリケーション232および保護されたコード216は、互いに送信するデータの一部または全部を暗号化するかもしくは変換するように配置構成されてよく、保護されたコード216は、互いから受信する暗号化された(または変換された)データを暗号解読する(または逆変換する)ように配置構成され得る。これは、SSLおよび/またはTLSによって提供される保護および/または他のネットワーク通信保護技術を使用することに加わるもの、またはその代替となるものであってよい。暗号化(または変換)および暗号解読(または逆変換)は、秘密データ(たとえば、共有秘密暗号鍵、秘密暗号鍵、一意的な識別子など)を使用するものとしてよく、したがって、保護されたコード216は、この秘密データがウェブページ214(またはコード215または保護されたコード216)内にセキュリティ保護された方式で記憶されるという点で「保護され」得る。これは、後でより詳しく説明されるものとする。
【００６９】
上述の暗号化/暗号解読(または変換/逆変換)と同様にして、コントローラアプリケーション232および保護されたコード216は、通信を保護し/セキュリティ保護するために互いに送信し、および/または互いから受信するデータの一部または全部で追加のまたは代替的な暗号処理(シグネチャアプリケーションおよび検証、メッセージ認証コードなど)を実行するように配置構成され得る。ここでもまた、これは、秘密データ(たとえば、共有秘密暗号鍵、秘密暗号鍵、一意的な識別子など)を使用するものとしてよく、保護されたコード216は、この秘密データがウェブページ214(またはコード215または保護されたコード216)内にセキュリティ保護された方式で記憶されるという点で「保護され」得る。
【００７０】
コントローラアプリケーション232によって実行される処理は、保護されたコード216に対応するメタデータ228に少なくとも一部基づき得る。メタデータ228の性質および関わる処理は、後で説明されるものとする。
【００７１】
図3は、本発明のいくつかの実施形態によるクライアントシステム210と制御システム230とのインタラクティブなやり取りの例示的な方法300を示すフローチャートである。
【００７２】
ステップ302において、保護されたコード216は、要求を生成する。
【００７３】
ステップ304において、保護されたコード216は、要求を制御システム230に送信する。上で説明されているように、これは、保護されたコード216が他の暗号オペレーションを暗号化し、および/または要求のデータの一部または全部に適用して、要求をセキュリティ保護するステップを伴い得る。次いで(セキュリティ保護された)要求は、ネットワーク270を介して制御システム230に伝達されてよい。
【００７４】
ステップ306において、制御システム230(および特に、制御システム230のコントローラアプリケーション232)は、保護されたコード216によって送信された要求を受信する。上で説明されているように、これは、コントローラアプリケーション232が他の暗号オペレーションを暗号解読し、および/または受信された要求のデータの一部または全部に適用するステップを伴い得る。
【００７５】
ステップ308において、コントローラアプリケーション232は、受信された要求を処理し、応答を生成する。
【００７６】
ステップ310において、コントローラアプリケーション232は、応答をクライアントシステム210に送信する。上で説明されているように、これは、コントローラアプリケーション232が他の暗号オペレーションを暗号化し、および/または応答のデータの一部または全部に適用して、応答をセキュリティ保護するステップを伴い得る。次いで(セキュリティ保護された)応答は、ネットワーク270を介してクライアントシステム210に伝達されてよい。
【００７７】
ステップ312において、クライアントシステム210(および特に、実行されている保護されたコード216)は、コントローラアプリケーション232によって送信された応答を受信する。上で説明されているように、これは、保護されたコード216が他の暗号オペレーションを暗号解読し、および/または受信された応答のデータの一部または全部に適用するステップを伴い得る。
【００７８】
ステップ314において、保護されたコード216は、受信された応答を処理する。
【００７９】
保護されたコード216は、異なる時点または異なる段階において、コントローラアプリケーション232をインタラクティブに操作するように配置構成され得る。たとえば、次のようなタイミングである。
・  1回(たとえば、ブラウザ212がウェブページ214の処理を開始したとき)。
・  たとえば、コントローラアプリケーション232とのインタラクティブなやり取りを繰り返す何らかの(潜在的に規則正しい)時間スケジュールに基づく、複数の異なる時間。これは、コントローラアプリケーション232がウェブページ214のステータスを定期的にチェックすることを確実にするのを助ける。
・  ユーザによるウェブページ214とのインタラクティブな操作の複数の異なる段階、たとえば、一部または全部の機能が実行されるか、または要求され(クライアントシステム210のユーザがウェブページ214のボタンをクリックしたとき、またはウェブページ214のコントロールを他の何らかの形でインタラクティブに操作するときなど)および/またはウェブページ214がさらなる情報(たとえば、プロバイダシステム280またはサービスシステム250からの情報)を必要とするときに必ず。
【００８０】
したがって、方法300は、複数回繰り返され得ることが理解されるであろう。したがって、保護されたコード216は、要求Ri(i=1,2,...)のシーケンスを生成するものとしてよく、コントローラアプリケーション232は、応答Si(i=1,2,...)の対応するシーケンス(または列)を生成するものとしてよく、i=1,2,...について、i番目の応答Siは、ステップ302で保護されたコード216によって生成されるi番目の要求Riに応答し、それに少なくとも一部基づき、ステップ308でコントローラアプリケーション232によって生成される。
【００８１】
いくつかの実施形態(以下で述べられている例)において、要求Ri+1(i=1,2,...)のうちの1つまたは複数が、1つまたは複数の先行する応答Sk(あるk≦iに対する)に含まれている何らかのデータもしくは情報を使用して、または少なくとも一部基づき、生成され、したがって、好ましくは、そのような実施形態において、要求Ri+1(i=1,2,...)は、直前の応答Siに含まれる何らかのデータもしくは情報を使用して、または少なくとも一部基づき、生成される。これは、コントローラアプリケーション232がクライアントシステム210において保護されたコード216(またはコード215またはウェブページ214)のオペレーションの制御を維持するのを助ける。そのような実施形態において、初期要求R1は、保護されたコード216(またはコード215またはウェブページ214)内にすでに記憶されているか、保護されたコード216(またはコード215またはウェブページ214)の一部としてすでに記憶されている既定のデータもしくは情報に基づくものとしてよい。
【００８２】
方法300による保護されたコード216とコントローラアプリケーション232とのインタラクティブなやり取りのいくつかの例が以下で述べられている。これらの例は、互いに別々に使用され得るか、またはそれらのうちの2つもしくはそれ以上が一緒に実装され得る。
【００８３】
〔実施例１〕
ウェブページ214内の保護されたコード216は、次のうちの一方または両方が適用され得る限り、そのコード216の一意的なインスタンスであってよい。
【００８４】
(i)異なるクライアントシステム210がウェブページ214を取得した場合、その異なるクライアントシステム210は、保護されたコード216の異なるバージョンまたはインスタンスを受信するか、または取得する。しかしながら、保護されたコード216の一意的な/異なるインスタンスがクライアントシステム210のグループに提供され得る、すなわち、クライアントシステム210の集団について、クライアントシステム210のサブセットがあるものとしてよく、サブセット内の各クライアントシステム210は、保護されたコード216の同じ特定のインスタンスを受信するが、異なるサブセットは、保護されたコード216の異なるインスタンスを受信することが理解されるであろう。これらのサブセットは、事前決定され得るか、または動的に確立され得る。言い替えれば、同じインスタンスまた保護されたコード216は、複数回、再利用される(または提供される)ものとしよく、保護されたコード216のインスタンスが再利用される回数は、事前決定され得るか、またはインスタンス毎に変わり得る(たとえば、場合によってはいくつかの事前決定された最大閾値によって、おそらく上限を定められる、ランダムに生成される値)。
【００８５】
(ii)同じクライアントシステム210がその後の時間にウェブページ214を取得した場合、その後の時間に取得されたウェブページ214は、保護されたコード216の異なるバージョンまたはインスタンスを含むか、または使用し得る。しかしながら、保護されたコード216の異なるバージョンまたはインスタンスがウェブページ214が取得される毎に必ずしも取得される必要はないことは理解されるであろうし、たとえば、(a)クライアントシステム210は、ウェブページ214が取得されるW回毎にのみ保護されたコード216の異なるバージョンまたはインスタンスを取得するものとしてよく(Wは事前定義されてよく、ランダムに生成されてよく、クライアントシステム210が保護されたコード216の異なるバージョンまたはインスタンスを取得した後に変化してよく、または制御システム230によって他の何らかの形で制御可能であってよい)、および/または(b)クライアントシステム210(またはクライアントシステムの操作者)が攻撃またはウェブページ214の誤用を開始したことを疑われる場合、クライアントシステム210が保護されたコード216の異なるバージョンまたはインスタンスを取得すべきかどうかに関する決定が、そのような疑わしい攻撃/誤用がどのように取り扱われるべきかに基づき得る(たとえば、さらなる調査を可能にする、攻撃/誤用を試みる、または他の何らかの考慮事項/基準)。たとえば、攻撃者の現在の攻撃がそれほど先まで進んでいない場合、保護されたコード216の同じバージョンがクライアントシステム210に提供され得るが、攻撃者の現在の攻撃が十分に進んでいるか、または成功した場合、保護されたコード216の異なるバージョンがクライアントシステム210に提供され得る。
【００８６】
したがって、保護されたコード216のインスタンスは、ウェブページ214が取得される毎に(またはいくつかの回数について)一意的であってよく、および/または特定のクライアントシステム210(またはクライアントシステム210のグループ)に一意的であってよく、および/またはブラウザ212の特定のインスタンスに一意的であってよい、などである。
【００８７】
保護されたコード216のどのインスタンスがクライアントシステム210に提供するべきかの決定は、好ましくは、制御システム230(またはコントローラアプリケーション232)によって行われる。以下で述べているように、クライアントシステム210は、制御システム210から保護されたコード216を取得するものとしてよく、他の実施形態では、クライアントシステム210は、保護システム220またはプロバイダシステム280から保護されたコード216を取得するものとしてよく、その場合、保護システム220またはプロバイダシステム280(該当する場合)は、制御システム230が保護されたコード216のどのインスタンスがクライアントシステム210に提供されるべきかを決定し、保護システム220またはプロバイダシステム280にしかるべく通知することができるように制御システム230と通信し得る。
【００８８】
したがって、保護されたコード216は、コントローラアプリケーション232に対して自己を識別する(または識別するのを助ける)、すなわち、コントローラアプリケーション232に保護されたコード216のどの特定のインスタンスがクライアントシステム210で現在使用されているかの識別を通知する(またはコントローラアプリケーション232がそのような識別を決定するのを少なくとも助ける)機能を備え得る。
【００８９】
たとえば、セキュリティ保護された方式で、保護されたコード216の特定のインスタンスに対する識別子が保護されたコード216内に(またはコード215内またはウェブページ214内に)記憶され得る。したがって、ステップ302は、その記憶されている識別子にアクセスするか、またはこれを取得するステップと、アクセス/取得された識別子を要求の一部として提供するか、または含むステップとを含み得る、すなわち、要求を構成するデータの少なくとも一部は、保護されたコード216の特定のインスタンスの同一性を示し得る。次いで、ステップ308は、コントローラアプリケーション232がウェブページ214の保護されたコード216の特定のインスタンスに対する、要求に含まれる、識別子にアクセスするか、またはこれを取得するステップを含み得る。
【００９０】
代替的に、ステップ302は、保護されたコード216が、保護されたコード216の特定のインスタンスの識別子が導出され得る、および要求の一部としてアクセス/取得された情報もしくはデータを含む、ウェブページ214および/またはコード215および/または保護されたコード216、の一部(たとえば、ウェブページ214および/またはコード215および/または保護されたコード216の選択された部分/ビット)をなす(または、それから導出される)情報もしくはデータを取得するステップを含むものとしてよい。次いで、ステップ308は、コントローラアプリケーション232が要求で受信したこの情報またはデータを使用してウェブページ214内の保護されたコード216の特定のインスタンスに対する識別子を導出するステップを含み得る。
【００９１】
これは、コントローラアプリケーション232が、ある確度で、どのクライアントシステム210および/またはユーザおよび/または保護されたコード216のインスタンスと、コントローラアプリケーション232が現在インタラクティブにやり取りしているかを正確に知ることを可能にする。
【００９２】
ステップ308で実行される処理は、保護されたコード216のどの特定のインスタンスが要求を送信したかに少なくとも一部基づく(すなわち、特定のインスタンスに対する識別子に基づく)ものとしてよく、その場合、ステップ308で実行される処理は、保護されたコード216の特定のインスタンスに関連付けられている(または対応している)メタデータ228を使用し得る。したがって、ステップ308は、コントローラアプリケーション232が識別子によって識別される保護されたコード216の特定のインスタンスに関連付けられているメタデータ228を取得するか、またはこれにアクセスするステップを伴い得る。メタデータ228の使用例については、後で述べるものとする。
【００９３】
〔実施例２〕
ステップ302は、保護されたコード216が1つまたは複数のチェックもしくはテストを実行し、要求内のそれらの1つまたは複数のチェックもしくはテストの結果を表すデータを含む、ステップを伴うものとしてよい。たとえば、以下のとおりである。
・  完全性検証:ステップ302は、保護されたコード216が、保護されたコード216、コード215、およびウェブページ214のうちの1つまたは複数が修正されたかどうかを識別または決定し、そのような修正が生じたかどうかを指示する修正データを要求の中に入れるステップを含み得る。次いで、ステップ308は、コントローラアプリケーション232が要求に含まれる修正データにアクセスし、またはこれを取得するステップを含み得る。
・  アンチデバッグオペレーション:ステップ302は、保護されたコード216が、デバッガ内でコード215および/または保護されたコード216が走らされているかどうかを識別または決定し、コード215および/または保護されたコード216がデバッガ内で走らされていること(または走らされているか走らされていないか)を指示するアンチデバッグデータを要求の中に入れるステップを含み得る。保護されたコード216は、進行中のプロセスとして(たとえば、何らかのバックグラウンドスレッドを介して)-すなわち、ステップ302が実行されたときだけでなく-デバッガ内でコード215および/または保護されたコード216が走らされているかどうかを識別または決定するように配置構成されるものとしてよく、コード215および/または保護されたコード216がデバッガ内で走らされているかどうかを表す対応するインジケータを生成/維持し得ることは理解されるであろう。したがって、ステップ302は、このインジケータを含む(またはこのインジケータに基づく)要求を生成するステップを含んでいてよく、それに加えてまたは代替的に、ステップ302は、コード215および/または保護されたコード216がデバッガ内で走らされていると識別または決定したことに応答して進行中プロセスによって引き起こされ得る。次いで、ステップ308は、コントローラアプリケーション232が要求に含まれるアンチデバッグデータにアクセスし、またはこれを取得するステップを含み得る。本明細書で使用されているような「デバッガ」という用語は、クライアントシステム210のユーザがコード215の一部または全部の実行を監視し、および/または制御するために使用され得るブラウザ212または他の機能の開発モードを指すものとしてよいことが理解されるであろう。
・  ウォッチ識別(watch identification):ステップ302は、保護されたコード216がウェブページのデータ(たとえば、ウェブページ214の視覚的表現によって提示されるような)が視覚的表現からまたはウェブページ214内からコピーされているかどうかを識別または決定し、そのようなコピーが行われていること(または行われているか行われていないか)を指示するウォッチデータを要求に入れるステップを含み得る。保護されたコード216は、進行中のプロセスとして(たとえば、何らかのバックグラウンドスレッドを介して)-すなわち、ステップ302が実行されたときだけでなく-そのようなコピーが実行されているかどうかを識別または決定するように配置構成されるものとしてよく、そのようなコピーが実行されているかどうかを表す対応するインジケータを生成/維持し得ることが理解されるであろう。したがって、ステップ302は、このインジケータを含む(またはこのインジケータに基づく)要求を生成するステップを含んでいてよく、それに加えてまたは代替的に、ステップ302は、そのようなコピーが実行されていると識別または決定したことに応答して進行中プロセスによって引き起こされ得る。次いで、ステップ308は、コントローラアプリケーション232が要求に含まれるウォッチデータにアクセスし、またはこれを取得するステップを含み得る。
・  妥当性チェック:ステップ302は、保護されたコード216が、表示されるウェブページのデータフィールドの妥当性確認がブラウザ212内でオンにされているかオフにされているかを識別または決定し、表示されるウェブページ214のデータフィールドの妥当性確認がブラウザ212内でオンまたはオフにされていること(またはオンにされているかオフにされているか)を指示する妥当性チェックデータを要求の中に入れるステップを含み得る。保護されたコード216は、進行中のプロセスとして(たとえば、何らかのバックグラウンドスレッドを介して)-すなわち、ステップ302が実行されたときだけでなく-表示されるウェブページ214のデータフィールドの妥当性確認がオンにされているかオフにされているかを識別または決定するように配置構成されるものとしてよく、表示されるウェブページ214のデータフィールドの妥当性確認がオンにされているかオフにされているかを表す対応するインジケータを生成/維持し得ることが理解されるであろう。したがって、ステップ302は、このインジケータを含む(またはこのインジケータに基づく)要求を生成するステップを含んでいてよく、それに加えてまたは代替的に、ステップ302は、表示されるウェブページ214のデータフィールドの妥当性確認がオンまたはオフにされていると識別または決定したことに応答して進行中プロセスによって引き起こされ得る。次いで、ステップ308は、コントローラアプリケーション232が要求に含まれる妥当性チェックデータにアクセスし、またはこれを取得するステップを含み得る。
・  広告ブロックチェック:ステップ302は、保護されたコード216が、広告(たとえば、ウェブページ214によって提供される広告)のブロックがブラウザ212内でオンにされているかオフにされているかを識別または決定し、広告(たとえば、ウェブページ214によって提供される広告)のブロックがブラウザ212内でオンまたはオフにされていること(またはオンにされているかオフにされているか)を指示する広告ブロックチェックデータを要求の中に入れるステップを含み得る。保護されたコード216は、進行中のプロセスとして(たとえば、何らかのバックグラウンドスレッドを介して)-すなわち、ステップ302が実行されたときだけでなく-広告ブロックが実行されているかどうかを識別または決定するように配置構成されるものとしてよく、広告ブロックが実行されているかどうかを表す対応するインジケータを生成/維持し得ることが理解されるであろう。したがって、ステップ302は、このインジケータを含む(またはこのインジケータに基づく)要求を生成するステップを含んでいてよく、それに加えてまたは代替的に、ステップ302は、広告ブロックが実行されていると識別または決定したことに応答して進行中プロセスによって引き起こされ得る。次いで、ステップ308は、コントローラアプリケーション232が要求に含まれる広告ブロックチェックデータにアクセスし、またはこれを取得するステップを含み得る。
【００９４】
代替的に、上記のチェックまたはテストのうちの1つまたは複数について、ステップ302は、保護されたコード216が保護されたコード216および/またはコード215および/またはウェブページ214および/またはブラウザ212および/またはそのチェックもしくはテストが実行されることを可能にするブラウザ212の実行環境から情報もしくはデータを取得する(またはアクセスするまたは導出する)ステップを含み得る。次いで、ステップ308は、コントローラアプリケーション232がチェックまたはテストそれ自体を実行し(チェックまたはテストが保護されたコード216によって実行される代わりに)、たとえば、上述の修正データ、アンチデバッグデータ、ウォッチデータ、妥当性チェックデータおよび広告ブロックチェックデータのうちの1つまたは複数を導出するステップを含み得る。
【００９５】
ステップ302は、追加のまたは代替的な機能(または論理もしくは処理)を実行し、それによって、制御システム230に送信されるべき要求を生成するものとしてよく、そのような機能はウェブページ214の性質/機能および/またはウェブページ214について確立されたセキュリティポリシーおよび/または他の基準/考慮事項に依存し得る。
【００９６】
ステップ308で生成される応答は、チェックおよびテストの結果に依存する。応答の生成は、また、ウェブページ214のプロバイダまたは作成者によって構成され得る(たとえば、ウェブページ214のいくつかのソースでは、厳重なセキュリティ管理を望むことがあり得るが、他のウェブページ214のソースは、あまり厳重でないセキュリティ管理を課すことに満足し得る)。これは、たとえば上述のセキュリティ/構成ポリシーの一部として指定され得る。応答の例は、以下を含み得る。
・  修正データが、保護されたコード216、コード215、およびウェブ214のうちの1つまたは複数が修正されていることを指示する場合、応答は、クライアントシステム210がコード215および/またはウェブページ214のコンテンツにアクセスすること、またはコード215および/またはウェブページ214によって提供される「通常の」機能を実行することを防ぐように配置構成され得る。これは、応答が(ステップ314で)コード215または保護されたコード216に特定の例外処理、たとえば、プラザ212を閉じる、ウェブページ214のビデオコンテンツの表示を一時停止する、ブラウザ212にウェブページ214を表示するのを停止するなどの操作を実行させることによって達成される可能性がある。代替的に、これは、コード215または保護されたコード216が処理するダミー(たとえば、ランダム)データを含む応答によって達成されることも可能であり、その結果、ウェブページ214の出力はクライアントシステム210のユーザにとって意味のない、または理解できないものとなる。
・  アンチデバッグデータが、コード215および/または保護されたコード216がデバッガ内で走らされていることを指示する場合、応答は、(a)クライアントシステム210がコード215および/またはウェブページ214(たとえば、上で説明されているような)のコンテンツにアクセスすること、またはコード215および/またはウェブページ214(たとえば、上で説明されているような)によって提供される「通常の」機能を実行することを防ぐか、または(b)(ステップ314で)コード215および/または保護されたコード216に、デバッガを無効化することを行わせるように配置構成され得る。
・  ウォッチデータが、ウェブページのデータ(たとえば、ウェブページ214の視覚的表現によって提示されるような)が視覚的表現からまたはウェブページ214内からコピーされていることを指示する場合、応答は、(a)クライアントシステム210がコード215および/またはウェブページ214(たとえば、上で説明されているような)のコンテンツにアクセスすること、またはコード215および/またはウェブページ214(たとえば、上で説明されているような)によって提供される「通常の」機能を実行することを防ぐか、または(b)(ステップ314で)コード215および/または保護されたコード216に、結果としてそのようなコピーを防ぐオペレーションもしくは機能を実装することを行わせるように配置構成され得る。
・  妥当性チェックデータが、表示されるウェブページ214のデータフィールドの妥当性確認がブラウザ212またはウェブページ214内でオフにされるか、または何らかの形で無効化されることを指示する場合、応答は、(a)クライアントシステム210がコード215および/またはウェブページ214(たとえば、上で説明されているような)のコンテンツにアクセスすること、またはコード215および/またはウェブページ214(たとえば、上で説明されているような)によって提供される「通常の」機能を実行することを防ぐか、または(b)(ステップ314で)コード215および/または保護されたコード216に、表示されるウェブページ214のデータフィールドの妥当性確認がオンにされるようにブラウザ212を構成することを行わせるように配置構成され得る。
・  広告ブロックチェックデータが、広告(たとえば、ウェブページ214によって提供される広告)のブロックがブラウザ212内でオンまたはオフにされることを指示する場合、応答は、(a)クライアントシステム210がコード215および/またはウェブページ214(たとえば、上で説明されているような)のコンテンツにアクセスすること、またはコード215および/またはウェブページ212(たとえば、上で説明されているような)によって提供される「通常の」機能を実行することを防ぐか、または(b)(ステップ314で)コード215および/または保護されたコード216に、広告ブロックの現在の設定を逆にするようにブラウザ212を構成することを行わせるように配置構成され得る。
・  そうでなければ、応答は、クライアントシステム210がコード215および/またはウェブページ214のコンテンツにアクセスすること、またはコード215および/またはウェブページ214によって提供される「通常の」機能を実行することを許すように配置構成され得る(もちろん、すでに実行されている可能性のある他のテストに基づきこのことが生じることを許す他の理由がない限り)。したがって、ステップ314における応答の処理は、単純に、保護されたコード216がクライアントシステム210がコード215および/またはウェブページ214のコンテンツにアクセスすること、またはコード215および/またはウェブページ214によって提供される「通常の」機能を実行することを許すためのものであってよい。
【００９７】
上記の実施例のより詳しい内容は、後で提示されるものとする。
【００９８】
ステップ308における応答の処理は、コントローラアプリケーション232が上述の修正データ、アンチデバッグデータ、ウォッチデータ、妥当性チェックデータ、広告ブロックチェックデータなどのうちの1つまたは複数などのデータを受信された要求の中に(または基づき)記録するか、または記憶するステップを含み得る。そのようなログもしくは記憶されたデータは、その後の分析のために(たとえば、ウェブページ214に対する攻撃または誤用が実行されているのかおよび/またはどのように実行されているのかおよび/またはいつ実行されているのかおよび/または誰によって実行されているのかを識別するのを助ける)および/またはその後の保護の強制のためにおよび/またはその後の法的手続きの証拠として、後で使用され得る。
【００９９】
上で述べたように、保護されたコード216およびコントローラアプリケーション232はどのようにインタラクティブにやり取りするかの選択(たとえば、保護されたコード216の同一性がいつどのように取得されるべきか、完全性検証などの上記のテスト、およびその対応する応答の一部または全部がいつどのように実装され、実施されるべきかなど)は、セキュリティ/構成ポリシーとして見なされるか、またはセキュリティ/構成ポリシーで指定され得る。
【０１００】
したがって、上で述べたように、方法300(すなわち、保護されたコード216およびコントローラアプリケーション232によって実行されるオペレーション)は、ウェブページ214(またはウェブアプリ214またはアプリケーション214)によって提供される(通常の/意図された)機能をセキュリティ保護する。ウェブページ214またはウェブアプリ214について、この機能はブラウザ212を介して(すなわち、ウェブページ214またはウェブアプリ214を処理するブラウザ212を介して)提供され得る。言い替えれば、方法300(すなわち、保護されたコード216およびコントローラアプリケーション232によって実行されるオペレーション)は、ブラウザ212によって処理されるウェブページ214(またはウェブアプリ214またはアプリケーション214)をセキュリティ保護する。
【０１０１】
保護システム220は、初期コード222に基づき保護された(またはセキュリティ保護された)コード227を生成するように配置構成される。初期コード222および保護されたコード227は、各々、1つまたは複数のファイルに記憶され得る1つまたは複数のコンピュータプログラム(またはソフトウェアまたはモジュール)を含み得る。各ファイルは、1つまたは複数の機能を収めることができる。
【０１０２】
初期コード222は、1つまたは複数の言語で書かれたソースコードを含むものとしてよく、そのうちの1つまたは複数は保護されたコード216に対する言語と同じであってよいが、これは必要というわけではない。初期コード222は、コンパイル済み/実行可能コードおよび/またはソースコードを含み得る。
【０１０３】
保護システム220は、保護アプリケーション223を備えるか、または実行するように配置構成される。保護システム220は、データベース229(またはストア)も含み得るか、または実装し得る。
【０１０４】
保護システム220は、ライブラリアプリケーション221も含み得るか、または実行するように配置構成されてよく、ライブラリデータベース225(またはストア)を含むか、または実装し得る。
【０１０５】
要するに、保護アプリケーション223は、初期コード222を受信し、1つまたは複数の「保護」を初期コード222に適用し、それによって、保護されたコード227を生成し出力する。したがって、保護アプリケーション223は、1つまたは複数の「保護」を初期コード222に適用するように配置構成されている1つまたは複数のプロテクタモジュールまたはコンポーネント224を備える。これらの保護のうちの1つは、コードまたはソフトウェアの異なるインスタンスを生成するステップを伴うものとしてよく、これらの異なるインスタンスは互いに同じ全体的機能を備えるが、それぞれのソフトウェア命令の相違点および/またはデータの相違点を有する。これらの相違点は、特定のインスタンスおよび/または特定のインスタンスの制御オペレーションまたは機能を識別するために使用され得る。異なるインスタンスの生成(「多様化」とも称される)は、この後すぐに、より詳しく説明されるものとする。保護アプリケーション223は、また、保護アプリケーション223が生成する保護されたコード227に対応するか、または関連付けられているメタデータ228を生成するように配置構成されているメタデータ生成器226も備え、メタデータ228の性質および使用は、後でより詳しく説明されるものとする。
【０１０６】
すでに述べたように、保護システム220は、データベース229(またはストア)を含み得る。保護システム220は、保護アプリケーション223によって生成された保護されたコード227および関連付けられているメタデータ228をデータベース229に記憶し得る。このようにして、保護システム220は、たとえば同じ初期コード222の複数の異なる(または一意的な)保護されたインスタンスを記憶する、複数の異なる保護されたコード227およびそれらの関連付けられているメタデータ228のリポジトリを作成するものとしてよく、これはそれぞれ1つまたは複数の別々の量の初期コード222について行われる。したがって、保護されたコード227が必要なときに、保護システム220は使用/供給され得る利用可能な保護されたコード227の「リザーブ」をすでに有していてもよい。しかしながら、代替的実施形態において、保護されたコード227およびその関連付けられているメタデータ228は、必要に応じて、および必要なときに(すなわち、オンデマンドで)生成され得ることが理解されるであろう。
【０１０７】
保護モジュール224の目的は、初期コード222のデータ処理の機能を保護し(またはセキュリティ保護し)、および/または初期コード222によって使用されるか、または処理されるか、または記憶されているデータを保護する(またはセキュリティ保護する)ことである。これは、クローキング技術、準同型データ変換、制御フロー変換、ホワイトボックス暗号化、鍵隠蔽、プログラム連動、および境界ブレンドのうちの1つまたは複数などの、様々なソフトウェア保護技術(本明細書において「保護」と称される)を適用することによって達成され得る。
【０１０８】
特に、保護されたコード227(すなわち、プロテクタモジュール224によって処理された後の初期コード222)は、初期コード222と少なくとも同じ機能もしくはデータ処理を行う。しかしながら、この機能またはデータ処理は、典型的には、保護されたコード227を実行しているコンピュータシステム100の操作者が意図しないまたは許可されていない仕方で保護されたコード227からこの機能またはデータ処理にアクセスすること、またはこれらを使用することができないような仕方で保護されたコード227で実装されるが、そのコンピュータシステム100が代わりに初期コード222を実行したとすれば(すなわち、保護されていない形で)、コンピュータシステム100の操作者は首尾よく攻撃を開始し、それによって意図しないまたは許可されていない仕方で機能またはデータ処理にアクセスするか、または使用することができた可能性もある。同様に、保護されたコード227は、プロテクタモジュール224による処理により、保護されたまたは難読化された方式で秘密情報(暗号鍵または識別子など)を記憶するか、またはアクセスすることができ、それによって、攻撃者がその機密情報を推定するか、またはアクセスすることを(不可能でないまでも)より困難にし得る(それに対して、保護が適用されていないとすればそのような情報は初期コード222から推定可能またはアクセス可能であった可能性もある)。
【０１０９】
たとえば、以下のとおりである。
・  初期コード222は、初期コード222によって処理されるべき1つまたは複数のデータ項目に少なくとも一部基づく決定(または決定ブロックまたは分岐点)を含み得る。初期コード222が保護されていない形で実行された場合、攻撃者は、実行の経路が決定を処理した後に実行のその経路が辿られることになっていなかったとしても辿られるように初期コード222に実行を強制することができる可能性がある。たとえば、決定は、プログラム変数BがTRUEであるかFALSEであるかをテストするステップを含むものとしてよく、初期コード222は、決定でBがTRUEであると識別した場合に、実行経路PTが辿られ/実行されるが、決定でBがFALSEであると識別した場合に、実行経路PFが辿られ/実行されるように配置構成され得る。この場合、攻撃者は(たとえば、デバッガを使用することによって、または初期コード222を書き換えることによって)、決定でBがTRUEであると識別した場合に経路PFを辿ることを初期コード222に強制し、および/または決定でBがFALSEであると識別した場合に経路PTを辿ることを初期コード222に強制することが可能である。したがって、いくつかの実施形態において、プロテクタモジュール224は、初期コード222内で1つまたは複数のソフトウェア保護技術を決定に適用することによって攻撃者がこれを行うのを防ぐ(または少なくともより困難にする)ことを目的とする。
・  初期コード222は、セキュリティ関連機能、アクセス制御機能、暗号機能、および権利管理機能のうちの1つまたは複数を含み得る。そのような機能は、多くの場合に、1つまたは複数の暗号鍵などの、秘密データの使用を伴う。処理は、1つまたは複数の暗号鍵を使用するステップおよび/または操作するか、または用いて操作するステップを伴い得る。攻撃者が秘密データを識別するか、または決定することができた場合、セキュリティ違反が生じており、秘密データによって保護されているデータ(オーディオおよび/またはビデオコンテンツなど)の制御もしくは管理は、裏をかかれる可能性がある。したがって、いくつかの実施形態において、プロテクタモジュール224は、初期コード222内で1つまたは複数のソフトウェア保護技術をそのような機能に適用することによって攻撃者が1つまたは複数の秘密データを識別または決定するのを防ぐ(または少なくともより困難にする)ことを目的とする。これは、保護されたコード227それ自体の中に難読化された方式で秘密データを記憶するように保護されたコード227を配置構成するステップを伴い得る。それに加えて、または代替的に、これは、難読化された、または暗号化された形式で秘密データを動的にメモリから読み出し、メモリに書き込むことができる機能を備えるように保護されたコード227を配置構成するステップを伴い得る。
・  保護されたコード227は、追加の機能(すなわち、初期コード222には元々ない機能)を備え得る。この追加の機能は、初期コード222に含まれるものとしてよく、プロテクタモジュール224により保護されたコード227を形成するのを助ける。この追加の機能は、保護されたコード227が図3の方法300のステップ302、304、312、および314を実行することを可能にすることであり得る。このようにして、保護されたコード227は、ウェブページ214内で保護されたコード216として使用され得る。
【０１１０】
上で説明されているように、クライアントシステム210およびブラウザ212は、一般的に、いわゆる「ホワイトボックス」実行環境を提供する。ホワイトボックス攻撃(すなわち、実行環境がホワイトボックス環境であるという事実につけ込もうとする攻撃)に抵抗するように初期コード222を変換するための、本明細書において「ホワイトボックス難読化技術」と称される多数の技術がある。そのようなホワイトボックス難読化技術の例は、開示全体が参照により本明細書に組み込まれている「White-Box Cryptography and an AES Implementation」、S. Chowら、Selected Areas in Cryptography、9th Annual International Workshop、SAC 2002、Lecture Notes in Computer Science 2595 (2003年)、250〜270頁および「A White-box DES Implementation for DRM Applications」、S. Chowら、Digital Rights Management、ACM CCS-9 Workshop、DRM 2002、Lecture Notes in Computer Science 2696 (2003年)、1〜15頁に記載されている。追加の例は、開示全体が参照により本明細書に組み込まれている米国特許第61/055,694号および国際公開第WO2009/40774号に記載されている。いくつかのホワイトボックス難読化技術(上で説明されているものおよび以下で述べられている他のものなど)は、攻撃者が基礎となる秘密/機密データにアクセスするか、または導出することが困難/不可能である変換された/セキュリティ保護された方式により秘密/機密データ(暗号鍵など)の記憶および/または使用、ならびに場合によっては操作を可能にする。いくつかのホワイトボックス難読化技術では、データフロー難読化を実装するが、たとえば、開示全体が参照により本明細書に組み込まれている米国特許第7,350,085号、米国特許第7,397,916号、米国特許第6,594,761号、および米国特許第6,842,862号を参照のこと。いくつかのホワイトボックス難読化技術では、制御フロー難読化を実装するが、たとえば、開示全体が参照により本明細書に組み込まれている米国特許第6,779,114号、米国特許第6,594,761号、および米国特許第6,842,862号を参照のこと。しかしながら、他のホワイトボックス難読化技術が存在していること、および本発明の実施形態は、ホワイトボックス難読化技術を使用し得ることは理解されるであろう。
【０１１１】
別の例として、初期コード222は、特定のクライアントシステム210(またはクライアントシステム210の特定のセット)に提供され(または配布され)、特定のクライアントシステム210(またはクライアントシステム210の特定のセット)によって使用されることを意図され得ること、およびしたがって、初期コード222を特定のクライアントシステム210に「ロック」する、すなわち、初期コード222が(保護された後)別のクライアントシステム210上で実行されるのを防ぐことが望ましいという可能性がある。したがって、保護されたコード227が1つまたは複数の所定の/特定のクライアントシステム210上で実行する(またはそれによって実行される)ことができるが、他のクライアントシステム210上では実行しないように初期コード222を変換するための、本明細書において「ノードロッキング」保護技術と称される、多数の技術がある。そのようなノードロッキング技術の例は、開示全体が参照により本明細書に組み込まれている国際公開第WO2012/126077号に記載されている。しかしながら、他のノードロッキング技術が存在していること、および本発明の実施形態は、ノードロッキング技術を使用し得ることが理解されるであろう。
【０１１２】
電子透かしは、よく知られている技術である。特に、電子透かしは、透かしを入れたデジタルオブジェクトを生成するように初期デジタルオブジェクトを修正するステップを伴う。修正は、特定のデータ(ペイロードデータと称される)を初期デジタルオブジェクト内に埋め込むか、または隠すように行われる。ペイロードデータは、たとえば、デジタルオブジェクトに対する所有権または他の権利を識別するデータを含み得る。ペイロードデータは、透かしを入れたデジタルオブジェクトの(意図した)受信を識別するものとしてよく、その場合、ペイロードデータは、デジタル指紋と称され、そのような電子透かしは、デジタルオブジェクトの不正コピーの作成元を突き止めるのを助けるために使用され得る。電子透かしは、ソフトウェア製品に対して適用され得る。そのようなソフトウェア透かし入れ技術の例は、開示全体が参照により本明細書に組み込まれている米国特許第7,395,433号に記載されている。しかしながら、他のソフトウェア透かし入れ技術が存在していること、および本発明の実施形態は、ソフトウェア透かし入れ技術を使用し得ることが理解されるであろう。
【０１１３】
上で述べたように、初期コード222の異なるバージョンまたはインスタンスを異なるクライアントシステム210に提供することが望ましいことがある。初期コード222の異なるバージョンは同じ機能を提供するが、初期コード222の異なるバージョンは、異なる形でプログラムされるか、または実装される。これは、攻撃者が保護されたコード227を首尾よく攻撃した場合の影響を制限するのに役立ち得る。特に、攻撃者が保護されたコード227の自分のバージョンを首尾よく攻撃した場合、その攻撃(または攻撃者によって発見されるか、またはアクセスされた暗号鍵などのデータ)は、保護されたコード227の異なるバージョンとともに使用するのに適さないことがある。同様に、初期コード222の異なる保護されたインスタンス227を有することは、保護されたコード227の特定のユーザ(たとえば、特定のクライアントシステム210)を識別するのに役立つ。その結果、本明細書において「多様性」と称される様々な技術があり、これによって、初期コード222の異なる保護されたバージョンが生成されるように(すなわち、「多様性」が導入されるように)初期コード222を変換する。そのような多様性技術の例は、開示全体が参照により本明細書に組み込まれている国際公開第WO2011/120123号に記載されている。しかしながら、他の多様性技術が存在していること、および本発明の実施形態は、多様性技術を使用し得ることが理解されるであろう。
【０１１４】
上で述べたホワイトボックス難読化技術、ノードロッキング技術、ソフトウェア透かし入れ技術、および多様性技術は、ソフトウェア保護技術の例である。保護を初期コード222に適用する他の方法があることは理解されるであろう。したがって、上で述べた本明細書で使用されているような「ソフトウェア保護技術」、または「保護」という用語は、上で述べたホワイトボックス難読化技術のうちの1つまたは複数および/または上で述べたノードロッキング技術のうちの1つまたは複数および/または上で述べたソフトウェア透かし入れ技術のうちの1つまたは複数および/または上で述べた多様性技術のうちの1つまたは複数などの、保護を初期コード222に適用する任意の方法(攻撃者による攻撃を阻止すること、または少なくとも攻撃者が自分の攻撃を成功させることをより困難にすることを目的とする)を意味すると解釈されるものとする。したがって、プロテクタモジュール240は、上で述べたソフトウェア保護技術または保護のうちの1つまたは複数を初期コード222に適用し、保護されたコード227を生成するように配置構成され得る。したがって、その結果得られる保護されたコード227は、「ホワイトボックス保護コード」と称され得る。
【０１１５】
プロテクタモジュール224が初期コード222内に上で述べたソフトウェア保護技術を実装し得る方法が多数ある。たとえば、初期コード222を保護するために、プロテクタモジュール224は、初期コード222内のコードの1つまたは複数の部分を修正するものとしてよく、および/またはコードの1つまたは複数の新しい部分を初期コード222内に追加もしくは導入し得る。これらの修正が行われる実際の方法またはコードの新しい部分が書き込まれる実際の方法は、もちろん異なるものとしてよく、したがって、結局、同じ機能を達成するようにソフトウェアを書く多数の方法があることになる。
【０１１６】
初期コード222から保護されたコード227を生成するためにプロテクタモジュール224を実装するための多数の例および方法が、たとえば、開示全体が参照により本明細書に組み込まれている国際公開第WO2015/150391号および国際公開第WO2015/150376号に記載されている。プロテクタモジュール224が適用するように配置構成され得る保護技術のさらなる例は、開示全体が参照により本明細書に組み込まれている国際公開第WO2013/142981号、国際公開第WO2013/142979号、国際公開第WO2013/142983号、および国際公開第WO2013/142980号に記載されている。
【０１１７】
上で述べたように、保護システム220は、ライブラリデータベース225(またはストア)を含むか、または実装し得る。ライブラリデータベース225は、1つまたは複数の事前生成される保護されたソフトウェアモジュール(または関数またはプロシージャまたはコードスニペット)、および同じ基礎となる機能/コードに対する潜在的に複数の異なる形で実装され/保護されたインスタンスを含むものとしてよい。これらのモジュールは、初期コード222とは無関係に、および場合によっては初期コード222の受信前に生成される限り、「事前生成される」。したがって、このライブラリデータベース225は、保護アプリケーション223に利用可能なリポジトリとして見なされてよく、したがって、保護アプリケーション223(またはプロテクタモジュールもしくはコンポーネント224のうちの1つまたは複数)は、ライブラリデータベース225内に記憶されているモジュールのうちの1つまたは複数を使用するか、または保護されたコード227内に含むものとしてよい。この目的を達成するために、保護システム220は、ライブラリアプリケーション221を実行するように配置構成されてよく、ライブラリアプリケーション221は、ライブラリデータベース225に記憶されるソフトウェアモジュールを生成し得る。保護されたモジュールを生成するためのそのようなライブラリアプリケーション221の例は、開示全体が参照により本明細書に組み込まれている国際公開第WO2015/150376号に記載されている。保護アプリケーション223は、ライブラリデータベース225から直接ソフトウェアモジュールを取得するように配置構成され得るか、またはライブラリアプリケーション221を介してライブラリデータベース225からソフトウェアモジュールを取得するように配置構成され得る。ライブラリアプリケーション221は、保護システム220以外のエンティティの一部であってよく、および保護システム220以外のエンティティによって実行され得る。同様に、ライブラリデータベース225は、保護システム220以外のエンティティの一部であってよく、および保護システム220以外のエンティティによって提供され得るが理解されるであろう。ライブラリデータベース225は、データベース229の一部をなすものとしてよい。
【０１１８】
図4は、本発明のいくつかの実施形態による保護システム220を動作させる例示的な方法400を示すフローチャートである。
【０１１９】
ステップ402において、保護システム220は、初期コード222を取得する。これは、保護システム220が初期コード222を異なるエンティティから(たとえば、プロバイダシステム280などの、ウェブページ214に関連付けられているウェブサイトのプロバイダ/ホストから)受信するステップを含むものとしてよく、したがって、初期コード222は、コード215および/または保護されたコード216の一部または全部を含み得る(保護されていない形式であるにもかかわらず)。代替的に、これは、保護システム220が初期コード222を生成するステップを含み得る(たとえば、保護システム220が自コードを生成し保護するエンティティによって操作されている場合に)。
【０１２０】
ステップ404において、保護システム220は、保護アプリケーション223を使用して、取得された初期コード222から、保護されたコード227および保護されたコード227に関連付けられているメタデータ228を生成する。これは、(a)1つまたは複数のモジュールもしくはコード(たとえば、ライブラリデータベース221のコード)を初期コード220に入れて、保護されたコード227が図3のステップ302、304、312、および314を実行することを可能にするステップ、および/または(b)上で述べたソフトウェア保護技術のうちの1つまたは複数を適用するステップを含み得る。これを達成するための方法が、上で説明された。すでに述べたように、これは、初期コード222の複数の異なる保護されたインスタンスまたはバージョン227を生成するステップを伴い得る(各インスタンスまたはバージョンはそれぞれの関連付けられたメタデータ228を有する)。
【０１２１】
オプションのステップ406において、保護システム220は、保護されたコード227および/またはメタデータ228の一部または全部をデータベース229に記憶し得る。したがって、ステップ404は、そこで保護されたコード227の1つまたは複数のインスタンスが必要であることを予想して実行されるものとしてよく、それにより、データベース229は、保護されたコード227およびメタデータ228を予め記憶しておき、必要に応じて、および必要になったときにいつでも提供できるようにする(それによって、保護されたコード227を用意する遅れを短縮する)。しかしながら、データベース229はオプションであり、したがって、保護システム220は保護されたコード227およびメタデータ228を必要に応じて、必要になるかまたは要求されたときに(すなわち、オンデマンドで)生成し得る。
【０１２２】
ステップ408において、保護されたコード227は、要求側エンティティ(たとえば、プロバイダシステム280)に提供される。保護システム220は、保護されたコード227に対する(または保護されたコード227のインスタンスに対する)要求を受信し得る。上で説明されているように、保護システム220が保護されたコード227およびメタデータ228を必要に応じて、および必要になるか、または要求されたときに(すなわち、オンデマンドで)生成するように配置構成されている場合、要求が受信されると、保護システム220は、ステップ404を実行し、要求側エンティティに、その要求に応答してステップ404で生成された保護されたコード227を提供し得る(ステップ408において)。他方で、保護システム220が保護されたコード227およびメタデータ228の(インスタンスの)リポジトリをデータベース229内に維持するように配置構成されている場合、要求が受信されると、保護システム220は、データベース229に記憶されている保護されたコード227(のインスタンス)を要求側エンティティに提供し得る。次いで、保護システム220は、1つまたは複数の、追加の保護されたコード227およびメタデータ228(のインスタンス)を、データベース229の保護されたコード227(のインスタンス)の提供に応答して、生成し、データベース229に記憶するように配置構成されてもよく、このようにして、データベース229は、保護されたコード227のインスタンスの十分なバッファにより維持され得る。
【０１２３】
ステップ410において、保護システム220は、保護されたコード227(のインスタンス)に関連付けられているメタデータ228を制御システム230に提供してよい。特に、制御システム230は、保護システム220に要求を送信するものとしてよく、この要求では、特定の保護されたコード227(または特定の保護されたコード227の特定のインスタンス)を識別し、その要求に応答して、保護システム220は、識別された保護されたコード227に関連付けられているメタデータ228を含む(または制御システム230がそのメタデータ228にアクセスし、取得することを可能にするデータ、たとえばURLを含む)返信を制御システム230に送信するものとしてよい。要求および応答の一方または両方は、ネットワーク270を介して伝達され得る。代替的に、要求および応答の一方または両方は、異なるネットワーク(セキュリティ保護されたプライベートネットワークなど)を介して伝達され得る。
【０１２４】
ステップ410は、ステップ408と同時に、またはステップ408の一部として、実行されてよい。たとえば、保護システム220がいくつかの保護されたコード227およびその関連付けられているメタデータ228を(ステップ406で)データベース229に記憶する場合、ステップ408および410は、データベース229から保護されたコード227およびその関連付けられているメタデータ228を提供するステップを含み得る。
【０１２５】
保護アプリケーション223は、初期コード222を入力として受信することに加えて、(a)コード215(保護/セキュリティ保護されていない)の一部もしくは全部および/または(b)コード215以外のウェブページ214の一部もしくは全部(たとえば、CSSコードの様々なHTML)も受信し得る。このようにして、保護されたコード227および/またはメタデータ228は、コード215および/またはウェブページ214内に収められている値/データに基づき生成され得る。たとえば、完全性検証は、コード215の(またはコード215から導出される)正しい/予想される値/データおよび/またはウェブページ214の正しい/予想される値/データが保護されたコード227および/またはメタデータ228を生成するときに知られている場合に保護されたコード227の完全性を単にチェックする以上のことを行うように拡張され得る。これの一例は後で提示される。
【０１２６】
プロバイダシステム280は、ウェブページ214に関連付けられているウェブサイトのホストであってよい。プロバイダシステム280は、アプリストアであってよく、ここから、クライアントシステム210によってウェブアプリ214または別のアプリケーション214が取得され得る。
【０１２７】
サービスシステム250を含む実施形態において、プロバイダシステム280およびサービスシステム250は、別々のエンティティによって操作され得るか、または同じエンティティによって操作され得る。プロバイダシステム280およびサービスシステム250は、互いから物理的に分離し得るか、または1つまたは複数のコンピュータシステム100を共有し得る(たとえば、これらは、少なくとも一部には1つまたは複数の共通のサーバを使用して実装され得る)。実際、プロバイダシステム280は、サービスシステム250と同じシステムであるか、またはサービスシステム250のサブシステム/コンポーネントであってよい。
【０１２８】
それに加えて、または代替的に、プロバイダシステム280および保護システム220は、別々のエンティティによって操作され得るか、または同じエンティティによって操作され得る。プロバイダシステム280および保護システム220は、互いから物理的に分離し得るか、または1つまたは複数のコンピュータシステム100を共有し得る(たとえば、これらは、少なくとも一部には1つまたは複数の共通のサーバを使用して実装され得る)。実際、プロバイダシステム280は、保護システム220と同じシステムであるか、または保護システム220のサブシステム/コンポーネントであってよい。
【０１２９】
それに加えて、または代替的に、初期コード222に適用されそれによって保護されたコード227を生成するための保護のいくつかは、保護システム220によって実行されるものとしてよく、初期コード222に適用されそれによって保護されたコード227を生成する保護の残りの部分はプロバイダシステム280によって実行される(たとえば、保護アプリケーション223は、保護システム220およびプロバイダシステム280にわたって分散形式で実装されてよい)。特に、いくつかの実施形態において、プロテクタモジュール224の少なくともいくつかは、プロバイダシステム280から分離している保護システム220で実装されるが、残りのプロテクタモジュール224は、プロバイダシステム280で実装される。さらに、データベース229は、保護システム220の代わりにプロバイダシステム280の一部であってよく(またはプロバイダシステム280によってホストされてよく)、それにより、プロバイダシステム280は、容易に利用可能である保護されたコード227のリポジトリを有し、保護されたコード227のインスタンスを必要に応じてクライアントシステム210に供給することができる。メタデータ生成器226および/またはライブラリアプリケーション221は、保護システム220および/またはプロバイダシステム280において全体としてまたは部分的に実装され得る。このことは、たとえば、プロバイダシステム280が初期コード220の一部または全部を保護システム220に最初に提供するものとしてよく、次いで保護システム220が1つまたは複数の保護を(1つまたは複数のプロテクタモジュール224を介して)、提供される初期コード222に適用し、それによって中間の保護されたコードを生成するものとしてよく、保護システム220は、中間の保護されたコードをプロバイダシステム280に送り返すものとしてよく、次いで、プロバイダシステム280は、1つまたは複数の保護を(1つまたは複数のプロテクタモジュール224を介して)中間の保護されたコードに適用し、それによって、最終的な保護されたコード227を生成するものとしてよい(これは、たとえば、プロバイダシステム280が中間の保護されたコードをさらなるコードとバインドするか、またはリンクするか、または他の何らかの形で組み合わせ、保護されたコード227を形成するステップを伴い得る)。プロバイダシステム280およびプロテクタシステム220が連携して初期コード222から保護されたコード227を形成し得る他の方法があり得ることは理解されるであろう。たとえば、初期コード222の1つまたは複数の部分Pi(i=1,...,N)について、その部分Piはそれに適用される保護のそれぞれのシーケンスPri,j(j=1,...,ni)を有するものとしてよく、保護Pri,jは、保護システム220またはプロバイダシステム280のいずれかにおいてプロテクタモジュール224によって適用される。各部分Piは、それ自体のそれぞれのシーケンスPri,jを有するものとしてよい。次いで、プロバイダシステム280は、保護Pri,j(i=1,...,N、j=1,...,ni)を部分Piに適用した結果を使用して最終的な保護されたコード227を形成するものとしてよく、これはこれらの結果を、保護システム220に提供されていないさらなるコードと組み合わせる/リンクする/バインドするステップを伴い得る(これは、コードのすべてを保護システム220に最初に提供していなくても、プロバイダシステム280が保護されたコード227の最終的な���御を依然として行っていることを意味する)。
【０１３０】
それに加えて、または代替的に、プロバイダシステム280および制御システム230は、別々のエンティティによって操作され得るか、または同じエンティティによって操作され得る。プロバイダシステム280および制御システム230は、互いから物理的に分離し得るか、または1つまたは複数のコンピュータシステム100を共有し得る(たとえば、これらは、少なくとも一部には1つまたは複数の共通のサーバを使用して実装され得る)。実際、プロバイダシステム280は、制御システム230と同じシステムであるか、または制御システム230のサブシステム/コンポーネントであってよい。
【０１３１】
図2aは、データベース229を保護システム220の一部であるように示しているが、これはいくつかの実施形態では必要ではない。たとえば、データベース229は、代わりに制御システム230の一部を形成し得るか、またはデータベース229は、制御システム230から分離し、また保護システム220から分離しているものとしてよい。したがって、制御システム230および/または保護システム220は、データベース229内にデータ(たとえば、保護されたコード227およびメタデータ228)を記憶し(または保存しまたはアップロードし)、および/またはネットワーク270を介しておよび/または異なるネットワーク(セキュリティ保護されたプライベートネットワークなど)を介してデータベース229からそのようなデータを読み出す(またはアクセスするまたは取得するまたはダウンロードする)ように配置構成され得る。したがって、制御システム230は、保護システム220と無関係にデータベース229から保護されたコード227およびその関連付けられているメタデータ228にアクセスすることができるものとしてよく、このことは、保護システム220が「バッチモード」で動作して、保護されたコード227(およびその関連付けられているメタデータ228)の複数のインスタンスを生成することができ、制御システム230は必要に応じてそれらのインスタンスにアクセスし使用することができる。
【０１３２】
ステップ404で保護アプリケーション223によって生成されたメタデータ228は、後で説明されるように、メタデータ228が記憶された後に更新され得る。最初に記憶されたメタデータ228および/またはその後更新されたメタデータ228は、様々な異なるタイプの情報を含むか、または表すものとしてよく、その例は、後で提示される(すなわち、メタデータ228は、1つまたは複数の要素、コンポーネント、または異なる量/属性/パラメータ/などを表す別の量のデータを含むものと見なされ得る)。しかしながら、メタデータ228の(メタデータ228によって構成されるか、または表される情報に対する)いくつかの一般的なカテゴリが以下に述べられているが、メタデータ228をカテゴリに分類する他の方法も使用されることが可能であることは理解されるであろう。また、メタデータ228の一部または全部は複数のカテゴリに分類され得ること、メタデータ228を構成する異なる要素は異なるカテゴリに分類され得ることも理解されるであろう。特に、
(a)メタデータ228のいくつかの要素は、保護されたコード227の1つまたは複数の特定のインスタンスに関連付けられてよく、たとえば、保護されたコード227の1つのインスタンスに関連付けられているメタデータ228は、保護されたコード227の別のインスタンスと連動する場合も連動しない場合もある。これは、たとえば、保護されたコード227の異なるインスタンスがそのデータ/コード上の異なる変換を使用して生成されている場合に適用可能であり得る。そのようなメタデータの使用は、たとえば、コントローラアプリケーション232が保護されたコード227のどの特定のインスタンスがクライアントシステム210において実行されているかを認識することを確実にするか、または保護されたコード216の正しい/予想されるインスタンスのみが特定のクライアントシステム210において実行され得ることを確実にするのに役立つ。
(b)メタデータ228は、メタデータの複数のセットを含むものとしてよく、各セットは保護されたコード227のインスタンスによって使用され得る。メタデータの異なるセットは、保護されたコード227のインスタンスが異なる挙動をもたらすか、または異なる実行を行うようにし得る。そのようなメタデータの使用は、たとえば、動的多様性効果をもたらすのに役立ち、たとえば、メタデータの第1のセットが第1の時点において、保護されたコード214のインスタンスを制御するために使用され、その後第2の時点にメタデータの第2のセットを使用し、というように続くが、これは、攻撃者がクライアントシステム210において保護されたコード214のオペレーションを分析することをより難しくするのを助ける、リプレイ攻撃を防御するのを助ける、といったことを行う。
(c)メタデータ228のいくつかの要素は、コントローラアプリケーション232および保護されたコード216を同期させるのを助ける、たとえば、コントローラアプリケーション232と保護されたコード216との間で共有される秘密を確立するのを助けるために使用され得る。
【０１３３】
図5aは、本発明のいくつかの実施形態によるシステム200を動作させる例示的な方法500を示すフローチャートである。
【０１３４】
ステップ502において、クライアントシステム210は、ウェブページ214に対する要求をプロバイダシステム280に発行する。要求は、ネットワーク270を介して伝達され得る。したがって、たとえば、プロバイダシステム280は、ウェブサイト(ウェブページ214を含む、1つまたは複数のウェブページを備え得る)をホストする1つまたは複数のサーバを備え得る。したがって、ステップ502は、クライアントシステム210の操作者がブラウザ212を使用してウェブサイトに移動し、それによって、ウェブページ214を要求するステップを伴い得る。
【０１３５】
もちろん、ウェブアプリ214またはアプリケーション214をウェブページ214の代わりに使用する実施形態において、ステップ502は、クライアントシステム210がプロバイダシステム280に、ウェブアプリ214またはアプリケーション214をダウンロードする(または備えるまたはインストールしてある)要求を発行するステップを伴い得る。要求は、ネットワーク270を介して伝達され得る。したがって、たとえば、プロバイダシステム280は、アプリストアとして構成されている1つまたは複数のサーバを備え得る。したがって、ステップ502は、クライアントシステム210の操作者がブラウザ212を使用してウェブサイト(たとえば、プロバイダシステム280によって提供され/ホストされる、アプリストアのウェブサイト)に移動するステップと、ウェブサイトとインタラクティブにやり取りすることによって、ウェブアプリ214またはアプリケーション214のダウンロード(または提供またはインストール)をクライアントシステム210に対して要求するステップとを伴うことが可能である。次の説明は、ウェブページ214を参照するものとするが、これはウェブアプリ214およびアプリケーション214と同様に、および等しく適用されることが理解されるであろう。
【０１３６】
要求に応答して、ステップ504で、プロバイダシステム280は、ウェブページ214をクライアントシステム210に提供する。ウェブページ214は、ネットワーク270を介して提供/伝達され得る。
【０１３７】
上で述べたように、ウェブページ214は、保護されたコード216を含む。したがって、クライアントシステム210にウェブページ214(保護されたコード216を含む)を提供することができるようにするために、プロバイダシステム280は、保護されたコード227を、プロバイダシステム280がその保護されたコード227をウェブページ214の保護されたコード216として使用できるように保護システム220に要求し得る。したがって、図5aに示されているように、オプションのステップ506において、プロバイダシステム280は、保護されたコード227を保護システム220に要求し、その要求に応答して、保護システム220は保護されたコード227をプロバイダシステム280に提供し得る。保護システム220が保護されたコード227に対する要求を受信し、そのような要求に応答して保護されたコード227を提供し得る際に使用される方法は、図4を参照しつつ上で説明されている。上で説明されているように、保護システム220は、制御システム230が保護されたコード227のどのインスタンスをプロバイダシステム280に提供するかを決定するように制御システム230と通信し得る。
【０１３８】
代替的に、プロバイダシステム280は、保護されたコード227を、プロバイダシステム280がその保護されたコード227をウェブページ214の保護されたコード216として使用できるように制御システム230に要求し得る。したがって、図5aに示されているように、オプションのステップ506において、プロバイダシステム280は、保護されたコード227を制御システム230に要求し、その要求に応答して、制御システム230は保護されたコード227をプロバイダシステム280に提供し得る。制御システム220が保護されたコード227を取得するために保護システム220とインタラクティブにやり取りする際に使用され得る方法は、図4を参照しつつ上で説明されている。上で説明されているように、制御システム230は、保護されたコード227のどのインスタンスをプロバイダシステム280に提供するかを決定し得る。
【０１３９】
代替的に、プロバイダシステム280は、保護されたコード227の1つまたは複数のインスタンスを保護システム220によって以前に供給されたことがあり得、したがって、プロバイダシステム280は、保護されたコード227の1つまたは複数のインスタンスをすでに記憶しているものとしてよい(またはアクセスできるか、もしくは取得しているものとしてよい)。同様に、いくつかの実施形態において、プロバイダシステム280は、データベース229に直接アクセスすることができるものとしてよい。したがって、プロバイダシステム280は、ウェブページ214の保護されたコード216としてプロバイダシステム280がアクセスできる保護されたコード227のこれらのインスタンスのうちの1つを使用し得る。上で説明されているように、プロバイダシステム280は、制御システム230が保護されたコード227のどのインスタンスをプロバイダシステム280が提供すべきかを決定するように制御システム230と通信し得る。
【０１４０】
したがって、プロバイダシステム214は、ウェブページ214に対するテンプレート(たとえば、HTMLコードおよび/またはCCSコードおよび/または保護されたコード216以外のコード215を含む)を記憶し、ステップ504において、保護されたコード227をウェブページ214の保護されたコード216としてテンプレート内に入れるか、または組み込むことによってクライアントシステム210に提供される(または送信される、または伝達される)べきであるウェブページ214(の特定のバージョン)を形成するものとしてよい。
【０１４１】
保護されたコード227が初期コード222の特定の(一意的な)保護されたインスタンスである実施形態において、保護されたコード227のその特定のインスタンスに関連付けられているメタデータ228は、保護されたコード227のこのインスタンスの提供に関する情報を記憶するか、または含むように更新されるものとしてよく、この情報は保護されたコード227の提供の日時、保護されたコード227のインスタンスを要求したプロバイダシステム280の詳細(名前または他の識別子、IPアドレスなど)、保護されたコード227のインスタンスが提供されるべきクライアントシステム210の詳細(名前または他の識別子、IPアドレス、ユーザの同一性、など)、保護されたコード227の特定のインスタンスの識別(たとえば、IDまたはバージョン番号)などのうちの1つまたは複数などである。したがって、プロバイダシステム280は、データベース229それ自体において直接メタデータ228を更新し得るか(データベース229にアクセスできる場合)、またはこの情報を保護システム220に供給するものとしてよく(たとえば、保護されたコード227を要求したとき)、それにより、保護システム220はこの情報をデータベース229内にメタデータ228の一部として記憶することができる。
【０１４２】
ステップ508において、クライアントシステム210(またはクライアントシステム210のブラウザ212)は、ウェブページ214を処理するか、または実行する。図3を参照しつつ上で述べたように、これは、クライアントシステム210が1つまたは複数の要求を形成して制御システム230に送信するステップと、次いで制御システム230からクライアントシステム210によって受信された対応する返信を処理するステップとを伴う。これの例は、図3を参照しつつ説明されている。
【０１４３】
ステップ510において、制御システム230は、クライアントシステム210から受信された要求(すなわち、ウェブページ214の処理または実行により送信された要求)を処理し、クライアントシステム210に対応する返信を送信する。これの例は、図3を参照しつつ説明されている。
【０１４４】
クライアントシステム210から受信された要求の、制御システム230による処理は、図5におけるオプションのステップ512によって示されているように、制御システム230がサービスシステム250とインタラクティブにやり取りするステップを含み得る。これは、図6aに関して以下でより詳しく説明される。
【０１４５】
図5bは、本発明のいくつかの実施形態によるシステム200を動作させる別の例示的な方法550を示すフローチャートである。図5bの方法550が図5aの方法500と共通に有しているステップは、同じ参照番号を共有し、したがって、以下では再び詳しく説明しないものとする。
【０１４６】
ステップ502において、クライアントシステム210は、ウェブページ214(またはウェブアプリ214またはアプリケーション214)に対する要求をプロバイダシステム280に発行する。
【０１４７】
要求に応答して、ステップ552で、プロバイダシステム280は、あるバージョンのウェブページ214(またはあるバージョンのウェブアプリ214またはあるバージョンのアプリケーション214)をクライアントシステム210に提供する。提供されるバージョンは、保護されたコード216を含まないが、その代わりに、クライアントシステム210が保護システム220からおよび/または制御システム230から保護されたコード216を要求するか、または取得/アクセスすることを可能にするリンク、アドレス(たとえば、URL)、または情報を含み得る。
【０１４８】
そのバージョンのウェブページ214を受信した後、クライアントシステム210は、ステップ554において、上で述べたリンク、アドレス、または他の情報を使用して保護されたコード216に対する要求を保護システム220および/または制御システム230に送信するものとしてよい。要求は、ネットワーク270を介して伝達される。
【０１４９】
その要求に応答して、ステップ556で、保護システム220は、保護されたコード227をクライアントシステム210に提供し得る。保護システム220が保護されたコード227に対する要求を受信し、そのような要求に応答して保護されたコード227を提供し得る際に使用される方法は、図4を参照しつつ上で説明されている。上で説明されているように、保護システム220は、制御システム230が保護されたコード227のどのインスタンスをプロバイダシステム280に提供するかを決定するように制御システム230と通信し得る。代替的に、制御システム230は、保護されたコード227をクライアントシステム210に提供し得る。制御システム230は、データベース229から保護されたコード227を取得するものとしてよく(制御システム230がデータベース229への直接アクセスを行える場合)、代替的に、制御システム230は、保護されたコード227を保護システム220に要求するものとしてよい。上で説明されているように、制御システム230は、保護されたコード227のどのインスタンスをプロバイダシステム280に提供するかを決定し得る。保護されたコード227は、ネットワーク270を介してクライアントシステム210に伝達されてよい。
【０１５０】
保護されたコード227が初期コード222の特定の(一意的な)保護されたインスタンスである実施形態において、保護されたコード227のその特定のインスタンスに関連付けられているメタデータ228は、保護されたコード227のこのインスタンスの提供に関する情報を記憶するか、または含むように保護システム220および/または制御システム230によって更新されるものとしてよく、この情報は保護されたコード227の提供の日時、保護されたコード227のインスタンスが提供されるべきクライアントシステム210の詳細(名前または他の識別子、IPアドレス、ユーザの同一性、など)、などのうちの1つまたは複数などである。いくつかの実施形態において、制御システム230およびクライアントシステム210は、制御システム230が保護されたコード227のどの特定のインスタンスをクライアントシステム210が現在実行しているかを識別することができるようにセッションクッキーを使用し得る。
【０１５１】
方法550のための処理は、次いで、図5aについて上で説明されているセットとしてステップ508および510(および任意選択でステップ512)を続行してよい。
【０１５２】
図6aは本発明のいくつかの実施形態による図3のステップ308の一部としてコントローラアプリケーション232によって実行され得る例示的な方法600を示すフローチャートである。方法600は、制御システム230がサービスシステム250をインタラクティブに操作するステップを伴い得る。
【０１５３】
上で説明されているように、ステップ302において、クライアントシステム210は、制御システム230が検証および/または認証および/または他の機能を実行することを可能にする情報を含む要求を生成する。この情報に加えて、クライアントシステム210によって生成される要求は、
(a)クライアントシステム210がサービスシステム250から(たとえば、ウェブページ214に関連付けられているウェブサイトから)取得する(または要求する)ことを望んでいる情報を識別するデータ、および/または
(b)クライアントシステム210がサービスシステム250に提供することを望んでいるデータ(たとえば、サービスシステム250がそのデータに基づきその後の処理を実行することを可能にする)
を含み得る。
【０１５４】
上で説明されているように、ステップ308は、制御システム230が保護されたコード216(の特定のインスタンス)の識別を決定するか、または取得するステップおよび/または1つまたは複数のテストもしくはチェックを実行するステップを含み得る。これは、図6aにステップ602として示されており、この後すぐ図6bを参照しつつより詳しく説明される。
【０１５５】
ステップ602において、制御システム230は、制御システム230がサービスシステム250と通信しなくても応答が生成されてクライアントシステム210に送り返されることが行われ得るか、または行われるべきであると決定し得る。たとえば、以下のとおりである。
-  保護されたコード216および/またはコード215および/またはウェブサイト214の検証または認証は失敗することがあり、たとえば、検証または認証の結果は、クライアントシステム210が十分に信頼できる/安全であるということがないこと、および/または攻撃者が攻撃を実行している可能性があることを指示し得る。したがって、制御システム230は、この失敗が生じた場合に、クライアントシステム210に送り返されるべき応答が、クライアントシステム210がコード215および/またはウェブページ214のコンテンツにアクセスすること、またはコード215および/またはウェブページ214によって提供される「通常の」機能を実行することを防ぐものであるように構成され得る。そのような応答は、たとえば、保護されたコード216が(ステップ312において)検出するように配置構成されているフラグ(または他のデータ)を含むものとしてよく、保護されたコード216は、このフラグを検出した場合に、保護されたコード216が「通常の」機能を提供することを停止するように構成されるものとしてよく、代替的に、応答は、たとえば、保護されたコード216および/またはコード215および/またはウェブページ214が処理すべきであるデータを含むものとしてよく、このデータの結果、保護されたコード216および/またはコード215および/またはウェブページ214のエラー/例外機能が呼び出されるか、または保護されたコード216および/またはコード215および/またはウェブページ214が終了する(たとえば、データは、予想される形式に従ってフォーマットされたデータとは対照的にランダムデータであってよい)。これらの状況のうちのどれにおいても、制御システム230は、サービスシステム250と通信する必要はない。
-  同様に、ステップ602における処理で、ブラウザ212またはクライアントシステム210の設定/構成がセキュリティ基準および/または所望の設定/構成を満たさないと決定し得る。これは、クライアントシステム210が十分に信頼できる/安全であるということがないこと、および/または攻撃者が攻撃を実行している可能性があることを示す指示として解釈されてよい。したがって、制御システム230は、この状況において、クライアントシステム210に送り返されるべき応答によって、これらの設定/構成のクライアントシステム210における調整を開始して、ターゲットセキュリティ基準または所望の設定/構成の条件を満たすように構成され得る。この状況において、制御システム230は、サービスシステム250と通信する必要はない。
-  保護されたコード216および/またはコード215および/またはウェブサイト214の検証または認証は成功することがあり、たとえば、検証または認証の結果は、クライアントシステム210が十分に信頼できる/安全であること、および/または攻撃が検出されていないことを指示し得る。制御システム230は、この状況において、クライアントシステム210に送り返されるべき応答によって、クライアントシステム210からの要求の受信を通知するように構成され得る。この状況において、制御システム230は、サービスシステム250と通信する必要がない場合がある。
-  制御システム230がサービスシステム250と通信しなくてもクライアントシステム210に送り返されるべき応答が生成され得る他のシナリオもあり得ることは理解されるであろう。
【０１５６】
クライアントシステム210からの要求の性質により、クライアントシステム210に送り返されるべき応答が、制御システム230がサービスシステム250と通信しなくても生成され得るか、または生成されるべきである上記の状況において、制御システム230は、それでも、情報をサービスシステム250に送信し、たとえば、制御システム230がクライアントシステム210からそのような要求を受信したという事実を報告するものとしてよい。
【０１５７】
次いで、コントローラアプリケーション232は、ステップ608でしかるべくクライアントシステム210に送り返されるべきである応答を生成し得る。
【０１５８】
しかしながら、ステップ602における処理の結果は、制御システム230がサービスシステム250とインタラクティブにやり取りする(または通信する)場合にのみ応答が生成されクライアントシステム210に送り返され得ると制御システム230が決定することであり得る。この状況において、方法600は、ステップ604、および任意選択で、ステップ606を含む。ステップ604において、制御システム230は、ネットワーク270を介してステップ306でクライアントシステム210から受信された要求(または上で述べたデータ(a)および/または(b)などの、その要求に含まれる情報の少なくとも一部)の(または関係する)データをサービスシステム250に受け渡すか、または伝達し得る。次いで、コントローラアプリケーション232は、しかるべくクライアントシステム210に送り返されるべきである応答を生成し得る。いくつかの実施形態において、サービスシステム250は、受信されたデータを(たとえば、図5aおよび図5bのステップ512において)処理し、対応する返信(その処理に基づく)を制御システム230に送り返す。したがって、ステップ606において、制御システム230は、サービスシステム250から返信を受信し得る。この場合、次いで、コントローラアプリケーション232は、サービスシステム250からの返信に基づきクライアントシステム210に送り返されるべきである応答を生成し得る。
【０１５９】
たとえば、以下のとおりである。
-  保護されたコード216および/またはコード215および/またはウェブサイト214の検証または認証は成功することがあり、たとえば、検証または認証の結果は、クライアントシステム210が十分に信頼できる/安全であること、および/または攻撃が検出されていないことを指示し得る。クライアント210から受信された要求は、サービスシステム250からの情報もしくはデータに対する要求であり得るか、または含み得る。したがって、ステップ604において、コントローラアプリケーションは、情報を求めるこの要求をサービスシステム250に転送し、ステップ606において、コントローラアプリケーション232は、要求された情報(または要求された情報が利用可能でないことを指示する応答などの別の応答)をサービスシステム250からの返信として受信し得る。したがって、コントローラアプリケーション232は、ステップ608で、クライアントシステム210に送り返されるべき応答を形成するものとしてよく、この応答はサービスシステム250からの返信を含むか、または返信に基づく(たとえば、応答は、要求された情報を含み得る)。
-  保護されたコード216および/またはコード215および/またはウェブサイト214の検証または認証は成功することがあり、たとえば、検証または認証の結果は、クライアントシステム210が十分に信頼できる/安全であること、および/または攻撃が検出されていないことを指示し得る。クライアント210から受信された要求は、サービスシステム250に送信される必要がある(が、情報の処理に基づくサービスシステム250からの返信が予想されない)情報もしくはデータであり得るか、または含み得る。したがって、ステップ604において、コントローラアプリケーションは、この情報をサービスシステム250に転送し、ステップ608において、情報がサービスシステム250に送信されたことを指示するクライアントシステム210に返す応答を形成する。
-  保護されたコード216および/またはコード215および/またはウェブサイト214の検証または認証は失敗することがあり、たとえば、検証または認証の結果は、クライアントシステム210が十分に信頼できる/安全であるということがないこと、および/または攻撃者が攻撃を実行している可能性があることを指示し得る。いくつかの実施形態において、コントローラアプリケーション604は、この失敗の性質を示すデータをサービスシステム250に提供する。次いで、サービスシステム250は、失敗に応答して特定の処理を実行し(たとえば、クライアントシステム210に関連付けられている顧客のアカウントをロックする)、サービスシステム250に、これが取ったアクションまたは処理および/またはサービスシステム250側でクライアントシステム210に引き受けてもらいたいアクションの指示を送り返すものとしてよい。したがって、ステップ606において、コントローラアプリケーション232は、サービスシステム250からの返信としてこの指示を受信し得る。したがって、コントローラアプリケーション232は、ステップ608において、クライアントシステム210に返される応答(この指示を含む応答などの)を形成し得る。
-  制御システム230とサービスシステム250との間に最初に通信またはインタラクティブなやり取りがあった場合に、クライアントシステム210に送り返されるべき応答が生成され得る他のシナリオもあるものとしてよいことは理解されるであろう。
【０１６０】
このようにして、制御システム230は、効果的に、クライアントシステム210とサービスシステム250との間のプロキシとして働き得る。クライアントシステム210では、それがサービスシステム250と直接通信していると確信し得るが、通信は、制御システム230にリダイレクトされてよい。したがって、制御システム230は、クライアントシステム210とサービスシステム250との間の動的保護/セキュリティチェックおよび実施を効果的に実現する。クライアントシステム210が適切なセキュリティおよび構成を有し、攻撃が開始されない(または少なくとも検出されない)場合、クライアントシステム210およびサービスシステム250は、互いに(クライアントシステム210がサービスシステム250によって提供されるサービスにアクセスできるように)継ぎ目なくインタラクティブにやり取りし得る。しかしながら、クライアントシステム210が適切なセキュリティおよび構成を有せず、および/または攻撃が開始された(または少なくとも検出された)場合、制御システム230は、これらのセキュリティ/構成/攻撃問題に対処する対策(上で述べたような)を講じるものとしてよい。
【０１６１】
クライアントシステム210と制御システム230との間のセキュリティ保護された通信の性質-クライアントシステム210によって送信された要求および制御システム230によって送信された応答の両方に対する-(保護されたコード216およびコントローラアプリケーション232によって提供されるような)により、クライアントシステム210は、そうでなく通常であればクライアントシステム210と制御システム230との間においてセキュリティ保護されたセッションを確立するために使用される通常のクッキーまたは他のタイプのAPI鍵を使用する(または少なくとも依存する)必要がない。これは、クライアントシステム210と制御システム230との間の通信(保護されたコード216およびコントローラアプリケーション232によって提供されるような)がセキュリティ保護され、制御システム230がクライアントシステム210の同一性およびウェブページ214(またはコード215または保護されたコード216)の真正性/完全性の両方をクライアントシステム210において確認することができるからである。その代わりに、そのようなクッキーまたは他のタイプのAPI鍵が、制御システム230とサービスシステム250との間の通信に使用されてよいが、これらのシステムは、攻撃者(クライアントシステム210にのみアクセスできる)の制御の外にある。したがって、セキュリティが改善される。
【０１６２】
コントローラアプリケーション232は、クライアントシステム210から受信された(ステップ306において)要求からデータを抽出し、そのデータを(データそれ自体またはデータのトークン化されたバージョンのいずれかとして)リポジトリ260内のデータ262として記憶するように配置構成され得る。コントローラアプリケーション232は、サービスシステム250をインタラクティブに操作する一環として(たとえば、図5aおよび図5bのステップ510および512、または図6aのステップ604)、クライアントシステム210からの要求の一部として受信された実際のデータをサービスシステム250に提供する代わりに、サービスシステム250に、サービスシステム250がリポジトリ260から対応するデータ262をどこで、および/またはどのようにして、取得またはアクセスすることができるかを示す指示を提供し得る。この方法によるリポジトリ260の使用は、セキュリティを高めるのに役立ち得る。それに加えて、コントローラアプリケーション232は、データ(またはトークン化されたデータ)をリポジトリ262内に暗号化または変換方式で記憶するものとしてよく、次いで、サービスシステム250は、暗号化されるか、または変換されたデータを、潜在的に、暗号化されたデータを暗号解読する、または先に変換を元に戻すことなく、操作する、使用する、他の何らかの方法で使用/アクセスするように配置構成され得る。コントローラアプリケーション232およびサービスシステム250は、1つまたは複数の暗号鍵、または他の暗号情報を共有し、これが生じることを可能にするものとしてよい。ここでもまた、これは、全体的なセキュリティを改善するのを助ける。
【０１６３】
ステップ602において、コントローラアプリケーション232が、チェック/テストのうちの1つまたは複数に通らなかった(たとえば、保護されたコード216および/またはコード215および/またはウェブページ214の検証または認証が失敗した)ことを識別した場合に、コントローラアプリケーション232は、保護されたコード216のインスタンスの、その特定のクライアントシステム210への提供を変更することを、たとえば、(a)クライアントシステム210が保護されたコード216の異なるインスタンスを受信する頻度を増やし(たとえば、上で述べたパラメータWを小さくし)、それによって、クライアントシステム210のユーザが保護されたコード216の挙動を学習し、攻撃を首尾よく開始しようとする試みを難しくするステップ、(b)保護されたコード216の同じインスタンスがそのクライアントシステム210に常に提供されることを確実にし(すなわち、上で述べたパラメータWを無限大に設定する)、それによって攻撃の影響をその1つの特定のインスタンスだけに制限するステップ、(c)そのクライアントシステム210に提供された保護されたコード216のその後のインスタンスが、保護されたコード216がクライアントシステム210に関するさらなる情報および/またはクライアントシステム210のユーザによる活動の情報を収集し、それによって可能な攻撃に関係する証拠を収集することを可能にする追加の機能を有することを確実にするステップ、(d)そのクライアントシステム210への保護されたコード216のインスタンスのさらなる提供を防ぐステップのうちの1つまたは複数を実行することによって行うように配置構成され得る。
【０１６４】
図6bは、本発明のいくつかの実施形態による図3のステップ308(または図6aのステップ602)におけるいくつかの実施形態において実行され得る例示的な処理650を示すフローチャートである。
【０１６５】
ステップ652において、コントローラアプリケーション232は、ステップ306においてコントローラアプリケーション232によって受信された要求の中の保護されたコード216によって提供されるデータに基づき、保護されたコード216(またはコード215またはウェブページ214)の識別子を取得する(または導出する)。
【０１６６】
ステップ654において、コントローラアプリケーション232は、この識別子を使用して保護されたコード216(の特定のインスタンス)に関連付けられているメタデータ228を取得し得る。たとえば、データベース229は、識別子に従ってインデックスを作成されるものとしてよく、それにより、コントローラアプリケーション232は、ステップ652で取得された識別子を使用して、データベース229にインデックスを作成し、関連付けられているメタデータ228にアクセスすることができる。
【０１６７】
ステップ656において、コントローラアプリケーション232は、完全性検証を実行するためにステップ306においてコントローラアプリケーション232によって受信された要求の中の保護されたコード216によって提供されるデータとともにステップ654においてアクセスされたメタデータ228のうちの少なくとも一部を使用し得る。たとえば、ステップ306においてコントローラアプリケーション232によって受信された要求の中の保護されたコード216によって提供されるデータの少なくとも一部は、クライアントシステム210において現在の保護されたコード216(または現在コード215または現在のウェブページ214)から導出された(または基づく)1つまたは複数の値(たとえば、上で述べた修正データ)を含むものとしてよく、ステップ654において取得されたメタデータ228は、1つまたは複数の予想される完全性値を含むものとしてよく-したがってコントローラアプリケーション232は、要求で受信された1つまたは複数の値を1つまたは複数の予想される完全性値と比較するものとしてよく-要求で受信された1つまたは複数の値が1つまたは複数の予想される完全性値と一致する(または等しい)場合、コントローラアプリケーション232は、保護されたコード216(またはコード215またはウェブページ214)が改竄されていないと決定し、そうでない場合、コントローラアプリケーション232は、攻撃が実行されている(または実行された)こと、および保護されたコード216(またはコード215またはウェブページ214)は改竄されていたことを決定し得る。コントローラアプリケーション232は、要求で受信された1つまたは複数の値および予想される完全性値を使用して完全性検証を実行する他の処理を実行し得る。
【０１６８】
したがって、ステップ652、654、および656の結果は、(a)コントローラアプリケーション232が保護されたコード216(のインスタンス)のどれと通信しているか、および保護されたコード216(またはコード215またはウェブページ214)(のインスタンス)が改竄または修正されていないことを正確に(確信を持って)認識するか、または(b)コントローラアプリケーション232が保護されたコード216(のインスタンス)のどれと通信しているかを正確に(確信を持って)突き止めることができないことがあり得るか、または(c)コントローラアプリケーション232が保護されたコード216(のインスタンス)のどれと通信しているか、および保護されたコード216(またはコード215またはウェブページ214)(のインスタンス)が改竄または修正されていることを正確に(確信を持って)認識するかのいずれかであり得る。(b)または(c)が生じた場合、コントローラアプリケーション232は、適切な対策を講じるものとしてよく(上で説明されているように、ウェブページ214がその通常の/予想される機能を実行することなどを防ぐ)、(a)が生じた場合、コントローラアプリケーション232は、ウェブページ214が十分に安全な方式で合法的に実行されていると決定し得る(ステップ658におけるさらなる処理の結果を条件として)。保護されたコード216は、ホワイトボックス攻撃に耐えられるように設計された保護方法で実装されているので、コントローラアプリケーション232は、ステップ652および656の結果を信頼することができ、さらに、セキュリティポリシーを実施するためにコントローラアプリケーション232が保護されたコード216に対して実装することを望んでいる対策が実際に実施されることを信頼できる。
【０１６９】
ステップ658において、コントローラアプリケーション232は、上で説明されたように、1つまたは複数のさらなるテストまたはチェックまたは他の機能(保護されたコード216がクライアントシステム210のデバッグ環境内で実行されているかどうかのチェックなど)を実行し得る。
【０１７０】
3-例示的なデプロイメントシナリオ
以下では、システム200に対するいくつかの例示的なデプロイメントシナリオについて述べる。もちろん、システム200に対する他の多くのデプロイメントシナリオおよびアプリケーションが可能であること、および以下に与えられた例が、例示することのみを目的としていることは理解されるであろう。
【０１７１】
3.1-金融取引システム1
サービスシステム250は、プロバイダシステム280と同じエンティティであるか、またはプロバイダシステム280のサブシステムであってよい。プロバイダシステム280は、銀行のウェブサイト(または他の何らかの金融機関)のウェブサイトをホストし得る。したがって、クライアントシステム210がプロバイダシステム280から取得するウェブページ214は、クライアントシステム210の操作者が銀行口座(または他の金融口座もしくは金融商品)をインタラクティブに操作することを可能にするウェブページ214であってよい。代替的に、クライアントシステム210は、銀行が顧客に対して利用可能にしているアプリケーション214(またはウェブアプリ214)を走らせているものとしてよい。
【０１７２】
したがって、クライアントシステム210は、制御システム230を介して銀行のサービスシステム250とインタラクティブにやり取りするように配置構成され得る。したがって、保護されたコード216は、コントローラアプリケーション232(図3を参照しつつ上で説明されているような)と連携して、(1)保護されたコード216および/またはコード215および/またはウェブページ214が修正されていないかどうかをチェックし、そのような修正が検出された場合に、クライアントシステム210がサービスシステム250とインタラクティブにやり取りすることを阻止し、および/またはサービスシステム250に可能性のあるセキュリティ違反を通知するステップ、(2)保護されたコード216および/またはコード215がクライアントシステム210のデバッガ内で実行されていないかどうかをチェックし、保護されたコード216および/またはコード215がクライアントシステム210のデバッガ内で実行されないことを強制するステップなどのうちの1つまたは複数を実行するように配置構成され得る。
【０１７３】
3.2-金融取引システム2
サービスシステム250は、プロバイダシステム280と異なっていてよい。プロバイダシステム280は、オンラインマーチャント(すなわち、小売業者)のウェブサイトをホストし得る。サービスシステム250は、決済/金融サービスを提供し、マーチャントの顧客がマーチャントによって提供される商品もしくはサービスの対価をマーチャントに支払うか、または他の何らかの形でマーチャントと金融に関してインタラクティブにやり取りすることを可能にするものとしてよい。
【０１７４】
したがって、クライアントシステム210がプロバイダシステム280から取得するウェブページ214は、クライアントシステム210の操作者がクレジットカードの詳細(または他の決済情報)を入力し、マーチャントから商品もしくはサービスを購入する際の決済を行うことを可能にするウェブページ214であってよい。
【０１７５】
したがって、保護されたコード216は、コントローラアプリケーション232(図3を参照しつつ上で説明されているような)と連携して、(1)保護されたコード216および/またはコード215および/またはウェブページ214が修正されていないかどうかをチェックし、そのような修正が検出された場合に、クライアントシステム210がサービスシステム250とインタラクティブにやり取りするのを阻止し、および/またはサービスシステム250(および/またはプロバイダシステム280)に可能性のあるセキュリティ違反を通知するステップ、(2)保護されたコード216および/またはコード215がクライアントシステム210のデバッガ内で実行されていないかどうかをチェックし、保護されたコード216および/またはコード215がクライアントシステム210のデバッガ内で実行されないことを強制するステップ、(3)ウェブページ214によるデータフィールドの妥当性確認(カード検証値(またはCVV番号)または有効期限など)が無効化されていないかどうかをチェックし、無効化されていれば、再有効化するステップなどのうちの1つまたは複数を実行するように配置構成され得る。
【０１７６】
3.3-コンテンツプレーヤシステム
この例では、サービスシステム250は、プロバイダシステム280と同じエンティティであるか、またはプロバイダシステム280のサブシステムであり得るか、またはプロバイダシステム280と異なっていてもよい。サービスシステム250は、コンテンツ配布ネットワーク(CDN)(またはCDNの少なくとも1つまたは複数サーバ)の形態をとり得る。CDNはよく知られており、したがって、本明細書でより詳しく説明されない。コンテンツは、たとえば、オーディオコンテンツ、ビデオコンテンツ、および画像コンテンツのうちの1つまたは複数を含み得る。プロバイダシステム280は、CDNからのデジタルコンテンツにアクセスするためのウェブサイトをホストするものとしてよく、これにより、クライアントシステム210がプロバイダシステム280から取得するウェブページ214は、コンテンツ/メディアプレーヤの少なくとも一部を実装する保護されたコード216を含み得る。代替的に、クライアントシステム210は、プロバイダシステム280が利用可能にしたコンテンツ/メディアプレーヤアプリケーション214(またはウェブアプリ214)を動作させているものとしてよい。
【０１７７】
したがって、保護されたコード216は、コントローラアプリケーション232(図3を参照しつつ上で説明されているような)と連携して、(1)保護されたコード216および/またはコード215および/またはウェブページ214が修正されていないかどうかをチェックし、そのような修正が検出された場合に、ウェブページ214がコンテンツをさらに再生することを防ぐステップ、(2)保護されたコード216および/またはコード215がクライアントシステム210のデバッガ内で実行されていないかどうかをチェックし、保護されたコード216および/またはコード215がクライアントシステム210のデバッガ内で実行されないことを強制するステップなどのうちの1つまたは複数を実行するように配置構成され得る。
【０１７８】
図7aは、本発明のいくつかの実施形態により、保護されたコード216が、たとえば、上で述べた完全性/修正および強制を実装するために、(図3の方法300で述べている方式で)コントローラアプリケーション232と連携し得る方法700を示すフローチャートである。図7bは、本発明のいくつかの実施形態によるこの完全性/修正検査および強制を達成するために保護されたコード216の一部として(上で説明されているようなセキュリティ保護された方式で)実装され得るモジュールのうちのいくつかの概略を示す図である。
【０１７９】
ステップ702において、保護されたコード216は、暗号化されたコンテンツE(c,k)を受信し、cはコンテンツであり、kはコンテンツを暗号解読するための鍵である(ここで,E(x,y)という項は、暗号解読鍵kを使用して暗号解読可能であるデータxの暗号化形式を表すために使用されるものとする)。
【０１８０】
ステップ704において、保護されたコード216の修正モジュール750は、可逆修正関数Mを暗号化されたコンテンツE(c,k)に適用する。修正関数Mは、データdに関するシード値、鍵を与えられるか、または他の何らかの形でデータdに依存する。したがって、修正関数Mはそれ自体、暗号化演算であってよいが、暗号化されたコンテンツE(c,k)とデータd(またはデータdに基づく値)とのXORなどのより単純な演算が代わりに使用できることも理解されるであろう。したがって、ステップ704の出力は、修正され暗号化されたコンテンツM(E(c,k),d)である。
【０１８１】
データdは、コントローラアプリケーション232から保護されたコード216にすでに与えられているものとしてよい(すなわち、データdは、動的値/データであってよい)。代替的に、データdは、静的値であってよい。代替的に、データdは、保護されたコード216が生成し(たとえば、乱数/データ)、コントローラアプリケーション232に提供する(ステップ706における要求の一部として)ように配置構成される値であってよい。保護されたコード216は、上で説明されているソフトウェア保護技術のうちの1つまたは複数を使用するセキュリティ保護された方式であるにもかかわらず、(保護されたコード216それ自体の中に、またはクライアントシステム210のメモリ内に一時変数として)データdを記憶するように配置構成される。
【０１８２】
ステップ706において、保護されたコード216は、要求をコントローラアプリケーション232に送信し、要求は、コントローラアプリケーション232がその完全性処理および/または真正性処理および/または他のチェック/テストを実行することを可能にするデータを含む。これは、図3のステップ302および304に対応する。
【０１８３】
ステップ708において、コントローラアプリケーション232は、その完全性処理および/または真正性処理および/または他のチェック/テストを実行する。
【０１８４】
ステップ710において、コントローラアプリケーション232は、ステップ708における処理の結果に基づき、クライアントシステム210がコンテンツcを表示/コンテンツcにアクセスすることを許されているかどうかを決定する。コントローラアプリケーション232が、クライアントシステム210がコンテンツcを表示/コンテンツcにアクセスすることを許されていると決定した場合、ステップ712において、コントローラアプリケーション232はデータdを含む応答を生成する。他方で、コントローラアプリケーション232が、クライアントシステム210がコンテンツcを表示/コンテンツcにアクセスすることを許されていないと決定した場合、ステップ714において、コントローラアプリケーション232はデータgを含む応答を生成し、ここでデータgはデータdに等しくない。データgは、たとえば、コントローラアプリケーション232によってランダムに生成され得る。
【０１８５】
応答は、それに加えて、次回ステップ704が実行されるときに保護されたコード216によって使用されるべきデータ値dに対する次/新規値を含み得る。dに対するこの新規データは、たとえば、コントローラアプリケーション232によってランダムに生成され得る。
【０１８６】
ステップ716において、コントローラアプリケーション232は、応答(データdまたはデータgを含む)をクライアントシステム210に送信する。
【０１８７】
したがって、ステップ708〜716はまとめて、図3のステップ306〜310に対応する。
【０１８８】
ステップ718において、保護されたコード216の逆修正モジュール752は、修正関数Mの逆関数M-1をステップ704で生成された修正された暗号化されたコンテンツM(E(c,k),d)に適用する。逆関数M-1は、コントローラアプリケーション232から応答の一部として受信されたデータ(データdまたはデータgとする)に関してシード値を与えられるか、または鍵を与えられるか、またはそのデータに他の何らかの形で依存する。そこで、以下のようになる。(a)コントローラアプリケーション232が、クライアントシステム210がコンテンツcを表示/コンテンツcにアクセスすることを許されていると決定していた場合、ステップ718の出力は、M-1(M(E(c,k),d),d)=E(c,k)、すなわち、元の暗号化されたコンテンツであるが、その一方で(b)コントローラアプリケーション232が、クライアントシステム210がコンテンツcを表示/コンテンツcにアクセスすることを許されていないと決定していた場合、ステップ718の出力は、M-1(M(E(c,k),d),g)≠E(c,k)、すなわち、元の暗号化されたコンテンツでない。
【０１８９】
ステップ720において、保護されたコード216の暗号解読モジュール754は、暗号解読演算D(暗号化演算Eに対応する)を、鍵kを使用しステップ718の出力上で実行する。したがって、(a)コントローラアプリケーション232が、クライアントシステム210がコンテンツcを表示/コンテンツcにアクセスすることを許されていると決定していた場合、ステップ720の出力は、D(E(c,k),k)=c、すなわち、元の暗号化されていないコンテンツであるが、その一方で(b)コントローラアプリケーション232が、クライアントシステム210がコンテンツcを表示/コンテンツcにアクセスすることを許されていないと決定していた場合、ステップ720の出力は、D(M-1(M(E(c,k),d),g),k)≠c、すなわち、元の暗号化されたコンテンツでない。
【０１９０】
上記の説明において、保護されたコード216に暗号化解読鍵kを与えることは、メディアプレーヤに暗号解読鍵を与えるための標準的な条件付きアクセスまたはデジタル権利管理プロセスを介して行われてよい。
【０１９１】
ステップ702と704との間で(ステップ704において適用される修正Mが暗号解読されたコンテンツc上で実行されるように)実行されるべきステップ720における暗号解読演算Dを移動することは可能であるが、暗号解読演算Dの前に修正Mおよび逆修正M-1を実行することは、コントローラアプリケーション232が、クライアントシステム210がコンテンツcを表示/コンテンツcにアクセスすることを許されていないと決定したときに、ステップ718における逆修正M-1に対するデータdの代わりに「不正な」データgを使用することが、暗号解読演算Dの出力が効果的にランダムデータ(したがって、クライアントシステム210またはその操作者によって使用できない)ように見えることを意味することを確実にするのに役立つことは理解されるであろう。
【０１９２】
図7bは、コード215および/または保護されたコード216の一部となり得る追加のモジュールを示している。たとえば、保護されたコード216は、コントローラアプリケーション232とインタラクティブにやり取りしてコントローラアプリケーション232がその完全性処理および/または真正性処理および/または他のチェック/テストを実行する(たとえば、図3のステップ302および304を実行する)ことを可能にするための1つまたは複数のモジュール770を備え得る。コード215および/または保護されたコード216は、メディアプレーヤ(破線780によって概念的に示されている)を実現するための1つまたは複数のさらなるモジュールを備え得る。たとえば、コード215は、必要なデータ展開を(暗号解読モジュール754の出力上で)実行するデータ展開モジュール760と、画像および/またはオーディオ出力を提供するレンダリングモジュール762(データ展開モジュール760の出力および/または暗号解読モジュール754の出力を使用する)とを備え得る。
【０１９３】
図8は、本発明のいくつかの実施形態による、保護されたコード216が、たとえば、上で述べた完全性/修正および強制を実装するために、(図3の方法300で述べている方式で)コントローラアプリケーション232と連携し得る、別の方法800を示すフローチャートである。方法800は、方法700のステップ702および704がステップ802によって置き換えられていることを除き、方法700と同じである。ステップ802において、保護されたコード216は、すでに修正された暗号化されたコンテンツM(E(c,k),d)を受信する。したがって、保護されたコード216は、修正関数Mを実装する必要はない(すなわち、修正モジュール750を必要としない)。
【０１９４】
したがって、クライアントシステム210は、修正されコンテンツM(E(c,k),d)を受信する。修正Mは、制御システム230によって、暗号化されたコンテンツE(c,k)に適用され、次いで制御システム230は修正されたコンテンツM(E(c,k),d)をクライアントシステム210に提供する。このようにして、制御システム230は、CDNの一部と見なされ得る。代替的に、制御システム230は、データdを、たとえば、サービスシステム250に提供するように配置構成されてよく、これによりサービスシステム250はデータdを使用して修正Mを暗号化されたコンテンツE(c,k)に適用し、次いでサービスシステム250は修正されたコンテンツM(E(c,k),d)をクライアントシステム210に提供する。
【０１９５】
図7cは、コンテンツプレーヤを実装するための代替的実施形態を例示している。保護されたコード216は、上で述べた暗号解読モジュール754、透かしモジュール790、および上で述べた追加のモジュール770を実装するように配置構成され得る。追加のモジュール770は、コントローラアプリケーション232とインタラクティブにやり取りしてコントローラアプリケーション232がその完全性処理および/または真正性処理および/または他のチェック/テストを実行する(たとえば、図3のステップ302および304を実行する)ことを可能にする。コントローラアプリケーション232から戻されて受信した応答が、クライアントシステム210がコンテンツcにアクセスすることを可能にするものである場合、保護されたコードによって実行される(ステップ314で)処理は、(a)暗号解読モジュール754が受信された暗号化されたコンテンツE(c,k)を暗号解読するステップと、(b)透かしモジュール790が透かしを暗号解読されたコンテンツに適用するステップとを含み得る。透かし入れは、上で説明されているように、よく知られている。次いで、透かしを入れたコンテンツは、必要なデータ展開を(透かしモジュール790の出力上で)実行するデータためにデータ展開モジュール760に受け渡されるものとしてよく、次いでレンダリングモジュール762が(データ展開モジュール760の出力および/または透かしモジュール790の出力を使用して)画像および/またはオーディオ出力を提供する。透かしモジュール790が展開されたコンテンツを操作する必要がある可能性があり、その場合、データ展開モジュール760は、保護されたコード216の一部をなすものとしてよく、暗号解読モジュール754から出力された暗号解読されたコンテンツは、次いで、データ展開モジュール760に受け渡され、そこで展開され、データ展開モジュール760によって出力される展開されたコンテンツは、次いで、透かしモジュール790によって透かしを入れられる。
【０１９６】
図7bおよび図7cの実施形態は、もちろん、図7dに示されているように、組み合わせることも可能である。
【０１９７】
3.4-ホームネットワークまたはLAN
システム200の少なくともいくつかは、ホームネットワークまたはローカルエリアネットワークの一部をなすか、またはホームネットワークまたはローカルエリアネットワークとして(または使用して)実装され得る。たとえば、家庭または企業は、1つまたは複数のクライアントデバイス210および制御システム230備えるものとしてよく、これらはローカルエリアネットワーク(ネットワーク270の一部)を介して互いに通信するか、またはホームネットワークの一部(ネットワーク270の少なくとも一部を伴う)をなす。したがって、コントローラアプリケーション232は、制御システム230上で実行されるセキュリティ保護され/保護されたアプリケーションであってよい。サービスシステム250および/またはプロバイダシステム280は、ローカルエリアネットワークに接続されるか、またはホームネットワークの一部をなし得る。このようにして、ホームネットワークまたはローカルエリアネットワーク上のデバイス210は、その同じネットワーク上で制御システム230を介してそのセキュリティおよび/または機能を制御させる(または維持させるまたは監視させる)ものとしてよいが、リモートサーバ(すなわち、ホームネットワークの外にあるサーバまたはローカルエリアネットワーク内にないサーバ)への接続を有していなくてよい。図5aおよび図5bを参照しつつ上で説明されているように、クライアントデバイス210がウェブページ214、ウェブアプリ214、またはアプリケーション214を(たとえば、プロバイダシステム280からまたは制御システム230から)取得し得る様々な方法がある。この例の本実施形態において、ウェブページ214、ウェブアプリ214、またはアプリケーション214のソースは、好ましくは、ホームネットワークまたはローカルエリアネットワークの一部でもある(家庭または企業が自立しているように)。
【０１９８】
同じことが、他の展開シナリオでも同様に適用される。たとえば、車両(たとえば、乗用車、大型トラック、オートバイ、列車、飛行機など)内または上に配置された、その車両上で確立されたローカルエリアネットワークを介して通信することができる1つまたは複数のクライアントデバイス210があり得る。車両は、上で述べたように、それらのクライアントデバイス210のセキュリティおよび/または機能を制御し(または維持しまたは監視し)得る制御システム230も備え得る。このようにして、セキュリティ保護されたシステムは、リモートサーバに頼ることなく車両内に確立され得る。上記のように、車両は、プロバイダシステム280および/またはサービスシステム250も備え得る。
【０１９９】
4-システム構成/セットアップ
図9は、本発明のいくつかの実施形態によりシステム200を最初に構成するか、またはセットアップするための方法900を示すフローチャートである。
【０２００】
ステップ902において、保護されたコード216に対する基礎となる機能は、指定/決定される。これは、少なくとも一部には、プロバイダシステム280の操作者および/またはサービスシステム250の操作者によって実行され得る。これは、どのような種類の完全性チェック、認証、セキュリティチェック、構成チェックなどが実行されるべきか、および完全性チェック、認証、セキュリティチェック、構成チェックなどの結果に基づき実装されるべき応答を決定するステップを伴い得る。これは、セキュリティ/構成ポリシーを確立するものとして見なされ得る。
【０２０１】
セキュリティ/構成ポリシーに基づき、初期コード222はステップ904において作成され得る。これは、ウェブページ214がコントローラアプリケーション232とインタラクティブにやり取りすることを可能にするために必要な1つまたは複数のモジュールを実装するステップを伴い得る(図3を参照しつつ上で説明されているように)。図7aおよび図7bに示されている例では、セキュリティ/構成ポリシーは、ウェブページ214の完全性チェックが失敗した場合、コンテンツへのアクセスは拒否されるべきであることを指定するものであってよく、この場合、ステップ904は、初期コード222が修正モジュール750、逆修正モジュール752、暗号解読モジュール754、および他のモジュール770のうちの1つまたは複数を含むべきであると決定するステップを伴い得る(コントローラアプリケーション232とインタラクティブにやり取りしてポリシーにおいて指定されている完全性チェックを達成するために必要に応じて)。それに加えて、または代替的に、これは、保護されたコード227の一部として記憶される必要のある秘密データ(たとえば、暗号鍵)の1つまたは複数の項目を指定するステップを伴い得る。本質的に、ステップ904は、(a)コントローラアプリケーション232が完全性チェック、認証、セキュリティチェック、構成チェックなどを実行することを可能にするためにコントローラアプリケーション232とインタラクティブにやり取りすることができ、(b)完全性チェック、認証、セキュリティチェック、構成チェックなどの結果としてコントローラアプリケーション232によって行われる決定を実施または実装することができるように、どのような機能(モジュール/コード)および/またはデータを初期コード222に含める必要があるかを決定するステップを伴い得る。
【０２０２】
ステップ906において、保護システムは、図4を参照しつつ上で説明されているように、保護されたコード227を生成し得る。
【０２０３】
ステップ908において、制御システム230のコントローラアプリケーション232は、セキュリティ/構成ポリシーを実装するように構成される。上で述べたように、ポリシーは、完全性チェック、認証、セキュリティチェック、構成チェックなどの様々な可能な結果に応じて所望の反応/処理を指定する。したがって、制御システム230は、たとえば、コントローラアプリケーション232のロジックを、ステップ308で適切な応答を生成し、必要に応じてサービスシステム250と適切にインタラクティブにやり取りするように構成することによって、これらの所望の反応を実装するように構成され/プログラムされる。
【０２０４】
セキュリティ/構成ポリシーは、クライアントシステム210の異なるユーザに対して異なる応答戦略を指定し得ることが理解されるであろう(たとえば、一部のユーザは信頼できる/プレミアムユーザであり得、それに対応する応答戦略を有し得るが、他のユーザはあまり信頼できないことがあり、したがって、異なる対応する応答戦略を有し得る)。したがって、セキュリティ/構成ポリシーでは、コントローラアプリケーション232が、たとえば、図6bのステップ652で取得される識別子に基づき、特定の応答戦略を識別し、使用するように構成されるべきであると指定し得る。
【０２０５】
5-例示的な技術
以下では、保護されたコード216およびコントローラアプリケーション232が、一緒に、上で述べた完全性検証、認証/同一性チェック、および他のテスト/チェックを実装し得るいくつかの例示的な技術として説明される。
【０２０６】
5.1-完全性検証
保護アプリケーション223によって生成される保護されたコード227(のインスタンス)について、メタデータ生成器226は、コード部分識別子の1つまたは複数のセットSi(ある整数Nについてi=1,...,N)を生成するように配置構成され得る。各セットSiは、コード部分識別子Pi,j(i=1,...,N、j=1,...,Di)の対応する数Di(Diは正整数である)を指定するか、または含む。各コード部分識別子Pi,j(i=1,...,N、j=1,...,Di)は、保護されたコード227内のコードおよび/またはデータの対応する部分Ai,j(または量)を識別するか、または指定する(保護されたコード227内で連続的である場合もない場合もある)。たとえば、各部分識別子Pi,j(i=1,...,N、j=1,...,Di)は、保護されたコード227内の対応する部分Ai,jの開始位置またはアドレス(たとえば、保護されたコード227の始まりからの、または保護されたコード227内の他の何らかの点からのオフセット)および対応する部分Ai,jの長さによって指定され得る(またはその開始位置またはアドレスおよび長さを含み得るまたはその開始位置またはアドレスおよび長さとして定義され得る)。部分Ai,jおよび/またはその識別子Pi,j(たとえば、開始位置および長さ)は、メタデータ生成器226によってランダムに選択され得る(たとえば、ランダムな開始位置およびランダムな長さ、ただし、最小の長さが長さの選択に課され得る)。それに加えて、または代替的に、メタデータ生成器226は、プロテクタモジュール224から入力を受信し、各セットSi(i=1,...,N)の中の識別子Pi,jのうちの少なくとも1つが保護されたコード227の1つまたは複数のターゲット(たとえば、重要な)部分(たとえば、機密情報を含み得るか、または保護されたコード227の異なる多様化されたインスタンスを区別するために使用される情報を含み得るか、または攻撃を開始したときに攻撃者が修正する可能性のある候補部分を含み得るので通常であれば完全性をチェックするのがよいことである部分)と少なくとも重なり合う部分Ai,jを指定することを確実にするなど、識別子Pi,j(i=1,...,N、j=1,...,Di)のうちの少なくともいくつかを生成するまたは識別するのを助けるものとしてよい。各セットSiに対応するコード部分Aijは、好ましくは、他のセットSiに対するコード部分Ai,jと異なる。保護されたコード227の各インスタンスに対するコード部分識別子Siのセットの集まりは、好ましくは、その保護されたコード227の他のインスタンスに対するコード部分識別子Siのセットの集まりと異なる。
【０２０７】
Nの値は、事前決定され得る。Nの値は、一方の保護されたコード227(のインスタンス)から他方の保護されたコード227(のインスタンス)まで変わり得る。好ましくは、Nの値は、完全性検証が、保護されたコード227がクライアントシステム210において使用されている(または使用されることが予想される)限り実行され続け得るほど十分に大きい(すなわち、十分なセットSi(i=1,...,N)が生成される)。i=1,...,Nについて、Diの値は、事前決定されてよく、代替的に、Diの値は、セットSiの間で変化し得る(たとえば、Diはランダムに生成され得るが、Diに対する事前決定された最小値が課せられ得る)。
【０２０８】
メタデータ生成器226は、チェック値生成器モジュールまたは関数を含み得る。チェック値生成器モジュールまたは関数は、コード部分識別子のセットSiを受信し、そのセットSiの識別子Pi,j(j=1,...,Di)によって識別される保護されたコード227内の部分Ai,jに基づきチェック値を生成するように配置構成され得る。これは、たとえば、部分Ai,j(j=1,...,Di)のハッシュである、または部分Ai,j(j=1,...,Di)に基づく、チェック値、たとえば部分Ai,j(j=1,...,Di)の連結(または他の何らかの組合せ)のハッシュまたは暗号ハッシュを作成するステップを伴うものとしてよく、(暗号)ハッシングアルゴリズムはよく知られており、したがって、本明細書では詳しく説明されないものとする。代替的に、これは、部分Ai,j(j=1,...,Di)の、または部分Ai,j(j=1,...,Di)に基づく、チェックサムなどの、何らかのチェック値、たとえば、部分Ai,j(j=1,...,Di)の連結(または他の何らかの組合せ)のチェックサムを作成するステップを伴い得る。チェック値生成器モジュールまたは関数は、秘密情報(暗号鍵など)を使用するものとしてよく、この秘密情報は、特定の保護されたコード227(のインスタンス)に特有のものであってよい。たとえば、ハッシングアルゴリズムが使用される場合、ハッシングアルゴリズムでは、実行されるハッシングにシード値を与えるかまたは構成するために暗号鍵を使用し得る。したがって、メタデータ生成器226は、チェック値生成器モジュールまたは関数を使用して、特定の保護されたコード227(のインスタンス)に基づく、または特定の保護されたコード227(のインスタンス)に対する、セットSi(i=1,...,N)の各々についてチェック値Viを生成するように配置構成され得る。メタデータ生成器226は、保護されたコード(のインスタンス)に関連付けられているメタデータ228の一部としてセットSi(i=1,...,N)およびそのそれぞれのチェック値Viを記憶するものとしてよい。
【０２０９】
次いで、プロテクタモジュール224は、チェック値生成器モジュールまたは関数を保護されたコード227の一部として(セキュリティ保護された方式で)含むように構成されてよく、これは、たとえば、図7bに示されているモジュール770のうちの1つとして実装され得る。チェック値生成器モジュールまたは関数は、特定の保護されたコード227(のインスタンス)に特有の上で述べた秘密情報(もしあれば)を使用するように構成される。したがって、保護されたコード227は、コード部分識別子のセットSiを受信し、保護されたコード227内(すなわち、それ自体の中)にあるセットSiによって指定された部分Ai,jに基づきチェック値を生成する機能を有する。
【０２１０】
図10aは、保護されたコード227に対して生成された上で述べたメタデータ228の、本発明のいくつかの実施形態による一例の概略を示している。図示されているように、メタデータ228は、保護されたコード227の特定のインスタンスに対する識別子(ID)を含み得る。メタデータ228は、コード部分識別子のセットSiおよび対応するチェック値Viを含む。メタデータ228は、もちろん、他のデータ1000も含み得る。図10aは、コード部分A1,j(j=1,...,D1)のみを示し、他のコード部分Ai,j(i=2,...,N、j=1,...,Di)を示していないが、これは単に例示を簡単にするためである。
【０２１１】
いくつかの実施形態において、コード部分Ai,jの一部または全部は、(a)ウェブページ214(たとえば、DOMのノードおよび/または特性などの、ウェブページ214のDOM)および/または(b)コード215(保護されたコード216/227以外)のコードおよび/またはデータを、保護されたコード216/227のコードおよび/またはデータの代わりに、またはそれに加えて含む。これは、図10bに概略として示されており、(i)コード部分A1,2は、ウェブページ214からのコード/データ(コード215からのもの以外)を含み、(ii)コード部分A1,1は、コード215からのコード/データ(保護されたコード216/227からのもの以外)を含み、(iii)コード部分A1,3は、コード215からのコード/データ(保護されたコード216/227からのもの以外)および保護されたコード216/227からのコード/データの両方を含む。
【０２１２】
したがって、本発明のいくつかの実施形態において、完全性検証は、次のように実行され得る。
・  保護されたコード216は、コード部分識別子の特定のセットSiによって指定されるコード部分Ai,jに基づきチェック値生成器モジュールまたは関数を使用してチェック値Vi*(または上記のいわゆる修正データ)を生成し得る。したがって、ステップ304において保護されたコード216によって送信される要求は、チェック値Vi*を含み得る。
・  図6bのステップ656において、コントローラアプリケーション232は、保護されたコード216に対応するメタデータ228(たとえば、ステップ652および654で識別されているような)から、コード部分識別子Siのこの特定のセットSiに対応する正しい/予想されたチェック値Viを取得し得る。受信されたチェック値Vi*が正しい/予想されたチェック値Viと一致した場合、保護されたコード216は完全性検証チェックに合格し、受信されたチェック値Vi*が正しい/予想されたチェック値Viと一致しない場合、保護されたコード216は完全性検証チェックに失敗する。
【０２１３】
保護されたコード216は、セットSiなどの、コード部分識別子の特定のセットを使用するように最初に構成され得る。したがって、最初に、保護されたコード216がコントローラアプリケーション232に要求を送信したときに、コントローラアプリケーション232は、コード部分識別子のどのセット(たとえば、保護されたコード216のこの特定のインスタンスに対してメタデータ228によって指定/リストされた最初のもの)が使用されているべきかを認識する。コントローラアプリケーション232が、保護されたコード216に送り返されるべき応答を生成するときに、コントローラアプリケーション232は、使用されるべきコード部分識別子の次のセットを識別するものとしてよく、コード部分識別子のこのセットを応答の中に含めるものとしてよく、このようにして、保護されたコード216は、進行中の完全性検証にどのコード部分識別子を使用する必要があるかを動的に通知され得る。コントローラアプリケーション232は、メタデータ216の一部として、保護されたコード216が使用すると予想されるコード部分識別子の次のセットのインデックス/識別子を記憶し得る。代替的に、そのような「状態」情報をメタデータ228内に記憶しなくても、コントローラアプリケーション232は、完全性検証に対するコード部分識別子Siのセットを使用した後に、メタデータ227からコード部分識別子Siのそのセット(および対応するチェック値Vi)を削除することも可能であり、したがって、コントローラアプリケーション232は、メタデータ228内のコード部分識別子の現在のリストの中にあるコード部分識別子Siの第1のセットを単に使用するだけのように配置構成され得る。
【０２１４】
ユーザセッション中、クライアントシステム210における保護されたコード216と制御システム230におけるコントローラアプリケーション232との間で完全性検証を何回もインタラクティブに行い得る。そのようなインタラクティブなやり取りが行われる毎に、コントローラアプリケーション232は、ウェブページ214(またはコード215および/または保護されたコード216)の完全性を維持するためにメタデータ228を使用することによって保護されたコード216によりチェック値の動的性質、でたらめさ、および一様性を調整し、管理し得る。コントローラアプリケーション232によるそのような制御は、このようにして、攻撃者がウェブページ214および/または保護されたコード216に対する攻撃を首尾よく開始し/使用することを著しく難しくする。
【０２１５】
完全性検証を実行するための他の方法が使用されることが可能であることも理解されるであろう。
【０２１６】
完全性検証を、保護されたコード216から取られただけでなく、場合によっては他のコード215および/またはウェブページ214からも取られたコードおよび/またはデータに基づかせることは、完全生検証の範囲が、保護されたコード216がコード215の予想された量の一部として、および/または予想されるウェブページ214内で使用されているかどうかをチェックするステップを含むように拡大することを意味する。たとえば、上記の3.3項のコンテンツプレーヤの例では、完全性検証がウェブページ214それ自体のコードおよび/またはデータに基づく(すなわち、コード215に基づくだけでなく)場合、保護されたコード216(またはコンテンツプレーヤ)が別の(未認可)ウェブページ214に転送/コピーされてしまっているかを識別することが可能であり、これが、コントローラアプリケーション232によって検出された場合、コントローラアプリケーション232は、コンテンツプレーヤがコンテンツを再生するのを停止させることができるであろう(上で説明されているように)。
【０２１７】
5.2-識別
上で述べたように、保護アプリケーション232は、同じ初期コード222に基づき複数の異なる保護されたインスタンス227を生成するように配置構成され得る。これは、特定のインスタンス227に特有の識別子をそのインスタンス内にポジティブに埋め込むステップを伴い得る(保護されたコード内にデータを安全に記憶し/使用するための上で述べた方法のうちのどれかを使用して)。それに加えて、または代替的に、これは、ソフトウェア保護技術を初期コード222に、ただし、異なるシード値または暗号鍵に基づき、適用し、異なる、別の仕方で保護されたインスタンスを生成するステップを伴うものとしてよく、この場合、保護されたコード227のインスタンスは、インスタンスに対して生成された特定のコード/データからそのインスタンスに特有の値を導出するように構成され得る。
【０２１８】
保護されたコード227のインスタンスが、クライアントシステム210に提供されたとき(ウェブページ214の一部として保護されたコード216として使用されるべき)、保護されたコード227のそのインスタンスの提供に関係する詳細は、そのインスタンスに関連付けられているメタデータ228の一部として記憶されてよく、これらの詳細は保護されたコード227の提供の日時、保護されたコード227のインスタンスを要求したプロバイダシステム280の詳細(名前、IPアドレスなど)、保護されたコード227のインスタンスが提供されるべきであるクライアントシステム210の詳細(名前または他の識別子、IPアドレス、ユーザの同一性など)、などのうちの1つまたは複数などである。いくつかの実施形態において、制御システム230およびクライアントシステム210は、制御システム230が保護されたコード227のどの特定のインスタンスをクライアントシステム210が現在実行しているかを識別することができるようにセッションクッキーを使用し得る。
【０２１９】
ステップ302で保護されたコード216によって生成される要求は、特定のインスタンスの識別子(またはコントローラアプリケーション232が特定のインスタンスの識別子を導出する際に使用するデータ)を含み得る。要求は、クライアントシステム210に関する他の詳細も含むものとしてよく、それらの詳細は、クライアントシステム210の名前、IPアドレス、ユーザの同一性などのうちの1つまたは複数である。したがって、コントローラアプリケーション232は、ステップ308において次のステップを実行し得る。
・  受信された要求から識別子を取得する(または導出する)(図6bのステップ652)。
・  識別子によって識別された保護されたコード216のインスタンスに対応するメタデータ228にアクセスするかまたはこれを取得する(図6bのステップ654)。
・  図6bのステップ658において実行されるテスト/チェックのうちの1つは、要求で受信したようなクライアントシステム210に関する詳細が保護されたコード216のインスタンスに対するメタデータ228に記憶されているクライアントシステム210に関する詳細と一致しているかどうかを決定する同一性チェックであってよい。たとえば、コントローラアプリケーション232は、要求で提供されている名前、IPアドレス、ユーザ名などのうちの1つまたは複数がメタデータ228に記憶されている予想される名前、IPアドレス、ユーザ名と異なるかどうかをチェックするものとしてよい。違いがある場合、この同一性チェックは失敗するものとしてよく、コントローラアプリケーション232は適切な対策を講じ得るが、違いがない(または著しい違いがない)場合、この同一性チェックは合格であるものとしてよい。このようにしてコントローラアプリケーション232によって強制される制御は、コード215および/またはウェブページ214の不正配布を防ぐのを助ける。
【０２２０】
クライアントシステム210で走っている保護されたコード216の同一性を取得し、その同一性に基づきテスト/チェックを実行するための他の方法が、単一のサインオンプロトコル(たとえば、開示全体が参照により本明細書に組み込まれているhttps://en.wikipedia.org/wiki/Single_sign-onを参照)を使用することおよび/またはSSL証明書を使用することなどで、使用され得ることは理解されるであろう。
【０２２１】
5.3-デバッガ検出
コード215および/または保護されたコード216は、本質的に、実行されると予想されるであろう関数/プロシージャ呼び出しの1つまたは複数のシーケンス(コード215および/または保護されたコード216が修正されていないと仮定する)および/または関数/プロシージャまたは関数/プロシージャのシーケンスの呼び出しまたは実行の予想されるタイミング(コード215および/または保護されたコード216が修正されていないと仮定する)を有する。そのようなシーケンスおよび/またはタイミングは、保護されたコード216がステップ302で要求を生成し、コントローラアプリケーション232に送信することになっているときに1つまたは複数の予想される段階において生じ得る。たとえば、保護されたコード216が、クライアントシステム210のユーザが特定の方式でウェブページ214をインタラクティブに操作した(たとえば、表示されているウェブページ214上のボタンまたは他のコントロールをクリックした)ことで、要求を生成し、コントローラアプリケーション232に送信するようになった場合、ユーザが、その段階に到達するかまたはたとえばデバッガのインタラクティブな操作を実行することとは対照的に、予想される合法的な方式でウェブページ214をインタラクティブに操作した場合に予想される上で述べたようなシーケンスおよび/またはタイミングがあり得る。
【０２２２】
その結果、メタデータ生成器226は、実行されることが予想される関数/プロシージャ呼び出しの1つまたは複数のシーケンスに関してデータを確認する、たとえば、関数/プロシージャのそのシーケンスが機能の特定の段階に到達する予想された方法で呼び出された場合に呼び出しスタックがどのように見えるかを確認するように配置構成されてよい。それに加えて、または代替的に、メタデータ生成器226は、第1の関数が呼び出されてから第2の関数が呼び出されるまでの予想される時間の長さなど、関数/プロシージャの実行のタイミングまたは関数/プロシージャのシーケンスに関するデータを確認するように配置構成され得る。メタデータ生成器226は、保護されたコード227(のインスタンス)に関連付けられているメタデータ228の一部としてそのような確認されたデータを記憶するものとしてよい。
【０２２３】
したがって、保護されたコード227は、関数/プロシージャ呼び出しのシーケンスに関係するデータ(たとえば、クライアントシステム210における現在の呼び出しスタックに関するデータ)および/またはいくつかの関数/プロシージャの呼び出しもしくは実行またはクライアントシステム210による関数/プロシージャのいくつかのシーケンスに関係するデータを含む要求を(ステップ302において)生成するように配置構成され得る。図6bのステップ658において実行されるテスト/チェックのうちの1つは、要求で受信した関数呼び出しおよび/またはタイミングデータが保護されたコード216のインスタンスに対するメタデータ228に記憶されている予想される関数呼び出しおよび/またはタイミングデータと一致しているかどうかを決定するアンチデバッグチェックであってよい。違いがある場合、このアンチデバッグチェックは失敗であるものとしてよく(これらの違いは、攻撃者がデバッガを使用してコード215を通る制御フローを修正すること、および/またはデバッガを使用するコード215の実行により速度を落とすか速度を上げることを示し得るからである)、コントローラアプリケーション232は、上で説明されているように適切な対策を講じる得る。違いがない(または著しい違いがない)場合、このアンチデバッグチェックは合格であるものとしてよい。コントローラアプリケーション232によって強制される制御は、このようにして、デバッガを介して攻撃者によって開始される攻撃を阻止するのを助ける。
【０２２４】
デバッガの使用を示すデータを取得し、そのようなデータに基づきアンチデバッガテストを実行するための他の方法も使用されることが可能であることは理解されるであろう。たとえば、ステップ308においてコントローラアプリケーション232によって生成される応答は、コントローラアプリケーション232がこの秘密値を保護されたコード216と共有し/初期化し得るようにノンス(または乱数値)を含んでいてよく、代替的に、ステップ302において保護されたコードによって生成される要求は、保護されたコード216がこの秘密値をコントローラアプリケーション232と共有し/初期化し得るようにノンス(または乱数値)を含んでいてよい。コントローラアプリケーション232は、この共有値をクライアントシステム210における保護されたコード216の特定のインスタンスに対するメタデータ228の一部として記憶してよい。コントローラアプリケーション232および保護されたコード216は、この共有値の自バージョンを定期的に修正/更新するように配置構成され得る(たとえば、ある所定の値nに対してn秒おきに1だけ増分する)。ステップ302において保護されたコード216によって生成されるその後の要求は、この更新された値のそのバージョンを含むものとしてよく、コントローラアプリケーション232は、ステップ308において、コントローラアプリケーション232がそれ自体生成している更新された値(すなわち、自ローカル値)を要求で受信した更新された値と比較するものとしてよく、これらが等しくない(または通信遅延、ドリフトなどを考慮して、所定の閾値より異なる)場合、コントローラアプリケーション232は、コード215および/または保護されたコード216がデバッガにより実行されており、上で説明されているように適切な対策を講じるという結論を下し得る。
【０２２５】
5.4-ウォッチ識別
上で述べたように、保護されたコード216によってステップ302において生成される要求は、ウェブページ214のデータ(たとえば、ウェブページ214の視覚的表現によって提示されるような)が視覚的表現からまたはウェブページ214内からコピーされていること(またはコピーされているかどうか)を指示するウォッチデータを含み得る。これは、たとえば、保護されたコード216がウェブページ214のコンテンツ上のリスナーについてウェブページ214のDOMを監視することによって達成されるものとしてよく、「ウェブリスナー」はよく知られており、したがって、ここではより詳しく説明されないものとする。保護されたコード216は、1つまたは複数の予想されるか、または許可されたリスナーの指示/同一性とともに構成され得る。保護されたコード216が予想されていないまたは不正なリスナーを識別した場合に、保護されたコード216は、そのようなコピーが行われていると結論するように構成され得る。それに加えて、または代替的に、保護されたコード216は、クローン形式についてウェブページ214のDOMをチェックするように構成されてよく、保護されたコード216がクローン形式を検出した場合、保護されたコード216はそのようなコピーが行われていると結論するように構成されてよい。
【０２２６】
コントローラアプリケーション232が、受信された要求内のウォッチデータから、ウェブページ214のデータ(たとえば、ウェブページ214の視覚的表現によって提示されるような)が視覚的表現から、またはウェブページ214内からコピーされていると決定した場合、コントローラアプリケーション232は、ステップ308において、対応する命令(またはフラグまたはインジケータまたは他のデータ)を含む応答を生成するように構成され得る。したがって、保護されたコード216は、ステップ314において、ステップ312で受信された応答の中にこの命令の存在を識別し、応答の中にそのような命令を検出したことに応答して、1つまたは複数の対抗策を実施するように配置構成され得る。そのような対抗策は、ブラウザ212の1つまたは複数のセキュリティ機能を使用するか、または起動させて、ブラウザのユーザインターフェースのセキュリティを実装する、たとえば、フォームをロックダウンする(たとえば、よく知られているiframeアプローチまたはW3C ironframeアプローチを使用して)ステップを含むことも可能である。さらなる詳細は、たとえば、開示全体が参照により本明細書に組み込まれているhttps://dvcs.w3.org/hg/user-interface-safety/raw-file/tip/user-interface-safety.htmlに記載されている。
【０２２７】
5.5-妥当性確認実施
上で述べたように、保護されたコード216によってステップ302において生成される要求は、ブラウザ212またはウェブページ214内で、表示されるウェブページ214のデータフィールドの妥当性確認がオフにされるか、何らかの方法で無効化されていること(またはそのようにされているかどうか)を指示する妥当性確認チェックデータを含み得る。これは、たとえば、上記の5.1項において述べたような完全性検証を使用することによって達成されるものとしてよく、特に、コード部分識別子のセットSi(i=1,...,N)において、これらのコード部分識別子Pi,j(i=1,...,N、j=1,...,Di)のうちの1つまたは複数は、保護されたコード216内のコードおよび/またはデータの対応する部分Ai,j(または量)を識別するものとしてよく、コードのその部分Ai,jは、データフィールド妥当性確認のための機能の一部または全部を提供する。
【０２２８】
コントローラアプリケーション232が、受信された要求内の妥当性確認チェックデータから、表示されるウェブページ214のデータフィールドの妥当性確認が、ブラウザ212またはウェブページ214内で、オフにされているか、または何らかの方法で無効化されていると決定した場合、コントローラアプリケーション232は、ステップ308において、対応する命令(またはフラグまたはインジケータまたは他のデータ)を含む応答を生成するように構成され得る。したがって、保護されたコード216は、ステップ314において、ステップ312で受信された応答の中にこの命令の存在を識別し、応答の中にそのような命令を検出したことに応答して、1つまたは複数の対抗策を実施するように配置構成され得る。そのような対抗策は、(a)ウェブページ214を介して現在実施されているか、または要求されているトランザクションもしくは他のプロシージャを(そのようなトランザクション/プロシージャが妥当性確認されていないデータに基づいて行われ得ないように)停止する(または完了を防ぐ)ステップ、および/または(b)ウェブページ214に、トランザクション/プロシージャを続けさせるが、ただし、サービスシステム250またはプロバイダシステム280に、トランザクション/プロシージャが妥当性確認されていないデータに基づき要求/実行されていることを警告する(たとえば、サービスシステム250またはプロバイダシステム280に送信されるべきウェブページ214からの通信においてフラグをセットすることによって)方式で、続けさせるステップ、および/または(c)失敗した完全性検証に関して上で設定されているような対抗策を講じるステップを含むことが可能である。
【０２２９】
5.6-広告ブロックチェック
上で述べたように、保護されたコード216によってステップ302において生成される要求は、広告(たとえば、ウェブページ214によって提供される広告)のブロックがブラウザ212内でオンまたはオフにされていること(またはそのようにされているかどうか)を指示する広告ブロックチェックデータを含み得る。これは、たとえば、上記の5.1項において述べたような完全性検証を使用することによって達成されるものとしてよく、特に、コード部分識別子のセットSi(i=1,...,N)において、これらのコード部分識別子Pi,j(i=1,...,N、j=1,...,Di)のうちの1つまたは複数は、保護されたコード216内のコードおよび/またはデータの対応する部分Ai,j(または量)を識別するものとしてよく、コードのその部分Ai,jは、広告の提供に関係する機能の一部または全部を提供する。それに加えて、または代替的に、これは、ウェブページ214のDOMを検査することによって達成されるものとしてよく、たとえば、(a)上で述べたように、コード部分Ai,jの一部または全部は、DOMの一部分を含むものとしてよく、その場合、コード部分Ai,jは、データが破損/修正/削除などがなされていないことを保証するために広告または他のコンテンツに関係するDOMのデータ(たとえば、画像、ビデオ)を含むものとしてよく、(b)保護されたコード216は、DOMを検査して、広告の上に何か表示されている/レンダリングされているかを確認するものとしてよく(それによって広告を効果的に「ブロック」する)、(c)保護されたコード216は、たとえば、ビデオデータの表示に関係する予想されるハートビートデータがあるかどうかをチェックして確認するものとしてよく、そのようなハートビートデータがない場合は、ビデオ広告の表示がブロックされていることを示す指示であると解釈されてよい、(d)などがある。そのようなチェックは、メタデータ228に基づくものとしてよい(たとえば、どのコード部分Ai,jを使用するかを指定する、予想されるハートビートデータを指定する、など)。
【０２３０】
コントローラアプリケーション232が、受信された要求内の広告ブロックチェックデータから、広告のブロックが、ブラウザ212またはウェブページ214内で、オフにされているか、または何らかの方法で無効化されていると決定した場合、コントローラアプリケーション232は、ステップ308において、対応する命令(またはフラグまたはインジケータまたは他のデータ)を含む応答を生成するように構成され得る。したがって、保護されたコード216は、ステップ314において、ステップ312で受信された応答の中にこの命令の存在を識別し、応答の中にそのような命令を検出したことに応答して、1つまたは複数の対抗策を実施するように配置構成され得る。そのような対抗策は、(a)コンテンツの表示を停止し、および/またはウェブページ214を継続的に使用するには広告を表示させる必要があることをブラウザ212のユーザに知らせるためのウェブページ214のDOMの操作、および/または(c)失敗した完全性検証に関して上で述べたような対抗策を講じるステップを含むことが可能である。
【０２３１】
説明されている方法は、特定の順序で実行される個別のステップとして図示されていることが理解されるであろう。しかしながら、当業者であれば、これらのステップは、所望の結果をそのまま達成しながら、異なる順序で組み合わされるか、または実行されてよいことを理解するであろう。
【０２３２】
本発明の実施形態は、様々な異なる情報処理システムを使用して実装され得ることが理解されるであろう。特に、本発明の図および説明では、例示的なコンピューティングシステムおよび方法を提示しているが、これらは本発明の様々な態様を説明する際に有益な参照となるように提示されているにすぎない。本発明の実施形態は、パーソナルコンピュータ、ラップトップ、携帯情報端末、携帯電話、セットトップボックス、テレビ、サーバコンピュータなどの好適なデータ処理デバイス上で実行されてよい。もちろん、システムおよび方法の説明は、説明を目的として簡素化されており、これらは、本発明の実施形態に使用され得る数多くある異なるタイプのシステムおよび方法のうちの1つにすぎない。ロジックブロックの間の境界は、例示的なものにすぎないこと、および代替的実施形態は、ロジックブロックまたは要素を合併させたものであり得るか、または機能の代替的な分解をロジックブロックまたは要素に施してよいことが理解されるであろう。
【０２３３】
上で述べた機能は、ハードウェアおよび/またはソフトウェアとして1つまたは複数の対応するモジュールとして実装され得ることが理解されるであろう。たとえば、上で述べた機能は、システムのプロセッサによって実行される1つまたは複数のソフトウェアコンポーネントとして実装され得る。代替的に、上で述べた機能は、1つまたは複数のフィールドプログラマブルゲートアレイ(FPGA)、および/または1つまたは複数の特定用途向け集積回路(ASIC)、および/または1つまたは複数のデジタルシグナルプロセッサ(DSP)、および/または他のハードウェア装置などの、ハードウェアとして実装されてよい。本明細書に含まれる、または上で説明されているような、フローチャートにおいて実装されている方法ステップは、各々、対応するそれぞれのモジュールによって実装されてよく、本明細書に含まれる、または上で説明されているような、フローチャートにおいて実装されている複数の方法ステップは、単一のモジュールによって一緒に実装されてよい。
【０２３４】
本発明の実施形態がコンピュータプログラムによって実装される限り、コンピュータプログラムを記憶するか、または伝送する、1つまたは複数の記憶媒体および/または1つまたは複数の伝送媒体が本発明の態様を形成することは理解されるであろう。コンピュータプログラムは、1つまたは複数のプロセッサ(または1つもしくは複数のコンピュータ)によって実行されたときに、本発明の一実施形態を実行する1つまたは複数のプログラム命令、またはプログラムコードを有するものとしてよい。本明細書で使用されているような「プログラム」という用語は、コンピュータシステム上で実行するように設計されている命令のシーケンスであってよく、サブルーチン、関数、プロシージャ、モジュール、オブジェクトメソッド、オブジェクト実装、実行可能アプリケーション、アプレット、サーブレット、ソースコード、オブジェクトコード、バイトコード、共有ライブラリ、ダイナミックリンクライブラリ、および/またはコンピュータシステム上で実行するように設計されている命令の他のシーケンスを含み得る。記憶媒体は、磁気ディスク(ハードドライブまたはフロッピーディスクなど)、光ディスク(CD-ROM、DVD-ROM、もしくはBluRayディスクなど)、またはメモリ(ROM、RAM、EEPROM、EPROM、フラッシュメモリ、または携帯/取り外し可能メモリデバイスなど)などであってよい。伝送媒体は、通信信号、データブロードキャスト、2つまたはそれ以上のコンピュータの間の通信リンクなどであってよい。
【符号の説明】
【０２３５】
100  コンピュータシステム
102  コンピュータ
104  記憶媒体
106  メモリ
108  プロセッサ
110  インターフェース
112  ユーザ出力インターフェース
114  ユーザ入力インターフェース
116  ネットワークインターフェース
118  通信バス
120  モニタ(または画面もしくはディスプレイユニット)
121  スピーカ
122  デバイス
124  キーボード
126  マウス(または他のポインティングデバイス)
200  システム
210  クライアントシステム
212  ウェブブラウザ
214  ウェブページ
214  ウェブアプリ
214  アプリケーション
215  実行可能コード
216  保護されたコード
216a  保護されたコード
216b  保護されたコード
210  クライアントシステム
227  コード
220  保護システム
221  ライブラリアプリケーション
222  初期コード
223  保護アプリケーション
224  プロテクタモジュールまたはコンポーネント
225  ライブラリデータベース
226  メタデータ生成器
227  保護された(またはセキュリティ保護された)コード
228  メタデータ
229  データベース
230  制御(またはマネージャ)システム
232  コントローラアプリケーション
240  保護および制御システム
250  サービスシステム
260  データリポジトリ
262  データ
270  ネットワーク
280  プロバイダシステム
300  方法
400  方法
500  方法
550  方法
600  方法
650  処理
750  修正モジュール
752  逆修正モジュール
754  暗号解読モジュール
760  データ展開モジュール
762  レンダリングモジュール
770  モジュール
790  透かしモジュール
800  方法
900  方法
1000  他のデータ
【図１】
2019502997.tif 000003
【図２ａ】
2019502997.tif 000004
【図２ｂ】
2019502997.tif 000005
【図２ｃ】
2019502997.tif 000006
【図３】
2019502997.tif 000007
【図４】
2019502997.tif 000008
【図５ａ】
2019502997.tif 000009
【図５ｂ】
2019502997.tif 000010
【図６ａ】
2019502997.tif 000011
【図６ｂ】
2019502997.tif 000012
【図７ａ】
2019502997.tif 000013
【図７ｂ】
2019502997.tif 000014
【図７ｃ】
2019502997.tif 000015
【図７ｄ】
2019502997.tif 000016
【図８】
2019502997.tif 000017
【図９】
2019502997.tif 000018
【図１０ａ】
2019502997.tif 000019
【図１０ｂ】
2019502997.tif 000020
【国際調査報告】
2019502997.tif 000021
2019502997.tif 000022
2019502997.tif 000023