隐私计算python实现Paillier同态加密

1.基本概念

        Paillier同态加密是一种公钥加密方案,具有同态加密的特性。它由Pascal Paillier于1999年提出。

        Paillier同态加密基于数论问题,其安全性基于大整数分解问题和离散对数问题的困难性。该方案可以用于保护隐私数据,同时支持在加密状态下对加密的数据进行运算。

        Paillier同态加密方案包含两个主要算法:加密算法和解密算法。其中,加密算法用于将明文加密为密文,解密算法用于将密文解密为明文。此外,该方案还包括一个密钥生成算法,用于生成加密和解密所需的公钥和私钥。

2.加解密过程

2.1密钥生成

1.随机选择两个长度相等的大素数p,q,并满足gcd(pq,(p-1)(q-1))=1,这里gcd表示最大公约数。

2.计算n=pq以及λ=lcm(p-1,q-1),这里lcm表示最小公倍数

3.随机选择整数g(也可以令g=n+1)

4.定义L函数:L(x)=(x-1)/n,计算 \mu=(L(g^{\lambda}mod n^2))^{-1}mod n

公钥pk=(n,g),私钥sk=(λ,μ)

2.2加密

1.输入明文信息m

2.选择随机整数r,且gcd(r,n)=1

3.计算密文c=g^mr^nmodn^2

2.3解密

1.输入密文c

2.计算明文m=L(c^\lambda~mod~n^2)\cdot\mu~mod~n

2.4同态加证明

\begin{array}{l}{​{E(m_{1})\times E(m_{2})}}{​{=\left(g^{m_{1}}r_{1}{}^{N}(m o d N^{2})\right)\times\left(g^{m_{2}}r_{2}{}^{N}(m o d N^{2})\right)}}{​{=g^{m_{1}+m_{2}}(r_{1}\times r_{2})^{N}(m o d N^{2})}}{​{=E(m_{1}+m_{2})}}\end{array}

3.加解密示例

3.1密钥生成

1.这里我们p、q选取简单的素数,即p=17,q=23

2.计算n=pq=391,λ=lcm(16,22)=176

3.取整数g=n+1=392

4.计算\mu=(L(392^{176}~mod~ 391^2))^{-1}~mod~391=20

公钥pk=(n,g)=(391,392),私钥sk=(176,20)

3.2加密

1.明文m=8

2.选择随机数r=5,gcd(5,391)=1

3.计算密文c=392^85^{391}~mod~391^2=15310

3.3解密

1.输入密文15310

2.计算明文m=L(15310^{176}~mod~391^2)\cdot20~mod~391=8

4.代码实现

"""
@Time : 2023/10/8 0008 16:17
@Auth : yeqc
"""
# 部分同态加密: paillier同态加密from phe import paillier# 创建Paillier 密钥对
public_key, private_key = paillier.generate_paillier_keypair()# # 明文
# M = 42
# # 加密明文
# encrypted_M = public_key.encrypt(M)
#
# # 解密密文
# decrypted_M = private_key.decrypt(encrypted_M)
#
# print(f'明文{M}')
# print(f'加密密文:{encrypted_M.ciphertext()}')#.ciphertext()实现纯文本输出
# print(f'解密密文:{decrypted_M}')# ------------------以下是密文加 实现明文加-------------------
# 明文
M1, M2 = 25, 70
# 加密密文
encrypted_M1, encrypted_M2 = public_key.encrypt(M1), public_key.encrypt(M2)# 密文相加
en_M_sum = encrypted_M1 + encrypted_M2
# 解密密文
de_M_sum = private_key.decrypt(en_M_sum)
print(f'M1 = {M1},M2 = {M2}')
print(f'M1加密密文 en_M1 = {encrypted_M1}, M2加密密文 en_M2 = {encrypted_M2}')
print(f'密文相加 en_M_sum = {en_M_sum}')
print(f'解密密文 de_M_sum = {de_M_sum}')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/169292.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将VS工程转为pro工程及VS安装Qt插件后没有create basic .pro file菜单问题解决

目录 1. 前言 2. VS工程转为pro工程 3. 没有create basic .pro file菜单 1. 前言 很多小伙伴包括本人,如果是在Windows下开发Qt程序,偏好用Visual Studio外加装个Qt插件进行Qt开发,毕竟Visual Studio确实是功能强大的IDE,但有时…

【Java】注解(Annotation)

1.注解 就是lava代码里的特殊标记,比如:Override、Test等,作用是:让其他程序根据注解信息来决定怎么执行该程序。注意:注解可以用在类上、构造器上、方法上、成员变量上、参数上、等位置处。 如下Override所示: 2.自定义注解 就是自己定义…

长虹智能电视使用123

1、开机 在接通电源的情况下,长虹智能电视开机有两种方式。 方式1: 按电视右下角开机按钮 方式2: 按电视遥控器开机按钮 长虹智能电视开机后会进入其操作系统(安卓)。 屏幕左右双箭头图表,手指点击会…

KubeSphere v3.4.0 部署K8S Docker + Prometheus + grafana

KubeSphere v3.4.0 部署K8S 1、整体思路2、修改linux主机名3、 离线安装3.1 问题列表3.2 执行命令成功列表 1、整体思路 将KubeSphere v3.4.0 安装包传输到其中一台机器修改Linux主机名(选取3台,修改为master01、master02、master03)安装官方…

写一下关于部署项目到服务器的心得(以及遇到的难处)

首先要买个服务器(本人的是以下这个) 这里我买的是宝塔面板的,没有宝塔面板的也可以自行安装 点击登录会去到以下页面 在这个界面依次执行下面命令会看到账号和密码和宝塔面板内外网地址 sudo -s bt 14点击地址就可以跳转宝塔对应的内外网页面 然后使用上述命令提供的账号密…

《网络协议》04. 应用层(DNS DHCP HTTP)

title: 《网络协议》04. 应用层(DNS & DHCP & HTTP) date: 2022-09-05 14:28:22 updated: 2023-11-12 06:55:52 categories: 学习记录:网络协议 excerpt: 应用层、DNS、DHCP、HTTP(URI & URL,ABNF&#xf…

CVE-2023-25194 Kafka JNDI 注入分析

Apache Kafka Clients Jndi Injection 漏洞描述 Apache Kafka 是一个分布式数据流处理平台,可以实时发布、订阅、存储和处理数据流。Kafka Connect 是一种用于在 kafka 和其他系统之间可扩展、可靠的流式传输数据的工具。攻击者可以利用基于 SASL JAAS 配置和 SASL …

2023年第十六届山东省职业院校技能大赛高职组“信息安全管理与评估”赛项规程

第十六届山东省职业院校技能大赛 高职组“信息安全管理与评估”赛项规程 一、赛项名称 赛项名称:信息安全管理与评估 英文名称:Information Security Management and Evaluation 赛项组别:高职组 赛项归属:电子与信息大类 二…

虹科示波器 | 汽车免拆检测 | 2017款路虎发现车行驶中发动机抖动且加速无力

一、故障现象 一辆2017款路虎发现车,搭载3.0L发动机,累计行驶里程约为3.8万km。车主反映,车辆在行驶过程中突然出现发动机抖动且加速无力的现象,于是请求拖车救援。 二、故障诊断 拖车到店后首先试车,发动机怠速轻微抖…

汇编与反汇编

程序处理的4个步骤 我们的第一个LED程序涉及两个文件:start.S、main.c,它们的处理过程如下: 对于汇编程序,经过汇编之后,转换成目标文件(里面包含机器码)。对于C程序,经过预处理之…

(二)正点原子I.MX6ULL u-boot移植

一、概述 这里使用的是NXP官方2022.04发布的uboot,移植到正点原子阿尔法开发板(v2.1) u-boot下载:gitgithub.com:nxp-imx/uboot-imx.git 移植是基于NXP的mx6ull_14x14_evk 二、编译NXP官方uboot 进入NXP的u-boot目录 先在Makefile…

【算法专题】双指针—三数之和

力扣题目链接:三数之和 一、题目解析 二、算法原理 解法一:排序暴力枚举利用set去重 代码就不写了,你们可以试着写一下 解法二:排序双指针 这题和上一篇文章的两数字和方法类似 排序固定一个数a在这个数的后面区间&#xff0…