(57)【要約】【課題】  実施可能な通信複雑度を持つ、効率的な証明携帯プログラム配信方法および証明携帯プログラム配信システムを提供する。【解決手段】  証明携帯プログラム配信方法であって、開発者側が作成したプログラムｆが正しいことを示すために、検証論理式｛Pre｝ｆ｛Post｝を検証論理式生成部により生成する第１のステップと、前記検証論理式が妥当であることを示すためにある論理体系Ｔ内で証明し、安全性証明ｐを、安全証明作成部により作成する第２のステップと、開発者側が得られた安全性証明ｐをもとに利用者側との間でゼロ知識証明プロトコル部により対話的に通信を行い、安全なプログラムの集合Safeに属することを利用者に確認させる第３のステップと、利用者側は、開発者側から送信されたプログラムｆが前記集合Safeに属することを確認した後に該プログラムｆを実行する第４のステップとを有する。【選択図】    図１
2006197323.tif 000002
【特許請求の範囲】
【請求項１】
開発者側が作成したプログラムｆを送信装置により利用者側に配信する際に、開発者側は前記プログラムｆが安全に実行可能であることを利用者側に示し、利用者側は受信装置により受信した前記プログラムｆを実行前に該プログラムｆが安全に実行可能であることを、開発者側の送信装置と対話的に通信しながら検証する証明携帯プログラム配信方法であって、
開発者側が作成したプログラムｆが正しいことを示すために、プログラムｆと、プログラムｆを実行する直前に成立すべき条件である前条件Preと、プログラムｆの実行直後に成立すべき条件である後条件Postとから検証論理式｛Pre｝ｆ｛Post｝を検証論理式生成部により生成する第１のステップと、
前記検証論理式が妥当であることを示すためにある論理体系Ｔ内で証明し、安全性証明ｐを、安全性証明作成部により作成する第２のステップと、
開発者側が得られた安全性証明ｐをもとに利用者側との間でゼロ知識証明プロトコル部により対話的に通信を行い、送信したプログラムｆが、
Safe＝｛ｆ｜Ｔにおける｛Pre｝ｆ｛Post｝の証明ｐが存在する｝
によって定義される安全なプログラムの集合Safeに属することを利用者に確認させる第３のステップと、
利用者側は、開発者側から送信されたプログラムｆが前記集合Safeに属することを確認した後に該プログラムｆを実行する第４のステップとを
有することを特徴とする証明携帯プログラム配信方法。
【請求項２】
前記第３のステップにおいて、開発者側は、一方向性準同型写像を用いたコミットメント関数に基づくゼロ知識証明プロトコルを用いて｛Pre｝ｆ｛Post｝の証明ｐが存在するか確認させることを特徴とする請求項１に記載の証明携帯プログラム配信方法。
【請求項３】
開発者側が作成したプログラムｆを送信する送信装置と、該送信装置から転送されたプログラムを受信する利用者側が使用する受信装置とを有し、受信装置にプログラムを配信する際に、送信装置と受信装置間で対話的に通信して前記プログラムｆが安全に実行可能であることを検証する証明携帯プログラム配信システムであって、
開発者側が作成したプログラムｆが正しいことを示すために、プログラムｆと、プログラムｆを実行する直前に成立すべき条件である前条件Preと、プログラムｆの実行直後に成立すべき条件である後条件Postとから検証論理式｛Pre｝ｆ｛Post｝を生成する検証論理式生成部と、
検証論理式｛Pre｝ｆ｛Post｝が妥当であることを示すためにある論理体系Ｔ内で証明し、安全性証明ｐを作成する安全性証明作成部と、
開発者側が得られた安全性証明ｐをもとに利用者側との間で対話的に通信を行い、送信したプログラムｆが、
Safe＝｛ｆ｜Ｔにおける｛Pre｝ｆ｛Post｝の証明ｐが存在する｝
によって定義される安全なプログラムの集合Safeに属することを利用者に確認させ、かつ利用者側は、開発者側から送信されたプログラムｆが前記集合Safeに属することを確認した後に該プログラムｆを実行するゼロ知識証明プロトコル部と、
を有することを特徴とする証明携帯プログラム配信システム。
【請求項４】
前記ゼロ知識証明プロトコル部は、
開発者側が、一方向性準同型写像を用いたコミットメント関数に基づくゼロ知識証明プロトコルを用いて｛Pre｝ｆ｛Post｝の証明ｐが存在するか確認させることを特徴とする請求項３に記載の証明携帯プログラム配信システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ネットワーク経由で配信される悪性プログラムを利用者が実行前に検出・駆除し、計算機システムを守り、同時に良性プログラムのリバースエンジニアリングを防止し、プログラム著作権を保護する技術に関する。
【背景技術】
【０００２】
今日、プログラム化された高機能コンテンツがＷＷＷブラウザや携帯端末に日常的にダウンロードされ実行されている。
また、パケットやノードなどのネットワーク構成要素をプログラマブルとすることで拡張性や耐故障性を増したアクティブネットワークの研究も進んでいる。
プログラムが流通する時代を迎え、悪性プログラムから計算機を守る新しい技術への需要が高まってきている。
【０００３】
現在、公開鍵暗号を利用した電子署名つきプログラム配信方式が広く実用化されている。この方式では、開発者が電子的な「印鑑」をプログラムに捺印し、それを受け取った利用者がその「印鑑」を検証することで、プログラムが信頼できる開発者から送られてきたことを確認できるようになっている。
ところが、開発者が信頼できたからと言ってプログラムも信頼できるとは限らない。たとえ信頼できる開発者が作ったとしてもプログラムには誤りが混入しやすいからである。プログラム本体の内容を検査しないこの方式には明らかな限界がある。
そこで、プログラムそのものの安全性を利用者が直接検証することが考えられる。
【０００４】
ウィルスと呼ばれる悪性プログラムの一種に対しては、パタンマッチによる検知・駆除システムが広く実用化されている。
しかし、最新のウィルス定義ファイルを用いたとしても、次々に現れる新種のウィルスの感染を未然に防ぐことはできない。未知のウィルスから計算機を守るためには、プログラムが安全に実行可能であるための十分条件を予め厳密に定義し、その条件を満たしたプログラムのみを実行する手法が必要である。
【０００５】
悪性プログラムから計算機を守る技術として、仮想機械のバイトコード検証系が普及している。この技術はプログラム（バイトコード）そのものの安全性を検証するものの、特定の検証体系に基づく限定的な安全性（各命令のオペランドが適切な型を待つことなど）しか対象にできない。それにもかかわらず、バイトコード検証系を含む仮想機械全体の規模は小さくなく、それ自体の安全性を前もって確認することは容易でない。
さらに、仮想機械においては一般にプログラム実行時の検証も行われるため、非力な計算環境では実行速度の低下が問題となる。
したがって、プログラムの多様な安全性を比較的小さなシステムで検証し、安全性を保証しながら高速に実行することが求められる。
【０００６】
上記３つの現行方式の問題を解決する新技術として証明携帯プログラム配信方式が提案されている（非特許文献１、２参照）。この方式では、プログラムが正しく安全に動作すること（例えば、与えられた入力条件のもとでプログラムを実行した場合、結果が出力条件を満たし、実行時には禁止されたメモリ領域へのアクセスが全くないこと）の数学的証明をプログラムに添付し、プログラムと証明を同時に流通させる。利用者は受け取った証明を証明チェッカと呼ばれるソフトウェアを用いて機械的に検査することで、プログラムの安全性を自動的に検証することができる。
【０００７】
証明携帯プログラム配信方式は、現行技術と比べて次の長所を持っている。
（１）誤りを含むプログラムや安全でないプログラムに対しては正しい証明が得られないので、証明を検証するこの方式はプログラムそのものを検証する方式である。言い換えると正しい証明の存在がプログラムの安全性の十分条件になっている。
（２）証明の記述には一階述語論理、高階論理、あるいは時相論理といった汎用の論理体系を用いるので、多様な安全性（型安全性、メモリ安全性、リソース範囲に関するその他の安全性、停止性など）を議論できる。
（３）（証明の作成が困難だとしても）証明の正しさをチェックすること自体は(証明の各ステップで適切な推論規則が適用されていることを逐一確認するだけなので)単純な作業であり、利用者が用いる証明チェッカはコンパクトである。
(４)安全性の検証はプログラムの実行前に行うため、実行時検証を伴う他方式に比べプログラムを高速に実行できる。
【０００８】
しかし、証明携帯プログラム配信方式には、証明を同時に流通させることに起因する、以下のような問題がある。
第一に、安全性証明はプログラム本体の指数オ−ダのサイズになりうるという問題がある。すなわち、プログラムと証明をそのまま組にして流通させる本方式を大規模なプログラムに適用した場合、巨大な証明のチェックを利用者に強いることになってしまう。言い換えると、利用者が証明確認に費やせる時間を現実的な範囲に制限した場合、短い証明を有する、限られた種類のプログラムしかこの方式では安全に転送・実行することができない。
【０００９】
第二に、悪性プログラムから計算機を守るために安全性の証拠として添付する証明が逆に悪意を持った利用者に盗用されかねないという問題がある。証明をそのまま流通させた場合、例えば証明を利用したリバースエンジニアリングなどを招く恐れを否定できない。
【００１０】
上述した証明携帯プログラム配信方式の第一の問題を解決する方式として対話型証明携帯プログラム配信方式が提案されている（特許文献１、非特許文献３、４参照）。この対話型証明携帯プログラム配信方式は、対話的・確率的手法に基づく効率的な証明検証技法（非特許文献５、６，７参照）を応用したものである。ただし安全性証明の盗用・悪用を防止する機能はなく、第二の問題は依然として残る。
【００１１】
証明携帯プログラム配信方式の第二の問題を解決するために、ゼロ知識証明携帯プログラム配信方式が提案されている（特許文献１、非特許文献３、４参照）。このゼロ知識証明携帯プログラム配信方式は、非特許文献８の手法を応用し、証明・検証プロトコルのゼロ知識化を提案したものである。
このゼロ知識証明携帯プログラム配信方式は、安全性証明の内容を秘匿しつつプログラムの安全性を利用者に納得させることができる。その結果、安全性証明の盗用・悪用を防ぐことができる。特に、安全性証明の所有者が正規のプログラム開発者に限られるため、証明の所有をプログラム著作権の保持とみなすことも可能となる。
以上、従来技術についての比較を図１４に示す。
【特許文献１】特開２０００−７８１２６号公報
【非特許文献１】Necula, G. C.: Proof-Carry ing Code, Proc. 24th ACM SIGPLAN-SIGACT Symp. Principles of Programming Languages, ACM Press, pp. 106-119 (1997).
【非特許文献２】Necula, G. C. and Lee, P.:  Safe to Execute Verification of Software, US Patent 6,128,774(2000).
【非特許文献３】Tsukada, Y.: Mobile Codes with Interactive Proofs: An Approach to Provably Safe Evolution of Distributed Software Systems, Proc. 2000 Int'l Symp. Principles of Software Evolution,    IEEE Computer Society Press, pp. 23-27 (2001).
【非特許文献４】Tsukada, Y.: Interactive and Probabilistic Proof of Mobile Code Safety, Automated Software Engineering (To appear).
【非特許文献５】Goldwasser, S., Micali, S. and Rackoff, C.: The Knowledge Complexity of Interactive Proof Systems, SIAM J. Computing, Vol. 18, No. 1, pp. 186-208 (1989).
【非特許文献６】Lund, C., Fortnow, L., Karloff, H. and Nisan, N.: Algebraic Method for Interactive Proof Systems, J. ACM, Vol. 39, No. 4, pp. 859-868 (1992).
【非特許文献７】Shamir, A.: IP = PSPACE, J. ACM, Vol. 39, No. 4, pp. 869-877 (1992).
【非特許文献８】Ben-Or, M., Goldreich, O., Goldwasser, S., Hastad, J., Kilian, J., Micali, S. and Rogaway, P.: Everything Provable is Provable in Zero-Knowledge, Advances in Cryptology―Crypto'88,Lecture Notes in Computer Science, Vol. 403, Springer-Verlag, Berlin，pp. 37-56 (1990).
【発明の開示】
【発明が解決しようとする課題】
【００１２】
しかしながら、上述した特許文献１、非特許文献３、４では、上記ゼロ知識証明携帯プログラム配信方式の原理的可能性のみが示され、具体的な実施例は明記されていない。なぜなら、特許文献１、非特許文献３、４に記載の方式では、証明・検証プロトコルのゼロ知識化に伴う通信複雑度(開発者と利用者との間の対話的通信のラウンド数)の増大が著しく、ゼロ知識証明携帯プログラム配信方式を実施することが現実的に困難だからである。
【００１３】
本発明は、このような事情に鑑みてなされたものであり、従来のゼロ知識証明携帯プログラム配信方式における通信複雑度(開発者と利用者の間の対話的通信のラウンド数)の問題を解決し、実施可能な通信複雑度を持つ、効率的な証明携帯プログラム配信方法および証明携帯プログラム配信システムを提供することを目的とする。
【課題を解決するための手段】
【００１４】
本発明は、プログラム検証理論における証明携帯プログラム配信方式（非特許文献１、２参照）と暗号理論におけるゼロ知識対話型証明プロトコル（非特許文献５、６、７、８及び参考文献１参照）という二つの概念を融合させ、高度な安全性と実施可能な効率性を併せ持つ新しいプログラム流通メカニズムを提供することを最も主要な特徴としている。
技術的には、二つの概念を融合させる際、すなわちプログラム安全性の証明・検証プロトコルをゼロ知識化する際に、一方向性準同型写像を用いたコミットメント(秘密証拠供託)関数（参考文献１参照）を利用することを主要な特徴としている。
【００１５】
従来技術は、一方向性関数の仮定から存在が保証される秘匿確率暗号関数（非特許文献８参照）を利用しており、その結果、開発者と利用者との間の対話的通信のラウンド数および各ラウンドで送受信される情報量の著しい増大を招いていた。
本発明は、送受信される情報量を定数倍に抑え、ラウンド数を定数回の増加に抑えることにより、実施可能な効率性を実現している。
【００１６】
すなわち、上記目的を達成するために請求項１に記載の発明は、開発者側が作成したプログラムｆを送信装置により利用者側に配信する際に、開発者側は前記プログラムｆが安全に実行可能であることを利用者側に示し、利用者側は受信装置により受信した前記プログラムｆを実行前に該プログラムｆが安全に実行可能であることを、開発者側の送信装置と対話的に通信しながら検証する証明携帯プログラム配信方法であって、
開発者側が作成したプログラムｆが正しいことを示すために、プログラムｆと、プログラムｆを実行する直前に成立すべき条件である前条件Preと、プログラムｆの実行直後に成立すべき条件である後条件Postとから検証論理式｛Pre｝ｆ｛Post｝を検証論理式生成部により生成する第１のステップと、
前記検証論理式が妥当であることを示すためにある論理体系Ｔ内で証明し、安全性証明ｐを、安全性証明作成部により作成する第２のステップと、
開発者側が得られた安全性証明ｐをもとに利用者側との間でゼロ知識証明プロトコル部により対話的に通信を行い、送信したプログラムｆが、
Safe＝｛ｆ｜Ｔにおける｛Pre｝ｆ｛Post｝の証明ｐが存在する｝
によって定義される安全なプログラムの集合Safeに属することを利用者に確認させる第３のステップと、
利用者側は、開発者側から送信されたプログラムｆが前記集合Safeに属することを確認した後に該プログラムｆを実行する第４のステップとを
有することを特徴とする。
【００１７】
また、請求項２に記載の発明は、請求項１に記載の証明携帯プログラム配信方法において、前記第３のステップにおいて、開発者側は、一方向性準同型写像を用いたコミットメント関数に基づくゼロ知識証明プロトコルを用いて｛Pre｝ｆ｛Post｝の証明ｐが存在するか確認させることを特徴とする。
【００１８】
また、請求項３に記載の発明は、開発者側が作成したプログラムｆを送信する送信装置と、該送信装置から転送されたプログラムを受信する利用者側が使用する受信装置とを有し、受信装置にプログラムを配信する際に、送信装置と受信装置間で対話的に通信して前記プログラムｆが安全に実行可能であることを検証する証明携帯プログラム配信システムであって、
開発者側が作成したプログラムｆが正しいことを示すために、プログラムｆと、プログラムｆを実行する直前に成立すべき条件である前条件Preと、プログラムｆの実行直後に成立すべき条件である後条件Postとから検証論理式｛Pre｝ｆ｛Post｝を生成する検証論理式生成部と、
検証論理式｛Pre｝ｆ｛Post｝が妥当であることを示すためにある論理体系Ｔ内で証明し、安全性証明ｐを作成する安全性証明作成部と、
開発者側が得られた安全性証明ｐをもとに利用者側との間で対話的に通信を行い、送信したプログラムｆが、
Safe＝｛ｆ｜Ｔにおける｛Pre｝ｆ｛Post｝の証明ｐが存在する｝
によって定義される安全なプログラムの集合Safeに属することを利用者に確認させ、かつ利用者側は、開発者側から送信されたプログラムｆが前記集合Safeに属することを確認した後に該プログラムｆを実行するゼロ知識証明プロトコル部と、
を有することを特徴とする。
【００１９】
また、請求項４に記載の発明は、請求項３に記載の証明携帯プログラム配信システムにおいて、前記ゼロ知識証明プロトコル部は、開発者側が、一方向性準同型写像を用いたコミットメント関数に基づくゼロ知識証明プロトコルを用いて｛Pre｝ｆ｛Post｝の証明ｐが存在するか確認させることを特徴とする。
【発明の効果】
【００２０】
以上説明したように、本発明は、プログラムが正しく安全に動作することの数学的証明を、対話を通じて効率的に検証する手段を与えており、これにより本発明の第一の目的である悪性プログラムの実行前検出・駆除が実現できる。
さらに、本発明は、安全性証明の内容を秘匿し証明の盗用・悪用を防ぐ効率的なプロトコルを提供しており、これにより本発明の第二の目的である証明情報に基づくリバースエンジニアリングの防止が実現できる。
さらに、安全性証明の所有者が正規のプログラム開発者に限られるため、証明の所有をプログラム著作権の保持とみなすことも可能になるという効果を併有する。
すなわち、本発明は、プログラムの安全性を効率的に検証したいという利用者側の要求とプログラムの著作権を保護したいという開発者側の要求を同時に満たすという効果を有する。
【発明を実施するための最良の形態】
【００２１】
以下、本発明の実施形態を、図面を参照して詳細に説明する。
【００２２】
（１）本発明の概要
図１に本発明に係る証明携帯プログラム配信方法の概要を示す。同図において、開発者側Ｘはプログラムｆを作成し（ステップ１）、作成したプログラムｆが安全であることを示すために、検証論理式{Pre}ｆ｛Post｝を生成する（ステップ２）。ここで、前条件Preおよび後条件Postはそれぞれプログラムを実行する直前および直後に成立すべき条件であって、プログラムの利用者が開発者に事前に公開しているものである（例えば、自然数の列の総和を求めるプログラムを利用したい場合、「入力レジスタは自然数のリスト型を持つ」という前条件と、「出力レジスタは自然数の型を持つ」という後条件を公開しておく。）。
【００２３】
さらに、プログラムｆを実行するにあたりいかなる安全性を要求するかについても利用者側Ｙは事前に公開しているものとする。さて、プログラムｆと前条件Preおよび後条件Postから検証論理式{Pre}ｆ｛Post｝を生成する手法は、利用者側Ｙが要求する安全性に依存して決まるが、いずれにせよ検証論理式{Pre}ｆ｛Post｝が妥当な論理式である場合、「前条件Preが成立する状況でプログラムｆを実行し計算が終了すると、必ず後条件Postが成立し、しかもプログラムｆの実行時には、利用者の要求する安全性が満たされる」ことが数学的に保証される。
【００２４】
この検証論理式は、それが妥当な論理式であることを示すために、ある論理体系Ｔ内で証明される（ステップ３）。得られた証明ｐは、検証論理式の妥当性の証拠として使われる。Ｔは一般に一階述語論理、高階論理、あるいは時相論理といった汎用の論理体系であり、その公理は利用者の要求する安全性に依存して定まる。
得られた安全性証明ｐをもとに開発者側Ｘは利用者側Ｙと対話的通信を行い、ステップ４で送信したプログラムｆが
【００２５】
【数１】
2006197323.tif 000003
によって定義される安全なプログラムの集合Safeに属することを開発者側Ｘは利用者側Ｙに確認させる（ステップ５）。
一方、利用者側Ｙは開発者側Ｘと対話的通信を行い、ステップ６で受信したプログラムｆが前記集合Safeに属すること、すなわちプログラムｆが安全であることを確認した後に実行する（ステップ７，８）。
【００２６】
開発者側Ｘと利用者側Ｙとの対話的通信において、プログラムｆが集合Safeに属することを示す最も簡単な方法は、作成された安全性証明ｐを開発者側Ｘがそのまま利用者側Ｙに送ることである。これがすなわち従来の証明携帯プログラム配信方式である（図１５参照）。この方式の欠点は、利用者の計算能力をプログラムｆのサイズ｜ｆ｜についての多項式時間に制限した場合、安全性証明ｐのサイズ｜ｐ｜もプログラムｆのサイズ｜ｆ｜の多項式長に制限されてしまうという点である。すなわち、利用者の計算能力に現実的な制限を施した場合、プログラムｆが
【００２７】
【数２】
2006197323.tif 000004
（ただしｈはある多項式）によって定義される集合Safehに属することしか示すことができない。
これらの集合Safehの全体はＮＰ（非決定性多項式時間限定アルゴリズムで計算可能な集合のクラス）にほかならない。
これに対し対話型証明携帯プログラム配信方式は、プログラムｆが集合Safeに属することを示すために、対話型証明プロトコル（非特許文献５参照）を利用する（図１６参照）。
【００２８】
その結果、利用者の計算能力に現実的な制限を施した場合、PSPACE（決定性多項式領域限定アルゴリズムで計算可能な集合のクラスであり、クラスＮＰよりもはるかに大きいと考えられている）に含まれる任意のSafeに対し、プログラムｆがSafeに属するかどうかを示すことができる（非特許文献６、７参照）。すなわち、この方式は、適用可能なプログラムの集合（あるいは適用可能な安全性と言ってもよい）の全体を従来のＮＰからPSPACE へと拡大することで、複雑な安全性が要求される多様なプログラムを安全に転送・実行できるようにしている。
【００２９】
さらに、ゼロ知識証明携帯プログラム配信方式は、プログラムｆが集合Safeに属することを示すために、この対話型証明プロトコルをゼロ知識化して利用する。従来技術はゼロ知識化に際して非特許文献８に記載の手法を応用（図１７）していたが、本発明（図１）では参考文献１の手法を応用し、通信複雑度を大幅に改善したゼロ知識化を実現している。その結果、利用者の計算能力に現実的な制限を施した場合、PSPACEに含まれる任意の集合Safeに対し、プログラムｆが集合Safeに属するという事実のみをそれ以外の情報（例えばＴにおける{Pre}ｆ｛Post｝の証明ｐの内容に開する情報）を一切漏らすことなく効率的に示すことができる。
【００３０】
本発明は、次のような応用可能性を持つ。今、ネットワーク上で競合する複数のエージェントＰ１，Ｐ２，…，Ｐｎが顧客Ｖに安全性証明を添えてプログラムを販売しようとしているとする。このとき、従来の証明携帯プログラム配信方式によれば、証明は公開されているため盗用される危険性が高い。顧客Ｖになりすました攻撃者Ｐjがプログラムと証明を別のＰiから盗み、自分が開発したと虚偽の主張をして顧客Ｖに売りつける恐れがある。
一方、本発明によれば、証明の中身を把握しているのは正規の開発者に限定される（より正確には、正規の開発者以外の者が証明の中身を把握するには証明を作成するのと同等の高い計算コストを要する）。すなわち、安全性証明がプログラムの著作権として機能し、この著作権がゼロ知識性によりネットワーク上で保護される。
【００３１】
ソフトウェアの著作権を保護する手法は、難読化や電子透かしの挿入など数多く提案されている。本発明の特徴は、プログラムの著作権を保護したいという開発者側の要求のみならず、プログラムを安全に実行したいという利用者側の要求も考慮し、両者を同時に満たすという点にある。
本発明に係る証明携帯プログラム配信方法を実施するための証明携帯プログラム配信システムの構成を図２に示す。同図において、証明携帯プログラム配信システムは、開発者（証明者）側装置である送信装置１０と、利用者（検証者）側装置である受信装置２０とから構成されている。
【００３２】
送信装置１０は、検証論理式生成部１００と、安全性証明作成部１０１と、プログラム送信部１０２と、量化命題論理式還元部１０３と、算術化部１０４と、ヒント（部分証明）作成・送信部１０５とを有している。
また、受信装置２０は、プログラム受信部２００と、量化命題論理式還元部２０１と、算術化部２０２と、ヒント（部分証明）受信・検証部２０３と、乱数生成・送信部２０４とを有している。
送信装置１０における量化命題論理式還元部１０３、算術化部１０４、ヒント（部分証明）作成・送信部１０５と、受信装置２０における量化命題論理式還元部２０１、算術化部２０２、ヒント（部分証明）受信・検証部２０３、乱数生成・送信部２０４はゼロ知識証明プロトコル部３００を構成している。
【００３３】
送信装置１０において、検証論理式生成部１００は、作成されたプログラムｆの検証論理式{Pre}ｆ｛Post｝を生成し、安全性証明作成部１０１に送出する。
安全性証明作成部１０１は、検証論理式{Pre}ｆ｛Post｝を受け取り、論理体系Ｔにおける検証論理式{Pre}ｆ｛Post｝の安全性証明ｐを作成する。
プログラム送信部１０２は、安全性証明作成部１０１により作成された論理体系Ｔにおける検証論理式{Pre}ｆ｛Post｝の安全性証明ｐを量化命題論理式還元部１０３に送出するとともに、作成されたプログラムｆを受信装置２０のプログラム受信部２００に転送する。
【００３４】
量化命題論理式還元部１０３では、論理体系Ｔにおける検証論理式{Pre}ｆ｛Post｝の安全性証明ｐを量化命題論理式に翻訳する。
算術化部１０４では、量化命題論理式還元部１０３により翻訳された量化命題論理式を算術化し、ヒント（部分証明）作成・送信部１０５に送出する。
一方、受信装置２０側では、プログラム受信部２００が、プログラム送信部１０２よりプログラムｆを受信し、量化命題論理式還元部２０１に送出する。
量化命題論理式還元部２０１は、プログラムｆを量化命題論理式に翻訳する。
算術化部２０２は、量化命題論理式還元部２０１により翻訳された量化命題論理式を算術化し、ヒント（部分証明）受信・検証部２０３に送出する。
【００３５】
ヒント（部分証明）作成・送信部１０５は、ヒント（部分証明）受信・検証部２０３との間で対話型プロトコルを実行する。このとき、ヒント（部分証明）受信・検証部２０３は、乱数生成・送信部２０４により乱数を発生させ、該乱数によりヒント（部分証明）作成・送信部１０５から転送されるヒント情報を指定する。
ヒント（部分証明）受信・検証部２０３は、プログラムｆが安全に実行可能であることを確認した後、プログラムｆを実行する。
【００３６】
（２）機械語プログラムのメモリ安全性
以下では、機械語プログラムのメモリ安全性を例にとり、本発明の実施方法について説明する。「メモリ安全性」とは、プログラムの実行中に、禁止された領域へのメモリアクセスがないという性質であり、最も基本的な安全性のひとつとされる。
プログラムの一例として、Alphaアセンブリ言語（参考文献２参照）で記述された簡単なプログラムを図３に示す。レジスタr1、r2、r3の値に応じて分岐するプログラムである。
【００３７】
いま、利用者側の受信装置２０は代表的な関数型言語であるStandard ML言語（参考文献３参照）の型つき中間言語コンパイラ実行時システム（参考文献４参照）を塔載していると仮定する。この利用者システムは、その安全性要求やプログラムの前条件・後条件といった仕様を型の概念を用いて規定する。例えば先のプログラム例の前条件・後条件も型を用いて規定される（図３参照）。式ｅが型τを持つことをｅ：τと書く。本実施形態で利用される式と型は次のように定義される。
【００３８】
【数３】
2006197323.tif 000005
ここで、ｎは３２ビットで表わされる自然数、各riはAlphaレジスタ、 sel(e)はメモリ番地ｅの内容を指す。型intの値は３２ビットで表される自然数である。型τ1*τ2の値は、型τ1と型τ2の値が格納された隣接するメモリ番地へのポインタである。型τ1＋τ2の値は隣接するメモリ番地へのポインタであり、最初の番地にはタグ（Oまたは１）が格納され、タグが０ならば型τ1の値、タグが１ならば型τ2の値が続きの番地に格納される。また型addrの値は、安全に読み出し可能なメモリ番地を表わす。
【００３９】
この利用者システムが規定する安全性要求は、型の概念を用いて図4
に示すように規定される。
本実施形態における一階述語論理体系Ｔはこれらを公理として持つ。
実は図３に示すプログラム例は、プログラムがメモリ安全であることと、量化命題論理式
【００４０】
【数４】
2006197323.tif 000006
が偽であることが同値となるように作られている。命題変数Ｘiの真偽は、4（ri）（タグが格納された番地０（ri）の続きの番地）がintであるかあるいはint の組へのポインタであるかということにエンコードされる。さらに、r3+iにその内容を読み込むことにより、命題変数Ｘiの真偽はr3+i ：intあるいはsel（r3+i ）：intの成立へと変換される。
【００４１】
プログラムｆがこの利用者システムでメモリ安全に実行可能であることを意味する検証論理式{Pre}ｆ{Post}は、機械語プログラムの操作的意味論に基づくFloyd流検証論理式生成器（参考文献５参照）によって自動的に生成される。検証論理式生成器を図５に示す。また、それを用いて図３のプログラムに対する検証論理式が実際に生成されていく様子を図６乃至図８に示す。最終的に得られる検証論理式は、図９に示す１４個の論理式の論理積となる。
【００４２】
検証論理式は、その妥当性の証拠を得るために、一階述語論理体系Ｔにおいて証明される。検証論理式{Pre}ｆ{Post}が一階述語論理体系Ｔで証明された場合、Standard ML言語の型つき中間言語コンパイラ実行時システムにおいて、前条件Preが成立する状況でプログラムｆを実行し、計算が終了すると、必ず後条件Post が成立し、しかも（プログラムｆの実行中に用いられる全ての値に適切な型がつくため）プログラムｆの実行時のメモリアクセスが安全であることが保証される。例えば、図３のプログラム例も検証論理式が証明可能であり、メモリ安全であることが保証される。
【００４３】
メモリ安全性の検証に要する計算量について検討する。検証論理式{Pre}ｆ{Post}が一階述語論理体系Ｔで証明可能なプログラムｆの全体を集合Safeとしたとき、その計算の複雑さは従来の証明携帯プログラム配信方式が適用可能な計算量クラスＮＰを超えているように思われる。実際、安全性証明のサイズのみならず検証論理式そのもののサイズがプログラムのサイズに比して指数オーダになりうることがわかる。
【００４４】
その理由は、プログラム中に条件分岐命令がｎ回続いた場合、たとえループを含まないプログラムであっても２n通りの実行パスが存在することになるが、そのどれをとってもメモリ安全に実行されることが保証されなければならないため、一般に検証論理式は２n個の論理式の論理積で表されるからである（図１０参照）。個々の論理式の証明は短く実際に多項式時間で検証可能であるが、検証論理式全体となると証明は指数オーダのサイズとなる。この事実を計算の複雑さの理論の言葉を用いて表現すれば、集合Safeはco-ＮＰ完全（補集合がＮＰに属する集合のクラスco-ＮＰの中で、最も計算するのが難しい集合）である。
【００４５】
（３）メモリ安全性の対話型証明
co-ＮＰ完全な集合はＮＰに属さないと考えられているため、機械語プログラムのメモリ安全性は従来方式では必ずしも効率的に検証することができない。この問題が対話型証明の理論（非特許文献５、６、７参照）により解決されることを示す。
対話型証明は３ステップからなる。最初のステップは安全性の量化命題論理式還元部１０３、２０１による量化命題論理式への翻訳である。
【００４６】
メモリ安全に実行可能なAlphaアセンブリ言語プログラムの全体Safeはco-ＮＰ完全であった。
一方、偽の量化命題論理式の全体はより計算量の大きいとされるPSPACE完全である。したがって、プログラムが集合Safeに属するか否かといった安全性検証の問題は、量化命題論理式の真偽判定問題に還元可能である。例えば、図３のプログラム例が集合Safeに属することは、（２）に既出の量化命題論理式（式（４））が偽であることと同値である。
【００４７】
次のステップは算術化部１０４、２０２による量化命題論理式の算術化である。論理式を算術化することで、論理式の真偽判定を数式の値の零判定に置き換えることができる。実際、命題変数Ｘを自然数変数Ｘに、∨を＋に、∧を×に、¬Ｘを１−Ｘに、そして量化子∃を和Σに変換することで算術化は完了する。例えば、先の量化命題論理式が偽であることは、次の数式の値が零であることと同値である。
【００４８】
【数５】
2006197323.tif 000007
このような数式の値を通常の展開による計算手法で求めようとした場合、その計算時間はΣ記号が入れ子になるにつれ指数関数的に増大する。
一方、Σ記号の入れ子の深さは、元のプログラム中の条件分岐命令の個数を反映する。したがって、プログラムの安全性の検証をこのように数式の評価に還元したとしても、プログラムが大規模になれば計算時間の爆発の問題は依然として避けがたい。しかし、算術化によって利用可能となった代数的な手法を適用し、この問題が解決されることを次に示す。
【００４９】
上記数式が零であることを証明する対話型プロトコルの実行例を図１１及び図１２に示す。対話は実質的に３ラウンドからなり、各ラウンドがひとつのΣ記号に対応する。各ラウンドごとにひとつの数式が提示され、利用者はその値の正当性を開発者との対話を通じて検証する。なお、実際のプロトコルにおいては、元の数式の長さｌに応じて決まる長さＯ（ｌ）の適当な素数ｑを法とした計算が行われるが、ここでは省略する。
【００５０】
まず、開発者は、各ラウンドで提示された数式からΣ記号をひとつ除去し、それを展開して得られた１変数多項式(の係数)をヒント情報として利用者に送る。続いて利用者は、各ラウンドごとに自動的に決まる検証タスクを実行する。具体的には、受け取った多項式の０と１におけるそれぞれの値の和を計算し、それが期待される値と等しいかどうかを検証する。
利用者の計算能力には制限があるが、このようにヒント情報を利用することにより、複雑な数式の値を効率的に計算することができる。
【００５１】
この検証をパスすると、続いてヒント情報の妥当性を検証する新しいラウンドに移行し、Σ記号のひとつ少ない新しい数式が提示され、開発者によるヒントの送付と利用者による値の検証が繰り返される。不正な開発者が妥当でないヒントを送付した場合が問題であるが、このような攻撃に対処するため利用者は、開発者が各ラウンドでΣ記号のひとつ少ない数式を提示する際に、変数に代入する定数を、乱数生成・送信部２０４により乱数で指定する。
【００５２】
さらに最後のラウンドでは、送付された多項式α[2][4] [Ｘ3]が個々のＸ３の値についてＡ[2][4][Ｘ3]と一致するかどうかをヒント無しで調べることができるので、最終的にヒントの妥当性を確認できる。このようにして、利用者は最初に提示された数式の値が零であること、すなわち図３のプログラム例が安全に実行可能であることを最終的に結論づける。
【００５３】
本プロトコル実行中における利用者のタスクは多項式の値の評価・その和の計算・値の比較といった簡単な演算のみから構成される。さらに、対話のラウンド数はΣ記号の数にほかならない。
その結果、利用者が計算に要する時間および対話のラウンド数はいずれもプログラムのサイズの多項式で抑えられる。すなわち利用者は効率的にプログラムの安全性を検証できる。
一方、開発者が計算に要する時間は多項式では抑えられない。しかし、プログラムの送り手には相応の高い計算能力を求めるものの、受け手の計算量を抑える本方式は、ユビキタス環境において高速なサーバから携帯端末や組み込みシステム等の小型計算機にプログラムをダウンロードし実行する場合に有用であると考えられる。
【００５４】
また、このように構成されるプロトコルが保証する安全性は確率的である。すなわち、元のプログラムが安全でない場合、このプロトコルに従った利用者が誤ってそれを安全だと結論づけてしまう確率が微少ではあるが存在する。特に問題となるのは、不正な開発者による偽のヒント情報の送信が、検証の誤り確率の増大を招く場合である。しかしその確率は、たとえ不正な開発者がどのような偽のヒントを送ろうとも、プログラムのサイズをｋとした場合１／２ｋ以下に抑えらえることが、ｎ次方程式の解は高々ｎ個であるいう事実を利用することにより示される。
【００５５】
（４）メモリ安全性のゼロ知識証明
（４−１）  非特許文献８の手法を応用した従来方式（特許文献１、非特許文献３，４参照）
図１１及び図１２のプロトコルは、非特許文献８に示される代表的構成法を適用することで原理的にゼロ知識化可能である。すなわち、共通入力をＡとするときの検証者（利用者）から証明者（開発者）への転送情報(乱数)ｘ１，…，ｘｎおよび証明者から検証者への転送情報(ヒント)列ｙ１，…，ｙｎからなるプロトコル実行を、次のように修正する。
【００５６】
１．転送情報(ヒント)列ｙ１，…，ｙｎの代わりに、一方向性関数の仮定から存在が保証される秘匿確率暗号関数（secure probabilistic encryption scheme） Eと乱数列ｄ１，…，ｄｎを用いたそれらの暗号化
【００５７】
【数６】
2006197323.tif 000008
を転送する。
２．最後に証明者は検証者に
【００５８】
【数７】
2006197323.tif 000009
なるＮＰ述語をゼロ知識で証明する。ここで述語Ｐは元のプロトコル実行において転送情報列ｘ１，…，ｘｎ  ，ｙ１，…，ｙｎが満たすべき性質を表わす。
しかしこの構成法は、複雑なＮＰ述語のゼロ知識証明プロトコルを部分プロトコルとして含むため、通信複雑度の著しい増大を招いている。
【００５９】
（４−２）参考文献１の手法を応用した本発明の方式
本発明では、参考文献１の手法を応用し、通信複雑度の増加を抑えたゼロ知識証明プロトコルを示す。
情報の内容自体を秘密に保ったまま、内容の事後変更を不可能とする十分な証拠を予め相手に渡しておくために、コミットメント（秘密証拠供託）関数commitを本プロトコルにおいて利用する。セキュリティパラメータｌと長さＯ（ｌ）の素数ｑに対し、証明者は秘密にしたい情報ａ∈ {０，１，…，ｑ−１}と乱数r∈｛０，１｝lをもとに証拠commit(a、 r)∈｛０，１｝l を計算して検証者に送付する（コミットメント・フェーズ）。
【００６０】
その後、証明者によるａとｒの開示を受けた検証者は、これらの情報に基づき先の証拠が確かにcommit(a、r)であることを計算し、情報ａが事後変更されていないことを確認する（開示フェーズ）。
このような秘密証拠供託の実現は、関数commitに課せられた次のふたつの性質により保証される。
「秘匿性」：commit (a，r)の値から秘密情報ａに間する知識を得ることは計算論的に困難である性質、すなわち、異なるふたつの秘密情報に対するコミットメントの確率分布は多項式時間識別不可能である性質である。
「束縛性」：commit（a、r）の値から秘密情報ａが一意に決まる性質である。すなわち、秘密情報の事後変更は不可能である性質である。
【００６１】
簡単のため適当なｒに対するcommit（a，r）をＣ(a)と略記する。これにあわせ、コミットメント間の等号Ｃ＝Ｃ’を、ＣとＣ’があるａに対し集合{commit(a， r)｜r}の要素であることと定義する。Ｃ（ａ）は同値関係＝による各同値類{commit(a，r)｜r}の代表元とみなせる。
さらに、 コミットメント関数commitに次の性質を持たせることができる。
「準同型性」：与えられたふたつのコミットメントＡ ＝Ｃ(ａ)およびＢ ＝Ｃ（ｂ）からＣ（ａ＋ｂ mod ｑ）およびＣ（ａ−ｂ mod ｑ）が多項式時間で計算可能である。各コミットメントは乗法群の要素であるため、これらをそれぞれＡＢおよびＡＢ−１と記す。この性質から直ちに、コミットメントＡ＝Ｃ(ａ)が与えられれば、任意の定数ｃに対しＣ(ca mod ｑ)が多項式時間計算可能となる。これをＡＣと記す。
【００６２】
これら３つの性質(秘匿性、束縛性、準同型性)をもつコミットメント関数は、次のように構成することができる。
【００６３】
【数８】
2006197323.tif 000010
ここで、ｆは一方向性準同型写像と呼ばれるものであり、その作成法は複数知られている。例えば、離散対数問題に基づくElGamal暗号の安全性(すなわち異なるふたつの平文のElGamal暗号方式による確率的暗号化が多項式時間識別不可能であること)を仮定することで具体的に作成可能である（参考文献１参照）。
また、ｙは次の２条件をみたすように選ばれる。
すなわち、
１．異なるｉとｊ(ただし０≦i，j＜p）に対し、確率分布ｙiｆ(r)およびｙjｆ(s)（ただしｒとｓは独立に選ばれる）は多項式時間識別不可能である。
２．剰余類yIm(ｆ)、y2Im(ｆ)，…は全て異なる。
【００６４】
一方向性準同型写像を用いて構成されたcommitを利用することにより、通信複雑度を抑えたゼロ知識化か可能となる。図３のプログラム例に対するゼロ知識証明プロトコルの実行例は、図１1及び図１２における破線で囲んだ部分、すなわち、情報１〜５、タスク１〜５を図１３の内容に置き換えることによって得られる。
図１１及び図１２においては開発者がヒントとして多項式の係数そのものを送付していたのに対し、ゼロ知識証明プロトコルでは係数のコミットメントを送付する点が異なる。
準同型写像を用いたコミットメント関数の性質により、利用者は、これら係数のコミットメントのみから、目的とする式のコミットメントを計算することが可能となる。例えば、第２ラウンドで利用者は目的とする式
【００６５】
【数９】
2006197323.tif 000011
の計算を行うが、それまでに受け取った係数のコミットメントのみを用いて
【００６６】
【数１０】
2006197323.tif 000012
として計算することができる。そして対話の最終段階において、これら目的とする式の値を、開発者はコミットメントの内容を開示することにより利用者に納得させる。
このゼロ知識化によって、各ラウンドで開発者から利用者に送付される情報量は定数倍に抑えられる。また、ラウンド数も定数回の増加に抑えられる。
【００６７】
[参考文献]
（１） Cramer, R. and Damgard, L: Zero-Knowledge Proofs for Finite Field Arithmetic or: Can Zero-Knowledge be for Free?, Advances in Cryptology―Crypto'98, Lecture Notes in Computer Science, Vol. 1462, Springer-Verlag, Berlin，pp. 424-441 (1998).
（２） Sites, R. L.: Alpha Architecture Reference Manual, Digital Press, Burlington, Massachusetts(1992).
（３） Milner, R., Tofte, M. and Harper, R.: The Definition of Standard ML, The MIT Press,Cambridge, Massachusetts (1990).
（４） Tarditi, D., Morrisett, G., Cheng, P., Stone, C., Harper, R. and Lee, P.  : TIL: A Type-Directed Optimizing Compiler for ML, Proc. 1996 ACM SIGPLAN Conf. Programming Language  Design and Implementation, ACM Press, pp. 181-192 (1996).
（５） Floyd, R. W.: Assigning Meanings to Programs, Mathematical Aspects of Computer Science, Symposia in Applied Mathematics, Vol. 19, American Mathematical Society, pp. 19-32 (1967).
【図面の簡単な説明】
【００６８】
【図１】本発明に係る証明携帯プログラム配信方法の内容を示すフローチャート。
【図２】図１に示した証明携帯プログラム配信方法を実施するための証明携帯プログラム配信システムの構成を示すブロック図。
【図３】検証対象となるプログラムの一例を示す図。
【図４】一階述語論理体系Ｔの内容を示す図。
【図５】検証論理式生成器の内容を示す図。
【図６】図５に示した検証論理式生成器を用いて図３に示したプログラムに対する検証論理式が生成される様子を示す説明図。
【図７】図５に示した検証論理式生成器を用いて図３に示したプログラムに対する検証論理式が生成される様子を示す説明図。
【図８】図５に示した検証論理式生成器を用いて図３に示したプログラムに対する検証論理式が生成される様子を示す説明図。
【図９】図５に示した検証論理式生成器を用いて図３に示したプログラムに対して最終的に生成された検証論理式を示す図。
【図１０】検証論理式のサイズを示す説明図。
【図１１】対話型証明プロトコルの実行例を示す説明図。
【図１２】対話型証明プロトコルの実行例を示す説明図。
【図１３】ゼロ知識証明プロトコルの実行例を示す説明図。
【図１４】従来技術と本発明とを比較して示した説明図。
【図１５】従来の証明携帯プログラム配信方式の内容を示すフローチャート。
【図１６】従来の対話型証明携帯プログラム配信方式の内容を示すフローチャート。
【図１７】従来のゼロ知識証明携帯プログラム配信方式の内容を示すフローチャート。
【符号の説明】
【００６９】
１０…送信装置、２０…受信装置、１００…検証論理式生成部、１０１…安全性証明作成部、１０２…プログラム送信部、１０３、２０１…量化命題論理式還元部、１０４、２０２…算術部、１０５…ヒント（部分証明）作成・送信部、２００…プログラム受信部、２０３…ヒント（部分証明）受信・検証部、２０４…乱数生成・送信部、３００…ゼロ知識証明プロトコル部
【図１】
2006197323.tif 000013
【図２】
2006197323.tif 000014
【図３】
2006197323.tif 000015
【図４】
2006197323.tif 000016
【図５】
2006197323.tif 000017
【図６】
2006197323.tif 000018
【図７】
2006197323.tif 000019
【図８】
2006197323.tif 000020
【図９】
2006197323.tif 000021
【図１０】
2006197323.tif 000022
【図１１】
2006197323.tif 000023
【図１２】
2006197323.tif 000024
【図１３】
2006197323.tif 000025
【図１４】
2006197323.tif 000026
【図１５】
2006197323.tif 000027
【図１６】
2006197323.tif 000028
【図１７】
2006197323.tif 000029