(57)【特許請求の範囲】
【請求項１】
サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護する方法であって、前記方法は、
前記サーバ・コンピュータが、前記クライアント・コンピュータ上で実行されているアプリケーションの真正性をチェックし、前記アプリケーションが、前記サーバ・コンピュータにより実行される第１の関数にアクセスするのを可能にしてほしいという、前記サーバ・コンピュータに対する要求に応答して、第１の文字列を前記クライアント・コンピュータに送るステップと、
前記第１の文字列を送るステップに応答して、前記サーバ・コンピュータが、前記サーバ・コンピュータの内部関数である第２の関数のパラメータを含む第２の文字列を受け取るステップであって、前記第２の文字列は、前記クライアント・コンピュータによるコマンドへの前記第１の文字列の変換、及び前記クライアント・コンピュータによる前記コマンドのローカル実行の結果である、受け取るステップと、
前記サーバ・コンピュータが、前記アプリケーションの前記真正性をチェックするために、前記第２の文字列を前記第２の関数の呼び出しに変換するステップと、
前記サーバ・コンピュータが、前記第２の関数の前記呼び出しを用いて、前記第２の関数を実行するステップと、
前記第２の関数の前記実行の結果に基づいて、前記アプリケーションの前記真正性をチェックするネイティブ・コードの実装を必要とすることなく、前記サーバ・コンピュータが、（ｉ）前記アプリケーションの前記真正性を検証し、前記アプリケーションが、前記第１の関数にアクセスすることを可能にするか、又は（ｉｉ）前記アプリケーションが、前記第１の関数にアクセスするのを防止するかを決定するステップと、
を含む、方法。
【請求項２】
前記第１の関数は、インタープリタ型プログラミング言語で書かれた関数をそれぞれの文字列に変換し、実行時に前記関数を修正し、前記文字列をインタープリタ型プログラミング言語で書かれたそれぞれの関数に変換するように構成されたインタープリタ型プログラミング言語で書かれる、請求項１に記載の方法。
【請求項３】
前記コマンドの前記クライアント・コンピュータによる前記ローカル実行は、前記第２の関数のコードの一部を読み取るステップ、前記第２の関数の前記コードを実行するステップ、又は前記第２の関数の前記コードを修正するステップを含む、請求項１又は請求項２に記載の方法。
【請求項４】
前記第１の文字列を送るステップ、前記第２の文字列を受け取るステップ、前記第２の文字列を変換するステップ、前記第２の関数を実行するステップ、及び（ｉ）前記クライアント・コンピュータの前記真正性を検証し、前記クライアント・コンピュータが、前記第１の関数にアクセスするのを可能にするか、又は（ｉｉ）前記クライアント・コンピュータが、前記第１の関数にアクセスするのを防止するかを決定するステップを、クライアント・サーバ・アーキテクチャにおいて実装される認証フレームワークに付加するステップであって、前記認証フレームワークは、前記クライアント・コンピュータに認証を要求する、付加するステップをさらに含む、請求項１〜請求項３のいずれか一項に記載の方法。
【請求項５】
前記サーバ・コンピュータが、ハイブリッド・アプリケーションの複数のファイルを受け取るステップであって、前記複数のファイルは、関数型プログラミングをサポートし、かつ関数をそれぞれの文字列に変換し、実行時に関数を修正し、文字列をそれぞれの関数に変換することが可能なプログラム言語で書かれる、複数のファイルを受け取るステップと、
コード・エグゼキュータ・ファイルが、前記複数のファイル内の関数にアクセスすることができ、前記コード・エグゼキュータ・ファイルが、前記コマンドへの前記第１の文字列の前記変換を実行するコードを含むように、前記サーバ・コンピュータが、前記コード・エグゼキュータ・ファイルを生成し、前記コード・エグゼキュータ・ファイルを前記複数のファイルにリンクするステップと、
前記サーバ・コンピュータが、前記複数のファイルからコード情報を取得し、前記情報を前記サーバ・コンピュータ内に格納するステップであって、（ｉ）前記クライアント・コンピュータの前記真正性を検証し、前記クライアント・コンピュータが、前記第１の関数にアクセスするのを可能にするか、又は（ｉｉ）前記クライアント・コンピュータが、前記第１の関数にアクセスするのを防止するかを決定する前記ステップは、前記第２の関数の前記実行の前記結果と前記複数のファイルから取得された前記コード情報との間の合致に基づいている、取得し、格納するステップと、
をさらに含む、請求項１〜請求項４のいずれか一項に記載の方法。
【請求項６】
前記複数のファイルを受け取るステップは、ＪａｖａＳｃｒｉｐｔプログラミング言語で書かれた前記複数のファイルを受け取るステップを含む、請求項５に記載の方法。
【請求項７】
前記サーバ・コンピュータが、前記クライアント・コンピュータ上で実行されている前記ハイブリッド・アプリケーションから、前記第１の関数へのアクセス要求を受け取るステップと、
前記要求を受け取るステップに応答して、前記サーバ・コンピュータが、前記第１の関数は、前記サーバ・コンピュータ上に実装されるセキュリティ・フレームワークにより保護されていること、及び前記第１の関数へのアクセスには、前記クライアント・コンピュータの前記真正性の検証を必要とすることを判断するステップであって、前記第１の文字列を前記クライアント・コンピュータに送るステップは、前記第１の関数の前記アクセスが前記クライアント・コンピュータの前記真正性の前記検証を必要とすると判断するステップに応答して実行される、判断するステップと、
をさらに含む、請求項５又は請求項６に記載の方法。
【請求項８】
前記サーバ・コンピュータが、前記第２の関数の前記実行の前記結果を、前記クライアント・コンピュータにより実行されている前記アプリケーションのファイルから取得されたコード情報と照合するステップと、
前記第２の関数の前記実行の前記結果が前記コード情報と合致することに基づいて、前記サーバ・コンピュータのセキュリティ・フレームワークにより、前記クライアント・コンピュータの前記第１の関数が自動的に実行されるステップと、
前記サーバ・コンピュータが、前記第１の関数を実行する前記ステップの結果を前記クライアント・コンピュータに送るステップと、
をさらに含む、請求項１〜請求項７のいずれか一項に記載の方法。
【請求項９】
請求項１乃至８のいずれか一項に記載の方法の各ステップをコンピュータに実行させるためのコンピュータ・プログラム。
【請求項１０】
サーバ・コンピュータ・システムであって、
中央処理ユニット（ＣＰＵ）と、
前記ＣＰＵに結合されたメモリと、
前記ＣＰＵに結合されたコンピュータ可読ストレージ・デバイスと、
を含み、前記ストレージ・デバイスは、請求項１〜８の何れか一項に記載の方法を実施するための、前記メモリを介して前記ＣＰＵにより実行される命令を含む、サーバ・コンピュータ・システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、クライアントとサーバとの間の通信のセキュア保護に関し、より具体的には、不正なモバイル・デバイス・クライアント・アプリケーションからウェブ・サーバをセキュア保護することに関する。
【背景技術】
【０００２】
ハイブリッド・モード・モバイル・アプリケーションは、ネイティブ・コンテナ内部でＪａｖａＳｃｒｉｐｔ（登録商標）コードを実行することができ、これにより、クロス・プラットフォーム開発が単純化されるが、バックエンド・サーバが不正なアプリケーションに呼び出される恐れがある。ＪａｖａＳｃｒｉｐｔは、カリフォルニア州Ｒｅｄｗｏｏｄ  Ｓｈｏｒｅｓ所在のＯｒａｃｌｅ  Ａｍｅｒｉｃａ  Ｉｎｃ．の登録商標である。攻撃者（attacker）が、アプリケーションと共にデプロイされたＪａｖａＳｃｒｉｐｔ（登録商標）コードを検査し、不正なサーバ呼び出しを実行している攻撃者自身のアプリケーションを書き込むことがある。幾つかの周知のモバイル・アプリケーション開発フレームワークは、ネイティブ実装を用いて、携帯電話上の修正されたコードからサーバを保護することができる（例えば、サーバからアプリケーションに送られるチャレンジ・トークン（challenge token）は、コンパイルされたネイティブ・コードによって処理されるので、サードパーティ攻撃者は処理の論理が分からない）。
【発明の概要】
【発明が解決しようとする課題】
【０００３】
サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護する方法、システム、及びコンピュータ・プログラムを提供する。
【課題を解決するための手段】
【０００４】
第１の実施形態において、本発明は、サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護する方法を提供する。方法は、サーバ・コンピュータが、クライアント・コンピュータにより実行されているアプリケーションの真正性（authenticity）をチェックし、アプリケーションが、サーバ・コンピュータにより実行される第１の関数にアクセスするのを可能にしてほしいという、サーバ・コンピュータに対する要求に応答して、第１の文字列をクライアント・コンピュータに送ることを含む。方法は、第１の文字列を送ることに応答して、サーバ・コンピュータが、サーバ・コンピュータの内部関数である第２の関数のパラメータを含む第２の文字列を受け取ることをさらに含む。第２の文字列は、クライアント・コンピュータによるコマンドへの第１の文字列の変換、及びクライアント・コンピュータによるコマンドのローカル実行の結果である。方法は、サーバ・コンピュータが、アプリケーションの真正性をチェックするために、第２の文字列を第２の関数の呼び出しに変換することをさらに含む。方法は、サーバ・コンピュータが、第２の関数の呼び出しを用いて、第２の関数を実行することをさらに含む。方法は、第２の関数の実行の結果に基づいて、アプリケーションの真正性をチェックするネイティブ・コードの実装を必要とすることなく、サーバ・コンピュータが、（ｉ）アプリケーションの真正性を検証し、アプリケーションが、第１の関数にアクセスするのを可能にするか、又は（ｉｉ）アプリケーションが、第１の関数にアクセスするのを防止するかを判断することをさらに含む。
【０００５】
第２の実施形態において、本発明は、コンピュータ可読ストレージ媒体と、コンピュータ可読ストレージ媒体内に格納されたコンピュータ可読プログラム・コードとを含むコンピュータ・プログラム製品を提供する。コンピュータ可読プログラム・コードは、サーバ・コンピュータ・システムとクライアント・コンピュータ・システムとの間の通信をセキュア保護する方法を実施するための、サーバ・コンピュータ・システムの中央処理ユニット（ＣＰＵ）により実行される命令を含む。方法は、サーバ・コンピュータ・システムが、クライアント・コンピュータ・システムにより実行されるアプリケーションの真正性をチェックし、アプリケーションが、サーバ・コンピュータ・システムにより実行される第１の関数にアクセスするのを可能にしてほしいという、サーバ・コンピュータ・システムに対する要求に応答して、第１の文字列をクライアント・コンピュータ・システムに送ることを含む。方法は、第１の文字列を送ることに応答して、サーバ・コンピュータ・システムが、サーバ・コンピュータ・システムの内部関数である第２の関数のパラメータを含む第２の文字列を受け取ることをさらに含む。第２の文字列は、クライアント・コンピュータ・システムによるコマンドへの第１の文字列の変換、及びクライアント・コンピュータによるコマンドのローカル実行の結果である。方法は、サーバ・コンピュータ・システムが、アプリケーションの真正性をチェックするために、第２の文字列を第２の関数の呼び出しに変換することをさらに含む。方法は、サーバ・コンピュータ・システムが、第２の関数の呼び出しを用いて、第２の関数を実行することをさらに含む。方法は、第２の関数の実行の結果に基づいて、アプリケーションの真正性をチェックするネイティブ・コードの実装を必要とすることなく、サーバ・コンピュータ・システムが、（ｉ）アプリケーションの真正性を検証し、アプリケーションが第１の関数にアクセスするのを可能にするか、又は（ｉｉ）アプリケーションが、第１の関数にアクセスするのを防止するかを判断することをさらに含む。
【０００６】
第３の実施形態において、本発明は、中央処理ユニット（ＣＰＵ）と、ＣＰＵに結合されたメモリと、ＣＰＵに結合されたコンピュータ可読ストレージ・デバイスを含むコンピュータ・システムを提供する。ストレージ・デバイスは、サーバ・コンピュータ・システムとクライアント・コンピュータ・システムとの間の通信をセキュア保護する方法を実施するための、メモリを介してＣＰＵにより実行される命令を含む。方法は、サーバ・コンピュータ・システムが、クライアント・コンピュータ・システムにより実行されているアプリケーションの真正性をチェックし、アプリケーションが、サーバ・コンピュータ・システムにより実行される第１の関数にアクセスするのを可能にしてほしいという、サーバ・コンピュータ・システムに対する要求に応答して、第１の文字列をクライアント・コンピュータ・システムに送ることを含む。方法は、第１の文字列を送ることに応答して、サーバ・コンピュータ・システムが、サーバ・コンピュータ・システムの内部関数である第２の関数のパラメータを含む第２の文字列を受け取ることをさらに含む。第２の文字列は、クライアント・コンピュータ・システムによるコマンドへの第１の文字列の変換、及びクライアント・コンピュータ・システムによるコマンドのローカル実行の結果である。方法は、サーバ・コンピュータ・システムが、アプリケーションの真正性をチェックするために、第２の文字列を第２の関数の呼び出しに変換することをさらに含む。方法は、サーバ・コンピュータ・システムが、第２の関数の呼び出しを用いて、第２の関数を実行することをさらに含む。方法は、第２の関数の実行の結果に基づいて、アプリケーションの真正性をチェックするネイティブ・コードの実装を必要とすることなく、サーバ・コンピュータ・システムが、（ｉ）アプリケーションの真正性を検証し、アプリケーションが、第１の関数にアクセスするのを可能にするか、又は（ｉｉ）アプリケーションが、第１の関数にアクセスするのを防止するかを判断することをさらに含む。
【０００７】
本発明の実施形態は、アプリケーションの真正性をチェックするためのネイティブ実装を必要とすることなく、モバイル・アプリケーションの真正性を検証し、不正アプリケーションがサーバを呼び出すのを防止する。本発明の実施形態は、任意のクライアント・サーバ・アーキテクチャにおいて実施することができ、又は認証フレームワークが、クライアントに１つの認証を要求する（例えば、パスワードを尋ねる）ように構成された場合、クライアント・サーバ・アーキテクチャにおいて既に実装されている認証フレームワークに付加することができる。
【図面の簡単な説明】
【０００８】
【図１】本発明の実施形態による、サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護するためのシステムのブロック図である。
【図２】本発明の実施形態による、サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護する、図１のシステムにおいて実施されるプロセスのフローチャートである。
【図３】本発明の実施形態による、図１のシステム内に含まれるサーバ・コンピュータを含み、図２のプロセスを実施するコンピュータのブロック図である。
【発明を実施するための形態】
【０００９】
概要
本発明の実施形態は、クライアント／サーバ環境におけるアプリケーション、又はサーバにアクセスする権限を与えられているようなハイブリッド・モード・モバイル・アプリケーションを検証する。アプリケーションは、セキュリティ・チェックを実施するフレームワークの中で動作するので、クライアントが、サーバによりエクスポーズされる（exposed）関数を呼び出すと、サーバは、チャレンジをクライアントに送り、これにより、クライアントが、保護された方法で自分自身を認証し、サーバの関数を呼び出すように権限付与されることが可能になる。一実施形態において、ハイブリッド・モード・モバイル・アプリケーションのＪａｖａＳｃｒｉｐｔ（登録商標）ファイルは、コード・エグゼキュータ（code executor）関数を付加することにより、ファイル自体におけるあらゆる利用可能な関数を取得するのに必要なコードで強化される。コード・エグゼキュータ関数は、文字列変数内で実行時に受け取ったコードを実行するので、攻撃者は、コードを保護するために用いられる技術を割り出すことができない。サーバは、遠隔からコードを修正し、実行時にコードの修正を検証することができる。セキュリティ技術は、関数型プログラミング言語（例えば、Ｌｉｓｐ、Ｓｃｈｅｍｅ、Ｈａｓｋｅｌｌ、ＭＬ、ｌａｍｂｄａ等）であるか、又はＪａｖａＳｃｒｉｐｔ（登録商標）ウェブ・スクリプティング言語のような関数型プログラミングをサポートする、インタープリタ型プログラミング言語で書かれたファイルを有するあらゆるクライアント／サーバ・アーキテクチャで使用することができる。プログラミング言語は、（１）関数を文字列に変換すること、（２）実行時に関数を修正すること、及び（３）文字列を関数に変換することが可能でなければならない。
【００１０】
本発明の実施形態は、サーバが、モバイル・デバイス又は他のクライアント・コンピュータ上で実行するためのあらゆるタイプのコードを注入し、関数呼び出しを可能にする前に、関連するセキュリティ及び真正性チェックを実施することを可能にする。こうしたルーチンは、ソース・ファイル（例えば、ＪａｖａＳｃｒｉｐｔ（登録商標）ソース・ファイル）内で利用可能でないが、サーバ自体によって制御された方法でのみ実行される。セキュリティは、セキュリティ実装を、時間の経過と共に修正し、例えば、クライアント・アプリケーションの実行時間及び挙動などの追加チェックを実行することができるサーバにより強化される。
【００１１】
本発明の実施形態は、以下のステップ：すなわち（１）クライアントが、サーバによりエクスポーズされる（exposed）関数を呼び出したとき、クライアント側においてセキュリティ・チャレンジを実行するステップ、（２）サーバが、実行する（例えば、ＪａｖａＳｃｒｉｐｔ（登録商標）ソース・ファイルの特定の部分を取り出し、送る）文字列を送るステップ、（３）クライアントがコードを実行し、結果をサーバに送り、オリジナル関数を文字列として送ることができるステップ、及び（４）サーバが結果を読み取り、クライアントが真正であるかどうかを判断するステップを実行することによって、サーバとクライアントとの間の通信をセキュア保護する。
【００１２】
攻撃者がプロセス全体を理解するのを防ぐために、トランスポート及びコード難読化の際の保護が必要とされる。一実施形態において、クライアントとサーバとの間の通信をセキュア保護するための技術は、ＪａｖａＳｃｒｉｐｔ（登録商標）コードを使用し、ネイティブ実装を使用しない。
【００１３】
サーバとクライアントとの間の通信をセキュア保護するためのシステム
図１は、本発明の実施形態による、サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護するためのシステム１００のブロック図である。システム１００は、真正性情報１０４を格納し、ソフトウェアベースのサーバ側認証コンポーネント１０６を実行するサーバ・コンピュータ１０２を含む。システム１００は、クライアント側認証コンポーネント１１２及びチャレンジ・ユーティリティ１１４を含むソフトウェアベースのアプリケーション（例えば、モバイル・アプリケーション）１１０を実行する、クライアント・コンピュータ１０８も含む。
【００１４】
アプリケーション１１０の解放前、ソフトウェアベースａｐｐ（アプリケーション）真正性ツール１１６が、コンピュータ（例えば、サーバ・コンピュータ１０２又は図示されていない別のコンピュータ）上で実行され、真正性情報１０４及びチャレンジ・ユーティリティ１１４を作成する。真正性情報１０４は、データ・リポジトリ内に格納され、セキュリティ・チャレンジと、セキュリティ・チャレンジへの正しい答えを含む。ａｐｐ真正性ツール１１６は、アプリケーションがサーバ・コンピュータ１０２の関数にアクセスしようと試みることに応答して、アプリケーション１１０、すなわち、セキュリティ・チャレンジによりその真正性を検証する必要があるアプリケーションのソース・ファイルであるａｐｐソース・ファイル１１８を格納するデータ・リポジトリから読み取りを行う。
【００１５】
チャレンジ・ユーティリティ１１４は、サーバ・コンピュータ１０２によりクライアント・コンピュータ１０８に送られるセキュリティ・チャレンジに応答するように実行されるコードである。チャレンジ・ユーティリティ１１４は、アプリケーション１１０の内部に書かれないが、もっと正確に言えば、ａｐｐ真正性ツール１１６によってアプリケーション１１０に注入される。一実施形態において、チャレンジ・ユーティリティ１１４は、ＪａｖａＳｃｒｉｐｔ（登録商標）言語で書かれる。本明細書で使用される場合、チャレンジ又はセキュリティ・チャレンジとは、関数と関連したコード情報に応答するように、クライアント・コンピュータ１０８に送られた、サーバ１０２からの要求であり、ここで、コード情報は、実行時に関数を修正し、関数のコードの一部を取得し、又は関数のコードを実行することによって取得される。
【００１６】
サーバ側認証コンポーネント１０６は、真正性情報１０４内に格納されるセキュリティ・チャレンジから、１つのセキュリティ・チャレンジを選択し、選択されたセキュリティ・チャレンジをクライアント側認証コンポーネント１１２に送り、アプリケーション１１０の真正性を検証する。クライアント側認証コンポーネント１１２は、セキュリティ・チャレンジを受け取り、セキュリティ・チャレンジへの応答をサーバ側認証コンポーネント１０６に送り、サーバ側認証コンポーネント１０６は、応答を、真正性情報１０４内の正しい答えに照らしてチェックする。応答が真正性情報１０４内の正しい答えと合致する場合、サーバ側認証コンポーネント１０６は、アプリケーション１１０の真正性を検証し、アプリケーション１１０がサーバ・コンピュータ１０２の関数にアクセスするのを可能にし、他の場合には、サーバ側認証コンポーネント１０６は、アプリケーション１１０が、サーバ・コンピュータ１０２の関数にアクセスするのを防止する。
【００１７】
図１に示されるコンポーネントの機能は、以下に提示される図２及び図３の説明においてより詳細に説明される。
【００１８】
サーバとクライアントとの間の通信をセキュリティ保護するためのプロセス
図２は、本発明の実施形態による、サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護する、図１のシステムにおいて実施されるプロセスのフローチャートである。図２のプロセスは、ステップ２００で開始する。ステップ２０２の前に、クライアント・コンピュータ１０８（図１参照）は、アプリケーション１１０（図１参照）を実行し、アプリケーション１１０（図１参照）は、サーバ・コンピュータ１０２（図１参照）により実行される第１の関数を実行しようと試み、第１の関数は、セキュリティ・フレームワークによって保護される。一実施形態において、アプリケーション１１０（図１参照）は、ハイブリッド・モード・モバイル・アプリケーションである。
【００１９】
ステップ２０２において、サーバ・コンピュータ１０２（図１参照）は、アプリケーション１１０（図１参照）の真正性を検証し、それにより、アプリケーション１１０（図１参照）が、サーバ・コンピュータ１０２（図１参照）により実行される第１の関数にアクセスするのを可能にしてほしいという、サーバ・コンピュータ１０２（図１参照）に対する要求を、クライアント・コンピュータ１０８（図１参照）から受け取る。一実施形態において、サーバ側認証コンポーネント１０６（図１参照）は、クライアント側認証コンポーネント１１２（図１参照）から上述の要求を受け取る。代替的に、第１の関数にアクセスしようとするアプリケーション１１０（図１参照）による試みに応答して、サーバ・コンピュータ１０２（図１参照）は、アプリケーション１１０（図１参照）の真正性を検証するよう、サーバ側認証コンポーネント１０６（図１参照）に指示する。
【００２０】
ステップ２０２の後及びステップ２０４の前、ステップ２０２において受け取った要求に応答して、サーバ側認証コンポーネント１０６（図１参照）は、真正性情報１０４（図１参照）内に含まれる複数のセキュリティ・チャレンジから１つのセキュリティ・チャレンジを選択し、セキュリティ・チャレンジへの応答を得るための動作を実行するコマンドのコードを生成する。ステップ２０４において、（１）ステップ２０２において受け取った要求、（２）選択されるセキュリティ・チャレンジ、及び（３）生成されるコマンドのコードに応答して、サーバ側認証コンポーネント１０６（図１参照）は、第１の文字列をクライアント・コンピュータ１０８（図１参照）に送る。第１の文字列は、選択されたセキュリティ・チャレンジへの応答を得るための動作を実行するコマンドのコードを含む。コマンドは、クライアント・コンピュータ１０８（図１参照）によって実行される。一実施形態において、コマンドにより実行される動作は、アプリケーション１１０（図１参照）内に含まれる第２の関数のコードを修正すること、第２の関数のコードの少なくとも一部を読み取って取得すること、又は第２の関数のコードを実行することを含み、ここで、コードは、関数型プログラミング言語であるか、又は関数型プログラミングをサポートし、かつ以下の：すなわち（１）関数を文字列に変換する、（２）実行時に関数を修正する、及び（３）文字列を関数に変換する能力を有するインタープリタ型プログラミング言語で書かれる。
【００２１】
ステップ２０４の後及びステップ２０６の前、クライアント側認証コンポーネント１１２（図１参照）は、第１の文字列を受け取り、それにより、クライアント側セキュリティ・フレームワークが呼び出される。クライアント側認証コンポーネント１１２（図１参照）は、受け取った第１の文字列をコマンドに変換し、その後、コマンドをチャレンジ・ユーティリティ１１４（図１参照）に送る。コマンドを受け取ることに応答して、チャレンジ・ユーティリティ１１４（図１参照）は、コマンドをローカルに実行する。コマンドを実行することによって、チャレンジ・ユーティリティ１１４（図１参照）は、上述の動作を実行し、動作の実行の結果である第２の文字列を取得し、第２の文字列をサーバ側認証コンポーネント１０６（図１参照）に送り、ここで、第２の文字列は、サーバ・コンピュータ１０２（図１参照）によりアクセスされる第２の関数のパラメータを含む。
【００２２】
ステップ２０６において、ステップ２０４において第１の文字列を送ること、第１の文字列をコマンドに変換すること、動作を実行するためのコマンドをローカルに実行すること、動作の実行した結果である第２の文字列を取得すること、及び第２の文字列を送ることに応答して、サーバ側認証コンポーネント１０６（図１参照）は、第２の文字列を受け取る。
【００２３】
ステップ２０８において、認証コンポーネント１０６（図１参照）は、第２の文字列を、内部サーバ関数である第２の関数の呼び出し（call to the second function）、及びアプリケーション１１０（図１参照）の真正性を検証するためのデータに変換する。
【００２４】
ステップ２１０において、サーバ側認証コンポーネント１０６（図１参照）は、ステップ２０８における第２の文字列の変換の結果得られる第２の関数の呼び出しを用いて、第２の関数を実行する。一実施形態において、ステップ２１０における実行は、第２の関数のリフレクション（reflection）能力を用いて、第２の関数のコードを修正し、第２の関数のコードの少なくとも一部を読み取り、取得し、又は第２の関数のコードを実行する。
【００２５】
ステップ２１０の後及びステップ２１２の前、サーバ側認証コンポーネント１０６（図１参照）は、ステップ２１０における第２の関数の実行の結果を取得する。
【００２６】
ステップ２１２の前、サーバ側認証コンポーネント１０６（図１参照）は、ステップ２１０における第２の関数の実行の結果が、選択されたセキュリティ・チャレンジへの正しい答え（correct answer）と合致するかどうかを判断し、ここで、正しい答えは、真正性情報１０４（図１参照）内に格納される。ステップ２１２において、ステップ２１０において第２の関数を実行した結果、及び結果が選択されたセキュリティ・チャレンジへの正しい答えと合致するかどうかの判断に基づいて、かつ、アプリケーション１１０（図１参照）の真正性をチェックするネイティブ・コードの実装を必要とすることなく、サーバ側認証コンポーネント１０６（図１参照）は、（ｉ）アプリケーション１１０（図１参照）の真正性を検証し、それにより、アプリケーション１１０（図１参照）が、サーバ１０２（図１参照）上で実行される第１の関数にアクセスするのを可能にするか、又は（ｉｉ）アプリケーション１１０（図１参照）が、第１の関数にアクセスするのを防止するかを判断する。
【００２７】
サーバ側認証コンポーネント１０６（図１参照）が、ステップ２１０において第２の関数を実行した結果が、選択されたセキュリティ・チャレンジへの正しい答えと合致すると判断する場合、サーバ側認証コンポーネント１０６（図１参照）は、アプリケーション１１０（図１参照）の真正性を検証し、アプリケーション１１０（図１参照）が、第１の関数にアクセスするのを可能にする。第１の関数にアクセスすることが可能になった後、サーバ・コンピュータ１０２は、第１の関数のオリジナル呼び出しを実行する。サーバ側認証コンポーネント１０６（図１参照）が、結果が正しい答えと合致しないと判断する場合、サーバ側認証コンポーネント１０６（図１参照）は、アプリケーション１１０（図１参照）が、第１の関数にアクセスすることを防止する。一実施形態において、アプリケーション１１０（図１参照）が第１の関数にアクセスすることを防止することは、サーバ・コンポーネント（図１参照）が、エラー通知を生成し、第１の関数のオリジナル呼び出しを戻さないことを含む。
【００２８】
ステップ２１２の後、ステップ２１４において、図２のプロセスは終了する。
【００２９】
代替的な実施形態において、セキュリティ・フレームワークがまだ実装されていないクライアント・サーバ・アーキテクチャにおいて、クライアント・コンピュータ１０８（図１参照）がサーバ・コンピュータ１０２（図１参照）上で呼び出し関数ｆ１にアクセスしようと試みることに応答して、以下のステップ：すなわち（１）クライアント・コンピュータ１０８（図１参照）が、サーバ・コンピュータ１０２（図１参照）上でＣｏｍｍａｎｄＧｅｎｅｒａｔｏｒ関数を呼び出すステップであって、ＣｏｍｍａｎｄＧｅｎｅｒａｔｏｒ関数は、クライアント側で実行されるコマンドを生成する、ステップ；（２）サーバ・コンピュータ１０２（図１参照）が、コマンドをクライアント・コンピュータ１０８（図１参照）に送るステップ：（３）クライアント・コンピュータ１０８（図１参照）が、ＲｕｎＣｏｍｍａｎｄ関数を呼び出し、コマンドをローカルに実行するステップ；（４）クライアント・コンピュータ１０８（図１参照）が、ＲｕｎＣｏｍｍａｎｄを呼び出した結果を文字列ｓｌとして取得するステップ；（５）クライアント・コンピュータ１０８（図１参照）が、サーバ・コンピュータ１０２（図１参照）上で関数ｆ１を呼び出し、関数ｆ１の呼び出しにおける文字列ｓ１を渡すステップ；及び（６）サーバ・コンピュータ１０２（図１参照）が、内部サーバ関数であるＣｈｅｃｋＰｒｏｔｅｃｔｉｏｎを実行し、文字列ｓ１が、真正なアプリケーションからの関数ｆ１の呼び出しから予想される結果であるかどうかを判断するステップが、実行される。文字列ｓ１が、予想される結果である場合、サーバ・コンピュータ１０２（図１参照）は、関数ｆ１のオリジナル呼び出しを実行する。文字列ｓ１が予想される結果でない場合、サーバ・コンピュータ１０２（図１参照）は、エラーを引き起こし、オリジナル呼び出しを関数ｆ１に戻さない。
【００３０】
コンピュータ・システム
図３は、本発明の実施形態による、図１のシステム内に含まれるサーバ・コンピュータを含み、かつ図２のプロセスを実施する、コンピュータ３００のブロック図である。コンピュータ３００は、一般に、中央処理ユニット（ＣＰＵ）３０２、メモリ３０４、入力／出力（Ｉ／Ｏ）インターフェース３０６及びバス３０８を含むコンピュータ・システムである。さらに、コンピュータ３００は、Ｉ／Ｏデバイス３１０及びコンピュータ・データ・ストレージ・ユニット３１２に結合される。一実施形態において、コンピュータ３００は、サーバ・コンピュータ１０２（図１参照）を含む。ＣＰＵ３０２は、サーバ側認証コンポーネント１０６（図１参照）が、サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護する方法を実行するための、プログラム・コード３１４内に含まれる命令の実行を含む、コンピュータ３００の計算及び制御機能を実行し、ここで、命令は、メモリ３０４を介してＣＰＵ３０２により実行される。別の実施形態において、コンピュータ３００は、クライアント・コンピュータ１０８（図１参照）を含み、ＣＰＵ３０２は、クライアント側認証コンポーネント１１２（図１参照）が、サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護する方法を実行するための、プログラム・コード３１４内に含まれる命令の実行を含む、コンピュータ３００の計算及び制御機能を実行する。ＣＰＵ３０２は、単一の処理ユニットを含むことができ、又は１つ又は複数の位置（例えば、クライアント及びサーバ上）における１つ又は複数の処理ユニットにわたって分散することができる。
【００３１】
メモリ３０４は、以下に説明される、周知のコンピュータ可読ストレージ媒体を含む。一実施形態において、メモリ３０４のキャッシュ・メモリ要素は、プログラム・コードの命令が実行される間、バルク・ストレージからコードを取り出さなければならない回数を減らすために、少なくとも幾つかのプログラム・コード（例えば、プログラム・コード３１４）の一時ストレージを提供する。さらに、ＣＰＵ３０２と同様に、メモリ３０４は、１つ又は複数のタイプのデータ・ストレージを含む、単一の物理的位置にあることもあり、又は複数の物理的システムにわたって種々の形態で分散されることもある。さらに、メモリ３０４は、例えば、ローカル・エリア・ネットワーク（ＬＡＮ）又は広域ネットワーク（ＷＡＮ）などにわたって分散されるデータを含むことができる。
【００３２】
Ｉ／Ｏインターフェース３０６は、外部ソースとの間で情報を交換するためのあらゆるシステムを含む。Ｉ／Ｏデバイス３１０は、２層ディスプレイ１０４（図１参照）、キーボード等を含む、任意の周知のタイプの外部デバイスを含む。バス３０８は、コンピュータ３００内のコンポーネントの各々の間の通信リンクを提供し、電気、光学、無線等を含む、任意のタイプの伝送リンクを含むことができる。
【００３３】
Ｉ／Ｏインターフェース３０６は、コンピュータ３００が、コンピュータ・データ・ストレージ・ユニット３１２又は別のコンピュータ・データ・ストレージ・ユニット（図示せず）上に情報（例えば、データ又はプログラム・コード３１４などのプログラム命令）を格納し、これらから情報を取り出すことも可能にする。コンピュータ・データ・ストレージ・ユニット３１２は、以下に説明される周知のコンピュータ可読ストレージ媒体を含む。一実施形態において、コンピュータ・データ・ストレージ・ユニット３１２は、磁気ディスク・ドライブ（すなわち、ハードディスク・ドライブ）又は光学ディスク・ドライブ（例えば、ＣＤ−ＲＯＭディスクを受けるＣＤ−ＲＯＭドライブ）のような不揮発性データ・ストレージ・デバイスである。
【００３４】
メモリ３０４及び／又はストレージ・ユニット３１２は、サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護するための、メモリ３０４を介してＣＰＵ３０２により実行される命令を含むコンピュータ・プログラム・コード３１４を格納することができる。図３はメモリ３０４を、プログラム・コードを含むものとして示すが、本発明は、メモリ３０４がコード３１４の全てを同時に含まないが、代わりに、一度にコード３１４の一部のみを含む実施形態を考える。
【００３５】
さらに、メモリ３０４は、オペレーティング・システム（図示せず）を含むことができ、図３に示される他のシステムを含むこともできる。
【００３６】
コンピュータ３００に結合されるストレージ・ユニット３１２及び／又は１つ又は複数の他のコンピュータ・データ・ストレージ・ユニット（図示せず）は、真正性情報１０４（図１参照）及びａｐｐソース・ファイル１１８（図１参照）のいずれの組み合わせを含むこともできる。
【００３７】
当業者には理解されるように、第１の実施形態において、本発明は方法とすることができ、第２の実施形態において、本発明はシステムとすることができ、第３の実施形態において、本発明はコンピュータ・プログラム製品とすることができる。
【００３８】
本発明の実施形態のコンポーネントのいずれも、サーバ・コンピュータとクライアント・コンピュータとの間の通信のセキュリティ保護に対して、コンピューティング・インフラストラクチャのデプロイ又は統合を提供するサービス・プロバイダによって、デプロイ、管理、サービス等を行うことができる。従って、本発明の実施形態は、コンピュータ・インフラストラクチャをサポートするためのプロセスを開示し、ここで、プロセスは、１つ又は複数のプロセッサ（例えば、ＣＰＵ３０２）を含むコンピュータ・システム（例えば、コンピュータ３００）において、コンピュータ可読コード（例えば、プログラム・コード３１４）の統合、ホスト、維持、及びデプロイの少なくとも１つを行うために少なくとも１つのサポート・サービスを提供することを含み、プロセッサは、コンピュータ・システムに、サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護させる、コード内に含まれる命令を実行する。別の実施形態は、コンピュータ・インフラストラクチャをサポートするためのプロセスを開示し、このプロセスは、コンピュータ可読プログラム・コードを、プロセッサを含むコンピュータ・システムに統合することを含む。統合するステップは、プログラム・コードを、プロセッサを用いてコンピュータ・システムのコンピュータ可読ストレージ・デバイス内に格納することを含む。プログラム・コードは、プロセッサによって実行されるとき、サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護する方法を実施する。
【００３９】
サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護するためのプログラム・コード３１４は、コンピュータ可読ストレージ媒体（例えば、コンピュータ・データ・ストレージ・ユニット３１２）のロードを介して、クライアント、サーバ、及びプロキシ・コンピュータ（図示せず）内に直接手動でロードすることによってデプロイできることが理解されるが、プログラム・コード３１４は、プログラム・コード３１４を中央サーバ又は中央サーバのグループに送ることによって、コンピュータ３００内に自動的に又は半自動的にデプロイすることもできる。次に、プログラム・コード３１４は、プログラム・コード３１４を実行することになるクライアント・コンピュータ（例えば、コンピュータ３００）にダウンロードされる。代替的に、プログラム・コード３１４は、ｅメールを介してクライアント・コンピュータに直接送られる。次に、プログラム・コード３１４は、クライアント・コンピュータ上のディレクトリにデタッチされるか、又はプログラム・コード３１４をディレクトリにデタッチするプログラムを実行する、ｅメール上のボタンによって、クライアント・コンピュータ上のディレクトリにロードされる。別の代案は、プログラム・コード３１４をクライアント・コンピュータのハードドライブ上にディレクトリに直接送ることである。プロキシ・サーバがある場合、プロセスは、プロキシ・サーバ・コードを選択し、どのコンピュータ上にプロキシ・サーバのコードを配置するかを決定し、プロキシ・サーバ・コードを伝送し、次に、プロキシ・サーバ・コードをプロキシ・コンピュータ上にインストールする。プログラム・コード３１４は、プロキシ・サーバに伝送され、次に、プロキシ・サーバ上に格納される。
【００４０】
本発明の別の実施形態は、加入、広告、及び／又は料金に応じて、プロセス・ステップを実行する方法を提供する。つまり、Ｓｏｌｕｔｉｏｎ  Ｉｎｔｅｇｒａｔｏｒのようなサービス・プロバイダは、サーバ・コンピュータとクライアント・コンピュータとの間の通信をセキュア保護するプロセスの作成、維持、サポート等を提供することができる。この場合、サービス・プロバイダは、１又は複数の顧客のためにプロセス・ステップを実行するコンピュータ・インフラストラクチャを、作成、維持、サポートすることなどが可能である。その見返りとして、サービス・プロバイダは、加入及び／又は料金契約の下で顧客からの支払いを受けること、及び／又は、１つ又は複数のサードパーティに対する広告コンテンツの販売からの支払いを受けることが可能である。
【００４１】
本発明は、システム、方法、及び／又はコンピュータ・プログラム製品とすることができる。コンピュータ・プログラム製品は、プロセッサ（例えば、ＣＰＵ３０２）に、本発明の態様を実行させるためのコンピュータ可読プログラム命令３１４をその上に有するコンピュータ可読ストレージ媒体（すなわち、メモリ３０４及びコンピュータ・データ・ストレージ・ユニット３１２）を含むことができる。
【００４２】
コンピュータ可読ストレージ媒体は、命令実行デバイス（例えば、コンピュータ３００）により使用される命令（例えば、プログラム・コード３１４）を保持及び格納できる有形デバイスとすることができる。コンピュータ可読ストレージ媒体は、例えば、これらに限定されるものではないが、電子記憶装置、磁気記憶装置、光学記憶装置、電磁気記憶装置、半導体記憶装置、又は上記のいずれかの適切な組み合わせとすることができる。コンピュータ可読ストレージ媒体のより具体的な例の非網羅的なリストとして、以下のもの：すなわち、ポータブル・コンピュータ・ディスケット、ハードディスク、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ又はフラッシュメモリ）、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブル・コンパクト・ディスク読み出し専用メモリ（ＣＤ−ＲＯＭ）、デジタル多用途ディスク（ＤＶＤ）、メモリ・スティック、フロッピー・ディスク、パンチカード若しくは命令がそこに記録された溝内の隆起構造のような機械的にエンコードされたデバイス、及び上記のいずれかの適切な組み合わせが挙げられる。本明細書で使用される場合、コンピュータ可読ストレージ媒体は、電波、又は他の自由に伝搬する電磁波、導波管若しくは他の伝送媒体を通じて伝搬する電磁波（例えば、光ファイバ・ケーブルを通る光パルス）、又はワイヤを通って送られる電気信号などの、一時的信号自体として解釈されない。
【００４３】
本明細書で説明されるコンピュータ可読プログラム命令（例えば、プログラム・コード３１４）は、コンピュータ可読ストレージ媒体からそれぞれのコンピューティング／処理デバイス（例えば、コンピュータ３００）に、又は、例えばインターネット、ローカル・エリア・ネットワーク、広域ネットワーク、及び／又は無線ネットワークなどのネットワーク（図示せず）を介して、外部コンピュータ又は外部ストレージ・デバイス（例えば、コンピュータ・データ・ストレージ・ユニット３１２）にダウンロードすることができる。ネットワークは、銅伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、及び／又はエッジ・サーバを含むことができる。各コンピューティング／処理デバイスにおけるネットワーク・アダプタ・カード又はネットワーク・インターフェースは、ネットワークからコンピュータ可読プログラム命令を受け取り、コンピュータ可読プログラム命令を転送して、それぞれのコンピューティング／処理デバイス内のコンピュータ可読ストレージ媒体に格納する。
【００４４】
本発明の動作を実行するためのコンピュータ可読プログラム命令（例えば、プログラム・コード３１４）は、アセンブラ命令、命令セットアーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、又は、Ｓｍａｌｌｔａｌｋ、Ｃ＋＋などのオブジェクト指向プログラミング言語、及び、「Ｃ」プログラミング言語若しくは類似のプログラミング言語などの通常の手続き型プログラミング言語を含む１つ又は複数のプログラミング言語の任意の組み合わせで記述することができる。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で実行される場合もあり、一部がユーザのコンピュータ上で、独立型ソフトウェア・パッケージとして実行される場合もあり、一部がユーザのコンピュータ上で実行され、一部が遠隔コンピュータ上で実行される場合もあり、又は完全に遠隔コンピュータ若しくはサーバ上で実行される場合もある。最後のシナリオにおいて、遠隔コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）若しくは広域ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを通じてユーザのコンピュータに接続される場合もあり、又は外部コンピュータへの接続がなされる場合もある（例えば、インターネットサービスプロバイダを用いたインターネットを通じて）。幾つかの実施形態において、例えば、プログラム可能論理回路、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、又はプログラム可能論理アレイ（ＰＬＡ）を含む電子回路は、コンピュータ可読プログラム命令の状態情報を用いて電子回路を個人化することによりコンピュータ可読プログラム命令を実行し、本発明の態様を実施することができる。
【００４５】
本発明の態様は、本発明の実施形態による方法、装置（システム）及びコンピュータ・プログラム製品のフローチャート図（例えば、図２）及び／又はブロック図（例えば、図１及び図３）を参照して説明される。フローチャート図及び／又はブロック図の各ブロック、並びにフローチャート図及び／又はブロック図内のブロックの組み合わせは、コンピュータ可読プログラム命令（例えば、プログラム・コード３１４）によって実装できることが理解されるであろう。
【００４６】
これらのコンピュータ可読プログラム命令を、汎用コンピュータ、専用コンピュータ、又は他のプログラム可能データ処理装置（例えば、コンピュータ３００）のプロセッサ（例えば、ＣＰＵ３０２）に与えてマシンを製造し、それにより、コンピュータ又は他のプログラム可能データ処理装置のプロセッサによって実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロック内で指定された機能／動作を実施するための手段を作り出すようにすることができる。これらのコンピュータ・プログラム命令を、コンピュータ、他のプログラム可能データ処理装置、及び／又は他のデバイスを特定の方式で機能させるように指示することができるコンピュータ可読媒体（例えば、コンピュータ・データ・ストレージ・ユニット３１２）内に格納し、それにより、そのコンピュータ可読媒体内に格納された命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作の態様を実施する命令を含む製品を含むようにすることもできる。
【００４７】
コンピュータ・プログラム命令（例えば、プログラム・コード３１４）を、コンピュータ（例えば、コンピュータ３００）、他のプログラム可能データ処理装置、又は他のデバイス上にロードして、一連の動作ステップをコンピュータ、他のプログラム可能データ処理装置、又は他のデバイス上で行わせてコンピュータ実施のプロセスを生成し、それにより、コンピュータ又は他のプログラム可能装置上で実行される命令が、フローチャート及び／又はブロック図の１つ又は複数のブロックにおいて指定された機能／動作を実行するためのプロセスを提供するようにすることもできる。
【００４８】
図面内のフローチャート及びブロック図は、本発明の種々の実施形態による、システム、方法、及びコンピュータ・プログラム製品の可能な実装の、アーキテクチャ、機能及び動作を示す。この点に関して、フローチャート内の各ブロックは、指定された論理機能を実装するための１つ又は複数の実行可能命令を含む、モジュール、セグメント、又はコードの一部を表すことができる。幾つかの代替的な実装において、ブロック内に示される機能は、図に示される順序とは異なる順序で生じることがある。例えば、連続して示される２つのブロックは、関与する機能に応じて、実際には実質的に同時に実行されることもあり、又はこれらのブロックはときとして逆順で実行されることもある。ブロック図及び／又はフローチャート図の各ブロック、及びブロック図及び／又はフローチャート図内のブロックの組み合わせは、指定された機能又は動作を実行する、又は専用のハードウェアとコンピュータ命令との組み合わせを実行する、専用ハードウェア・ベースのシステムによって実装できることにも留意されたい。
【００４９】
本発明の実施形態は、本明細書において、説明のために説明されているが、当業者には、多くの修正及び変更が明らかになるであろう。従って、添付の特許請求の範囲は、本発明の範囲内に入る全てのそうした修正及び変更を含むように意図される。
【符号の説明】
【００５０】
１００：システム
１０２：サーバ・コンピュータ
１０４：真正性情報
１０６：サーバ側認証コンポーネント
１０８：クライアント・コンピュータ
１１０：アプリケーション
１１２：クライアント側認証コンポーネント
１１４：チャレンジ・ユーティリティ
１１６：アプリケーション真正性ツール
１１８：アプリケーション（ａｐｐ）ソース・ファイル
３００：コンピュータ
３０２：中央処理ユニット（ＣＰＵ）
３０４：メモリ
３０６：入力／出力（Ｉ／Ｏ）インターフェース
３０８：バス
３１０：Ｉ／Ｏデバイス
３１２：コンピュータ・データ・ストレージ・ユニット
３１４：プログラム・コード
【図１】
0006967074.tif 000002
【図２】
0006967074.tif 000003
【図３】
0006967074.tif 000004