IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 日本電信電話株式会社の特許一覧

特許7405157秘密計算装置、秘密計算方法、およびプログラム
<>
  • 特許-秘密計算装置、秘密計算方法、およびプログラム 図1
  • 特許-秘密計算装置、秘密計算方法、およびプログラム 図2
  • 特許-秘密計算装置、秘密計算方法、およびプログラム 図3
  • 特許-秘密計算装置、秘密計算方法、およびプログラム 図4
  • 特許-秘密計算装置、秘密計算方法、およびプログラム 図5
  • 特許-秘密計算装置、秘密計算方法、およびプログラム 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-12-18
(45)【発行日】2023-12-26
(54)【発明の名称】秘密計算装置、秘密計算方法、およびプログラム
(51)【国際特許分類】
   G09C 1/00 20060101AFI20231219BHJP
【FI】
G09C1/00 650Z
【請求項の数】 12
(21)【出願番号】P 2021572125
(86)(22)【出願日】2020-01-20
(86)【国際出願番号】 JP2020001680
(87)【国際公開番号】W WO2021149103
(87)【国際公開日】2021-07-29
【審査請求日】2022-06-23
(73)【特許権者】
【識別番号】000004226
【氏名又は名称】日本電信電話株式会社
(74)【代理人】
【識別番号】100121706
【弁理士】
【氏名又は名称】中尾 直樹
(74)【代理人】
【識別番号】100128705
【弁理士】
【氏名又は名称】中村 幸雄
(74)【代理人】
【識別番号】100147773
【弁理士】
【氏名又は名称】義村 宗洋
(72)【発明者】
【氏名】五十嵐 大
【審査官】青木 重徳
(56)【参考文献】
【文献】特表2020-525814(JP,A)
【文献】大畑 幸矢,秘匿深層学習再考,2018年 暗号と情報セキュリティシンポジウム(SCIS2018)予稿集 [USB],日本,2018年01月23日,3F-1,p. 1-8
【文献】CATRINA, Octavian et al.,Secure Computation With Fixed-Point Numbers,LNCS, Financial Cryptography and Data Security,Vol. 6052,ドイツ,Springer,2010年,p. 35-50
【文献】五十嵐 大,秘密計算上の理論最適な単精度関数近似法,2020年 暗号と情報セキュリティシンポジウム,日本,2020年01月21日,2C3-1,p. 1-8
【文献】天田 拓磨 ほか,浮動小数点演算のための通信量を削減したマルチパーティ計算,2018年 暗号と情報セキュリティシンポジウム(SCIS2018)予稿集 [USB],日本,2018年01月23日,2A2-2,p. 1-8
【文献】三品 気吹 ほか,高精度かつ高効率な秘密ロジスティック回帰の設計と実装,CSS2018 コンピュータセキュリティシンポジウム2018論文集,日本,一般社団法人情報処理学会,2018年10月25日,p. 1229-1236
(58)【調査した分野】(Int.Cl.,DB名)
G09C 1/00
JSTPlus/JMEDPlus/JST7580(JDreamIII)
IEEE Xplore
THE ACM DIGITAL LIBRARY
(57)【特許請求の範囲】
【請求項1】
xが実数であり、[μ]がμの秘密分散値であり、nが1以上の整数であり、t=0,…,n-1であり、u=1,…,n-1であり、ft(x)が前記実数xに対する関数であり、f't(x)は前記関数ft(x)の近似関数であり、近似関数f'0(x)の秘密分散値[f'0(x)]が[f'0(x)]=c0,0+c0,1[x]であり、近似関数f'u(x)の秘密分散値[f'u(x)]が[f'u(x)]=cu,0+cu,1[x]+cu,2[f0(x)]+…+cu,u+1[fu-1(x)]であり、ct,0は公開値であり、ct,1,…,ct,n+1は係数であり、
前記実数xの秘密分散値[x]を用いた秘密計算によってft(x)-f't(x)の秘密分散値[ft(x)-f't(x)]を得る第1秘密計算部と、
前記秘密分散値[ft(x)-f't(x)]を用いた秘密計算によってft(x)-f't(x)を所定ビット数だけ右シフトした(ft(x)-f't(x))rの秘密分散値[ft(x)-f't(x)]rを得る第2秘密計算部と、
を有する秘密計算装置。
【請求項2】
請求項1の秘密計算装置であって、
前記秘密分散値[ft(x)-f't(x)]rと前記秘密分散値[f't(x)]を用いた秘密計算によって前記関数ft(x)の秘密分散値[ft(x)]を得る第3秘密計算部をさらに有する秘密計算装置。
【請求項3】
請求項1または2の秘密計算装置であって、
前記第1秘密計算部は、前記秘密分散値[x]を用いた積和演算の秘密計算によって前記秘密分散値[ft(x)-f't(x)]を得る秘密計算装置。
【請求項4】
請求項2の秘密計算装置であって、
nが2以上の整数であり、
t=0,…,n-2について、前記第1秘密計算部と前記第2秘密計算部と前記第3秘密計算部の処理を実行するたびに、t+1を新たなtとして、前記第1秘密計算部と前記第2秘密計算部と前記第3秘密計算部の処理を再び実行し、秘密分散値[fn-1(x)]を得る秘密計算装置。
【請求項5】
請求項2の秘密計算装置であって、
n=3であり、
a, b, c, d, f, g, h, i, j, k, s, m, n, o, p, q, α,β,γ,δ,ζが実数であり、
f0(x)=y=δx2+axであり、
f1(x)=z=y(ζy+b)+cxであり、
f2(x)=w=γ(z(αz+d)+y(βx+f)+gx)であり、
f'0(x)=ix+jであり、
f'1(x)=ky+sx+mであり、
f'2(x)=nz+oy+px+qである、秘密計算装置。
【請求項6】
請求項5の秘密計算装置であって、
前記第1秘密計算部は、前記秘密分散値[x]を用いた積和演算の秘密計算によって秘密分散値[f0(x)-f'0(x)]=[y’]=[x(δx+a-i)-j]を得、
前記第2秘密計算部は、前記秘密分散値[y’]を用いた秘密計算によってy’を所定ビット数だけ右シフトしたy’rの秘密分散値[y’]rを得、
前記第3秘密計算部は、前記秘密分散値[y’]rと前記秘密分散値[f'0(x)]=[ix+j]を用いた秘密計算によって秘密分散値[y]=[y’+(ix+j)]を得、
前記第1秘密計算部は、前記秘密分散値[x]および前記秘密分散値[y]を用いた積和演算の秘密計算によって秘密分散値[f1(x)-f'1(x)]=[z’]=[y(ζy+b-k)+(c-s)x-m]を得、
前記第2秘密計算部は、前記秘密分散値[z’]を用いた秘密計算によってz’を所定ビット数だけ右シフトしたz’rの秘密分散値[z’]rを得、
前記第3秘密計算部は、前記秘密分散値[z’]rと前記秘密分散値[f'1(x)]=[ky+sx+m]を用いた秘密計算によって秘密分散値[y]=[z’+(ky+sx+m)]を得、
前記第1秘密計算部は、前記秘密分散値[x]、前記秘密分散値[y]、および前記秘密分散値[z]を用いた積和演算の秘密計算によって秘密分散値[w’/γ]=[z(αz+d-n/γ)+(βx+f-o/γ)y+(g-p)x+(h-q)/γ]を得、
前記第2秘密計算部は、前記秘密分散値[w’/γ]を用いた秘密計算によってw’/γにγを乗算して得られるw’を所定ビット数だけ右シフトしたw’rの秘密分散値[w’]rを得、
前記第3秘密計算部は、前記秘密分散値[w’]rと前記秘密分散値[f'2(x)]=[nz+oy+px+q]を用いた秘密計算によって秘密分散値[w]=[w’+(nz+oy+px+q)]を得る秘密計算装置。
【請求項7】
請求項6の秘密計算装置であって、
σが正整数であり、
前記第2秘密計算部は、公開値2σ/γを得、前記公開値2σ/γと前記秘密分散値[w’/γ]を用いた公開値除算の秘密計算[w’/γ]/(2σ/γ)によって前記秘密分散値[w’]rを得る秘密計算装置。
【請求項8】
請求項2の秘密計算装置であって、
n=2であり、
a, b, c,γ,δ,i, j, k, s, mが実数であり、
f0(x)=y=δx2+axであり、
f1(x)=z=γ(y(δy+b)+cx)であり、
f'0(x)=ix+jであり、
f'1(x)=ky+sx+mである、秘密計算装置。
【請求項9】
請求項8の秘密計算装置であって、
前記第1秘密計算部は、前記秘密分散値[x]を用いた積和演算の秘密計算によって秘密分散値[f0(x)-f'0(x)]=[y’]=[x(δx+a-i)-j]を得、
前記第2秘密計算部は、前記秘密分散値[y’]を用いた秘密計算によってy’を所定ビット数だけ右シフトしたy’rの秘密分散値[y’]rを得、
前記第3秘密計算部は、前記秘密分散値[y’]rと前記秘密分散値[f'0(x)]=[ix+j]を用いた秘密計算によって秘密分散値[y]=[y’+(ix+j)]を得、
前記第1秘密計算部は、前記秘密分散値[x]と前記秘密分散値[y]を用いた積和演算の秘密計算によって秘密分散値[z’/γ]=[y(ζy+b-k/γ)+(c-s/γ)x-m/γ]を得、
前記第2秘密計算部は、前記秘密分散値[z’/γ]を用いた秘密計算によってz’/γにγを乗算して得られるz’を所定ビット数だけ右シフトしたz’rの秘密分散値[z’]rを得、
前記第3秘密計算部は、前記秘密分散値[z’]rと前記秘密分散値[f'1(x)]=[ky+sx+m]を用いた秘密計算によって秘密分散値[z]=[z’+(ky+sx+m)]を得る、秘密計算装置。
【請求項10】
請求項9の秘密計算装置であって、
σが正整数であり、
前記第2秘密計算部は、公開値2σ/γを得、前記公開値2σ/γと前記秘密分散値[z’/γ]を用いた公開値除算の秘密計算[z’/γ]/(2σ/γ)によって前記秘密分散値[z’]rを得る秘密計算装置。
【請求項11】
xが実数であり、[a]がaの秘密分散値であり、nが1以上の整数であり、t=0,…,n-1であり、u=1,…,n-1であり、Ft(x)が前記実数xに対する関数であり、f't(x)は前記関数ft(x)の近似関数であり、近似関数f'0(x)の秘密分散値[f'0(x)]が[f'0(x)]=c0,0+c0,1[x]であり、近似関数f'u(x)の秘密分散値[f'u(x)]が[f'u(x)]=cu,0+cu,1[x]+cu,2[f0(x)]+…+cu,u+1[fu-1(x)]であり、ct,0は公開値であり、ct,1,…,ct,n+1は係数であり、
第1秘密計算部で、前記実数xの秘密分散値[x]を用いた秘密計算によってft(x)-f't(x)の秘密分散値[ft(x)-f't(x)]を得る第1秘密計算ステップと、
第2秘密計算部で、前記秘密分散値[ft(x)-f't(x)]を用いた秘密計算によってft(x)-f't(x)を所定ビット数だけ右シフトした(ft(x)-f't(x))rの秘密分散値[ft(x)-f't(x)]rを得る第2秘密計算ステップと、
を有する秘密計算方法。
【請求項12】
請求項1から10の何れかの秘密計算装置としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、秘密計算に関する。
【背景技術】
【0002】
近年、秘密計算による高度な統計や機械学習の研究が盛んになってきている。しかしこれらの演算のほとんどは秘密計算で得意な加減乗算を超える、逆数、平方根、指数、対数などの初等関数群の計算を含んでいる。これらは秘密計算の応用研究を花開かせる観点で極めて大きな障害である。これに対し、非特許文献1では、逆数、除数秘匿除算、平方根とその逆数,指数などの計算方法を提示している。
【先行技術文献】
【非特許文献】
【0003】
【文献】五十嵐大,“秘密計算AIの実装に向けた秘密実数演算群の設計と実装-O(|p|)ビット通信量O(1)ラウンドの実数向け右シフト,”In CSS2019, 2019.
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、秘密計算によって右シフトや公開値による除算を行う場合に、オーバーフローによって正しく計算ができなくなってしまう場合がある。一方、オーバーフローを防ぐために右シフトを行って小数領域へのビット割り当てを減らして整数領域へのビット割り当てを増やしたのでは精度が低下する。
【0005】
本発明はこのような点に鑑みてなされたものであり、高い精度を保ちつつ、オーバーフローを抑制する秘密計算技術を提供する。
【課題を解決するための手段】
【0006】
xが実数であり、[μ]がμの秘密分散値であり、nが1以上の整数であり、t=0,…,n-1であり、u=1,…,n-1であり、ft(x)が前記実数xに対する関数であり、f't(x)は関数ft(x)の近似関数であり、近似関数f'0(x)の秘密分散値[f'0(x)]が[f'0(x)]=c0,0+c0,1[x]であり、近似関数f'u(x)の秘密分散値[f'u(x)]が[f'u(x)]=cu,0+cu,1[x]+cu,2[f0(x)]+…+cu,u+1[fu-1(x)]であり、ct,0は公開値であり、ct,1,…,ct,n+1は係数であるとする。本発明では、実数xの秘密分散値[x]を用いた秘密計算によってft(x)-f't(x)の秘密分散値[ft(x)-f't(x)]を得、秘密分散値[ft(x)-f't(x)]を用いた秘密計算によってft(x)-f't(x)を所定ビット数だけ右シフトした(ft(x)-f't(x))rの秘密分散値[ft(x)-f't(x)]rを得る。
【発明の効果】
【0007】
本発明では、高い精度を保ちつつ、オーバーフローを抑制することができる。
【図面の簡単な説明】
【0008】
図1図1は実施形態の秘密計算装置を例示したブロックである。
図2図2は第1実施形態の処理を説明するためのフロー図である。
図3図3は第2実施形態の処理を説明するためのフロー図である。
図4図4は第3実施形態の処理を説明するためのフロー図である。
図5図5は各初等関数に関する計算済みのパラメータを例示した表である。
図6図6はハードウェア構成を説明するためのブロック図である。
【発明を実施するための形態】
【0009】
以下、図面を参照して本発明の実施の形態を説明する。
近年、秘密計算による高度な統計や機械学習の研究が盛んになってきている。しかしこれらの演算のほとんどは秘密計算の得意な加減乗算を超える、逆数、平方根、指数、対数などの初等関数計算を含んでいる。初等関数等の基礎的な関数の関数近似法にはTaylor展開などがある。Taylor展開などは多項式であり、任意の関数を多項式で近似することで、秘密計算の得意な加減乗算を用いて当該関数の近似計算を行うことができる。
【0010】
以下の実施形態では、任意の関数を多項式関数ft(x)で近似し、さらに右シフト前の関数ft(x)と当該関数ft(x)の近似関数f'u(x)との差分ft(x)-f't(x)の秘密分散値[ft(x)-f't(x)]を計算し、ft(x)-f't(x)を右シフトした(ft(x)-f't(x))rの秘密分散値[ft(x)-f't(x)]rを得、秘密分散値[ft(x)-f't(x)]rと秘密分散値[f't(x)]の秘密計算によってft(x)-f't(x)にf't(x)を加算した関数ft(x)の秘密分散値[ft(x)]を得る。ただし、xが実数であり、[μ]がμの秘密分散値であり、nが1以上の整数(例えば、nは2以上の整数)であり、t=0,…,n-1であり、u=1,…,n-1であり、ft(x)が実数xに対する関数であり、f't(x)は関数ft(x)の近似関数であり、近似関数f'0(x)の秘密分散値[f'0(x)]が[f'0(x)]=c0,0+c0,1[x]であり、近似関数f'u(x)の秘密分散値[f'u(x)]が[f'u(x)]=cu,0+cu,1[x]+cu,2[f0(x)]+…+[fu-1(x)]であり、ct,0は公開値であり、ct,1,…,ct,n+1は係数である。ただし、ct,1,…,ct,n+1は有効ビット数の小さな値であり、ct,1,…,ct,n+1が乗じられても桁あふれによってシフトが必要になるようなことがない値である。ft(x)-f't(x)は正である。また環上の整数に公開の小数点位置を定めることで固定小数点の実数と見なすことができる。実施形態ではこのようにして環上で表した固定小数点の実数を単に実数と表記する。秘密分散方式に限定はなく、例えば、加法的秘密分散方式やシャミア秘密分散方式などを例示できる。[μ]の一例は剰余環上の要素μを線形秘密分散した秘密分散値(シェア)である。
【0011】
ここでft(x)-f't(x)の大きさはft(x)の大きさよりも小さいため、秘密分散値[ft(x)-f't(x)]のオーバーフローを抑制することができる。また右シフト前の関数ft(x)と当該関数ft(x)の近似関数f'u(x)との差分ft(x)-f't(x)の秘密分散値[ft(x)-f't(x)]を計算するため、高い精度を保つことができる。オーバーフローは秘密計算を実装したプロセッサの性能に基づく問題であり、本方式はこのハードウェア上の制約に基づく問題を解決するための手法を提供する。このように、本方式は純粋数学上の問題を解決するものではなく、ハードウェア実装上の問題を解決するものであって技術的特徴を有するものである。例えば、秘密分散値[ft(x)]を計算するとオーバーフローしてしまうが秘密分散値[ft(x)-f't(x)]の計算ではオーバーフローしないプロセッサではその技術的特徴は顕著である。
【0012】
以下に各実施形態を説明する。
[第1実施形態]
図1に例示するように、第1実施形態の秘密計算装置1は、秘密計算部11,12,13、および制御部19を有する。本実施形態の秘密計算装置1は、実数xの秘密分散値[x]∈[L,R)を入力とし、秘密計算を行って目的の関数fn-1(x)の秘密分散値[fn-1(x)]を出力する。なお、L,RはL<Rを満たす実数であり、[L,R)はL以上R未満の左閉右開区間を表す。関数fn-1(x)の例は初等関数を近似する多項式である。fn-1(x)を得る過程で表れる関数をf0(x),…,fn-2(x)と表記する。以下、図2を用いて詳細に説明する。
【0013】
図2に例示するように、まず秘密計算装置1の秘密計算部11に秘密分散値[x]が入力される(ステップS10)。次に制御部19はt=0に初期化する(ステップS19a)。
【0014】
秘密計算部11は、少なくとも秘密分散値[x]を用い、積和の秘密計算によって関数ft(x)と当該関数ft(x)の近似関数f'u(x)との差分ft(x)-f't(x)の秘密分散値[ft(x)-f't(x)]を得て出力する。ただし、[f'0(x)]=c0,0+c0,1[x]であり、u=1,…,n-1について[f'u(x)]=cu,0+cu,1[x]+cu,2[f0(x)]+…+[fu-1(x)]である。例えば、t=0のときには、秘密計算部11は秘密分散値[x]と関数f0(x)とc0,0,c0,1を用いて秘密分散値[f0(x)-f'0(x)]を得る。t=1,…,n-1のときには、秘密計算部11は秘密分散値[x]と[f0(x)],…,[ft(x)]とc0,0,c0,1,…,c0,t+1と用いて秘密分散値[ft(x)-f't(x)]を得る(ステップS11)。
【0015】
秘密分散値[ft(x)-f't(x)]は秘密計算部12に入力される。秘密計算部12は、秘密分散値[ft(x)-f't(x)]を用いた秘密計算によってft(x)-f't(x)を所定ビット数だけ右シフトした(ft(x)-f't(x))rの秘密分散値[ft(x)-f't(x)]rを得て出力する。右シフトの秘密計算は除算の秘密演算によって実現でできる。これによってft(x)-f't(x)の小数点位置を所定の桁まで下げる。この小数点位置は予め定められている(ステップS12)。
【0016】
秘密分散値[ft(x)-f't(x)]rは秘密計算部13に入力される。秘密計算部13は、秘密分散値[ft(x)-f't(x)]rと秘密分散値[f't(x)]を用いた秘密計算によって関数ft(x)の秘密分散値[ft(x)]を得て出力する。すなわち、秘密計算部13は、秘密分散値[ft(x)-f't(x)]rと秘密分散値[f't(x)]を用いた加算の秘密計算によって、ft(x)-f't(x)+f't(x)=ft(x)の秘密分散値[ft(x)]を得る(ステップS13)。
【0017】
制御部19はt=n-1であるかを判定する(ステップS19b)。t=n-1でなければ、制御部19はt+1を新たなtとして処理をステップS11に戻す(ステップS19c)。一方、t=n-1であれば、秘密計算部13は秘密分散値[fn-1(x)]を出力する(ステップS19d)。すなわち、秘密計算装置1は、t=0,…,n-2について、秘密計算部11~13のステップS11~S13の処理を実行するたびに、t+1を新たなtとして、ステップS11~S13の処理を再び実行し、秘密分散値[fn-1(x)]を得る。
【0018】
[第2実施形態]
図1に例示するように、第2実施形態の秘密計算装置2は、秘密計算部21,22,23、および制御部19を有する。第2実施形態の秘密計算装置2は、実数xの秘密分散値[x]∈[L,R)を入力とし、秘密計算を行って目的の関数fn-1(x)の秘密分散値[fn-1(x)]を出力する。第2実施形態では、n=3であり、a, b, c, d, f, g, h, i, j, k, s, m, n, o, p, q, α,β,γ,δ,ζが実数であり、f0(x)=y=δx2+axであり、f1(x)=z=y(ζy+b)+cxであり、f2(x)=w=γ(z(αz+d)+y(βx+f)+gx)であり、f'0(x)=ix+jであり、f'1(x)=ky+sx+mであり、f'2(x)=nz+oy+px+qである例を説明する。なお、近似関数f'0(x)=ix+j,f'1(x)=ky+sx+m,f'2(x)=nz+oy+px+qの設定方法および具体例については後述する。
【0019】
図3に例示するように、まず秘密計算装置2の秘密計算部21に秘密分散値[x]が入力される(ステップS10)。
【0020】
秘密計算部21は、秘密分散値[x]を用いた積和演算の秘密計算によって秘密分散値[f0(x)-f'0(x)]=[y’]=[x(δx+a-i)-j]を得て出力する(ステップS21a)。
【0021】
秘密分散値[y’]は秘密計算部22に入力される。秘密計算部22は、秘密分散値[y’]を用いた秘密計算によってy’を所定ビット数だけ右シフトしたy’rの秘密分散値[y’]rを得て出力する(ステップS22a)。
【0022】
秘密分散値[y’]rは秘密計算部23に入力される。秘密計算部23は、秘密分散値[y’]rと秘密分散値[f'0(x)]=[ix+j]を用いた秘密計算によって秘密分散値[y]=[y’+(ix+j)]を得て出力する(ステップS23a)。
【0023】
秘密分散値[y]は秘密計算部21に入力される。秘密計算部21は、秘密分散値[x]および秘密分散値[y]を用いた積和演算の秘密計算によって秘密分散値[f1(x)-f'1(x)]=[z’]=[y(ζy+b-k)+(c-s)x-m]を得て出力する(ステップS21b)。
【0024】
秘密分散値[z’]は秘密計算部22に入力される。秘密計算部22は、秘密分散値[z’]を用いた秘密計算によってz’を所定ビット数だけ右シフトしたz’rの秘密分散値[z’]rを得て出力する(ステップS22b)。
【0025】
秘密分散値[z’]rは秘密計算部23に入力される。秘密計算部23は、秘密分散値[z’]rと秘密分散値[f'1(x)]=[ky+sx+m]を用いた秘密計算によって秘密分散値[z]=[z’+(ky+sx+m)]を得て出力する(ステップS23b)。
【0026】
秘密分散値[z]は秘密計算部21に入力される。秘密計算部21は、秘密分散値[x]、秘密分散値[y]、および秘密分散値[z]を用いた積和演算の秘密計算によって秘密分散値[w’/γ]=[z(αz+d-n/γ)+(βx+f-o/γ)y+(g-p)x+(h-q)/γ]を得て出力する(ステップS21c)。
【0027】
秘密分散値[w’/γ]は秘密計算部22に入力される。秘密計算部22は、秘密分散値[w’/γ]を用いた秘密計算によってw’/γにγを乗算して得られるw’を所定ビット数だけ右シフトしたw’rの秘密分散値[w’]rを得て出力する(ステップS22c)。秘密分散値[w’]rを得るための処理に限定は無いが、例えば、秘密計算部22は、公開値2σ/γを得、公開値2σ/γと秘密分散値[w’/γ]を用いた公開値除算の秘密計算[w’/γ]/(2σ/γ)によって秘密分散値[w’]rを得てもよい。ただし、σは右シフト量を表す正整数である。これによってγの乗算および右シフトの秘密計算を同時に実行できるため、処理コストを低減できる。
【0028】
秘密分散値[w’]rは秘密計算部23に入力される。秘密計算部23は、秘密分散値[w’]rと秘密分散値[f'2(x)]=[nz+oy+px+q]を用いた秘密計算によって秘密分散値[w]=[w’+(nz+oy+px+q)]を得て出力する。
【0029】
<近似関数の探索方法の例示>
以下に右シフト前の近似関数の探索方法を例示する。
入力:区間[L,R)、関数y=δx2+ax,z=y(ζy+b)+cx,w=γ(z(αz+d)+y(βx+f)+gx)
設定済みパラメータ:各離散係数i, k, s, n, o, pの探索最小値imin, kmin, smin, nmin, omin, pmin、各離散係数i, k, s, n, o, pの探索最大値imax, kmax, smax, n max , o max , p max
出力: yの近似関数ix+j、y-(ix+j)の最大値My、zの近似関数ky+sx+m、z-(ky+sx+m)の最大値Mz、wの近似関数nz+oy+px+q、w-(nz+oy+px+q)の最大値Mw
【0030】
1: for i=imin to imax do
2: y-ixの区間[L,R)における最大値と最小値の差を計算する。
3: y-ixの区間[L,R)における最大値と最小値の差が最も小さいiと、そのときの差y-ixの最小値j, 差分My((y-ixの最大値)-(y-ixの最小値)、言い換えるとy-ixの関数値の動く幅)を出力する。
4: for each (k, s)∈{kmin,...,kmax}×{smin,...,smax}do
5: z-(ky+sx)の区間[L,R)における最大値と最小値の差を計算する。
6: z-(ky+sx)の区間[L,R)における最大値と最小値の差が最も小さい(k, s)とそのとき差z-(ky+sx)の最小値m, 差分Mz((z-(ky+sx)の最大値)-(z-(ky+sx)の最小値)、言い換えるとz-(ky+sx)の関数値の動く幅)を出力する。
7: for each (n, o, p) ∈ {nmin,...,nmax}×{omin,...,omax}×{pmin,...,pmax} do
8: z-(nz+oy+px)の区間[L,R)における最大値と最小値の差を計算する。
9: z-(nz+oy+px)の区間[L,R)における最大値と最小値の差が最も小さい(n, o, p)とそのとき差z-(nz+oy+px)の最小値q,差分Mw((z-(nz+oy+px)の最大値)-(z-(nz+oy+px)の最小値)、言い換えるとz-(nz+oy+px)の関数値の動く幅)を出力する。
【0031】
[第3実施形態]
第3実施形態に例示するように、第3実施形態の秘密計算装置3は、秘密計算部31,32,33、および制御部19を有する。第3実施形態の秘密計算装置3は、実数xの秘密分散値[x]∈[L,R)を入力とし、秘密計算を行って目的の関数fn-1(x)の秘密分散値[fn-1(x)]を出力する。第3実施形態では、n=2であり、a, b, c,γ,δ,i, j, k, s, mが実数であり、f0(x)=y=δx2+axであり、f1(x)=z=γ(y(δy+b)+cx)であり、f'0(x)=ix+jであり、f'1(x)=ky+sx+mである例を説明する。
【0032】
図4に例示するように、まず秘密計算装置3の秘密計算部31に秘密分散値[x]が入力される(ステップS10)。
【0033】
秘密計算部31は、秘密分散値[x]を用いた積和演算の秘密計算によって秘密分散値[f0(x)-f'0(x)]=[y’]=[x(δx+a-i)-j]を得て出力する(ステップS21a)。
【0034】
秘密分散値[y’]は秘密計算部32に入力される。秘密計算部32は、秘密分散値[y’]を用いた秘密計算によってy’を所定ビット数だけ右シフトしたy’rの秘密分散値[y’]rを得て出力する(ステップS22a)。
【0035】
秘密分散値[y’]rは秘密計算部33に入力される。秘密計算部33は、秘密分散値[y’]rと秘密分散値[f'0(x)]=[ix+j]を用いた秘密計算によって秘密分散値[y]=[y’+(ix+j)]を得て出力する(ステップS23a)。
【0036】
秘密分散値[y]は秘密計算部31に入力される。秘密計算部31は、秘密分散値[x]および秘密分散値[y]を用いた積和演算の秘密計算によって秘密分散値[z’/γ]=[y(ζy+b-k/γ)+(c-s/γ)x-m/γ]を得て出力する(ステップS31c)。
【0037】
秘密分散値[z’/γ]は秘密計算部32に入力される。秘密計算部32は、秘密分散値[z’/γ]を用いた秘密計算によってz’/γにγを乗算して得られるz’を所定ビット数だけ右シフトしたz’rの秘密分散値[z’]rを得て出力する(ステップS32b)。秘密分散値[z’]rを得るための処理に限定は無いが、例えば、秘密計算部32は、公開値2σ/γを得、公開値2σ/γと秘密分散値[z’/γ]を用いた公開値除算の秘密計算[z’/γ]/(2σ/γ)によって秘密分散値[z’]rを得てもよい。これによってγの乗算および右シフトの秘密計算を同時に実行できるため、処理コストを低減できる。
【0038】
秘密分散値[z’]rは秘密計算部33に入力される。秘密計算部33は、秘密分散値[z’]rと秘密分散値[f'1(x)]=[ky+sx+m]を用いた秘密計算によって秘密分散値[z]=[z’+(ky+sx+m)]を得て出力する(ステップS33b)。
【0039】
[各初等関数に関する計算済みのパラメータの例]
図5に関数fn-1(x)が初等関数である逆数関数、平方根関数、平方根の逆数関数、指数関数、対数関数である場合の計算済みのパラメータを例示する。なお、ex,ey,ezはそれぞれx,y,zの小数点位置を示す。また、e'x,e'y,e'zはそれぞれ右シフト前のx',y',z'の小数点位置を示す。これらの小数点位置は、下位ビットから数えた小数点位置のビット位置を表す。このビット位置を表す値は0から始まり、下位ビットから数えてe1ビット目が1を表すときに、小数点位置がe1であると表記する。
【0040】
[ハードウェア構成]
各実施形態における秘密計算装置1,2,3は、例えば、CPU(central processing unit)等のプロセッサ(ハードウェア・プロセッサ)やRAM(random-access memory)・ROM(read-only memory)等のメモリ等を備える汎用または専用のコンピュータが所定のプログラムを実行することで構成される装置である。このコンピュータは1個のプロセッサやメモリを備えていてもよいし、複数個のプロセッサやメモリを備えていてもよい。このプログラムはコンピュータにインストールされてもよいし、予めROM等に記録されていてもよい。また、CPUのようにプログラムが読み込まれることで機能構成を実現する電子回路(circuitry)ではなく、単独で処理機能を実現する電子回路を用いて一部またはすべての処理部が構成されてもよい。また、1個の装置を構成する電子回路が複数のCPUを含んでいてもよい。
【0041】
図6は、各実施形態における秘密計算装置1,2,3のハードウェア構成を例示したブロック図である。図6に例示するように、この例の秘密計算装置1,2,3は、CPU(Central Processing Unit)10a、力部10b、出力部10c、RAM(Random Access Memory)10d、ROM(Read Only Memory)10e、補助記憶装置10f及びバス10gを有している。この例のCPU10aは、制御部10aa、演算部10ab及びレジスタ10acを有し、レジスタ10acに読み込まれた各種プログラムに従って様々な演算処理を実行する。また、出力部10は、データが出力される出力端子、ディスプレイ等、所定のプログラムを読み込んだCPU10aによって制御されるLANカード等である。また、RAM10dは、SRAM (Static Random Access Memory)、DRAM (Dynamic Random Access Memory)等であり、所定のプログラムが格納されるプログラム領域10da及び各種データが格納されるデータ領域10dbを有している。また、補助記憶装置10fは、例えば、ハードディスク、MO(Magneto-Optical disc)、半導体メモリ等であり、所定のプログラムが格納されるプログラム領域10fa及び各種データが格納されるデータ領域10fbを有している。また、バス10gは、CPU10a、力部10b、出力部10c、RAM10d、ROM10e及び補助記憶装置10fを、情報のやり取りが可能なように接続する。CPU10aは、読み込まれたOS(Operating System)プログラムに従い、補助記憶装置10fのプログラム領域10faに格納されているプログラムをRAM10dのプログラム領域10daに書き込む。同様にCPU10aは、補助記憶装置10fのデータ領域10fbに格納されている各種データを、RAM10dのデータ領域10dbに書き込む。そして、このプログラムやデータが書き込まれたRAM10d上のアドレスがCPU10aのレジスタ10acに格納される。CPU10aの制御部10abは、レジスタ10acに格納されたこれらのアドレスを順次読み出し、読み出したアドレスが示すRAM10d上の領域からプログラムやデータを読み出し、そのプログラムが示す演算を演算部10abに順次実行させ、その演算結果をレジスタ10acに格納していく。このような構成により、秘密計算装置1,2,3の機能構成が実現される。
【0042】
上述のプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体の例は非一時的な(non-transitory)記録媒体である。このような記録媒体の例は、磁気記録装置、光ディスク、光磁気記録媒体、半導体メモリ等である。
【0043】
このプログラムの流通は、例えば、そのプログラムを記録したDVD、CD-ROM等の可搬型記録媒体を販売、譲渡、貸与等することによって行う。さらに、このプログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することにより、このプログラムを流通させる構成としてもよい。上述のように、このようなプログラムを実行するコンピュータは、例えば、まず、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、一旦、自己の記憶装置に格納する。そして、処理の実行時、このコンピュータは、自己の記憶装置に格納されたプログラムを読み取り、読み取ったプログラムに従った処理を実行する。また、このプログラムの別の実行形態として、コンピュータが可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することとしてもよく、さらに、このコンピュータにサーバコンピュータからプログラムが転送されるたびに、逐次、受け取ったプログラムに従った処理を実行することとしてもよい。また、サーバコンピュータから、このコンピュータへのプログラムの転送は行わず、その実行指示と結果取得のみによって処理機能を実現する、いわゆるASP(Application Service Provider)型のサービスによって、上述の処理を実行する構成としてもよい。なお、本形態におけるプログラムには、電子計算機による処理の用に供する情報であってプログラムに準ずるもの(コンピュータに対する直接の指令ではないがコンピュータの処理を規定する性質を有するデータ等)を含むものとする。
【0044】
各実施形態では、コンピュータ上で所定のプログラムを実行させることにより、本装置を構成することとしたが、これらの処理内容の少なくとも一部をハードウェア的に実現することとしてもよい。
【0045】
<その他の変形例等>
なお、本発明は上述の実施の形態に限定されるものではない。例えば、実施形態の秘密計算装置1,2,3は、実数xの秘密分散値[x]を用いた秘密計算によってft(x)-f't(x)の秘密分散値[ft(x)-f't(x)]を得、秘密分散値[ft(x)-f't(x)]を用いた秘密計算によってft(x)-f't(x)を所定ビット数だけ右シフトした(ft(x)-f't(x))rの秘密分散値[ft(x)-f't(x)]rを得、秘密分散値[ft(x)-f't(x)]rと秘密分散値[f't(x)]を用いた秘密計算によって関数ft(x)の秘密分散値[ft(x)]を得ていた。しかしながら、秘密分散値[ft(x)]を得る前に秘密分散値[ft(x)-f't(x)]rが別の秘密計算に用いられてもよい。
【0046】
上記の実施形態では、秘密計算部11が秘密分散値[x]を用いた積和演算の秘密計算によって秘密分散値[ft(x)-f't(x)]を得ていたが、積和演算の秘密計算以外の秘密計算によって秘密分散値[ft(x)-f't(x)]を得てもよい。
【0047】
また、上述の各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。その他、本発明の趣旨を逸脱しない範囲で適宜変更が可能であることはいうまでもない。
【産業上の利用可能性】
【0048】
本発明は、例えば、データを秘匿化しつつ秘密計算で行う機械学習やデータマイニングでの逆数関数、平方根関数、指数関数、対数関数などの初等関数の計算に利用できる。
【符号の説明】
【0049】
1,2,3 秘密計算装置
11,21,31,12,22,32,13,23,33 秘密計算部
図1
図2
図3
図4
図5
図6