Python + numpy实现同态加密算法

本文介绍了如何使用Python和numpy实现同态加密算法。首先解释了同态加密的概念,接着通过两种加密方式展示了其实现过程。第一种是对称加密,当密钥为单位矩阵时相当于未加密,随机矩阵则实现加密。第二种加密方式引入了“公钥”和“私钥”的概念,通过矩阵M进行密钥转换,实现单向加密。文章提供了具体的代码示例和计算过程。
摘要由CSDN通过智能技术生成

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

以下这个公式使我们要实现的同态加密版本
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、付费专栏及课程。

余额充值