(57)【要約】      （修正有）【課題】コンピュータ可読プログラムの情報漏れを判別する方法を提供する。【解決手段】コンピュータ可読プログラムの第一のコンポーネントを取得する。第一のコンポーネントは未知の第一の情報漏れがある可能性がある。第一のコンポーネントは、第二のコンポーネントおよび第三のコンポーネントを含む３１０。第二のコンポーネントの第二の情報漏れを取得する３２０。第三のコンポーネントの第三の情報漏れを取得する３３０。第一のコンポーネントに対する第二のコンポーネントと第三のコンポーネントとの間の関係を判別する３４０。前記第二の情報漏れ、前記第三の情報漏れおよび前記関係に基づいて前記第一の情報漏れを決定する３５０。【選択図】図３
2020102210.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ可読プログラムの第一のコンポーネントを得る段階であって、前記第一のコンポーネントは、未知の第一の情報漏れを有し、前記第一のコンポーネントは、第二のコンポーネントおよび第三のコンポーネントから構成される、段階と；
前記第二のコンポーネントの第二の情報漏れを得る段階と；
前記第三のコンポーネントの第三の情報漏れを得る段階と；
前記第一のコンポーネントに対する前記第二のコンポーネントと前記第三のコンポーネントとの間の関係を判別する段階と；
前記第二の情報漏れ、前記第三の情報漏れ、および前記関係に基づいて前記第一の情報漏れを決定する段階とを含む、
方法。
【請求項２】
前記第一の情報漏れを決定する段階に応答して、前記第一の情報漏れを低減するよう、前記第一のコンポーネントにおける安全でないコード行を、前記第一のコンポーネントにおける一つまたは複数の安全なコード行で置き換える段階をさらに含む、請求項１記載の方法。
【請求項３】
前記第一の情報漏れを決定する段階に応答して、前記第一のコンポーネントによってアクセスされる情報が露出の危険にさらされていることを示すために、前記第一のコンポーネントを、安全でないとしてフラグ付けする段階をさらに含む、請求項１記載の方法。
【請求項４】
前記第一の情報漏れを決定する段階に応答して、前記コンピュータ可読プログラムが機微な情報を漏らすか否かを判定し、
前記コンピュータ可読プログラムが前記機微な情報を漏らすと判定することに応答して、前記コンピュータ可読プログラムを、前記機微な情報を使用しての実行のためには承認されないとしてフラグ付けすることをさらに含む、
請求項１記載の方法。
【請求項５】
特定の情報を使って前記コンピュータ可読プログラムを実行する段階と；
前記第一の情報漏れを決定する段階に応答して、前記特定の情報が前記コンピュータ可読プログラムの実行中に露出されたかどうかを判定することをさらに含む、
請求項１記載の方法。
【請求項６】
前記第二のコンポーネントが第一の入力および第一の出力を有し、
前記第三のコンポーネントが第二の入力および第二の出力を有し、
前記関係が、前記第一の入力が前記第二の出力から独立であり、前記第二の入力が前記第一の出力から独立である前記第二のコンポーネントと前記第三のコンポーネントとの並列合成を含み、
前記第一の情報漏れを決定することは、前記第二の情報漏れと前記第三の情報漏れとを前記第一の情報漏れにおいて独立して組み合わせることを含む、
請求項１記載の方法。
【請求項７】
前記第二のコンポーネントが第一の入力および第一の出力を有し、
前記第三のコンポーネントが第二の入力および第二の出力を有し、
前記関係が、前記第一の出力が前記第二の入力として前記第三のコンポーネントによって使用される逐次合成を含み、
前記第一の情報漏れを決定することは、前記第二の情報漏れと前記第一の出力を前記第二の入力として使う前記第三のコンポーネントの第四の情報漏れとを組み合わせることを含む、
請求項１記載の方法。
【請求項８】
前記コンピュータ可読プログラムは、前記関係が、ある条件の満足に応答して前記第二のコンポーネントが実行され、前記条件の不満足に応答して前記第三のコンポーネントが実行されるような条件付き分岐を含むよう構成され、
前記第一の情報漏れを決定することは、前記条件が満たされるかどうかを前記第一の情報漏れに含めることを含む、
請求項１記載の方法。
【請求項９】
前記第一の情報漏れが前記条件が満たされるかどうかを含むことに応答して：
前記第二のコンポーネントが前記第三のコンポーネントとメモリにおいて同じサイズになるよう、前記第二のコンポーネントにパディングすること；および
メモリにおける前記第二のコンポーネントおよび前記第三のコンポーネントの命令ブロックの位置を忘却的にシャッフルすることをさらに含む、
請求項８記載の方法。
【請求項１０】
前記関係が、前記第三のコンポーネントが実行される前に前記第二のコンポーネントがある回数実行される原始的再帰を含み、
前記第一の情報漏れを決定することは、前記第二のコンポーネントが実行される回数を前記第一の情報漏れに含めることを含む、
請求項１記載の方法。
【請求項１１】
第二のコンポーネントが第四のコンポーネントおよび第五のコンポーネントから構成され、前記第二の情報漏れを得ることは：
前記第四のコンポーネントの第五の情報漏れを取得する段階と；
前記第五のコンポーネントの第六の情報漏れを取得する段階と；
前記第二のコンポーネントに対する前記第四のコンポーネントと前記第五のコンポーネントとの間の第二の関係の判別する段階と；
前記第五の情報漏れ、前記第六の情報漏れ、および前記第二の関係に基づいて前記第二の情報漏れを決定する段階とを含む、
請求項１記載の方法。
【請求項１２】
前記コンピュータ可読プログラムを取得する段階と；
前記コンピュータ可読プログラムを、前記第二のコンポーネントおよび前記第三のコンポーネントを含む複数のコンポーネントに分割する段階と；
前記複数のコンポーネントのそれぞれを再帰的にサブコンポーネントに細分する段階と；
前記複数のサブコンポーネントのそれぞれについて漏れを得る段階と；
各サブコンポーネントの漏れに基づいて前記コンピュータ可読プログラムの総合漏れを決定する段階とをさらに含む、
請求項１記載の方法。
【請求項１３】
少なくとも一つのプロセッサによって実行されたときに、システムに動作を実行させる、または動作を実行するよう指令する一つまたは複数の命令を記憶するよう構成された少なくとも一つの非一時的なコンピュータ可読媒体であって、前記動作は：
コンピュータ可読プログラムの第一のコンポーネントを得る段階であって、前記第一のコンポーネントは、未知の第一の情報漏れを有し、前記第一のコンポーネントは、第二のコンポーネントおよび第三のコンポーネントから構成される、段階と；
前記第二のコンポーネントの第二の情報漏れを得る段階と；
前記第三のコンポーネントの第三の情報漏れを得る段階と；
前記第一のコンポーネントに対する前記第二のコンポーネントと前記第三のコンポーネントとの間の関係を判別する段階と；
前記第二の情報漏れ、前記第三の情報漏れ、および前記関係に基づいて前記第一の情報漏れを決定する段階とを含む、
非一時的なコンピュータ可読媒体。
【請求項１４】
前記動作が：前記第一の情報漏れを決定する段階に応答して、前記第一の情報漏れを低減するよう、前記第一のコンポーネントにおける安全でないコード行を、前記第一のコンポーネントにおける一つまたは複数の安全なコード行で置き換える段階をさらに含む、請求項１３記載の非一時的なコンピュータ可読媒体。
【請求項１５】
前記動作が：前記第一の情報漏れを決定する段階に応答して、前記第一のコンポーネントによってアクセスされる情報が露出の危険にさらされていることを示すために、前記第一のコンポーネントを、安全でないとしてフラグ付けする段階をさらに含む、請求項１３記載の非一時的なコンピュータ可読媒体。
【請求項１６】
前記動作が：
前記第一の情報漏れを決定する段階に応答して、前記コンピュータ可読プログラムが機微な情報を漏らすか否かを判定し、
前記コンピュータ可読プログラムが前記機微な情報を漏らすと判定することに応答して、前記コンピュータ可読プログラムを、前記機微な情報を使用しての実行のためには承認されないとしてフラグ付けすることをさらに含む、
請求項１３記載の非一時的なコンピュータ可読媒体。
【請求項１７】
一つまたは複数のプロセッサと、一つまたは複数のコンピュータ可読媒体とを含むシステムであって、当該システムは動作を実行するよう構成され、前記動作は：
コンピュータ可読プログラムの第一のコンポーネントを得る段階であって、前記第一のコンポーネントは、未知の第一の情報漏れを有し、前記第一のコンポーネントは、第二のコンポーネントおよび第三のコンポーネントから構成される、段階と；
前記第二のコンポーネントの第二の情報漏れを得る段階と；
前記第三のコンポーネントの第三の情報漏れを得る段階と；
前記第一のコンポーネントに対する前記第二のコンポーネントと前記第三のコンポーネントとの間の関係を判別する段階と；
前記第二の情報漏れ、前記第三の情報漏れ、および前記関係に基づいて前記第一の情報漏れを決定する段階とを含む、
システム。
【請求項１８】
前記動作が：前記第一の情報漏れを決定する段階に応答して、前記第一の情報漏れを低減するよう、前記第一のコンポーネントにおける安全でないコード行を、前記第一のコンポーネントにおける一つまたは複数の安全なコード行で置き換える段階をさらに含む、請求項１７記載のシステム。
【請求項１９】
前記動作が：前記第一の情報漏れを決定する段階に応答して、前記第一のコンポーネントによってアクセスされる情報が露出の危険にさらされていることを示すために、前記第一のコンポーネントを、安全でないとしてフラグ付けする段階をさらに含む、請求項１７記載のシステム。
【請求項２０】
前記動作が：
前記第一の情報漏れを決定する段階に応答して、前記コンピュータ可読プログラムが機微な情報を漏らすか否かを判定し、
前記コンピュータ可読プログラムが前記機微な情報を漏らすと判定することに応答して、前記コンピュータ可読プログラムを、前記機微な情報を使用しての実行のためには承認されないとしてフラグ付けすることをさらに含む、
請求項１７記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示において議論される実施形態は、コンピュータ可読プログラムの情報漏れを判別することに関する。
【背景技術】
【０００２】
機微な情報を保護することは、多くの人々や組織にとって懸案である。いくつかのコンピュータ可読プログラムは機微な情報に対して作用し、該機微な情報を露出させることがある。
【０００３】
本開示に記載される主題は、何らかの欠点を解決する、または上記のような環境においてのみ動作する実施形態に限定されない。むしろ、この背景は、本開示に記載されるいくつかの実施形態が実施されうる一つの例示的な技術分野を示すためにのみ提供される。
【発明の概要】
【課題を解決するための手段】
【０００４】
本開示のある実施形態は、コンピュータ可読プログラムの第一のコンポーネントを取得することを含む方法を含むことができる。第一のコンポーネントは、未知でありうる第一の情報漏れがある可能性がある。第一のコンポーネントは、第二のコンポーネントおよび第三のコンポーネントから構成されていてもよい。本方法はまた、第二のコンポーネントの第二の情報漏れを取得することをも含みうる。本方法はまた、第三のコンポーネントの第三の情報漏れを取得することをも含みうる。本方法はまた、第一のコンポーネントに対する第二のコンポーネントと第三のコンポーネントとの間の関係を決定することを含んでいてもよい。本方法はまた、前記第二の情報漏れ、前記第三の情報漏れおよび前記関係に基づいて前記第一の情報漏れを判別することを含むことができる。
【０００５】
実施形態の目的および／または利点のうちの一つまたは複数は、少なくとも特許請求の範囲において特に指摘される要素、特徴、および組み合わせによって実現または達成される。
【０００６】
前述の一般的な説明および以下の詳細な説明はいずれも、例および説明として与えられており、特許請求される本開示を制約するものではないことが理解されるべきである。
【図面の簡単な説明】
【０００７】
例示的な実施形態が、添付の図面の使用を通じて、さらに具体的かつ詳細に記述され、説明される。
【０００８】
【図１】コンピュータ可読プログラムの情報漏れを判別するための例示的システムのブロック図である。
【０００９】
【図２Ａ】並列合成を含む例示的なコンポーネントのブロック図である。
【００１０】
【図２Ｂ】逐次合成を含む例示的なコンポーネントのブロック図である。
【００１１】
【図２Ｃ】条件付き分岐を含む例示的なコンポーネントのブロック図である。
【００１２】
【図２Ｄ】原始的再帰を含む例示的なコンポーネントのブロック図である。
【００１３】
【図３】コンピュータ可読プログラムの情報漏れを判別するための例示的なプロセスのフローチャートである。
【００１４】
【図４】例示的なコンピューティング・システムのブロック図である。
【００１５】
これらはみな、本開示に記載される少なくとも一つの実施形態に基づく。
【発明を実施するための形態】
【００１６】
本開示は、コンピュータ可読プログラムの情報漏れを決定することに関する。本開示において、「情報漏れ（information  leakage）」という用語は、コンピュータ可読プログラムがどのように動作するかを観察することによって決定されうる情報、たとえば、メモリ・アクセス・パターンを観察することによって決定されうる情報をいう。本開示において、用語「露出させる」または「露出させられる」は、同様に、コンピュータ可読プログラムがどのように動作するかを観察することによって、漏らされうる情報の状態を記述する。
【００１７】
本開示は、コンピュータ可読プログラムの特定のコンポーネントの漏れおよびそれらの関係を判別することによって、コンピュータ可読プログラム全体の情報漏れを判別することに関する。本開示において、コンピュータ可読プログラム全体の諸コンポーネントの情報漏れからコンピュータ可読プログラム全体の情報漏れを判別することは、「情報漏れの合成（composing  information  leakage）」と称されることがある。たとえば、コンピュータ可読プログラム全体の情報漏れは、コンピュータ可読プログラムのコードの二つ以上の個別のコンポーネントの情報漏れを取得し、コンピュータ可読プログラム全体に対するコードの前記二つ以上のコンポーネントの間の関係を決定し、前記二つ以上のコンポーネントの情報漏れに個々に基づいてコンピュータ可読プログラム全体の漏れを決定し、前記二つ以上のコンポーネントとコンピュータ可読プログラム全体との間の関係を決定することによって決定されてもよい。前記二つ以上のコンポーネントの間の関係は、並列合成、逐次合成、条件付き分岐、および／または原始的再帰を含んでいてもよい。
【００１８】
本開示のかかる実施形態は、特定の仕方でソフトウェア開発の技術分野を改善する。たとえば、本開示の実施形態は、コンピュータ可読プログラムの情報漏れを分析、管理、および／または低減するのに有用でありうる。
【００１９】
たとえば、本開示の実施形態は、コンピュータ可読プログラムのコンポーネントの情報漏れを判別するために使用されうる。該判別に応答して、そのコンポーネントの一つまたは複数の安全でないコード行が、一つまたは複数の安全なコード行で置き換えられてもよい。置き換えは、ソフトウェア開発者および／または自動化されたソフトウェア開発ツールによって達成されうる。この置き換えにより、コンピュータ可読プログラムの情報漏れを低減することができる。よって、本開示の実施形態は、コンピュータ可読プログラムのコンポーネントの情報漏れを決定することによってソフトウェア開発および／またはデータ・セキュリティーの技術分野を改善することができ、そのコンポーネントを修正することによって、機微な情報の露出を低減することができる。一つまたは複数のそのような例は、図２Ｃを参照して下記でより詳細に記載される。
【００２０】
別の例として、コンポーネントの情報漏れの判別に応答して、そのコンポーネントは、そのコンポーネントによってアクセスされる情報に露出のリスクがありうることを示すために、安全でないとしてフラグ付けされてもよい。これは、ソフトウェア開発者、および／または自動化されたソフトウェア開発ツールに対して、露出のリスクを警告しうる。該フラグに応答して、ソフトウェア開発者および／または自動化されたソフトウェア開発ツールは、そのコンポーネントおよび／またはそのコンポーネントがコンピュータ可読プログラムにおいて使用される仕方を修正しうる。追加的または代替的に、開発者および／または自動化されたソフトウェア開発ツールは、フラグ付けに基づいて、そのコンポーネントにおいてどの情報を使用するかを決定してもよい。たとえば、開発者は、機微な情報がそのコンポーネントによってアクセスされないように、コンピュータ可読プログラムを設計してもよい。よって、本開示の実施形態は、コンピュータ可読プログラムのコンポーネントを安全でないものとしてフラグ付けすることによってソフトウェア開発および／またはデータ・セキュリティーの技術分野を改善することができ、そのコンポーネント、コンピュータ可読プログラムを修正すること、および／またはそのコンポーネントによってどの情報がアクセスされるかを修正することによって、機微な情報の露出が低減されうる。
【００２１】
別の例として、コンピュータ可読プログラムが情報を漏らすとの判別に応答して、機微な情報を使用してプログラムを実行するときに、漏らされる情報が機微な情報であるかどうかを判定する。そのような判定は、そのコンピュータ可読プログラムを、機微な情報を使用しての実行のために承認されたまたは承認されないものとしてフラグ付けするための基礎として使用されてもよい。よって、本開示の実施形態は、コンピュータ可読プログラムを、承認されているまたは承認されていないものとしてフラグ付けすることによって、ソフトウェア開発および／またはデータ・セキュリティーの技術分野を改善することができ、未承認のプログラムが機微な情報にアクセスすることを防止することによって、機微な情報の露出を減らすことができる。
【００２２】
別の例として、コンピュータ可読プログラムは、特定の情報を使用して実行されてもよい。コンポーネントの情報漏れの判別に応答して、その特定の情報がコンピュータ可読プログラムの実行中に露出されたか否かの判定を行なうことができる。よって、本開示の実施形態は、特定の情報が漏らされたか否かを判定することによって、ソフトウェア分析、データ・フォレンジック、および／またはデータ・セキュリティーの技術分野を改善することができる。
【００２３】
本開示のこれらの実施形態は、信頼される実行環境（trusted  execution  environment、TEE）で実行されるコンピュータ可読プログラムへの応用をもちうる。たとえば、TEEにおいて、攻撃者は、アクセスされたメモリ位置に記憶されたデータを観察することができなくとも、どのメモリ位置がアクセスされるかを観察することができることがある。本開示の実施形態は、情報漏れを低減するようコンピュータ可読プログラムを修正するおよび／または該修正を可能にすることによって、TEEにおいて使用されうるコンピュータ可読プログラムのデータ・セキュリティーを改善することができる。
【００２４】
さらに、本開示の実施形態は、コンピュータによって以前に実行されなかった機能のコンピュータ実行を許容することによって、コンピュータの機能を改善することができる。たとえば、コンピュータ可読プログラムまたはその一つまたは複数のコンポーネントの情報漏れを判別する。
【００２５】
図１は、本開示に記載される少なくとも一つの実施形態による、コンピュータ可読プログラムの情報漏れを判別するための例示的なシステム100のブロック図である。一般に、情報漏れ識別器120は、コンピュータ可読プログラム102および／またはそのコンポーネント110を解析するよう構成されてもよい。情報漏れ識別器120は、情報漏れプロファイル130を生成するよう構成されてもよい。追加的または代替的に、情報漏れ識別器120は、修正されたコンピュータ可読プログラム140を生成するよう構成されてもよい。
【００２６】
いくつかの実施形態では、コンピュータ可読プログラム102は、人間可読コードおよび／または機械実行可能命令のような任意の好適なフォーマットの任意のコンピュータ可読プログラムを含んでいてもよい。いくつかの実施形態では、コンピュータ可読プログラム102は、信頼される実行環境内での動作のために構成、設計、および／または意図されてもよい。これらおよび他の実施形態において、コンピュータ可読プログラム102は、機微な情報に対して作用し、機微な情報を入力として受け取り、あるいは機微な情報を他の仕方で利用するもしくは潜在的に露出させるよう設計されることがありうる。コンピュータ可読プログラムは、機微な情報の直接的な露出を管理または低減する仕方で設計または使用されてもよい。それにもかかわらず、機微な情報は、コンピュータ可読プログラムの動作によって露出されることがありうる。
【００２７】
いくつかの実施形態では、機微な情報104は、コンピュータ可読プログラム102の実行中に使用されうる、任意の好適なフォーマット、たとえば、拡張可能マークアップ言語（XML）またはコンマ区切り値（CSV）の情報を含みうる。いくつかの実施形態では、機微な情報104は暗号化されてもよい。機微な情報〔センシティブな情報〕104は、たとえば個人を特定できる情報、健康情報、および／または財務情報を含む、実際のまたはシミュレーションされた機微な情報を含んでいてもよい。機微な情報104は、さまざまな程度の敏感さの情報を含んでいてもよく、たとえば、特定の人の社会保障番号は、その特定の人の住所よりも敏感でありうる。
【００２８】
追加的または代替的に、機微な情報104は、シミュレーションされたデータまたはコンピュータ可読プログラム102の試験のために設計されたデータを含むことができる。機微な情報104は、コンピュータ可読プログラム102、および／またはコンピュータ可読プログラム102の動作に関連する情報を含んでいてもよい。いくつかの実施形態では、システム100は、いかなる機微な情報104もなく動作してもよく、いかなる機微な情報104も参照することなく、情報漏れプロファイル130および／または修正されたコンピュータ可読プログラム140を生成してもよい。
【００２９】
いくつかの実施形態では、コンポーネント110は、任意の好適なフォーマットの、コンピュータ可読プログラム102の一つまたは複数のコンポーネントでありうる。コンポーネント110は、コード行、関数、メソッド、および／またはプロセッサ命令を含んでいてもよい。いくつかの実施形態では、コンピュータ可読プログラム102は、諸コンポーネント110のすべてが組み合わさってコンピュータ可読プログラム102をなすよう、諸コンポーネント110に分割されてもよい。
【００３０】
いくつかの実施形態では、情報漏れ識別器120は、コンピュータ可読プログラム102および／またはその一つまたは複数のコンポーネント110を解析して、情報漏れプロファイル130および／または修正されたコンピュータ可読プログラム140を生成するよう構成されてもよい。情報漏れ識別器120は、コンピュータ可読プログラム102および／またはコンポーネント110を解析するときに、機微な情報104を使用しても、しなくてもよい。
【００３１】
いくつかの実施形態では、情報漏れ識別器120は、コンピュータ可読プログラム102をコンポーネント110に分割するよう構成されてもよい。いくつかの実施形態では、情報漏れ識別器120は、コンポーネントが、各個別のコンポーネントについての漏れが情報漏れ識別器120によって識別可能なサイズになるまで、コンポーネント110をますます小さなコンポーネント110に再帰的に分割するよう構成されてもよい。情報漏れ識別器120は、細分されたコンポーネント110の各コンポーネントの情報漏れを決定するよう構成されてもよい。たとえば、コンポーネント110は、既知の情報漏れを有するコードの別の例示的な部分と比較されてもよい。これらまたは他の実施形態において、ソフトウェア開発者は、細分されたコンポーネントの一つまたは複数の漏れを判別しうる。
【００３２】
たとえば、あるコンポーネント110がある順序でメモリの諸ブロックにアクセスすることがあり、それにより、たとえデータが暗号化されていても、アドレス・ブロックがアクセスされる順序が、暗号化されたデータに関する情報を露出させることがありうる。たとえば、コンポーネントがパスワードのビット毎の比較を行なうよう構成され、各不一致ビットについて第一のメモリ位置がアクセスされ、各一致ビットについて第二のメモリ位置がアクセスされるとすると、どのメモリ位置がアクセスされるかを観察することによってパスワードを決定することができるため、パスワードが漏らされる可能性がある。別の例として、あるコンポーネントは、メモリの特定のブロックに繰り返しアクセスすることがある。メモリのその特定のブロックに対して作用するのに費やされる時間の長さ、またはメモリのその特定のブロックがアクセスされる回数が、攻撃者に見える可能性がある。たとえば、メモリの特定のブロックが各顧客について一度アクセスされるとすると、これは、データベース内の顧客の数を露出させる可能性がある。
【００３３】
これらおよび他の実施形態では、情報漏れ識別器120は、細分されたコンポーネント110の各コンポーネントの情報漏れを集約して、コンピュータ可読プログラム102全体の情報漏れを決定するよう構成されてもよい。追加的または代替的に、情報漏れ識別器120は、細分されたコンポーネント110のうちの一つまたは複数の情報漏れを決定して、プログラム102全体より小さいあるコンポーネント110の漏れを決定するよう構成されてもよい。
【００３４】
コンポーネント110の情報漏れがどのように集約されて、より大きなコンポーネントまたはコンピュータ可読プログラム102全体の情報漏れを形成するかは、さまざまなコンポーネント110間の関係に基づいていてもよい。情報漏れ識別器120は、さまざまなコンポーネント110間のさまざまな関係を判別し、該さまざまな関係に基づいて情報漏れを集約するよう構成されてもよい。四つの関係の例が、図２Ａ〜図２Ｄに関して下記で与えられる。いくつかの実施形態では、さまざまなコンポーネント110間の関係は、コンポーネント110を一般的なコーディング・パターンと比較することによって決定されてもよい。追加的または代替的に、コンピュータ可読プログラムは、ある種のキーワード等について構文解析〔パース〕されてもよい。たとえば、「for」または「while」というキーワードは、原始的再帰関係を示しうる。
【００３５】
いくつかの実施形態では、情報漏れ識別器120は、いかなる特定の情報にも関係なく、コンピュータ可読プログラム102および／または一つまたは複数のコンポーネント110の情報漏れを判別するよう構成されてもよい。いくつかの実施形態では、情報漏れ識別器120は、機微な情報104に関連して、コンピュータ可読プログラム102および／または一つまたは複数のコンポーネント110の情報漏れを判別するように構成されてもよい。たとえば、情報漏れ識別器120は、機微な情報104を使用してのコンピュータ可読プログラム102の実行中に、もしあるとすれば機微な情報104のどの部分が露出されるかを決定するよう構成されてもよい。追加的または代替的に、情報漏れ識別器120は、すでに行なわれたコンピュータ可読プログラム102の実行中に、機微な情報104または機微な情報104のうちの特定の情報が露出されたかどうかを判断するよう構成されてもよい。
【００３６】
いくつかの実施形態では、情報漏れ識別器120は、コンピュータ可読プログラム102および／または一つまたは複数のコンポーネント110によって露出された情報が安全閾値を満たすかどうかを判定するよう構成されてもよい。たとえば、安全閾値は、いかなる特定の情報にも関係なく、情報が露出されるかどうかに基づいてもよい。別の例では、安全閾値は、機微な情報104のうちの露出される量（たとえば、機微な情報104の30%が露出される）および／または機微な情報104のうちの特定の情報が露出されるか否か（たとえば、機微な情報104のうちの要素1および5が露出される）に基づくことができる。コンピュータ可読プログラム102および／または一つまたは複数のコンポーネント110の実行中に露出される情報が安全閾値を満たすかどうかに基づいて、情報漏れ識別器120は、前記コンピュータ可読プログラム102および／または前記一つまたは複数のコンポーネント110を、機微な情報を使用しての実行について承認されたまたは承認されていないものとしてフラグ付けするよう構成されてもよい。たとえば、特定のコンポーネント110は、実際のまたは仮想的な動作中にその特定のコンポーネントが機微な情報104のうちのある量の情報または特定の情報を露出させることに基づいて、機微な情報を使用しての実行のために承認されないものとしてフラグ付けされてもよい。別の例として、コンピュータ可読プログラム102は全体として、何らかの特定の情報に関して、または何の特定の情報にも関わりなく、機微な情報を処理するために承認されたものとしてフラグ付けされてもよい。
【００３７】
いくつかの実施形態では、情報漏れプロファイル130は、コンポーネント110および／またはコンピュータ可読プログラム102の情報漏れの指標を含んでいてもよい。情報漏れプロファイル130は、コンポーネント110および／またはコンピュータ可読プログラム102のどの内部変数がコンポーネント110および／またはコンピュータ可読プログラム102の実行中に漏れを被りやすいかのリストを含んでいてもよい。追加的または代替的に、情報漏れプロファイル130は、機微な情報104を使用してのコンポーネント110および／またはコンピュータ可読プログラム102の実行中に、機微な情報104のどの情報が漏れを被りやすいかのリストを含んでいてもよい。
【００３８】
追加的または代替的に、情報漏れプロファイル130は、機微な情報を使用しての実行のために、コンポーネント110および／またはコンピュータ可読プログラム102のうちの一つまたは複数の、一つまたは複数の承認および／または不承認を含んでいてもよい。たとえば、情報漏れプロファイル130は、特定のコンポーネント110またはコンピュータ可読プログラム102が全体として、機微な情報を使用しての実行のために承認されていることを示す情報を含んでいてもよい。別の例として、情報漏れプロファイル130は、特定のコンポーネント110が機微な情報を使用しての実行について承認されていないことを示す情報を含んでいてもよい。そのような不承認は、ソフトウェア開発者および／または自動化されたソフトウェア開発ツールに対する、次のうちの一つまたは複数を修正するようにとの警告であってもよい：不承認コンポーネント、不承認コンポーネントがコンピュータ可読プログラム102においてどのように使用されるか、および／またはどの機微な情報104が不承認コンポーネントによってアクセスされることが許容されるか。
【００３９】
いくつかの実施形態では、情報漏れプロファイル130は、コンピュータ可読プログラム102の、またはコンピュータ可読プログラム102の一つまたは複数のコンポーネント110の情報漏れを判別するための関数を含んでいてもよい。たとえば、情報漏れ識別器120は、コンピュータ可読プログラム102に基づいて、情報漏れプロファイル130に含まれる関数を生成してもよい。関数は、機微な情報104を入力として受け取り、該機微な情報104のうち、コンピュータ可読プログラム102による露出を被りうる情報（「漏らされる機微な情報132」）を識別することができる。
【００４０】
いくつかの実施形態では、漏らされる機微な情報132は、コンピュータ可読プログラム102によって漏らされやすい情報であってもよい。漏らされる機微な情報132は、機微な情報104の部分集合であってもよい。いくつかの実施形態では、漏らされる機微な情報132は、情報漏れプロファイル130によって生成されてもよい。たとえば、情報漏れプロファイル130は、機微な情報104を入力として受け取り、該機微な情報104のうち、コンピュータ可読プログラム102によって漏らされうる部分を識別する関数を含んでいてもよい。これらまたは他の実施形態において、漏らされる機微な情報132は、情報漏れ識別器120によって生成されてもよい。
【００４１】
いくつかの実施形態において、修正されたコンピュータ可読プログラム140は、コンピュータ可読プログラム102に対してなされた一つまたは複数の修正を含んでいてもよい。特定のコンピュータ可読プログラム102または特定のコンポーネント110が機微な情報を使用しての実行のために承認されないという決定に基づいて、特定のコンピュータ可読プログラム102または特定のコンポーネント110が修正されてもよい。たとえば、コンピュータ可読プログラム102が情報を漏らすという判別に基づいて、コンピュータ可読プログラム102が修正されてもよい。別の例では、特定の漏らされる機微な情報132に基づいて、コンピュータ可読プログラム102が修正されるべきであるとの決定がされてもよい。たとえば、特定のコンポーネント110は、潜在的なリークを引き起こす安全でないコード行を含むことがありうる。安全でないコード行は、リークの可能性をなくすまたは低減する、その特定のコンポーネント110における安全なコード行で置き換えられてもよい。別の例として、その特定のコンポーネントを含むコンピュータ可読プログラム102は、その特定のコンポーネントがデータにアクセスする仕方が変更されるように修正されてもよい。たとえば、コンピュータ可読プログラム102は、その特定のコンポーネント110が機微な情報104にアクセスしないように修正される、データがアクセスされる順序が修正される（たとえばランダム化される）ように修正される、データが記憶されるメモリ・アドレスが修正されるように修正される、などしてもよい。コンポーネント110を修正する例が、図２Ｃに関して下記で与えられる。
【００４２】
いくつかの実施形態において、情報漏れ識別器120は、コンピュータ可読プログラム102の解析に基づいて、修正されたコンピュータ可読プログラム140を生成するよう構成されてもよい。たとえば、情報漏れ識別器120は、情報漏れプロファイル130に基づいて、修正されたコンピュータ可読プログラム140を生成するよう構成されてもよい。いくつかの実施形態では、情報漏れ識別器120は、漏らされる機微な情報132に基づいて、修正されたコンピュータ可読プログラム140を生成するよう構成されてもよい。たとえば、情報漏れプロファイル130は、漏らされる機微な情報132を生成しうる関数を含んでいてもよい。該漏らされる機微な情報132は、機微な情報104のうちの、コンピュータ可読プログラム102の動作中に露出されうる情報を含んでいてもよい。情報漏れ識別器120は、漏らされる機微な情報132に含まれる情報を低減または変更するために、修正されたコンピュータ可読プログラム140を生成してもよい。
【００４３】
いくつかの実施形態では、情報漏れ識別器120は、図４のコンピューティング・システム400のような、情報漏れを識別することに関係する一つまたは複数の動作をコンピューティング・システムが実行できるようにするよう構成されたコードおよびルーチンを含んでいてもよい。追加的または代替的に、情報漏れ識別器120は、プロセッサ、マイクロプロセッサ（たとえば、一つまたは複数の動作を実行するまたはその実行を制御するための）、フィールドプログラマブルゲートアレイ（FPGA）、および／または、特定用途向け集積回路（ASIC）、たとえば図４のプロセッサ402を含むハードウェアを使って実装されてもよい。いくつかの他の事例では、情報漏れ識別器120は、ハードウェアおよびソフトウェアの組み合わせを使って実装されてもよい。本開示において、情報漏れ識別器120によって実行されると記載されている動作は、情報漏れ識別器120がシステムに実行を指令しうる動作を含んでいてもよい。
【００４４】
本開示の範囲から逸脱することなく、システム100に修正、追加、または省略を行なうことができる。たとえば、機微な情報104は、コンピュータ可読プログラム102の一部であってもよく、または、コンピュータ可読プログラム102に直接関連していてもよい。これらまたは他の実施形態において、システム100は、いかなる機微な情報104もなく動作することができ、いかなる機微な情報104も参照することなく、情報漏れプロファイル130および／または修正されたコンピュータ可読プログラム140を生成するよう構成されてもよい。別の例として、情報漏れ識別器120は、情報漏れプロファイル130および修正されたコンピュータ可読プログラム140のいずれか一方のみを生成してもよい。別の例として、情報漏れ識別器120は、漏らされる機微な情報132を直接的に、または情報漏れプロファイル130の一部として生成してもよい。別の例として、システム100は、漏らされる機微な情報132を全く生成しなくてもよい。
【００４５】
図２Ａは、本開示に記載される少なくとも一つの実施形態による、並列合成を含む例示的なコンポーネント210のブロック図である。図２Ａに示される並列合成は、コンピュータ可読プログラムのコンポーネント210間の関係の一例である。
【００４６】
図２Ａには、第一のコンポーネント210A、第二のコンポーネント210B、および第三のコンポーネント210Cの三つのコンポーネント（まとめてコンポーネント210と称する）が示されている。第一のコンポーネント210Aは、第二のコンポーネント210Bおよび第三のコンポーネント210Cを含んでいてもよい（たとえば、第一のコンポーネント210Aは、第二のコンポーネント210Bのソフトウェア・コードおよび第三のコンポーネント210Cのソフトウェア・コードを含むソフトウェア・コードの上位集合を含んでいてもよい）。図２Ａには、第一の入力211Aおよび第二の入力211Bという二つの入力（まとめて入力211と称する）が示されている。第一の入力211Aは、第二のコンポーネント210Bの入力を表わすことができる。第二の入力211Bは、第三のコンポーネント210Cの入力を表わすことができる。図２Ａには、第一の情報漏れ212A、第二の情報漏れ212Bおよび第三の情報漏れ212Cという三つの情報漏れが示されている（まとめて情報漏れ212と称する）。第一の情報漏れ212Aは、第一のコンポーネント210Aによって漏らされる全情報を表わしていてもよい。第二の情報漏れ212Bは、第二のコンポーネント210Bによって漏らされる情報を表わしていてもよい。第三の情報漏れ212Cは、第三のコンポーネント210Cによって漏らされる情報を表わしていてもよい。図２Ａには、第一の出力213Aおよび第二の出力213Bという二つの出力が示されている（まとめて出力213と称する）。第一の出力213Aは、第二のコンポーネント210Bの出力を表わしていてもよい。第二の出力213Bは、第三のコンポーネント210Cの出力を表わしていてもよい。コンポーネント210、入力211、情報漏れ212、および／または出力213の数は、異なる実装に応じて変わりうる。
【００４７】
図２Ａに示される第二のコンポーネント210Bと第三のコンポーネント210Cとの間の関係は、第一の入力211Aが第二の出力213Bから独立であり、第二の入力211Bが第一の出力213Aから独立である並列合成を含んでいてもよい。そのような場合、第一の情報漏れ212Aは、第二の情報漏れ212Bと第三の情報漏れ212Cとの独立した組み合わせを含んでいてもよい。
【００４８】
換言すれば、第二の情報漏れ212BがLeakagef1(x1)と表わされ、第三の情報漏れ212CがLeakagef2(x2)と表わされるとすると、第一の情報漏れ212AはLeakageF(x1,x2)＝(Leakagef1(x1),Leakagef2(x2))と表わされることができる。
【００４９】
本開示の範囲から逸脱することなく、コンポーネント210A、入力211、情報漏れ212、および／または出力213に修正、追加、または省略を行なうことができる。たとえば、第一のコンポーネント210Aは、並列に配置された任意の数のコンポーネント210を含むことができ、第一の情報漏れ212Aは、結果として、各コンポーネント210の情報漏れ212すべての独立した組み合わせを含むことになる。
【００５０】
図２Ｂは、本開示に記載される少なくとも一つの実施形態による、逐次合成を含む例示的なコンポーネントのブロック図である。図２Ｂに示される逐次合成は、コンピュータ可読プログラムのコンポーネント210間の関係の別の例である。
【００５１】
図２Ｂのコンポーネント210、入力211、出力213、および／または情報漏れ212のうちの一つまたは複数は、図２Ａに関して上述したそれぞれコンポーネント210、入力211、出力213、および／または情報漏れ212と同一または類似であってもよい。しかしながら、図２Ｂでは、第三のコンポーネント210Cは、その入力として第一の出力213Aを使用してもよい。
【００５２】
図２Ｂに示すように、第二のコンポーネント210Bと第三のコンポーネント210Cとの間の関係は、第一の出力213Aが第三のコンポーネント210Cによってその入力として使用される逐次合成を含んでいてもよい。そのような場合、第一の情報漏れ212Aは、第二の情報漏れ212Bと、第三のコンポーネント210Cへの入力として第一の出力213Aを使用することに基づく情報漏れとを含んでいてもよい。換言すれば、第二の情報漏れ212BがLeakagef1(x1)として表わされ、第三の情報漏れ212CがLeakagef2(x2)として表わされ、第一の出力213Aがf1(x1)として表現される場合、第一の情報漏れ212AはLeakageF(x1)＝(Leakagef1(x1),Leakagef2(f1(x1)))と表現されることができる。
【００５３】
本開示の範囲から逸脱することなく、コンポーネント210A、入力211、情報漏れ212、および／または出力213に修正、追加、または省略を行なうことができる。たとえば、第一のコンポーネント210Aは、逐次的に配置された任意の数のコンポーネント210を含むことができ、その結果、情報漏れ212Aは、それぞれの情報漏れの依存ネスティングを含むことになる。しかしながら、そのような場合、第一のコンポーネント210Aは、各コンポーネントが一つの逐次的関係のみを含むように、より小さなコンポーネントに分割されてもよい。
【００５４】
図２Ｃは、本開示に記載される少なくとも一つの実施形態による、条件付き分岐を含む例示的なコンポーネントのブロック図である。図２Ｃに示される条件付き分岐合成は、コンピュータ可読プログラムのコンポーネント210間の関係の別の例である。たとえば、条件214に関連するブール値b（たとえば、bは真または偽）に基づいて、別のコンポーネントを抑えて、あるコンポーネントが選択されてもよい。
【００５５】
図２Ｃのコンポーネント210、入力211、および／または情報漏れ212のうちの一つまたは複数は、図２Ａに関して上述したそれぞれコンポーネント210、入力211、および／または情報漏れ212と同一または類似であってもよい。さらに、図２Ｃは条件214を含む。
【００５６】
図２Ｃに示されるように、第一のコンポーネント210Aは条件付き分岐合成を含んでいてもよく、それにより、第一のコンポーネント210Aは、条件214の満足に応答して第二のコンポーネント210Bが実行され、条件214の不満足に応答して第三のコンポーネント210Cが実行される（たとえば、bが偽であれば第二のコンポーネント210Bが実行され、bが真であれば第三のコンポーネント210Cが実行される）ように構成されうる。そのような場合、第一の情報漏れ212Aは、条件214が満たされているか否かを含みうる。たとえば、外部から、第二のコンポーネント210Bに関連するメモリのあるブロックがアクセスされることが観察されることがあり、よって、条件bが偽であることが、外部の観察者によって決定されうる。追加的または代替的に、第一の情報漏れ212Aは、第二の情報漏れ212Bまたは第三の情報漏れ212Cのうちの一つを含んでいてもよい。換言すれば、第二の情報漏れ212BがLeakagef1(x1)と表現され、第三の情報漏れ212CがLeakagef2(x2)と表現され、条件214が満たされるか否かが「b」として表現されるとすると、第一の情報漏れ212AはLeakageF(b,x1)＝(b,Leakagefb(x1))と表現されることができる。
【００５７】
情報漏れを低減するためにコンポーネントを修正する例として、第一のコンポーネント210Aが条件付き分岐を含む場合、条件214（b）を満たしていることの露出を第一のコンポーネント210Aが回避または低減するように、第一のコンポーネント210Aが修正されてもよい。たとえば、第二のコンポーネント210Bおよび第三のコンポーネント210Cのうちの一つまたは複数は、第二のコンポーネント210Bおよび第三のコンポーネント210Cの両方が等しいサイズになるよう、何らの動作も引き起こさなくてもよい命令でパディングされてもよい。それにより、第二のコンポーネント210Bおよび第三のコンポーネント210Cの取得または実行は、外部の観察者からは、単にサイズに基づいては区別できなくなる。別の例として、第二のコンポーネント210Bおよび第三のコンポーネント210Cのメモリ内の位置がメモリ内で忘却的に（obliviously）シャッフルされてもよい。たとえば、コンポーネント210Bおよび／または210Cをさまざまなランダムな位置に配置する。これらおよび他の実施形態において、結果的に、第一のコンポーネント210Aが実行されるとき、第二のコンポーネント210Bまたは第三のコンポーネント210Cのどちらが呼び出されようとも、観察者にとって、メモリ・アクセス・パターンが区別できないことがありうる。このように、条件214の満足（たとえば、bが真であるか偽であるか）が露出されないことがありうる。
【００５８】
本開示の範囲から逸脱することなく、コンポーネント210A、入力211、情報漏れ212、および／または条件214に修正、追加、または省略を行なうことができる。たとえば、第一のコンポーネント210Aは、二つ以上の条件214に依存してもよい。しかしながら、そのような場合、第一のコンポーネント210Aは、各サブコンポーネントが単一の条件付き分岐を含みうるように、より小さなコンポーネントに分割されてもよい。
【００５９】
図２Ｄは、本開示に記載される少なくとも一つの実施形態による、原始的再帰（primitive  recursion）を含む例示的なコンポーネントのブロック図である。図２Ｄに示される原始的再帰合成は、コンピュータ可読プログラムのコンポーネント210間の関係の別の例であり、コンポーネント210Bを通るある回数（n）のループとして示されている。
【００６０】
図２Ｄのコンポーネント210、入力211、および／または情報漏れ212のうちの一つまたは複数は、図２Ａに関してそれぞれ上述したコンポーネント210、入力211、および／または情報漏れ212と同一または類似であってもよい。さらに、図２Ｄは、実行数215およびデクリメント器216を含む。第二のコンポーネント210Bおよびデクリメント器216は、第二のコンポーネント210Bがn回繰り返されうるように構成されうる。
【００６１】
図２Ｄに示されるように、第一のコンポーネント210Aは、第二のコンポーネント210Bが実行数215に従って実行されるように、原始的再帰を含んでいてもよい。そのような実施形態では、第一の情報漏れ212Aは、実行数215  nを含んでいてもよい。追加的または代替的に、第一の情報漏れ212Aは、第二の情報漏れ212Bを含んでいてもよい。追加的または代替的に、第一の情報漏れ212Aは、第二のコンポーネント210Bの繰り返される実行のそれぞれについての追加的な情報漏れを含んでいてもよい。換言すれば、第二の情報漏れ212BがLeakagef1(x1)として表現され、実行数215が「n」として表現される場合、第一の情報漏れ212Aは
【００６２】
(Leakagef1(n,x1)，Leakagef1(n−1,f1(n,x1))，…，Leakagef1(1,f1(2,…(f1(n−1),(f1(n,x1)))))))
として表現されてもよい。
【００６３】
本開示の範囲から逸脱することなく、コンポーネント210A、入力211、情報漏れ212、および／または実行数215に対して修正、追加、または省略を行なうことができる。たとえば、第一のコンポーネント210Aは、二つ以上の実行数215に依存してもよく、および／または第一のコンポーネント210Aの二つ以上のコンポーネント210が、二つ以上の実行数215に依存してもよい。しかしながら、そのような場合、第一のコンポーネント210Aは、各コンポーネントが実行数215に依存する一つのコンポーネントのみを含むように、より小さなコンポーネントに分割されてもよい。これらまたは他の実施形態において、第一のコンポーネント210Aは、一つのコンポーネント、たとえば第二のコンポーネント210Bのみを含んでいてもよい。
【００６４】
図３は、本開示に記載される少なくとも一つの実施形態による、コンピュータ可読プログラムの情報漏れを判別するための例示的なプロセス300のフローチャートである。いくつかの実施形態では、プロセス300に関連する動作のうちの一つまたは複数は、図１のシステム100によって実行されてもよい。プロセス300は、任意の好適なシステム、装置、またはデバイスによって実行されうる。たとえば、図４のコンピューティング・システム400が、プロセス300に関連する動作のうちの一つまたは複数を実行しうる。個別のブロックで示されているが、プロセス300の一つまたは複数のブロックに関連するステップおよび動作は、所望の実装に依存して、追加のブロックに分割されてもよく、より少ないブロックに組み合わされてもよく、または除去されてもよい。
【００６５】
ブロック310では、コンピュータ可読プログラムの第一のコンポーネントが得られてもよい。第一のコンポーネントは、一組のタスクを実行するための一つまたは複数の実行可能命令、コード行などを含んでいてもよい。第一のコンポーネントは、未知でありうる第一の情報漏れをもつことがありうる。第一のコンポーネントは、第二のコンポーネントおよび第三のコンポーネントを含んでいてもよい。図２Ａ〜図２Ｄの第一のコンポーネント210Aは、第一のコンポーネントの例でありうる。第一のコンポーネントは、たとえば、図１のコンピュータ可読プログラム102のような、コンピュータ可読プログラムのコンポーネントであってもよい。
【００６６】
ブロック320では、第二のコンポーネントの第二の情報漏れが得られてもよい。第二の情報漏れは、第二のコンポーネントの変数、量、第二のコンポーネントのメモリ・アドレス、第二のコンポーネントが実行される回数など、またはコンピュータ可読プログラムの仮想的または実際の実行中に使用されうる機微な情報（たとえば、図１の機微な情報104）に関する他の情報でありうる。
【００６７】
ブロック330では、第三のコンポーネントの第三の情報漏れが得られてもよい。第三の情報漏れは、第三のコンポーネントの変数、量、第三のコンポーネントのメモリ・アドレス、第三のコンポーネントが実行される回数など、またはコンピュータ可読プログラムの仮想的または実際の実行中に使用されうる機微な情報（たとえば、図１の機微な情報104）に関する他の情報でありうる。
【００６８】
ブロック340では、第一のコンポーネントに対する第二のコンポーネントと第三のコンポーネントとの間の関係が決定されうる。図２Ａの並列合成、図２Ｂの逐次合成、図２Ｃの条件付き分岐、および／または図２Ｄの原始的再帰は、第一のコンポーネントに対する第二のコンポーネントと第三のコンポーネントとの間の関係の例でありうる。いくつかの実施形態では、関係は、第一のコンポーネントに対して第二のコンポーネントおよび第三のコンポーネントを一つまたは複数の一般的なコード・パターンと比較することによって決定されてもよい。追加的または代替的に、関係は、コンポーネントのコードを解析することによって決定されてもよい。たとえば、「if」および「then」は、分岐関係を示すことができる。
【００６９】
ブロック350において、第一の情報漏れが、第二の情報漏れ、第三の情報漏れ、および前記関係に基づいて決定されうる。たとえば、並列合成の場合、第一の情報漏れは、第二の情報漏れと第三の情報漏れの独立した組み合わせを含みうる。別の例として、逐次合成については、第一の情報漏れは、第二の情報漏れと、第三のコンポーネントが第二のコンポーネントの出力を入力として使用することに基づく情報漏れとを含みうる。さらなる例として、条件付き分岐については、第一の情報漏れ212Aは、分岐条件が満たされるか否かを含んでいてもよい。たとえば、原始的再帰の場合、第一の情報漏れは、コンポーネントのうちの一つが実行される回数を含んでいてもよい。
【００７０】
いくつかの実施形態では、プロセス300は、別のプロセスの一部としてある回数繰り返されてもよく、または図示されていない他のステップを含んでいてもよい。たとえば、プロセス300は、コンピュータ可読プログラムを取得し、該コンピュータ可読プログラムを複数のコンポーネントに分割することを含んでいてもよい。別の例として、プロセス300は、各コンポーネントについて情報漏れを取得または判別しようと試みてもよい。プロセス300が各コンポーネントについて情報漏れを取得または判別することができない場合、プロセス300は、各コンポーネントを再帰的にサブコンポーネントに細分してもよい。再帰的な各細分において、プロセス300は、各サブコンポーネントについて情報漏れを取得しようと試みてもよい。プロセス300が、各サブコンポーネントについて情報漏れを取得または判別することができない場合、プロセス300は、各サブコンポーネントをさらに再帰的に細分してもよい。プロセス300が、各サブコンポーネントについての情報漏れを取得または判別することができる場合、そのプロセスは、図３に示されるプロセス300と類似または同一のプロセスを使用して、各サブコンポーネントの漏れを再帰的に集約し、コンピュータ可読プログラムの情報漏れを決定することができる。
【００７１】
たとえば、プロセス300が各サブコンポーネントについて情報漏れを取得または判別することができる再帰のレベルにおいて、プロセス300は、図３に示されるようなプロセス300を使用して、サブコンポーネントの総合情報漏れを決定してもよい。次いで、プロセス300は、再帰のレベルを上り、図３に示すようなプロセス300を再び使用して、次のレベルの再帰において、諸総合情報漏れの総合情報漏れを決定することができる。このプロセスは、コンピュータ可読プログラム全体の総合的な漏れが決定されるまで、再帰的に繰り返されてもよい。
【００７２】
当業者であれば、システム100、プロセス300、および本明細書に開示されている他のプロセスおよび方法について、該プロセスおよび方法で実行される機能は、異なる順序で実行されてもよいことを理解するであろう。さらに、概説されたステップおよびアクションは、例としてのみ提供されており、開示された実施形態の本質を損なうことなく、それらのステップおよびアクションのいくつかは任意的であってもよく、より少ないステップおよびアクションに組み合わされてもよく、または追加的なステップおよびアクションに展開されてもよい。
【００７３】
図４は、本開示に記載される少なくとも一つの実施形態に基づきうる、例示的なコンピューティング・システム400のブロック図である。図４に示されるように、コンピューティング・システム400は、プロセッサ402、メモリ404、データ記憶装置406、および通信ユニット408を含んでいてもよい。
【００７４】
図１のシステム100および／または図３のプロセス300の一つまたは複数のコンポーネントは、図４のコンピューティング・システム400のようなコンピューティング・システム上に実装されてもよい。たとえば、コンピュータ可読プログラム102、機微な情報104、コンポーネント110、情報漏れプロファイル130、および／または修正されたコンピュータ可読プログラム140は、メモリ404および／またはデータ記憶装置406に記憶されてもよい。プロセッサ402は、情報漏れ識別器120に関連する一つまたは複数の動作を実行することができる。追加的または代替的に、コンピュータ可読プログラム102、機微な情報104、コンポーネント110、情報漏れプロファイル130、および／または修正されたコンピュータ可読プログラム140は、通信ユニット408によって受信または通信されてもよい。
【００７５】
一般に、プロセッサ402は、さまざまなコンピュータ・ハードウェアまたはソフトウェア・モジュールを含む任意の好適な特殊目的または汎用のコンピュータ、コンピューティング・エンティティ、または処理装置を含んでいてもよく、任意の適用可能なコンピュータ読み取り可能記憶媒体に記憶された命令を実行するよう構成されてもよい。たとえば、プロセッサ402は、マイクロプロセッサ、マイクロコントローラ、デジタル信号プロセッサ（DSP）、特定用途向け集積回路（ASIC）、フィールド・プログラマブル・ゲート・アレイ（FPGA）、またはプログラム命令を解釈および／または実行するおよび／またはデータを処理するように構成された任意の他のデジタルまたはアナログ回路を含んでいてもよい。図４では単一のプロセッサとして示されているが、プロセッサ402は、個別にまたは集団的に、本開示に記載される任意の数の動作を実行するよう構成された、任意の数のネットワーク位置または物理的位置にまたがって分散された任意の数のプロセッサを含んでいてもよい。いくつかの実施形態では、プロセッサ402は、メモリ404、データ記憶装置406、またはメモリ404およびデータ記憶装置406に記憶されたプログラム命令を解釈および／または実行するおよび／またはデータを処理してもよい。いくつかの実施形態では、プロセッサ402は、データ記憶装置406からプログラム命令を取り出し、該プログラム命令をメモリ404にロードしてもよい。プログラム命令がメモリ404にロードされた後、プロセッサ402は、該プログラム命令、たとえば図１のシステム100に関して述べた一つまたは複数の動作をそれぞれ実行するための命令を実行することができる。
【００７６】
メモリ404およびデータ記憶装置406は、コンピュータ実行可能命令またはデータ構造を担持するまたは記憶するためのコンピュータ読取可能な記憶メディアまたは一つまたは複数のコンピュータ読取可能な記憶媒体を含んでいてもよい。そのようなコンピュータ読取可能な記憶媒体は、プロセッサ402のような汎用または特殊目的のコンピュータによってアクセスされうる任意の利用可能な媒体でありうる。限定ではなく例として、そのようなコンピュータ読取可能な記憶媒体は、ランダムアクセスメモリ（RAM）、読出し専用メモリ（ROM）、電気的に消去可能なプログラマブル読出し専用メモリ（EEPROM）、コンパクトディスク読出し専用メモリ（CD-ROM）または他の光ディスク記憶、磁気ディスク記憶または他の磁気記憶デバイス、フラッシュメモリ・デバイス（たとえば、ソリッドステートメモリデバイス）、またはコンピュータ実行可能命令またはデータ構造の形でプログラム・コードを担持または記憶するために使用でき、汎用または特殊目的のコンピュータによってアクセスされうる任意の他の記憶媒体を含む、非一時的なコンピュータ読取可能な記憶媒体を含んでいてもよい。上記の組み合わせも、コンピュータ読取可能な記憶媒体の範囲内に含まれうる。コンピュータ実行可能命令は、たとえば、プロセッサ402にある種の動作または一群の動作を実行させるよう構成された命令およびデータを含んでいてもよい。これらおよび他の実施形態において、「非一時的」という用語は、In  re  Nuijten,  500  F.3d  1346の連邦巡回控訴裁判所の決定（Fed.  Cir.  4007）において特許可能な主題の範囲外であると認定された型の一時的媒体のみを除外すると解釈されるべきである。上記の組み合わせも、コンピュータ読取可能媒体の範囲内に含まれうる。
【００７７】
通信ユニット408は、コンピュータ可読プログラム102、機微な情報104、コンポーネント110、情報漏れプロファイル130、および／または修正されたコンピュータ可読プログラム140を受領し、コンピュータ可読プログラム102、機微な情報104、コンポーネント110、情報漏れプロファイル130、および／または修正されたコンピュータ可読プログラム140をデータ記憶装置406に提供するよう構成されてもよい。通信ユニット408は、コンピューティング・システム400とネットワークとの間の通信を許容するまたは容易にするよう構成された任意のデバイス、システム、コンポーネント、またはコンポーネントの集合体を含んでいてもよい。たとえば、通信ユニット408は、限定なしに、モデム、ネットワークカード（無線または有線）、赤外線通信装置、光通信装置、無線通信装置（アンテナなど）、および／またはチップセット（Bluetooth(登録商標)装置、802.6装置（たとえばメトロポリタン・エリア・ネットワーク（MAN）など）、Wi-Fi装置、WiMAX装置、セルラー通信設備など）などを含みうる。通信ユニット408は、任意の相手、たとえば若干例を挙げればセルラー・ネットワーク、Wi-Fiネットワーク、MAN、光ネットワークなど、および／または、リモート装置を含む本開示に記載される任意の他の装置とデータが交換されることを許容してもよい。
【００７８】
本開示の範囲から逸脱することなく、コンピューティング・システム400に修正、追加、または省略を行なうことができる。たとえば、データ記憶装置406は、複数の位置に配置され、ネットワークを通じてプロセッサ402によってアクセスされてもよい。
【００７９】
本開示において使用されるところでは、用語「モジュール」または「コンポーネント」は、該モジュールまたはコンポーネントの動作を実行するよう構成された特定のハードウェア実装、および／または、コンピューティング・システムの汎用ハードウェア（たとえば、コンピュータ読み取り可能媒体、処理装置など）に記憶および／または実行されうるソフトウェア・オブジェクトもしくはソフトウェア・ルーチンを指すことができる。いくつかの実施形態では、本開示に記載される異なるコンポーネント、モジュール、エンジン、およびサービスは、コンピューティング・システム上で実行されるオブジェクトまたはプロセスとして（たとえば、別個のスレッドとして）実装されてもよい。
【００８０】
本開示に記載されるシステムおよび方法のいくつかは、一般に、（汎用ハードウェアに記憶および／または実行される）ソフトウェアで実装されるものとして記載されるが、個別的なハードウェア実装またはソフトウェアと個別的なハードウェア実装との組み合わせも可能であり、考えられている。
【００８１】
本開示において、特に添付の特許請求の範囲（たとえば、添付の特許請求の範囲の本文）において使用される用語は、一般に「開放的」な用語として意図されている（たとえば、「含む」という用語は、「含むが、これに限定されない」と解釈されるべきであり、「有する」という用語は、「少なくとも…を有する」と解釈されるべきであり、「包含する」という用語は、「包含するが、これに限定されない」と解釈されるべきである、など)。
【００８２】
さらに、特定の数の導入されたクレーム記載が意図されている場合、そのような意図はクレームに明示的に記載され、そのような記載がない場合、そのような意図は存在しない。たとえば、理解の助けとして、以下の添付の特許請求の範囲は、クレーム記載を導入するために、「少なくとも一つの」および「一つまたは複数の」という導入句の使用を含むことがある。しかしながら、そのような句の使用は、不定冠詞「a」または「an」による請求項記載の導入が、そのように導入されたクレーム記載を含むいずれかの特定のクレームを、そのような記載を一つだけ含む実施形態に限定することを含意するものと解釈すべきではない。これは、たとえ同じクレームが導入句「一つまたは複数の」または「少なくとも一つの」および「a」または「an」のような不定冠詞を含むときであっても同じである（たとえば、「a」および／または「an」は、「少なくとも一つの」または「一つまたは複数の」を意味すると解釈されるべきである）。同じことは、クレーム記載を導入するために使われる定冠詞の使用についても当てはまる。
【００８３】
さらに、たとえ導入されたクレーム記載の特定の数が明示的に記載されている場合であっても、当業者は、そのような記載は少なくともその記載された数を意味するものと解釈されるべきであることを認識するであろう（たとえば、他の修飾語を伴わない「二つの記載」というだけの記載は、少なくとも二つの記載または二つ以上の記載を意味する）。さらに、「A、B、C等の少なくとも一つ」または「A、B、C等の一つまたは複数」と類似の慣用表現が用いられる場合、一般に、そのような構文は、Aだけ、Bだけ、Cだけ、AとBが一緒、AとCが一緒、BとCが一緒、またはA、B、Cが一緒等を含むことが意図される。さらに、用語「および／または」の使用は、このように解釈されることが意図されている。
【００８４】
さらに、明細書、特許請求の範囲、または図面のいずれに記載されているかを問わず、二つ以上の代替的な用語を提示する任意の離接的な語句は、それらの用語の一方、それらの用語のいずれか、または両方の用語を含む可能性を考えていると理解されるべきである。たとえば、句「AまたはB」は、「A」または「B」または「AおよびB」の可能性を含むと理解されるべきである。さらに、いくつかの場所における用語「および／または」の使用は、「または」という用語が、両方の項の可能性を含むのではなく項の一方のみを含むと理解されるべきであることを意味するものではない。
【００８５】
さらに、用語「第一」、「第二」、「第三」などの使用は本明細書において、必ずしも要素の特定の順序または数を意味するために使用されるのではない。一般に、用語「第一」、「第二」、「第三」などは、一般的な識別子として異なる要素を区別するために使用される。さらに、用語「第一」、「第二」、「第三」等が特定の順序を意味していることを示すものがなければ、これらの用語は特定の順序を意味していると理解されるべきではない。さらに、用語「第一」、「第二」、「第三」等が特定の数の要素を意味していることを示すものがなければ、これらの用語は特定の数の要素を意味していると理解されるべきではない。たとえば、第一のウィジェットが第一の側面を有するものとして記述されることがあり、第二のウィジェットが第二の側面を有するものとして記述されることがある。第二のウィジェットに関する用語「第二の側面」の使用は、第二のウィジェットのかかる側面を第一のウィジェットの「第一の側面」から区別するためのものであって、第二のウィジェットが二つの側面を有することを意味するものではないことがある。
【００８６】
本明細書に記載されているすべての例および条件付き言辞は、本発明および発明者が当該技術分野を発展させるために寄与した概念を理解する際に読者を助けるべく教育目的のために意図されており、そのような具体的に記載された例および条件への限定なしに解釈されるものである。本開示の実施形態を詳細に説明したが、本開示の精神および範囲から逸脱することなく、さまざまな変化、置換、および変更をそれに行なうことができることを理解しておくべきである。
【００８７】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
（付記１）
コンピュータ可読プログラムの第一のコンポーネントを得る段階であって、前記第一のコンポーネントは、未知の第一の情報漏れを有し、前記第一のコンポーネントは、第二のコンポーネントおよび第三のコンポーネントから構成される、段階と；
前記第二のコンポーネントの第二の情報漏れを得る段階と；
前記第三のコンポーネントの第三の情報漏れを得る段階と；
前記第一のコンポーネントに対する前記第二のコンポーネントと前記第三のコンポーネントとの間の関係を判別する段階と；
前記第二の情報漏れ、前記第三の情報漏れ、および前記関係に基づいて前記第一の情報漏れを決定する段階とを含む、
方法。
（付記２）
前記第一の情報漏れを決定する段階に応答して、前記第一の情報漏れを低減するよう、前記第一のコンポーネントにおける安全でないコード行を、前記第一のコンポーネントにおける一つまたは複数の安全なコード行で置き換える段階をさらに含む、付記１記載の方法。
（付記３）
前記第一の情報漏れを決定する段階に応答して、前記第一のコンポーネントによってアクセスされる情報が露出の危険にさらされていることを示すために、前記第一のコンポーネントを、安全でないとしてフラグ付けする段階をさらに含む、付記１記載の方法。
（付記４）
前記第一の情報漏れを決定する段階に応答して、前記コンピュータ可読プログラムが機微な情報を漏らすか否かを判定し、
前記コンピュータ可読プログラムが前記機微な情報を漏らすと判定することに応答して、前記コンピュータ可読プログラムを、前記機微な情報を使用しての実行のためには承認されないとしてフラグ付けすることをさらに含む、
付記１記載の方法。
（付記５）
特定の情報を使って前記コンピュータ可読プログラムを実行する段階と；
前記第一の情報漏れを決定する段階に応答して、前記特定の情報が前記コンピュータ可読プログラムの実行中に露出されたかどうかを判定することをさらに含む、
付記１記載の方法。
（付記６）
前記第二のコンポーネントが第一の入力および第一の出力を有し、
前記第三のコンポーネントが第二の入力および第二の出力を有し、
前記関係が、前記第一の入力が前記第二の出力から独立であり、前記第二の入力が前記第一の出力から独立である前記第二のコンポーネントと前記第三のコンポーネントとの並列合成を含み、
前記第一の情報漏れを決定することは、前記第二の情報漏れと前記第三の情報漏れとを前記第一の情報漏れにおいて独立して組み合わせることを含む、
付記１記載の方法。
（付記７）
前記第二のコンポーネントが第一の入力および第一の出力を有し、
前記第三のコンポーネントが第二の入力および第二の出力を有し、
前記関係が、前記第一の出力が前記第二の入力として前記第三のコンポーネントによって使用される逐次合成を含み、
前記第一の情報漏れを決定することは、前記第二の情報漏れと前記第一の出力を前記第二の入力として使う前記第三のコンポーネントの第四の情報漏れとを組み合わせることを含む、
付記１記載の方法。
（付記８）
前記コンピュータ可読プログラムは、前記関係が、ある条件の満足に応答して前記第二のコンポーネントが実行され、前記条件の不満足に応答して前記第三のコンポーネントが実行されるような条件付き分岐を含むよう構成され、
前記第一の情報漏れを決定することは、前記条件が満たされるかどうかを前記第一の情報漏れに含めることを含む、
付記１記載の方法。
（付記９）
前記第一の情報漏れが前記条件が満たされるかどうかを含むことに応答して：
前記第二のコンポーネントが前記第三のコンポーネントとメモリにおいて同じサイズになるよう、前記第二のコンポーネントにパディングすること；および
メモリにおける前記第二のコンポーネントおよび前記第三のコンポーネントの命令ブロックの位置を忘却的にシャッフルすることをさらに含む、
付記８記載の方法。
（付記１０）
前記関係が、前記第三のコンポーネントが実行される前に前記第二のコンポーネントがある回数実行される原始的再帰を含み、
前記第一の情報漏れを決定することは、前記第二のコンポーネントが実行される回数を前記第一の情報漏れに含めることを含む、
付記１記載の方法。
（付記１１）
第二のコンポーネントが第四のコンポーネントおよび第五のコンポーネントから構成され、前記第二の情報漏れを得ることは：
前記第四のコンポーネントの第五の情報漏れを取得する段階と；
前記第五のコンポーネントの第六の情報漏れを取得する段階と；
前記第二のコンポーネントに対する前記第四のコンポーネントと前記第五のコンポーネントとの間の第二の関係の判別する段階と；
前記第五の情報漏れ、前記第六の情報漏れ、および前記第二の関係に基づいて前記第二の情報漏れを決定する段階とを含む、
付記１記載の方法。
（付記１２）
前記コンピュータ可読プログラムを取得する段階と；
前記コンピュータ可読プログラムを、前記第二のコンポーネントおよび前記第三のコンポーネントを含む複数のコンポーネントに分割する段階と；
前記複数のコンポーネントのそれぞれを再帰的にサブコンポーネントに細分する段階と；
前記複数のサブコンポーネントのそれぞれについて漏れを得る段階と；
各サブコンポーネントの漏れに基づいて前記コンピュータ可読プログラムの総合漏れを決定する段階とをさらに含む、
付記１記載の方法。
（付記１３）
少なくとも一つのプロセッサによって実行されたときに、システムに動作を実行させる、または動作を実行するよう指令する一つまたは複数の命令を記憶するよう構成された少なくとも一つの非一時的なコンピュータ可読媒体であって、前記動作は：
コンピュータ可読プログラムの第一のコンポーネントを得る段階であって、前記第一のコンポーネントは、未知の第一の情報漏れを有し、前記第一のコンポーネントは、第二のコンポーネントおよび第三のコンポーネントから構成される、段階と；
前記第二のコンポーネントの第二の情報漏れを得る段階と；
前記第三のコンポーネントの第三の情報漏れを得る段階と；
前記第一のコンポーネントに対する前記第二のコンポーネントと前記第三のコンポーネントとの間の関係を判別する段階と；
前記第二の情報漏れ、前記第三の情報漏れ、および前記関係に基づいて前記第一の情報漏れを決定する段階とを含む、
非一時的なコンピュータ可読媒体。
（付記１４）
前記動作が：前記第一の情報漏れを決定する段階に応答して、前記第一の情報漏れを低減するよう、前記第一のコンポーネントにおける安全でないコード行を、前記第一のコンポーネントにおける一つまたは複数の安全なコード行で置き換える段階をさらに含む、付記１３記載の非一時的なコンピュータ可読媒体。
（付記１５）
前記動作が：前記第一の情報漏れを決定する段階に応答して、前記第一のコンポーネントによってアクセスされる情報が露出の危険にさらされていることを示すために、前記第一のコンポーネントを、安全でないとしてフラグ付けする段階をさらに含む、付記１３記載の非一時的なコンピュータ可読媒体。
（付記１６）
前記動作が：
前記第一の情報漏れを決定する段階に応答して、前記コンピュータ可読プログラムが機微な情報を漏らすか否かを判定し、
前記コンピュータ可読プログラムが前記機微な情報を漏らすと判定することに応答して、前記コンピュータ可読プログラムを、前記機微な情報を使用しての実行のためには承認されないとしてフラグ付けすることをさらに含む、
付記１３記載の非一時的なコンピュータ可読媒体。
（付記１７）
一つまたは複数のプロセッサと、一つまたは複数のコンピュータ可読媒体とを含むシステムであって、当該システムは動作を実行するよう構成され、前記動作は：
コンピュータ可読プログラムの第一のコンポーネントを得る段階であって、前記第一のコンポーネントは、未知の第一の情報漏れを有し、前記第一のコンポーネントは、第二のコンポーネントおよび第三のコンポーネントから構成される、段階と；
前記第二のコンポーネントの第二の情報漏れを得る段階と；
前記第三のコンポーネントの第三の情報漏れを得る段階と；
前記第一のコンポーネントに対する前記第二のコンポーネントと前記第三のコンポーネントとの間の関係を判別する段階と；
前記第二の情報漏れ、前記第三の情報漏れ、および前記関係に基づいて前記第一の情報漏れを決定する段階とを含む、
システム。
（付記１８）
前記動作が：前記第一の情報漏れを決定する段階に応答して、前記第一の情報漏れを低減するよう、前記第一のコンポーネントにおける安全でないコード行を、前記第一のコンポーネントにおける一つまたは複数の安全なコード行で置き換える段階をさらに含む、付記１７記載のシステム。
（付記１９）
前記動作が：前記第一の情報漏れを決定する段階に応答して、前記第一のコンポーネントによってアクセスされる情報が露出の危険にさらされていることを示すために、前記第一のコンポーネントを、安全でないとしてフラグ付けする段階をさらに含む、付記１７記載のシステム。
（付記２０）
前記動作が：
前記第一の情報漏れを決定する段階に応答して、前記コンピュータ可読プログラムが機微な情報を漏らすか否かを判定し、
前記コンピュータ可読プログラムが前記機微な情報を漏らすと判定することに応答して、前記コンピュータ可読プログラムを、前記機微な情報を使用しての実行のためには承認されないとしてフラグ付けすることをさらに含む、
付記１７記載のシステム。
【符号の説明】
【００８８】
１０２  コンピュータ可読プログラム
１０４  機微な情報
１１０  コンポーネント
１２０  情報漏れ識別器
１３０  情報漏れプロファイル
１３２  漏らされる機微な情報
１４０  修正されたコンピュータ可読プログラム
３１０  コンピュータ可読プログラムの第一のコンポーネントを取得。未知の第一の情報漏れがある。第一のコンポーネントは、第二のコンポーネントおよび第三のコンポーネントを含む
３２０  第二のコンポーネントの第二の情報漏れを取得
３３０  第三のコンポーネントの第三の情報漏れを取得
３４０  第一のコンポーネントに対する第二のコンポーネントと第三のコンポーネントとの間の関係を判別
３５０  前記第二の情報漏れ、前記第三の情報漏れ、および前記関係に基づいて前記第一の情報漏れを決定
４００  コンピューティング・システム
４０２  プロセッサ
４０４  メモリ
４０６  データ記憶
４０８  通信ユニット
【図１】
2020102210.tif 000003
【図２Ａ】
2020102210.tif 000004
【図２Ｂ】
2020102210.tif 000005
【図２Ｃ】
2020102210.tif 000006
【図２Ｄ】
2020102210.tif 000007
【図３】
2020102210.tif 000008
【図４】
2020102210.tif 000009