(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023163699
(43)【公開日】2023-11-10
(54)【発明の名称】プログラム実行システム、プログラム実行方法、及びプログラム
(51)【国際特許分類】
H04L 9/32 20060101AFI20231102BHJP
G06F 21/51 20130101ALI20231102BHJP
G06F 21/62 20130101ALI20231102BHJP
H04L 9/10 20060101ALI20231102BHJP
G06F 21/74 20130101ALI20231102BHJP
【FI】
H04L9/32 200D
G06F21/51
G06F21/62
H04L9/10 Z
G06F21/74
【審査請求】未請求
【請求項の数】7
【出願形態】OL
(21)【出願番号】P 2022074768
(22)【出願日】2022-04-28
(71)【出願人】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(74)【代理人】
【識別番号】100124844
【弁理士】
【氏名又は名称】石原 隆治
(72)【発明者】
【氏名】中林 美郷
(72)【発明者】
【氏名】奥田 哲矢
(72)【発明者】
【氏名】千田 浩司
(72)【発明者】
【氏名】所司 翼
(72)【発明者】
【氏名】吉村 仁志
(57)【要約】 (修正有)
【課題】VM又はコンテナ単位の秘匿計算機構で動作するプログラムに入出力するデータの秘匿性等の安全性要件を含むプログラムの真正性を保証するシステム、方法及びプログラムを提供する。
【解決手段】データDを保持するデータ保持装置と、プログラムPを提供するプログラム提供装置と、秘匿計算機構により実現されるセキュア領域を生成するデータ処理装置と、を含むプログラム実行システムにおいて、APP_PEコンテナが、データ処理装置が生成した第1のセキュア領域上又はプログラム提供装置上で、プログラムPの真正性を検証するための証明情報PROOF(P)を生成し、APP_PVコンテナが、データ処理装置が生成した第2のセキュア領域上で、証明情報PROOF(P)を検証し、APP_PEコンテナが、プログラムPの真正性が検証された場合、第1のセキュア領域上で、データDに対してプログラムPを実行した結果P(D)を計算する。
【選択図】
図5
【特許請求の範囲】
【請求項1】
データDを保持するデータ保持装置と、プログラムPを提供するプログラム提供装置と、秘匿計算機構により実現されるセキュア領域を生成するデータ処理装置とが含まれるプログラム実行システムであって、
前記プログラム提供装置からの依頼に応じて前記データ処理装置によって生成された第1のセキュア領域上、又は、前記プログラム提供装置上で、前記プログラムPの真正性を検証するための証明情報PROOF(P)を生成するように構成されている証明処理部と、
前記データ保持装置からの依頼に応じて前記データ処理装置によって生成された第2のセキュア領域上で、前記証明情報PROOF(P)を検証するように構成されている証明検証処理部と、
前記証明情報PROOF(P)によって前記プログラムPの真正性が検証された場合、前記第1のセキュア領域上で、前記データDに対して前記プログラムPを実行した結果P(D)を計算するように構成されている計算部と、
を有するプログラム実行システム。
【請求項2】
前記真正性には、「暗号化されていない情報はプログラムPの外部に出力されないこと」を表す安全性が含まれ、
前記証明処理部は、
データが暗号化されているか否かを表す暗号化変数型を用いて、前記安全性を検証するための第1の検証論理式を生成し、前記第1の検証論理式に対する証明を前記証明情報PROOF(P)として生成するように構成されている、請求項1に記載のプログラム実行システム。
【請求項3】
データが特定の鍵で暗号化されているか否かを表す型を用いて、「プログラムP内部でデータDが特定の鍵で暗号化されていること」を表す要件を検証するための第2の検証論理式を生成し、前記第2の検証論理式に対する証明を生成するように構成されている秘匿情報データフロー処理部を更に有する請求項1又は2に記載のプログラム実行システム。
【請求項4】
データがk-匿名化又は(ε,δ)-差分プライバシを満たすか否かを表す型を用いて、「プログラムP内部でデータDがk-匿名化又は(ε,δ)-差分プライバシを満たすこと」を検証するための第3の検証論理式を生成し、前記第3の検証論理式に対する証明を生成するように構成されている秘匿情報データフロー処理部を更に有する請求項1又は2に記載のプログラム実行システム。
【請求項5】
前記セキュア領域は、TEEを含む前記秘匿計算機構によって生成された仮想マシン又はコンテナである、請求項1に記載のプログラム実行システム。
【請求項6】
データDを保持するデータ保持装置と、プログラムPを提供するプログラム提供装置と、秘匿計算機構により実現されるセキュア領域を生成するデータ処理装置とが含まれるプログラム実行システムが、
前記プログラム提供装置からの依頼に応じて前記データ処理装置によって生成された第1のセキュア領域上、又は、前記プログラム提供装置上で、前記プログラムPの真正性を検証するための証明情報PROOF(P)を生成する証明処理手順と、
前記データ保持装置からの依頼に応じて前記データ処理装置によって生成された第2のセキュア領域上で、前記証明情報PROOF(P)を検証する証明検証処理手順と、
前記証明情報PROOF(P)によって前記プログラムPの真正性が検証された場合、前記第1のセキュア領域上で、前記データDに対して前記プログラムPを実行した結果P(D)を計算する計算部手順と、
を実行するプログラム実行方法。
【請求項7】
データDを保持するデータ保持装置と、プログラムPを提供するプログラム提供装置と、秘匿計算機構により実現されるセキュア領域を生成するデータ処理装置とが含まれるプログラム実行システムに、
前記プログラム提供装置からの依頼に応じて前記データ処理装置によって生成された第1のセキュア領域上、又は、前記プログラム提供装置上で、前記プログラムPの真正性を検証するための証明情報PROOF(P)を生成する証明処理手順と、
前記データ保持装置からの依頼に応じて前記データ処理装置によって生成された第2のセキュア領域上で、前記証明情報PROOF(P)を検証する証明検証処理手順と、
前記証明情報PROOF(P)によって前記プログラムPの真正性が検証された場合、前記第1のセキュア領域上で、前記データDに対して前記プログラムPを実行した結果P(D)を計算する計算部手順と、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、情報通信分野における秘匿実行技術に関連するものである。
【背景技術】
【0002】
安全にプログラムを実行する技術として、CPU(Central Processing Unit)が隔離実行環境を提供するTEE(Trusted Execution Environment)を応用した秘匿計算機構が知られている。TEEでは安全なプログラム実行を行うことができるが、プログラムに入出力するデータの秘匿性等の安全性要件を含むプログラムの真正性が保証されているわけではない。これに対して、TEEで動作するプログラムの真正性を保証する技術として、プロセス単位のサーバサイドTEE(Intel(登録商標) SGX(第2世代以降))にPCC(Proof-Carrying Code)の仕組みを実装する技術が知られている(非特許文献1)。
【先行技術文献】
【非特許文献】
【0003】
【非特許文献1】Liu et al. "Practical and Efficient in-Enclave Verification of Privacy Compliance", DSN2021
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上記の従来技術は、安全性要件の定義がIntel SGX特有であり、VM(Virtual Machine)/コンテナ単位のTEEに適用することはできない。
【0005】
本開示は、上記の点に鑑みてなされたもので、VM又はコンテナ単位の秘匿計算機構で動作するプログラムに入出力するデータの秘匿性等の安全性要件を含むプログラムの真正性を保証する技術を提供する。
【課題を解決するための手段】
【0006】
本開示の一態様によるプログラム実行システムは、データDを保持するデータ保持装置と、プログラムPを提供するプログラム提供装置と、秘匿計算機構により実現されるセキュア領域を生成するデータ処理装置とが含まれるプログラム実行システムであって、前記プログラム提供装置からの依頼に応じて前記データ処理装置によって生成された第1のセキュア領域上、又は、前記プログラム提供装置上で、前記プログラムPの真正性を検証するための証明情報PROOF(P)を生成するように構成されている証明処理部と、前記データ保持装置からの依頼に応じて前記データ処理装置によって生成された第2のセキュア領域上で、前記証明情報PROOF(P)を検証するように構成されている証明検証処理部と、前記証明情報PROOF(P)によって前記プログラムPの真正性が検証された場合、前記第1のセキュア領域上で、前記データDに対して前記プログラムPを実行した結果P(D)を計算するように構成されている計算部と、を有する。
【発明の効果】
【0007】
開示の技術によれば、VM又はコンテナ単位の秘匿計算機構で動作するプログラムに入出力するデータの秘匿性等の安全性要件を含むプログラムの真正性を保証する技術が提供される。
【図面の簡単な説明】
【0008】
【
図1】本発明の実施の形態におけるシステム構成例を示す図である。
【
図2】データ処理装置の機能構成例を示す図である。
【
図3】セキュア領域での処理のイメージを示す図である。
【
図4】実施例1における処理の流れを示すシーケンス図(1/2)である。
【
図5】実施例1における処理の流れを示すシーケンス図(2/2)である。
【
図7】証明検証処理部の機能構成例を示す図である。
【
図8】実施例2における処理の流れを示すシーケンス図である。
【
図9】秘匿情報データフロー証明処理部の機能構成例を示す図である。
【
図10】実施例3における処理の流れを示すシーケンス図である。
【
図11】装置のハードウェア構成例を示す図である。
【発明を実施するための形態】
【0009】
以下、図面を参照して本発明の実施の形態(本実施の形態)を説明する。以下で説明する実施の形態は一例に過ぎず、本発明が適用される実施の形態は、以下の実施の形態に限られるわけではない。
【0010】
以下では、データとプログラムを別々のユーザが所持しており、信頼しないクラウド事業者が提供するクラウド上でVM又はコンテナ単位の秘匿計算機構によりデータに対するプログラムの実行結果を計算することを想定し、このときに当該プログラムの真正性を保証する場合について説明する。これにより、データとプログラムがクラウド事業者に漏れないことに加えて、データを所持するユーザにはプログラムが漏れず、かつ、プログラムを所持するユーザにはデータが漏れず、またそのプログラムの真正性が保証される。なお、以下の説明において、プログラムをPと表記し、Pの処理対象となるデータをDと表記し、Dに対するPの実行結果をP(D)と表記する。
【0011】
(システム構成例)
図1に本発明の実施の形態におけるプログラム実行システムの構成例を示す。
図1に示すように、本実施の形態におけるプログラム実行システムは、データ処理装置100、データ保持装置200、プログラム提供装置300を有する。
【0012】
データ処理装置100は物理マシン(コンピュータ)であることを想定するが、データ保持装置200、プログラム提供装置300はそれぞれ物理マシンであってもよいし、クラウド上の仮想マシンであってもよい。また、データ保持装置200とプログラム提供装置300はそれぞれ、物理マシンあるいは仮想マシン上で動作する機能(例:Webブラウザ)であってもよい。更に、データ処理装置100は複数の物理マシンで構成されるシステムであってもよい(特に、後述する2つのアプリケーションプログラムAPP_PE、APP_PVがそれぞれ動作する2つのVM/コンテナが異なる物理マシン上にそれぞれ生成されてもよい。)。
【0013】
本実施の形態では、データ処理装置100は、データ処理を既存のOS(Operating System)から隔離して実行する環境を提供するTEEと呼ばれる機能の応用により秘匿計算機構(又は、秘密計算機構と呼んでもよい。)を備える。本実施の形態では、TEEとして、AMD(登録商標)のSEVを想定する。ただし、これは一例であって、本実施の形態はどのようなTEEにも適用可能である。例えば、IntelのSGXやTDX、Arm(登録商標)のTrustZone(登録商標)、ARM Confidential Compute Architecture等にも本実施の形態を適用可能である。
【0014】
図1に示すように、データ処理装置100とデータ保持装置200との間、及びデータ処理装置100とプログラム提供装置300との間にはセキュアチャネル400が構築され、データやプログラムを安全に送受信できる。このセキュアチャネル400は、例えば、SEVにおけるRemote Attestationと呼ばれる遠隔認証プロトコルにより構築される。ただし、これは一例であって、セキュアチャネル400をどのような手段で構築してもよい。
【0015】
本実施の形態では、プログラム提供装置300からプログラムPがデータ処理装置100に送信され、データ保持装置200からデータDがデータ処理装置100に送信され、データ処理装置100がプログラムPによりデータDを処理し、実行結果P(D)をデータ保持装置200に提供する。
【0016】
データ処理装置100は、その秘匿計算機構により、プログラムPとデータDをセキュア領域の外部(例えば、データ処理装置100が動作しているクラウド上)に漏らさないようになっている。本実施の形態では、これに加えて、データ保持装置200にプログラムPが漏れず、かつ、プログラム提供装置300にデータDが漏れない仕組みを実現していると共に、プログラムPの真正性を実現している。以下では、プログラムPの真正性を「プログラムPが正しく安全に動作すること」と定義し、その安全性を「暗号化されていない情報はプログラムPの外部に出力されないこと」と定義する。そして、この真正性をPCCの仕組みにより証明及び検証する。ただし、これらの定義は一例であって、これ以外の定義も可能である。例えば、安全性を「"暗号化されていない情報はプログラムPの外部に出力されないこと"がPCCの仕組みにより検証可能であること」「意図した鍵IDで暗号化されていない情報は外部に出力されない」「匿名化や差分プライバシ等による匿名加工がなされていない情報は外部に出力されない」等と定義してもよい。またこれら以外の真正性や安全性要件の定義であってもよい。
【0017】
これにより、本実施の形態のプログラム実行システムでは、秘匿計算機構をデータ流通に適用したユースケースにおいて、機密性の高いデータDを有するデータホルダ(データ保持装置200)と機密性の高いプログラムPを有するプログラムオーサ(プログラム提供装置300)が、データ/プログラムを互いに秘匿したまま組み合わせて実行可能となる。また、データホルダは、プログラムPの真正性を検証した上で、データDに対してプログラムPを実行させることが可能となる。
【0018】
(データ処理装置の構成例)
図2に、データ処理装置100の機能構成例を示す。
図2に示すように、データ処理装置100は、機密性が保たれた保護領域であるセキュア領域110と、他の装置(例:データ保持装置200、プログラム提供装置300)とデータ通信を行う通信部120と、セキュア領域110の外にあるストレージ等にデータを格納するデータ格納部130と、セキュア領域110の外で各種のデータ処理を行うデータ処理部140とを有する。
【0019】
セキュア領域110内のデータやプログラムについては、外部からその内容を知ることができない。セキュア領域110の外部では、データ格納部130及びデータ処理部140によってそれぞれ通常のデータ格納及びデータ処理(プログラムの実行)を行うことが可能である。通信部120によってデータ通信やその際のアクセス制御を行うことも可能である。
【0020】
セキュア領域110内では機密性を保ったままデータ格納、データ処理(プログラムの実行)が可能である。
図2には、セキュア領域110内でこれらを行う機能部として、セキュアデータ格納部111、セキュア処理部112が示されている。セキュアデータ格納部111は、セキュア領域110内で機密性を保ったまま記憶領域に各種データを格納する。また、セキュア処理部112は、セキュア領域110内でデータ処理(例えば、Pの起動・実行、共有鍵(共通鍵)の生成(計算)、暗号化、復号、署名検証等)を行う。
【0021】
セキュア領域110自体は既存技術により実現可能である。セキュア領域110を実現する既存技術としてどのような技術を使用してもよい。例えば、メインのCPUやメモリとはハードウェア的に独立した別チップとしてセキュア領域110を実現してもよいし、暗号技術・認証技術を活用してソフトウェア的にセキュア領域110を実現してもよい。ソフトウェア的にセキュア領域110を実現する技術として、例えば、前述したSEVがあり、本実施の形態では一例としてSEVを使用することを想定している。この場合、セキュア領域110は、データ処理装置100において、暗号化されたVM又はコンテナとして生成される。以下、セキュア領域110は暗号化コンテナとして生成されているものとして説明するが、セキュア領域110が暗号化VMとして生成されている場合でも本実施の形態を同様に適用することが可能である。なお、例えば、複数の暗号化コンテナが生成された場合には複数のセキュア領域110が存在することになり、この場合は、セキュア領域110-1、セキュア領域110-2等と表記する。
【0022】
図3にセキュア領域110でのデータ処理のイメージを示す。なお、本実施の形態において、「HybEnc」は公開鍵ベースの暗号方式による暗号化、「Enc」は共有鍵ベースの暗号方式による暗号化を意味する。例えば、HybEnc(D)は、暗号化されたデータである。
【0023】
図3に示すように、データ処理装置100は、HybEnc(D)をデータ保持装置200から受信すると共に、HybEnc(P)をプログラム提供装置300から受信する。
【0024】
セキュア領域110において、HybEnc(D)とHybEnc(P)はそれぞれ復号され、DとPが得られる。更に、セキュア領域110において、P(D)が計算された後、HybEnc(P(D))が計算される。HybEnc(P(D))は、データ保持装置200に送信される。
【0025】
このとき、後述する各実施例では、PCCと呼ばれる仕組みを導入し、プログラムPが正しく安全に動作することを検証する。これにより、プログラムPの安全性(つまり、「暗号化されていない情報はプログラムPの外部に出力されないこと」という安全性)が保証されるため、例えば、不正なプログラムが実行され、データDが漏洩してしまう事態等を防止することができる。
【0026】
このように、セキュア領域110での計算と暗号化通信、及びPCCの組み合わせにより、プログラムP及びデータDがデータ処理装置100に漏れないことに加えて、プログラムPがデータ保持装置200に漏れず、かつ、データDがプログラム提供装置300に漏れず、更にプログラムPの真正性を保証する仕組みを実現している。
【0027】
以下、本実施の形態における処理フローの例として、実施例1~3を説明する。以下の各実施例において、共有鍵の生成(共有)においては、Remote Attestationの仕組みを使用することを想定している。より具体的には、楕円曲線ディフィーヘルマン鍵共有プロトコル(ECDHKE)に、ユーザ(データ保持装置200、プログラム提供装置300)とコンテナで互いに認証する仕組みを差し込んだプロトコルを使用する。本実施の形態では、これを相互認証付きECDHEと呼ぶ。
【0028】
コンテナの認証においては、第三者検証機関(例:AMD Verification Service)が介在するが、第三者検証機関が介在して共有鍵の生成を行う処理自体は、Remote Attestationとして既存技術であるため、実施例1~3の説明では、Remote Attestationに関わる処理の説明は概要のみとし、詳細についてはその説明を省略している。
【0029】
以下の説明において、APP_PE、APP_PVはコンテナ上で動作するアプリケーションプログラムであり、OSS(Open Source Software)として公開されている。プログラムPはAPP_PE上で実行される。また、実施例1及び3ではPCC証明プログラムがAPP_PEに含まれ、実施例2ではPCC証明プログラムがプログラム提供装置300に搭載されているものとする。一方で、PCC検証プログラムはAPP_PVに含まれるものとする。PCC証明プログラムはプログラムPが「暗号化されていない情報はプログラムPの外部に出力されないこと」という安全性を満たすことを表す証明情報PROOF(P)を作成するプログラムであり、PCC検証プログラムはPROOF(P)が正しいか否かを検証するプログラムである。なお、PCCの詳細に関しては、例えば、参考文献1~3等を参照されたい。
【0030】
また、実施例3では秘匿情報データフロー証明プログラムがAPP_PEに含まれているものとする。秘匿情報データフロー証明プログラムは秘匿情報(データD)が或る特定の鍵によりプログラムD内部で暗号化されていることを表す証明情報を作成するプログラムである。これにより、実施例3では、その証明情報から秘匿情報(データD)がプログラムD内部で保護されていることをデータホルダが検証可能となる。
【0031】
また、PKp、SKpはそれぞれ、プログラム提供装置300の公開鍵、秘密鍵である。PKd、SKdはそれぞれ、データ保持装置200の公開鍵、秘密鍵である。また、HybEnc(A,B)はB(公開鍵)でAを暗号化した情報を意味し、Enc(A,B)はB(共有鍵)でAを暗号化した情報を意味する。H(A)は、Aのハッシュ値を意味する。Sig(A,B)は、B(秘密鍵)によるAに対する署名を意味する。MAC(A,B)は、B(共有鍵)を用いたAに対するメッセージ認証コードを意味する。
【0032】
また、以下の説明において、コンテナ起動後は、当該コンテナ上で動作するプログラムの入れ替えは無いものとする。これにより、例えば、或るプログラムの実行証拠を示しつつ、他の或るプログラムの実行結果を返すような不正が無いことが保証される。
【0033】
(実施例1)
以下、
図4及び
図5を参照して、実施例1を説明する。
図4及び
図5の処理フローの前提として、データ保持装置200は、APP_PV、D、PKd、SKdを保持し、プログラム提供装置300は、APP_PE、P、PKp、SKpを保持している。
【0034】
S101において、データ保持装置200は、HybEnc(D,PKd)をデータ処理装置100に送信する。このHybEnc(D,PKd)は、データ格納部130によってデータ処理装置100のストレージ等といったパブリックな記憶領域に格納される。
【0035】
S102において、プログラム提供装置300は、APP_PE、HybEnc(P,PKp)をデータ処理装置100に送信する。これらのAPP_PE、HybEnc(P,PKp)は、データ格納部130によってデータ処理装置100のストレージ等といったパブリックな記憶領域に格納される。なお、APP_PE、HybEnc(P,PKp)はプログラム提供装置300によって第三者検証機関にも登録され、公開される。
【0036】
S103において、プログラム提供装置300は、APP_PEを動作させるためのコンテナ起動依頼をデータ処理装置100に送信する。
【0037】
S104において、データ処理装置100は、APP_PEを動作させるためのコンテナを生成及び起動し、このコンテナを暗号化する。これにより、APP_PEが動作する暗号化コンテナ(セキュア領域110-1)が生成されたことになる。以下、ここで生成されたコンテナを便宜上「APP_PEコンテナ110-1」と呼ぶ。
【0038】
ここで、APP_PEコンテナ110-1は、APP_PEに含まれるPCC証明プログラムによって実現される証明処理部500を有する。証明処理部500の構成例を
図6に示す。
図6に示すように、証明処理部500には、プログラムPを入力して検証論理式を出力する検証論理式生成処理部510と、当該検証論理式を入力してPROOF(P)を出力する自動証明処理部520とが含まれる。検証論理式生成処理部510には「暗号化されていない情報はプログラムPの外部に出力されないこと」という安全性を表す安全性要件も入力されるが、本実施の形態ではこれ以外の安全性要件は考えないため、安全性要件の入力は省略している。なお、「暗号化されていない情報はプログラムPの外部に出力されないこと」という安全性を表す安全性要件は、既知のP0要件(例えば、非特許文献1参照)という安全性要件を拡張したものであるため、「拡張P0要件」等と呼ばれてもよい。
【0039】
検証論理式生成処理部510には、プログラムPの字句解析を行う字句解析部511と、字句解析の結果を構文解析する構文解析部512と、構文解析の結果から検証論理式を生成する検証論理式生成部513とが含まれる。字句解析部511、構文解析部512及び自動証明処理部520は既存技術と同様であるため、以下では、検証論理式生成部513の詳細について説明する。
【0040】
・プログラム構文
構文解析部512による構文解析の結果、プログラムPは以下の構文で表されるものとする。
【0041】
【数1】
ここで、「|」は論理和(OR演算子)を表す。また、「skip」は「何もしない」、「x:=e」は「eをxに代入」、「y:=encr(x)」は「xを暗号化してyに代入」、「write(x)」は「xを書き出す」、「if x then P
1 else P
2」は「xが真ならP
1、そうでなければP
2」をそれぞれ表す。
【0042】
また、表現eは以下で表されるものとする。
【0043】
【数2】
ここで、「x」は変数、「i」は整数、「bop(e
1,e
2)」は「e
1とe
2の二項演算」をそれぞれ表す。
【0044】
・論理体系
暗号化変数と呼ぶ型を以下で定義する。
【0045】
【数3】
ここで、「Pl」は平文、「En」は暗号文をそれぞれ表す。この暗号化変数によって情報が暗号化されているか否かが管理される。
【0046】
論理式を以下で定義する。
【0047】
【数4】
この論理式は、「型環境Γの下で、表現eは型tを持つ」ことを意味する。なお、型環境とは、変数から型へのpartial function(変数の型を保存)のことである。
【0048】
論理式の一例を以下に示す。
【0049】
【数5】
これは、「型環境{x:En}の下で、表現xは型Enを持つ」ことを意味する。
【0050】
また、論理式の他の例を以下に示す。
【0051】
【数6】
これは、「型環境{y:Pl}の下で、表現y+1は型Plを持つ」ことを意味する。
【0052】
次に、推論規則を以下で定義する。
【0053】
【数7】
なお、式(1)は変数に関する推論規則、式(2)は整数に関する推論規則、式(3)は二項演算に関する推論規則をそれぞれ表す。
【0054】
・検証論理式生成アルゴリズム
上記のプログラム構文及び論理体系の下で、検証論理式生成部513は、プログラム構文で表されたプログラムPを入力として、以下のアルゴリズムにより検証論理式を生成及び出力する。
【0055】
【0056】
【数9】
は真(TRUE)を表す。なお、偽(FALSE)は⊥で表される。
【0057】
上記の数8に示すアルゴリズムによって生成及び出力された検証論理式に関して、その検証論理式が推論規則を用いて導出できるならば、入力としたプログラムPは拡張P0要件を満たす。なお、この導出に用いられた推論規則の列が、その検証論理式の証明情報PROOF(P)であり、自動証明処理部520によって計算及び出力される。
【0058】
拡張P0要件を満たすプログラムPの例としては、例えば、「x:=1;y:=encr(x);write(y);skip」というプログラム構文で表されるプログラムPが挙げられる。このプログラムPを上記の数8に示すアルゴリズムに入力すると、以下のように検証論理式が生成される。
【0059】
【数10】
この検証論理式は、式(1)に示す推論規則と式(2)に示す推論規則とを用いて導出可能であり、例えば、真(TRUE)となるtとしてt=Plが存在する。
【0060】
一方で、拡張P0要件を満たさないプログラムPの例としては、例えば、「x:=1;write(x);skip」というプログラム構文で表されるプログラムPが挙げられる。このプログラムPを上記の数8に示すアルゴリズムに入力すると、以下のように検証論理が生成される。
【0061】
【数11】
この検証論理式は、式(1)~式(3)に示す推論論理式を用いて導出できない。
【0062】
図4及び
図5の処理フローの説明に戻る。S105において、データ保持装置200は、APP_PVをデータ処理装置100に送信する。このAPP_PVは、データ格納部130によってデータ処理装置100のストレージ等といったパブリックな記憶領域に格納される。
【0063】
S106において、データ保持装置200は、APP_PVを動作させるためのコンテナ起動依頼をデータ処理装置100に送信する。
【0064】
S107において、データ処理装置100は、APP_PVを動作させるためのコンテナを生成及び起動し、このコンテナを暗号化する。これにより、APP_PVが動作する暗号化コンテナ(セキュア領域110-2)が生成されたことになる。以下、ここで生成されたコンテナを便宜上「APP_PVコンテナ110-2」と呼ぶ。
【0065】
ここで、APP_PVコンテナ110-2は、APP_PVに含まれるPCC検証プログラムによって実現される証明検証処理部600を有する。証明検証処理部600の構成例を
図7に示す。
図7に示すように、証明検証処理部600は、プログラムPとその証明情報PROOF(P)とを入力してPROOF検証結果を出力する。PROOF検証結果とは、証明情報PROOF(P)が正しいか否かを表す情報であり、例えば、PROOF(P)が正しい場合は真(TRUE)、そうでない場合は偽(FALSE)を取る。なお、証明検証処理部600は既存技術と同様であるため、その詳細な説明は省略する。
【0066】
図4及び
図5の処理フローの説明に戻る。S108において、相互認証付きECDHEにより、APP_PEコンテナ110-1とプログラム提供装置300はそれぞれ共有鍵Kp2pを生成(計算)する。このとき、APP_PEコンテナ110-1はPKpを用いてSKpによる署名を検証することでユーザ(プログラム提供装置300)を認証し、プログラム提供装置300はAPP_PEコンテナ110-1からのハッシュ値H(APP_PE+HybEnc(P,PKp))を、第三者検証機関を介して検証することでAPP_PEコンテナ110-1を認証する。なお、「+」は2つのデータをまとめたデータを作成する操作を表し、例えば、ビット列の連結操作等である。
【0067】
S109において、相互認証付きECDHEにより、APP_PEコンテナ110-1とデータ保持装置200はそれぞれ共有鍵Kd2pを生成(計算)する。このとき、APP_PEコンテナ110-1はPKdを用いてSKdによる署名を検証することでユーザ(データ保持装置200)を認証し、データ保持装置200はAPP_PEコンテナ110-1からのハッシュ値H(APP_PE+HybEnc(P,PKp))を、第三者検証機関を介して検証することでAPP_PEコンテナ110-1を認証する。
【0068】
S110において、相互認証付きECDHEにより、APP_PVコンテナ110-2とデータ保持装置200はそれぞれ共有鍵Kd2dを生成(計算)する。このとき、APP_PVコンテナ110-2はPKdを用いてSKdによる署名を検証することでユーザ(データ保持装置200)を認証し、データ保持装置200はAPP_PVコンテナ110-2からのハッシュ値H(APP_PV)を、第三者検証機関を介して検証することでAPP_PVコンテナ110-2を認証する。
【0069】
S111において、相互認証付きECDHEにより、APP_PVコンテナ110-2とプログラム提供装置300はそれぞれ共有鍵Kp2dを生成(計算)する。このとき、APP_PVコンテナ110-2はPKpを用いてSKpによる署名を検証することでユーザ(プログラム提供装置300)を認証し、プログラム提供装置300はAPP_PVコンテナ110-2からのハッシュ値H(APP_PV)を、第三者検証機関を介して検証することでAPP_PVコンテナ110-2を認証する。
【0070】
S112において、プログラム提供装置300は、Enc(SKp,Kp2p)、Sig(H(Enc(SKp,Kp2p)),SKp)をAPP_PEコンテナ110-1に送信する。なお、このとき、プログラム提供装置300は、更に、Enc(PKd-list,Kp2p)、Sig(Enc(PKd-list,Kp2p),SKp)をAPP_PEコンテナ110-1に送信してもよい。ここで、PKd-listはプログラム提供装置300がプログラムPの実行を許可するデータホルダ(データ保持装置200)の公開鍵のリストである。
【0071】
ただし、これよりも前の処理でPKd-listがAPP_PEコンテナ110-1に渡されてもよい。例えば、上記のS108でPKd-listがAPP_PEコンテナ110-1に渡されてもよい。
【0072】
S113において、データ保持装置200は、Enc(SKd,Kd2d)、Sig(H(Enc(SKd,Kd2d)),SKd)をAPP_PVコンテナ110-2に送信する。なお、このとき、データ保持装置200は、更に、Enc(PKp-list,Kd2d)、Sig(Enc(PKp-list,Kd2d),SKd)をAPP_PVコンテナ110-2に送信してもよい。ここで、PKp-listはデータ保持装置200がプログラムPの実行を許可するプログラムオーサ(プログラム提供装置300)の公開鍵のリストである。
【0073】
ただし、これよりも前の処理でPKp-listがAPP_PVコンテナ110-2に渡されてもよい。例えば、上記のS110でPKp-listがAPP_PVコンテナ110-2に渡されてもよい。
【0074】
S114において、APP_PEコンテナ110-1は、PKpによりSig(H(Enc(SKp,Kp2p)),SKp)を検証すると共に、その検証に成功した場合はKp2pによりEnc(SKp,Kp2p)を復号してSKpを取り出す。これにより、プログラム提供装置300の秘密鍵(署名鍵)SKpがAPP_PEコンテナ110-1に預けられたことになる。なお、SKpは、APP_PEコンテナ110-1のセキュアデータ格納部111によってセキュアな記憶領域に格納される。
【0075】
S115において、APP_PVコンテナ110-2は、PKdによりSig(H(Enc(SKd,Kd2d)),SKd)を検証すると共に、その検証に成功した場合はKd2dによりEnc(SKd,Kd2d)を復号してSKdを取り出す。これにより、データ保持装置200の秘密鍵(署名鍵)SKdがAPP_PVコンテナ110-2に預けられたことになる。なお、SKdは、APP_PVコンテナ110-2のセキュアデータ格納部111によってセキュアな記憶領域に格納される。
【0076】
S116において、APP_PEコンテナ110-1は、SKpによりHybEnc(P,PKp)を復号してプログラムPを取り出し、当該プログラムPをAPP_PEコンテナ110-1上で起動させる。なお、プログラムPは、APP_PEコンテナ110-1のセキュア処理部112によって起動される。
【0077】
S117において、APP_PVコンテナ110-2は、SKdによりHybEnc(D,PKd)を復号してDを取り出す。
【0078】
S118において、相互認証付きECDHEにより、APP_PEコンテナ110-1とAPP_PVコンテナ110-2はそれぞれ共有鍵Kta2taを生成(計算)する。このとき、APP_PEコンテナ110-1はプログラムオーサ(プログラム提供装置300)の代理でSKpにより署名を行って、ハッシュ値H(APP_PE+HybEnc(P,PKp))と共にAPP_PVコンテナ110-2に送信する。そして、APP_PVコンテナ110-2はPKp-listに含まれる公開鍵PKpで当該署名を検証すると共に、当該ハッシュ値H(APP_PE+HybEnc(P,PKp))を、第三者検証機関を介して検証することでプログラムオーサ(プログラム提供装置300)とAPP_PEコンテナ110-1を認証する。一方で、APP_PVコンテナ110-2はデータホルダ(データ保持装置200)の代理でSKdにより署名を行って、ハッシュ値H(APP_PV)と共にAPP_PEコンテナ110-1に送信する。そして、APP_PEコンテナ110-1はPKd-listに含まれる公開鍵PKdで当該署名を検証すると共に、当該ハッシュ値H(APP_PV)を、第三者検証機関を介して検証することでデータホルダ(データ保持装置200)とAPP_PVコンテナ110-2を認証する。
【0079】
このように、APP_PEコンテナ110-1とAPP_PVコンテナ110-2はそれぞれ相互に認証すると共に、プログラムオーサとデータホルダの代理としても相互に代理で認証する。
【0080】
S119において、APP_PEコンテナ110-1は、証明処理部500によりプログラムPから証明情報PROOF(P)を生成する。すなわち、APP_PEコンテナ110-1は、プログラムPを検証論理式生成処理部510に入力し、字句解析部511による字句解析と構文解析部512による構文解析を行った後、この構文解析後のプログラム構文で表されたプログラムPを検証論理式生成部513に入力して検証論理式を生成する。そして、APP_PEコンテナ110-1は、この検証論理式を自動証明処理部520に入力することで、証明情報PROOF(P)を生成及び出力する。なお、APP_PEコンテナ110-1はPROOF(P)を事前に計算しておいてもよい。
【0081】
S120において、APP_PEコンテナ110-1は、PROOF(P)とPとをAPP_PVコンテナ110-2に送信する。
【0082】
S121において、APP_PVコンテナ110-2は、証明検証処理部600によりPROOF(P)とPから、PROOF(P)が正しいか否かを検証する。すなわち、APP_PVコンテナ110-2は、PROOF(P)とPを証明検証処理部600に入力することで、PROOF検証結果を出力する。
【0083】
S122において、APP_PVコンテナ110-2は、MAC(PROOF検証結果,Kd2d)をデータ保持装置200に送信する。これにより、データホルダ(データ保持装置200)は、PROOF検証結果が、PROOF(P)が正しいことを示すものであるか否かを知ることができる。
【0084】
S123において、PROOF検証結果が、PROOF(P)が正しいことを示すものである場合、APP_PVコンテナ110-2は、Enc(D,Kta2ta)をAPP_PEコンテナ110-1に送信する。
【0085】
S124において、APP_PEコンテナ110-1は、Kta2taによりEnc(D,Kta2ta)を復号してDを取り出す。
【0086】
S125において、APP_PEコンテナ110-1は、P(D)を計算する。なお、P(D)は、APP_PEコンテナ110-1のセキュア処理部112により計算される。
【0087】
S126において、APP_PEコンテナ110-1は、Enc(P(D),Kta2ta)をAPP_PVコンテナ110-2に送信する。
【0088】
S127において、APP_PVコンテナ110-2は、Kta2taによりEnc(P(D),Kta2ta)を復号してP(D)を取り出した後、Enc(P(D),Kd2d)をデータ保持装置200に送信する。これにより、データ保持装置200は、Kd2dによりEnc(P(D),Kd2d)を復号してP(D)を取り出すことができる。
【0089】
S128において、APP_PEコンテナ110-1は、D及びP(D)を削除する。
【0090】
S129において、APP_PEコンテナ110-1は、D及びP(D)を削除したことをプログラム提供装置300に通知する。
【0091】
S130において、APP_PVコンテナ110-2は、P及びPROOF(P)を削除する。
【0092】
S131において、APP_PVコンテナ110-2は、P及びPROOF(P)を削除したことをデータ保持装置200に通知する。
【0093】
実施例1によれば、主にプログラムオーサ(プログラム提供装置300)の視点で、P、Dをデータ処理装置100に対して秘匿しつつ、かつ、Pをデータホルダ(データ保持装置200)に対して秘匿しつつ、D、P(D)をプログラムオーサ(プログラム提供装置300)が与り知ることなく、P(D)の実行結果をデータホルダ(データ保持装置200)に提供できる。更に、そのプログラムPの真正性(つまり、プログラムPが正しく安全に動作すること)がデータホルダ(データ保持装置200)に対して保証される。
【0094】
(実施例2)
以下、
図8を参照して、実施例2を説明する。実施例2では、PCC証明プログラムがプログラム提供装置300に搭載されており、証明処理部500をプログラム提供装置300が有している点が実施例1と異なる。
図8の処理フローの前提として、データ保持装置200は、APP_PV、D、PKd、SKdを保持し、プログラム提供装置300は、APP_PE、P、PKp、SKpを保持している。
【0095】
図4のS101~S118が実行された後、S201において、プログラム提供装置300は、証明処理部500によりプログラムPから証明情報PROOF(P)を生成する。すなわち、プログラム提供装置300は、プログラムPを検証論理式生成処理部510に入力し、字句解析部511による字句解析と構文解析部512による構文解析を行った後、この構文解析後のプログラム構文で表されたプログラムPを検証論理式生成部513に入力して検証論理式を生成する。そして、プログラム提供装置300は、この検証論理式を自動証明処理部520に入力することで、証明情報PROOF(P)を生成及び出力する。なお、プログラム提供装置300はPROOF(P)を事前に計算しておいてもよい。
【0096】
S202において、プログラム提供装置300は、PROOF(P)をAPP_PEコンテナ110-1に送信する。
【0097】
以降のS203~S214は、
図5のS120~S131とそれぞれ同様であるため、その説明を省略する。
【0098】
実施例2によれば、実施例1と同様に、主にプログラムオーサの視点で、P、Dをデータ処理装置100に対して秘匿しつつ、かつ、Pをデータホルダに対して秘匿しつつ、D、P(D)をプログラムオーサが与り知ることなく、P(D)の実行結果をデータホルダに提供できる。更に、そのプログラムPの真正性がデータホルダに対して保証される。加えて、そのプログラムPの真正性を証明するための証明情報をプログラム提供装置300で計算することができる。
【0099】
(実施例3)
実施例1及び2では、「暗号化されていない情報はプログラムPの外部に出力されないこと」という安全性要件の下で、秘匿情報(データD)が格納される変数が暗号化されている否かを考えたが、単に暗号化されているか否かではなく、特定の鍵で暗号化されているか否かを検証したい場合がある。特定の鍵で暗号化されていることが検証できれば、例えば、特定のユーザや特定のユーザグループのみが復号可能であることが保証できるためである。
【0100】
そこで、実施例3では、プログラムPのソースコード中の変数のうち、秘匿情報(データD)が格納される変数には鍵アノテーションが付与されていることを想定し、「プログラムP内部で秘匿情報が特定の鍵で暗号化されていること」を検証可能にする仕組みを導入する。ここで、鍵アノテーションとは、それが付与された変数の値を暗号化する鍵IDを表す情報のことである。なお、鍵IDは秘密鍵の鍵IDを想定しているが、これに限られるものではなく、秘密鍵に対応する公開鍵であってもよい。
【0101】
ここで、APP_PEコンテナ110-1は、秘匿情報データフロー証明プログラムによって実現される秘匿情報データフロー証明処理部700を有する。秘匿情報データフロー証明処理部700の構成例を
図9に示す。
図9に示すように、秘匿情報データフロー証明処理部700は、プログラムPと鍵IDとを入力して、プログラムP内部で秘匿情報(データD)がその鍵IDで暗号化されていることの証明情報を表す秘匿情報データフロー証明(P)を出力する。この秘匿情報データフロー証明(P)を検証することで、データホルダは、秘匿情報(データD)がプログラムP内部でその鍵IDで保護されていることを検証できる。
【0102】
これを実現するためには、例えば、n個の鍵IDを「鍵k1」、「鍵k2」、・・・、「鍵kn」等とした場合、実施例1で定義した暗号化変数を「t::=Pl|鍵k1|鍵k2|・・・|鍵kn」等と拡張した上で、それに合わせて拡張したPCCのアルゴリズムにより、秘匿情報データフロー証明処理部700が、上記の秘匿情報データフロー証明(P)を生成及び出力すればよい。
【0103】
以下、
図10を参照して、実施例3の処理フローを説明する。
図10の処理フローの前提として、データ保持装置200は、APP_PV、D、PKd、SKdを保持し、プログラム提供装置300は、APP_PE、P、PKp、SKpを保持している。
【0104】
図4のS101~S118が実行された後、S301~S304が実行される。S301~S304は、
図5のS119~S122とそれぞれ同様であるため、その説明を省略する。
【0105】
S305において、PROOF検証結果が、PROOF(P)が正しいことを示すものである場合、APP_PVコンテナ110-2は、Enc(D,Kta2ta)と鍵IDとをAPP_PEコンテナ110-1に送信する。
【0106】
S306において、APP_PEコンテナ110-1は、秘匿情報データフロー証明処理部700によりプログラムP及び鍵IDから秘匿情報データフロー証明(P)を生成(計算)する。
【0107】
S307において、APP_PEコンテナ110-1は、Kta2taによりEnc(D,Kta2ta)を復号してDを取り出す。
【0108】
S308において、APP_PEコンテナ110-1は、P(D)を計算する。なお、P(D)は、APP_PEコンテナ110-1のセキュア処理部112により計算される。
【0109】
S309において、APP_PEコンテナ110-1は、Enc(P(D)+秘匿情報データフロー証明(P),Kta2ta)をAPP_PVコンテナ110-2に送信する。
【0110】
S310において、APP_PVコンテナ110-2は、Kta2taによりEnc(P(D)+秘匿情報データフロー証明(P),Kta2ta)を復号してP(D)及び秘匿情報データフロー証明(P)を取り出した後、Enc(P(D)+秘匿情報データフロー証明(P),Kd2d)をデータ保持装置200に送信する。これにより、データ保持装置200は、Kd2dによりEnc(P(D)+秘匿情報データフロー証明(P),Kd2d)を復号してP(D)及び秘匿情報データフロー証明(P)を取り出すことができる。したがって、データホルダは、この秘匿情報データフロー証明(P)を検証し、プログラムP内部で秘匿情報(データD)が特定の鍵で暗号化されていることを確認することができる。なお、秘匿情報データフロー証明(P)の検証は、PCCの証明情報の検証と同様の方法により行うことができる。なお、例えば、S305において、鍵IDのみを先に送信し、APP_PEコンテナ110-1から秘匿情報データフロー証明(P)を受け取って検証した後に、Enc(D,Kta2ta)を当該APP_PEコンテナ110-1に送信するようにしてもよい。
【0111】
以降のS311~S314は、
図5のS128~S131とそれぞれ同様であるため、その説明を省略する。
【0112】
実施例3によれば、実施例1に加えて、プログラムP内部で秘匿情報(データD)が特定の鍵で暗号化されていることをデータホルダに対して保証される。
【0113】
(実施例3の変形例)
実施例3ではプログラムPのソースコード中の或る変数に対して鍵アノテーションが付与されていることを想定し、そのプログラムPの内部で秘匿情報が特定の鍵で暗号化されていることを検証可能にしたが、例えば、「プログラムP内部で秘匿情報がk-匿名化を満たすこと」、「プログラムP内部で秘匿情報が(ε,δ)-差分プライバシを満たすこと」
を検証可能としてもよい。
【0114】
これを実現するためには、実施例3において、例えば、k-匿名化を満たすことを「k-Anonymized」、(ε,δ)-差分プライバシを満たすことを「(ε,δ)-Anonymized」とした場合、実施例1で定義した暗号化変数を「t::=Pl|k-Anonymized|(ε,δ)-Anonymized」と拡張した上で、それに合わせて拡張したPCCのアルゴリズムにより、秘匿情報データフロー証明処理部700が、上記の秘匿情報データフロー証明(P)を生成及び出力すればよい。
【0115】
(ハードウェア構成例)
データ処理装置100、データ保持装置200、プログラム提供装置300はいずれも、例えば、コンピュータにプログラムを実行させることにより実現できる。このコンピュータは、物理的なコンピュータであってもよいし、クラウド上の仮想マシンであってもよい。データ処理装置100、データ保持装置200、プログラム提供装置300を総称して「装置」と呼ぶ。
【0116】
すなわち、当該装置は、コンピュータに内蔵されるCPUやメモリ等のハードウェア資源を用いて、当該装置で実施される処理に対応するプログラムを実行することによって実現することが可能である。上記プログラムは、コンピュータが読み取り可能な記録媒体(可搬メモリ等)に記録して、保存したり、配布したりすることが可能である。また、上記プログラムをインターネットや電子メール等、ネットワークを通して提供することも可能である。
【0117】
図11は、上記コンピュータのハードウェア構成例を示す図である。
図11のコンピュータは、それぞれバスBで相互に接続されているドライブ装置1000、補助記憶装置1002、メモリ装置1003、CPU1004、インタフェース装置1005、表示装置1006、入力装置1007、出力装置1008等を有する。なお、これらのうち、一部の装置を備えないこととしてもよい。例えば、表示を行わない場合、表示装置1006を備えなくてもよい。
【0118】
当該コンピュータでの処理を実現するプログラムは、例えば、CD-ROM又はメモリカード等の記録媒体1001によって提供される。プログラムを記憶した記録媒体1001がドライブ装置1000にセットされると、プログラムが記録媒体1001からドライブ装置1000を介して補助記憶装置1002にインストールされる。ただし、プログラムのインストールは必ずしも記録媒体1001より行う必要はなく、ネットワークを介して他のコンピュータよりダウンロードするようにしてもよい。補助記憶装置1002は、インストールされたプログラムを格納すると共に、必要なファイルやデータ等を格納する。
【0119】
メモリ装置1003は、プログラムの起動指示があった場合に、補助記憶装置1002からプログラムを読み出して格納する。CPU1004は、メモリ装置1003に格納されたプログラムに従って、当該装置に係る機能を実現する。インタフェース装置1005は、ネットワークに接続するためのインタフェースとして用いられ、送信部及び受信部として機能する。表示装置1006はプログラムによるGUI(Graphical User Interface)等を表示する。入力装置1007はキーボード及びマウス、ボタン、又はタッチパネル等で構成され、様々な操作指示を入力させるために用いられる。出力装置1008は演算結果を出力する。
【0120】
(実施の形態の効果)
以上、説明したとおり、本実施の形態に係る技術によれば、VM又はコンテナ単位の秘匿計算機構を備えるデータ処理装置により、プログラム提供者のプログラムでデータ保持者のデータを処理する場合において、データ処理装置にはデータ及びプログラムが漏れず、プログラム提供者にはデータが漏れず、データ保持者にはプログラムが漏れず、それに加えて、データ保持者に対してプログラムの真正性を保証できる技術が提供される。
【0121】
以上、本実施の形態について説明したが、本発明はかかる特定の実施形態に限定されるものではなく、特許請求の範囲に記載された本発明の要旨の範囲内において、種々の変形・変更が可能である。
【0122】
[参考文献]
参考文献1:NeculaG. C. "Proof-Carrying Code", 1997.
参考文献2:George C. Neculaand Peter Lee. "Safe, Untrusted Agents using Proof-Carrying Code", 1998.
参考文献3:塚田恭章.「対話型安全性証明つきプログラム配信方式における証明の秘匿とその応用」,2005.
【符号の説明】
【0123】
100 データ処理装置
200 データ保持装置
300 プログラム提供装置
400 セキュアチャネル
110 セキュア領域
111 セキュアデータ格納部
112 セキュア処理部
120 通信部
130 データ格納部
140 データ処理部
500 証明処理部
510 検証論理式生成処理部
511 字句解析部
512 構文解析部
513 検証論理式生成部
520 自動証明処理部
600 証明検証処理部
700 秘匿情報データフロー証明処理部
1000 ドライブ装置
1001 記録媒体
1002 補助記憶装置
1003 メモリ装置
1004 CPU
1005 インタフェース装置
1006 表示装置
1007 入力装置
1008 出力装置
B バス