JP4917861B2 - プログラム解析方法およびプログラム - Google Patents

プログラム解析方法およびプログラム Download PDF

Info

Publication number
JP4917861B2
JP4917861B2 JP2006282307A JP2006282307A JP4917861B2 JP 4917861 B2 JP4917861 B2 JP 4917861B2 JP 2006282307 A JP2006282307 A JP 2006282307A JP 2006282307 A JP2006282307 A JP 2006282307A JP 4917861 B2 JP4917861 B2 JP 4917861B2
Authority
JP
Japan
Prior art keywords
conditional statement
program
variables
value
conditional
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.)
Expired - Fee Related
Application number
JP2006282307A
Other languages
English (en)
Other versions
JP2008102576A (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.)
KDDI Corp
Original Assignee
KDDI 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 KDDI Corp filed Critical KDDI Corp
Priority to JP2006282307A priority Critical patent/JP4917861B2/ja
Publication of JP2008102576A publication Critical patent/JP2008102576A/ja
Application granted granted Critical
Publication of JP4917861B2 publication Critical patent/JP4917861B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Description

本発明は、抽象解釈を用いたプログラム解析方法およびプログラムに関する。
一般に、プログラムには、利用者に対して秘密にすべきアルゴリズムを含む場合がある。こうした秘密にすべきアルゴリズムを利用者による解析から守るためには、何らかの対策を講じる必要がある。
その対応策の一つとして、プログラムの機能を保ちつつ、解析を困難にする難読化と呼ばれる手法があり、プログラム内の制御構造を複雑にしたり、プログラム内にダミーコードを挿入したりする方法が知られている。こうしたプログラムの難読化を実現するためには、opaque predicateと呼ばれる、常に真あるいは偽と判定される条件文を用いることが必要である。
具体的には、常に真と判定される条件分岐ブロックの中に、命令文を移動したり、常に偽と判定される条件分岐ブロックの中に、ダミーコードを挿入する等の処理を施すことによってプログラムの解析を困難にすることができる。
一方で、上記のように難読化されたプログラムに対して、抽象解釈を用いて、プログラム中のopaque predicateを検出する方法が提案されている(例えば、非特許文献1参照。)。
Mila Dalla Preda and Roberto Giacobazzi、"Opaque Predicates Detention by Abstract Interpretation、"Proc.of EAAI 2006.
しかしながら、上記の従来の方法では、ある与えられた関数f(x)がすべての整数xに対して、nで割り切れるかどうかのみに対する判定方法が示されているのみである。すなわち、上記の従来の方法においては、1つの変数のみが含まれる単一の式から構成されるopaque predicateのみをその対象としている。そのため、複数の変数を含む条件文、例えば、「すべての整数x、yに対して、7x2−y2≠1」や「すべての整数に対して、2|x2+x+y」等の条件文を検出することができないという問題があった。
そこで、本発明は、上述の課題に鑑みてなされたものであり、プログラム中に含まれる複数の変数あるいは複数の式からなる条件文についても、これらを的確に検出することができるプログラム解析方法およびプログラムを提供することを目的とする。
本発明は、上記の課題を解決するために以下の事項を提案している。
(1)本発明は、抽象解釈を用いて、複数の変数あるいは複数の式からなり、常に真または偽と判定される条件文をプログラム内から検出するプログラム解析方法を提案している。
この発明によれば、抽象解釈を用いることにより、プログラム内にある単一の変数からなる条件文のみならず、複数の変数あるいは複数の式からなる条件文についてもこれらを的確に検出することができる。
(2)本発明は、プログラム内に、複数の変数を含む条件文が与えられているときに、用いられている最大の係数あるいは最大の法を選択して、その値をpとする第1のステップ(例えば、図1のステップS101に相当)と、条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1の値に設定する第2のステップ(例えば、図1のステップS102に相当)と、設定したすべての値について、mod_pにおける条件文が常に真もしくは偽となるか否かを判断する第3のステップ(例えば、図1のステップS103からステップS106に相当)と、を備えたことを特徴とするプログラム解析方法を提案している。
この発明によれば、プログラム内に、複数の変数を含む条件文が与えられているときに、用いられている最大の係数あるいは最大の法を選択して、その値をpとし、条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1の値に設定して、設定したすべての値について、mod_pにおける条件文が常に真もしくは偽となるか否かを判断する。
したがって、複数の変数を含む条件文がプログラム内に存在する場合であっても、この条件文を的確に検出することができる。
(3)本発明は、プログラム内に、複数の式からなる条件文が与えられているときに、用いられているすべての法の最小公倍数をpと設定する第1のステップ(例えば、図4のステップS401に相当)と、条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1の値に設定する第2のステップ(例えば、図4のステップS402に相当)と、設定したすべての値について、mod_pにおける条件文が常に真もしくは偽となるか否かを判断する第3のステップ(例えば、図4のステップS403からステップS406に相当)と、を備えたことを特徴とするプログラム解析方法を提案している。
この発明によれば、プログラム内に、複数の式からなる条件文が与えられているときに、用いられているすべての法の最小公倍数をpと設定し、条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1の値に設定して、設定したすべての値について、mod_pにおける条件文が常に真もしくは偽となるか否かを判断する。
したがって、複数の式からなる条件文がプログラム内に存在する場合であっても、この条件文を的確に検出することができる。
(4)本発明は、プログラム内に、複数の変数を含む条件文が与えられているときに、用いられている最大の係数あるいは最大の法を選択して、その値をpとする第1のステップ(例えば、図1のステップS101に相当)と、条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1の値に設定する第2のステップ(例えば、図1のステップS102に相当)と、設定したすべての値について、mod_pにおける条件文が常に真もしくは偽となるか否かを判断する第3のステップ(例えば、図1のステップS103からステップS106に相当)と、をコンピュータに実行させるためのプログラムを提案している。
この発明によれば、プログラム内に、複数の変数を含む条件文が与えられているときに、コンピュータにより、用いられている最大の係数あるいは最大の法を選択して、その値をpとし、条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1の値に設定して、設定したすべての値について、mod_pにおける条件文が常に真もしくは偽となるか否かを判断する。
したがって、複数の変数を含む条件文がプログラム内に存在する場合であっても、この条件文を的確に検出することができる。
(5)本発明は、プログラム内に、複数の式からなる条件文が与えられているときに、用いられているすべての法の最小公倍数をpと設定する第1のステップ(例えば、図4のステップS401に相当)と、条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1の値に設定する第2のステップ(例えば、図4のステップS402に相当)と、設定したすべての値について、mod_ppにおける条件文が常に真もしくは偽となるか否かを判断する第3のステップ(例えば、図4のステップS403からステップS406に相当)と、をコンピュータに実行させるためのプログラムを提案している。
この発明によれば、プログラム内に、複数の式からなる条件文が与えられているときに、コンピュータにより、用いられているすべての法の最小公倍数をpと設定し、条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1の値に設定して、設定したすべての値について、mod_pにおける条件文が常に真もしくは偽となるか否かを判断する。
したがって、複数の式からなる条件文がプログラム内に存在する場合であっても、この条件文を的確に検出することができる。
本発明によれば、プログラム内にある単一の変数からなる条件文のみならず、複数の変数あるいは複数の式からなる条件文についてもこれらを的確に検出することができるという効果がある。
また、上記のような条件文を自動的に検出することにより、プログラム解析の観点から、冗長な条件分岐やダミーコードを除去することができるため、プログラムの解析がより容易になるという効果がある。
さらに、上記のような条件文を自動的に検出することにより、プログラムの保護の観点から、脆弱な条件文を検出して、これをより強固な条件文に置き換えることにより、プログラムの保護強化を図ることができるという効果がある。
以下、本発明の実施形態について、図面を用いて、詳細に説明する。
なお、本実施形態における構成要素は適宜、既存の構成要素等との置き換えが可能であり、また、他の既存の構成要素との組合せを含む様々なバリエーションが可能である。したがって、本実施形態の記載をもって、特許請求の範囲に記載された発明の内容を限定するものではない。
<第1の実施形態>
図1を用いて、本実施形態の処理について説明する。
なお、本実施形態は、プログラム中に存在する複数の変数を含む条件文を検出するプログラムの解析方法を示したものである。
<処理フロー>
本実施形態の処理は、図1に示すように、まず、条件文に用いられている最大の係数もしくは最大の法を選択し、この値をpとする(ステップS101)。次に、条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1に設定する(ステップS102)
さらに、設定した値に対して、mod_pにおける条件文の真偽を確認する(ステップS103)。そして、p回の試行において、条件文が常に真または偽になるかを判定し(ステップS104)、条件文が常に真または偽になると判定した場合には、この条件文がopaque predicateであると判断する(ステップS105)。一方で、条件文が常に真または偽にならないと判定した場合には、この条件文がopaque predicateでないと判断する(ステップS106)。
したがって、本実施形態によれば、上記の処理を実行することにより、複数の変数を含む条件文がプログラム内に存在する場合であっても、この条件文がopaque predicateであるか否かを的確に検出することができる。
次に、具体的な事例を用いた判定方法について説明する。
<実施例1>
本実施例では、複数の変数を含む条件文「すべての整数x、yに対して、ax2−by2≠c」について、その判定方法を図2を用いて説明する。
まず、aとbが、a>bなる関係にあるかどうかを判断する(ステップS201)。ここで、a>bである場合(ステップS201の「Yes」)には、y=0、1、2、・・・a−1において、−by2=c%aがすべてyに対して成立するか否かを判定する(ステップS202)。なお、ここで、「c%a」とは、cをaで割ったときの剰余である。
そして、y=0、1、2、・・・a−1において、−by2=c%aがすべてyに対して成立する場合には、この条件文がopaque predicateであると判断する(ステップS203)。一方、y=0、1、2、・・・a−1において、−by2=c%aがすべてyに対して成立しない場合には、この条件文がopaque predicateでないと判断する(ステップS204)。
また、aとbが、a≦bの関係にある場合(ステップS201の「No」)には、x=0、1、2、・・・b−1において、ax2=c%bがすべてxに対して成立するか否かを判定する(ステップS205)。なお、ここで、「c%b」とは、cをbで割ったときの剰余である。
そして、x=0、1、2、・・・b−1において、ax2=c%bがすべてxに対して成立する場合には、この条件文がopaque predicateであると判断する(ステップS207)。一方、x=0、1、2、・・・b−1において、ax2=c%bがすべてxに対して成立しない場合には、この条件文がopaque predicateでないと判断する(ステップS306)。
以上のように、上記のタイプの条件文の場合には、max{a、b}回の試行により、条件文がopaque predicateであるか否かを判定することができる。例えば、条件文「7x2−y2≠1」がopaque predicateであるかどうかを判定する際には、上記のa>bなる関係であることから、−y2≠1がy=0、1、2、3、4、5、6に対して成立するか否かを判定する。なお、本例では、すべてのyに対して、−y2≠1が成立するため、この条件文は、opaque predicateであると判断することができる。
<実施例2>
本実施例では、複数の変数を含む条件文「p|f(x1、x2、・・・、xn)」について、その判定方法を図3を用いて説明する。
まず、条件文に用いられている変数(x1、x2、・・・、xn)に対して、それぞれの変数の値に、0からp−1の値を独立に設定したとき、すなわち、p回の試行を行ったときに、条件文が常に真または偽になるか否かを判定する(ステップS301)。
そして、p回の試行において、条件文「p|f(x1、x2、・・・、xn)」が、常に真もしくは偽である場合(ステップS301の「Yes」)には、この条件文がopaque predicateであると判断する(ステップS302)。一方で、p回の試行において、条件文「p|f(x1、x2、・・・、xn)」が、常に真もしくは偽でない場合(ステップS301の「No」)には、この条件文がopaque predicateでないと判断する(ステップS303)。
以上のように、上記のタイプの条件文の場合には、p回の試行を実行することにより、条件文がopaque predicateであるか否かを判定することができる。例えば、条件文「2|x2+x+4y」がopaque predicateであるかどうかを判定する際には、(x、y)=(0、0)、(0、1)、(1、0)、(1、1)について、条件文「2|x2+x+4y」が成立するか否かを判断する。
<第2の実施形態>
図4を用いて、本実施形態の処理について説明する。
なお、本実施形態は、プログラム中に存在する複数の式を含む条件文を検出するプログラムの解析方法を示したものである。
<処理フロー>
本実施形態の処理は、図4に示すように、まず、条件文に用いられているすべての法の最小公倍数をpとする(ステップS401)。次に、条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1に設定する(ステップS402)。
さらに、設定した値に対して、modpにおける条件文の真偽を確認する(ステップS403)。そして、p回の試行において、条件文が常に真または偽であるか否かを判定し(ステップS404)、条件文が常に真または偽である場合(ステップS404の「Yes」)には、この条件文がopaque predicateであると判断する(ステップS405)。一方で、条件文が常に真または偽にならないと判定した場合には、この条件文がopaque predicateでないと判断する(ステップS406)。
したがって、本実施形態によれば、上記の処理を実行することにより、複数の式を含む条件文がプログラム内に存在する場合であっても、この条件文がopaque predicateであるか否かを的確に検出することができる。
なお、上記の処理をコンピュータ読み取り可能な記録媒体に記録し、この記録媒体に記録されたプログラムをコンピュータに読み込ませ、実行することによって本発明のプログラム解析方法を自動的に実現することができる。ここでいうコンピュータシステムとは、OSや周辺装置等のハードウェアを含む。
また、「コンピュータシステム」は、WWW(World Wide Web)システムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されても良い。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。
また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
以上、この発明の実施形態につき、図面を参照して詳述してきたが、具体的な構成はこの実施形態に限られるものではなく、この発明の要旨を逸脱しない範囲の設計等も含まれる。
本発明の第1の実施形態に係る処理フローである。 本発明の実施例1に係る処理フローである。 本発明の実施例2に係る処理フローである。 本発明の第2の実施形態に係る処理フローである。

Claims (4)

  1. プログラム内に、複数の変数を含む条件文が与えられているときに、
    コンピュータが、
    用いられている最大の係数あるいは最大の法を選択して、その値をpとする第1のステップと、
    条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1の値に設定する第2のステップと、
    設定したすべての値について、mod_pにおける条件文が常に真もしくは偽となるか否かを判断する第3のステップと、
    実行することを特徴とするプログラム解析方法。
  2. プログラム内に、複数の式からなる条件文が与えられているときに、
    コンピュータが、
    用いられているすべての法の最小公倍数をpと設定する第1のステップと、
    条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1の値に設定する第2のステップと、
    設定したすべての値について、mod_pにおける条件文が常に真もしくは偽となるか否かを判断する第3のステップと、
    実行することを特徴とするプログラム解析方法。
  3. プログラム内に、複数の変数を含む条件文が与えられているときに、
    用いられている最大の係数あるいは最大の法を選択して、その値をpとする第1のステップと、
    条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1の値に設定する第2のステップと、
    設定したすべての値について、mod_pにおける条件文が常に真もしくは偽となるか否かを判断する第3のステップと、
    をコンピュータに実行させるためのプログラム。
  4. プログラム内に、複数の式からなる条件文が与えられているときに、
    用いられているすべての法の最小公倍数をpと設定する第1のステップと、
    条件文に用いられている複数の変数に対して、それぞれの変数の値を0からp−1の値に設定する第2のステップと、
    設定したすべての値について、mod_pにおける条件文が常に真もしくは偽となるか否かを判断する第3のステップと、
    をコンピュータに実行させるためのプログラム。
JP2006282307A 2006-10-17 2006-10-17 プログラム解析方法およびプログラム Expired - Fee Related JP4917861B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2006282307A JP4917861B2 (ja) 2006-10-17 2006-10-17 プログラム解析方法およびプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2006282307A JP4917861B2 (ja) 2006-10-17 2006-10-17 プログラム解析方法およびプログラム

Publications (2)

Publication Number Publication Date
JP2008102576A JP2008102576A (ja) 2008-05-01
JP4917861B2 true JP4917861B2 (ja) 2012-04-18

Family

ID=39436885

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006282307A Expired - Fee Related JP4917861B2 (ja) 2006-10-17 2006-10-17 プログラム解析方法およびプログラム

Country Status (1)

Country Link
JP (1) JP4917861B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI687273B (zh) 2015-01-19 2020-03-11 日商荏原製作所股份有限公司 流體操作式泵浦用的擴散器及該擴散器之製造方法

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5277825B2 (ja) * 2008-09-18 2013-08-28 富士ゼロックス株式会社 プログラム難読化装置及び難読化プログラム

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH08272623A (ja) * 1995-04-03 1996-10-18 Toshiba Corp プログラム解析装置及びプログラム解析方法
EP0988591A1 (en) * 1997-06-09 2000-03-29 Intertrust, Incorporated Obfuscation techniques for enhancing software security
KR100568228B1 (ko) * 2003-05-20 2006-04-07 삼성전자주식회사 고유번호를 이용한 프로그램 탬퍼 방지 방법과 난독처리된 프로그램 업그레이드 방법, 상기 방법을 위한 장치
JP4675642B2 (ja) * 2005-02-22 2011-04-27 Kddi株式会社 プログラム難読化装置およびその方法ならびにプログラム

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI687273B (zh) 2015-01-19 2020-03-11 日商荏原製作所股份有限公司 流體操作式泵浦用的擴散器及該擴散器之製造方法

Also Published As

Publication number Publication date
JP2008102576A (ja) 2008-05-01

Similar Documents

Publication Publication Date Title
Yarom et al. Recovering OpenSSL ECDSA nonces using the FLUSH+ RELOAD cache side-channel attack
CN107040362B (zh) 模乘设备和方法
US20160358165A1 (en) Cryptographically concealing amounts transacted on a ledger while preserving a network's ability to verify the transaction
JP4938766B2 (ja) プログラム難読化システム、プログラム難読化装置及びプログラム難読化方法
CN101261666B (zh) 一种通过加密可执行程序文件实现软件版权保护的方法
Rahimunnisa et al. FPGA implementation of AES algorithm for high throughput using folded parallel architecture
CN109462477B (zh) 基于物联网嵌入式设备的白盒加密方法
Rebeiro et al. Timing channels in cryptography: a micro-architectural perspective
CN111008407A (zh) 用于执行虚拟加密操作的加密电路
Tuveri et al. Side-channel analysis of SM2: A late-stage featurization case study
US9565017B2 (en) Method for efficiently protecting elliptic curve cryptography against simple power analysis attacks
EP3287891A1 (fr) Protection d'un calcul modulaire
CN104463020B (zh) 存储器数据完整性保护的方法
US20110255687A1 (en) Data transformation system using cyclic groups
JP4917861B2 (ja) プログラム解析方法およびプログラム
Gaspoz et al. Threshold implementations in software: Micro-architectural leakages in algorithms
Coron et al. Improved gadgets for the high-order masking of dilithium
KR102578869B1 (ko) 부채널 공격에 안전한 행렬 곱 연산을 수행하기 위한 장치 및 방법
JP2013156798A (ja) 記憶装置、アクセスパターンの秘匿方法およびプログラム
JP5102536B2 (ja) ストリーム暗号の暗号化装置、復号化装置、暗号化方法、復号化方法およびプログラム
EP2674891A1 (en) A method, a device and a computer program support for execution of encrypted computer code
Chakraborty et al. RASSLE: return address stack based side-channel leakage
CN104636276A (zh) 一种保护内存存储器数据机密性和完整性的方法
US11265145B2 (en) Method and device for performing substitution table operations
JP6996561B2 (ja) システム、改変装置、方法及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20090708

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20111011

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20111025

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111220

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: 20120117

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120127

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150203

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees