关于ECC-Elgamal同态加密

2023-11-16

关于ECC-Elgamal同态加密

1.什么是ECC(elliptic curve)

1.有限域

首先我们要知道椭圆曲线加密是在有限域进行加密的(对于无限域上的加密我没有了解过),在椭圆曲线  
加密上有限域分为:1.GF(p)素数域2.GF(2^m)伽罗华域。本次我们讨论素数域上的椭圆曲线加密。

2.模运算

由于我们要在有限域上进行加密,而椭圆曲线是连续的,并不适合加密,所以必须把椭圆曲线变成离散的点,
要把椭圆曲线定义在有限域上,这时我们就要用到模运算,把点映射到有限域上。

模运算:运算符(mod n)将所有整数映射到集合{0,1,...,(n-1)}中。性质有如下
(1)[(a mod n) + (b mod n)] mod n = (a+b)mod n
(2)[(a mod n) - (b mod n)] mod n = (a-b)mod n
(3)[(a mod n) * (b mod n)] mod n = (a*b)mod n
这个运算在很多非对称加密中都要用到,像RSA,paillier等都会涉及。关于他们的证明还请读者去寻找初等数论知识。
还有一个知识点也要补充一下--同余

同余:设m是正整数,a和b是整数。如果m|a-b(|是整除的意思),则称a模m同余于b,或a与b模m同余,记作a≡b(mod n). 
在数论中 同余关系是等价关系(我也不知道为什么,反正他们规定的) 但是要满足下列三个属性

(1)自反性:a≡a(mod n)
(2)传递性:a≡b(mod n),b≡c(mod n),a≡c(mod n)
(3)对称性:a≡b(mod n) => b≡a(mod n)

后续我们会经常用到同余,所以当对于一个椭圆曲线公式左右值求出来不相等的时候(肯定是你忘记mod n)了!
左右两边都记得! y^2(mod n) = x^3+a*x+b(mod n) ((mod n)不是单单对bmod的,是x值带入全部计算出来之后在取mod,
我第一次就犯错误了!)

3.椭圆曲线上的加法运算

avatar

首先椭圆曲线并不是椭圆,在上面进行加法是有特殊的法则的,我们讨论GF(p)上的加法运算
设p=23,a=b=1,考虑曲线方程y^2 = x^3+a*x+b(a,b代入)

(1)P+O=P (其中P是椭圆曲线上的点,O是无穷远点)
(2)若P=(X1,Y1),则P+(X1,-Y1)=O.点(X1,-Y1)是点P的逆元,记作-P.
(3)若P=(X1,Y1),Q=(X2,Y2),且P≠-Q则R=P+Q=(Xr,Yr)有下列规则确定:
	Xr = (λ^2-X1-X2)mod p
	Yr = (λ(Xr-X1)-Y1)mod p
其中:
	若P≠Q  λ=[(Y2-Y1)/(X2-X1)]mod p
	若P=Q  λ=[(3*X1^2+a)/2*Y1]mod p
(4)乘法定义为重复相加:4P=P+P+P+P.

2.非同态加密的椭圆曲线加密

1.公私钥生成:

 1.Alice首先构造一条椭圆曲线E,在曲线上选择一点G作为生成元,并求G的阶为n,要求n必须为质数。
 2.Alice选择一个私钥(d<n),生成公钥Q=d*G(多次调用椭圆曲线上的加法运算)
 3.Alice将公钥组Ep(a,b),Q,G发送给Bob

avatar

https://zhuanlan.zhihu.com/p/40243602 很不错的一篇文章来讲解阶和基点

2.明文嵌入

 1.Bob拿到Alice的公钥组后,对消息m进行加密(如果是字符串的话,可以把明文信息存入char[]数组,逐个转换成ASCII
 在明文嵌入椭圆曲线),这里为了方便我直接假设明文消息m是一个整数。
 2.计算嵌入点Pm的x坐标
	step 1. 设m满足(m+1)K<p (K为Bob选择的一个大整数),明文m将用数字x=mK+j表示,其中0<=j<=K,计算(x^3+a*x+b)mod p
	step 2.当p为大于3的素数(奇素数)时,用勒让德符号来判断A=x^3+a*x+b是否**二次剩余**,若A是模p的二次剩余,则存在A的模p平方根,x可以作为哦明文m的植入点坐标。
	step3.若A是模p的二次非剩余,则返回step1,将j+1,用新的x值再试一次,重复上面的步骤,直到找到一个x使得A是模p的二次剩余或j=K,如果j始终等于K,则不能把信息映射到一点。
 3.计算G(x,y)的y坐标
	当A=x^3+a*x+b是模p二次剩余,那我们就要求解y^2 ≡A(mod p),我采用的是Tonelli-shanks算法。(后续我会讲解这个算法的,目前还请读者自行补充知识),此时我们就得到一个椭圆曲线上的坐标Pm(x,y).

3.加密

 椭圆曲线的密文形式为C = {kG,Pm+kQ} (其中k为Bob选取的随机正整数,Pm为明文嵌入的点,Q为Alice的公钥)
	令C1 = kG (椭圆曲线的标量乘法:k次调用椭圆曲线加法)
	令C2 = Pm+kQ(同上)
	发送密文给Alice

4.解密

 Alice拿到密文C后,计算Pm = C2-C1*d;(我觉得这个加密要把x嵌入点时的,K与j传送过来,方便解码)
 然后取Pm的x坐标计算:m=(x-j)/K,得到明文信息。
 (我们假设有一个敌手,获取到了以上信息;但是由于Alice的密钥时不可知的,那么Pm=C2-C1*d也是一个难题)

对于上述的明文嵌入的ECC加密是不支持同态加密的,假设存在Pm1与Pm2点,密文的相加时,进行的时椭圆曲线域上的加法,不满足代数域上的逻辑,得不到m1+m2的结果!

3.同态加密的椭圆曲线加密(ECC-Elgamal)

对比上述的非同态加密ECC加密算法,两者的区别在于明文嵌入的方式。

1.同态加密明文嵌入

Pm = m*G(其中m为明文消息转换而成的大整数,G为椭圆曲线的基点),由于G点是椭圆曲线的生成元,所以进行标量乘法
之后的点依旧在椭圆曲线上

2.加密

此时我们加密的密文变成C= {kG,mG+kQ}(mG既是明文嵌入点),将密文传输给Alice

3.解密

Alcie拿到密文后,计算mG=m*G+k*Q-k*G*d,然后求解mg的离散对数问题。目前我接触到的算法是BSGS(Baby Step Giant Step),
可以将他的原理引用到椭圆曲线中。(如果有时间的话,我会在后续写一下,还请读者自行查找信息)。

提供一篇论文进行参考:
https://kns.cnki.net/kcms/detail/detail.aspx?dbcode=CJFD&dbname=CJFD2009&filename=XDJS200904057&uniplatform=NZKPT&v=pRDZYuOSvHSZmOOdRSfbOP6_cX5qXtTmoSDIMGFvKECAuhzEB6X9F_zKZOj2OCYA

4.同态加密

avatar
当我们对上述运算过的密文进行解密时,得到的消息就是m1+m2;

3.关于椭圆曲线的选择

T(p,a,b,G,n,h)这六个椭圆曲线的主要参数 其中n是G点的阶,h是T上所有点个数m与n相除的整数部分
 1.一般来说p越大越安全,但是越大速度也就会下降,一般选取200位左右
 2.P≠n*h
 3.p*t 不同余 1(mod n) 1<=t<=20
 4.4a^3+27b^2 不同余 0 mod p
 5.n为素数
 6.h<=4

4.总结

其实上述的功能我用C++,粗略实现了。但是代码写的太差了,还有很多未知的bug。有一句说的好–存在缺点的战士好过完美的苍蝇!还是要把自己所学的分享出来,你们以后就是密码学大佬!(如果有错误的地方还请大佬多多指正!我虚心求教!)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于ECC-Elgamal同态加密 的相关文章

随机推荐

  • umi项目中使用html-loader引入html文件报错`this.getOptions is not a function`

    背景 在umi项目中引用html文件 使用html loader解析html文件 dumi 1 1 0 html loader 3 1 0 环境信息 tiands tiandsdeMacBook Pro demo doc node v v1
  • div 一行显示

  • 防火墙规则-iptables四表五链

    文章目录 iptables 规则表规则链 四表五链 规则链内的匹配顺序 设置规则内容 列表查看规则 清除规则 自定义规则链 其他 设置匹配数据包的条件 通用条件匹配 协议匹配 地址匹配 接口匹配 显示条件匹配 数据包状态显示 接口匹配 显示
  • 代幣增發質押模式系統開發

    K means原理 K means 从字面看含有k和means两部分 K means算法会将样本量N特征数m的数据X 其中X是N m的矩阵 分到K个簇中 每个簇会有一个重心centroids 聚类效果的目标是通过计算簇中各个点到重心的距离平
  • 关闭cmd或其它win exe程序方法python

    import os def kill exe exe name os system taskkill f t im exe name MESMTPC exe程序名字 print 关闭进程 0 format exe name 例如 exe n
  • 一文搞懂MySQL索引(实现原理加优化实战,面试必问)

    前言 本篇文章从数据结构 B Tree的构建过程 MySQL索引实现 索引为什么那么快 MySQL有哪些索引 聚集索引和二级索引的区别 索引失效的原因 EXPLAIN关键字分析 索引实战 索引的优缺点 什么时候应该加索引 全方面帮助读者理解
  • Error in: PCL_DEPRECATED_HEADER(1, 15, “Please include pcl/common/io.h directly.“)

    error error expected constructor destructor or type conversion before token PCL DEPRECATED HEADER 1 15 Please include pc
  • 【Pip和Conda安装包的区别】

    Pip和Conda都是用于Python软件包管理的工具 但它们有以下区别 包管理器 Pip是Python的默认包管理器 而Conda是Anaconda发行版的包管理器 跨平台支持 Pip在各个平台上都可以使用 但是Conda特别适用于跨平台
  • VUE 出现登录界面但控制台报错FAILED TO LOAD RESOURCE: NET::ERR_CONNECTION_REFUSED

    首先 vue项目运行的端口号一般为8080 地址出现8080 1 2 说明8080端口被占用 导致vue项目在别的端口运行 但会与本地后台端口对应不上报如标题所示错误 解决方法 1 查看端口被哪个进程占用 输入命令 netstat ano
  • crm项目的搭建

    一 创建Maven项目 1 选择Maven下的 org jetbrains idea maven model Maven Archetype webapp 2 三板斧 坐标 GroupId com shsxt ArtifactId shsx
  • Fabric实战(13)Fabric链码调试(容器外)

    链码调试 本文章所有操作基于的操作系统版本是 ubuntu16 04 64位 本文章基于的Fabric网络环境是 Fabric实战 2 运行一个简单的fabric网络 容器外 1 开发环境链码调试 1 1 容器之外运行Chaincode 第
  • 开机出现start pxe over ipv4 /start pxe over ipv6无法进入系统?!

    我遇到的是戴尔电脑start pxe over ipv4 出现此类问题的原因 用户将win10系统装成win7后出现的 一般是由于在重装系统之前在BIOS中不小心设置错误所引起的 解决方法 方法一 1 首先进入bios 不同品牌按不同的热键
  • C# 通过 RabbitMQ 实现定时任务 (延时队列)

    环境准备 需要在MQ中进行安装插件 地址链接插件介绍地址 https www rabbitmq com blog 2015 04 16 scheduling messages with rabbitmq 使用场景 作为一个新的预支付订单被初
  • 部署SpringBoot项目到云服务器

    服务器选择以及项目背景 我购买的是阿里云ECS服务器 它的特点是可以给我们配置服务器较大的自由度 我选择的是Centos Linux操作系统 我这次是希望在服务器上部署一个SpringBoot后台项目 最后实现的效果是我可以在手机App上通
  • Vivado的一些tcl命令记录(待补充)

    1 Report Clock Networks report clock networks name network 1 2 分析设计中逻辑级数的分布 report design analysis logic level distribut
  • NLP(自然语言处理)是什么?

    NLP基本概念 自然语言处理 Natural Language Processing NLP 是以语言为对象 利用计算机技术来分析 理解和处理自然语言的一门学科 即把计算机作为语言研究的强大工具 在计算机的支持下对语言信息进行定量化的研究
  • simplest-jpa v1.2.0如何优雅实现多租户

    开始使用 simplest详细文档 simplest jpa 使用多租户需要 2 个步骤 在属性中配置对应租户表和列 配置 TenantFactory 注入租户数据源 TenantFactory 是用于生产租户 ID 的 或者说是用于获取当
  • idea 内存不足 low memory 彻底解决

    1 在IDE中 帮助 help gt 编辑自定义vm配置 idea64 exe vmoptions文件 修改 Xmx2048m Xms2048m 增加根据自己的系统内存 此时重启idea 仍然报内存不足 提示提高内存 通过idea log发
  • Loader Runner 课程笔记(一)录制设置和压测

    1 录制前设置 1 创建脚本 新建单协议脚本 选择Web协议 创建 LR11只支持WIN7系统 浏览器IE8 9和低版本的火狐 24 0或36 0 高版本IE可以卸载装IE8或9 不支持谷歌 LR自带火狐路径HP LoadRunner bi
  • 关于ECC-Elgamal同态加密

    关于ECC Elgamal同态加密 1 什么是ECC elliptic curve 1 有限域 首先我们要知道椭圆曲线加密是在有限域进行加密的 对于无限域上的加密我没有了解过 在椭圆曲线 加密上有限域分为 1 GF p 素数域2 GF 2