ECC-ElGamal

EC(Elliptic Curve)椭圆曲线

三种椭圆曲线
一般资料会以维尔斯特拉斯曲线(Weierstrass Curve)为例介绍椭圆曲线的基本概念和运算原理,这是因为任意椭圆曲线都可以写为维尔斯特拉斯曲线形式。实际上,椭圆曲线还包括多种其他的类型,如蒙哥马利曲线(Montgomery Curve)、扭曲爱德华曲线(Twisted Edwards Curve)等。Curve25519就是在蒙哥马利曲线上定义的椭圆曲线,而Ed25519是在扭曲爱德华曲线上定义的椭圆曲线。

1.维尔斯特拉斯曲线
椭圆曲线的一般形式可表示为:

E:y2=x3+Ax+B

其中A,BFp4A3+27B20。一般称上式为维尔斯特拉斯形式的椭圆曲线方程。

2.蒙哥马利曲线
蒙哥马利形式的椭圆曲线方程定义为:

Kt2=s3+Js2+s
其中K,JFpK(J24)0

3.扭曲爱德华曲线
扭曲爱德华形式的椭圆曲线方程定义为:

av2+w2=1+dv2w2
其中a,d0ad

椭圆曲线间的转换
维尔斯特拉斯曲线、蒙哥马利曲线、扭曲爱德华曲线这三类椭圆曲线之间可以相互转换。
蒙哥马利曲线 ⇔ 维尔斯特拉斯曲线
任何椭圆曲线都可以写为维尔斯特拉斯形式。反之,当满足特定条件时,维尔斯特拉斯椭圆曲线可以转换为蒙哥马利椭圆曲线。具体转换条件参见《Montgomery Curve》的Equivalence with Weierstrass curves部分。
蒙哥马利曲线Kt2=s3+Js2+s转换为等价维尔斯特拉斯曲线y2=x3+Ax+B的方法为:

{A=3J23K2B=2J39J27K3

蒙哥马利曲线点(s,t)转换为等价维尔斯特拉斯曲线点(x,y)的方法为:

{x=3s+J3Ky=tK

反之,维尔斯特拉斯曲线点(x,y)转换为等价蒙哥马利曲线点(s,t)的方法为:

{s=3KxJ3t=yK

蒙哥马利曲线 ⇔ 维尔斯特拉斯曲线
所有扭曲爱德华曲线都与蒙哥马利曲线双向有理等价(Birationally Equivalent),反之亦然。所谓双向有理等价,可以理解为除了个别点外,扭曲爱德华曲线的点和蒙哥马利曲线的点存在相互映射关系。
扭曲爱德华曲线av2+w2=1+dv2w2转换为等价蒙哥马利曲线Kt2=s3+Js2+s的方法为:

{J=2(a+d)adK=4ad

扭曲爱德华曲线点(v,w)转换为等价蒙哥马利曲线点(s,t)的方法为:

{s=1+w1wt=sv

蒙哥马利曲线点(s,t)转换为扭曲爱德华曲线点(v,w)的方法为:

{v=stw=s1s+1

t=0s=1时,映射方法为(v,w)=(0,1)

椭圆曲线上的运算
1.有限域的负元
P(x,y)的负元是(x,y(modp))=(x,py)
2.有限域的加法
P(x1,y1)Q(x2,y2)R(x3,y3)三点(其中R是直线PQ与曲线交点关于x轴的对称点,即有R=P+Q),有如下关系:

{x3k2x1x2 (mod p)y3k(x1x3)y1 (mod p)

3.斜率计算

k={3x12+a2y1P=Qy2y1x2x1PQ

ECC-ElGamal公钥加密算法

  1. p>3是一个大素数,E是有限域Fp上的椭圆曲线,GE是椭圆曲线上的一个点,并且G的阶足够大。pE以及G都公开。
  2. 随机选取整数x1xord(G)1,其中ord(G)表示以基点G在曲线E上生成群的阶。计算Y=xGY是公开的加密密钥(公钥),x是保密的解密密钥(私钥)。
  3. 加密变换:明文消息映射到椭圆曲线上的点M=(m1,m2),随机选取一个整数k,满足1kord(G)1,密文为C=(c1,c2),其中c1=kGc2=M+kY
  4. 解密变换:对任意密文C=(c1,c2),明文为M=c2xc1

证明:
根据加密变换有c1=kGc2=M+kY=M+kxG,故c2xc1=M+kxGxkG=M
证毕。

例:
p=11E是由y2x3+x+6(mod11)所确定的有限域F11上的椭圆曲线,基点G=(2,7)。选定的私钥为x=7,明文映射到曲线的点M=(10,9)
因选择的私钥为x=7,那么对应公钥为

Y=7G=(7,2)

计算过程示例:
首先计算2G2G=G+G

k322+127 (mod 11)13141 (mod 11)24 (mod 11)8
x8222 (mod 11)60 (mod 11)5
y8(25)7 (mod 11)31 (mod 11)2

所以2G=(5,2)
然后计算3G3G=2G+G

k2752 (mod 11)531 (mod 11)64 (mod 11)2
x2252 (mod 11)3 (mod 11)8
y2(58)2 (mod 11)8 (mod 11)3

所以3G=(8,3)
类似计算可得4G=(10,2)6G=(7,9)7G=(7,2)8G=(3,5)14G=(2,7)。可以注意到有14G=G13G=0,所以对于基点G=(2,7)ord(G)=13。由此计算公钥Y

Y=7G=(7,2)

假设随机选取k=3,有

c1=kG=3G=(8,3)
c2=M+kY=M+kxG=(10,9)+21(2,7)=(10,2)

因此,明文M=(10,9)对应的密文为C=(c1,c2)=((8,3),(10,2))
对于解密过程而言,已知私钥x=3,收到密文C=(c1,c2)=((8,3),(10,2)),于是明文恢复过程为

M=c2xc1=(10,2)3(8,3)=(10,9)

至此,ECC-ElGamal公钥加密算法加解密过程完毕。





参考
ISO/IEC 18033-2:2006 Information technology – Security techniques – Encryption algorithms – Part 2: Asymmetric ciphers
RFC 7748 Elliptic Curves for Security
曹天杰. 密码学引论[M].
Ed25519与Curve25519:概念与相互转换 - 知乎 (zhihu.com)
椭圆曲线加密算法(ECC) - 知乎 (zhihu.com)
辅因子(cofactor)解释:揭开椭圆曲线不为人知的秘密 - 知乎 (zhihu.com)
信息论与编码:有限域 - gxzzz - 博客园 (cnblogs.com)

posted @   Miro'  阅读(255)  评论(2)    收藏  举报
相关博文:
阅读排行:
· C#实现语音预处理:降噪、静音检测、自动增益(附Demo源码)
· 记一次 .NET 某无语的电商采集系统 CPU爆高分析
· Java团队Cursor最佳实践:3分钟构建「零泄漏」AI开发环境
· 从“看懂世界”到“改造世界”:AI发展的四个阶段你了解了吗?
· dotnetty 新的篇章- 开源
点击右上角即可分享
微信分享提示