python简单LWE 加解密方案实现,支持密文同态加法以及常数乘法
2021/10/9 11:35:56
本文主要是介绍python简单LWE 加解密方案实现,支持密文同态加法以及常数乘法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本人最近开始调研和学习同态加密,由于好多知识需要系统性学习,基础的知识包括,格加密,格上困难问题及各类问题之间的归约,LWE以及RLWE 相关概念等,同态方案基本是从Gentry博士论文开始看,随后第二代(BFV、BGV),第三代(GSW)针对布尔电路或算术电路的同态加密及其改进方案不断被提出,(要学的东西好多!!),主要学习途径就是看论文以及看 Zhihu 上大神的帖子。
为了理解LWE基本原理,本人实操一下标准 LWE 的加解密流程。并且在控制 error 在较小范围内时(这个很重要!!),测试 LWE加解密原生支持同态加法与同态常数乘积的运算。
废话不多说,直接看看代码。
# LWE encryption and decryption q = 2**10 p = 2**4 delta = q//p n=5 a = np.random.randint(0,q,n) # key gen def key_gen(): s_v = np.random.randint(0,2,n) # binary sk vector s_v_n = -s_v sk =np.concatenate((s_v_n,np.array([1])),axis=0) e1 = np.random.randint(0,delta//4) pk = np.sum(a*s_v) + e1 # b is pk; return sk,pk # encryption msg = 15 # no more than p def enc(msg,pk): e2 = np.random.randint(0,delta//8) c_v = pk + e2 + delta * msg cipher = np.concatenate((a,np.array([c_v])),axis = 0) % q return cipher # decryption def dec(cipher,sk): dec_msg = np.round((np.sum(sk * cipher) % q ) / delta) return int(dec_msg) def eval_add(c1,c2): c3 = (c1.copy() + c2.copy()) % q return c3 def eval_const_mul(const,c): c2 = (c.copy() * const) % q return c2
简单测试代码:
sk,pk = key_gen() c1 =enc(3,pk) dec_m1 = dec(c1,sk) print(dec_m1) # 3 c2 = enc(7,pk) dec_m2 = dec(c2,sk) print(dec_m2) # 7 c3 = eval_add(c1,c2) print(dec(c3,sk)) # 10 c4 = eval_const_mul(2,c2) print(dec(c4,sk)) # 14
有任何问题可以留言共同学习哈!
这篇关于python简单LWE 加解密方案实现,支持密文同态加法以及常数乘法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门
- 2024-11-14Python编程入门指南
- 2024-11-13Python基础教程
- 2024-11-12Python编程基础指南
- 2024-11-12Python基础编程教程
- 2024-11-08Python编程基础与实践示例
- 2024-11-07Python编程基础指南
- 2024-11-06Python编程基础入门指南
- 2024-11-06怎么使用python 计算两个GPS的距离功能-icode9专业技术文章分享