耐タンパ証明携帯プログラム配信システム及びその方法
【課題】既存のゼロ知識証明携帯プログラム配信方式においては公開していた不変条件を秘匿し、不変条件及び証明本体に基づくリバースエンジニアリングを防止し、配信プログラムの耐タンパ性を向上させるプログラム配信方式を提供する。
【解決手段】本発明の耐タンパ証明携帯プログラム配信方式は、プログラムを配信する際、プログラムが安全に実行可能なことを対話的に通信して検証する配信であり、プログラムが正しいことを示すために、プログラムを実行する際に、プログラム中の複数ポイントで成立すべき不変条件からなる不変条件列を生成し、不変条件列に対するダミーの不変条件を複数含む不変条件列候補集合を生成し、プログラム,不変条件列及び不変条件列候補集合に基づき、プログラムの安全性を証明する命題論理式を生成し、開発者及び利用者間で、ゼロ知識証明プロトコルに従い、命題論理式の真偽を判定し、プログラムを実行する。
【解決手段】本発明の耐タンパ証明携帯プログラム配信方式は、プログラムを配信する際、プログラムが安全に実行可能なことを対話的に通信して検証する配信であり、プログラムが正しいことを示すために、プログラムを実行する際に、プログラム中の複数ポイントで成立すべき不変条件からなる不変条件列を生成し、不変条件列に対するダミーの不変条件を複数含む不変条件列候補集合を生成し、プログラム,不変条件列及び不変条件列候補集合に基づき、プログラムの安全性を証明する命題論理式を生成し、開発者及び利用者間で、ゼロ知識証明プロトコルに従い、命題論理式の真偽を判定し、プログラムを実行する。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ネットワークを介したプログラム配信において悪性プログラムによるホストヘの攻撃と、悪意のあるホストによるプログラムヘの攻撃との、双方を同時に防ぐセキュリティ技術としての耐タンパ証明携帯プログラム配信システム及びその方法に関する。
【背景技術】
【0002】
今日、プログラム化された高機能コンテンツがWWWブラウザや携帯端末に日常的にダウンロードされ実行されている。
また、パケットやノードなどのネットワーク構成要素をプログラマブルとすることで拡張性や耐故障性を増したアクティブネットワークの研究も進んでいる。
プログラムが流通する時代を迎え、悪性プログラムから計算機を守る新しい技術への需要が高まってきている。
【0003】
ここで、上述したようなネットワークを介したプログラム配信においては、タイプの異なる次の2種類の攻撃を考慮する必要がある。
・タイプ1悪性プログラム
ウィルス・バッファ溢れのバグを悪用するプログラムなどによるホストコンピュータヘの攻撃。
・タイプ2悪意のあるホストコンピュータによるプログラムヘの攻撃
配布されたプログラムの解析・改ざん・リバースエンジニアリングなど。
【0004】
上述したタイプ1の攻撃を防ぐための技術としては、プログラムに開発者の電子署名を付与し検証する方式,パタンマッチによるウィルス検知・駆除方式,仮想機械のバイトコード検証方式などが既に実用化されている。しかしながら、これらの方式はいずれも悪性プログラムの検出精度に限界があることが知られている。
この問題を解決する次世代技術として、証明携帯プログラム配信方式(Proof-Carrying Code)(例えば、特許文献1及び非特許文献1を参照)が提案されている。この証明携帯プログラム配信方式は、プログラム本体にそれが正しく安全に動作すること(例えば、与えられた入力条件のもとでプログラムを実行した場合、結果が出力条件を満たし、実行時には禁止されたメモリ領域へのアクセスがまったくないこと)の詳細な数学的証明を添付し両者を同時に流通させ、証明に誤りのあるプログラムを悪性として実行前に検出・駆除する方式である。このように、証明を精査することにより厳密なプログラム検証を行うため、精度の高い検出・駆除が可能である.
【0005】
しかしながら、上述した証明携帯プログラム配信方式には、証明サイズが指数開数的に爆発するという問題がある。
この証明携帯プログラム配信方式の問題を解決するために、簡単な対話的通信により証明の部分的検証を繰り返す方式、すなわち、対話型証明携帯プログラム配信方式(例えば、特許文献2及び非特許文献2を参照)が提案されている。
【0006】
一方、上記タイプ2の攻撃を防ぐための要素技術としては、難読化・暗号化・多様化・電子透かしなどが既に提案されている(例えば、非特許文献3参照)。
また、すでに述べたタイプ1の攻撃に対し有望な技術である証明携帯プログラム配信方式、または対話型証明携帯プログラム配信方式は、その証明に誤りのあるプログラムの検出処理の特性上、タイプ2の攻撃の防止に対しては弱い。すなわち、悪性プログラムからホストを守るために安全性の証拠として添付する証明自体が、逆に悪意のあるホストに盗用・悪用されかねないという問題があるからである。
【0007】
一般に、安全性の証明は、プログラム本体から、必ずしも直ちに引き出せるとは限らず、プログラムの意味に開する様々な情報を含んでいる。
したがって、上記証明をそのまま流通させた場合、例えば証明を利用したリバースエンジニアリングなどを招くおそれを否定することができない。
証明携帯プログラム配信方式あるいは対話型証明携帯プログラム配信方式を拡張し、上記タイプ1の攻撃に対する優位性を保ちつつ、安全性証明の盗用及び悪用を防止する機能を追加した方式として、ゼロ知識証明携帯プログラム配信方式(例えば、非特許文献4参照)が提案されている。この非特許文献4に記載されているように、証明・検証プロトコルのゼロ知識化により、安全性証明の内容を秘匿しつつプログラムの安全性を利用者に納得させることができ、その結果、安全性証明の盗用・悪用を防ぐことが可能となる。
【特許文献1】US Patent 6,128,774
【特許文献2】特開2000−78126号公報
【非特許文献1】George C. Necula. Proof-carrying code. In Proceedings ofthe 24th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages,pp.106-119,Paris,January 1997.ACM,ACM Press.
【非特許文献2】Yasuyuki Tsukada. Interactive and probabilistic proof of mobiele code safety. Automated Software Engineering. Vol.12,No2,pp.237-257,April 2005.
【非特許文献3】門田暁人,Clark Thomborson. ソフトウェアプロテクションの技術動向(前編)−ソフトウェア単体での耐タンパー化技術−.情報処理,Vol.46,No.4,pp.431-437,2005.
【非特許文献4】塚田恭章.対話型安全証明つきプログラム配信方式における証明の秘匿とその応用.情報処理学会論文誌,Vol.46,No.1,pp.236-246,2005.
【非特許文献5】門田暁人,高田義広,鳥居宏次. ループを含むプログラムを難読化する方法の提案.電子情報学会論文誌D-I,Vol.J80-D-I,No.7,pp.644-652,1997.
【非特許文献6】一杉裕志.ソフトウェア電子すかしの挿入法、攻撃法、評価法、実装法.夏のプログラミングシンポジウム報告集, pp.57-64.情報処理学会,July 1997.
【非特許文献7】門田暁人,松本健一,飯田元,井上克朗,鳥居宏次.Javaクラスファイルに対する電子透かし法.情報処理学会論文誌, Vol.41, No.11, pp.3001-3009, 2000.
【非特許文献8】Shafi Goldwasser, Silvio Micali, and Charies Rackoff.The Knowledge Complexity of Interactive Proof Systems, SIAM J. Computing, Vol. 18, No. 1, pp. 186-208 ,1989.
【非特許文献9】Adi Shamir. IP = PSPACE, Jpurnal of ACM, Vol.39, No.4, pp. 869-877,1992.
【非特許文献10】Ronald Cramer and Ivan Damgard. Zero-knowledge proofs for finite field arithmetic or: Can zero-knowledge be for free? In Advances in Cryptology−Crypto'98,vol.1462 of lecture notes in Computer Science,pp.421-441.Springer-Verlag, Berlin,1998.
【発明の開示】
【発明が解決しようとする課題】
【0008】
しかしながら、安全性証明の盗用・悪用防止に開し、既存のゼロ知識証明携帯プログラム配信方式は、秘匿できる情報の制約により実際的な効用に限界がある。このプログラムに添付して配信される安全性証明は、実際には証明本体と、プログラム及び証明本体を正しく開連づけるのに必要な不変条件(プログラムの各ポイントで成立すべき条件式)との2種類から構成されている。
【0009】
ここで、既存のゼロ知識証明携帯プログラム配信方式が秘匿するのは証明本体に限られている。すなわち、不変条件は証明本体と異なり秘匿されないため、不変条件を利用した攻撃を防ぐことができない。
一般に不変条件はプログラムの実行時の振舞いに開する重要な情報を含み、その情報を用いた解析により、難読化(例えば、非特許文献5参照)や、透かしの挿入(例えば、非特許文献6及び7参照)などの様々な操作をプログラムに施すことができる。そこで,不変条件も証明とともに秘匿する新たな枠組みを示す必要があった。
上述した従来技術についての比較テーブルを図19に示す。
【0010】
本発明は、このような事情に鑑みてなされたもので、既存のゼロ知識証明携帯プログラム配信方式においては公開せざるを得なかった不変条件を秘匿し、不変条件と証明本体との両方を隠すことにより、不変条件と証明本体とに基づいたリバースエンジニアリングの危険性を削減し、配信プログラムの耐タンパ性を本質的に向上させる耐タンパ証明携帯プログラム配信システム及びその方法を提供することにある。
【課題を解決するための手段】
【0011】
本発明の耐タンパ証明携帯プログラム配信方法は、開発者側が作成したプログラムfを送信装置により利用者側に配信する際に、開発者側は前記プログラムfが安全に実行可能であることを利用者側に示し、利用者側は受信装置により受信した前記プログラムfを実行前に該プログラムfが安全に実行可能であることを、開発者側の送信装置と対話的に通信しながら検証する耐タンパ証明携帯プログラム配信方法であり、開発者側が作成したプログラムfが正しいことを示すために、プログラムfと、プログラムfを実行する際に、プログラム中の複数ポイントで成立すべき不変条件からなる不変条件列を生成する第1のステップと、前記不変条件列に対するダミーの不変条件を複数含む不変条件列候補集合を生成する第2のステップと、不変条件列候補集合に基づいて、プログラムfの安全性を証明する命題論理式を生成する第3のステップと、前記命題論理式を算術化する第4のステップと、開発者側と利用者側とにおいて、ゼロ知識証明プロトコルに従った対話的通信を行い、前記算術化された量化命題論理式の計算結果が真であるか偽であるかを判定し、真である場合にプログラムfを実行する第5のステップとを有することを特徴とする耐タンパ証明携帯プログラム配信方法。
【0012】
本発明の耐タンパ証明携帯プログラム配信方法は、前記第4のステップにおいて、開発者側がゼロ知識証明プロトコルにより、一方向性準同型写像を用いたコミットメント関数を用いて、前記命題論理式の部分証明を、利用者側に送信することを特徴とする。
【0013】
本発明の耐タンパ証明携帯プログラム配信システムは、開発者側が作成したプログラムfを送信装置により利用者側に配信する際に、開発者側は前記プログラムfが安全に実行可能であることを利用者側に示し、利用者側は受信装置により受信した前記プログラムfを実行前に該プログラムfが安全に実行可能であることを、開発者側の送信装置と対話的に通信しながら検証する耐タンパ証明携帯プログラム配信システムであり、開発者側が作成したプログラムfが正しいことを示すために、プログラムfと、プログラムfを実行する際に、プログラム中の複数ポイントで成立すべき不変条件からなる不変条件列を生成するプログラム・不変条件列作成部と、前記不変条件列に対するダミーの不変条件を複数含む不変条件列候補集合を生成する不変条件列候補集合作成部と、不変条件列候補集合に基づいて、プログラムfの安全性を証明する命題論理式を生成する安全性量化命題論理式生成部と、前記命題論理式を算術化する算術化部と、開発者側と利用者側とにおいて、ゼロ知識証明プロトコルに従った対話的通信を行い、前記算術化された量化命題論理式の計算結果が真であるか偽であるかを判定し、真である場合にプログラムfを実行するゼロ知識証明プロトコル部とを有することを特徴とする。
【0014】
本発明の耐タンパ証明携帯プログラム配信システムは、前ゼロ知識証明プロトコル部が、開発者側がゼロ知識証明プロトコルにより、一方向性準同型写像を用いたコミットメント関数を用いて、前記命題論理式の部分証明を利用者側に送信することを特徴とする。
【発明の効果】
【0015】
以上説明したように、本発明によれば、証明本体pの秘匿だけでなく、既存方式においては公開せざるを得なかった不変条件列をも秘匿したまま、プログラムが正しく安全に動作することの数学的証明を効率的に検証する手段を与えており、これにより、悪性プログラムの高精度な実行前の検出及び駆除の処理を実現できる。
すなわち、本発明によれば、安全性証明の内容を秘匿し証明の盗用・悪用を防ぐ効率的なプロトコルを提供しており、これにより証明情報に基づくリバースエンジニアリングの防止が実現できる。
【0016】
特に、本発明によれば、既存方式において、公開せざるを得なかった不変条件を秘匿し、不変条件及び証明本体の両方を利用者に対して隠すことにより、不変条件と証明本体とに基づくリバースエンジニアリングを防止し、配信プログラムの耐タンパ性を本質的に向上させている。
さらに、本発明によれば、不変条件と証明本体との所有者が、正規のプログラム開発者に限られるため、不変条件および証明本体の所有をプログラム著作権の保持とみなすことも可能になるという効果を併せ持つこととなる。
このように、本発明によれば、ネットワークを介したプログラム配信において、悪性プログラムによるホストヘの攻撃と、悪意のあるホストによるプログラムヘの攻撃との、双方を同時に防止することが可能なセキュリティ技術を提供することができる。
【発明を実施するための最良の形態】
【0017】
<本発明の概要>
以下に、本発明によるプログラム配信方法の概要を説明する。
従来の定式化においては、プログラムの安全性は以下の(1)式に示すように定義されていた(例えば、非特許文献2参照)。
【0018】
【数1】
【0019】
すなわち、配信するプログラムfと、以下の(2)式に示す不変条件の列(不変条件列)の組が安全性を満たしている(以下、集合Safeに含まれると表記する)とは、プログラムfのすべての実行パスpathについて、以下に示す(3)式が成立することの数学的証明pが存在することとして定義される。
【0020】
【数2】
【0021】
【数3】
【0022】
論理式である上記(3)式は、「前条件Preが成立する状況でプログラムfをそのひとつの実行パスpathに沿って実行した場合、必ず後条件Postが成立しており、しかもプログラムfの実行時には、利用者の要求する安全性が満たされる」ことを表わす論理式であり、プログラムfと不変条件列を用いて計算される。ここで、上記前条件Preは「プログラムfを実行する直前に成立すべき条件」を示し、上記後条件Postは「プログラムfの実行した直後に成立すべき条件」を示している。
なお、プログラムfの入出力仕様を規定する前条件Preおよび後条件Postも不変条件の一種であるが、本発明においては別の扱いとする。そして、上述した定義は以下に示す同値な定義式である(4)式へ容易に変形することができる。
【0023】
【数4】
【0024】
一般的に、(4)式における以下の(5)式の述語は、プログラムfと不変条件列とについての多項式時間計算述語である。このため、この上記(4)式による定義は、集合Safeが計算量クラスco-NPに属していることを表しており、より正確に言うと、co-NP完全である(例えば、非特許文献2参照)。ここで、計算量クラスco-NPは、以下に示す(6)式に等しい。上述した説明の補足として、非決定性多項式時間限定アルゴリズムで計算可能な集合のクラスをNPと言い、上記co-NP完全とは、補集合がNPに属する集合のクラスco-NPの中において、最も計算するのが難しい集合のことを指している。
【0025】
【数5】
【0026】
【数6】
【0027】
したがって、集合Safeに対するゼロ知識対話型証明プロトコル(例えば、非特許文献9,10参照)を構成することが可能となり、不変条件列をアノテーションとして持つプログラムfの安全性を、証明pそのものを提示することなく利用者に納得させることが可能となっている。例えば、以下に示すステップにより行われるゼロ知識証明携帯プログラム配信方法(例えば、非特許文献4参照)。すなわち、このゼロ知識証明携帯プログラム配信方法は、開発者側が作成したプログラムfを送信装置により利用者側に配信する際に、開発者側は前記プログラムfが安全に実行可能であることを利用者側に示し、利用者側は受信装置により受信した前記プログラムfを実行前に該プログラムfが安全に実行可能であることを、開発者側の送信装置と対話的に通信しながら検証する証明携帯プログラム配信方法である。
【0028】
そして、上記証明携帯プログラム配信方法においては、開発者側が作成したプログラムfが正しいことを示すために、プログラムfと、プログラムfを実行する直前に成立すべき条件である前条件Preと、プログラムfの実行直後に成立すべき条件である後条件Postとから検証論理式{Pre}f{Post}を検証論理式生成部により生成する第1のステップと、上記検証論理式が妥当であることを示すためにある論理体系T内で証明し、安全性証明pを、安全性証明作成部により作成する第2のステップと、開発者側が得られた安全性証明pをもとに利用者側との間でゼロ知識証明プロトコル部により対話的に通信を行い、送信したプログラムfが、Safe={f|Tにおける{Pre}f{Post}の証明pが存在する}によって定義される安全なプログラムの集合Safeに属することを利用者に確認させる第3のステップと、利用者側が、開発者側から送信されたプログラムfが前記集合Safeに属することを確認した後に該プログラムfを実行する第4のステップとにより、ゼロ知識証明の処理を行っている。
【0029】
一方、本発明は、安全なプログラムの全体Safeを、以下の定義式である(7)式に示すように一般化することを最も主要な特徴としている。
【0030】
【数7】
【0031】
不変条件列を量化子∃によって束縛することにより、集合Safeの計算量はより複雑化して、(8)式に示すクラスに属することになる。
しかしながら、依然としてゼロ知識対話型証明プロトコルを構成可能な上限クラスPSPACE(決定性多項式領域限定アルゴリズムで計算可能な集合のクラスであり、クラスNP,co-NP,あるいは(8)式のクラスよりもはるかに大きいと考えられている)に抑えられているため、集合Safeに対するゼロ知識対話型証明プロトコルが非特許文献8,9,10の方法(対話的・確率的手法に基づく効率的な証明検証技法)を応用することにより構成可能である。
【0032】
【数8】
【0033】
上述してきたように、本発明は、安全性の定式化における不変条件の扱い方に工夫を凝らすことにより、証明本体pの秘匿だけでなく、既存方式においては公開せざるを得なかった不変条件列をも秘匿したまま、プログラムfの安全性を利用者に納得させることを可能にする、新しいプログラム配信方法を実現している。
【0034】
<耐タンパ証明携帯プログラム配信システムの構成>
以下、本発明の一実施形態によるプログラム配信方法を実現する耐タンパ証明携帯プログラム配信システムを図面を参照して説明する。図1は同実施形態の構成例を示すブロック図である。
この図1の構成としては、説明のために、最も基本的な例題のひとつである、機械語プログラムのメモリ安全性・型安全性を対象としているが、プログラム言語や検証対象となる安全性は一般に多岐に渡るため、それらに応じて構成を適宜修正・拡張しても良い。
開発者(証明者)側装置10は,プログラム・不変条件列・不変条件列侯補集合作成部100,プログラム・不変条件列侯補集合送信部101,安全性量化命題論理式生成部102,算術化部103及びヒント(部分証明)作成・送信部104を有している。
【0035】
一方、利用者(検証者)側装置20は、プログラム入出力仕様作成・送信部200,プログラム・不変条件列侯補集合受信部201,安全性量化命題論理式生成部202,算術化部203,ヒント(部分証明)受信・検証部204及び乱数生成・送信部205を有している。
上述した11構成部各々のなかにおいて、プログラム入出力仕様作成・送信部200と、プログラム・不変条件列・不変条件列候補集合作成部100の2つは、他の9個の構成部がオンライン・リアルタイムで処理されるべきものであるのに対し、その前処理として実行を行う構成部である。
また、ヒント(部分証明)作成・送信部104,ヒント(部分証明)受信・検証部204及び乱数生成・送信部205各々は、ゼロ知識証明プロトコル部30に設けられている。
【0036】
この本発明におけるゼロ知識証明プロトコル部30において、ヒント(部分証明)作成・送信部104は、ヒント(部分証明)受信・検証部204との間で対話型プロトコルを実行する。このとき、ヒント(部分証明)受信・検証部204は、乱数生成・送信部205により乱数を発生させ、該乱数によりヒント(部分証明)作成・送信部104から転送されるヒント情報を指定する。そして、ヒント(部分証明)受信・検証部204は、プログラムfが安全に実行可能であることを確認した後、プログラムfを実行する。
また、本発明の最も主要な構成は、ゼロ知識証明プロトコル部30の前段における、プログラム・不変条件列・不変条件列侯補集合作成部100,プログラム・不変条件列侯補集合送信部101,安全性量化命題論理式生成部102,算術化部103,プログラム入出力仕様作成・送信部200,プログラム・不変条件列侯補集合受信部201,安全性量化命題論理式生成部202,算術化部203の各部である。
【0037】
以下に、上述した本発明の主要な構成について説明する。
プログラム入出力仕様作成・送信部200は、プログラムの利用者がプログラムの入出力仕様を規定するために作成及び入力した、プログラムを実行する直前および直後に成立すべき条件である前条件Preおよび後条件Postを開発者(証明者)側装置に対して送信する。これにより、利用者は、自身の作成した上記前条件Pre及び後条件Postを公開しておく。例えば、利用者は、自然数の列の総和を求めるプログラムを利用したい場合、「入カレジスタは自然数のリスト型を持つ」という前条件Preと、「出力レジスタは自然数の型を持つ」という後条件Postを、プログラム入出力仕様作成・送信部200により生成し、開発者(証明者)側装置10へ送信し、開発者に対して事前に公開しておく。
【0038】
さらに、プログラム入出力仕様作成・送信部200は、プログラムを実行する際に、いかなる安全性を要求するかについての、利用者が入力する条件も、開発者(証明者)側装置10に対して送信する。すなわち、利用者は、プログラムを実行する際に、いかなる安全性を要求するかについての、利用者が入力する条件も、開発者に対して事前に公開しているものとする。例えば、上記条件は、プログラム実行中に禁止されたメモリ領域へのアクセスが皆無であるという性質(メモリ安全性)に関する要求などである。
【0039】
プログラム・不変条件列・不変条件列候補集合作成部100は、開発者が作成した、利用者の規定した入出力仕様を満たす安全なプログラムfが入力されると、これらの入出力仕様や安全性を満たすことを示す際、プログラム中における適切な複数ポイントで成立すべき、(2)式による条件式(不変条件)を抽出(発見)し、この発見した不変条件の列から不変条件列を作成する。
また、プログラム・不変条件列・不変条件列候補集合作成部100は、後にこの不変条件列を秘匿したまま安全性を利用者に認識させるため、不変条件列を作成するのと同時に、ダミーの不変条件列を適宜複数個用意し、これらダミーの不変条件列を複数用いて不変条件列侯補集合を作成する。
すなわち、プログラム・不変条件列・不変条件列候補集合作成部100は、以下に示す(9)式の論理式を満たすプログラムf及び不変条件列候補集合を、論理式成立の証拠とも見なせる(2)式の不変条件列とともに作成する。
【0040】
【数9】
【0041】
プログラム・不変条件列候補集合送信部101は、プログラム実行時の振る舞いに関する重要な情報を含んだ(2)式による不変条件列を秘匿したまま、プログラムfと、作成した不変条件列候補集合とを利用者(検証者)側装置20へ送信する。
プログラム・不変条件列候補集合受信部201は、プログラム・不変条件列候補集合送信部101から、プログラムfと不変条件列候補集合とを受信する
【0042】
安全性量化命題論理式生成部102及び202と、算術化部103及び203とは、開発者側(証明者)装置10と利用者(検証者)側装置20とで同じ機能の構成を用いる。 上記安全性量化命題論理式生成部102は、プログラムfが安全であることを表す上記(9)式に示す論理式と同値な、以下の(10)式に示す量化命題論理式(量化子を用いた命題論理式)を、不変条件列候補集合に基づき生成する。
【0043】
【数10】
【0044】
ここで、上記(10)式のような量化命題論理式は、以下の理由により容易に生成可能である。すなわち、(2)式に示す不変条件列を量化子∃(特称量化子)によって束縛した場合のメモリ安全・型安全な機械語プログラムの全体(つまり、(9)式に示す論理式を満たすプログラムfの全体)は(8)式に示す計算量クラスに属する。
一方、真なる量化命題論理式の全体は、より計算量の大きいとされるPSPACE完全である。したがって、プログラムfが安全か否かといった安全性検証の問題は、量化命題論理式の真偽判定問題に還元可能であり、この還元アルゴリズムを用いることにより、上記(10)式に示す量化命題論理式は生成可能である.
【0045】
算術化部103(203)は、上記(10)式に示す量化命題論理式の算術化を行う。ここで、量化命題論理式を算術化することにより、この量化命題論理式の真偽判定を数式の値の零判定に置き換えることができる。実際に、命題変数Xを自然数変数Xに算術化し、同様に、論理結合子各々を算術化、すなわち論理結合子∨を「+」に、論理結合子∧を×に、論理結合子¬Xを1−Xに、算術化し、また、量化子∃を和Σに、そして量化子∀(全称量化子)を積Πに変換することで算術化は完了する。これにより、上記(10)式による量化命題論理式が真であることは、以下の(11)式の計算結果が零でないことと同値となる。
【0046】
【数11】
【0047】
ゼロ知識証明プロトコル部30において、ヒント(部分証明)作成・送信部104,ヒント(部分証明)受信・検証部204,乱数生成・送信部205各々が、すでに述べたように開発者及び利用者間における対話的通信を行い、上記(11)式が零とならないことを利用して、利用者に対してプログラムfの安全性を納得させる。
一方、利用者もゼロ知識証明プロトコル部30において、開発者と対話的通信を行い,上記(11)式が確かに零でないこと、すなわち受信したプログラムfが安全であることを確認した後に、このプログラムfに対して処理を実行させる。
【0048】
上記(8)式により示される計算クラスにおける計算量は決して小さくはないが、ゼロ知識証明プロトコル部30は、非特許文献8及び9の対話型証明プロトコルの理論を応用することにより、確率的ではあるが極めて高い精度により、効率的に(11)式が零でないことを証明・検証することができる。
また、プログラムの耐タンパ性は、(2)式による不変条件列を検出(発見)・作成する多項式時間アルゴリズムが存在しないこととして、数学的に表現される。
すなわち、安全なプログラムfの全体が(8)式により示される計算クラスにおいて完全であることが示されれば、以下の(12)式が成り立たない限り、上記多項式時間アルゴリズムは存在しない。
【0049】
【数12】
【0050】
<利用者側における前条件及び後条件の作成>
次に、機械語プログラムのメモリ安全性及び型安全性を例にとり、本発明の実施方法について説明する。ここでは、Alphaアセンブリ言語で記述された機械語プログラム(プログラムf)を、利用者(検証者)側装置20(Standard ML言語の型つき中間言語コンパイラ実行時システム)が受信し、この機械語プログラムをメモリ安全及び型安全に実行する一連の流れ(非特許文献1,2,4で展開されている)を用い、耐タンパ証明携帯プログラム配信システムの動作例を説明する。はじめに、利用者がプログラム入出力仕様作成・送信部200にて行う、前条件Pre,後条件Postの作成と、開発者側に対する公開について説明する。
【0051】
まず、安全性要求,前条件Pre及び後条件Postについて、以下に簡単に説明する。利用者(検証者)側装置20は、代表的な関数型言語であるStandard ML言語の型つき中間言語コンパイラ実行時システムを搭載している(例えば、アプリケーションプログラムがインストールされている)と仮定する。この利用者(検証者)側装置20は、中間言語コンパイラ実行時システムにおいて、Alphaアセンブリ言語で記述された機械語プログラムを、開発者側(証明者)装置10から受信し、メモリ安全かつ型安全に実行しようとしていると仮定する.
この利用者(検証者)側装置20は、その安全性要求やプログラムの前条件Pre及び後条件Postといった仕様を、型(例えば、データの種類または内容:整数型,実数型,文字型、アドレス型など)の概念を用いて規定する。例えば、式eが型τを持つことをe:τと記述し、本実施形態において利用される式と型とは以下に示す(13)式のように定義される。
【0052】
【数13】
【0053】
上記(13)式において、nは32ビットで表わされる自然数であり、各r1はAlphaレジスタ,sel(e)はメモリ番地eの内容を指している。ここで、型intの値は32ビットで表される自然数である。型τ1*τ2の値は、型τ1と型τ2の値が格納された隣接するメモリ番地へのポインタである。また、型τ1+τ2の値は隣接するメモリ番地へのポインタであり、最初の番地にはタグ(0または1)が格納されており、ダグが「0」ならば型τ1の値が、一方、ダグが「1」ならば型τ2の値が続きの番地に格納される。さらに、型addrの値は、安全に読み出し可能なメモリ番地を表わしている。
なお、加法および減法は厳密には232を法とするものであるが、説明を簡単とするため、ここでは法演算を省略して記述する。
【0054】
そして、利用者は上述した型の概念を用い、利用者(検証者)側装置20において、安全性要求を事前に規定する。本実施形態における安全性要求は、図2に示す公理からなる一階述語論理体系Tとして規定する。
また、利用者は、すでに述べたように、プログラムが実行される直前および直後に成立すべき条件を、それぞれ前条件Preと後条件Postとして規定し、事前に開発者側に対して公関しておかなければならない。
本実施形態における前条件Preおよび後条件Postは、上述した型を用いて、図3に示すように規定されているとする。
【0055】
<機械語プログラムの作成>
本実施形態におけるプログラム・不変条件列・不変条件列候補集合作成部100にて、開発者に作成されるプログラムの例として、Alphaアセンブリ言語で記述された簡単なプログラム(プログラムf)を図4に示す。このプログラムは、コンピュータのレジスタr1, r2,r3の値に応じて分岐した後、単純なループに入る処理を示している。
ここで、上記プログラムは、図3に示す前条件Preおよび後条件Postを入出力仕様として満たし、メモリ安全かつ型安全に実行されることを意図して作成されたものである。これらの前条件Preおよび後条件Postは、例えば補助的な命令であるINV命令(Invariant:不変条件)を用い、図4に示すプログラム中に表明されている。なお、不変条件列もINV命令を用いて表記(表明)されるが、この表記については後に詳述する。
ここで、実は、図4のプログラム例において、プログラムがメモリ安全かつ型安全であることと、以下に示す(14)式に定義する量化命題論理式が偽であることが同値となるように作成されている。
【0056】
【数14】
【0057】
そして、プログラム・不変条件列・不変条件列候補集合作成部100は、命題変数Xiの真偽を、番地4(ri) (ダグが格納された番地0(ri)の続きの番地)が型intであるか、あるいは型intの組へのポインタであるかということにエンコードする。
さらに、プログラム・不変条件列・不変条件列候補集合作成部100は、レジスタr(3+i)に、上記番地に記憶された内容を読み込むことにより、真偽を、r(3+i):intあるいはsel(r3+i):intの成立へと変換する。
【0058】
<不変条件およびプログラム安全性>
すでに述べたように、プログラムf(機械語プログラム)が安全なプログラムの全体Safeに属すると言うことは、(9)式に示す論理式が成立することであると定義された。ここで、各pathによってインデックス付けされた部分式である(3)式の全体を特に検証論理式と呼ぶこととする。この検証論理式は、プログラム・不変条件列・不変条件列候補集合作成部100内部に設けられたFloyd流の検証論理式生成器によって、プログラムf,前条件Pre,後条件Post及び不変条件列から自動的に生成される。
【0059】
上記検証論理式生成器における検証論理式の生成の規約を図5に示し、この図の規約を用いて図4のプログラムに対する検証論理式が実際に生成されていく様子を図6及び図7に示す。
この検証論理式の生成において、必須の情報として不変条件列がある。図4のプログラム中の前方へのジャンプ命令の行き先が必ずINV命令であるとの規約を置くことにより、検証論理式生成器は1パスで容易に検証論理式を生成することができる。
本実施形態における図4のプログラムにおいても、10行目のラベルLcが貼られた(マーキングされた)ポイントで常に成立すべき不変条件Iを明らかにしておく必要がある。本実施形態における不変条件Iを図8に示す。
図8に示す不変条件Iを用いることにより、最終的に得られる検証論理式は、図9に示すように、VC0⇒VC1を表す9個の論理式と、VC10⇒VC11を表わす2個の論理式をあわせた計11個の論理式となる。ここで、「⇒」は「含意」を示す論理結合子であり、「P⇒Q」が「PならばQ」となる。
【0060】
上述した図9に示す各検証論理式は、その妥当性の証拠を得るため、一階述語論理体系Tにおいて証明される。そして、検証論理式が全て証明された場合、すなわち、各pathについて(3)式が一階述語論理体系T内で証明された場合、Standard ML言語の型つき中間言語コンパイラ実行時システムにおいて、前条件Preが成立する状況においてプログラムfを実行し、計算が終了すると必ず後条件Postが成立し、しかもプログラムfの実行中に用いられる全ての値に対して適切な型がつくため、このプログラムfの実行時のメモリアクセスが安全であることが保証される。
【0061】
例えば、図4のプログラム例も、検証論理式が全て証明可能であり、メモリ安全かつ型安全であることが保証される。
また、図9の検証論理式が示唆するように、プログラム中に条件分岐命令がn回続いた場合、このnの指数オーダの実行パスが存在することになる。ここで、個々の検証論理式の証明は、短く多項式時間で検証することが可能であるが、全ての検証論理式を証明するとなると証明は指数オーダのサイズとなる。
実際、図4のプログラムの安全性、すなわち検証論理式の証明可能性は、VC0⇒VC1に対応する部分が上記(14)式が偽であることと同値である。
また、VC10⇒VC11に対応する部分が以下に示す(15)式が真であることと同値である。
【0062】
【数15】
【0063】
(15)式が真であることは容易に確認できるが、(14)式が偽であることの証明は本質的に難しい。
【0064】
<不変条件の秘匿>
開発者(証明者)側装置10において発見・計算された(2)式の不変条件列をそのまま利用者(検証者)側装置20に送信することにより、プログラムfの安全性を開発者及び利用者の双方において、安全性量化命題論理式生成部102(及び202)により容易に定義することができる。
しかしながら、本発明の技術思想においては、不変条件列に基づくリバースエンジニアリングを防止し、配信するプログラムの耐タンパ性を高めることを目的としているため、悪意を持っている可能性もある利用者に上記不変条件列を明示的に送信することは避ける必要がある。
【0065】
そこで、開発者(証明者)側装置10は、本来の(2)式に示す不変条件列にダミーの条件を適宜加えた不変条件列候補集合を、利用者(検証者)側装置20に送信する。この不変条件列候補集合が十分大きい場合、利用者(検証者)側装置20が、その不変条件列候補集合中から正解の不変条件を選択することが困難となる。
図4に示す本実施形態のプログラム例におけるダミーの不変条件を、図10に示す不変条件I*とする。すなわち、不変条件候補集合を{I,I*}とする。ただし、ダミーであるためには、不変条件にはなり得ないこと、例えば以下の(16)式に示す論理式を満たすことが望ましい。本実施形態におけるダミーの不変条件I*はこれを満たしている。
【0066】
【数16】
【0067】
また、不変条件Iに基づくリバースエンジニアリングを防止するためには、不変条件列候補集合は大きいほど都合がよい。
しかしながら、一般にプログラム中の各ポイントにおいて追加されるダミーの不変条件は、1つでよい。すなわち、本実施形態においては、プログラム中に不変条件が表明されるポイントは1つであるが、一般にk個の不変条件Iが表明されている場合、不変条件列候補集合のサイズは組合せにより2kとなるからである。
ダミーの不変条件I*を用いたときの検証論理式の証明可能性は、VC0⇒VC1に対応する部分が以下に示す(17)式が偽であることと同値である。
【0068】
【数17】
【0069】
また、VC10⇒VC11に対応する部分が以下に示す(18)式が真であることと同値である。
【0070】
【数18】
【0071】
そして、プログラム・不変条件列候補集合送信部101は、機械語プログラム,不変条件列及び不変条件列候補集合を、安全性量化命題論理式生成部102に出力するとともに、プログラムf及び不変条件列候補集合を、プログラム・不変条件候補集合受信部201に対して送信する。
【0072】
<安全性の量化命題論理式への翻訳>
上述したように、不変条件候補集合が{I,I*}である場合、安全性量化命題論理式生成部102(及び202)は、プログラムfが安全であることを表す(9)式に示される論理式を、以下に示す(19)式の構成に変換する(書き換える)。本実施形態においては、この書き換えにより、安全性を(8)式の計算クラスから、(12)式に示すco-NPに還元している。
【0073】
【数19】
【0074】
そして、(19)式の論理式は、以下に示す(20)式が真であること、すなわち、以下に示す(21)式が偽であることと同値となる。
【0075】
【数20】
【0076】
【数21】
【0077】
<量化命題論理式の算術化>
次に、算術化部103(及び203)は、上記(21)式の算術化を行うことにより、量化命題論理式の真偽判定を数式の値の零判定に置き換える。
実際の処理としては、命題変数Xを自然数変数Xに、∨を+に、∧を×に、¬Xを1−Xに、そして量化子∃を和Σに変換することにより算術化は完了する。ここで、本実施形態における(21)式に示す量化命題論理式が偽であることは、以下の(22)式の計算値が零であることと同値である。
【0078】
【数22】
【0079】
<安全性のゼロ知識証明>
次に、ゼロ知識証明プロトコル部30における、上記(22)式が零であることを証明するゼロ知識証明プロトコルの実行例を、図11,12,13,14,15,16,17及び図18を用いて説明する。
開発者(証明者)側装置10と利用者(検証者)側装置20とにおける開発者及び利用者の対話処理は実質的に6ラウンドからなっている。ここで、各ラウンドがひとつのΣ記号に対応している。
【0080】
上記各ラウンド毎に、ひとつの数式が提示され,利用者はその値の正当性を開発者との対話を通じて検証することになる。なお、実際のプロトコルにおいては、セキュリティパラメータ(本実施形態では一例として数式の長さ)lに対応して決定される長さΟ(l)の適当な素数qを法とした計算が行われるが、ここでは省略する。
開発者(証明者)側装置10におけるヒント(部分証明)作成・送信部104は、各ラウンドで提示された数式からΣ記号をひとつ除去し、それを展開して得られた1変数多項式の係数をヒント情報として、利用者(検証者)側装置20のヒント(部分証明)受信・検証部204へ送信する。例えば、ヒント(部分証明)作成・送信部104は、図11の第1ラウンドの「情報1」を、ヒント(部分証明)受信・検証部204へ送信する。
【0081】
次に、利用者側のヒント(部分証明)受信・検証部204は、各ラウンドごとに自動的に決まる検証タスクを実行する。例えば、ヒント(部分証明)受信・検証部204は、ヒント(部分証明)作成・送信部104から「情報1」を受信することにより、「タスク1」による検証処理を実行する。
具体的な例として、ヒント(部分証明)受信・検証部204は、受け取った多項式の0と1とにおけるそれぞれの値の和を計算し、それの計算結果が期待される値と等しいか否かの検証を行う。
そして、ヒント(部分証明)受信・検証部204は、この検証をパスすると(計算結果が期待される値と等しいことを検出すると)、ヒント情報の妥当性を検証する新しい、すなわち次のラウンド(例えば、第1ラウンドの次は第2ラウンド)に移行する。
【0082】
次に、Σ記号のひとつ少ない新しい数式が提示され、開発者(証明者)側装置10によるヒントの送付と、利用者(検証者)側装置20による多項式の0と1とにおけるそれぞれの値の和を計算し、計算結果の値の検証が繰り返される。このゼロ知識証明プロトコルのプロセスは、Σ記号を含まない数式の自明な検証に帰着されるまで繰り返される。
ここで、不正な開発者が妥当でないヒントを送付した場合、この攻撃に対処するため、ヒント(部分証明)受信・検証部204は、開発者が各ラウンドにてΣ記号の一つ少ない数式を提示する際に、変数に代入する定数を、乱数生成・送信部205により生成させ、ヒント(部分証明)作成・送信部104へ送信する。
【0083】
ただし、開発者(証明者)側装置10がヒントとして、多項式の係数そのものを送付してしまうと、不変条件と証明本体とに開する情報が利用者に対して漏れてしまう。
そこで、開発者(証明者)側装置10は、1変数多項式の係数そのものではなく、係数のコミットメントを送付することにより、プロトコルをゼロ知識化する。
すなわち、本実施形態においては、プログラム安全性の証明・検証プロトコルをゼロ知識化する際に、一方向性準同型写像を用いたコミットメント(秘密証拠供託)関数を用いる。
情報の内容自体を秘密に保ったまま、内容の事後変更を不可能とする十分な証拠を予め相手に渡しておくために、コミットメント(秘密証拠供託)関数commitを本プロトコルにおいて利用する。セキュリティパラメータlと長さO(l)の素数qに対し、証明者は秘密にしたい情報a∈ {0,1,…,q−1}と乱数r∈{0,1}lをもとに証拠commit(a、 r)∈{0,1}lを計算して、利用者(検証者)側装置20へ送信する(コミットメント・フェーズ)。
【0084】
そして、証明者によるaとrの開示を受けた検証者は、これらの情報に基づき先の証拠が確かにcommit(a、r)であることを計算し、情報aが事後変更されていないことを確認する(開示フェーズ)。
このような秘密証拠供託の実現は、関数commitに課せられた次の3つの性質により保証される。
「秘匿性」:commit (a,r)の値から秘密情報aに間する知識を得ることは計算論的に困難である性質、すなわち、異なるふたつの秘密情報に対するコミットメントの確率分布は多項式時間識別不可能である性質である。
「束縛性」:commit(a、r)の値から秘密情報aが一意に決まる性質である。すなわち、秘密情報aに対する証拠commit(a、r)を受信した後に、a及びrの開示を受け、先に受信した証拠が計算値commit(a、r)に一致するか否かをもって、秘密がaであったことを検証する場合、秘密情報の事後変更は不可能である性質である。
「準同型性」:与えられたふたつのコミットメントA =commit(a、r)およびB =commit(b、r)から、commit(a+b mod q,t)およびcommit(a−b mod q,u)が多項式時間で計算可能である。各コミットメントは乗法群の要素であるため、これらをそれぞれABおよびAB−1と記す。この性質から直ちに、コミットメントA=commit(a、r)が与えられれば、任意の定数cに対して、commit(ca mod q,s)が多項式時間計算可能となる。これをACと記す。
【0085】
図18においては、簡単のため適当なrに対するcommit(a,r)をC(a)と略記していいる。これにあわせ、コミットメント間の等号C=C’を、CとC’があるaに対し集合{commit(a,r)|r}の要素であることと定義する。C(a)は同値関係=による各同値類{commit(a,r)|r}の代表元とみなせる。
上述した3つの性質(秘匿性、束縛性、準同型性)をもつコミットメント関数を実際に構成することができる(例えば、非特許文献10参照)。そして、そのコミットメント関数を用いることにより、利用者(検証者)側装置20において、利用者は係数のコミットメントのみから、係数自体を知ることなく、目的とする式のコミットメントを計算することが可能となる。
【0086】
なお、図1における各部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより開発者(検証者)側装置10及び利用者(検証者)側装置20における各処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境(あるいは表示環境)を備えたWWWシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。
【0087】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
【図面の簡単な説明】
【0088】
【図1】本発明の一実施形態による耐タンパ証明携帯プログラム配信システムの構成例を示すブロック図である。
【図2】一階述語論理体系Tの内容を示す図である。
【図3】規定された前条件Preおよび後条件Postを示す図である。
【図4】検証対象となるプログラムの一例を示す図である。
【図5】検証論理式生成器における検証論理式の生成の規約を示す図である。
【図6】図5に示した検証論理式生成器の規約を用いて図4に示したプログラムに対する検証論理式が生成される様子を示す説明図。
【図7】図5に示した検証論理式生成器の規約を用いて図4に示したプログラムに対する検証論理式が生成される様子を示す説明図。
【図8】本実施形態における不変条件Iを示す図である。
【図9】不変条件Iを用いることにより、最終的に得られる検証論理式を示す図である。
【図10】図4に示すプログラムに対するダミーの不変条件I*を示す図である。
【図11】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図12】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図13】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図14】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図15】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図16】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図17】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図18】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図19】従来技術と本発明との特性を比較したテーブルを示す図である。
【符号の説明】
【0089】
10…開発者(証明者)側装置
20…利用者(検証者)側装置
100…プログラム・不変条件列・不変条件列候補集合作成部
200…プログラム入出力仕様作成・送信部
101…プログラム・不変条件列・不変条件列候補集合送信部
201…プログラム・不変条件列・不変条件列候補集合受信部
102,202…安全性量化命題論理式生成部
103,203…算術化部
104…ヒント(部分証明)作成・送信部
204…ヒント(部分証明)受信・検証部
205…乱数生成・送信部
【技術分野】
【0001】
本発明は、ネットワークを介したプログラム配信において悪性プログラムによるホストヘの攻撃と、悪意のあるホストによるプログラムヘの攻撃との、双方を同時に防ぐセキュリティ技術としての耐タンパ証明携帯プログラム配信システム及びその方法に関する。
【背景技術】
【0002】
今日、プログラム化された高機能コンテンツがWWWブラウザや携帯端末に日常的にダウンロードされ実行されている。
また、パケットやノードなどのネットワーク構成要素をプログラマブルとすることで拡張性や耐故障性を増したアクティブネットワークの研究も進んでいる。
プログラムが流通する時代を迎え、悪性プログラムから計算機を守る新しい技術への需要が高まってきている。
【0003】
ここで、上述したようなネットワークを介したプログラム配信においては、タイプの異なる次の2種類の攻撃を考慮する必要がある。
・タイプ1悪性プログラム
ウィルス・バッファ溢れのバグを悪用するプログラムなどによるホストコンピュータヘの攻撃。
・タイプ2悪意のあるホストコンピュータによるプログラムヘの攻撃
配布されたプログラムの解析・改ざん・リバースエンジニアリングなど。
【0004】
上述したタイプ1の攻撃を防ぐための技術としては、プログラムに開発者の電子署名を付与し検証する方式,パタンマッチによるウィルス検知・駆除方式,仮想機械のバイトコード検証方式などが既に実用化されている。しかしながら、これらの方式はいずれも悪性プログラムの検出精度に限界があることが知られている。
この問題を解決する次世代技術として、証明携帯プログラム配信方式(Proof-Carrying Code)(例えば、特許文献1及び非特許文献1を参照)が提案されている。この証明携帯プログラム配信方式は、プログラム本体にそれが正しく安全に動作すること(例えば、与えられた入力条件のもとでプログラムを実行した場合、結果が出力条件を満たし、実行時には禁止されたメモリ領域へのアクセスがまったくないこと)の詳細な数学的証明を添付し両者を同時に流通させ、証明に誤りのあるプログラムを悪性として実行前に検出・駆除する方式である。このように、証明を精査することにより厳密なプログラム検証を行うため、精度の高い検出・駆除が可能である.
【0005】
しかしながら、上述した証明携帯プログラム配信方式には、証明サイズが指数開数的に爆発するという問題がある。
この証明携帯プログラム配信方式の問題を解決するために、簡単な対話的通信により証明の部分的検証を繰り返す方式、すなわち、対話型証明携帯プログラム配信方式(例えば、特許文献2及び非特許文献2を参照)が提案されている。
【0006】
一方、上記タイプ2の攻撃を防ぐための要素技術としては、難読化・暗号化・多様化・電子透かしなどが既に提案されている(例えば、非特許文献3参照)。
また、すでに述べたタイプ1の攻撃に対し有望な技術である証明携帯プログラム配信方式、または対話型証明携帯プログラム配信方式は、その証明に誤りのあるプログラムの検出処理の特性上、タイプ2の攻撃の防止に対しては弱い。すなわち、悪性プログラムからホストを守るために安全性の証拠として添付する証明自体が、逆に悪意のあるホストに盗用・悪用されかねないという問題があるからである。
【0007】
一般に、安全性の証明は、プログラム本体から、必ずしも直ちに引き出せるとは限らず、プログラムの意味に開する様々な情報を含んでいる。
したがって、上記証明をそのまま流通させた場合、例えば証明を利用したリバースエンジニアリングなどを招くおそれを否定することができない。
証明携帯プログラム配信方式あるいは対話型証明携帯プログラム配信方式を拡張し、上記タイプ1の攻撃に対する優位性を保ちつつ、安全性証明の盗用及び悪用を防止する機能を追加した方式として、ゼロ知識証明携帯プログラム配信方式(例えば、非特許文献4参照)が提案されている。この非特許文献4に記載されているように、証明・検証プロトコルのゼロ知識化により、安全性証明の内容を秘匿しつつプログラムの安全性を利用者に納得させることができ、その結果、安全性証明の盗用・悪用を防ぐことが可能となる。
【特許文献1】US Patent 6,128,774
【特許文献2】特開2000−78126号公報
【非特許文献1】George C. Necula. Proof-carrying code. In Proceedings ofthe 24th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages,pp.106-119,Paris,January 1997.ACM,ACM Press.
【非特許文献2】Yasuyuki Tsukada. Interactive and probabilistic proof of mobiele code safety. Automated Software Engineering. Vol.12,No2,pp.237-257,April 2005.
【非特許文献3】門田暁人,Clark Thomborson. ソフトウェアプロテクションの技術動向(前編)−ソフトウェア単体での耐タンパー化技術−.情報処理,Vol.46,No.4,pp.431-437,2005.
【非特許文献4】塚田恭章.対話型安全証明つきプログラム配信方式における証明の秘匿とその応用.情報処理学会論文誌,Vol.46,No.1,pp.236-246,2005.
【非特許文献5】門田暁人,高田義広,鳥居宏次. ループを含むプログラムを難読化する方法の提案.電子情報学会論文誌D-I,Vol.J80-D-I,No.7,pp.644-652,1997.
【非特許文献6】一杉裕志.ソフトウェア電子すかしの挿入法、攻撃法、評価法、実装法.夏のプログラミングシンポジウム報告集, pp.57-64.情報処理学会,July 1997.
【非特許文献7】門田暁人,松本健一,飯田元,井上克朗,鳥居宏次.Javaクラスファイルに対する電子透かし法.情報処理学会論文誌, Vol.41, No.11, pp.3001-3009, 2000.
【非特許文献8】Shafi Goldwasser, Silvio Micali, and Charies Rackoff.The Knowledge Complexity of Interactive Proof Systems, SIAM J. Computing, Vol. 18, No. 1, pp. 186-208 ,1989.
【非特許文献9】Adi Shamir. IP = PSPACE, Jpurnal of ACM, Vol.39, No.4, pp. 869-877,1992.
【非特許文献10】Ronald Cramer and Ivan Damgard. Zero-knowledge proofs for finite field arithmetic or: Can zero-knowledge be for free? In Advances in Cryptology−Crypto'98,vol.1462 of lecture notes in Computer Science,pp.421-441.Springer-Verlag, Berlin,1998.
【発明の開示】
【発明が解決しようとする課題】
【0008】
しかしながら、安全性証明の盗用・悪用防止に開し、既存のゼロ知識証明携帯プログラム配信方式は、秘匿できる情報の制約により実際的な効用に限界がある。このプログラムに添付して配信される安全性証明は、実際には証明本体と、プログラム及び証明本体を正しく開連づけるのに必要な不変条件(プログラムの各ポイントで成立すべき条件式)との2種類から構成されている。
【0009】
ここで、既存のゼロ知識証明携帯プログラム配信方式が秘匿するのは証明本体に限られている。すなわち、不変条件は証明本体と異なり秘匿されないため、不変条件を利用した攻撃を防ぐことができない。
一般に不変条件はプログラムの実行時の振舞いに開する重要な情報を含み、その情報を用いた解析により、難読化(例えば、非特許文献5参照)や、透かしの挿入(例えば、非特許文献6及び7参照)などの様々な操作をプログラムに施すことができる。そこで,不変条件も証明とともに秘匿する新たな枠組みを示す必要があった。
上述した従来技術についての比較テーブルを図19に示す。
【0010】
本発明は、このような事情に鑑みてなされたもので、既存のゼロ知識証明携帯プログラム配信方式においては公開せざるを得なかった不変条件を秘匿し、不変条件と証明本体との両方を隠すことにより、不変条件と証明本体とに基づいたリバースエンジニアリングの危険性を削減し、配信プログラムの耐タンパ性を本質的に向上させる耐タンパ証明携帯プログラム配信システム及びその方法を提供することにある。
【課題を解決するための手段】
【0011】
本発明の耐タンパ証明携帯プログラム配信方法は、開発者側が作成したプログラムfを送信装置により利用者側に配信する際に、開発者側は前記プログラムfが安全に実行可能であることを利用者側に示し、利用者側は受信装置により受信した前記プログラムfを実行前に該プログラムfが安全に実行可能であることを、開発者側の送信装置と対話的に通信しながら検証する耐タンパ証明携帯プログラム配信方法であり、開発者側が作成したプログラムfが正しいことを示すために、プログラムfと、プログラムfを実行する際に、プログラム中の複数ポイントで成立すべき不変条件からなる不変条件列を生成する第1のステップと、前記不変条件列に対するダミーの不変条件を複数含む不変条件列候補集合を生成する第2のステップと、不変条件列候補集合に基づいて、プログラムfの安全性を証明する命題論理式を生成する第3のステップと、前記命題論理式を算術化する第4のステップと、開発者側と利用者側とにおいて、ゼロ知識証明プロトコルに従った対話的通信を行い、前記算術化された量化命題論理式の計算結果が真であるか偽であるかを判定し、真である場合にプログラムfを実行する第5のステップとを有することを特徴とする耐タンパ証明携帯プログラム配信方法。
【0012】
本発明の耐タンパ証明携帯プログラム配信方法は、前記第4のステップにおいて、開発者側がゼロ知識証明プロトコルにより、一方向性準同型写像を用いたコミットメント関数を用いて、前記命題論理式の部分証明を、利用者側に送信することを特徴とする。
【0013】
本発明の耐タンパ証明携帯プログラム配信システムは、開発者側が作成したプログラムfを送信装置により利用者側に配信する際に、開発者側は前記プログラムfが安全に実行可能であることを利用者側に示し、利用者側は受信装置により受信した前記プログラムfを実行前に該プログラムfが安全に実行可能であることを、開発者側の送信装置と対話的に通信しながら検証する耐タンパ証明携帯プログラム配信システムであり、開発者側が作成したプログラムfが正しいことを示すために、プログラムfと、プログラムfを実行する際に、プログラム中の複数ポイントで成立すべき不変条件からなる不変条件列を生成するプログラム・不変条件列作成部と、前記不変条件列に対するダミーの不変条件を複数含む不変条件列候補集合を生成する不変条件列候補集合作成部と、不変条件列候補集合に基づいて、プログラムfの安全性を証明する命題論理式を生成する安全性量化命題論理式生成部と、前記命題論理式を算術化する算術化部と、開発者側と利用者側とにおいて、ゼロ知識証明プロトコルに従った対話的通信を行い、前記算術化された量化命題論理式の計算結果が真であるか偽であるかを判定し、真である場合にプログラムfを実行するゼロ知識証明プロトコル部とを有することを特徴とする。
【0014】
本発明の耐タンパ証明携帯プログラム配信システムは、前ゼロ知識証明プロトコル部が、開発者側がゼロ知識証明プロトコルにより、一方向性準同型写像を用いたコミットメント関数を用いて、前記命題論理式の部分証明を利用者側に送信することを特徴とする。
【発明の効果】
【0015】
以上説明したように、本発明によれば、証明本体pの秘匿だけでなく、既存方式においては公開せざるを得なかった不変条件列をも秘匿したまま、プログラムが正しく安全に動作することの数学的証明を効率的に検証する手段を与えており、これにより、悪性プログラムの高精度な実行前の検出及び駆除の処理を実現できる。
すなわち、本発明によれば、安全性証明の内容を秘匿し証明の盗用・悪用を防ぐ効率的なプロトコルを提供しており、これにより証明情報に基づくリバースエンジニアリングの防止が実現できる。
【0016】
特に、本発明によれば、既存方式において、公開せざるを得なかった不変条件を秘匿し、不変条件及び証明本体の両方を利用者に対して隠すことにより、不変条件と証明本体とに基づくリバースエンジニアリングを防止し、配信プログラムの耐タンパ性を本質的に向上させている。
さらに、本発明によれば、不変条件と証明本体との所有者が、正規のプログラム開発者に限られるため、不変条件および証明本体の所有をプログラム著作権の保持とみなすことも可能になるという効果を併せ持つこととなる。
このように、本発明によれば、ネットワークを介したプログラム配信において、悪性プログラムによるホストヘの攻撃と、悪意のあるホストによるプログラムヘの攻撃との、双方を同時に防止することが可能なセキュリティ技術を提供することができる。
【発明を実施するための最良の形態】
【0017】
<本発明の概要>
以下に、本発明によるプログラム配信方法の概要を説明する。
従来の定式化においては、プログラムの安全性は以下の(1)式に示すように定義されていた(例えば、非特許文献2参照)。
【0018】
【数1】
【0019】
すなわち、配信するプログラムfと、以下の(2)式に示す不変条件の列(不変条件列)の組が安全性を満たしている(以下、集合Safeに含まれると表記する)とは、プログラムfのすべての実行パスpathについて、以下に示す(3)式が成立することの数学的証明pが存在することとして定義される。
【0020】
【数2】
【0021】
【数3】
【0022】
論理式である上記(3)式は、「前条件Preが成立する状況でプログラムfをそのひとつの実行パスpathに沿って実行した場合、必ず後条件Postが成立しており、しかもプログラムfの実行時には、利用者の要求する安全性が満たされる」ことを表わす論理式であり、プログラムfと不変条件列を用いて計算される。ここで、上記前条件Preは「プログラムfを実行する直前に成立すべき条件」を示し、上記後条件Postは「プログラムfの実行した直後に成立すべき条件」を示している。
なお、プログラムfの入出力仕様を規定する前条件Preおよび後条件Postも不変条件の一種であるが、本発明においては別の扱いとする。そして、上述した定義は以下に示す同値な定義式である(4)式へ容易に変形することができる。
【0023】
【数4】
【0024】
一般的に、(4)式における以下の(5)式の述語は、プログラムfと不変条件列とについての多項式時間計算述語である。このため、この上記(4)式による定義は、集合Safeが計算量クラスco-NPに属していることを表しており、より正確に言うと、co-NP完全である(例えば、非特許文献2参照)。ここで、計算量クラスco-NPは、以下に示す(6)式に等しい。上述した説明の補足として、非決定性多項式時間限定アルゴリズムで計算可能な集合のクラスをNPと言い、上記co-NP完全とは、補集合がNPに属する集合のクラスco-NPの中において、最も計算するのが難しい集合のことを指している。
【0025】
【数5】
【0026】
【数6】
【0027】
したがって、集合Safeに対するゼロ知識対話型証明プロトコル(例えば、非特許文献9,10参照)を構成することが可能となり、不変条件列をアノテーションとして持つプログラムfの安全性を、証明pそのものを提示することなく利用者に納得させることが可能となっている。例えば、以下に示すステップにより行われるゼロ知識証明携帯プログラム配信方法(例えば、非特許文献4参照)。すなわち、このゼロ知識証明携帯プログラム配信方法は、開発者側が作成したプログラムfを送信装置により利用者側に配信する際に、開発者側は前記プログラムfが安全に実行可能であることを利用者側に示し、利用者側は受信装置により受信した前記プログラムfを実行前に該プログラムfが安全に実行可能であることを、開発者側の送信装置と対話的に通信しながら検証する証明携帯プログラム配信方法である。
【0028】
そして、上記証明携帯プログラム配信方法においては、開発者側が作成したプログラムfが正しいことを示すために、プログラムfと、プログラムfを実行する直前に成立すべき条件である前条件Preと、プログラムfの実行直後に成立すべき条件である後条件Postとから検証論理式{Pre}f{Post}を検証論理式生成部により生成する第1のステップと、上記検証論理式が妥当であることを示すためにある論理体系T内で証明し、安全性証明pを、安全性証明作成部により作成する第2のステップと、開発者側が得られた安全性証明pをもとに利用者側との間でゼロ知識証明プロトコル部により対話的に通信を行い、送信したプログラムfが、Safe={f|Tにおける{Pre}f{Post}の証明pが存在する}によって定義される安全なプログラムの集合Safeに属することを利用者に確認させる第3のステップと、利用者側が、開発者側から送信されたプログラムfが前記集合Safeに属することを確認した後に該プログラムfを実行する第4のステップとにより、ゼロ知識証明の処理を行っている。
【0029】
一方、本発明は、安全なプログラムの全体Safeを、以下の定義式である(7)式に示すように一般化することを最も主要な特徴としている。
【0030】
【数7】
【0031】
不変条件列を量化子∃によって束縛することにより、集合Safeの計算量はより複雑化して、(8)式に示すクラスに属することになる。
しかしながら、依然としてゼロ知識対話型証明プロトコルを構成可能な上限クラスPSPACE(決定性多項式領域限定アルゴリズムで計算可能な集合のクラスであり、クラスNP,co-NP,あるいは(8)式のクラスよりもはるかに大きいと考えられている)に抑えられているため、集合Safeに対するゼロ知識対話型証明プロトコルが非特許文献8,9,10の方法(対話的・確率的手法に基づく効率的な証明検証技法)を応用することにより構成可能である。
【0032】
【数8】
【0033】
上述してきたように、本発明は、安全性の定式化における不変条件の扱い方に工夫を凝らすことにより、証明本体pの秘匿だけでなく、既存方式においては公開せざるを得なかった不変条件列をも秘匿したまま、プログラムfの安全性を利用者に納得させることを可能にする、新しいプログラム配信方法を実現している。
【0034】
<耐タンパ証明携帯プログラム配信システムの構成>
以下、本発明の一実施形態によるプログラム配信方法を実現する耐タンパ証明携帯プログラム配信システムを図面を参照して説明する。図1は同実施形態の構成例を示すブロック図である。
この図1の構成としては、説明のために、最も基本的な例題のひとつである、機械語プログラムのメモリ安全性・型安全性を対象としているが、プログラム言語や検証対象となる安全性は一般に多岐に渡るため、それらに応じて構成を適宜修正・拡張しても良い。
開発者(証明者)側装置10は,プログラム・不変条件列・不変条件列侯補集合作成部100,プログラム・不変条件列侯補集合送信部101,安全性量化命題論理式生成部102,算術化部103及びヒント(部分証明)作成・送信部104を有している。
【0035】
一方、利用者(検証者)側装置20は、プログラム入出力仕様作成・送信部200,プログラム・不変条件列侯補集合受信部201,安全性量化命題論理式生成部202,算術化部203,ヒント(部分証明)受信・検証部204及び乱数生成・送信部205を有している。
上述した11構成部各々のなかにおいて、プログラム入出力仕様作成・送信部200と、プログラム・不変条件列・不変条件列候補集合作成部100の2つは、他の9個の構成部がオンライン・リアルタイムで処理されるべきものであるのに対し、その前処理として実行を行う構成部である。
また、ヒント(部分証明)作成・送信部104,ヒント(部分証明)受信・検証部204及び乱数生成・送信部205各々は、ゼロ知識証明プロトコル部30に設けられている。
【0036】
この本発明におけるゼロ知識証明プロトコル部30において、ヒント(部分証明)作成・送信部104は、ヒント(部分証明)受信・検証部204との間で対話型プロトコルを実行する。このとき、ヒント(部分証明)受信・検証部204は、乱数生成・送信部205により乱数を発生させ、該乱数によりヒント(部分証明)作成・送信部104から転送されるヒント情報を指定する。そして、ヒント(部分証明)受信・検証部204は、プログラムfが安全に実行可能であることを確認した後、プログラムfを実行する。
また、本発明の最も主要な構成は、ゼロ知識証明プロトコル部30の前段における、プログラム・不変条件列・不変条件列侯補集合作成部100,プログラム・不変条件列侯補集合送信部101,安全性量化命題論理式生成部102,算術化部103,プログラム入出力仕様作成・送信部200,プログラム・不変条件列侯補集合受信部201,安全性量化命題論理式生成部202,算術化部203の各部である。
【0037】
以下に、上述した本発明の主要な構成について説明する。
プログラム入出力仕様作成・送信部200は、プログラムの利用者がプログラムの入出力仕様を規定するために作成及び入力した、プログラムを実行する直前および直後に成立すべき条件である前条件Preおよび後条件Postを開発者(証明者)側装置に対して送信する。これにより、利用者は、自身の作成した上記前条件Pre及び後条件Postを公開しておく。例えば、利用者は、自然数の列の総和を求めるプログラムを利用したい場合、「入カレジスタは自然数のリスト型を持つ」という前条件Preと、「出力レジスタは自然数の型を持つ」という後条件Postを、プログラム入出力仕様作成・送信部200により生成し、開発者(証明者)側装置10へ送信し、開発者に対して事前に公開しておく。
【0038】
さらに、プログラム入出力仕様作成・送信部200は、プログラムを実行する際に、いかなる安全性を要求するかについての、利用者が入力する条件も、開発者(証明者)側装置10に対して送信する。すなわち、利用者は、プログラムを実行する際に、いかなる安全性を要求するかについての、利用者が入力する条件も、開発者に対して事前に公開しているものとする。例えば、上記条件は、プログラム実行中に禁止されたメモリ領域へのアクセスが皆無であるという性質(メモリ安全性)に関する要求などである。
【0039】
プログラム・不変条件列・不変条件列候補集合作成部100は、開発者が作成した、利用者の規定した入出力仕様を満たす安全なプログラムfが入力されると、これらの入出力仕様や安全性を満たすことを示す際、プログラム中における適切な複数ポイントで成立すべき、(2)式による条件式(不変条件)を抽出(発見)し、この発見した不変条件の列から不変条件列を作成する。
また、プログラム・不変条件列・不変条件列候補集合作成部100は、後にこの不変条件列を秘匿したまま安全性を利用者に認識させるため、不変条件列を作成するのと同時に、ダミーの不変条件列を適宜複数個用意し、これらダミーの不変条件列を複数用いて不変条件列侯補集合を作成する。
すなわち、プログラム・不変条件列・不変条件列候補集合作成部100は、以下に示す(9)式の論理式を満たすプログラムf及び不変条件列候補集合を、論理式成立の証拠とも見なせる(2)式の不変条件列とともに作成する。
【0040】
【数9】
【0041】
プログラム・不変条件列候補集合送信部101は、プログラム実行時の振る舞いに関する重要な情報を含んだ(2)式による不変条件列を秘匿したまま、プログラムfと、作成した不変条件列候補集合とを利用者(検証者)側装置20へ送信する。
プログラム・不変条件列候補集合受信部201は、プログラム・不変条件列候補集合送信部101から、プログラムfと不変条件列候補集合とを受信する
【0042】
安全性量化命題論理式生成部102及び202と、算術化部103及び203とは、開発者側(証明者)装置10と利用者(検証者)側装置20とで同じ機能の構成を用いる。 上記安全性量化命題論理式生成部102は、プログラムfが安全であることを表す上記(9)式に示す論理式と同値な、以下の(10)式に示す量化命題論理式(量化子を用いた命題論理式)を、不変条件列候補集合に基づき生成する。
【0043】
【数10】
【0044】
ここで、上記(10)式のような量化命題論理式は、以下の理由により容易に生成可能である。すなわち、(2)式に示す不変条件列を量化子∃(特称量化子)によって束縛した場合のメモリ安全・型安全な機械語プログラムの全体(つまり、(9)式に示す論理式を満たすプログラムfの全体)は(8)式に示す計算量クラスに属する。
一方、真なる量化命題論理式の全体は、より計算量の大きいとされるPSPACE完全である。したがって、プログラムfが安全か否かといった安全性検証の問題は、量化命題論理式の真偽判定問題に還元可能であり、この還元アルゴリズムを用いることにより、上記(10)式に示す量化命題論理式は生成可能である.
【0045】
算術化部103(203)は、上記(10)式に示す量化命題論理式の算術化を行う。ここで、量化命題論理式を算術化することにより、この量化命題論理式の真偽判定を数式の値の零判定に置き換えることができる。実際に、命題変数Xを自然数変数Xに算術化し、同様に、論理結合子各々を算術化、すなわち論理結合子∨を「+」に、論理結合子∧を×に、論理結合子¬Xを1−Xに、算術化し、また、量化子∃を和Σに、そして量化子∀(全称量化子)を積Πに変換することで算術化は完了する。これにより、上記(10)式による量化命題論理式が真であることは、以下の(11)式の計算結果が零でないことと同値となる。
【0046】
【数11】
【0047】
ゼロ知識証明プロトコル部30において、ヒント(部分証明)作成・送信部104,ヒント(部分証明)受信・検証部204,乱数生成・送信部205各々が、すでに述べたように開発者及び利用者間における対話的通信を行い、上記(11)式が零とならないことを利用して、利用者に対してプログラムfの安全性を納得させる。
一方、利用者もゼロ知識証明プロトコル部30において、開発者と対話的通信を行い,上記(11)式が確かに零でないこと、すなわち受信したプログラムfが安全であることを確認した後に、このプログラムfに対して処理を実行させる。
【0048】
上記(8)式により示される計算クラスにおける計算量は決して小さくはないが、ゼロ知識証明プロトコル部30は、非特許文献8及び9の対話型証明プロトコルの理論を応用することにより、確率的ではあるが極めて高い精度により、効率的に(11)式が零でないことを証明・検証することができる。
また、プログラムの耐タンパ性は、(2)式による不変条件列を検出(発見)・作成する多項式時間アルゴリズムが存在しないこととして、数学的に表現される。
すなわち、安全なプログラムfの全体が(8)式により示される計算クラスにおいて完全であることが示されれば、以下の(12)式が成り立たない限り、上記多項式時間アルゴリズムは存在しない。
【0049】
【数12】
【0050】
<利用者側における前条件及び後条件の作成>
次に、機械語プログラムのメモリ安全性及び型安全性を例にとり、本発明の実施方法について説明する。ここでは、Alphaアセンブリ言語で記述された機械語プログラム(プログラムf)を、利用者(検証者)側装置20(Standard ML言語の型つき中間言語コンパイラ実行時システム)が受信し、この機械語プログラムをメモリ安全及び型安全に実行する一連の流れ(非特許文献1,2,4で展開されている)を用い、耐タンパ証明携帯プログラム配信システムの動作例を説明する。はじめに、利用者がプログラム入出力仕様作成・送信部200にて行う、前条件Pre,後条件Postの作成と、開発者側に対する公開について説明する。
【0051】
まず、安全性要求,前条件Pre及び後条件Postについて、以下に簡単に説明する。利用者(検証者)側装置20は、代表的な関数型言語であるStandard ML言語の型つき中間言語コンパイラ実行時システムを搭載している(例えば、アプリケーションプログラムがインストールされている)と仮定する。この利用者(検証者)側装置20は、中間言語コンパイラ実行時システムにおいて、Alphaアセンブリ言語で記述された機械語プログラムを、開発者側(証明者)装置10から受信し、メモリ安全かつ型安全に実行しようとしていると仮定する.
この利用者(検証者)側装置20は、その安全性要求やプログラムの前条件Pre及び後条件Postといった仕様を、型(例えば、データの種類または内容:整数型,実数型,文字型、アドレス型など)の概念を用いて規定する。例えば、式eが型τを持つことをe:τと記述し、本実施形態において利用される式と型とは以下に示す(13)式のように定義される。
【0052】
【数13】
【0053】
上記(13)式において、nは32ビットで表わされる自然数であり、各r1はAlphaレジスタ,sel(e)はメモリ番地eの内容を指している。ここで、型intの値は32ビットで表される自然数である。型τ1*τ2の値は、型τ1と型τ2の値が格納された隣接するメモリ番地へのポインタである。また、型τ1+τ2の値は隣接するメモリ番地へのポインタであり、最初の番地にはタグ(0または1)が格納されており、ダグが「0」ならば型τ1の値が、一方、ダグが「1」ならば型τ2の値が続きの番地に格納される。さらに、型addrの値は、安全に読み出し可能なメモリ番地を表わしている。
なお、加法および減法は厳密には232を法とするものであるが、説明を簡単とするため、ここでは法演算を省略して記述する。
【0054】
そして、利用者は上述した型の概念を用い、利用者(検証者)側装置20において、安全性要求を事前に規定する。本実施形態における安全性要求は、図2に示す公理からなる一階述語論理体系Tとして規定する。
また、利用者は、すでに述べたように、プログラムが実行される直前および直後に成立すべき条件を、それぞれ前条件Preと後条件Postとして規定し、事前に開発者側に対して公関しておかなければならない。
本実施形態における前条件Preおよび後条件Postは、上述した型を用いて、図3に示すように規定されているとする。
【0055】
<機械語プログラムの作成>
本実施形態におけるプログラム・不変条件列・不変条件列候補集合作成部100にて、開発者に作成されるプログラムの例として、Alphaアセンブリ言語で記述された簡単なプログラム(プログラムf)を図4に示す。このプログラムは、コンピュータのレジスタr1, r2,r3の値に応じて分岐した後、単純なループに入る処理を示している。
ここで、上記プログラムは、図3に示す前条件Preおよび後条件Postを入出力仕様として満たし、メモリ安全かつ型安全に実行されることを意図して作成されたものである。これらの前条件Preおよび後条件Postは、例えば補助的な命令であるINV命令(Invariant:不変条件)を用い、図4に示すプログラム中に表明されている。なお、不変条件列もINV命令を用いて表記(表明)されるが、この表記については後に詳述する。
ここで、実は、図4のプログラム例において、プログラムがメモリ安全かつ型安全であることと、以下に示す(14)式に定義する量化命題論理式が偽であることが同値となるように作成されている。
【0056】
【数14】
【0057】
そして、プログラム・不変条件列・不変条件列候補集合作成部100は、命題変数Xiの真偽を、番地4(ri) (ダグが格納された番地0(ri)の続きの番地)が型intであるか、あるいは型intの組へのポインタであるかということにエンコードする。
さらに、プログラム・不変条件列・不変条件列候補集合作成部100は、レジスタr(3+i)に、上記番地に記憶された内容を読み込むことにより、真偽を、r(3+i):intあるいはsel(r3+i):intの成立へと変換する。
【0058】
<不変条件およびプログラム安全性>
すでに述べたように、プログラムf(機械語プログラム)が安全なプログラムの全体Safeに属すると言うことは、(9)式に示す論理式が成立することであると定義された。ここで、各pathによってインデックス付けされた部分式である(3)式の全体を特に検証論理式と呼ぶこととする。この検証論理式は、プログラム・不変条件列・不変条件列候補集合作成部100内部に設けられたFloyd流の検証論理式生成器によって、プログラムf,前条件Pre,後条件Post及び不変条件列から自動的に生成される。
【0059】
上記検証論理式生成器における検証論理式の生成の規約を図5に示し、この図の規約を用いて図4のプログラムに対する検証論理式が実際に生成されていく様子を図6及び図7に示す。
この検証論理式の生成において、必須の情報として不変条件列がある。図4のプログラム中の前方へのジャンプ命令の行き先が必ずINV命令であるとの規約を置くことにより、検証論理式生成器は1パスで容易に検証論理式を生成することができる。
本実施形態における図4のプログラムにおいても、10行目のラベルLcが貼られた(マーキングされた)ポイントで常に成立すべき不変条件Iを明らかにしておく必要がある。本実施形態における不変条件Iを図8に示す。
図8に示す不変条件Iを用いることにより、最終的に得られる検証論理式は、図9に示すように、VC0⇒VC1を表す9個の論理式と、VC10⇒VC11を表わす2個の論理式をあわせた計11個の論理式となる。ここで、「⇒」は「含意」を示す論理結合子であり、「P⇒Q」が「PならばQ」となる。
【0060】
上述した図9に示す各検証論理式は、その妥当性の証拠を得るため、一階述語論理体系Tにおいて証明される。そして、検証論理式が全て証明された場合、すなわち、各pathについて(3)式が一階述語論理体系T内で証明された場合、Standard ML言語の型つき中間言語コンパイラ実行時システムにおいて、前条件Preが成立する状況においてプログラムfを実行し、計算が終了すると必ず後条件Postが成立し、しかもプログラムfの実行中に用いられる全ての値に対して適切な型がつくため、このプログラムfの実行時のメモリアクセスが安全であることが保証される。
【0061】
例えば、図4のプログラム例も、検証論理式が全て証明可能であり、メモリ安全かつ型安全であることが保証される。
また、図9の検証論理式が示唆するように、プログラム中に条件分岐命令がn回続いた場合、このnの指数オーダの実行パスが存在することになる。ここで、個々の検証論理式の証明は、短く多項式時間で検証することが可能であるが、全ての検証論理式を証明するとなると証明は指数オーダのサイズとなる。
実際、図4のプログラムの安全性、すなわち検証論理式の証明可能性は、VC0⇒VC1に対応する部分が上記(14)式が偽であることと同値である。
また、VC10⇒VC11に対応する部分が以下に示す(15)式が真であることと同値である。
【0062】
【数15】
【0063】
(15)式が真であることは容易に確認できるが、(14)式が偽であることの証明は本質的に難しい。
【0064】
<不変条件の秘匿>
開発者(証明者)側装置10において発見・計算された(2)式の不変条件列をそのまま利用者(検証者)側装置20に送信することにより、プログラムfの安全性を開発者及び利用者の双方において、安全性量化命題論理式生成部102(及び202)により容易に定義することができる。
しかしながら、本発明の技術思想においては、不変条件列に基づくリバースエンジニアリングを防止し、配信するプログラムの耐タンパ性を高めることを目的としているため、悪意を持っている可能性もある利用者に上記不変条件列を明示的に送信することは避ける必要がある。
【0065】
そこで、開発者(証明者)側装置10は、本来の(2)式に示す不変条件列にダミーの条件を適宜加えた不変条件列候補集合を、利用者(検証者)側装置20に送信する。この不変条件列候補集合が十分大きい場合、利用者(検証者)側装置20が、その不変条件列候補集合中から正解の不変条件を選択することが困難となる。
図4に示す本実施形態のプログラム例におけるダミーの不変条件を、図10に示す不変条件I*とする。すなわち、不変条件候補集合を{I,I*}とする。ただし、ダミーであるためには、不変条件にはなり得ないこと、例えば以下の(16)式に示す論理式を満たすことが望ましい。本実施形態におけるダミーの不変条件I*はこれを満たしている。
【0066】
【数16】
【0067】
また、不変条件Iに基づくリバースエンジニアリングを防止するためには、不変条件列候補集合は大きいほど都合がよい。
しかしながら、一般にプログラム中の各ポイントにおいて追加されるダミーの不変条件は、1つでよい。すなわち、本実施形態においては、プログラム中に不変条件が表明されるポイントは1つであるが、一般にk個の不変条件Iが表明されている場合、不変条件列候補集合のサイズは組合せにより2kとなるからである。
ダミーの不変条件I*を用いたときの検証論理式の証明可能性は、VC0⇒VC1に対応する部分が以下に示す(17)式が偽であることと同値である。
【0068】
【数17】
【0069】
また、VC10⇒VC11に対応する部分が以下に示す(18)式が真であることと同値である。
【0070】
【数18】
【0071】
そして、プログラム・不変条件列候補集合送信部101は、機械語プログラム,不変条件列及び不変条件列候補集合を、安全性量化命題論理式生成部102に出力するとともに、プログラムf及び不変条件列候補集合を、プログラム・不変条件候補集合受信部201に対して送信する。
【0072】
<安全性の量化命題論理式への翻訳>
上述したように、不変条件候補集合が{I,I*}である場合、安全性量化命題論理式生成部102(及び202)は、プログラムfが安全であることを表す(9)式に示される論理式を、以下に示す(19)式の構成に変換する(書き換える)。本実施形態においては、この書き換えにより、安全性を(8)式の計算クラスから、(12)式に示すco-NPに還元している。
【0073】
【数19】
【0074】
そして、(19)式の論理式は、以下に示す(20)式が真であること、すなわち、以下に示す(21)式が偽であることと同値となる。
【0075】
【数20】
【0076】
【数21】
【0077】
<量化命題論理式の算術化>
次に、算術化部103(及び203)は、上記(21)式の算術化を行うことにより、量化命題論理式の真偽判定を数式の値の零判定に置き換える。
実際の処理としては、命題変数Xを自然数変数Xに、∨を+に、∧を×に、¬Xを1−Xに、そして量化子∃を和Σに変換することにより算術化は完了する。ここで、本実施形態における(21)式に示す量化命題論理式が偽であることは、以下の(22)式の計算値が零であることと同値である。
【0078】
【数22】
【0079】
<安全性のゼロ知識証明>
次に、ゼロ知識証明プロトコル部30における、上記(22)式が零であることを証明するゼロ知識証明プロトコルの実行例を、図11,12,13,14,15,16,17及び図18を用いて説明する。
開発者(証明者)側装置10と利用者(検証者)側装置20とにおける開発者及び利用者の対話処理は実質的に6ラウンドからなっている。ここで、各ラウンドがひとつのΣ記号に対応している。
【0080】
上記各ラウンド毎に、ひとつの数式が提示され,利用者はその値の正当性を開発者との対話を通じて検証することになる。なお、実際のプロトコルにおいては、セキュリティパラメータ(本実施形態では一例として数式の長さ)lに対応して決定される長さΟ(l)の適当な素数qを法とした計算が行われるが、ここでは省略する。
開発者(証明者)側装置10におけるヒント(部分証明)作成・送信部104は、各ラウンドで提示された数式からΣ記号をひとつ除去し、それを展開して得られた1変数多項式の係数をヒント情報として、利用者(検証者)側装置20のヒント(部分証明)受信・検証部204へ送信する。例えば、ヒント(部分証明)作成・送信部104は、図11の第1ラウンドの「情報1」を、ヒント(部分証明)受信・検証部204へ送信する。
【0081】
次に、利用者側のヒント(部分証明)受信・検証部204は、各ラウンドごとに自動的に決まる検証タスクを実行する。例えば、ヒント(部分証明)受信・検証部204は、ヒント(部分証明)作成・送信部104から「情報1」を受信することにより、「タスク1」による検証処理を実行する。
具体的な例として、ヒント(部分証明)受信・検証部204は、受け取った多項式の0と1とにおけるそれぞれの値の和を計算し、それの計算結果が期待される値と等しいか否かの検証を行う。
そして、ヒント(部分証明)受信・検証部204は、この検証をパスすると(計算結果が期待される値と等しいことを検出すると)、ヒント情報の妥当性を検証する新しい、すなわち次のラウンド(例えば、第1ラウンドの次は第2ラウンド)に移行する。
【0082】
次に、Σ記号のひとつ少ない新しい数式が提示され、開発者(証明者)側装置10によるヒントの送付と、利用者(検証者)側装置20による多項式の0と1とにおけるそれぞれの値の和を計算し、計算結果の値の検証が繰り返される。このゼロ知識証明プロトコルのプロセスは、Σ記号を含まない数式の自明な検証に帰着されるまで繰り返される。
ここで、不正な開発者が妥当でないヒントを送付した場合、この攻撃に対処するため、ヒント(部分証明)受信・検証部204は、開発者が各ラウンドにてΣ記号の一つ少ない数式を提示する際に、変数に代入する定数を、乱数生成・送信部205により生成させ、ヒント(部分証明)作成・送信部104へ送信する。
【0083】
ただし、開発者(証明者)側装置10がヒントとして、多項式の係数そのものを送付してしまうと、不変条件と証明本体とに開する情報が利用者に対して漏れてしまう。
そこで、開発者(証明者)側装置10は、1変数多項式の係数そのものではなく、係数のコミットメントを送付することにより、プロトコルをゼロ知識化する。
すなわち、本実施形態においては、プログラム安全性の証明・検証プロトコルをゼロ知識化する際に、一方向性準同型写像を用いたコミットメント(秘密証拠供託)関数を用いる。
情報の内容自体を秘密に保ったまま、内容の事後変更を不可能とする十分な証拠を予め相手に渡しておくために、コミットメント(秘密証拠供託)関数commitを本プロトコルにおいて利用する。セキュリティパラメータlと長さO(l)の素数qに対し、証明者は秘密にしたい情報a∈ {0,1,…,q−1}と乱数r∈{0,1}lをもとに証拠commit(a、 r)∈{0,1}lを計算して、利用者(検証者)側装置20へ送信する(コミットメント・フェーズ)。
【0084】
そして、証明者によるaとrの開示を受けた検証者は、これらの情報に基づき先の証拠が確かにcommit(a、r)であることを計算し、情報aが事後変更されていないことを確認する(開示フェーズ)。
このような秘密証拠供託の実現は、関数commitに課せられた次の3つの性質により保証される。
「秘匿性」:commit (a,r)の値から秘密情報aに間する知識を得ることは計算論的に困難である性質、すなわち、異なるふたつの秘密情報に対するコミットメントの確率分布は多項式時間識別不可能である性質である。
「束縛性」:commit(a、r)の値から秘密情報aが一意に決まる性質である。すなわち、秘密情報aに対する証拠commit(a、r)を受信した後に、a及びrの開示を受け、先に受信した証拠が計算値commit(a、r)に一致するか否かをもって、秘密がaであったことを検証する場合、秘密情報の事後変更は不可能である性質である。
「準同型性」:与えられたふたつのコミットメントA =commit(a、r)およびB =commit(b、r)から、commit(a+b mod q,t)およびcommit(a−b mod q,u)が多項式時間で計算可能である。各コミットメントは乗法群の要素であるため、これらをそれぞれABおよびAB−1と記す。この性質から直ちに、コミットメントA=commit(a、r)が与えられれば、任意の定数cに対して、commit(ca mod q,s)が多項式時間計算可能となる。これをACと記す。
【0085】
図18においては、簡単のため適当なrに対するcommit(a,r)をC(a)と略記していいる。これにあわせ、コミットメント間の等号C=C’を、CとC’があるaに対し集合{commit(a,r)|r}の要素であることと定義する。C(a)は同値関係=による各同値類{commit(a,r)|r}の代表元とみなせる。
上述した3つの性質(秘匿性、束縛性、準同型性)をもつコミットメント関数を実際に構成することができる(例えば、非特許文献10参照)。そして、そのコミットメント関数を用いることにより、利用者(検証者)側装置20において、利用者は係数のコミットメントのみから、係数自体を知ることなく、目的とする式のコミットメントを計算することが可能となる。
【0086】
なお、図1における各部の機能を実現するためのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータシステムに読み込ませ、実行することにより開発者(検証者)側装置10及び利用者(検証者)側装置20における各処理を行ってもよい。なお、ここでいう「コンピュータシステム」とは、OSや周辺機器等のハードウェアを含むものとする。また、「コンピュータシステム」は、ホームページ提供環境(あるいは表示環境)を備えたWWWシステムも含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ(RAM)のように、一定時間プログラムを保持しているものも含むものとする。
【0087】
また、上記プログラムは、このプログラムを記憶装置等に格納したコンピュータシステムから、伝送媒体を介して、あるいは、伝送媒体中の伝送波により他のコンピュータシステムに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク(通信網)や電話回線等の通信回線(通信線)のように情報を伝送する機能を有する媒体のことをいう。また、上記プログラムは、前述した機能の一部を実現するためのものであっても良い。さらに、前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるもの、いわゆる差分ファイル(差分プログラム)であっても良い。
【図面の簡単な説明】
【0088】
【図1】本発明の一実施形態による耐タンパ証明携帯プログラム配信システムの構成例を示すブロック図である。
【図2】一階述語論理体系Tの内容を示す図である。
【図3】規定された前条件Preおよび後条件Postを示す図である。
【図4】検証対象となるプログラムの一例を示す図である。
【図5】検証論理式生成器における検証論理式の生成の規約を示す図である。
【図6】図5に示した検証論理式生成器の規約を用いて図4に示したプログラムに対する検証論理式が生成される様子を示す説明図。
【図7】図5に示した検証論理式生成器の規約を用いて図4に示したプログラムに対する検証論理式が生成される様子を示す説明図。
【図8】本実施形態における不変条件Iを示す図である。
【図9】不変条件Iを用いることにより、最終的に得られる検証論理式を示す図である。
【図10】図4に示すプログラムに対するダミーの不変条件I*を示す図である。
【図11】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図12】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図13】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図14】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図15】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図16】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図17】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図18】ゼロ知識証明プロトコル部30におけるゼロ知識証明プロトコルの実行例を示す図である。
【図19】従来技術と本発明との特性を比較したテーブルを示す図である。
【符号の説明】
【0089】
10…開発者(証明者)側装置
20…利用者(検証者)側装置
100…プログラム・不変条件列・不変条件列候補集合作成部
200…プログラム入出力仕様作成・送信部
101…プログラム・不変条件列・不変条件列候補集合送信部
201…プログラム・不変条件列・不変条件列候補集合受信部
102,202…安全性量化命題論理式生成部
103,203…算術化部
104…ヒント(部分証明)作成・送信部
204…ヒント(部分証明)受信・検証部
205…乱数生成・送信部
【特許請求の範囲】
【請求項1】
開発者側が作成したプログラムfを送信装置により利用者側に配信する際に、開発者側は前記プログラムfが安全に実行可能であることを利用者側に示し、利用者側は受信装置により受信した前記プログラムfを実行前に該プログラムfが安全に実行可能であることを、開発者側の送信装置と対話的に通信しながら検証する耐タンパ証明携帯プログラム配信方法であって、
開発者側が作成したプログラムfが正しいことを示すために、プログラムfと、プログラムfを実行する際に、プログラム中の複数ポイントで成立すべき不変条件からなる不変条件列を生成する第1のステップと、
前記不変条件列に対するダミーの不変条件を複数含む不変条件列候補集合を生成する第2のステップと、
不変条件列候補集合に基づいて、プログラムfの安全性を証明する命題論理式を生成する第3のステップと、
前記命題論理式を算術化する第4のステップと、
開発者側と利用者側とにおいて、ゼロ知識証明プロトコルに従った対話的通信を行い、前記算術化された量化命題論理式の計算結果が真であるか偽であるかを判定し、真である場合にプログラムfを実行する第5のステップと
を有することを特徴とする耐タンパ証明携帯プログラム配信方法。
【請求項2】
前記第4のステップにおいて、開発者側がゼロ知識証明プロトコルにより、一方向性準同型写像を用いたコミットメント関数を用いて、前記命題論理式の部分証明を、利用者側に送信することを特徴とする請求項1に記載の耐タンパ証明携帯プログラム配信方法。
【請求項3】
開発者側が作成したプログラムfを送信装置により利用者側に配信する際に、開発者側は前記プログラムfが安全に実行可能であることを利用者側に示し、利用者側は受信装置により受信した前記プログラムfを実行前に該プログラムfが安全に実行可能であることを、開発者側の送信装置と対話的に通信しながら検証する耐タンパ証明携帯プログラム配信システムであって、
開発者側が作成したプログラムfが正しいことを示すために、プログラムfと、プログラムfを実行する際に、プログラム中の複数ポイントで成立すべき不変条件からなる不変条件列を生成するプログラム・不変条件列作成部と、
前記不変条件列に対するダミーの不変条件を複数含む不変条件列候補集合を生成する不変条件列候補集合作成部と、
不変条件列候補集合に基づいて、プログラムfの安全性を証明する命題論理式を生成する安全性量化命題論理式生成部と、
前記命題論理式を算術化する算術化部と、
開発者側と利用者側とにおいて、ゼロ知識証明プロトコルに従った対話的通信を行い、前記算術化された量化命題論理式の計算結果が真であるか偽であるかを判定し、真である場合にプログラムfを実行するゼロ知識証明プロトコル部と
を有することを特徴とする耐タンパ証明携帯プログラム配信システム。
【請求項4】
前ゼロ知識証明プロトコル部が、開発者側がゼロ知識証明プロトコルにより、一方向性準同型写像を用いたコミットメント関数を用いて、前記命題論理式の部分証明を利用者側に送信することを特徴とする請求項3に記載の耐タンパ証明携帯プログラム配信システム。
【請求項1】
開発者側が作成したプログラムfを送信装置により利用者側に配信する際に、開発者側は前記プログラムfが安全に実行可能であることを利用者側に示し、利用者側は受信装置により受信した前記プログラムfを実行前に該プログラムfが安全に実行可能であることを、開発者側の送信装置と対話的に通信しながら検証する耐タンパ証明携帯プログラム配信方法であって、
開発者側が作成したプログラムfが正しいことを示すために、プログラムfと、プログラムfを実行する際に、プログラム中の複数ポイントで成立すべき不変条件からなる不変条件列を生成する第1のステップと、
前記不変条件列に対するダミーの不変条件を複数含む不変条件列候補集合を生成する第2のステップと、
不変条件列候補集合に基づいて、プログラムfの安全性を証明する命題論理式を生成する第3のステップと、
前記命題論理式を算術化する第4のステップと、
開発者側と利用者側とにおいて、ゼロ知識証明プロトコルに従った対話的通信を行い、前記算術化された量化命題論理式の計算結果が真であるか偽であるかを判定し、真である場合にプログラムfを実行する第5のステップと
を有することを特徴とする耐タンパ証明携帯プログラム配信方法。
【請求項2】
前記第4のステップにおいて、開発者側がゼロ知識証明プロトコルにより、一方向性準同型写像を用いたコミットメント関数を用いて、前記命題論理式の部分証明を、利用者側に送信することを特徴とする請求項1に記載の耐タンパ証明携帯プログラム配信方法。
【請求項3】
開発者側が作成したプログラムfを送信装置により利用者側に配信する際に、開発者側は前記プログラムfが安全に実行可能であることを利用者側に示し、利用者側は受信装置により受信した前記プログラムfを実行前に該プログラムfが安全に実行可能であることを、開発者側の送信装置と対話的に通信しながら検証する耐タンパ証明携帯プログラム配信システムであって、
開発者側が作成したプログラムfが正しいことを示すために、プログラムfと、プログラムfを実行する際に、プログラム中の複数ポイントで成立すべき不変条件からなる不変条件列を生成するプログラム・不変条件列作成部と、
前記不変条件列に対するダミーの不変条件を複数含む不変条件列候補集合を生成する不変条件列候補集合作成部と、
不変条件列候補集合に基づいて、プログラムfの安全性を証明する命題論理式を生成する安全性量化命題論理式生成部と、
前記命題論理式を算術化する算術化部と、
開発者側と利用者側とにおいて、ゼロ知識証明プロトコルに従った対話的通信を行い、前記算術化された量化命題論理式の計算結果が真であるか偽であるかを判定し、真である場合にプログラムfを実行するゼロ知識証明プロトコル部と
を有することを特徴とする耐タンパ証明携帯プログラム配信システム。
【請求項4】
前ゼロ知識証明プロトコル部が、開発者側がゼロ知識証明プロトコルにより、一方向性準同型写像を用いたコミットメント関数を用いて、前記命題論理式の部分証明を利用者側に送信することを特徴とする請求項3に記載の耐タンパ証明携帯プログラム配信システム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【公開番号】特開2007−157021(P2007−157021A)
【公開日】平成19年6月21日(2007.6.21)
【国際特許分類】
【出願番号】特願2005−354437(P2005−354437)
【出願日】平成17年12月8日(2005.12.8)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】
【公開日】平成19年6月21日(2007.6.21)
【国際特許分類】
【出願日】平成17年12月8日(2005.12.8)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】
[ Back to top ]