本文首发公众号 VenusBlockChain,关注公众号后可免费阅读!VenusBlockChain 致力于区块链技术研究,传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。
智能合约隐私计算系列文章,已经总结了两篇:开篇、同态加密应用举例。为保持整个内容和知识体系的完整性,这里再次总结一下同态加密的数学原理,方便后面对其改进做理论疏导。注意,整个过程涉及到的同态加密是指加法同态加密,且是Paillier算法实现的加法同态加密。
1.同态加密实现
1.1.Paillier加法同态加密算法
Paillier加密算法[1]是1999年Paillier发明的基于复合剩余类的困难问题的,且满足加法同态加密算法。
(1)秘钥生成
- 随机选择两个大质数p和q满足 g c d ( p q , ( p − 1 ) ( q − 1 ) ) = 1 gcd(pq, (p−1)(q−1))=1 gcd(pq,(p−1)(q−1))=1。这个属性是保证两个质数长度相等。 g c d gcd gcd即求两个数的最大公约数。
- 计算 n = p q n=pq n=pq和 λ = l c m ( p − 1 , q − 1 ) λ=lcm(p−1, q−1) λ=lcm(p−1,q−1)。lcm即求两个数的最小公倍数。
- 选择随机整数g, g ∈ Z n 2 ∗ g \in Z_{n^2}^ \ast g∈Zn2∗,使得。此处定义 L ( x ) = ( x − 1 ) / n L(x)=(x-1)/n L(x)=(x−1)/n。
- 计算 u = L ( g λ m o d n 2 ) − 1 m o d n u={L(g^λmodn^2)}^{-1}modn u=L(gλmodn2)−1modn
- 公钥为 ( n , g ) (n, g) (n,g),私钥为 ( λ , μ ) (λ, μ) (λ,μ)。
(2)加密
- 明文m, m ∈ Z n 2 ∗ m \in Z_{n^2}^* m∈Zn2∗。
- 选择随机数r,0<r<n, g