Python + numpy实现同态加密算法

在实现之前,先了解一下什么是同态加密

以下这个公式使我们要实现的同态加密版本
S c = w x + e x = ⌈ S c w ⌋ S \mathbf{c}=w \mathbf{x}+\mathbf{e} \quad \mathbf{x}=\left\lceil\frac{S \mathbf{c}}{w}\right\rfloor Sc=wx+ex=wSc

第一种加密

对称加密

如果密钥S是一个单位矩阵,那么c不过是输入x的一个重加权的、略带噪声的版本。

当S为单位矩阵时,相当于没有加密

当S为随机矩阵时,有加密

加解密使用同一key

import numpy as np

def generate_key(w,m,n):
    S = (np.random.rand(m,n) * w / (2 ** 16))# 可证明 max(S) < w
    return S# key,对称加密
def encrypt(x,S,m,n,w):
    assert len(x) == len(S)
    e = (np.random.rand(m))# 可证明 max(e) < w / 2
    c = np.linalg.inv(S).dot
  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值