(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024175248
(43)【公開日】2024-12-18
(54)【発明の名称】推論検証システム、推論検証方法、及び推論検証プログラム
(51)【国際特許分類】
H04L 9/30 20060101AFI20241211BHJP
G06N 3/0464 20230101ALI20241211BHJP
H04L 9/32 20060101ALI20241211BHJP
G06N 5/045 20230101ALI20241211BHJP
【FI】
H04L9/30 Z
G06N3/0464
H04L9/32 200C
G06N5/045
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2023092866
(22)【出願日】2023-06-06
(71)【出願人】
【識別番号】000006013
【氏名又は名称】三菱電機株式会社
(74)【代理人】
【識別番号】110002491
【氏名又は名称】弁理士法人クロスボーダー特許事務所
(72)【発明者】
【氏名】安田 聖
(72)【発明者】
【氏名】小関 義博
(72)【発明者】
【氏名】廣政 良
(72)【発明者】
【氏名】西田 悠太郎
(72)【発明者】
【氏名】坂井 祐介
(72)【発明者】
【氏名】花岡 悟一郎
(72)【発明者】
【氏名】松田 隆宏
(72)【発明者】
【氏名】アッタラパドゥン ナッタポン
(72)【発明者】
【氏名】シュルツ ヤコブ クロイス ナカムラ
(57)【要約】
【課題】ゼロ知識証明技術によりCNN(Convolutional Neural Network)を検証する技術において、入力データに関するプライバシーを保護したい。
【解決手段】推論検証システム100は、CNNモデルに対する入力データと、CNNモデルの重みパラメータとの各々について、論理回路で表現されたCNNモデルと、秘匿化された各データとを用いて、CNNモデルにおけるInner ProductとReLU(Rectified Linear Unit)とMax Poolingとの各々に対する証明を生成し、共通パラメータと、生成した証明とを用いて、入力データ及び重みパラメータを用いて推論処理が適切に実行されたことを証明する証明を生成する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
論理回路で表現されたCNN(Convolutional Neural Network)モデルと、前記CNNモデルに対する入力データを、秘匿手法を用いて秘匿化することによって生成された第1秘匿化データとを用いて、前記CNNモデルにおけるInner ProductとReLU(Rectified Linear Unit)とMax Poolingとの各々に対する証明として第1証明群を生成し、共通パラメータと、前記第1証明群とを用いて、前記入力データを用いて推論処理が実行されたことを証明する第1証明を生成する証明生成部
を備えるユーザ用演算装置と、
論理回路で表現された前記CNNモデルと、前記CNNモデルの重みパラメータを、前記秘匿手法を用いて秘匿化することによって生成された第2秘匿化データとを用いて、前記CNNモデルにおけるInner ProductとReLUとMax Poolingとの各々に対する証明として第2証明群を生成し、前記共通パラメータと、前記第2証明群とを用いて、前記重みパラメータを用いて推論処理が実行されたことを証明する第2証明を生成する証明生成部
を備える提供者用演算装置と
を備える推論検証システムであって、
前記ユーザ用演算装置の前記証明生成部は、前記第1証明群を生成する際に前記ユーザ用演算装置が前記提供者用演算装置から取得したデータを使用し、
前記提供者用演算装置の前記証明生成部は、前記第2証明群を生成する際に前記提供者用演算装置が前記ユーザ用演算装置から取得したデータを使用する推論検証システム。
【請求項2】
g,h∈Gは群Gに含まれている要素g及び要素hを表すものとし、v∈G^mは群Gに含まれているm個の要素から成るベクトル(v1,…,vm)を表すものとし、群Z_pは素数pに対して{1,…,p}から構成される乗法群を表すものとしたとき、前記秘匿手法において、
値xを前記ユーザ用演算装置が所持しており、値yを前記提供者用演算装置が所持しているものとし、前記秘匿手法によって秘匿化された前記値xを[x]と表記し、前記秘匿手法によって秘匿化された前記値yを[y]と表記したとき、前記[x]及び前記[y]について、
Add([x],[y]):z(=x+y)を前記秘匿手法によって秘匿化した[z]を計算する関数と、
SMult(a,[x]):z(=ax、aはある数)を前記秘匿手法によって秘匿化した[z]を計算する関数と、
Mult([x],[y]):z(=xy)を前記秘匿手法によって秘匿化した[z]を計算する関数と、
Rand():ランダムな値z(∈Z_p)を前記秘匿手法によって秘匿化した[z]を計算する関数と、
EQ([x],[y]):x=yである場合にz=1となるzを前記秘匿手法によって秘匿化した[z]を出力する関数と、
Output([x]):値xを各装置に出力する関数と
が成立し、
前記ユーザ用演算装置と前記提供者用演算装置とが合わせてm個の入力(x1,…,xm)を所持しており、かつ、前記m個の入力を前記秘匿手法によって秘匿化した各値が[x1],…,[xm]であるとき、群Gに含まれているm個の要素から成るvec(g)=(g1,…,gm)に対して、
Com([x1],…,[xm],vec(g)):z(=g1^(x1)…gm^(xm))を前記秘匿手法によって秘匿化した[z]を計算する関数と、
Argmax([x1],…,[xm]):x1,…,xmの中で最大となるxi(i∈{1,…,m})のインデックスiを前記秘匿手法によって秘匿化した[i]を計算する関数と
が成立する請求項1に記載の推論検証システム。
【請求項3】
M∈G^(m×n)は群Gに含まれている要素から成るm×n要素の行列を表すものとしたとき、
前記第1証明群及び前記第2証明群の各々は、WL,WR,WO∈Z_p^(Q×n)とし、WV∈Z_p^(Q×n)とし、a_L,a_R,a_O∈Z_p^nとし、[a_L]と[a_R]と[a_O]とをそれぞれa_Lとa_Rとa_Oとを前記秘匿手法によって秘匿化した値としたとき、WLと、WRと、WOと、WVと、[a_L]と、[a_R]と、[a_O]とから成り、
前記共通パラメータは、g,h∈Gとし、vec(g),vec(h)∈G^mとしたとき、gと、hと、vec(g)と、vec(h)とから成る請求項2に記載の推論検証システム。
【請求項4】
前記推論検証システムは、さらに、
前記第1証明と前記第2証明とを用いて、推論処理において前記重みパラメータと前記入力データとが用いられたか否かを検証する検証部
を備える検証装置
を備える請求項1から3のいずれか1項に記載の推論検証システム。
【請求項5】
コンピュータであるユーザ用演算装置が、論理回路で表現されたCNN(Convolutional Neural Network)モデルと、前記CNNモデルに対する入力データを、秘匿手法を用いて秘匿化することによって生成された第1秘匿化データとを用いて、前記CNNモデルにおけるInner ProductとReLU(Rectified Linear Unit)とMax Poolingとの各々に対する証明として第1証明群を生成し、共通パラメータと、前記第1証明群とを用いて、前記入力データを用いて推論処理が実行されたことを証明する第1証明を生成し、
コンピュータである提供者用演算装置が、論理回路で表現された前記CNNモデルと、前記CNNモデルの重みパラメータを、前記秘匿手法を用いて秘匿化することによって生成された第2秘匿化データとを用いて、前記CNNモデルにおけるInner ProductとReLUとMax Poolingとの各々に対する証明として第2証明群を生成し、前記共通パラメータと、前記第2証明群とを用いて、前記重みパラメータを用いて推論処理が実行されたことを証明する第2証明を生成する推論検証方法であって、
前記ユーザ用演算装置は、前記第1証明群を生成する際に前記ユーザ用演算装置が前記提供者用演算装置から取得したデータを使用し、
前記提供者用演算装置は、前記第2証明群を生成する際に前記提供者用演算装置が前記ユーザ用演算装置から取得したデータを使用する推論検証方法。
【請求項6】
論理回路で表現されたCNN(Convolutional Neural Network)モデルと、前記CNNモデルに対する入力データを、秘匿手法を用いて秘匿化することによって生成された第1秘匿化データとを用いて、前記CNNモデルにおけるInner ProductとReLU(Rectified Linear Unit)とMax Poolingとの各々に対する証明として第1証明群を生成し、共通パラメータと、前記第1証明群とを用いて、前記入力データを用いて推論処理が実行されたことを証明する第1証明を生成する証明生成処理
をコンピュータであるユーザ用演算装置に実行させ、
論理回路で表現された前記CNNモデルと、前記CNNモデルの重みパラメータを、前記秘匿手法を用いて秘匿化することによって生成された第2秘匿化データとを用いて、前記CNNモデルにおけるInner ProductとReLUとMax Poolingとの各々に対する証明として第2証明群を生成し、前記共通パラメータと、前記第2証明群とを用いて、前記重みパラメータを用いて推論処理が実行されたことを証明する第2証明を生成する証明生成処理
をコンピュータである提供者用演算装置に実行させる推論検証プログラムであって、
前記ユーザ用演算装置の前記証明生成処理において、前記第1証明群を生成する際に前記ユーザ用演算装置が前記提供者用演算装置から取得したデータを使用し、
前記提供者用演算装置の前記証明生成処理において、前記第2証明群を生成する際に前記提供者用演算装置が前記ユーザ用演算装置から取得したデータを使用する推論検証プログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、推論検証システム、推論検証方法、及び推論検証プログラムに関する。
【背景技術】
【0002】
ニューラルネットワークによるAI(Artificial Intelligence)推論技術は、データの分類などの機械学習タスクにおいて大きな成功を収めている。ニューラルネットワークによるデータ分析を行うためには、事前に大量の学習データを用いて、推論モデルの学習を行う必要がある。このとき、学習データを用意することの困難さと、計算資源の制約などの理由から、ユーザがユーザ自身の環境において推論モデルを構築することが困難である場合がある。
このような困難があることから、近年ではクラウドシステムにおいてニューラルネットワークによるデータ分析を提供するサービスであるMLaaS(Machine Learning as a Service)がある。MLaaSにおいて、ユーザは、推論モデルの構築にコストを費やす必要がなく、また、分析したいデータをクラウドシステムにアップロードすることにより、提供されている推論モデルを用いた推論を実行することができる。
【0003】
MLaaSにおいて、分類対象であるデータ(入力データ)の所有者と推論モデルの所有者(推論サービス提供者)とが異なる場合に、入力データと推論モデルとを用いて推論処理が適切に実行されたことを第三者に証明する必要があるケースが考えられる。
具体例として、入力データの所有者として患者、推論モデルの所有者として医者、第三者として保険会社を想定したとき、入力データから推論モデルを用いて生成した診断結果が適切であることを保険会社に証明するケースが考えられる。最も簡単な解決策は、入力データと推論モデルとを保険会社に公開し、計算処理を再現することである。しかしながら、個人のプライバシーに関わる情報が含まれている可能性がある入力データと、知的財産となりうる推論モデルとをそのまま開示することは難しいという課題がある。
非特許文献1は、このような課題に対する解決方法を開示している。
【先行技術文献】
【非特許文献】
【0004】
【非特許文献1】S.Lee,H.Ko,J.Kim, and H.Oh、“vCNN:Verifiable Convolutional Neural Network based on zk-SNARKs”,https://eprint.iacr.org/2020/584,2020.
【発明の概要】
【発明が解決しようとする課題】
【0005】
非特許文献1が開示している方法では、ゼロ知識証明技術を用いることにより、推論サービス提供者と入力データの所有者とが協力して、入力データと推論モデルとを用いた推論処理が実際に実行されたことを証明することができる。これにより、推論サービス提供者は、推論結果が入力データと推論モデルとを用いた分析処理によって得られた結果であることを第三者に対して証明することができる。
【0006】
ここで、非特許文献1が開示している方法において、入力データの所有者は、推論サービス提供者に対して入力データを平文の状態で渡す必要がある。そのため、入力データの所有者のプライバシーに関わる情報などに対して当該方法を適用した場合、入力データの所有者にとって不利益が生じる可能性がある。
本開示は、ゼロ知識証明技術によりCNN(Convolutional Neural Network)を検証する技術において、入力データと推論モデルとのどちらも秘匿化した状態で、入力データと推論モデルとを用いた推論処理が適切に実行されたことを示す証明を生成する手法を提案することを目的とする。本開示を利用することにより、入力データに関するプライバシーを保護することができる。
【課題を解決するための手段】
【0007】
本開示に係る推論検証システムは、
論理回路で表現されたCNN(Convolutional Neural Network)モデルと、前記CNNモデルに対する入力データを、秘匿手法を用いて秘匿化することによって生成された第1秘匿化データとを用いて、前記CNNモデルにおけるInner ProductとReLU(Rectified Linear Unit)とMax Poolingとの各々に対する証明として第1証明群を生成し、共通パラメータと、前記第1証明群とを用いて、前記入力データを用いて推論処理が実行されたことを証明する第1証明を生成する証明生成部
を備えるユーザ用演算装置と、
論理回路で表現された前記CNNモデルと、前記CNNモデルの重みパラメータを、前記秘匿手法を用いて秘匿化することによって生成された第2秘匿化データとを用いて、前記CNNモデルにおけるInner ProductとReLUとMax Poolingとの各々に対する証明として第2証明群を生成し、前記共通パラメータと、前記第2証明群とを用いて、前記重みパラメータを用いて推論処理が実行されたことを証明する第2証明を生成する証明生成部
を備える提供者用演算装置と
を備える推論検証システムであって、
前記ユーザ用演算装置の前記証明生成部は、前記第1証明群を生成する際に前記ユーザ用演算装置が前記提供者用演算装置から取得したデータを使用し、
前記提供者用演算装置の前記証明生成部は、前記第2証明群を生成する際に前記提供者用演算装置が前記ユーザ用演算装置から取得したデータを使用する。
【発明の効果】
【0008】
本開示によれば、CNNモデルに対する入力データは秘匿化され、CNNモデルの重みパラメータは秘匿化される。また、秘匿化された各データを用いて、ゼロ知識証明技術によりCNNを検証するための証明が生成される。従って、本開示によれば、ゼロ知識証明技術によりCNNを検証する技術において、入力データと推論モデルとのどちらも秘匿化した状態で、入力データと推論モデルとを用いた推論処理が適切に実行されたことを示す証明を生成することができる。
【図面の簡単な説明】
【0009】
【
図1】実施の形態1に係る推論検証システム100の構成例を示す図。
【
図2】実施の形態1に係る共通パラメータ生成装置200の構成例を示す図。
【
図3】実施の形態1に係るユーザ用演算装置300の構成例を示す図。
【
図4】実施の形態1に係る提供者用演算装置400の構成例を示す図。
【
図5】実施の形態1に係る検証装置500の構成例を示す図。
【
図6】実施の形態1に係るコンピュータ10のハードウェア構成例を示す図。
【
図7】実施の形態1に係る共通パラメータ生成装置200の動作を示すフローチャート。
【
図8】実施の形態1に係るユーザ用演算装置300の動作を示すフローチャート。
【
図9】実施の形態1に係る提供者用演算装置400の動作を示すフローチャート。
【
図10】実施の形態1に係る検証装置500の動作を示すフローチャート。
【
図11】実施の形態1の変形例に係るコンピュータ10のハードウェア構成例を示す図。
【発明を実施するための形態】
【0010】
実施の形態の説明及び図面において、同じ要素及び対応する要素には同じ符号を付している。同じ符号が付された要素の説明は、適宜に省略又は簡略化する。図中の矢印は、データ若しくは信号の流れ、又は処理の流れを主に示している。また、「部」を、「回路」、「装置」、「機器」、「ステップ」、「工程」、「手順」、「処理」又は「サーキットリー」に適宜読み替えてもよい。
【0011】
実施の形態1.
以下、本実施の形態について、図面を参照しながら詳細に説明する。
【0012】
***構成の説明***
図1は、本実施の形態における、推論検証システム100のシステム構成例を示している。
図1に示すように、推論検証システム100は、共通パラメータ生成装置200と、ユーザ用演算装置300と、提供者用演算装置400と、検証装置500とを備える。推論検証システム100は、ゼロ知識証明技術によりCNN(Convolutional
Neural Network)を検証するシステムである。ゼロ知識証明技術は、Bulletproofとも呼ばれる暗号技術である。
インターネット101は、共通パラメータ生成装置200と、ユーザ用演算装置300と、提供者用演算装置400と、検証装置500とを相互に通信可能に接続する通信路である。なお、インターネット101はネットワークの一例である。インターネット101の代わりに他の種類のネットワークが用いられてもよい。
【0013】
共通パラメータ生成装置200は、具体例としてPC(Personal Computer)である。共通パラメータ生成装置200は、推論検証システム100において用いられる共通のパラメータを生成し、インターネット101を介して、ユーザ用演算装置300と、提供者用演算装置400と、検証装置500との各々へ、生成した共通パラメータを送信するコンピュータである。
【0014】
ユーザ用演算装置300は、具体例としてPCである。ユーザ用演算装置300は、入力データを秘匿化する処理を実行し、また、提供者用演算装置400と協力して証明を生成するコンピュータである。
【0015】
提供者用演算装置400は、具体例としてPCである。提供者用演算装置400は、推論モデルの重みパラメータを秘匿化する処理を実行し、また、ユーザ用演算装置300と協力して証明を生成するコンピュータである。推論モデルは、学習モデル又は機械学習モデルとも呼ばれる。提供者用演算装置400はサービス提供者用演算装置とも呼ばれる。
【0016】
検証装置500は、具体例としてPCである。検証装置500は、ユーザ用演算装置300と提供者用演算装置400との各々から証明を受信し、受信した証明を検証した結果として、証明の真偽を示すデータを出力する。
【0017】
以下、推論検証システム100が備える各装置の構成例について説明する。
図2は、共通パラメータ生成装置200の構成例を示すブロック図である。
図2に示すように、共通パラメータ生成装置200は、共通パラメータ生成部201と、出力部202とを備える。なお、図示していないが、共通パラメータ生成装置200は、共通パラメータ生成装置200が備える各部において使用されるデータを記憶する記録媒体を有する。
【0018】
共通パラメータ生成部201は、推論検証システム100において用いられる共通パラメータppを生成し、生成した共通パラメータppを出力部202へ送信する。なお、図示していないが、共通パラメータppを生成するために、共通パラメータ生成部201は乱数生成機能などを有してもよい。
【0019】
出力部202は、共通パラメータ生成部201によって生成された共通パラメータppを、ユーザ用演算装置300と、提供者用演算装置400と、検証装置500との各々へ送信する。
【0020】
図3は、ユーザ用演算装置300の構成例を示すブロック図である。
図3に示すように、ユーザ用演算装置300は、入力部301と、データ秘匿部302と、証明生成部303と、出力部304とを備える。なお、図示していないが、ユーザ用演算装置300は、ユーザ用演算装置300が備える各部において使用されるデータを記憶する記録媒体を有する。
【0021】
入力部301は、共通パラメータ生成装置200から共通パラメータppを受信する。また、入力部301は、推論に用いる画像などを示す入力データを入力する。
【0022】
データ秘匿部302は、入力部301によって入力された入力データに対して秘匿化処理を行うことにより秘匿化データを生成する。
【0023】
証明生成部303は、データ秘匿部302によって生成された秘匿化データを利用し、提供者用演算装置400と協力して証明Pを生成する。
具体的には、証明生成部303は、論理回路で表現されたCNNモデルと、第1秘匿化データとを用いて第1証明群を生成し、共通パラメータppと、第1証明群とを用いて第1証明を生成する。証明生成部303は、第1証明群を生成する際にユーザ用演算装置300が提供者用演算装置400から取得したデータを使用する。第1秘匿化データは、CNNモデルに対する入力データを、秘匿手法Encを用いて秘匿化することによって生成されたデータである。第1証明群は、CNNモデルにおけるInner ProductとReLU(Rectified Linear Unit)とMax Poolingとの各々に対する証明から成る。第1証明は、入力データを用いて推論処理が実行されたことを証明することに用いられる。
【0024】
出力部304は、証明生成部303によって生成された証明Pを出力する。
【0025】
図4は、提供者用演算装置400の構成例を示すブロック図である。
図4に示すように、提供者用演算装置400は、入力部401と、データ秘匿部402と、証明生成部403と、出力部404とを備える。なお、図示していないが、提供者用演算装置400は、提供者用演算装置400が備える各部において使用されるデータを記憶する記録媒体を有する。
【0026】
入力部401は、共通パラメータ生成装置200から共通パラメータppを受信する。また、入力部401は、推論に用いるCNNモデルのパラメータを入力データとして入力する。
【0027】
データ秘匿部402は、入力部401によって入力された入力データに対して秘匿化処理を行うことにより秘匿化データを生成する。
【0028】
証明生成部403は、データ秘匿部402によって生成された秘匿化データを利用し、ユーザ用演算装置300と協力して証明Pを生成する。
具体的には、証明生成部403は、論理回路で表現されたCNNモデルと、第2秘匿化データとを用いて第2証明群を生成し、共通パラメータppと、第2証明群とを用いて第2証明を生成する。証明生成部403は、第2証明群を生成する際に提供者用演算装置400がユーザ用演算装置300から取得したデータを使用する。第2秘匿化データは、CNNモデルの重みパラメータを、秘匿手法Encを用いて秘匿化することによって生成されたデータである。第2証明群は、CNNモデルにおけるInner ProductとReLUとMax Poolingとの各々に対する証明から成る。第2証明は、重みパラメータを用いて推論処理が実行されたことを証明することに用いられる。
【0029】
出力部404は、証明生成部403によって生成された証明Pを出力する。
【0030】
図5は、検証装置500の構成例を示すブロック図である。
図5に示すように、検証装置500は、入力部501と、検証部502と、出力部503とを備える。なお、図示していないが、検証装置500は、検証装置500が備える各部において使用されるデータを記憶する記録媒体を有する。
【0031】
入力部501は、共通パラメータ生成装置200から共通パラメータppを入力する。また、入力部501は、ユーザ用演算装置300と提供者用演算装置400との各々から証明Pを入力する。
【0032】
検証部502は、入力部501によって入力された証明Pを検証する。具体的には、検証部502は、第1証明と第2証明とを用いて、推論処理において重みパラメータと入力データとが用いられたか否かを検証する。
【0033】
出力部503は、検証部502の検証結果に応じて、検証結果を示すデータを出力する。
【0034】
図6は、推論検証システム100が備える各装置のハードウェア資源の一例を示す図である。各装置は、具体例としてコンピュータ10から成る。コンピュータ10は一般的なPC(Personal Computer)であってもよい。各装置は複数のコンピュータ10から成ってもよい。
コンピュータ10は、プロセッサ11を備えている。
【0035】
プロセッサ11は、バス12を介してROM(Read Only Memory)13、RAM(Random Access Memory)14と、通信ボード15と、ディスプレイ16(表示装置)と、キーボード17と、マウス18と、ドライブ19と、磁気ディスク装置20などのハードウェアデバイスと接続され、これらのハードウェアデバイスを制御する。
プロセッサ11は、具体例として、CPU(Central Processing Unit)、DSP(Digital Signal Processor)、又はGPU(Graphics Processing Unit)である。コンピュータ10は、プロセッサ11を代替する複数のプロセッサを備えてもよい。複数のプロセッサはプロセッサ11の役割を分担する。
【0036】
ドライブ19は、FD(Flexible Disk)、CD(Compact Disc)、又はDVD(Digital Versatile Disc)などの記憶媒体を読み書きする装置である。
ROM13と、RAM14と、磁気ディスク装置20と、ドライブ19との各々は記憶装置の一例である。
キーボード17と、マウス18と、通信ボード15との各々は入力装置の一例である。
ディスプレイ16と、通信ボード15との各々は出力装置の一例である。
通信ボード15は、有線又は無線で、LAN(Local Area Network)、インターネット、又は電話回線などの通信網に接続している。
磁気ディスク装置20には、OS(オペレーティングシステム)21と、プログラム群22と、ファイル群23との各々が記憶されている。
【0037】
プログラム群22には、本実施の形態において「~部」として説明する機能を実行するプログラムが含まれる。各プログラム(具体例として、証明作成プログラム又は検証結果生成プログラム)は、プロセッサ11により読み出されて実行される。即ち、各プログラムは、「~部」としてコンピュータ10を機能させるものであり、また、「~部」の手順又は方法をコンピュータに実行させるものである。
【0038】
ファイル群23には、本実施の形態において説明する「~部」で使用される各種データ(入力データと、出力データと、判定結果と、計算結果と、処理結果など)が含まれる。
【0039】
推論検証システム100が備える各装置の動作を実現するプログラムを総称して「推論検証プログラム」と呼ぶ。推論検証プログラムは、コンピュータが読み取り可能な不揮発性の記録媒体に記録されていてもよい。不揮発性の記録媒体は、具体例として、光ディスク又はフラッシュメモリである。推論検証プログラムは、プログラムプロダクトとして提供されてもよい。
【0040】
***動作の説明***
以下、本実施の形態における各装置の計算方法に相当する、推論検証システム100の動作について説明する。推論検証システム100が備える各装置の動作手順は推論検証方法に相当する。
以下の説明における記法と定義について説明する。
g,h∈Gは、ある群Gに含まれている要素g及び要素hを表す。
v∈G^mは、ある群Gに含まれているm個の要素から成るベクトル(v1,…,vm)を表す。
M∈G^(m×n)は、ある群Gに含まれている要素から成るm×n要素の行列を表す。
群Z_pは、素数pに対して{1,…,p}から構成される乗法群を表す。
【0041】
以下、推論検証システム100において利用する、各種計算方法について説明する。
はじめに、ユーザ用演算装置300と提供者用演算装置400との2装置間におけるデータ秘匿方法について説明する。推論検証システム100では、以下の性質を持つ秘匿手法Encを利用する。
【0042】
ある値xをユーザ用演算装置300が所持しており、ある値yを提供者用演算装置400が所持しているものとする。このとき、秘匿手法Encによって秘匿化された値xを[x]と表記し、秘匿手法Encによって秘匿化された値yを[y]と表記する。この[x]及び[y]について次の関数が成立する。[z]はzを秘匿手法Encによって秘匿化した値である。なお、以下の各関数を実行する際に、ユーザ用演算装置300とサービス提供者用演算装置400とは相互に通信しながら計算を行う。
・Add([x],[y]):z(=x+y)に対応する[z]を計算する関数。
・SMult(a,[x]):z(=ax、aはある数)に対応する[z]を計算する関数。
・Mult([x],[y]):z(=xy)に対応する[z]を計算する関数。
・Rand():ランダムな値z(∈Z_p)に対応する[z]を計算する関数。
・EQ([x],[y]):x=yである場合にz=1となるzに対応する[z]を出力する関数。
・Output([x]):値xを各装置に出力する関数。
【0043】
また、ユーザ用演算装置300と提供者用演算装置400とが合わせてm個の入力(x1,…,xm)を所持しており、かつ、m個の入力を秘匿手法Encによって秘匿化した各値が[x1],…,[xm]であるとき、ある群Gに含まれているm個の要素から成るvec(g)=(g1,…,gm)に対して次の関数が成立する。
・Com([x1],…,[xm],vec(g)=(g1,…,gm)):z(=g1^(x1)…gm^(xm))に対応する[z]を計算する関数。
・Argmax([x1],…,[xm]):x1,…,xmの中で最大となるxi(i∈{1,…,m})のインデックスiに対応する[i]を計算する関数。[i]はiを秘匿手法Encによって秘匿化した値である。
上記のような性質を持つ秘匿手法Encとして、具体例として[参考文献1]に示すSPDZ protocolがある。
【0044】
[参考文献1]
I.Damgard et al.、“Multiparty Computation from Somewhat Homomorphic Encryption.”、Advances in Cryptology CRYPTO 2012、Springer、2012、pp.643-662
【0045】
次に、上記の秘匿手法Encを用いて、JointProveIPと呼ばれるプロトコルを構成する。JointProveIPの具体的な計算方法は以下の通りである。
JointProveIPは入力として以下を受け取る。
・vec(g),vec(h)∈G^n,P∈G,及びc∈Z_p
・[a],[b]∈Z_p^n
【0046】
JointProveIPは次のステップに従って順に計算する。
(1)Hをハッシュ関数として、以下を計算する。
(x,u0)=H(vec(g),vec(h),P,c)
【0047】
(2)g(n)=vec(g)、h(n)=vec(h)、u=u0^x、P(n)=P・u0^(xc)、a(n)=a、b(n)=bとする。
【0048】
(3)以下の計算をm=n,n/2,n/2^2,…,2について繰り返す。
【0049】
(a)Mult関数とAdd関数とを利用して、以下を計算する。ここで、<a,b>はaとbの内積を表し、a(m)_[:m/2]はベクトルa(m)の前半半分の要素を表し、a(m)_[m/2:]はベクトルa(m)の後半半分の要素を表す。
・[cL(m)]=[<a(m)_[:m/2],b(m)_[m/2:]>]
・[cR(m)]=[<a(m)_[m/2:],b(m)_[:m/2]>]
【0050】
(b)Com関数を利用して、以下を計算する。
・L(m)=(g(m)_[m/2:])^a(m)_[:m/2]・(h(m)_[:m/2])^(b(m)_[m/2:]・u^cL(m))
・R(m)=(g(m)_[:m/2])^a(m)_[m/2:]・(h(m)_[m/2:])^(b(m)_[:m/2]・u^cR(m))
【0051】
(c)Hをハッシュ関数として、以下を計算する。
x(m)=H(g(n),h(n),u,P(n),L(n),R(n),
g(n/2),h(n/2),u,P(n/2),L(n/2),R(n/2),
…,
g(m),h(m),u,P(m),L(m),R(m))
【0052】
(d)以下を計算する。
・g(m/2)=(g(m)_[:m/2])^(x(m)^(-1))・(g(m)_[m/2:])^x(m)
・h(m/2)=(h(m)_[:m/2])^x(m)・(h(m)_[m/2:])^(x(m)^(-1))
・P(m/2)=(L(m))^(x(m))^2・P(m)・(R(m))^(x(m))^(-2)
【0053】
(e)SMult関数とAdd関数とを利用して、以下を計算する。
・[a(m/2)]=[a(m)_[:m/2]]・x(m)+[a(m)_[m/2:]]・(x(m))^(-1)
・[b(m/2)]=[b(m)_[:m/2]]・x(m)^(-1)+[b(m)_[m/2:]]・(x(m))
【0054】
(4)Output関数を利用して、a(1)及びb(1)を出力する。
【0055】
次に、JointProveIPプロトコルは以下を出力する。
証明Π_ip=(L(n),R(n),L(n/2),R(n/2),…,L(2),R(2),a(1),b(1))
【0056】
次に、JointProveIPを内部で利用するプロトコルであって、JointProveACと呼ばれるプロトコルを構成する。
JointProveACは入力として以下を受け取る。なお、共通パラメータppは、具体例として、下記のgとhとvec(g)とvec(h)とから成る。
・pp=(g,h,vec(g),vec(h)):g,h∈G,vec(g),vec(h)∈G^m
・stmt=(V,WL,WR,WO,WV,c):V∈G^m,WL,WR,WO∈Z_p^(Q×n),WV∈Z_p^(Q×n),c∈Z_p^Q
・[a_L],[a_R],[a_O],[v1],…,[vm],[γ1],…,及び[γm]:a_L,a_R,a_O∈Z_p^n,vi,γi∈Z_p,i=1,…m
【0057】
JointProveACは次のステップに従って順に計算する。
(1)Rand関数を利用して、[α],[β],[ρ],[sL],及び[sR]を計算する。ただし、α,β,ρ∈Z_p,sL,sR∈Z_p^nである。
【0058】
(2)Com関数を利用して、以下を計算する。
・AI=h^α・g^a_L・h^a_R
・AO=h^β・g^a_O
・S=h^ρ・g^sL・h^sR
【0059】
(3)Hをハッシュ関数として以下を計算する。
(y,z)=H(pp,stmt,AI,AO,S)
【0060】
(4)以下を計算する。
・y(n)=(1,y,y^2,…,y^(n-1))
・z(Q+1)_[1:]=(z,z^2,z^3,…,z^Q)
【0061】
(5)SMult関数とAdd関数を利用して以下を計算する。ここで、a〇bはaとbの要素ごとの積を表す。
・[l](X)=[a_L]・X+[a_O]・X^2+y(-n)〇(z(Q+1)_[1:]・WR)・X+[sL]・X^3
・[r](X)=y(n)〇[a_R]・X-y(n)+z(Q+1)_[1:]・(WL・X+WO)+y(n)〇[sR]・X^3
【0062】
(6)Mult関数とAdd関数を利用して、以下を計算する。
・<[l](X),[r](X)>を計算し、X^iの係数をtiとする(i=1,2,…,6)。
【0063】
(7)Rand関数を利用して[τi](i=1,3,4,5,6)を計算する。
【0064】
(8)Com関数を利用して以下を計算する。
・Ti=g^τi・h^τi(i=1,3,4,5,6)
【0065】
(9)Hをハッシュ関数として以下を計算する。
・x=H(pp,stmt,AI,AO,S,T1,T3,T4,T5,T6)
【0066】
(10)SMult関数とAdd関数とを利用して以下を計算する。
・[l]=[l](x)
・[r]=[r](x)
【0067】
(11)Mult関数とAdd関数を利用して以下を計算する。
・[t]=<[l],[r]>
【0068】
(12)SMult関数とAdd関数とを利用して以下を計算する。
・[τx]=Σ_(i=1,3,4,5,6)[ti]・x^i+x^2・<z(Q+1)_[1:],WV・[γ]>
・[μ]=[α]・x+[β]・x^2+[ρ]・x^3
【0069】
(13)Output関数を利用して、τx,μ,及びtを出力する。
【0070】
(14)以下を計算する。
・h’_i=(h_i)^(y^(-i+1))(i=(1,2,…,n)、h_iはvec(h)のi番目の要素を示す。)
・WL=(h’)^(z(Q+1)_[1:]・WL)
・WR=vec(g)^(y(-n)〇(z(Q+1)_[1:]・WR))
・WO=(h’)^(z(Q+1)_[1:]・WO)
・P=AI^x・AO^(x^2)・(h’)^(-y(n))・(WL)^x・WO・S^(x^3)
【0071】
(15)JointProveIPプロトコルを以下の入力に対して動作させ、出力としてΠ_ipを受け取る。
・vec(g),vec(h),P・h^(-μ),及びt
・[l],[r]
【0072】
次に、JointProveACは以下を出力する。
Π_ac=(AI,AO,S,T1,T3,T4,T5,T6,τx,μ,t,Π_ip)
【0073】
上記のJointProveACを利用することにより、CNNにおいて用いられる計算(Inner Product,ReLU(Rectified Linear Unit),Max Pooling)に対する証明を生成することができる。
以下、Inner Product,ReLU,及びMax Poolingに対する証明生成方法を順に説明する。
なお、JointProveACとは、論理回路で表現された計算に対する証明を生成するプロトコルである。そこで、i番目の論理ゲートに対する各入力を(i,L),(i,R)と表現し、i番目の論理ゲートにおける出力を(i,O)と表現することとする。このように表現されたCNNモデルは、論理回路で表現されたCNNモデルに当たる。以下のプロトコルを用いて生成されたWL,WR,WO,WV,[a_L],[a_R],及び[a_O]を入力としてJointProveACを動作させることにより、証明を生成することができる。第1証明群及び第2証明群の各々は、具体例として、WLと、WRと、WOと、WVと、[a_L]と、[a_R]と、[a_O]とから成る。
【0074】
Inner Productに対する証明を生成するプロトコルProveIPは以下のように動作する。
ProveIPは以下を入力として受け取る。
・WL,WR,WO,WV,及びc
・論理ゲートのインデックス(i1,u1),…,(im,um),(j1,v1),…,(jm,vm),及び(k,w)∈{1,…,n}×{L,R,O}
・[a_L](=([a_L[1]],…,[a_L[n]])),[a_R](=([a_R[1]],…,[a_R[n]])),[a_O](=([a_O[1]],…,[a_O[n]]))
【0075】
ProveIPは以下の次のステップに従って計算する。
(1)Mult関数を利用して、以下を計算する。
・[xk]=[a_uk[ik]・a_vk[jk]](k=1,…,m、uk及びvkの各々は{L,R,O}のいずれかであり、a_uk[ik]はa_ukのik番目の要素を示し、a_vk[jk]はa_vkのjk番目の要素を示す。)
【0076】
(2)Add関数を利用して以下を計算する。
・[y]=[x1+…+xm+a_w[k]]
【0077】
(3)a_L,a_R,及びa_Oの各々を以下のように拡張する。
・[a_L[n+k]]=[a_uk[ik]](k=1,…,m)
・[a_R[n+k]]=[a_vk[jk]](k=1,…,m)
・[a_O[n+k]]=[xm](k=1,…,m)
・[a_L[n+m+1]]=[y]
・[a_R[n+m+1]]=[1]
・[a_O[n+m+1]]=[y]
【0078】
(4)拡張したa_L,a_R,及びa_Oの各々に対して以下の計算を行う。
・a_L[n+k]=a_uk[ik](k=1,…,m)
・a_R[n+k]=a_vk[jk](k=1,…,m)
・a_L[n+m+1]=a_O[n+1]+…+a_O[n+m]+a_w[k]
上記の3式を満たし、かつ、
・WL・a_L+WR・a_R+WO・a_O=WVv+c
を満たすようにWL,WR,WO,WV,及びcの各々を拡張する。
【0079】
次に、ProveIPは以下を出力する。
・[a_L],[a_R],[a_O],WL,WR,WO,及びc
【0080】
次に、ProveReLUの説明において用いるサブプロトコルであるProveRangeについて説明する。
ProveRangeは以下を入力として受け取る。
・WL,WR,WO,WV,及びc
・論理ゲートのインデックス(i,u)∈{1,…,n}×{L,R,O}
・([a_L[1]],…,[a_L[n]]),([a_R[1]],…,[a_R[n]]),([a_O[1]],…,[a_O[n]])
【0081】
ProveRangeは以下の次のステップに従って計算する。
(1)Add関数を利用して以下を計算する。
[x]=[a_u[i]+2^m]
【0082】
(2)xをビット分解した値を[x0],…,[xm]とする。
【0083】
(3)a_L,a_R,及びa_Oの各々を次のように拡張する。
・a_L[n+1+j]=[xj](j=0,…,m)
・a_R[n+1+j]=[xj](j=0,…,m)
・a_O[n+1+j]=[xj](j=0,…,m)
【0084】
(4)拡張したa_L,a_R,及びa_Oに対して以下の計算を行う。
・a_L[n+1+i]=a_R[n+1+i](i=0,…,m)
・a_O[n+1+i]=a_L[n+1+i](i=0,…,m)
・a_u[i]+2^m=Σ2^i・a_L[n+1+i](i=0,…,m)
上記の3式を満たし、かつ、
・WL・a_L+WR・a_R+WO・a_O=WVv+c
を満たすようにWL,WR,WO,WV,及びcを拡張する。
【0085】
ReLUに対する証明を生成するプロトコルProveReLUは以下のように動作する。
ProveReLUは以下を入力として受け取る。
・WL,WR,WO,WV,及びc
・論理ゲートのインデックス(i,u)∈{1,…,n}×{L,R,O}
・([a_L[1]],…,[a_L[n]]),([a_R[1]],…,[a_R[n]]),([a_O[1]],…,[a_O[n]])
【0086】
ProveReLUは以下の次のステップに従って計算する。
(1)ProveRangeプロトコルを動作させ、以下の出力を得る。
・[a_L]=([a_L[1]],…,[a_L[n]],[a_L[n+1+0]],…,[a_L[n+1+2l+2d]])
・[a_R]=([a_R[1]],…,[a_R[n]],[a_R[n+1+0]],…,[a_R[n+1+2l+2d]])
・[a_O]=([a_O[1]],…,[a_O[n]],[a_O[n+1+0]],…,[a_O[n+1+2l+2d]])
【0087】
(2)SMult関数、Add関数、及びMult関数を利用して以下を計算する。
・[y]=[Σ2^(i-d)・a_L[n+1+i]](i=d,…,2l+2d-1)
・[y’]=[a_L[n+1+2l+2d]・Σ2^(i-d)・a_L[n+1+i]](i=d,…,2l+2d-1)
【0088】
(3)a_L,a_R,及びa_Oの各々を以下のように拡張する。
・a_L[n+1+2l+2d+1]=[a_L[n+1+2l+2d]]
・a_R[n+1+2l+2d+1]=[y]
・a_O[n+1+2l+2d+1]=[y’]
【0089】
(4)拡張したa_L,a_R,及びa_Oに対して以下の計算を行う。
・a_L[n+1+2l+2d+1]=[a_L[n+1+2l+2d]]
・a_R[n+1+2l+2d+1]=Σ2^(i-d)・a_L[n+1+i](i=d,…,2l+2d-1)
上記の2式を満たし、かつ、
・WL・a_L+WR・a_R+WO・a_O=WVv+c
を満たすようにWL,WR,WO,WV,及びcの各々を拡張する。
【0090】
次に、ProveMaxPoolの説明において用いるサブプロトコルであるProveRangePositiveについて説明する。
ProveRangePositiveは以下を入力として受け取る。
・WL,WR,WO,WV,及びc
・論理ゲートのインデックス(i,u)∈{1,…,n}×{L,R,O}
・([a_L[1]],…,[a_L[n]]),([a_R[1]],…,[a_R[n]]),([a_O[1]],…,[a_O[n]])
【0091】
ProveRangePositiveは以下の次のステップに従って計算する。
(1)ビット分解した値を[x0],…,[xm]とする。
【0092】
(2)a_L,a_R,及びa_Oを次のように拡張する。
・a_L[n+1+j]=[xj](j=0,…,m)
・a_R[n+1+j]=[xj](j=0,…,m)
・a_O[n+1+j]=[xj](j=0,…,m)
【0093】
(3)拡張したa_L,a_R,及びa_Oの各々に対して以下の計算を行う。
・a_L[n+1+i]=a_R[n+1+i](i=0,…,m)
・a_O[n+1+i]=a_L[n+1+i](i=0,…,m)
・a_u[i]+2^m=Σ2^i・a_L[n+1+i](i=0,…,m)
上記の3式を満たし、かつ、
・WL・a_L+WR・a_R+WO・a_O=WVv+c
を満たすようにWL,WR,WO,WV,及びcの各々を拡張する。
【0094】
Max Poolingに対する証明を生成するプロトコルProveMaxPoolは以下のように動作する。
ProveMaxPoolは以下を入力として受け取る。
・WL,WR,WO,WV,及びc
・論理ゲートのインデックス(i1,u1),…,(im,um)∈{1,…,n}×{L,R,O}
・([a_L[1]],…,[a_L[n]]),([a_R[1]],…,[a_R[n]]),([a_O[1]],…,[a_O[n]])
【0095】
ProveMaxPoolは以下の次のステップに従って計算する。
(1)Argmax関数を利用して、[a_uj[i_j]](j=1,…,m)のうち最大値のインデックス[i*]を計算する。
【0096】
(2)EQ関数を利用して、[zi]=EQ([i*],[j])(j=1,…,m)を計算する。
【0097】
(3)Mult関数を利用して、[z’j]=[a_uj[ij]・zj](j=1,…,m)を計算する。
【0098】
(4)Add関数を利用して、[z*]=[a_u1[i1]z’1+…+a_um[im]z’m]を計算する。
【0099】
(5)Add関数を利用して、[z’’j]=[a_ui*[ii*]-a_uj[ij]](j=1,…,m)を計算する。
【0100】
(6)a_L,a_R,及びa_Oを以下のように拡張する。
・a_L[n+j]=[a_uj[ij]](j=0,…,m)
・a_R[n+j]=[zj](j=0,…,m)
・a_O[n+j]=[z’j](j=0,…,m)
・a_L[n+m+1]=[z*]
・a_R[n+m+1]=[1]
・a_O[n+m+1]=[z*]
・a_L[n+m+1+j]=[z’’j](j=0,…,m)
・a_R[n+m+1+j]=[1](j=0,…,m)
・a_O[n+m+1+j]=[z’’j](j=0,…,m)
【0101】
(7)拡張したa_L,a_R,及びa_Oに対して以下の計算を行う。
・a_L[n+1]=a_L[n+m]-a_u1[i1]
・a_L[n+j]=a_O[n+j-1](j=2,…,m-1)
・a_R[n+j]=a_L[n+m]-a_u(j+1)[ij+1](j=1,…,m-1)
・a_O[n+m-1]=0
・a_L[n+m+j]=a_L[n+m]-a_uj[ij](j=1,…,m)
上記の3式を満たし、かつ、
・WL・a_L+WR・a_R+WO・a_O=WVv+c
を満たすようにWL,WR,WO,WV,及びcを拡張する。
【0102】
(8)j=1,…,mに対してProveRangePositiveプロトコルを動作させることにより、WL,WR,WO,WV,[a_L],[a_R],[a_O],及びcを出力として得る。
【0103】
次に、生成された証明に対する検証プロトコルであるVerifyACの動作を説明する。
はじめに、VerifyACの内部で利用するプロトコルであるVerifyIPについて説明する。
VerifyIPは、以下を入力として受け取る。
・vec(g),vec(h)∈G^n,P∈G,及びc∈Z_p
・Π_ip=(L(n),R(n),L(n/2),R(n/2),…,L(2),R(2),a(1),b(1))
【0104】
VerifyIPは以下の次のステップに従って計算する。
(1)Hをハッシュ関数として以下を計算する。
(x,u0)=H(vec(g),vec(h),P,c)
【0105】
(2)g(n)=vec(g),h(n)=vec(h),u=u0^x,P(n)=P・u0^(xc),a(n)=a,b(n)=bとする。
【0106】
(3)以下の計算をm=n,n/2,n/2^2,…,2について繰り返す。
(a)Hをハッシュ関数として以下を計算する。
x(m)=H(g(n),h(n),u,P(n),L(n),R(n),
g(n/2),h(n/2),u,P(n/2),L(n/2),R(n/2),
…,
g(m),h(m),u,P(m),L(m),R(m))
(b)以下を計算する。
・g(m/2)=(g(m)_[:m/2])^(x(m)^(-1))・(g(m)_[m/2:])^x(m)
・h(m/2)=(h(m)_[:m/2])^x(m)・(h(m)_[m/2:])^(x(m)^(-1))
・P(m/2)=(L(m))^(x(m))^2・P(m)・(R(m))^(x(m))^(-2)
【0107】
(4)P(1)=(g(1))^(a(1))・(h(1)^(b(1)))・u^(a(1)・b(1))である場合に検証成立として1を出力し、そうでない場合に検証不成立として0を出力する。
【0108】
VerifyACは以下のように動作する。
VerifyACは、以下を入力として受け取る。
・pp=(g,h,vec(g),vec(h)):g,h∈G,vec(g),vec(h)∈G^m
・stmt=(V,WL,WR,WO,WV,c):V∈G^m,WL,WR,WO∈Z_p^(Q×n),WV∈Z_p^(Q×n),and c∈Z_p^Q
・Π_ac=(AI,AO,S,T1,T3,T4,T5,T6,τx,μ,t,Π_ip)
【0109】
VerifyACは以下の次のステップに従って計算する。
(1)Hをハッシュ関数として以下を計算する。
(y,z)=H(pp,stmt,AI,AO,S)
【0110】
(2)以下を計算する。
・y(n)=(1,y,y^2,…,y^(n-1))
・z(Q+1)_[1:]=(z,z^2,z^3,…,z^Q)
【0111】
(3)Hをハッシュ関数として以下を計算する。
・x=H(pp,stmt,AI,AO,S,T1,T3,T4,T5,T6)
【0112】
(4)δ=<y(-n)〇(z(Q+1)_[1:]・WR),z(Q+1)_[1:]・WL>を計算する。
【0113】
(5)以下を計算する。
・h’_i=(h_i)^(y^(-i+1))(i=1,2,…,n)
・WL=(h’)^(z(Q+1)_[1:]・WL)
・WR=vec(g)^(y(-n)〇(z(Q+1)_[1:]・WR))
・WO=(h’)^(z(Q+1)_[1:]・WO)
・P=AI^x・AO^(x^2)・(h’)^(-y(n))・(WL)^x・WO・S^(x^3)
【0114】
(6)以下の2つが成立する場合にVerifyACは検証成立として1を出力し、そうでない場合に検証不成立として0を出力する。
・g^t・h^τx=g^(g^(δ+<z(Q+1)_[1:],c>)・V^(x^2・z(Q+1)_[1:]・WV)・T1^x・T3^(x^3)・T4^(x^4)・T5^(x^5)・T6^(x^6)
・vec(g),vec(h),P・h^(-μ),t,及びΠ_ipについて、VerifyIPを動作させることにより1が出力される。
【0115】
以下、説明したプロトコルを用いた推論検証システム100の動作のフローを説明する。フローチャートなどに基づいて説明する本実施の形態の処理は、プロセッサ11と、記憶装置と、入力装置と、出力装置などのハードウェアを用いて実行される。
図7は、共通パラメータ生成装置200の動作の一例を示すフローチャートである。
図7を用いて共通パラメータ生成装置200の動作を説明する。
【0116】
(ステップS201)
共通パラメータ生成部201は、公開パラメータppを生成する。
【0117】
(ステップS202)
出力部202は、共通パラメータ生成部201によって生成された公開パラメータppを各装置へ送信する。
【0118】
図8は、ユーザ用演算装置300の動作を示すフローチャートである。
図8を用いてユーザ用演算装置300の動作を説明する。
【0119】
(ステップS301)
入力部301は、入力データを受け取る。ここで、入力データはCNNへの入力となる画像などを示すデータである。
【0120】
(ステップS302)
データ秘匿部302は、秘匿手法Encを利用して、入力部301が受け取った入力データを秘匿化することにより秘匿化データを生成する。当該秘匿化データは第1秘匿化データに当たる。
【0121】
(ステップS303)
証明生成部303は、証明を生成する対象であるCNNを計算する手順を、論理回路を用いて表現する。「論理回路」を「論理ゲート」と読み替えてもよい。
【0122】
(ステップS304)
証明生成部303は、ステップS303において生成した論理回路の表現と、ステップS302において生成した秘匿化データとを用いてProveIP,ProveReLU,及びProveMaxPoolを適切な順序で実行することにより、WL,WR,WO,WV,[a_L],[a_R],[a_O],及びcを生成する。
ここで、論理回路の表現は、前述の論理ゲートのインデックスである(i1,u1),…,(im,um)と(j1,v1),…,(jm,vm)と(k,w)∈{1,…,n}×{L,R,O}から成る。秘匿化データは、前述の([a_L[1]],…,[a_L[n]])と([a_R[1]],…,[a_R[n]])と([a_O[1]],…,[a_O[n]])とから成る。
【0123】
(ステップS305)
証明生成部303は、ステップS304において生成したWL,WR,WO,WV,[a_L],[a_R],[a_O],及びcを入力としてJointProveACを動作させることにより証明Πを生成する。当該証明Πは第1証明に当たる。
【0124】
(ステップS306)
出力部304は、証明生成部303によって生成された証明Πを検証装置500に送信する。
【0125】
図9は、提供者用演算装置400の動作の一例を示すフローチャートである。
図9を用いて提供者用演算装置400の動作を説明する。
【0126】
(ステップS401)
入力部401は、入力データを受け取る。ここで、入力データはCNNの各層における重みパラメータを示すデータである。
【0127】
(ステップS402)
データ秘匿部402は、秘匿手法Encを利用して、入力部401が受け取った入力データを秘匿化することにより秘匿化データを生成する。当該秘匿化データは第2秘匿化データに当たる。
【0128】
(ステップS403)
証明生成部403は、証明を生成する対象であるCNNを計算する手順を、論理回路を用いて表現する。
【0129】
(ステップS404)
証明生成部403は、ステップS403において生成した論理回路の表現と、ステップS402において生成した秘匿化データとを用いてProveIP,ProveReLU,及びProveMaxPoolを適切な順序で実行することにより、WL,WR,WO,WV,[a_L],[a_R],[a_O],及びcを生成する。本ステップはステップS304と同様である。
【0130】
(ステップS405)
証明生成部403は、ステップS404において生成したWL,WR,WO,WV,[a_L],[a_R],[a_O],及びcを入力としてJointProveACを動作させることにより証明Πを生成する。当該証明Πは第2証明に当たる。
【0131】
(ステップS406)
出力部404は、証明生成部403によって生成された証明Πを検証装置500に送信する。
【0132】
図10は、検証装置500の動作の一例を示すフローチャートである。
図10を用いて検証装置500の動作を説明する。
【0133】
(ステップS501)
入力部501は、証明Πを受信する。
【0134】
(ステップS502)
検証部502は、入力部501が受信した証明Πに対してProveACを動作させて証明を検証することにより、証明Πに対応する検証結果を得る。
【0135】
(ステップS503)
出力部503は、検証部502が得た証明の検証結果を示すデータを出力する。
【0136】
***実施の形態1の効果の説明***
本実施の形態によれば、ゼロ知識証明技術によりCNNを検証する技術において、入力データと推論モデルとのどちらも秘匿化した状態で、入力データと推論モデルとを用いた推論処理が適切に実行されたことを示す証明を生成することができる。そのため、本実施の形態によれば、入力データと推論モデルとの各々に関するプライバシーが十分に保護される。
さらに、本実施の形態によれば、第三者に対して、推論結果が入力データと推論モデルとを用いた分析処理によって適切に得られた結果であることを証明することができる。
【0137】
***他の構成***
<変形例1>
図11は、本変形例に係るコンピュータ10のハードウェア構成例を示している。
コンピュータ10は、プロセッサ11、プロセッサ11とROM13、プロセッサ11とRAM14、あるいはプロセッサ11とROM13とRAM14とに代えて、処理回路30を備える。
処理回路30は、コンピュータ10が備える各部の少なくとも一部を実現するハードウェアである。
処理回路30は、専用のハードウェアであってもよく、また、RAM14に格納されるプログラムを実行するプロセッサであってもよい。
【0138】
処理回路30が専用のハードウェアである場合、処理回路30は、具体例として、単一回路、複合回路、プログラム化したプロセッサ、並列プログラム化したプロセッサ、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)又はこれらの組み合わせである。
コンピュータ10は、処理回路30を代替する複数の処理回路を備えてもよい。複数の処理回路は、処理回路30の役割を分担する。
【0139】
コンピュータ10において、一部の機能が専用のハードウェアによって実現されて、残りの機能がソフトウェア又はファームウェアによって実現されてもよい。
【0140】
処理回路30は、具体例として、ハードウェア、ソフトウェア、ファームウェア、又はこれらの組み合わせにより実現される。
プロセッサ11とROM13とRAM14と処理回路30とを、総称して「プロセッシングサーキットリー」という。つまり、コンピュータ10の各機能構成要素の機能は、プロセッシングサーキットリーにより実現される。
【0141】
***他の実施の形態***
実施の形態1について説明したが、本実施の形態のうち、複数の部分を組み合わせて実施しても構わない。あるいは、本実施の形態を部分的に実施しても構わない。その他、本実施の形態は、必要に応じて種々の変更がなされても構わず、全体としてあるいは部分的に、どのように組み合わせて実施されても構わない。
なお、前述した実施の形態は、本質的に好ましい例示であって、本開示と、その適用物と、用途の範囲とを制限することを意図するものではない。フローチャートなどを用いて説明した手順は適宜変更されてもよい。
【符号の説明】
【0142】
10 コンピュータ、11 プロセッサ、12 バス、13 ROM、14 RAM、15 通信ボード、16 ディスプレイ、17 キーボード、18 マウス、19 ドライブ、20 磁気ディスク装置、21 OS、22 プログラム群、23 ファイル群、30 処理回路、100 推論検証システム、101 インターネット、200 共通パラメータ生成装置、201 共通パラメータ生成部、202 出力部、300 ユーザ用演算装置、301 入力部、302 データ秘匿部、303 証明生成部、304 出力部、400 提供者用演算装置、401 入力部、402 データ秘匿部、403 証明生成部、404 出力部、500 検証装置、501 入力部、502 検証部、503
出力部。