首页 / 专利分类库 / 教育;密码术;显示;广告;印鉴 / 用于密码或涉及保密需要的其他用途的编码或译码装置 / 秘密聚合函数计算系统、秘密计算装置、秘密聚合函数计算方法、以及程序

秘密聚合函数计算系统、秘密计算装置、秘密聚合函数计算方法、以及程序

申请号 CN201980032660.9 申请日 2019-05-14 公开(公告)号 CN112119442A 公开(公告)日 2020-12-22
申请人 日本电信电话株式会社; 发明人 五十岚大; 滨田浩气;
摘要 在保持隐匿性的状态下高效地求聚合函数中使用的中间数据。比特分解部(11)生成将键属性比特分解并结合后的比特串的份额。组排序生成部(12)生成将比特串按升序进行稳定排序的第一置换的份额。比特串排序部(13)生成将比特串以第一置换进行排序后的排序完毕比特串的份额。标志生成部(14)生成表示组的边界的标志的份额。键聚合排序生成部(15)生成将标志的非按升序进行稳定排序的第二置换的份额。重复排除部(16)生成重复排除完毕键属性的份额。键排序部(17)生成将重复排除完毕键属性以第一置换和第二置换按顺序进行排序后的排序完毕键属性的份额。值排序部(18)生成将值属性以第一置换进行排序后的排序完毕值属性的份额。
权利要求

1.一种秘密聚合函数计算系统,是包含多个秘密计算装置的秘密聚合函数计算系统,F是任意的环,m是2以上的整数,nk是1以上的整数,[k0],…,[knk-1]是将键属性k0,…,knk-1∈Fm进行秘密分散后的份额,
上述秘密计算装置包含:
组排序生成部,使用上述份额[k0],…,[knk-1],根据若恢复则成为将上述键属性k0,…,knk-1进行比特分解并结合后的比特串b:=b0,…,bm-1的份额{b},生成若恢复则成为将上述比特串b按升序进行稳定排序的置换σ0的份额{{σ0}};
比特串排序部,使用上述份额{b}和上述份额{{σ0}},生成若恢复则成为将上述比特串b以上述置换σ0进行排序后的排序完毕比特串b':=b'0,…,b'm-1的份额{b'};
标志生成部,使用上述份额{b'},关于0以上m-2以下的各整数i设定{ei}:={b'i≠b'i+1},且设定{em-1}:={1},生成若恢复则成为标志e:=e0,…,em-1的份额{e};以及键聚合排序生成部,使用上述份额{e},生成若恢复则成为将上述标志e的非¬e按升序进行稳定排序的置换σ的份额{{σ}}。
2.如权利要求1所述的秘密聚合函数计算系统,
na是1以上的整数,[v0],…,[vna-1]是将值属性v0,…,vna-1∈Fm进行秘密分散后的份额,上述秘密计算装置包含:
重复排除部,使用上述份额{e},关于0以上m-1以下的各整数i以及0以上nk-1以下的各整数j,若{ei}={1}则在[k″j,i]中设定[kj,i],若{ei}≠{1}则在[k″j,i]中设定规定的固定值,生成若恢复则成为重复排除完毕键属性k″0,…,k″nk-1的份额[k″0],…,[k″nk-1];
键排序部,使用上述份额[k″0],…,[k″nk-1]、上述份额{{σ0}}、以及上述份额{{σ}},生成若恢复则成为将上述重复排除完毕键属性k″0,…,k″nk-1以上述置换σ0和上述置换σ按顺序进行排序后的排序完毕键属性k'0,…,k'nk-1的份额[k'0],…,[k'nk-1];以及值排序部,使用上述份额[v0],…,[vna-1]和上述份额{{σ0}},生成若恢复则成为将上述值属性v0,…,vna-1以上述置换σ0进行排序后的排序完毕值属性v'0,…,v'na-1的份额[v'0],…,[v'na-1]。
3.一种秘密计算装置,
F是任意的环,m是2以上的整数,nk是1以上的整数,[k0],…,[knk-1]是将键属性k0,…,knk-1∈Fm进行秘密分散后的份额,
上述秘密计算装置包含:
组排序生成部,使用上述份额[k0],…,[knk-1],根据若恢复则成为将上述键属性k0,…,knk-1进行比特分解并结合后的比特串b:=b0,…,bm-1的份额{b},生成若恢复则成为将上述比特串b按升序进行稳定排序的置换σ0的份额{{σ0}};
比特串排序部,使用上述份额{b}和上述份额{{σ0}},生成若恢复则成为将上述比特串b以上述置换σ0进行排序后的排序完毕比特串b':=b'0,…,b'm-1的份额{b'};
标志生成部,使用上述份额{b'},关于0以上m-2以下的各整数i设定{ei}:={b'i≠b'i+1},且设定{em-1}:={1},生成若恢复则成为标志e:=e0,…,em-1的份额{e};以及键聚合排序生成部,使用上述份额{e},生成若恢复则成为将上述标志e的非¬e按升序进行稳定排序的置换σ的份额{{σ}}。
4.一种秘密聚合函数计算方法,是包含多个秘密计算装置的秘密聚合函数计算系统执行的秘密聚合函数计算方法,
F是任意的环,m是2以上的整数,nk是1以上的整数,[k0],…,[knk-1]是将键属性k0,…,knk-1∈Fm进行秘密分散后的份额,
在上述秘密聚合函数计算方法中,
上述秘密计算装置的组排序生成部使用上述份额[k0],…,[knk-1],根据若恢复则成为将上述键属性k0,…,knk-1进行比特分解并结合后的比特串b:=b0,…,bm-1的份额{b},生成若恢复则成为将上述比特串b按升序进行稳定排序的置换σ0的份额{{σ0}};
上述秘密计算装置的比特串排序部使用上述份额{b}和上述份额{{σ0}},生成若恢复则成为将上述比特串b以上述置换σ0进行排序后的排序完毕比特串b':=b'0,…,b'm-1的份额{b'};
上述秘密计算装置的标志生成部使用上述份额{b'},关于0以上m-2以下的各整数i设定{ei}:={b'i≠b'i+1},且设定{em-1}:={1},生成若恢复则成为标志e:=e0,…,em-1的份额{e};以及
上述秘密计算装置的键聚合排序生成部使用上述份额{e},生成若恢复则成为将上述标志e的非¬e按升序进行稳定排序的置换σ的份额{{σ}}。
5.使计算机作为权利要求3所述的秘密计算装置发挥功能的程序。

说明书全文

秘密聚合函数计算系统、秘密计算装置、秘密聚合函数计算方

法、以及程序

技术领域

[0001] 本发明涉及秘密计算技术,尤其涉及在保持隐匿性的状态下计算聚合函数(aggregate function)的技术。

背景技术

[0002] 聚合函数是在表格中存在键(key)属性和值(value)属性时基于键属性的值得到分组后的统计值的运算。聚合函数也被称为group-by运算。键属性是为了对表格的记录(record)进行分组而使用的属性,例如举出职务或性别等。值属性是为了计算统计值而使用的属性,例如举出薪资或身高等。group-by运算例如是在键属性为性别时求男女各自的平均身高的运算等。键属性也可以是基于多个属性的复合键,例如在键属性为性别和年龄时,也可以是得到十几岁男性的平均身高、二十几岁男性的平均身高、···这样的运算。在非专利文献1中记载有通过秘密计算进行group-by运算的方法。
[0003] group-by运算具体而言有group-by计数、group-by总和、group-by最大值/最小值、group-by中央值、组内的顺位等。group-by计数是指交叉累计(cross tabulation),是在基于键属性的值将表格分组(grouping)时对各组的记录数进行累计的运算。group-by总和是各组中的期望的值属性的总和。group-by最大值/最小值是各组中的期望的值属性的最大值/最小值。group-by中央值是各组中的期望的值属性的中央值。组内的顺位是获取各记录的值属性的值在组内是第几个值的函数。
[0004] 现有技术文献
[0005] 非专利文献
[0006] 非专利文献1:五十嵐大,千田浩司,濱田浩気,高橋克巳,“軽量検証可能3パーティ秘匿関数計算の効率化及びこれを用いたセキュアなデータベース処理”,2011年暗号と情報セキュリティシンポジウム

发明内容

[0007] 发明要解决的课题
[0008] 在group-by运算中,有在计算的过程中求中间数据的情况。在该中间数据之中,有在不同种类的group-by运算之间共通地求的中间数据。若在保持隐匿性的状态下同时或者连续地计算多个group-by运算,则因求共通的中间数据的处理重复,有计算量增大的情况。
[0009] 鉴于上述那样的技术课题,本发明的目的在于,提供在保持隐匿性的状态下同时或者连续地计算多个group-by运算时能够高效地求group-by运算中使用的中间数据的技术。
[0010] 用于解决课题的手段
[0011] 为了解决上述课题,本发明的一方式的秘密聚合函数计算系统是包含多个秘密计算装置的秘密聚合函数计算系统,F是任意的环,m是2以上的整数,nk是1以上的整数,[k0],…,[knk-1]是将键属性k0,…,knk-1∈Fm进行秘密分散后的份额,秘密计算装置包含:组排序生成部,使用份额[k0],…,[knk-1],从若恢复则成为将键属性k0,…,knk-1进行比特分解并结合后的比特串b:=b0,…,bm-1的份额{b},生成若恢复则成为将比特串b按升序进行稳定排序的置换σ0的份额{{σ0}};比特串排序部,使用份额{b}和份额{{σ0}},生成若恢复则成为将比特串b以置换σ0进行排序后的排序完毕比特串b':=b'0,…,b'm-1的份额{b'};标志生成部,使用份额{b'},关于0以上m-2以下的各整数i设定{ei}:={b'i≠b'i+1},且设定{em-1}:={1},生成若恢复则成为标志e:=e0,…,em-1的份额{e};以及键聚合排序生成部,使用份额{e},生成若恢复则成为将标志e的非¬e按升序进行稳定排序的置换σ的份额{{σ}}。
[0012] 发明效果
[0013] 根据本发明的秘密聚合函数技术,能够在保持隐匿性的状态下高效地求group-by运算中使用的中间数据。通过使用该中间数据,在同时或者连续地计算多个group-by运算时,能够削减整体的计算量。附图说明
[0014] 图1是例示秘密聚合函数计算系统的功能结构的图。
[0015] 图2是例示秘密计算装置的功能结构的图。
[0016] 图3是例示秘密聚合函数计算方法的处理过程的图。

具体实施方式

[0017] 以下,对本发明的实施方式进行详细说明。另外,对附图中具有相同的功能的结构部附加相同的编号,省略重复说明。
[0018] [x]∈[F]表示某个值x通过任意的环F上的秘密分散等而被隐匿的情况。{b}∈{B}表示1比特的某个值b通过表示1比特的环B上的秘密分散等而被隐匿的情况。{{s}}∈{{Sm}}表示属于m个要素的置换的集合(set)Sm的某个置换s通过秘密分散等而被隐匿的情况。以下,将进行了秘密分散后的值也称为“份额(share)”。
[0019] 在实施方式中使用的秘密计算中的排序(sort)处理(包含稳定排序)例如能够使用下述参考文献1所记载的排序。关于置换s的份额{{s}},使用下述参考文献1所记载的混合(hybrid)置换{{π}}即可。
[0020] 〔参考文献1〕五十嵐大,濱田浩気,菊池亮,千田浩司,“超高速秘密計算ソートの設計と実装:秘密計算がスクリプト言語に並ぶ日”,CSS2017。
[0021] <实施方式>
[0022] 参照图1,对实施方式的秘密聚合函数计算系统100的结构例进行说明。秘密聚合函数计算系统100包含N(≥2)台秘密计算装置11,…,1N。在本方式中,秘密计算装置11,…,1N分别连接到通信网络2。通信网络2是构成为所连接的各装置相互能够通信的线路交换方式或者分组(packet)交换方式的通信网络,例如能够使用互联网(internet)或LAN(局域网(Local Area Network))、WAN(广域网(Wide Area Network))等。另外,各装置不需要必定得经由通信网络2能够在线(online)通信。例如,也可以构成为,将要输入给秘密计算装置
11,…,1N的信息存储在磁带或USB存储器等便携式记录介质中,从该便携式记录介质离线(offline)输入给秘密计算装置11,…,1N。
[0023] 参照图2,对秘密聚合函数计算系统100所包含的秘密计算装置1n(n=1,…,N)的结构例进行说明。例如如图2所示,秘密计算装置1n包含输入部10、比特分解部11、组排序生成部12、比特串排序部13、标志生成部14、键聚合排序生成部15、重复排除部16、键排序部17、值排序部18、以及输出部19。通过由该秘密计算装置1n(1≤n≤N)与其他秘密计算装置
1n'(n'=1,…,N,其中n≠n')协作并且进行后述的各步骤的处理,实施方式的秘密聚合函数计算方法得以实现。
[0024] 秘密计算装置1n例如是在具有中央运算处理装置(中央处理单元(CPU:Central Processing Unit))、主存储装置(随机存取存储器(RAM:Random Access Memory))等的公知或者专用的计算机中读入特别的程序而被构成的特别的装置。秘密计算装置1n例如基于中央运算处理装置的控制而执行各处理。输入给秘密计算装置1n的数据或在各处理中得到的数据例如被储存于主存储装置,储存于主存储装置的数据根据需要被读出到中央运算处理装置而在其他处理中被利用。秘密计算装置1n的各处理部的至少一部分也可以通过集成电路硬件而被构成。
[0025] 参照图3,对实施方式的秘密聚合函数计算系统100执行的秘密聚合函数计算方法的处理过程进行说明。
[0026] 在步骤S10中,各秘密计算装置1n的输入部10接受将nk个键属性k0,…,knk-1∈Fm分别通过秘密分散进行隐匿后的份额[k0],…,[knk-1]∈[F]m、将na个值属性v0,…,vna-1∈Fm分别通过秘密分散进行隐匿后的份额[v0],…,[vna-1]∈[F]m,作为输入。其中,nk、na是1以上的整数,m是2以上的整数。以下,[kj]∈[F]m(j=0,…,nk-1)的各要素还有通过[kj,i]∈[F](i=0,…,m-1)来参照的情况。此外,[vh]∈[F]m(h=0,…,na-1)的各要素还有通过[vh,i]∈[F](i=0,…,m-1)来参照的情况。输入部10将键属性k0,…,knk-1的份额[k0],…,[knk-1]输出给比特分解部11和重复排除部16。此外,输入部10将值属性v0,…,vna-1的份额[v0],…,[vna-1]输出给值排序部18。
[0027] 在步骤S11中,各秘密计算装置1n的比特分解部11将键属性k0,…,knk-1的份额[k0],…,[knk-1]比特分解并结合,得到若恢复则成为将键属性k0,…,knk-1的比特表现结合后的比特串b:=b0,…,bm-1∈Bλ的份额{b}∈{B}λ。其中,λ是比特串b的比特长度,是各bi(i=0,…,m-1)的比特长度的总和。换言之,{bi}是将键属性k0,…,knk-1的份额[k0],…,[knk-1]各自的第i个要素[k0,i],…,[knk-1,i]的比特表现结合后的比特串。比特分解部11将比特串b的份额{b}输出给组排序生成部12。
[0028] 在步骤S12中,各秘密计算装置1n的组排序生成部12使用比特串b的份额{b},生成若恢复则成为用于将比特串b按升序进行稳定排序的置换σ0的份额{{σ0}}∈{{Sm}}。稳定排序是指排序运算之中的、在存在相同的值的要素的情况下保存相同的值的要素彼此的顺序的运算。例如,若对于按员工编号顺序进行排序后的表格按性别进行稳定排序,则得到各性别之中保持了员工编号顺序的排序结果。由于比特串b是将键属性k0,…,knk-1的比特表现结合后的比特串,所以也可以说置换σ0是将键属性k0,…,knk-1的值相等的记录进行调换以使其连续、并进行分组的操作。组排序生成部12将比特串b的份额{b}和置换σ0的份额{{σ0}}输出给比特串排序部13。此外,组排序生成部12将置换σ0的份额{{σ0}}输出给键排序部17和值排序部18。
[0029] 在步骤S13中,各秘密计算装置1n的比特串排序部13使用比特串b的份额{b}和置换σ0的份额{{σ0}},得到若恢复则成为将比特串b以置换σ0进行排序后的排序完毕比特串b':=b'0,…,b'm-1∈Bλ的份额{b'}∈{B}λ。比特串排序部13将排序完毕比特串b'的份额{b'}输出给标志生成部14。
[0030] 在步骤S14中,各秘密计算装置1n的标志生成部14使用排序完毕比特串b'的份额{b'},关于0以上m-2以下的各整数i设定{ei}:={b'i≠b'i+1},且设定{em-1}:={1},生成若恢复则成为标志e:=e0,…,em-1∈Bm的份额{e}∈{B}m。标志ei由于在排序完毕比特串b'的第i个要素b'i与第i+1个要素b'i+1不同的情况下被设定真,所以成为表示各组的最后的要素(即,组间的边界的紧前的要素)的标志。标志生成部14将标志e的份额{e}输出给键聚合排序生成部15、重复排除部16以及输出部19。
[0031] 在步骤S15中,各秘密计算装置1n的键聚合排序生成部15首先使用标志e的份额{e},生成若恢复则成为作为标志e的非¬e的标志e'的份额{e'}∈{B}m。即,关于0以上m-1以下的各整数i,设定{e'i}:={¬ei}。接着,键聚合排序生成部15使用标志e'的份额{e'},生成若恢复则成为用于将标志e'按升序进行稳定排序的置换σ的份额{{σ}}∈{{Sm}}。键聚合排序生成部15将置换σ的份额{{σ}}输出给键排序部17和输出部19。
[0032] 在步骤S16中,各秘密计算装置1n的重复排除部16使用标志e的份额{e}和键属性k0,…,knk-1的份额[k0],…,[knk-1],设定[k″j,i]:=[ei?kj,i:null],生成若恢复则成为重复排除完毕键属性k″0,…,k″nk-1的份额[k″0],…,[k″nk-1]。这里,“?”是条件运算符(或者三元运算符)。即,在{ei}为真(例如,{ei}={1})时设定[k″j,i]:=[kj,i],在{ei}为假(例如,{ei}={0})时设定[k″j,i]:=null。{ei}={0}时设定的值也可以不是null,只要是键属性k0,…,knk-1不可取得的值则也可以是任意的值。由于标志e是只有各组的最后的要素被设定了真的标志,所以重复排除完毕键属性k″0,…,k″nk-1成为只有与各组的最后的要素对应的要素被设定了键属性的值、除此以外的要素被设定了键属性不可取得的规定的值的向量(vector)。重复排除部16将重复排除完毕键属性k″0,…,k″nk-1的份额[k″0],…,[k″nk-1]输出给键排序部17。
[0033] 在步骤S17中,各秘密计算装置1n的键排序部17使用重复排除完毕键属性k″0,…,k″nk-1的份额[k″0],…,[k″nk-1]、置换σ0的份额{{σ0}}以及置换σ的份额{{σ}},生成若恢复则成为将重复排除完毕键属性k″0,…,k″nk-1以置换σ0和置换σ按顺序进行排序后的排序完毕键属性k'0,…,k'nk-1的份额[k'0],…,[k'nk-1]。键排序部17将排序完毕键属性k'0,…,k'nk-1的份额[k'0],…,[k'nk-1]输出给输出部19。
[0034] 在步骤S18中,各秘密计算装置1n的值排序部18使用值属性v0,…,vna-1的份额[v0],…,[vna-1]和置换σ0的份额{{σ0}},生成若恢复则成为将值属性v0,…,vna-1以置换σ0进行排序后的排序完毕值属性v'0,…,v'na-1的份额[v'0],…,[v'na-1]。值排序部18将排序完毕值属性v'0,…,v'na-1的份额[v'0],…,[v'na-1]输出给输出部19。
[0035] 在步骤S19中,各秘密计算装置1n的输出部19输出排序完毕键属性k'0,…,k'nk-1的份额[k'0],…,[k'nk-1]、排序完毕值属性v'0,…,v'na-1的份额[v'0],…,[v'na-1]、标志e的份额{e}、以及置换σ的份额{{σ}}的至少1个。输出部19应输出的信息以满足接着继续计算的1个以上的group-by运算所需的中间数据的方式来选择。
[0036] 以下,对使用秘密聚合函数计算系统100输出的中间数据来计算各种聚合函数的具体过程进行说明。
[0037] 《group-by计数》
[0038] group-by计数是基于键属性的值将表格分组时对各组的记录数进行累计的运算。group-by计数能够使用秘密聚合函数计算系统100输出的标志e的份额{e}和置换σ的份额{{σ}}如以下那样来求。另外,g是最大组数,是键属性可取得的值的组合的数目,即、键属性可取得的值的种类的数目。
[0039] 第一,将标志e的份额{e}∈{B}m变换为基于任意的环F上的秘密分散的份额[e]∈[F]m。
[0040] 第二,使用标志e的份额[e],关于0以上m-1以下的各整数i设定[xi]:=[ei?i+1:m],生成若恢复则成为向量x:=x0,…,xm-1∈F的份额[x]∈[F]m。向量x成为在将表格按键属性进行稳定排序时将具有相同的键属性的值的记录作为同一组、在各组的最后的要素中设定了下一个要素的从开头起的位置且在其他要素中设定了表格整体的记录数的向量。换言之,在各组的最后的要素中,设定了将从开头的组起至该组为止的各组的记录数累加后的合计值。
[0041] 第三,使用向量x的份额[x]和置换σ的份额{{σ}},生成若恢复则成为将向量x以置换σ进行排序后的排序完毕向量σ(x)的份额[σ(x)]∈[F]m。以下,[σ(x)]∈[F]m的各要素还有通过[σ(x)i]∈[F](i=0,…,m-1)来参照的情况。
[0042] 最后,使用排序完毕向量σ(x)的份额[σ(x)],关于1以上min(g,m)-1以下的各整数i设定[ci]:=[σ(x)i-σ(x)i-1],且设定[c0]:=[σ(x)0],生成若恢复则成为表示各组的记录数的向量c:=c0,…,cmin(g,m)-1∈F的份额[c]∈[F]min(g,m)。由于排序完毕向量σ(x)的第i个要素σ(x)i被设定了将从第0个起至第i个为止的各组的记录数累加后的合计值,所以在向量c的第i个要素ci中被设定第i个组的记录数。另外,由于键属性被隐匿,所以min(g,m)是组数可取得的最大值,实际的组数成为min(g,m)以下的各秘密计算装置1n所不可知的值(以下,将实际的组数设为g')。因此,在min(g,m)个份额[ci]之中超过实际的组数的份额[ci](即,ig')中,需要预先设定在恢复后能够识别为有效的值的无效的值。在本方式中,在[ei]为假的份额[xi]或者[ei]为真的份额[xi]之中的最后的份额[xi]中设定[xi]=m。由此,在cg',…,cmin(g,m)-1中被设定σ(x)i-σ(x)i-1=m-m=0。由于存在记录的组的计数数目为1以上,所以0作为能够识别为有效的值的无效的值成立。
[0043] 《group-by总和》
[0044] group-by总和是在基于键属性的值将表格分组时按每个组将期望的值属性的总和进行累计的运算。若使用group-by总和,则还能够计算按每个组求乘法运算之和的group-by积和、或按每个组求平方和的group-by平方和。若为group-by积和,则对于对各记录的值属性施行了乘法运算的结果求group-by总和即可。此外,若为group-by平方和,则同样对于对各记录的值属性施行了平方的结果求group-by总和即可。group-by总和能够使用秘密聚合函数计算系统100输出的排序完毕值属性v'0,…,v'na-1的份额[v'0],…,[v'na-1]、标志e的份额{e}、以及置换σ的份额{{σ}}如以下那样来求。另外,v是排序完毕值属性v'0,…,v'na-1之中的想要求group-by总和的期望的值属性。
[0045] 第一,使用值属性v的份额[v],计算[v']:=prefix-sum([v]),生成若恢复则成为向量v':=v'0,…,v'm-1∈F的份额[v']∈[F]m。prefix-sum是将m作为输入向量v的长度、关于0以上m-1以下的各整数i在输出向量v'的第i个要素v'i中设定输入向量v的从第0个要素v0起至第i个要素vi为止的值的总和的运算。
[0046] 第二,将标志e的份额{e}∈{B}m变换为基于任意的环F上的秘密分散的份额[e]∈[F]m。
[0047] 第三,使用向量v'的份额[v']和标志e的份额[e],关于0以上m-1以下的各整数i设定[ti]:=[ei?v'i:v'm-1],生成若恢复则成为向量t:=t0,…,tm-1∈F的份额[t]∈[F]m。向量t成为在将表格按键属性进行稳定排序时将具有相同的键属性的值的记录作为同一组、在各组的最后的要素中设定了该要素以前的值属性的值的总和且在其他要素中设定了表格整体的值属性的值的总和的向量。
[0048] 第四,使用向量t的份额[t]和置换σ的份额{{σ}},生成若恢复则成为将向量t以置换σ进行排序后的排序完毕向量σ(t)的份额[σ(t)]∈[F]m。以下,[σ(t)]∈[F]m的各要素还有通过[σ(t)i]∈[F](i=0,…,m-1)来参照的情况。
[0049] 最后,使用排序完毕向量σ(t)的份额[σ(t)],关于1以上min(g,m)-1以下的各整数i设定[si]:=[σ(t)i-σ(t)i-1],且设定[t0]:=[σ(t)0],生成若恢复则成为每个组的值属性v的总和s:=s0,…,smin(g,m)-1∈F的份额[s]∈[F]min(g,m)。由于排序完毕向量σ(t)的第i个要素σ(t)i被设定属于从第0个起至第i个为止的各组的值属性v的值的总和,所以向量t的第i个要素ti中被设定属于第i个组的值属性v的值的总和。
[0050] 《group-by最大值》
[0051] group-by最大值是在基于键属性的值将表格分组时按每个组得到期望的值属性的最大值的运算。group-by最大值能够使用秘密聚合函数计算系统100输出的排序完毕值属性v'0,…,v'na-1的份额[v'0],…,[v'na-1]、标志e的份额{e}、以及置换σ的份额{{σ}}如以下那样来求。另外,v是排序完毕值属性v'0,…,v'na-1之中的想要求group-by最大值的期望的值属性。
[0052] 第一,将标志e的份额{e}∈{B}m变换为基于任意的环F上的秘密分散的份额[e]∈[F]m。
[0053] 第二,使用值属性v的份额[v]和标志e的份额[e],关于0以上m-1以下的各整数i设定[fi]:=[ei?vi:0],生成若恢复则成为向量f:=f0,…,fm-1∈F的份额[f]∈[F]m。向量f成为在将表格按键属性进行稳定排序时将具有相同的键属性的值的记录作为同一组、在各组的最后的要素fi中设定了与该要素对应的值属性的值vi且在其他要素中设定了0的向量。即,成为具有各组的最大值和0作为要素的向量。
[0054] 第三,使用向量f的份额[f]和置换σ的份额{{σ}},生成若恢复则成为将向量f以置换σ进行排序后的排序完毕向量σ(f)的份额[σ(f)]∈[F]m。以下,[σ(f)]∈[F]m的各要素还有通过[σ(f)i]∈[F](i=0,…,m-1)来参照的情况。排序完毕向量σ(f)成为在从开头起组数的要素中设定了按每个组进行排序时的最后的要素的值(即,各组的最大值)且在此后的要素中设定了0的向量。
[0055] 最后,从排序完毕向量σ(f)的份额[σ(f)],生成若恢复则成为表示各组的最大值的向量x:=σ(f)0,…,σ(f)min(g,m)-1的份额[x]∈[F]min(g,m)。
[0056] 《group-by最小值》
[0057] group-by最小值是基于键属性的值将表格分组时按每个组得到期望的值属性的最小值的运算。group-by最小值能够使用秘密聚合函数计算系统100输出的排序完毕值属性v'0,…,v'na-1的份额[v'0],…,[v'na-1]、标志e的份额{e}、以及置换σ的份额{{σ}}如以下那样来求。另外,v是排序完毕值属性v'0,…,v'na-1之中的想要求group-by最小值的期望的值属性。
[0058] 第一,使用标志e的份额{e},关于1以上m-1以下的各整数i设定{e'i}:={ei-1},且设定{e'0}:={1},生成若恢复则成为标志e':=e'0,…,e'm-1∈Bm的份额{e'}∈{B}m。由于标志e'是将表示各组的最后的要素的标志e每次一个地向后方移动(shift)后的标志,所以成为表示各组的最先的要素(即,组间的边界的紧后的要素)的标志。
[0059] 第二,将标志e'的份额{e'}∈{B}m变换为基于任意的环F上的秘密分散的份额[e']∈[F]m。
[0060] 第三,使用值属性v的份额[v]和标志e'的份额[e'],关于0以上m-1以下的各整数i设定[f'i]:=[e'i?vi:0],生成若恢复则成为向量f':=f'0,…,f'm-1∈F的份额[f']∈[F]m。向量f'成为在将表格按键属性进行稳定排序时将具有相同的键属性的值的记录作为同一组、在各组的最先的要素f'i中设定了与该要素对应的值属性的值vi且在其他要素中设定了
0的向量。即,成为具有各组的最小值和0作为要素的向量。
[0061] 第四,使用向量f'的份额[f']和置换σ的份额{{σ}},生成若恢复则成为将向量f'm m以置换σ进行排序后的排序完毕向量σ(f')的份额[σ(f')]∈[F]。以下,[σ(f')]∈[F]的各要素还有通过[σ(f')i]∈[F](i=0,…,m-1)来参照的情况。排序完毕向量σ(f')成为在从开头起组数的要素中设定了按每个组进行排序时的最先的要素的值(即,各组的最小值)且在此后的要素中设定了0的向量。
[0062] 最后,从排序完毕向量σ(f')的份额[σ(f')],生成若恢复则成为表示各组的最小值的向量x':=σ(f')0,…,σ(f')min(g,m)-1的份额[x']∈[F]min(g,m)。
[0063] 《组内的升序顺位》
[0064] 组内的升序顺位是在基于键属性的值将表格分组时将期望的值属性按升序进行排序时得到该值在组内是第几个值的运算。组内的升序顺位能够使用秘密聚合函数计算系统100输出的标志e的份额{e}和置换σ的份额{{σ}}如以下那样来求。另外,c是group-by计数的结果(以下,称为“交叉累计”)。交叉累计c例如能够按照上述的《group-by计数》的过程使用标志e的份额{e}和置换σ的份额{{σ}}来求。
[0065] 第一,使用交叉累计c的份额[c]和置换σ的份额{{σ}},生成若恢复则成为对交叉累计c逆应用置换σ后的逆置换完毕交叉累计u:=σ-1(c)的份额[u]:=[σ-1(c)]∈[F]m。由于交叉累计c是在从开头起至组数为止的要素中设定了各组的记录数的向量,置换σ是将各组的最后的要素从开头起按顺序排列的置换,所以对交叉累计c逆应用置换σ后的逆置换完毕交叉累计u成为在各组的最后的要素中设定了该组的记录数的向量。以下,[u]∈[F]m的各要素还有通过[ui]∈[F](i=0,…,m-1)来参照的情况。
[0066] 第二,使用逆置换完毕交叉累计u的份额[u],计算[s]:=prefix-sum([u]),生成若恢复则成为向量s:=s0,…,sm-1∈F的份额[s]∈[F]m。prefix-sum是将m作为输入向量u的长度、关于0以上m-1以下的各整数i在输出向量s的第i个要素si中设定输入向量u的从第0个要素u0起至第i个要素ui为止的值的总和的运算。
[0067] 最后,使用向量s的份额[s],关于1以上m-1以下的各整数i设定[ai]:=[i-si-1],且设定[a0]:=[0],生成若恢复则成为组内的升序顺位a:=a0,…,am-1∈F的份额[a]∈[F]m。另外,请注意组内的升序顺位始于0。若想要得到始于1的顺位,则对各顺位加1即可。即,关于1以上m-1以下的各整数i设定[ai]:=[i-si-1+1]且设定[a0]:=[1]来生成升序顺位a即可。
[0068] 《组内的降序顺位》
[0069] 组内的降序顺位是在基于键属性的值将表格分组时将期望的值属性按降序进行排序时得到该值在组内是第几个值的运算。组内的降序顺位能够使用秘密聚合函数计算系统100输出的标志e的份额{e}和置换σ的份额{{σ}}如以下那样来求。另外,c是group-by计数的结果(以下,称为“交叉累计”)。交叉累计c例如能够按照上述的《group-by计数》的过程使用标志e的份额{e}和置换σ的份额{{σ}}来求。
[0070] 第一,使用交叉累计c的份额[c],关于0以上m-2以下的各整数i设定[c'i]:=[ci+1]且设定[c'm-1]:=[0],生成若恢复则成为移动完毕交叉累计c':=c'0,…,c'm-1∈Fm的m份额[c']∈[F] 。移动完毕交叉累计c'成为将表示各组的记录数的向量即交叉累计c每次一个地向前方移动后的向量。
[0071] 第二,使用移动完毕交叉累计c'的份额[c']和置换σ的份额{{σ}},生成若恢复则成为对移动完毕交叉累计c'逆应用置换σ后的逆置换完毕交叉累计u':=σ-1(c')的份额-1 m[u']:=[σ (c')]∈[F]。移动完毕交叉累计c'是将在从开头起至组数为止的要素中设定了各组的记录数的交叉累计c每次一个地向前方移动后的向量,置换σ是将各组的最后的要素从开头起按顺序排列的置换,因此对移动完毕交叉累计c'逆应用置换σ后的逆置换完毕交叉累计u'成为在各组的最后的要素中设定了后一组的记录数的向量。以下,[u']∈[F]m的各要素还有通过[u'i]∈[F](i=0,…,m-1)来参照的情况。
[0072] 第三,使用逆置换完毕交叉累计u'的份额[u'],计算[s']:=postfix-sum([u']),生成若恢复则成为向量s':=s'0,…,s'm-1∈F的份额[s']∈[F]m。postfix-sum是将m作为输入向量u'的长度、关于0以上m-1以下的各整数i在输出向量s'的第i个要素s'i中设定了输入向量u'的从第i个要素u'i起至第m-1个要素u'm-1为止的值的总和的运算。
[0073] 最后,使用向量s'的份额[s'],关于0以上m-1以下的各整数i设定[di]:=[m-i-s'i-1],生成若恢复则成为组内的降序顺位d:=d0,…,dm-1∈F的份额[d]∈[F]m。另外,请注意组内的降序顺位始于0。若想要得到始于1的顺位,则对各顺位加1即可。即,关于0以上m-1以下的各整数i设定[di]:=[m-i-s'i]来生成降序顺位d即可。
[0074] 《group-by中央值》
[0075] group-by中央值是在基于键属性的值将表格分组时按每个组得到期望的值属性的中央值的运算。group-by中央值能够使用秘密聚合函数计算系统100输出的值属性v'0,…,v'na-1的份额[v'0],…,[v'na-1]、标志e的份额{e}、以及置换σ的份额{{σ}}如以下来求。另外,c是group-by计数的结果(以下,称为“交叉累计”)。交叉累计c例如能够按照上述的《group-by计数》的过程使用标志e的份额{e}和置换σ的份额{{σ}}来求。此外,v是排序完毕值属性v'0,…,v'na-1之中的想要求group-by中央值的期望的值属性。
[0076] 第一,使用交叉累计c的份额[c]和置换σ的份额{{σ}},生成若恢复则成为表示组m内的升序顺位的向量a:=a0,…,am-1∈F的份额[a]∈[F]以及若恢复则成为表示组内的降序顺位的向量d:=d0,…,dm-1∈F的份额[d]∈[F]m。这里,设升序顺位以及降序顺位始于1。
组内的升序顺位例如能够按照上述的《组内的升序顺位》的过程来求。组内的降序顺位例如能够按照上述的《组内的降序顺位》的过程来求。
[0077] 第二,使用升序顺位a的份额[a]和降序顺位d的份额[d],对于满足2λ>m的λ计算[2λ+a-d],[2λ+d-a],将[2λ+a-d],[2λ+d-a]比特分解为λ比特,生成若恢复则成为比特串a-d的份额{a-d}∈{Bλ}m、以及若恢复则成为比特串d-a的份额{d-a}∈{Bλ}m。
[0078] 第三,从a-d的份额{a-d}和d-a的份额{d-a}中去除最低位比特,生成若恢复则成为a',d'的份额{a'},{d'}∈{Bλ-1}m。a'是去除a-d的最低位比特后的比特串,d'是去除了d-a的最低位比特的比特串。
[0079] 第四,使用a'的份额{a'}和d'的份额{d'},计算{a″}:={|a'=0|},{d″}:={|d'=0|},生成若恢复则成为标志a″,d″∈Bm的份额{a″},{d″}∈{B}m。另外,|·|是返回等式·的真假的记号。标志a″,d″表示a-d,d-a分别是否为0以上1以下。进一步,a″表示其记录是否是较大那个的中央值,d″表示其记录是否是较小那个的中央值。
[0080] 第五,将标志a″,d″的份额{a″},{d″}∈{B}m变换为基于任意的环F上的秘密分散的份额[a″],[d″]∈[F]m。
[0081] 第六,使用值属性v的份额[v]和标志a″,d″的份额{a″},{d″},计算[va]:=[va″],[vd]:=[vd″],生成若恢复则成为向量va,vd∈Fm的份额[va],[vd]∈[F]m。
[0082] 第七,使用标志a″,d″的份额{a″},{d″},生成若恢复则成为标志a″,d″的非¬a″,¬d″的份额{¬a″},{¬d″}∈{B}m。接着,使用标志a″,d″的非¬a″,¬d″的份额{¬a″},{¬d″},生成若恢复则成为将标志a″,d″的非¬a″,¬d″进行排序的置换σa,σd的份额{{σa}},{{σd}}∈{{Sm}}。
[0083] 最后,使用向量va,vd的份额[va],[vd]和置换σa,σd的份额{{σa}},{{σd}},计算[x]:=[σa(va)+σd(vd)],生成若恢复则成为表示各组的中央值的向量x的份额[x]∈[F]m。
[0084] <变形例>
[0085] 在上述的实施方式中,说明了各秘密计算装置1n构成为输出排序完毕键属性k'0,…,k'nk-1的份额[k'0],…,[k'nk-1]、排序完毕值属性v'0,…,v'na-1的份额[v'0],…,[v'na-1]、标志e的份额{e}、以及置换σ的份额{{σ}}的至少1个的例子,但是也可以根据接着继续计算的group-by运算的种类来选择并构成应包括的处理部。例如,group-by计数或group-by中央值是设为需要标志e的份额{e}以及置换σ的份额{{σ}}的group-by运算。group-by总和或group-by最大值/最小值是设为需要排序完毕值属性v'0,…,v'na-1的份额[v'0],…,[v'na-1]、标志e的份额{e}、以及置换σ的份额{{σ}}的group-by运算。组内的顺位是设为需要标志e的份额{e}以及置换σ的份额{{σ}}的group-by运算。即,若为计算group-by计数、group-by中央值、或者组内的顺位但是不计算group-by总和或group-by最大值/最小值的情况,则秘密聚合函数计算系统100至少能够输出标志e的份额{e}以及置换σ的份额{{σ}}即可。此时,各秘密计算装置1n例如能够构成为包括输入部10、比特分解部11、组排序生成部12、比特串排序部13、标志生成部14、键聚合排序生成部15、以及输出部19而不包括重复排除部16、键排序部17、以及值排序部18。
[0086] 以上,对本发明的实施方式进行了说明,但是不言而喻,具体的结构不限于这些实施方式,在不脱离本发明的宗旨的范围内即使存在适当设计的变更等,也包含于本发明。在实施方式中说明过的各种处理不仅可以基于记载的顺序按时间序列执行,也可以根据执行处理的装置的处理能或者根据需要来并行地或者单独地执行。
[0087] [程序、记录介质]
[0088] 在通过计算机实现在上述实施方式中说明过的各装置中的各种处理功能的情况下,各装置所应该具有的功能的处理内容通过程序而被记述。然后,通过由计算机执行该程序,上述各装置中的各种处理功能在计算机上得以实现。
[0089] 记述了该处理内容的程序能够预先记录在计算机可读取的记录介质中。作为计算机可读取的记录介质,例如也可以是磁记录装置、光盘、光磁记录介质、半导体存储器等任意的记录介质。
[0090] 此外,该程序的流通例如通过销售、转让、出租等记录了该程序的DVD、CD-ROM等便携式记录介质来进行。进一步,也可以设为下述结构:将该程序预先储存在服务器计算机的存储装置中,经由网络从服务器计算机向其他计算机转发该程序,从而使该程序流通。
[0091] 执行这样的程序的计算机例如首先将记录在便携式记录介质中的程序或者从服务器计算机转发的程序暂时储存在自身的存储装置中。然后,在执行处理时,该计算机读取自身的存储装置所储存的程序,执行基于所读取的程序的处理。此外,作为该程序的其他执行方式,也可以是,计算机从便携式记录介质直接读取程序,执行基于该程序的处理,进一步,还可以是,每当该计算机被从服务器计算机转发程序时,依次执行基于所接受的程序的处理。此外,也可以设为通过不进行从服务器计算机向该计算机的程序的转发而仅通过其执行指示和结果获取来实现处理功能的、所谓ASP(应用服务提供商(Application Service Provider))型的服务而执行上述的处理的结构。另外,设在本方式中的程序中包含用于基于电子计算机的处理的信息且近似等效于程序的信息(不是对于计算机的直接的指令,但是是具有对计算机的处理进行规定的性质的数据等)。
[0092] 此外,在该方式中,设为通过在计算机上执行规定的程序来构成本装置,但是也可以设为通过硬件方式来实现这些处理内容的至少一部分。
QQ群二维码
意见反馈