1.一种基于全同态加密的医疗数据共享的隐私保护方法,其特征在于,包括以下步骤:S10、系统管理员进行系统初始化,生成公共参数GP,将GP发送给一个科研机构;
S20、科研机构生成一个公私钥对(pk,sk)和辅助计算密钥evk,其中,evk用于解决密文乘法运算时密文膨胀过大的问题,并将pk发送给医院,将evk发送给云服务器;
S30、医疗数据包括健康数据h和标签Y,医院对健康数据h、标签Y、模型初始化权值β的明文进行编码,生成明文多项式,所有的明文多项式映射到一个多项式商环中,医院使用pk(0)对明文多项式加密,生成健康数据密文CTh、标签密文CY、初始模型权值密文CTβ ,并将这些密文发送给所述云服务器;
S40、云服务器从医院获得密文后,使用密文与evk进行逻辑回归训练,更新β,并将最新(k)的模型权值密文CTβ 发送给科研机构,其中,k表示经过逻辑回归的迭代次数;
(k)
S50、科研机构获得CTβ 后,使用sk解密得到模型权值的明文多项式,并对这个明文多(k)项式解码得到最新的模型权值β ,对权值大小进行分析,得到引发某种疾病的主要特征与无关特征;
其中,所述标签Y表示病人是否得病,若标签值为1,则表示病人得病,若标签值为0,则表示病人未得病;所述健康数据h由病人的各项身体特征的数值组成;;
模型权值β是衡量某种生命特征是否是引发某种疾病的主要特征,该特征的权值越大则该特征越可能是主要特征;
所述S10包括以下步骤:
S101、系统管理员初始化科研机构、云服务器、医院,为这些实体分配唯一身份编号ID,将身份编号组成的名单存入本地数据库;
S102、之后系统管理员设置安全等级参数λ,选择一个m,使得m+1为2的幂,选择一个多L项式商环R=Z[X]/(Φ2(m+1)(X)),一个用于重缩放的特殊模数p,一个整数L,计算Q=p,使得Q和m+1满足安全等级参数λ,即 从R中选择一个私钥sk相关的分布Xs,一个错误分布Xe,一个随机分布Xr用作全同态加密,最后系统管理员将公共参数GP={Q,Xs,R,Xe,Xr,p}发送给科研机构;
所述步骤S20包括以下步骤:
S201、科研机构生成全同态加密算法的公私钥对(pk,sk)、辅助计算密钥evk,首先科研机构实例化,之后在私钥相关的分布Xs中选取s用于组成私钥sk、在随机分布Xr随机选取r为整数、在错误分布Xe中选取e作为错误分布多项式,从R中随机均匀选取多项式a用于组成公钥,最后科研机构设置私钥sk=(1,s),公钥pk=(b,a),其中b=‑a·s+e mod Q;
S202、科研机构设置辅助计算密钥evk用于乘法操作时的重新线性化,evk=(b',a'),2
其中a'通过从多项式商环R随机均匀选取得到,b'=‑a'·s+e'+b·s mod(pQ),其中e'从错误分布Xe中随机选取得到,至此科研机构生成了公钥pk=(b,a)、私钥sk=(1,s)及辅助计算密钥evk=(b',a'),并将公钥pk发送给医院,将辅助计算密钥evk发送给云服务器;
所述步骤S30中,所述医院对健康数据h、标签Y、模型权值β中的每一行向量进行编码生成明文多项式,并使用pk将多项式加密成密文,所述步骤涉及到的明文如下所示:健康数据h组成的矩阵如下表示:
矩阵中的每个行向量如下所示:
[hi0 hi1 ... him]
健康数据h表示病人身体特征的指数,每条健康数据表示病人的m+1个身体特征的数值,并在本方法中作为一个行向量,医院一共有n条健康数据,n条健康数据组成一个n·[m+
1]的矩阵;
标签Y组成的矩阵如下表示:
矩阵中的每一行向量如下表示:
[tagi tagi … tagi]
Y表示所有的标签,标签表示病人是否得病,若标签为0则表示该病人没有得病,若标签为1则表示该病人得病,本方法中每个标签向量的维度是m+1,且标签向量中的数值都相同,一个标签向量表示一个病人是否得病,n个标签向量组成一个n·[m+1]的矩阵,矩阵中的tagi表示一个标签值,一个标签向量对应一条健康数据;
其中健康数据h、标识病人是否得病的标签Y都属于医疗数据;
(0)
初始权值β 组成的矩阵如下表示:
矩阵中的每个行向量如下所示:
(0) (0) (0)
[β0 β1 ...βm ]
逻辑回归算法的权值β衡量身体特征与疾病的相关度,由于有m+1个身体特征,权值β的(0)一个行向量的维度是m+1,n个行向量组成一个n·[m+1]的矩阵,β 表示初始权值,每一次(k)逻辑回归迭代后,都会产生一个新的权值向量,经过k次迭代后得到最新模型权值β ;
所述步骤S30包括以下步骤:
S301、使用z统一表示健康数据矩阵、标签矩阵、初始权值矩阵中的每一个向量,医院求向量z=[z10,z11,…,z1m]的共轭并增广;
S302、对每个增广向量乘以缩放因子Δ,将向量中的数值进行放大,从而尽可能地保留向量的小数部分以提高计算精度;
2·m+2
S303、之后医院使用分割圆多项式x +1=0的单位根建立范德蒙方程,并使用范德蒙方程建立多项式,再将多项式的系数四舍五入取整,最终得到明文多项式m(x)=encode(z)
2·m+1
=encode([z10,z11,…,z1m])=a0+a1·x+…+a2·m+1·x (1)通过公式(1)编码得到每个健康数据向量的明文多项式m(x)h=encode([hi0 hi1 … him])、每个标签向量的明文多项式m(x)Y=encode([tagi tagi … tagi])、每个初始权值向(0) (0) (0)量的明文多项式m(x)β=encode([β0 β1 … βm ]),所有明文多项式都映射到多项式商环R中;
S304、医院使用科研机构的公钥pk对m(x)h、m(x)Y、m(x)β加密,生成全同态密文,加密的推算如下表示:c0=r·b+m(x)+e0 mod Q
c1=r·a+e1 mod Q
Enc(m(x),pk)=(c0,c1) (2)公式(2)中的m(x)表示编码得到的明文多项式,科研机构的全同态公钥pk由b和a组成,其中b=‑a·s+e mod Q,r为从Xr中选出的随机整数,e0,e1为从Xe中选出的随机多项式,对m(x)加密后得到的密文由c0和c1组成;
根据公式(2)加密得到健康数据向量密文Enc(m(x)h,pk)、标签向量密文Enc(m(x)Y,pk)、初始权值向量密文Enc(m(x)β,pk),n个健康数据向量密文组成健康数据矩阵密文CTh、n(0)个标签向量密文组成标签矩阵密文CY、n个权值向量密文组成权值矩阵密文CTβ ;
(0) (0)
医院将CTh、CTβ 、CY发送给云服务器,CTh、CTβ 、CY的描述如下:(0)
云服务器获得密文CTh、CTβ 、CY后,使用密文进行逻辑回归计算,计算过程中的每一次迭代都会更新一次模型权值;
所述步骤S40包括以下步骤:
(0)
S401、云服务器首先将密文CTh中的行向量与CTβ 中的行向量按位相乘,用公式(3)表示行向量的按位相乘:* * * (0)* (0)* (0)* * (0)*Rescale(Mult([hi0 hi1 ... him ],[β0 β1 ... βm ]),p)=[hi0·β0 * (0)* * (0)*hi1·β1 ... him·βm ] (3)得到乘积向量的密文,云服务器再使用辅助计算密钥evk对乘积向量的密文进行重新线性化,降低密文的维度,最后将得到的密文进行Rescale重缩放,统一密文的缩放因子,得到了健康数据与权值乘积的矩阵密文CT1:S402、云服务器使用函数rotate(CT1(i,:),1)将CT1中的每一行向量密文向左移1位,CT1中的每一行向量密文如下所示:(0)* * (0)* * (0)* * (0)* *CT1(i,:)=[β0 ·hi0 β1 ·hi1 ... βm‑1 ·him‑1 βm ·him](0)* * (0)* * (0)* *
rotate(CT1(i,:),1)=[β1 ·hi1 ... βm ·him β0 ·hi0],之后将移位前的向量密文与移位后的向量密文相加,得到新密文如下所示:(0)* * (0)* * (0)* *
Add(CT1(i,:),rotate(CT1(i,:),1))=[β1 ·hi1 +β0 ·hi0 ...βm ·him +(0)* * (0)* * (0)* *βm‑1 ·him‑1β0 ·hi0+βm ·him],云服务器重复执行Add(CT1(i,:),rotate(CT1(i,:),1))函数m‑1次后,得到向量密文ct2:而矩阵密文CT1一共有n行向量密文,对这n行向量密文各重复执行Add(CT1(i,:),rotate(CT1(i,:),1))函数m‑1次,得到矩阵密文CT3;
S403、云服务器为计算近似多项式,近似多项式表示为:3
σ(x)=‑0.004x+0.197x+0.5 (4)将CT3代入公式(4)中的x,先将‑0.004的全同态密文与CT3相乘并重缩放,得到‑0.004x的密文CT4,‑0.004的全同态密文CT(‑0.004)与密文CT4如下所示:2
S404、云服务器将CT3与CT3相乘并重缩放,得到x 的密文CT5=Rescale(Mult(CT3,CT3),
2 3
p),再把‑0.004x的乘积密文CT4与x的密文CT5进行相乘并重缩放,得到‑0.004x的密文CT6:3
S405、云服务器得到‑0.004x的密文CT6后,再求0.197x的矩阵密文,将0.197的矩阵密文与CT3进行相乘并重缩放,得到0.197x的密文CT7,0.197的矩阵密文CT(0.197)与密文CT7如下所示:3
S406、最后云服务器将‑0.004x的矩阵密文CT6、0.197x的矩阵密文CT7、0.5的矩阵密文3
CT(0.5)相加,得到近似多项式σ(x)=‑0.004x+0.197x+0.5的矩阵密文б(CT3):S407、云服务器将标签矩阵密文CY减去近似多项式的矩阵密文б(CT3),得到密文CT8如下所示:云服务器再把CT8与健康数据密文CTh相乘并重缩放,得到密文CT9:S408、聚合CT9中的每一个行向量以计算损失函数的梯度:通过将矩阵密文CT9中的每一个行向量按位相加,再将得到的结果除以n,得到损失函数梯度矩阵密文CT10:S409、云服务器将学习率α的矩阵密文CT(α)乘以CT10得到CT11,再使用初始权值密文(0) (1)CTβ 与CT11相加,得到新的权值密文CTβ ,得到新的权值即表示完成了一次逻辑回归迭代:(1)
之后云服务器将更新后的权值CTβ 作为S401中的新权值,并重复S401到S409中的步(k) (k) (k)骤,经过k次迭代后得到权值矩阵密文CTβ ,云服务器将CTβ 发送给科研机构,CTβ 如下所示:所述步骤S50包括以下步骤:
(k) (k)
S501、科研机构接收到权值矩阵密文CTβ 后,使用私钥sk将矩阵密文解密,由于CTβ(k)由n个相同的行向量组成,因此使用sk解密CTβ 中的第一行向量得到明文多项式,并对明(k) (k) (k)文多项式解码即可,CTβ 中的第一行向量用ctβ1 表示,首先使用sk解密ctβ1 ,得到明文多项式,解密过程如下:(k) (k)
Dec(ctβ1 ,sk)=
2·m+1
≈m(x)=a0+a1x+…+a2·m+1x (5)(k)
公式(5)中m(x)表示对ctβ1 解密得到的明文多项式;
2·m+2
S502、对明文多项式m(x)进行解码,将分割圆多项式x +1=0的根root1、root2、…、root2m+2分别代入多项式m(x),求解出共轭增广并乘以缩放因子后的权值的明文向量再除以缩放因子Δ,得到增广后的权值明文向量最后去除向量中共轭增广的部分,得到权值明文向量(k) (k) (k)
[β0 β1 ... βm ];
(k) (k) (k)
S503、科研机构根据权值明文向量[β0 β1 ... βm ]得到逻辑回归模型公式(6),分析出引发疾病的主要特征与无关特征,逻辑回归模型公式如下所示:(k) (k) (k)
M=β0 ·fea0 +β1 ·fea1+…+βm ·feam (6)公式(6)中的feai表示导致病人患有疾病的特征,一共有m+1个特征,每个特征都对应了(k)唯一权值βi ,若对应权值的绝对值越大,则说明该特征越可能是引发某种疾病的主要特征,对应权值越接近0,则说明该特征越不可能是引发某种疾病的主要特征;
S504、科研机构使用测试数据来测试模型的精度,测试数据包括科研机构本地的健康数据和对应的标签,本地健康数据组成的矩阵w如下所示:w中的每一个行向量表示为[w0 w1 ... wm],w中的每一个行向量对应的标签表示为ti,n个ti组成向量[t0 t1 ... tn],ti∈{0,1};
(k)
科研机构将矩阵w中的每个行向量代入公式(6)中的feai,计算得出结果M=β0 ·wi0+(k) (k)β1 ·wi1+…+βm ·wim,再将M代入公式:公式(7)中的e是自然对数;
若f(M)<0.5,则对应的预测值为0,表示没有患某种疾病,若f(M)>0.5,则对应的预测值为1,则表示患有某种疾病,将得到的预测值组成一个由0、1组成的向量,并与[t0 t1 ... tn]对比,与ti相等的预测值越多则说明模型精度越高。