一、KGC:
可信的密钥生成中心,它负责分发全部实体(K1个DPs和K2个RUs的弱密钥对)。而后计算全部DPi的聚合公钥 p k Σ pk_{\varSigma} pkΣ再发送给CP和CSP。而后用模数 N N N的卡迈克尔函数值 S K = λ SK=\lambda SK=λ做为系统强密钥(便可以对任何密文消息进行解密),再将其随机拆分红, S K 1 = λ 1 SK_1=\lambda _1 SK1=λ1和 S K 2 = λ 1 SK_2=\lambda _1 SK2=λ1,知足条件:html
λ 1 + λ 1 ≡ 0 ( m o d λ ) λ 1 + λ 1 ≡ 1 ( m o d N 2 ) \lambda _1+\lambda _1\equiv 0 \left( mod\,\,\lambda \right) \\ \lambda _1+\lambda _1\,\,\,\,\equiv 1 \left( mod\,\,N^2 \right) λ1+λ1≡0(modλ)λ1+λ1≡1(modN2)算法
二、DPs:
DPs是数据提供商的集合,在医疗大数据模型下,DPs能够是医疗机构,他们掌握着大量的医疗数据和对应的诊断结果。DPi会将本身的数据集用本身的公钥加密而后上传到云平台CP。数据库
三、RUs:
RUs是向CP发起请求的用户集合,可是在本文方案中,是端到端通讯模型,因此通常是单个用户RUi用本身的公钥对本身的病症加密,再发给CP,向CP请求获得诊断结果。安全
四、CP:
CP是距离客户端(DPs和RUs)最近的服务器,它直面多源密态数据。因为数据是不一样用户用不一样公钥加密的,例如: [ x ] p k a \left[ x \right] _{pk_a} [x]pka和 [ x ] p k b \left[ x \right] _{pk_b} [x]pkb,通常的密码算法是没法对不一样公钥加密的数据进行计算的。此时就须要依赖“同态加密”技术,让CP在没有数据访问权的状况下持有数据操做权。可是本文的方案是基于加法同态的(相似Paillier方案),因此还须要依赖另外一个服务器CSP。服务器
首先CP会利用同态性对数据进行同态处理,这部分的工做通常是对隐私信息进行匿名保护。通常的方法是加入随机数 r r r,可是须要主要这个 r r r必定要可以在后续的同态计算中消去。而后再利用部分密钥 S K 1 SK_1 SK1对消息进行部分解密,再发给CSP。markdown
五、CSP:
CSP是计算服务提供商,它负责利用 S K 2 SK_2 SK2对部分解密的密文消息进行全解密,此时获得的是明文,可是这个明文是被CP匿名保护后的明文,因此CSP仍然不可能获得数据拥有者的隐私信息!机器学习
拿到明文后,CSP能够进行任何运算,由于此时是在明文下计算。本文这样设计的好处就是利用CSP去避免半同态加密的计算局限性!分布式
任何在计算结束后,CSP利用聚合公钥 p k Σ pk_{\varSigma} pkΣ对处理后的数据进行重加密,而后发送给CP。而后CP再利用同态性,把 p k Σ pk_{\varSigma} pkΣ加密的消息中的噪音(随机数)消去。ide
因为强密钥 S K SK SK可以对任何用户加密后的密文进行解密,从而***、恶意访问到用户的隐私。而一台服务器是有可能被敌手攻陷的,可是两台服务器对敌手来讲难度就很大了,几乎不可能完成。若是让一台服务器拥有强私钥 S K SK SK,则这台服务器能力太大,如若被***后果不堪设想,任何再委托CSP辅助计算,专门担任计算服务提供商。这样的设计是很好的,值得学习!函数
问题陈述本文提供的问题描述,DPs的数据属于结构化数据(二维表、关系型数据库),而请求用户RU是但愿经过大数据算法、机器学习算法获取这些数据的统计学信息。
如今的大数据,结构化数据占比愈来愈少,绝大多数都是非结构化数据!若是是非结构化数据,那么如何在数据格式上安全处理呢?本文未提到数据格式处理的方案,可是大数据算法主要的时间开销就是在数据格式上!(来自Hadoop课所学,若是有误,还请指教!)
分布式双陷门密码体制在密钥生成阶段(KeyGen), λ = l c m ( p − 1 , q − 1 ) / 2 \lambda =lcm\left( p-1,q-1 \right) /2 λ=lcm(p−1,q−1)/2,计算的结果是 λ = p ′ q ′ \lambda =p^{\prime}q^{\prime} λ=p′q′。而真正的,模数 N N N的卡迈克尔函数应该是:
λ ( N ) = l c m ( λ ( p ) , λ ( q ) ) = 2 p ′ q ′ \lambda \left( N \right) =lcm\left( \lambda \left( p \right) ,\lambda \left( q \right) \right) =2p^{\prime}q^{\prime} λ(N)=lcm(λ(p),λ(q))=2p′q′
很显然,这里的卡迈克尔函数并非密钥生成阶段(KeyGen)的 λ \lambda λ,然后续的加解密须要依赖卡迈克尔函数的性质,不然可能没法保障能正确解密!
从上面的定义能够看出,卡迈克尔函数是是和指数息息相关的!由于卡迈克尔函数是最小的指数,所以其余指数必定是卡迈克尔函数的倍数。
定理描述:
已知 n = n 1 × n 2 n=n_1\times n_2 n=n1×n2,且 ( n 1 , n 2 ) = 1 \left( n_1,n_2 \right) =1 (n1,n2)=1,则: λ ( n ) = [ λ ( n 1 ) , λ ( n 1 ) ] \lambda \left( n \right) =\left[ \lambda \left( n_1 \right) ,\lambda \left( n_1 \right) \right] λ(n)=[λ(n1),λ(n1)]
证实:
由卡迈克尔函数的定义,得:
g λ ( n ) ≡ 1 ( m o d n ) g^{\lambda \left( n \right)}\equiv 1 \left( mod\,\,n \right) gλ(n)≡1(modn)
因此:
g λ ( n ) = k n + 1 g^{\lambda \left( n \right)}=kn+1 gλ(n)=kn+1
又由于: n = n 1 × n 2 n=n_1\times n_2 n=n1×n2,因此:
g λ ( n ) = k n 1 n 2 + 1 g^{\lambda \left( n \right)}=kn_1n_2+1 gλ(n)=kn1n2+1
此时,分别对 g λ ( n ) g^{\lambda \left( n \right)} gλ(n)模 n 1 n_1 n1和 n 2 n_2 n2,获得:
{ g λ ( n ) ≡ 1 ( m o d n 1 ) g λ ( n ) ≡ 1 ( m o d n 2 ) \begin{cases} g^{\lambda \left( n \right)}\equiv 1 \left( mod\,\,n_1 \right)\\ g^{\lambda \left( n \right)}\equiv 1 \left( mod\,\,n_2 \right)\\ \end{cases} {gλ(n)≡1(modn1)gλ(n)≡1(modn2)
又由于:
g λ ( n 1 ) ≡ 1 ( m o d n 1 ) g^{\lambda \left( n_1 \right)}\equiv 1 \left( mod\,\,n_1 \right) gλ(n1)≡1(modn1)
因此:
λ ( n ) = k 1 λ ( n 1 ) \lambda \left( n \right)=k_1\lambda \left( n_1 \right) λ(n)=k1λ(n1)
同理:
λ ( n ) = k 2 λ ( n 2 ) \lambda \left( n \right)=k_2\lambda \left( n_2 \right) λ(n)=k2λ(n2)
因此:
[ λ ( n 1 ) , λ ( n 2 ) ] ∣ λ ( n ) \left[ \lambda \left( n_1 \right) , \lambda \left( n_2 \right) \right] \,\,|\,\, \lambda \left( n \right) [λ(n1),λ(n2)]∣λ(n)
也就是说, λ ( n ) \lambda \left( n \right) λ(n)是 λ ( n 1 ) \lambda \left( n_1 \right) λ(n1)和 λ ( n 2 ) \lambda \left( n_2 \right) λ(n2)的公倍数,假设任意一个公倍数是:
M = k 1 λ ( n 1 ) = k 2 λ ( n 2 ) M=k_1\lambda \left( n_1 \right)=k_2\lambda \left( n_2 \right) M=k1λ(n1)=k2λ(n2)
因而,有:
{ g M ≡ 1 ( m o d n 1 ) g M ≡ 1 ( m o d n 2 ) \begin{cases} g^{M}\equiv 1 \left( mod\,\,n_1 \right)\\ g^{M}\equiv 1 \left( mod\,\,n_2 \right)\\ \end{cases} {gM≡1(modn1)gM≡1(modn2)
又由于: ( n 1 , n 2 ) = 1 \left( n_1,n_2 \right) =1 (n1,n2)=1,根据中国剩余定理,获得:
g M ≡ 1 ( m o d n ) g^{M}\equiv 1 \left( mod\,\,n \right) gM≡1(modn)
因此,任意的 λ ( n 1 ) \lambda \left( n_1 \right) λ(n1)和 λ ( n 2 ) \lambda \left( n_2 \right) λ(n2)的公倍数 M M M都是 λ ( n ) \lambda \left( n \right) λ(n)的倍数,因此:
λ ( n ) = [ λ ( n 1 ) , λ ( n 1 ) ] \lambda \left( n \right) =\left[ \lambda \left( n_1 \right) ,\lambda \left( n_1 \right) \right] λ(n)=[λ(n1),λ(n1)]
成立!证毕!
大括号的第一个等式是卡迈克尔函数的性值,很少赘述,而后第二个等式证实以下:
证实:
由于, w λ ≡ 1 ( m o d n ) w^{\lambda}\equiv 1 \left( mod\,\,n \right) wλ≡1(modn)成立,因而等价于:
w λ = k n + 1 w^{\lambda}=kn+1 wλ=kn+1
因此:
w n λ = ( k n + 1 ) n = C n 0 ( k n ) 0 1 n + C n 1 ( k n ) 1 1 n − 1 + … = 1 + n 2 × ( … ) w^{n\lambda}=\left( kn+1 \right) ^n \\ \,\,\,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, =C_{n}^{0}\left( kn \right) ^01^n+C_{n}^{1}\left( kn \right) ^11^{n-1}+… \\ \,\,\,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, \,\, =1+n^2\times \left( … \right) wnλ=(kn+1)n=Cn0(kn)01n+Cn1(kn)11n−1+…=1+n2×(…)
因此, w n λ ≡ 1 ( m o d n 2 ) w^{n\lambda}\equiv 1 \left( mod\,\,n^2 \right) wnλ≡1(modn2)成立,证毕!
卡迈克尔函数是构造Paillier方案的核心数论基础,从本文的方案也显而易见,几乎全部的密码操做、任何加解密,都须要依赖卡迈克尔函数!
本文中数学不严谨的地方也正是体如今这里, λ \lambda λ不是正确的卡迈克尔函数,后续的解密、加密操做都不能保障正确性!
隐私保护下的整型计算包[ x ] p k ⋅ [ y ] p k = [ x + y ] p k \left[ x \right] _{pk}\cdot \left[ y \right] _{pk}=\left[ x+y \right] _{pk} [x]pk⋅[y]pk=[x+y]pk
[ x ] p k N − 1 = [ ( N − 1 ) x ] p k = [ − x ] p k \left[ x \right] _{pk}^{N-1}=\left[ \left( N-1 \right) x \right] _{pk}=\left[ -x \right] _{pk} [x]pkN−1=[(N−1)x]pk=[−x]pk
协议分析:
首先来自DPa和DPb的数据[x]和[y]是不一样公钥加密的,而后CP是外包存储方,因而CP拥有他们的密态数据。CP首先选取两个随机数,经过同态性质,来对明文x和y进行隐藏。而后利用部分强密钥解密,获得部分解密密文,发给CSP。
而后CSP经过属于它的部分强密钥解密获得隐藏后的明文,好比:x+y+ra+rb,而后这就完成了加法运算了!再用联合公钥(此时的联合公钥是包含了请求发起者的公钥的!)加密,再发给CP。
CP再次利用同态性,把噪声ra+rb去掉,而后把密文发给请求用户RU。请求用户,调用下面的算法进行解密,获得本身须要的SAD结果:
其中联合公钥如咱们所分析,是带上请求用户的公钥信息的:
一、在没有身份认证的状况下,敌手RU能够伪造一个DPi存储[0]而后联合DPj的密文[x]向服务器发起SAD的请求,这样会获得[0+x]的明文,也就是明文x。这样DPj的隐私数据就泄露了。
二、在本文后面加上了一个身份认证,可是我以为有点含糊,并无详细的身份认证协议。仍然是有很多漏洞的,好比“欺骗***”。
一、在Step1,为什么须要经过翻硬币,来肯定 l l l的形式???
二、在Step2,假设 l = r ( 2 x + 1 ) l=r(2x+1) l=r(2x+1),那么:
L ( l ) = L ( r ) + L ( x ) + 1 < = 3 / 8 L ( N ) + 1 L(l)=L(r)+L(x)+1<=3/8L(N)+1 L(l)=L(r)+L(x)+1<=3/8L(N)+1
那么如此以来怎么判断是否是符合 L ( l ) < 3 / 8 L ( N ) L(l) < 3/8L(N) L(l)<3/8L(N)???仍是说个人理解有错误?
尤为是在 l = − r ( 2 x + 1 ) l=-r(2x+1) l=−r(2x+1)的时候, l l l是一个负数,根据计算机的补码表示,最高位符号位是1,那么它的比特长度应该是定值呀???请赐教,感谢!
启发与参考文献本文系统模型双服务器的思路我以为很棒,是值得学习的!哪怕加入了全同态,兴许也能够利用双服务器的思路去分担计算!只是须要加入身份认证协议,来保证信息传输的安全。
本文的安全协议设计的是计算轻量级的加法同态方案,它其实不针对任何机器学习的算法、大数据算法,而是为这些算法的实现提供了高效的计算包,至关因而提供了高效安全的计算原语。
可是我以为一个地方不太好,那就也是由系统模型带来的问题,我以为须要对CP和CSP进行身份认证,而后RU也须要有身份管理和认证的中心,不然安全性仍是不佳?
几种计算的设计思路仍是很好的,很是值得借鉴!并且系统的生成元的设计也不错,可是我以为把 g = − a 2 N g=-a^{2N} g=−a2N改为 g = a 2 N g=a^{2N} g=a2N会更好!由于此处的卡迈克尔函数值拥有是偶数,-1这个系数我认为能够去掉,固然在这里无伤大雅!
[1] X. Liu, R. H. Deng, K.-K. R. Choo, and J. Weng, “An efficient privacy-preserving outsourced calculation toolkit with multiple keys,” IEEE Trans. Inf. Forensics Security, vol. 11, no. 11, pp. 2401–2414, Nov. 2016.
[2] P. Paillier, “Public-key cryptosystems based on composite degree residuosity classes,” in Proc. Int. Conf. Theory Appl. Cryptograph. Techn.,1999, pp. 223–238.
忘了更新了,上面我提出的思考问题以及一些数学/安全上不严谨的问题,我都已经获得本身满意的理解了。若是有大佬有新的想法,欢迎探讨~
不算什么很大的问题,我就不列出来了~