(57)【要約】  データの漏洩を強固に防止することに寄与するシステムを提供する。システムは、改変装置と、実行装置と、を含む。改変装置は、条件分岐文を含むプログラムを、条件分岐文の実行処理に相当する第１の処理が実行された後に、条件分岐文の条件式に基づいて第１の処理の結果を実行処理の処理結果としてプログラムで使用される変数に反映するか否かが決定されるように改変する。実行装置は、改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する。
2019049217.tif 000002
【特許請求の範囲】
【請求項１】
条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第１の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第１の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、改変装置と、
前記改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する、実行装置と、
を含む、システム。
【請求項２】
前記改変装置は、
前記プログラムに含まれる条件分岐文を、
前記第１の処理と、前記条件分岐文の条件式による判定を行う処理と、前記条件式による判定結果が前記条件分岐文の実行処理の実行を示す場合に、前記第１の処理を実行した結果得られる変数の値を前記条件分岐文の実行処理にて使用される変数に変更する第２の処理と、を含む処理に置換する、請求項１のシステム。
【請求項３】
前記改変装置は、前記第２の処理が漏洩耐性計算により実行されるように前記プログラムを改変する、請求項２のシステム。
【請求項４】
前記実行装置は、前記第２の処理をＯｂｌｉｖｉｏｕｓ  ＲＡＭ（Random Access Memory）上で実行する、請求項３のシステム。
【請求項５】
前記実行装置は、暗号化された変数を記憶する記憶領域を備え、
前記暗号化された変数を前記ハードウェア的に防御された実行環境にて復号した後、前記改変後のプログラムを実行する、請求項２乃至４のいずれか一項に記載のシステム。
【請求項６】
前記改変装置は、
前記条件分岐文の実行処理を複製し、前記複製された実行処理に含まれる第１変数を前記プログラムにて使用されていない第２変数に置き替え、前記第２変数を前記第１変数により初期化することで、前記第１の処理を生成する、請求項２乃至５のいずれか一項に記載のシステム。
【請求項７】
前記第２の処理は、前記第１変数に前記第２変数の値を代入する処理である、請求項６のシステム。
【請求項８】
条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第１の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第１の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、改変装置。
【請求項９】
条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第１の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第１の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、ステップと、
前記改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する、ステップと、
を含む、方法。
【請求項１０】
条件分岐文を含むプログラムを入力する処理と、
前記条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第１の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第１の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する処理と、
をコンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、システム、改変装置、方法及びプログラムに関する。特に、プログラムを実行する、システム、改変装置、方法及びプログラムに関する。
【背景技術】
【０００２】
個人情報、認証情報、機密情報など、高い秘匿性を要求される重要データの安全性を担保する手段としてデータの暗号化が存在する。しかし、これらの重要データに対して、統計計算、認証処理、検索といった何らかのデータ処理を行う場合には、一度暗号を解く必要がある。従って、攻撃者がデータ処理を行う瞬間（暗号を解く瞬間）を狙い攻撃を行った場合には、重要データが漏洩する可能性がある。【０００３】
近年、複数の半導体ベンダーからハードウェアレベルでプログラム、データを保護する技術（以下、ハードウェア防御技術と表記する）が提案されている（非特許文献１、２参照）。非特許文献１、２に開示された技術（デバイス）は、外部のソフトウェア等からアクセスできないようなセキュアな実行環境を作り、ソフトウェアのコードやデータを防御する。【０００４】
また、非特許文献３にて、「Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ」と称されるメモリが開示されている。当該文献によれば、一定期間中に必ず全メモリが一度だけアクセスされることを保証し、且つ、一定期間毎にアドレスの対応付けを変えることを行うことで、メモリの参照局所性を隠蔽することができる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】Intel、"Intel Software Guard Extensions (intel SGX)"、２０１７年６月１５日、［online］、［平成２９年６月１５日検索］、インターネット〈URL：https://software.intel.com/en-us/sgx〉
【非特許文献２】ARM、"A SYSTEM-WIDE APPROACH TO SECURITE"、２０１７年６月１５日、［online］、［平成２９年６月１５日検索］、インターネット〈URL：https://www.arm.com/products/security-on-arm/trustzone〉
【非特許文献３】Oded Goldreich and Rafail Ostrovsky、"Software protection and simulation on oblivious RAMs"、 J. ACM、43 (3): 431-473、1996
【発明の概要】
【発明が解決しようとする課題】
【０００６】
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。【０００７】
上述のハードウェア防御技術は、ハードウェア的に作られた（隔離された）領域（以下、ハードウェア隔離領域と表記する）にプログラムやデータを隔離する事で、攻撃者がプログラムに影響を及ぼす事を回避する技術である。ハードウェア防御技術では、ＯＳ（Operating System）やアプリケーションが通常アクセス可能な領域と、ＯＳ等からは特殊な手順なしではアクセス不可能な領域（ハードウェア隔離領域）と、を分離し、当該ハードウェア隔離領域にてプログラムを実行する。【０００８】
前述の重要データの処理もこうしたハードウェア隔離領域にて実行される事で、ある程度の保護が可能である（情報漏洩の危険性をある程度低下できる）。しかし、こうしたハードウェア防御技術にも問題点がある。具体的には、重要データをハードウェア隔離領域に隔離したとしても、「サイドチャネル攻撃」という手法に対しては脆弱な面がある。即ち、非特許文献１、２等に開示されたハードウェア防御技術（当該技術が実装されたデバイス）を用いたとしても、重要データが攻撃者に漏洩する可能性があり、より一層、防御を強化することが望まれている。【０００９】
なお、サイドチャネル攻撃とは、データ処理の最中にハードウェアが利用する時間（処理時間）、消費電力（リソース消費）、ハードウェアの放つ電磁波、動作音等から重要データを推測する攻撃の手法である。このような攻撃に対し、例えば、非特許文献３に開示された技術（Ｏｂｌｉｖｉｏｕｓ  ＲＡＭを用いた計算）は、「漏洩耐性計算」と称され、サイドチャネル攻撃により秘密情報の部分情報が漏洩しても安全性が担保できる方式といえる。【００１０】
また、非特許文献１、２に開示されたハードウェア防御技術と、非特許文献３に開示された技術（Ｏｂｌｉｖｉｏｕｓ  ＲＡＭを用いた計算））や暗号化の技術を組み合わせて重要データを防御することも考えられる。例えば、サイドチャネル攻撃が可能なハードウェアを用いて重要データに関するデータ処理を行いつつ、重要データを予め暗号化しておく事等により、重要データが漏洩しないようにすることも想定できる。つまり、ハードウェア隔離領域において、漏洩耐性計算や暗号化処理を適応して重要データを処理する事で、原理的には重要データを秘匿しつつ計算する事が可能となる。しかしながら、通常、漏洩耐性計算等は非常に実行効率が悪いため、上記方法は現実的な対応とはいえない。【００１１】
本発明は、データの漏洩を強固に防止するシステム、改変装置、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明の第１の視点によれば、条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第１の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第１の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、改変装置と、前記改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する、実行装置と、を含む、システムが提供される。【００１３】
本発明の第２の視点によれば、条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第１の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第１の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、改変装置が提供される。【００１４】
本発明の第３の視点によれば、条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第１の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第１の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、ステップと、前記改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する、ステップと、を含む、方法が提供される。【００１５】
本発明の第４の視点によれば、条件分岐文を含むプログラムを入力する処理と、前記条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第１の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第１の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する処理と、をコンピュータに実行させるプログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００１６】
本発明の各視点によれば、データの漏洩を強固に防止することに寄与するシステム、改変装置、方法及びプログラムが、提供される。
【図面の簡単な説明】
【００１７】
【図１】一実施形態の概要を説明するための図である。
【図２】第１の実施形態に係るプログラム実行システムの一例を示す図である。
【図３】第１の実施形態に係るプログラム改変装置のハードウェア構成の一例を示す図である。
【図４】第１の実施形態に係るプログラム実行装置のハードウェア構成の一例を示す図である。
【図５】第１の実施形態に係るプログラム改変装置の処理構成の一例を示す図である。
【図６】プログラム改変装置に入力するプログラムの一例を示す図である。
【図７】プログラム改変部によるプログラム改変動作の一例を示すフローチャートである。
【図８】プログラム改変部の動作を説明するための図である。
【図９】プログラム改変部の動作を説明するための図である。
【図１０】第１の実施形態に係るプログラム実行装置の処理構成の一例を示す図である。
【図１１】第１の実施形態に係るプログラム実行装置の動作の一例を示すフローチャートである。
【発明を実施するための形態】
【００１８】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。また、各図におけるブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号（データ）の流れを模式的に示すものであり、双方向性を排除するものではない。
【００１９】
一実施形態に係るシステムは、改変装置１００と、実行装置１０１と、を含む（図１参照）。改変装置１００は、条件分岐文を含むプログラムを、条件分岐文の実行処理に相当する第１の処理が実行された後に、条件分岐文の条件式に基づいて第１の処理の結果を実行処理の処理結果としてプログラムで使用される変数に反映するか否かが決定されるように改変する。実行装置１０１は、改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する。
【００２０】
上述のように、ハードウェア防御技術は攻撃者からの攻撃を防御することに一定の効果があるが、サイドチャネル攻撃が行われた際に重要データの保護が十分ではない。そこで、一実施形態に係るシステムでは、プログラムの実行をハードウェア的に防御された実行環境で行うことを前提にプログラムを改変する。改変装置１００は、プログラムに含まれる条件分岐文を、当該分岐文の実行処理とほぼ同じ第１の処理（後述する常時実行コード）を実行し、且つ、条件分岐文の条件式による判定が実行処理の実行である場合に、上記第１の処理による実行結果を当初のプログラムにて使用されていた変数に反映する処理に置換する。
【００２１】
上記置換の結果、改変前のプログラムに含まれる条件分岐文の条件式による判定結果が真であるか偽であるかによらず必ず実行処理とほぼ同じ長さの第１の処理（常時実行コード）が実行される。これにより、改変後プログラムの実行時間は条件分岐文の条件の内容に依存しない。また、条件分岐文の条件式による判定が「実行処理の実行」を示す場合には、第１の処理による実行結果を反映する必要があるが、当該反映処理は変数に値を代入するという極めて簡単な処理となるので、当該反映処理の処理時間は極めて短い。そのため、サイドチャネル攻撃が行われたとしても、攻撃者は反映処理の有無による情報だけでは有益な情報を得ることができない。
【００２２】
以上のように改変されたプログラムをハードウェア的に防御された実行環境で実行することで、データの漏洩をより一層強固に防止できる。
【００２３】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【００２４】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００２５】
図２は、第１の実施形態に係るプログラム実行システムの一例を示す図である。図２を参照すると、プログラム実行システムは、プログラム改変装置１０と、プログラム実行装置２０と、を含んで構成される。
【００２６】
プログラム改変装置１０は、プログラムを入力し、当該プログラムを改変する。プログラム改変装置１０は、改変後のプログラムをプログラム実行装置２０に提供する。プログラム改変装置１０は、重要データを扱う改変前プログラムを入力として受け取り、データ漏洩を起こさない安全なプログラム（改変後プログラム）に改変して出力する。より具体的には、プログラム改変装置１０は、条件分岐文（例えば、ＩＦ文）を含むプログラムを、条件分岐文の実行処理に相当する第１の処理（後述する常時実行コード）が実行された後に、条件分岐文の条件式に基づいて当該第１の処理の結果を実行処理の処理結果としてプログラムで使用される変数に反映するか否かが決定されるように改変する。
【００２７】
プログラム実行装置２０は、改変されたプログラムを入力し、重要データを用いて改変後プログラムを実行する。より具体的には、プログラム実行装置２０は、プログラム改変装置１０により改変されたプログラムを、非特許文献１、２に開示されたようなハードウェア的に防御された実行環境にて実行する。
【００２８】
なお、以降の説明において、プログラム改変装置１０が入力するプログラムを「改変前プログラム」と表記する。また、プログラム改変装置１０が出力するプログラムを「改変後プログラム」と表記する。
【００２９】
第１の実施形態にて扱うプログラムは、Ｃ言語により記載されたプログラムとするが、他のプログラム言語により記載されたプログラムを用いることができるのは勿論である。また、第１の実施形態では、コンパイル前のプログラムを改変の対象として説明するが、コンパイル後のデータ（コード）を改変の対象としてもよい。
【００３０】
［ハードウェア構成］
第１の実施形態に係るプログラム実行システムを構成する各種装置のハードウェア構成を説明する。
【００３１】
図３は、第１の実施形態に係るプログラム改変装置１０のハードウェア構成の一例を示す図である。プログラム改変装置１０は、所謂、コンピュータ（情報処理装置）により構成可能であり、図３に例示する構成を備える。例えば、プログラム改変装置１０は、内部バスにより相互に接続される、ＣＰＵ（Central Processing Unit）１１、メモリ１２、入出力インターフェイス１３及び通信インターフェイスであるＮＩＣ（Network Interface Card）１４等を備える。
【００３２】
但し、図３に示す構成は、プログラム改変装置１０のハードウェア構成を限定する趣旨ではない。プログラム改変装置１０は、図示しないハードウェアを含んでもよいし、必要に応じて入出力インターフェイス１３等を備えていなくともよい。例えば、ネットワークにより接続された操作端末によりプログラム改変装置１０に情報の入出力を行う場合には、入出力インターフェイス１３が不要な場合もある。また、プログラム改変装置１０に含まれるＣＰＵ等の数も図３の例示に限定する趣旨ではなく、例えば、複数のＣＰＵがプログラム改変装置１０に含まれていてもよい。
【００３３】
メモリ１２は、ＲＡＭ（Random Access Memory）、ＲＯＭ（Read Only Memory）、補助記憶装置（ハードディスク等）である。
【００３４】
入出力インターフェイス１３は、図示しない表示装置や入力装置のインターフェイスである。表示装置は、例えば、液晶ディスプレイ等である。入力装置は、例えば、キーボードやマウス等のユーザ操作を受け付ける装置や、ＵＳＢ（Universal Serial Bus）メモリ等の外部記憶装置から情報を入力する装置である。ユーザは、キーボードやマウス等を用いて、必要な情報をプログラム改変装置１０に入力する。
【００３５】
プログラム改変装置１０の機能は、後述する処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ１２に格納されたプログラムをＣＰＵ１１が実行することで実現される。また、そのプログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能は、何らかのハードウェア及びソフトウェアの少なくともいずれかにより実現できればよい。
【００３６】
図４は、第１の実施形態に係るプログラム実行装置２０のハードウェア構成の一例を示す図である。図４（ａ）を参照すると、プログラム実行装置２０は、図３に示す各構成に加え、ハードウェア隔離領域２５を備えている。
【００３７】
ハードウェア隔離領域２５は、非特許文献１、２により開示されたハードウェア防御技術を実現する領域（デバイス）である。つまり、プログラム実行装置２０は、非特許文献１、２により開示されたデバイスを含み構成することができる。
【００３８】
図４（ｂ）を参照すると、ハードウェア隔離領域２５には、プロセッサ２６と、記憶領域２７と、が含まれる。プロセッサ２６は、プログラムを実行可能な計算部（計算手段）である。記憶領域２７は、データを一時的に記憶する記憶部（記憶手段）であり、例えば、ＤＲＡＭ等のメモリ又はレジスタ等である。また、記憶領域２７には、非特許文献３に開示された「Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ」が含まれる。
【００３９】
なお、プログラムを実行する際に必要となるデータ（重要データ；秘匿するデータ）は、ＨＤＤ（Hard Disk Drive）等により構成されるメモリ２２に格納される。ＨＤＤ等に格納される重要データは予め暗号化されてメモリ２２に格納されている。なお、重要データを暗号化する際に用いる暗号方式は任意の方式を用いることができる。例えば、ＡＥＳ（Advanced Encryption Standard）等の暗号化アルゴリズムを用いることができる。
【００４０】
図５は、第１の実施形態に係るプログラム改変装置１０の処理構成の一例を示す図である。図５を参照すると、プログラム改変装置１０は、プログラム入力部２０１と、プログラム改変部２０２と、プログラム出力部２０３と、を備える。
【００４１】
プログラム入力部２０１は、改変前プログラムを入力する手段である。プログラム入力部２０１は、例えば、図６に示すようなプログラムを入力する。プログラム入力部２０１は、取得したプログラム（改変前プログラム）をプログラム改変部２０２に引き渡す。
【００４２】
プログラム改変部２０２は、プログラムを改変する手段である。より具体的には、プログラム改変部２０２は、改変前プログラムに含まれる条件分岐文を、第１の処理（後述する常時実行コード）と、条件分岐文の条件式による判定を行う処理と、第２の処理（後述する変数更新コード）と、を含む処理に置換することで、プログラムを改変する。なお、第２の処理は、条件式による判定結果が条件分岐文の実行処理の実行を示す場合に、第１の処理を実行した結果得られる変数の値を条件分岐文の実行処理にて使用される変数に代入する処理である。
【００４３】
上記プログラムの改変を行うため、プログラム改変部２０２は、取得したプログラムから条件分岐文を検索し、当該条件分岐文を置き替えるための置換コード（上記第１の処理、判定処理、第２の処理を含むコード）を生成し、プログラムを改変する。条件分岐文としては、ＩＦ文、ＩＦ−ＥＬＳＥ文、ＳＷＩＴＣＨ文が例示される。
【００４４】
図６に示す改変前プログラムにおいて、プログラム改変部２０２は、ＩＦ文３０１、ＩＦ−ＥＬＳＥ文３０２を検索し、これらの条件分岐文を置換コード（置換プログラム）に置き替え、プログラムを改変する。
【００４５】
ここで、ＩＦ文は、「条件式（条件文）」と「実行処理（実行内容）」から構成されており、「条件」が真（Ｔ；Ｔｒｕｅ）であれば「実行処理」を実行し、「条件」が偽（Ｆ；Ｆａｌｓｅ）であれば「実行処理」を実行しない。図６の例では、条件Ｐが「真」であれば、実行処理（関数、コード）Ｑが実行され、条件Ｐが「偽」であれば、実行処理Ｑは実行されない。
【００４６】
また、ＩＦ−ＥＬＳＥ文は、「条件式」、「実行処理」及び「否定実行処理」から構成される。「条件」が真であれば「実行処理」が実行され、そうでなければ「否定実行処理」が実行される。
【００４７】
図７は、プログラム改変部２０２によるプログラム改変動作の一例を示すフローチャートである。
【００４８】
ステップＳ１０１において、プログラム改変部２０２は、条件分岐文の「実行処理」を複製し「常時実行コード」の基礎を生成する。
【００４９】
ステップＳ１０２において、プログラム改変部２０２は、空文字列を「変数更新コード」の基礎として生成する。
【００５０】
ステップＳ１０３において、プログラム改変部２０２は、常時実行コード内の各変数を他の変数に置き替える。その際、プログラム改変部２０２は、改変前プログラムでは使用されない（登場しない）テンポラリな変数を選択し、常時実行コード内の変数を選択した変数により置き換える。例えば、常時実行コードに含まれる変数をＸ、置き替える他の変数（テンポラリな変数）をＸ１とすると、常時実行コードに含まれる変数Ｘを変数Ｘ１に置き替える。
【００５１】
ステップＳ１０４において、プログラム改変部２０２は、常時実行コードの冒頭に、置換した変数（上記の例では変数Ｘ１）を置換された変数（上記の例では変数Ｘ）により初期化する処理（Ｘ１＝Ｘ）を追加する。
【００５２】
ステップＳ１０５において、プログラム改変部２０２は、変数更新コードに、常時実行コードの置換された変数（上記の例では変数Ｘ）を置換した変数（上記の例ではＸ１）により更新する処理（Ｘ＝Ｘ１）を記載する。
【００５３】
このように、プログラム改変部２０２は、条件分岐文の実行処理を複製し、複製された実行処理に含まれる第１変数（上記の例では変数Ｘ）をプログラムにて使用されていない第２変数（上記の例では変数Ｘ１）に置き替え、第２変数を第１変数により初期化することで、常時実行コードを生成する。さらに、プログラム改変部２０２は、第１変数に第２変数の値を代入する処理として、変数更新コードを生成する。
【００５４】
ステップＳ１０６において、プログラム改変部２０２は、条件分岐文の条件が「真」であれば「変数更新コード」を「漏洩耐性計算」により実行するという内容の「更新実行コード」を生成する。つまり、プログラム改変部２０２は、条件分岐文に含まれる条件式を用いた判定処理と、変数更新処理と、を含む更新実行コードを生成する。
【００５５】
ステップＳ１０７において、条件分岐文を、「常時実行コード」を実行した後に「更新実行コード」を実行する処理に置き替える（改変する）。
【００５６】
続いて、図面を参照しつつ上記処理を具体的に説明する。
【００５７】
例えば、図６に示すＩＦ文３０１の実行処理Ｑの内容が図８（ａ）のとおりであったとする。この場合、実行処理Ｑが複製され、且つ、使用されている変数ａ〜ｃがそれぞれ変数ａ１〜ｃ１に置き換えられ、常時実行コードＲの基礎が生成される（図８（ｂ）参照）。
【００５８】
その後、テンポラリな変数ａ１〜ｃ１は実行処理Ｑにて使用されている変数ａ〜ｃにより初期化され、常時実行コードＲの冒頭に挿入される（図８（ｃ）参照）。
【００５９】
次に、プログラム改変部２０２は、変数更新コードＳの基礎に、実行処理Ｑにて使用されている変数ａ〜ｃに、常時実行コードＲの処理により得られる結果（変数ａ１〜ｃ１）を代入する処理を記載する（図８（ｄ）参照）。
【００６０】
その後、プログラム改変部２０２は、条件分岐文の条件Ｐが「真」であれば、変数更新コードＳを漏洩耐性計算により実行するという内容を含む更新実行コードＴを生成する（図８（ｅ）参照）。つまり、プログラム改変部２０２は、変数更新コードＳが漏洩耐性計算により実行されるようにプログラムを改変する。なお、図８（ｅ）に示す「ｅｘｅｃｕｔｅ_ＬＲ（Ｓ）」は変数更新コードＳを漏洩耐性（Leakage resistance）計算により実行することを示す。
【００６１】
その後、プログラム改変部２０２は、図６に示すＩＦ文３０１を、常時実行コードＲを実行した後に更新実行コードＴを実行する、という内容に置き替える。
【００６２】
その結果、図６に示すＩＦ文３０１は、図９に示す置換文３０１ａに置き換わる。図９を参照すると、条件分岐文の実行処理Ｑと同等の内容を持つ常時実行コードＲは常に実行されるが、その結果が変数に反映される（変数更新コードＳが実行される）のは条件Ｐが「真」の場合に限られることが分かる。即ち、ＩＦ文３０１を置換文３０１ａにより置き替えたとしても実行結果が変わることはない。
【００６３】
また、条件分岐文の実行処理Ｑにおける変数ａ〜ｃへの代入操作は条件Ｐが「真」の場合に行われるように抑制されているため、常時実行コードＲの実行結果がプログラムの他の箇所に影響を与えることもない。
【００６４】
プログラム改変部２０２は、ＩＦ−ＥＬＳＥ文やＳＷＩＴＣＨ文等の条件分岐文もＩＦ文と同様に置換コードに置き替える。
【００６５】
例えば、図６に示す例では、プログラム改変部２０２は、ＩＦ−ＥＬＳＥ文３０２に含まれる実行処理Ｑ１に対応する常時実行コードＲ１と変数更新コードＳ１を、上記説明した方法と同様の方法により生成する。同様に、プログラム改変部２０２は、ＩＦ−ＥＬＳＥ文３０２に含まれる実行処理Ｑ２に対応する常時実行コードＲ２と変数更新コードＳ２を生成する。
【００６６】
その後、プログラム改変部２０２は、条件Ｐ１が「真」であれば変数更新コードＳ１を漏洩耐性計算で実行し、条件Ｐ２が「偽」であれば変数更新コードＳ２を漏洩耐性計算で実行する、という内容を含む更新実行コードＴを生成する。
【００６７】
その後、プログラム改変部２０２は、ＩＦ−ＥＬＳＥ文３０２を、常時実行コードＲ１、Ｒ２を実行した後に更新実行コードＴを実行する、という内容に置き替える。
【００６８】
なお、ＳＷＩＴＣＨ文に関しては、上記ＩＦ文、ＩＦ−ＥＬＳＥ文の条件分岐を３分岐以上に拡張したものに過ぎず、当業者にとってＳＷＩＴＣＨ文の置換コード生成は明らかであるので説明を省略する。
【００６９】
図５に説明を戻すと、プログラム出力部２０３は、プログラム改変部２０２により改変された後のプログラムをプログラム実行装置２０に向けて出力する。
【００７０】
図１０は、第１の実施形態に係るプログラム実行装置２０の処理構成の一例を示す図である。図１０を参照すると、プログラム実行装置２０は、プログラム入力部４０１と、プログラム実行部４０２と、を含んで構成される。
【００７１】
プログラム入力部４０１は、改変後プログラムを入力する手段である。プログラム入力部４０１は、取得したプログラム（改変後プログラム）をプログラム実行部４０２に引き渡す。
【００７２】
プログラム実行部４０２は、改変後プログラムをハードウェア隔離領域２５にて実行する。より具体的には、プログラム実行部４０２は、改変後プログラムをハードウェア隔離領域２５の記憶領域２７にロードする。
【００７３】
また、プログラム実行部４０２は、メモリ２２（二次記憶領域）に格納されている暗号化された重要データをハードウェア隔離領域２５の記憶領域２７にロードする。なお、プログラム実行部４０２は、必要に応じて改変後プログラムをコンパイルする等により実行コードを生成し、ハードウェア隔離領域２５にロードする。
【００７４】
その後、プログラム実行部４０２は、プロセッサ２６に対して暗号化された重要データの復号と改変後プログラムの実行を指示する。当該指示を受けたプロセッサ２６は、記憶領域２７にロードされた暗号化データを復号した後、改変後プログラムを実行する。なお、プログラム実行部４０２は、必要に応じて重要データ復号用のプログラムもハードウェア隔離領域２５にロードしておく。
【００７５】
プロセッサ２６は、改変後プログラムを実行する。その際、「漏洩耐性計算」によりコードを実行と記載されている場合（上記の例では、ｅｘｅｃｕｔｅ＿ＬＲと指定されている場合）には、プロセッサ２６は、当該指定されたコードを「漏洩耐性計算」により実行する。具体的には、プロセッサ２６は、上述の「Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ」上で指定されたコードの実行を行う。
【００７６】
上記の例では、変数更新コードＳが漏洩耐性計算により実行するように記載されているので、当該コードに記載された代入処理が「Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ」上で実行される。「Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ」等を利用した漏洩耐性計算を実行することで、メモリへのアクセス（読み書き）が監視された状況であっても重要データの漏洩を防止することができる。なお、「Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ」上での漏洩耐性計算は、実行速度が遅いという問題があるが、プログラム実行装置２０にて実行する漏洩耐性計算は、変数更新コードＳのようにプログラムサイズが小さいコードを対象とするため、実行速度の低下は限定的である。
【００７７】
なお、プログラム実行部４０２によるハードウェア隔離領域２５を利用した改変後プログラムの実行指示等に係る処理はＣＰＵ２１にて実行される。
【００７８】
プログラム実行装置２０の動作をまとめると図１１に示すフローチャートのとおりとなる。
【００７９】
ステップＳ２０１において、プログラム入力部４０１は、改変後プログラムを入力する。
【００８０】
ステップＳ２０２において、プログラム実行部４０２は、改変後プログラムをハードウェア隔離領域２５にロードする。
【００８１】
ステップＳ２０３において、プログラム実行部４０２は、暗号化されたデータをハードウェア隔離領域２５にロードする。
【００８２】
ステップＳ２０４において、プロセッサ２６は、暗号化されたデータを復号する。
【００８３】
ステップＳ２０５において、プロセッサ２６は、改変後プログラムを実行する。その際、変数更新コードＳは「Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ」上で実行される。
【００８４】
第１の実施形態によれば、攻撃者にプログラムに実行時間計測を行われても重要データの漏洩を防止するプログラム実行システムを提供できる。具体的には、プログラム改変装置１０がプログラムを改変することで上記情報漏洩を防止する。
【００８５】
プログラムには、通常、ＩＦ文等の条件分岐文が含まれる。プログラムのＩＦ文は、条件式と実行処理Ｑから構成されており、条件Ｐが「真」であればＱを実行し、そうでなければＱを実行しない。このように条件Ｐの真偽によって実行処理Ｑを行うかどうかが異なる事が処理時間に影響する。そのため、とりわけ条件式で重要データの内容（値）により真偽が異なる場合、攻撃者がプログラムの実行時間を計測する事により重要データの部分情報が漏洩する可能性がある。
【００８６】
第１の実施形態では、上記事情を鑑みて、プログラムの条件分岐文を抽出し、改変する。プログラム改変装置１０は、改変前プログラムから条件分岐文を抽出し、当該条件分岐文の条件式による判定結果が真であるか偽であるかによらず必ず実行処理Ｑとほぼ同じ長さの常時実行コードＲを実行する。これにより、改変後プログラムの実行時間が条件Ｐの内容に依存しない。
【００８７】
また、常時実行コードＲは、実行処理Ｑとほぼ同一のプログラムであるが、常時実行コードＲの実行結果がプログラムの他の箇所に影響しないようにするため、実行処理Ｑ内にある変数への値の代入操作を抑制する。そして、条件Ｐが「真」であった場合に、代入操作（変数更新コードＳ）を実行する。このように、改変前プログラムから条件分岐文を実行するのではなく、常時実行コードＲを必ず実行するようにし、条件Ｐが「真」の場合に限り変数更新コードＳを実行することで、前述した時間計測によるサイドチャネル攻撃を回避できる。何故ならば、改変前プログラムと違い、条件Ｐの真偽に依存して実行が行われる変数更新コードＳのプログラムサイズは非常に小さいので、攻撃者がプログラムの実行時間を計測しても多くの情報を得ることができないからである。
【００８８】
ここで、変数更新コードＳには数多くの代入操作を伴うことがあるが、代入操作の際にはメモリの読み書きが発生するため、攻撃者はメモリの読み書きを監視する事でサイドチャネル攻撃が可能であるという懸念がある。そこで、第１の実施形態では、変数更新コードＳの実行に関しては、「漏洩耐性計算」により行い、サイドチャネル攻撃に対する防御を行う。
【００８９】
変数更新コードＳの内容は、複雑なものではなく、変数の代入操作という極めて簡単な内容となっている。従って、「Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ」上でのコード実行に代表されるような実行速度が極端に遅い技術を変数更新コードＳに適用したとしてもプログラム実行装置２０によるプログラム実行速度に与える影響は軽微である。なお、変数更新コードＳに含まれる代入処理の数が極めて少ない場合には、変数更新コードＳを「漏洩耐性計算」により実行する必要がないことは明らかである。
【００９０】
第１の実施形態に係るプログラム実行システムは以下の３つの要素により構成されている。
【００９１】
第１の要素は、プログラム全体をハードウェア隔離領域で実行し、「ハードウェア防御技術」による防御を行っている点である。
【００９２】
第２の要素は、時間計測によるサイドチャネル攻撃から重要データを守るため、プログラムの条件分岐文を改変し、条件分岐文を常時実行処理（常時実行コードＲ）と代入操作処理（変数更新コードＳ）に置換する点である。
【００９３】
第３の要素は、メモリ監視によるサイドチャネル攻撃から重要データを守るため、条件分岐文が置換された置換コードうち、変数更新コードＳに係る実行を「Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ」上で計算する（変数更新コードＳを漏洩耐性計算により実行する）点である。
【００９４】
本願開示では、時間計測によるサイドチャネル攻撃への対策とメモリ監視によるサイドチャネル攻撃が相補的になっている点が重要である。即ち、時間計測によるサイドチャネル攻撃への対策として条件分岐文が代入操作（変数更新コードＳの実行）という非常に単純な演算に置換されているからこそ、メモリ監視によるサイドチャネル攻撃に対する防御としてＯｂｌｉｖｉｏｕｓ  ＲＡＭを用いた計算のような実行速度が極端に遅い技術（漏洩耐性計算）を変数更新コードＳに適応しても実行速度にほとんど影響を与えない。
【００９５】
仮に、時間計測によるサイドチャネル攻撃に対する防御手段として別の手段を採用した場合は実行速度に対する影響は大きくなる。例えば、時間計測によるサイドチャネル攻撃に対する最も基本的な対策方法を採用する場合を考える。
対策方法：
プログラムの実行時間が短くなってしまった場合には、不必要な計算を実行することで実行時間を消費し、常に実行時間を一定にする。
【００９６】
このような対策を採用すると、実行効率は著しく低下する。なぜならば、当該方法を採用した場合にはメモリ監視によるサイドチャネル攻撃に対する防御の際、プログラム全体に対して「Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ」上での計算のような実行効率の悪い技術（漏洩耐性計算）を適応する必要があるからである。即ち、漏洩耐性計算はサイドチャネル攻撃が行われた場合にも重要データを保護できるものであるが、そのような対応は実行速度が遅く現実的ではない。対して、本願開示によるプログラム実行システムは、サイドチャネル攻撃が行われた場合にも重要データを保護でき、しかも実行速度が速い方式であるといえる。
【００９７】
上記実施形態にて説明したプログラム実行システムの構成（図２）は例示であって、システムの構成を限定する趣旨ではない。例えば、プログラム改変装置１０とプログラム実行装置２０の機能が１台のコンピュータ（情報処理装置）により実行される構成であってもよい。
【００９８】
また、上記実施形態では、変数更新コードＳを「漏洩耐性計算」により実行する場合には、「Ｏｂｌｉｖｉｏｕｓ  ＲＡＭ」上で当該コードを実行することとして説明したが、他の「漏洩対耐計算」手法により変数更新コードＳを実行しても良い。即ち、変数更新コードＳを実行する際の方式は、秘密情報の部分情報が漏洩しても安全性が担保できる方式であればどのような方式であってもよい。
【００９９】
また、上述の説明で用いた複数のフローチャートでは、複数の工程（処理）が順番に記載されているが、各実施形態で実行される工程の実行順序は、その記載の順番に制限されない。上記実施形態では、例えば各処理を並行して実行する等、図示される工程の順番を内容的に支障のない範囲で変更することができる。
【０１００】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
［付記１］
条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第１の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第１の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、改変装置と、
前記改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する、実行装置と、
を含む、システム。
［付記２］
前記改変装置は、
前記プログラムに含まれる条件分岐文を、
前記第１の処理と、前記条件分岐文の条件式による判定を行う処理と、前記条件式による判定結果が前記条件分岐文の実行処理の実行を示す場合に、前記第１の処理を実行した結果得られる変数の値を前記条件分岐文の実行処理にて使用される変数に変更する第２の処理と、を含む処理に置換する、好ましくは付記１のシステム。
［付記３］
前記改変装置は、前記第２の処理が漏洩耐性計算により実行されるように前記プログラムを改変する、好ましくは付記２のシステム。
［付記４］
前記実行装置は、前記第２の処理をＯｂｌｉｖｉｏｕｓ  ＲＡＭ（Random Access Memory）上で実行する、好ましくは付記３のシステム。
［付記５］
前記実行装置は、暗号化された変数を記憶する記憶領域を備え、
前記暗号化された変数を前記ハードウェア的に防御された実行環境にて復号した後、前記改変後のプログラムを実行する、好ましくは付記２乃至４のいずれか一に記載のシステム。
［付記６］
前記改変装置は、
前記条件分岐文の実行処理を複製し、前記複製された実行処理に含まれる第１変数を前記プログラムにて使用されていない第２変数に置き替え、前記第２変数を前記第１変数により初期化することで、前記第１の処理を生成する、好ましくは付記２乃至５のいずれか一に記載のシステム。
［付記７］
前記第２の処理は、前記第１変数に前記第２変数の値を代入する処理である、好ましくは付記６のシステム。
［付記８］
条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第１の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第１の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、改変装置。
［付記９］
条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第１の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第１の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、ステップと、
前記改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する、ステップと、
を含む、方法。
［付記１０］
条件分岐文を含むプログラムを入力する処理と、
前記条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第１の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第１の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する処理と、
をコンピュータに実行させるプログラム。
［付記１１］
入力されたプログラムを改変して出力する改変装置と、改変後のプログラムを実行する実行装置からなるシステムであって、
前記改変装置は
前記入力されたプログラムの各条件分岐に対し、前記改変後のプログラムでは条件分岐の結果行うプログラムの断片を必ず実行し、
前記条件分岐の判定が前記プログラム断片へとジャンプする結果になった場合のみ前記プログラムの断片の実行結果を判定するものであり、
前記実行装置は
前記改変後のプログラムを入力として受け取り、それをハードウェア的に防御された実行環境で実行し、
前記改変後のプログラムの実行に必要な秘密データは暗号化して保管されており、
前記改変後のプログラム実行時に前記秘密データを前記ハードウェア的に防御された実行環境で復号し、
前記改変後のプログラムの条件分岐を漏洩耐性計算で実行する事を特徴とするシステム。
［付記１２］
前記改変後のプログラムの条件分岐を漏洩耐性計算で実行することは、Ｏｂｌｉｖｉｏｕｓ  ＲＡＭで実行することである、付記１１のシステム。
なお、付記８〜１０の形態は、付記１の形態と同様に、付記２の形態〜付記７の形態に展開することが可能である。
【０１０１】
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【０１０２】
１０  プログラム改変装置
１１、２１  ＣＰＵ
１２、２２  メモリ
１３、２３  入出力インターフェイス
１４、２４  ＮＩＣ
２０  プログラム実行装置
２５  ハードウェア隔離領域
２６  プロセッサ
２７  記憶領域
１００  改変装置
１０１  実行装置
２０１、４０１  プログラム入力部
２０２  プログラム改変部
２０３  プログラム出力部
３０１  ＩＦ文
３０１ａ  置換文
３０２  ＩＦ−ＥＬＳＥ文
４０２  プログラム実行部
【図１】
2019049217.tif 000003
【図２】
2019049217.tif 000004
【図３】
2019049217.tif 000005
【図４】
2019049217.tif 000006
【図５】
2019049217.tif 000007
【図６】
2019049217.tif 000008
【図７】
2019049217.tif 000009
【図８】
2019049217.tif 000010
【図９】
2019049217.tif 000011
【図１０】
2019049217.tif 000012
【図１１】
2019049217.tif 000013
【手続補正書】
【提出日】令和2年3月4日(2020.3.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
条件分岐文を含む改変前プログラムを、前記条件分岐文の実行処理に相当する第１の処理の結果を前記条件分岐文の実行処理の処理結果として反映するか否かを前記条件分岐文の条件式に基づいて決定する改変後プログラムへ改変する、改変装置と、
前記改変後プログラムを、ハードウェア的に防御された実行環境にて実行する、実行装置と、
を含む、システム。
【請求項２】
前記改変装置は、
前記改変前プログラムに含まれる条件分岐文を、
前記第１の処理と、前記条件分岐文の条件式による判定を行う処理と、前記条件式による判定結果が前記条件分岐文の実行処理の実行を示す場合に、前記第１の処理を実行した結果得られる変数の値を前記条件分岐文の実行処理にて使用される変数に変更する第２の処理と、を含む処理に置換する、請求項１のシステム。
【請求項３】
前記改変装置は、前記第２の処理が漏洩耐性計算により実行されるように前記改変前プログラムを改変する、請求項２のシステム。
【請求項４】
前記実行装置は、前記第２の処理をＯｂｌｉｖｉｏｕｓ  ＲＡＭ（Random Access Memory）上で実行する、請求項３のシステム。
【請求項５】
前記実行装置は、暗号化された変数を記憶する記憶領域を備え、
前記暗号化された変数を前記ハードウェア的に防御された実行環境にて復号した後、前記改変後プログラムを実行する、請求項２乃至４のいずれか一項に記載のシステム。
【請求項６】
前記改変装置は、
前記条件分岐文の実行処理を複製し、前記複製された実行処理に含まれる第１変数を前記改変前プログラムにて使用されていない第２変数に置き替え、前記第２変数を前記第１変数により初期化することで、前記第１の処理を生成する、請求項２乃至５のいずれか一項に記載のシステム。
【請求項７】
前記第２の処理は、前記第１変数に前記第２変数の値を代入する処理である、請求項６のシステム。
【請求項８】
条件分岐文を含む改変前プログラムを、前記条件分岐文の実行処理に相当する第１の処理の結果を前記条件分岐文の実行処理の処理結果として反映するか否かを前記条件分岐文の条件式に基づいて決定する改変後プログラムへ改変する、改変装置。
【請求項９】
条件分岐文を含む改変前プログラムを、前記条件分岐文の実行処理に相当する第１の処理の結果を前記条件分岐文の実行処理の処理結果として反映するか否かを前記条件分岐文の条件式に基づいて決定する改変後プログラムへ改変する、ステップと、
前記改変後プログラムを、ハードウェア的に防御された実行環境にて実行する、ステップと、
を含む、方法。
【請求項１０】
条件分岐文を含む改変前プログラムを入力する処理と、
前記条件分岐文を含む改変前プログラムを、前記条件分岐文の実行処理に相当する第１の処理の結果を前記条件分岐文の実行処理の処理結果として反映するか否かを前記条件分岐文の条件式に基づいて決定する改変後プログラムへ改変する処理と、
をコンピュータに実行させるプログラム。
【国際調査報告】
2019049217.tif 000014
2019049217.tif 000015
2019049217.tif 000016