JPWO2019049217A1 - システム、改変装置、方法及びプログラム - Google Patents

システム、改変装置、方法及びプログラム Download PDF

Info

Publication number
JPWO2019049217A1
JPWO2019049217A1 JP2019540163A JP2019540163A JPWO2019049217A1 JP WO2019049217 A1 JPWO2019049217 A1 JP WO2019049217A1 JP 2019540163 A JP2019540163 A JP 2019540163A JP 2019540163 A JP2019540163 A JP 2019540163A JP WO2019049217 A1 JPWO2019049217 A1 JP WO2019049217A1
Authority
JP
Japan
Prior art keywords
program
execution
conditional branch
branch statement
variable
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2019540163A
Other languages
English (en)
Other versions
JP6996561B2 (ja
Inventor
勇 寺西
勇 寺西
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Publication of JPWO2019049217A1 publication Critical patent/JPWO2019049217A1/ja
Application granted granted Critical
Publication of JP6996561B2 publication Critical patent/JP6996561B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/70Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
    • G06F21/71Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
    • G06F21/75Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information by inhibiting the analysis of circuitry or operation
    • G06F21/755Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information by inhibiting the analysis of circuitry or operation with measures against power attack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Storage Device Security (AREA)

Abstract

データの漏洩を強固に防止することに寄与するシステムを提供する。システムは、改変装置と、実行装置と、を含む。改変装置は、条件分岐文を含むプログラムを、条件分岐文の実行処理に相当する第1の処理が実行された後に、条件分岐文の条件式に基づいて第1の処理の結果を実行処理の処理結果としてプログラムで使用される変数に反映するか否かが決定されるように改変する。実行装置は、改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する。

Description

本発明は、システム、改変装置、方法及びプログラムに関する。特に、プログラムを実行する、システム、改変装置、方法及びプログラムに関する。
個人情報、認証情報、機密情報など、高い秘匿性を要求される重要データの安全性を担保する手段としてデータの暗号化が存在する。しかし、これらの重要データに対して、統計計算、認証処理、検索といった何らかのデータ処理を行う場合には、一度暗号を解く必要がある。従って、攻撃者がデータ処理を行う瞬間(暗号を解く瞬間)を狙い攻撃を行った場合には、重要データが漏洩する可能性がある。
近年、複数の半導体ベンダーからハードウェアレベルでプログラム、データを保護する技術(以下、ハードウェア防御技術と表記する)が提案されている(非特許文献1、2参照)。非特許文献1、2に開示された技術(デバイス)は、外部のソフトウェア等からアクセスできないようなセキュアな実行環境を作り、ソフトウェアのコードやデータを防御する。
また、非特許文献3にて、「Oblivious RAM」と称されるメモリが開示されている。当該文献によれば、一定期間中に必ず全メモリが一度だけアクセスされることを保証し、且つ、一定期間毎にアドレスの対応付けを変えることを行うことで、メモリの参照局所性を隠蔽することができる。
Intel、"Intel Software Guard Extensions (intel SGX)"、2017年6月15日、[online]、[平成29年6月15日検索]、インターネット〈URL:https://software.intel.com/en-us/sgx〉 ARM、"A SYSTEM-WIDE APPROACH TO SECURITE"、2017年6月15日、[online]、[平成29年6月15日検索]、インターネット〈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
なお、上記先行技術文献の各開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。
上述のハードウェア防御技術は、ハードウェア的に作られた(隔離された)領域(以下、ハードウェア隔離領域と表記する)にプログラムやデータを隔離する事で、攻撃者がプログラムに影響を及ぼす事を回避する技術である。ハードウェア防御技術では、OS(Operating System)やアプリケーションが通常アクセス可能な領域と、OS等からは特殊な手順なしではアクセス不可能な領域(ハードウェア隔離領域)と、を分離し、当該ハードウェア隔離領域にてプログラムを実行する。
前述の重要データの処理もこうしたハードウェア隔離領域にて実行される事で、ある程度の保護が可能である(情報漏洩の危険性をある程度低下できる)。しかし、こうしたハードウェア防御技術にも問題点がある。具体的には、重要データをハードウェア隔離領域に隔離したとしても、「サイドチャネル攻撃」という手法に対しては脆弱な面がある。即ち、非特許文献1、2等に開示されたハードウェア防御技術(当該技術が実装されたデバイス)を用いたとしても、重要データが攻撃者に漏洩する可能性があり、より一層、防御を強化することが望まれている。
なお、サイドチャネル攻撃とは、データ処理の最中にハードウェアが利用する時間(処理時間)、消費電力(リソース消費)、ハードウェアの放つ電磁波、動作音等から重要データを推測する攻撃の手法である。このような攻撃に対し、例えば、非特許文献3に開示された技術(Oblivious RAMを用いた計算)は、「漏洩耐性計算」と称され、サイドチャネル攻撃により秘密情報の部分情報が漏洩しても安全性が担保できる方式といえる。
また、非特許文献1、2に開示されたハードウェア防御技術と、非特許文献3に開示された技術(Oblivious RAMを用いた計算))や暗号化の技術を組み合わせて重要データを防御することも考えられる。例えば、サイドチャネル攻撃が可能なハードウェアを用いて重要データに関するデータ処理を行いつつ、重要データを予め暗号化しておく事等により、重要データが漏洩しないようにすることも想定できる。つまり、ハードウェア隔離領域において、漏洩耐性計算や暗号化処理を適応して重要データを処理する事で、原理的には重要データを秘匿しつつ計算する事が可能となる。しかしながら、通常、漏洩耐性計算等は非常に実行効率が悪いため、上記方法は現実的な対応とはいえない。
本発明は、データの漏洩を強固に防止するシステム、改変装置、方法及びプログラムを提供することを目的とする。
本発明の第1の視点によれば、条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第1の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第1の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、改変装置と、前記改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する、実行装置と、を含む、システムが提供される。
本発明の第2の視点によれば、条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第1の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第1の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、改変装置が提供される。
本発明の第3の視点によれば、条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第1の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第1の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、ステップと、前記改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する、ステップと、を含む、方法が提供される。
本発明の第4の視点によれば、条件分岐文を含むプログラムを入力する処理と、前記条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第1の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第1の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する処理と、をコンピュータに実行させるプログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント(non-transient)なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
本発明の各視点によれば、データの漏洩を強固に防止することに寄与するシステム、改変装置、方法及びプログラムが、提供される。
一実施形態の概要を説明するための図である。 第1の実施形態に係るプログラム実行システムの一例を示す図である。 第1の実施形態に係るプログラム改変装置のハードウェア構成の一例を示す図である。 第1の実施形態に係るプログラム実行装置のハードウェア構成の一例を示す図である。 第1の実施形態に係るプログラム改変装置の処理構成の一例を示す図である。 プログラム改変装置に入力するプログラムの一例を示す図である。 プログラム改変部によるプログラム改変動作の一例を示すフローチャートである。 プログラム改変部の動作を説明するための図である。 プログラム改変部の動作を説明するための図である。 第1の実施形態に係るプログラム実行装置の処理構成の一例を示す図である。 第1の実施形態に係るプログラム実行装置の動作の一例を示すフローチャートである。
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。また、各図におけるブロック間の接続線は、双方向及び単方向の双方を含む。一方向矢印については、主たる信号(データ)の流れを模式的に示すものであり、双方向性を排除するものではない。
一実施形態に係るシステムは、改変装置100と、実行装置101と、を含む(図1参照)。改変装置100は、条件分岐文を含むプログラムを、条件分岐文の実行処理に相当する第1の処理が実行された後に、条件分岐文の条件式に基づいて第1の処理の結果を実行処理の処理結果としてプログラムで使用される変数に反映するか否かが決定されるように改変する。実行装置101は、改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する。
上述のように、ハードウェア防御技術は攻撃者からの攻撃を防御することに一定の効果があるが、サイドチャネル攻撃が行われた際に重要データの保護が十分ではない。そこで、一実施形態に係るシステムでは、プログラムの実行をハードウェア的に防御された実行環境で行うことを前提にプログラムを改変する。改変装置100は、プログラムに含まれる条件分岐文を、当該分岐文の実行処理とほぼ同じ第1の処理(後述する常時実行コード)を実行し、且つ、条件分岐文の条件式による判定が実行処理の実行である場合に、上記第1の処理による実行結果を当初のプログラムにて使用されていた変数に反映する処理に置換する。
上記置換の結果、改変前のプログラムに含まれる条件分岐文の条件式による判定結果が真であるか偽であるかによらず必ず実行処理とほぼ同じ長さの第1の処理(常時実行コード)が実行される。これにより、改変後プログラムの実行時間は条件分岐文の条件の内容に依存しない。また、条件分岐文の条件式による判定が「実行処理の実行」を示す場合には、第1の処理による実行結果を反映する必要があるが、当該反映処理は変数に値を代入するという極めて簡単な処理となるので、当該反映処理の処理時間は極めて短い。そのため、サイドチャネル攻撃が行われたとしても、攻撃者は反映処理の有無による情報だけでは有益な情報を得ることができない。
以上のように改変されたプログラムをハードウェア的に防御された実行環境で実行することで、データの漏洩をより一層強固に防止できる。
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
[第1の実施形態]
第1の実施形態について、図面を用いてより詳細に説明する。
図2は、第1の実施形態に係るプログラム実行システムの一例を示す図である。図2を参照すると、プログラム実行システムは、プログラム改変装置10と、プログラム実行装置20と、を含んで構成される。
プログラム改変装置10は、プログラムを入力し、当該プログラムを改変する。プログラム改変装置10は、改変後のプログラムをプログラム実行装置20に提供する。プログラム改変装置10は、重要データを扱う改変前プログラムを入力として受け取り、データ漏洩を起こさない安全なプログラム(改変後プログラム)に改変して出力する。より具体的には、プログラム改変装置10は、条件分岐文(例えば、IF文)を含むプログラムを、条件分岐文の実行処理に相当する第1の処理(後述する常時実行コード)が実行された後に、条件分岐文の条件式に基づいて当該第1の処理の結果を実行処理の処理結果としてプログラムで使用される変数に反映するか否かが決定されるように改変する。
プログラム実行装置20は、改変されたプログラムを入力し、重要データを用いて改変後プログラムを実行する。より具体的には、プログラム実行装置20は、プログラム改変装置10により改変されたプログラムを、非特許文献1、2に開示されたようなハードウェア的に防御された実行環境にて実行する。
なお、以降の説明において、プログラム改変装置10が入力するプログラムを「改変前プログラム」と表記する。また、プログラム改変装置10が出力するプログラムを「改変後プログラム」と表記する。
第1の実施形態にて扱うプログラムは、C言語により記載されたプログラムとするが、他のプログラム言語により記載されたプログラムを用いることができるのは勿論である。また、第1の実施形態では、コンパイル前のプログラムを改変の対象として説明するが、コンパイル後のデータ(コード)を改変の対象としてもよい。
[ハードウェア構成]
第1の実施形態に係るプログラム実行システムを構成する各種装置のハードウェア構成を説明する。
図3は、第1の実施形態に係るプログラム改変装置10のハードウェア構成の一例を示す図である。プログラム改変装置10は、所謂、コンピュータ(情報処理装置)により構成可能であり、図3に例示する構成を備える。例えば、プログラム改変装置10は、内部バスにより相互に接続される、CPU(Central Processing Unit)11、メモリ12、入出力インターフェイス13及び通信インターフェイスであるNIC(Network Interface Card)14等を備える。
但し、図3に示す構成は、プログラム改変装置10のハードウェア構成を限定する趣旨ではない。プログラム改変装置10は、図示しないハードウェアを含んでもよいし、必要に応じて入出力インターフェイス13等を備えていなくともよい。例えば、ネットワークにより接続された操作端末によりプログラム改変装置10に情報の入出力を行う場合には、入出力インターフェイス13が不要な場合もある。また、プログラム改変装置10に含まれるCPU等の数も図3の例示に限定する趣旨ではなく、例えば、複数のCPUがプログラム改変装置10に含まれていてもよい。
メモリ12は、RAM(Random Access Memory)、ROM(Read Only Memory)、補助記憶装置(ハードディスク等)である。
入出力インターフェイス13は、図示しない表示装置や入力装置のインターフェイスである。表示装置は、例えば、液晶ディスプレイ等である。入力装置は、例えば、キーボードやマウス等のユーザ操作を受け付ける装置や、USB(Universal Serial Bus)メモリ等の外部記憶装置から情報を入力する装置である。ユーザは、キーボードやマウス等を用いて、必要な情報をプログラム改変装置10に入力する。
プログラム改変装置10の機能は、後述する処理モジュールにより実現される。当該処理モジュールは、例えば、メモリ12に格納されたプログラムをCPU11が実行することで実現される。また、そのプログラムは、ネットワークを介してダウンロードするか、あるいは、プログラムを記憶した記憶媒体を用いて、更新することができる。さらに、上記処理モジュールは、半導体チップにより実現されてもよい。即ち、上記処理モジュールが行う機能は、何らかのハードウェア及びソフトウェアの少なくともいずれかにより実現できればよい。
図4は、第1の実施形態に係るプログラム実行装置20のハードウェア構成の一例を示す図である。図4(a)を参照すると、プログラム実行装置20は、図3に示す各構成に加え、ハードウェア隔離領域25を備えている。
ハードウェア隔離領域25は、非特許文献1、2により開示されたハードウェア防御技術を実現する領域(デバイス)である。つまり、プログラム実行装置20は、非特許文献1、2により開示されたデバイスを含み構成することができる。
図4(b)を参照すると、ハードウェア隔離領域25には、プロセッサ26と、記憶領域27と、が含まれる。プロセッサ26は、プログラムを実行可能な計算部(計算手段)である。記憶領域27は、データを一時的に記憶する記憶部(記憶手段)であり、例えば、DRAM等のメモリ又はレジスタ等である。また、記憶領域27には、非特許文献3に開示された「Oblivious RAM」が含まれる。
なお、プログラムを実行する際に必要となるデータ(重要データ;秘匿するデータ)は、HDD(Hard Disk Drive)等により構成されるメモリ22に格納される。HDD等に格納される重要データは予め暗号化されてメモリ22に格納されている。なお、重要データを暗号化する際に用いる暗号方式は任意の方式を用いることができる。例えば、AES(Advanced Encryption Standard)等の暗号化アルゴリズムを用いることができる。
図5は、第1の実施形態に係るプログラム改変装置10の処理構成の一例を示す図である。図5を参照すると、プログラム改変装置10は、プログラム入力部201と、プログラム改変部202と、プログラム出力部203と、を備える。
プログラム入力部201は、改変前プログラムを入力する手段である。プログラム入力部201は、例えば、図6に示すようなプログラムを入力する。プログラム入力部201は、取得したプログラム(改変前プログラム)をプログラム改変部202に引き渡す。
プログラム改変部202は、プログラムを改変する手段である。より具体的には、プログラム改変部202は、改変前プログラムに含まれる条件分岐文を、第1の処理(後述する常時実行コード)と、条件分岐文の条件式による判定を行う処理と、第2の処理(後述する変数更新コード)と、を含む処理に置換することで、プログラムを改変する。なお、第2の処理は、条件式による判定結果が条件分岐文の実行処理の実行を示す場合に、第1の処理を実行した結果得られる変数の値を条件分岐文の実行処理にて使用される変数に代入する処理である。
上記プログラムの改変を行うため、プログラム改変部202は、取得したプログラムから条件分岐文を検索し、当該条件分岐文を置き替えるための置換コード(上記第1の処理、判定処理、第2の処理を含むコード)を生成し、プログラムを改変する。条件分岐文としては、IF文、IF−ELSE文、SWITCH文が例示される。
図6に示す改変前プログラムにおいて、プログラム改変部202は、IF文301、IF−ELSE文302を検索し、これらの条件分岐文を置換コード(置換プログラム)に置き替え、プログラムを改変する。
ここで、IF文は、「条件式(条件文)」と「実行処理(実行内容)」から構成されており、「条件」が真(T;True)であれば「実行処理」を実行し、「条件」が偽(F;False)であれば「実行処理」を実行しない。図6の例では、条件Pが「真」であれば、実行処理(関数、コード)Qが実行され、条件Pが「偽」であれば、実行処理Qは実行されない。
また、IF−ELSE文は、「条件式」、「実行処理」及び「否定実行処理」から構成される。「条件」が真であれば「実行処理」が実行され、そうでなければ「否定実行処理」が実行される。
図7は、プログラム改変部202によるプログラム改変動作の一例を示すフローチャートである。
ステップS101において、プログラム改変部202は、条件分岐文の「実行処理」を複製し「常時実行コード」の基礎を生成する。
ステップS102において、プログラム改変部202は、空文字列を「変数更新コード」の基礎として生成する。
ステップS103において、プログラム改変部202は、常時実行コード内の各変数を他の変数に置き替える。その際、プログラム改変部202は、改変前プログラムでは使用されない(登場しない)テンポラリな変数を選択し、常時実行コード内の変数を選択した変数により置き換える。例えば、常時実行コードに含まれる変数をX、置き替える他の変数(テンポラリな変数)をX1とすると、常時実行コードに含まれる変数Xを変数X1に置き替える。
ステップS104において、プログラム改変部202は、常時実行コードの冒頭に、置換した変数(上記の例では変数X1)を置換された変数(上記の例では変数X)により初期化する処理(X1=X)を追加する。
ステップS105において、プログラム改変部202は、変数更新コードに、常時実行コードの置換された変数(上記の例では変数X)を置換した変数(上記の例ではX1)により更新する処理(X=X1)を記載する。
このように、プログラム改変部202は、条件分岐文の実行処理を複製し、複製された実行処理に含まれる第1変数(上記の例では変数X)をプログラムにて使用されていない第2変数(上記の例では変数X1)に置き替え、第2変数を第1変数により初期化することで、常時実行コードを生成する。さらに、プログラム改変部202は、第1変数に第2変数の値を代入する処理として、変数更新コードを生成する。
ステップS106において、プログラム改変部202は、条件分岐文の条件が「真」であれば「変数更新コード」を「漏洩耐性計算」により実行するという内容の「更新実行コード」を生成する。つまり、プログラム改変部202は、条件分岐文に含まれる条件式を用いた判定処理と、変数更新処理と、を含む更新実行コードを生成する。
ステップS107において、条件分岐文を、「常時実行コード」を実行した後に「更新実行コード」を実行する処理に置き替える(改変する)。
続いて、図面を参照しつつ上記処理を具体的に説明する。
例えば、図6に示すIF文301の実行処理Qの内容が図8(a)のとおりであったとする。この場合、実行処理Qが複製され、且つ、使用されている変数a〜cがそれぞれ変数a1〜c1に置き換えられ、常時実行コードRの基礎が生成される(図8(b)参照)。
その後、テンポラリな変数a1〜c1は実行処理Qにて使用されている変数a〜cにより初期化され、常時実行コードRの冒頭に挿入される(図8(c)参照)。
次に、プログラム改変部202は、変数更新コードSの基礎に、実行処理Qにて使用されている変数a〜cに、常時実行コードRの処理により得られる結果(変数a1〜c1)を代入する処理を記載する(図8(d)参照)。
その後、プログラム改変部202は、条件分岐文の条件Pが「真」であれば、変数更新コードSを漏洩耐性計算により実行するという内容を含む更新実行コードTを生成する(図8(e)参照)。つまり、プログラム改変部202は、変数更新コードSが漏洩耐性計算により実行されるようにプログラムを改変する。なお、図8(e)に示す「execute_LR(S)」は変数更新コードSを漏洩耐性(Leakage resistance)計算により実行することを示す。
その後、プログラム改変部202は、図6に示すIF文301を、常時実行コードRを実行した後に更新実行コードTを実行する、という内容に置き替える。
その結果、図6に示すIF文301は、図9に示す置換文301aに置き換わる。図9を参照すると、条件分岐文の実行処理Qと同等の内容を持つ常時実行コードRは常に実行されるが、その結果が変数に反映される(変数更新コードSが実行される)のは条件Pが「真」の場合に限られることが分かる。即ち、IF文301を置換文301aにより置き替えたとしても実行結果が変わることはない。
また、条件分岐文の実行処理Qにおける変数a〜cへの代入操作は条件Pが「真」の場合に行われるように抑制されているため、常時実行コードRの実行結果がプログラムの他の箇所に影響を与えることもない。
プログラム改変部202は、IF−ELSE文やSWITCH文等の条件分岐文もIF文と同様に置換コードに置き替える。
例えば、図6に示す例では、プログラム改変部202は、IF−ELSE文302に含まれる実行処理Q1に対応する常時実行コードR1と変数更新コードS1を、上記説明した方法と同様の方法により生成する。同様に、プログラム改変部202は、IF−ELSE文302に含まれる実行処理Q2に対応する常時実行コードR2と変数更新コードS2を生成する。
その後、プログラム改変部202は、条件P1が「真」であれば変数更新コードS1を漏洩耐性計算で実行し、条件P2が「偽」であれば変数更新コードS2を漏洩耐性計算で実行する、という内容を含む更新実行コードTを生成する。
その後、プログラム改変部202は、IF−ELSE文302を、常時実行コードR1、R2を実行した後に更新実行コードTを実行する、という内容に置き替える。
なお、SWITCH文に関しては、上記IF文、IF−ELSE文の条件分岐を3分岐以上に拡張したものに過ぎず、当業者にとってSWITCH文の置換コード生成は明らかであるので説明を省略する。
図5に説明を戻すと、プログラム出力部203は、プログラム改変部202により改変された後のプログラムをプログラム実行装置20に向けて出力する。
図10は、第1の実施形態に係るプログラム実行装置20の処理構成の一例を示す図である。図10を参照すると、プログラム実行装置20は、プログラム入力部401と、プログラム実行部402と、を含んで構成される。
プログラム入力部401は、改変後プログラムを入力する手段である。プログラム入力部401は、取得したプログラム(改変後プログラム)をプログラム実行部402に引き渡す。
プログラム実行部402は、改変後プログラムをハードウェア隔離領域25にて実行する。より具体的には、プログラム実行部402は、改変後プログラムをハードウェア隔離領域25の記憶領域27にロードする。
また、プログラム実行部402は、メモリ22(二次記憶領域)に格納されている暗号化された重要データをハードウェア隔離領域25の記憶領域27にロードする。なお、プログラム実行部402は、必要に応じて改変後プログラムをコンパイルする等により実行コードを生成し、ハードウェア隔離領域25にロードする。
その後、プログラム実行部402は、プロセッサ26に対して暗号化された重要データの復号と改変後プログラムの実行を指示する。当該指示を受けたプロセッサ26は、記憶領域27にロードされた暗号化データを復号した後、改変後プログラムを実行する。なお、プログラム実行部402は、必要に応じて重要データ復号用のプログラムもハードウェア隔離領域25にロードしておく。
プロセッサ26は、改変後プログラムを実行する。その際、「漏洩耐性計算」によりコードを実行と記載されている場合(上記の例では、execute_LRと指定されている場合)には、プロセッサ26は、当該指定されたコードを「漏洩耐性計算」により実行する。具体的には、プロセッサ26は、上述の「Oblivious RAM」上で指定されたコードの実行を行う。
上記の例では、変数更新コードSが漏洩耐性計算により実行するように記載されているので、当該コードに記載された代入処理が「Oblivious RAM」上で実行される。「Oblivious RAM」等を利用した漏洩耐性計算を実行することで、メモリへのアクセス(読み書き)が監視された状況であっても重要データの漏洩を防止することができる。なお、「Oblivious RAM」上での漏洩耐性計算は、実行速度が遅いという問題があるが、プログラム実行装置20にて実行する漏洩耐性計算は、変数更新コードSのようにプログラムサイズが小さいコードを対象とするため、実行速度の低下は限定的である。
なお、プログラム実行部402によるハードウェア隔離領域25を利用した改変後プログラムの実行指示等に係る処理はCPU21にて実行される。
プログラム実行装置20の動作をまとめると図11に示すフローチャートのとおりとなる。
ステップS201において、プログラム入力部401は、改変後プログラムを入力する。
ステップS202において、プログラム実行部402は、改変後プログラムをハードウェア隔離領域25にロードする。
ステップS203において、プログラム実行部402は、暗号化されたデータをハードウェア隔離領域25にロードする。
ステップS204において、プロセッサ26は、暗号化されたデータを復号する。
ステップS205において、プロセッサ26は、改変後プログラムを実行する。その際、変数更新コードSは「Oblivious RAM」上で実行される。
第1の実施形態によれば、攻撃者にプログラムに実行時間計測を行われても重要データの漏洩を防止するプログラム実行システムを提供できる。具体的には、プログラム改変装置10がプログラムを改変することで上記情報漏洩を防止する。
プログラムには、通常、IF文等の条件分岐文が含まれる。プログラムのIF文は、条件式と実行処理Qから構成されており、条件Pが「真」であればQを実行し、そうでなければQを実行しない。このように条件Pの真偽によって実行処理Qを行うかどうかが異なる事が処理時間に影響する。そのため、とりわけ条件式で重要データの内容(値)により真偽が異なる場合、攻撃者がプログラムの実行時間を計測する事により重要データの部分情報が漏洩する可能性がある。
第1の実施形態では、上記事情を鑑みて、プログラムの条件分岐文を抽出し、改変する。プログラム改変装置10は、改変前プログラムから条件分岐文を抽出し、当該条件分岐文の条件式による判定結果が真であるか偽であるかによらず必ず実行処理Qとほぼ同じ長さの常時実行コードRを実行する。これにより、改変後プログラムの実行時間が条件Pの内容に依存しない。
また、常時実行コードRは、実行処理Qとほぼ同一のプログラムであるが、常時実行コードRの実行結果がプログラムの他の箇所に影響しないようにするため、実行処理Q内にある変数への値の代入操作を抑制する。そして、条件Pが「真」であった場合に、代入操作(変数更新コードS)を実行する。このように、改変前プログラムから条件分岐文を実行するのではなく、常時実行コードRを必ず実行するようにし、条件Pが「真」の場合に限り変数更新コードSを実行することで、前述した時間計測によるサイドチャネル攻撃を回避できる。何故ならば、改変前プログラムと違い、条件Pの真偽に依存して実行が行われる変数更新コードSのプログラムサイズは非常に小さいので、攻撃者がプログラムの実行時間を計測しても多くの情報を得ることができないからである。
ここで、変数更新コードSには数多くの代入操作を伴うことがあるが、代入操作の際にはメモリの読み書きが発生するため、攻撃者はメモリの読み書きを監視する事でサイドチャネル攻撃が可能であるという懸念がある。そこで、第1の実施形態では、変数更新コードSの実行に関しては、「漏洩耐性計算」により行い、サイドチャネル攻撃に対する防御を行う。
変数更新コードSの内容は、複雑なものではなく、変数の代入操作という極めて簡単な内容となっている。従って、「Oblivious RAM」上でのコード実行に代表されるような実行速度が極端に遅い技術を変数更新コードSに適用したとしてもプログラム実行装置20によるプログラム実行速度に与える影響は軽微である。なお、変数更新コードSに含まれる代入処理の数が極めて少ない場合には、変数更新コードSを「漏洩耐性計算」により実行する必要がないことは明らかである。
第1の実施形態に係るプログラム実行システムは以下の3つの要素により構成されている。
第1の要素は、プログラム全体をハードウェア隔離領域で実行し、「ハードウェア防御技術」による防御を行っている点である。
第2の要素は、時間計測によるサイドチャネル攻撃から重要データを守るため、プログラムの条件分岐文を改変し、条件分岐文を常時実行処理(常時実行コードR)と代入操作処理(変数更新コードS)に置換する点である。
第3の要素は、メモリ監視によるサイドチャネル攻撃から重要データを守るため、条件分岐文が置換された置換コードうち、変数更新コードSに係る実行を「Oblivious RAM」上で計算する(変数更新コードSを漏洩耐性計算により実行する)点である。
本願開示では、時間計測によるサイドチャネル攻撃への対策とメモリ監視によるサイドチャネル攻撃が相補的になっている点が重要である。即ち、時間計測によるサイドチャネル攻撃への対策として条件分岐文が代入操作(変数更新コードSの実行)という非常に単純な演算に置換されているからこそ、メモリ監視によるサイドチャネル攻撃に対する防御としてOblivious RAMを用いた計算のような実行速度が極端に遅い技術(漏洩耐性計算)を変数更新コードSに適応しても実行速度にほとんど影響を与えない。
仮に、時間計測によるサイドチャネル攻撃に対する防御手段として別の手段を採用した場合は実行速度に対する影響は大きくなる。例えば、時間計測によるサイドチャネル攻撃に対する最も基本的な対策方法を採用する場合を考える。
対策方法:
プログラムの実行時間が短くなってしまった場合には、不必要な計算を実行することで実行時間を消費し、常に実行時間を一定にする。
このような対策を採用すると、実行効率は著しく低下する。なぜならば、当該方法を採用した場合にはメモリ監視によるサイドチャネル攻撃に対する防御の際、プログラム全体に対して「Oblivious RAM」上での計算のような実行効率の悪い技術(漏洩耐性計算)を適応する必要があるからである。即ち、漏洩耐性計算はサイドチャネル攻撃が行われた場合にも重要データを保護できるものであるが、そのような対応は実行速度が遅く現実的ではない。対して、本願開示によるプログラム実行システムは、サイドチャネル攻撃が行われた場合にも重要データを保護でき、しかも実行速度が速い方式であるといえる。
上記実施形態にて説明したプログラム実行システムの構成(図2)は例示であって、システムの構成を限定する趣旨ではない。例えば、プログラム改変装置10とプログラム実行装置20の機能が1台のコンピュータ(情報処理装置)により実行される構成であってもよい。
また、上記実施形態では、変数更新コードSを「漏洩耐性計算」により実行する場合には、「Oblivious RAM」上で当該コードを実行することとして説明したが、他の「漏洩対耐計算」手法により変数更新コードSを実行しても良い。即ち、変数更新コードSを実行する際の方式は、秘密情報の部分情報が漏洩しても安全性が担保できる方式であればどのような方式であってもよい。
また、上述の説明で用いた複数のフローチャートでは、複数の工程(処理)が順番に記載されているが、各実施形態で実行される工程の実行順序は、その記載の順番に制限されない。上記実施形態では、例えば各処理を並行して実行する等、図示される工程の順番を内容的に支障のない範囲で変更することができる。
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
[付記1]
条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第1の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第1の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、改変装置と、
前記改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する、実行装置と、
を含む、システム。
[付記2]
前記改変装置は、
前記プログラムに含まれる条件分岐文を、
前記第1の処理と、前記条件分岐文の条件式による判定を行う処理と、前記条件式による判定結果が前記条件分岐文の実行処理の実行を示す場合に、前記第1の処理を実行した結果得られる変数の値を前記条件分岐文の実行処理にて使用される変数に変更する第2の処理と、を含む処理に置換する、好ましくは付記1のシステム。
[付記3]
前記改変装置は、前記第2の処理が漏洩耐性計算により実行されるように前記プログラムを改変する、好ましくは付記2のシステム。
[付記4]
前記実行装置は、前記第2の処理をOblivious RAM(Random Access Memory)上で実行する、好ましくは付記3のシステム。
[付記5]
前記実行装置は、暗号化された変数を記憶する記憶領域を備え、
前記暗号化された変数を前記ハードウェア的に防御された実行環境にて復号した後、前記改変後のプログラムを実行する、好ましくは付記2乃至4のいずれか一に記載のシステム。
[付記6]
前記改変装置は、
前記条件分岐文の実行処理を複製し、前記複製された実行処理に含まれる第1変数を前記プログラムにて使用されていない第2変数に置き替え、前記第2変数を前記第1変数により初期化することで、前記第1の処理を生成する、好ましくは付記2乃至5のいずれか一に記載のシステム。
[付記7]
前記第2の処理は、前記第1変数に前記第2変数の値を代入する処理である、好ましくは付記6のシステム。
[付記8]
条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第1の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第1の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、改変装置。
[付記9]
条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第1の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第1の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、ステップと、
前記改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する、ステップと、
を含む、方法。
[付記10]
条件分岐文を含むプログラムを入力する処理と、
前記条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第1の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第1の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する処理と、
をコンピュータに実行させるプログラム。
[付記11]
入力されたプログラムを改変して出力する改変装置と、改変後のプログラムを実行する実行装置からなるシステムであって、
前記改変装置は
前記入力されたプログラムの各条件分岐に対し、前記改変後のプログラムでは条件分岐の結果行うプログラムの断片を必ず実行し、
前記条件分岐の判定が前記プログラム断片へとジャンプする結果になった場合のみ前記プログラムの断片の実行結果を判定するものであり、
前記実行装置は
前記改変後のプログラムを入力として受け取り、それをハードウェア的に防御された実行環境で実行し、
前記改変後のプログラムの実行に必要な秘密データは暗号化して保管されており、
前記改変後のプログラム実行時に前記秘密データを前記ハードウェア的に防御された実行環境で復号し、
前記改変後のプログラムの条件分岐を漏洩耐性計算で実行する事を特徴とするシステム。
[付記12]
前記改変後のプログラムの条件分岐を漏洩耐性計算で実行することは、Oblivious RAMで実行することである、付記11のシステム。
なお、付記8〜10の形態は、付記1の形態と同様に、付記2の形態〜付記7の形態に展開することが可能である。
なお、引用した上記の特許文献等の各開示は、本書に引用をもって繰り込むものとする。本発明の全開示(請求の範囲を含む)の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素(各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む)の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
10 プログラム改変装置
11、21 CPU
12、22 メモリ
13、23 入出力インターフェイス
14、24 NIC
20 プログラム実行装置
25 ハードウェア隔離領域
26 プロセッサ
27 記憶領域
100 改変装置
101 実行装置
201、401 プログラム入力部
202 プログラム改変部
203 プログラム出力部
301 IF文
301a 置換文
302 IF−ELSE文
402 プログラム実行部

Claims (10)

  1. 条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第1の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第1の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、改変装置と、
    前記改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する、実行装置と、
    を含む、システム。
  2. 前記改変装置は、
    前記プログラムに含まれる条件分岐文を、
    前記第1の処理と、前記条件分岐文の条件式による判定を行う処理と、前記条件式による判定結果が前記条件分岐文の実行処理の実行を示す場合に、前記第1の処理を実行した結果得られる変数の値を前記条件分岐文の実行処理にて使用される変数に変更する第2の処理と、を含む処理に置換する、請求項1のシステム。
  3. 前記改変装置は、前記第2の処理が漏洩耐性計算により実行されるように前記プログラムを改変する、請求項2のシステム。
  4. 前記実行装置は、前記第2の処理をOblivious RAM(Random Access Memory)上で実行する、請求項3のシステム。
  5. 前記実行装置は、暗号化された変数を記憶する記憶領域を備え、
    前記暗号化された変数を前記ハードウェア的に防御された実行環境にて復号した後、前記改変後のプログラムを実行する、請求項2乃至4のいずれか一項に記載のシステム。
  6. 前記改変装置は、
    前記条件分岐文の実行処理を複製し、前記複製された実行処理に含まれる第1変数を前記プログラムにて使用されていない第2変数に置き替え、前記第2変数を前記第1変数により初期化することで、前記第1の処理を生成する、請求項2乃至5のいずれか一項に記載のシステム。
  7. 前記第2の処理は、前記第1変数に前記第2変数の値を代入する処理である、請求項6のシステム。
  8. 条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第1の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第1の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、改変装置。
  9. 条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第1の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第1の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する、ステップと、
    前記改変後のプログラムを、ハードウェア的に防御された実行環境にて実行する、ステップと、
    を含む、方法。
  10. 条件分岐文を含むプログラムを入力する処理と、
    前記条件分岐文を含むプログラムを、前記条件分岐文の実行処理に相当する第1の処理が実行された後に、前記条件分岐文の条件式に基づいて前記第1の処理の結果を前記実行処理の処理結果として前記プログラムで使用される変数に反映するか否かが決定されるように改変する処理と、
    をコンピュータに実行させるプログラム。
JP2019540163A 2017-09-05 2017-09-05 システム、改変装置、方法及びプログラム Active JP6996561B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2017/032001 WO2019049217A1 (ja) 2017-09-05 2017-09-05 システム、改変装置、方法及びプログラム

Publications (2)

Publication Number Publication Date
JPWO2019049217A1 true JPWO2019049217A1 (ja) 2020-10-01
JP6996561B2 JP6996561B2 (ja) 2022-01-17

Family

ID=65634913

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2019540163A Active JP6996561B2 (ja) 2017-09-05 2017-09-05 システム、改変装置、方法及びプログラム

Country Status (3)

Country Link
US (1) US20210064370A1 (ja)
JP (1) JP6996561B2 (ja)
WO (1) WO2019049217A1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023242821A1 (en) * 2022-06-16 2023-12-21 Sternum, Ltd. Systems and methods for the instrumentation, real-time compromise detection, and management of internet connected devices

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6360440B2 (ja) 2015-01-06 2018-07-18 Kddi株式会社 復号装置、方法及びプログラム

Also Published As

Publication number Publication date
JP6996561B2 (ja) 2022-01-17
US20210064370A1 (en) 2021-03-04
WO2019049217A1 (ja) 2019-03-14

Similar Documents

Publication Publication Date Title
JP7101761B2 (ja) コール・パス依存認証
US10210323B2 (en) Information assurance system for secure program execution
Behera et al. Different obfuscation techniques for code protection
KR101504857B1 (ko) 보안 시스템에서 랜덤하게 할당된 메모리 범위로 jit를 지원하는 시스템 및 방법
US10237059B2 (en) Diversified instruction set processing to enhance security
CN107408072B (zh) 用于随机化指令的方法、介质和装置
Bauman et al. Sgxelide: enabling enclave code secrecy via self-modification
CN104268444A (zh) 一种云OS Java源代码保护方法
US8775826B2 (en) Counteracting memory tracing on computing systems by code obfuscation
US10303885B2 (en) Methods and systems for securely executing untrusted software
Tychalas et al. SGXCrypter: IP protection for portable executables using Intel's SGX technology
Lin et al. Control-flow carrying code
JP6996561B2 (ja) システム、改変装置、方法及びプログラム
Lee et al. Classification and analysis of security techniques for the user terminal area in the internet banking service
US9378395B2 (en) Method, a device and a computer program support for execution of encrypted computer code
Schilling et al. SecWalk: Protecting page table walks against fault attacks
US20190121987A1 (en) Light-weight context tracking and repair for preventing integrity and confidentiality violations
US20210026935A1 (en) High performance compute ip encryption using unique set of application attributes
Sanjeev et al. Protecting cryptographic keys on client platforms using virtualization and raw disk image access
KR101173761B1 (ko) 프로그램의 외부 공격에 대한 공격 방어 및 탐지를 위한 장치 및 방법
Togan et al. Virtual machine for encrypted code execution
Vaslin ‘Hardware Core for Off-Chip Memory Security Management in Embedded Systems
JP2023065323A (ja) コンピュータに実装された方法、システム及びコンピュータプログラム
WO2023156571A1 (en) Protecting software
US20100162397A1 (en) Apparatus and method for protecting asset in computer system

Legal Events

Date Code Title Description
A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20200304

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200304

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210525

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20210702

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20210810

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211022

C60 Trial request (containing other claim documents, opposition documents)

Free format text: JAPANESE INTERMEDIATE CODE: C60

Effective date: 20211022

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20211101

C21 Notice of transfer of a case for reconsideration by examiners before appeal proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C21

Effective date: 20211102

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20211116

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20211129

R150 Certificate of patent or registration of utility model

Ref document number: 6996561

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150