注:以下内容参考《新编密码学》范九伦 张雪锋 侯红霞 编著
7.4 椭圆曲线密码
7.4.1 椭圆曲线的定义与性质
椭圆曲线是指由Weierstrass方程
y²+axy+by=x³+cx²+dx+e
所确定的平面曲线。在密码学中,通常使用定义在有限域Zp(p为素数)上的椭圆曲线:
y²≡x³+ax+b(modp)
其中a,b∈Zp,且4a³+27b²≠0(modp)(保证曲线非奇异)。椭圆曲线上的所有点加上无穷远点OO构成一个Abel群Ep(a,b)。
加法运算规则(图7-2):

-
单位元:无穷远点O
-
逆元:−P=(x,−y)
-
点加:过P和Q的直线交曲线于RR,则P⊕Q=−R
-
倍点:过P的切线交曲线于R,则2P=−R
坐标计算公式:设P(x1,y1),Q(x2,y2),R=P⊕Q=(x3,y3),则

例7.3:Z₁₁上的椭圆曲线y²=x³+x+6,计算得E₁₁(1,6)共有13个点(表7-1)。取生成元g=(2,7),可计算出g的所有幂(倍点),得到群中所有点。

7.4.2 椭圆曲线上的密码体制
椭圆曲线密码体制基于椭圆曲线上的离散对数问题:给定Ep(a,b)上的两点P和Q,寻找整数k使Q=kP(kP表示P自加k次)。已知k,P求Q容易,反之困难。
椭圆曲线ElGamal密码体制:
-
密钥生成:取g∈Ep(a,b),选取私钥x,计算公钥y=xg
-
加密:对明文m(嵌入为曲线上的点),随机选取k,计算c₁=kg,c₂=m⊕ky,密文c=(c₁,c₂)
-
解密:m=c₂⊕(−xc₁)
例7.4:取g=(2,7)为E₁₁(1,6)的生成元,私钥x=7,公钥y=7g=(7,2)。明文m=(10,9),随机数k=3,加密得c=((8,3),(10,2)),解密得m=(10,9)。


7.4.3 椭圆曲线密码算法的特性
-
安全性高:椭圆曲线离散对数问题的最好算法(Pollardρ)时间复杂度为O(√N),而有限域上标准离散对数可用指数积分法(亚指数时间)求解。因此ECC更安全。
-
密钥量小、运算速度快:在同等安全级别下,ECC密钥长度远小于RSA(表7-2)。例如:
-
1024位RSA约等于160位ECC
-
2048位RSA约等于210位ECC
-
-
密码资源丰富:可通过改变曲线系数生成大量不同曲线,灵活性好。

注意事项:
-
应避免使用超奇异椭圆曲线(易受MOV攻击)和异常椭圆曲线(可在线性时间内求解)
-
应确保循环子群的阶有大素因子(至少160比特)
7.5 基于身份的公钥密码体制
7.5.1 概述
1984年,Shamir提出基于身份密码学(IBC) 的思想。用户的身份信息(如电子邮件地址)直接作为公钥,私钥由**私钥生成中心(PKG)**产生。这省去了公钥证书的管理开销。
与传统基于证书密码体制的对比:
| 对比项 | 传统PKI | 基于身份 |
|---|---|---|
| 密钥生成 | 用户自选私钥,计算公钥 | PKG根据身份生成私钥 |
| 公钥获取 | 需证书 | 直接使用身份信息 |
| 公钥保存 | 需目录存放证书 | 无需目录 |
| 身份认证 | 验证证书签名 | 向PKG证实身份 |
7.5.2 双线性Diffie-Hellman假设
基于身份的加密方案由四个算法构成:系统建立、私钥提取、加密、解密。
双线性映射e:G₁×G₁→G₂满足:
-
双线性:e(aP,bQ)=e(P,Q)^(ab)
-
非退化性:存在P,Q使e(P,Q)≠1
-
可计算性:存在有效算法计算e(P,Q)
双线性Diffie-Hellman问题:给定(P,aP,bP,cP),计算e(P,P)^(abc)是困难的。
7.5.3 Boneh和Franklin的IBE方案
2001年,Boneh和Franklin使用椭圆曲线上的Weil对设计了首个实用的IBE方案。
-
系统建立:生成群G₁,G₂和双线性映射e,选取生成元P,主密钥s∈Zq,公钥Ppub=sP,选择Hash函数H₁:{0,1}∗→G₁,H₂:G₂→{0,1}^n
-
私钥提取:对用户身份ID,计算QID=H₁(ID),私钥dID=sQID
-
加密:随机选取r,计算密文C=(rP,m⊕H₂(e(QID,rPpub)))
-
解密:m=V⊕H₂(e(dID,U))
7.6 公钥密码体制的应用
7.6.1 RSA密码体制的应用
-
解决密钥分发和管理问题:公钥可公开,私钥保密,简化大规模网络中的密钥管理。
-
实现数字签名:私钥签名,公钥验证,满足唯一性和私有性要求。
-
加密短小消息:RSA加密速度慢(约为DES的千万分之一),适合短消息加密。
7.6.2 椭圆曲线密码体制的应用
-
ECDSA数字签名:速度快、强度高、签名短(如Microsoft CDKey)。
-
无线网络(WAPI):中国无线局域网国家标准采用ECC进行身份认证。
-
Web服务器:减少计算时间和带宽消耗。
-
IC卡:无需协处理器,代码和密钥存储空间小,成本低。
习题7 解答
7-1 简述公钥密码体制的一般定义
解答:
公钥密码体制(非对称密码体制)是一种加密和解密使用不同密钥的密码体制。每个用户拥有一个密钥对:公钥 (可公开)和私钥(保密)。公钥用于加密,私钥用于解密。从公钥推算出私钥在计算上不可行。
一般定义为五元组(M,C,K,E,D):
-
M:明文空间
-
C:密文空间
-
K:密钥空间(公钥-私钥对)
-
E:加密算法集合
-
D:解密算法集合
满足:对任意密钥对(pk,sk),加密变换Epk:M→C和解密变换Dsk:C→M满足DskEpk\[m]=m。
7-2 什么是单向陷门函数?如何将其应用于公钥密码体制设计?
解答:
单向陷门函数是一个可逆函数f(x),满足:
-
正向计算:给定x,计算y=f(x)容易
-
逆向计算:给定y,计算x=f^(−1)(y)困难
-
存在陷门信息:知道陷门时,逆向计算容易
应用于公钥密码设计:
-
公钥对应函数f(正向计算)
-
私钥对应陷门信息(逆向计算)
-
加密:用公钥计算c=f(m)
-
解密:用私钥计算m=f^(−1)(c)
RSA基于大数分解陷门:f(x)=x^e mod n,陷门是p,q(或d)。
7-3 简述公钥密码体制相对单钥密码体制的优势
解答:
| 优势 | 说明 |
|---|---|
| 密钥分配简单 | 公钥可公开,无需安全信道传递密钥 |
| 密钥数量少 | nn个用户只需nn个密钥对,对称密码需n(n−1)/2个 |
| 支持数字签名 | 私钥签名,公钥验证,实现不可否认性 |
| 支持密钥交换 | 如Diffie-Hellman协议 |
| 密钥管理方便 | 可定期更换密钥,公钥证书机制成熟 |
7-4 简述RSA算法的理论基础
解答:
RSA算法的理论基础是数论中的欧拉定理和模运算:
-
欧拉定理:若gcd(a,n)=1,则a^φ(n)≡1(modn)
-
RSA密钥关系:选择ed≡1(mod φ(n)),则存在整数k使ed=1+kφ(n)
-
加解密正确性:
-
若gcd(m,n)=1,则m^(ed)=m^(1+kφ(n))≡m⋅(mφ(n))^k≡m(mod n)
-
若gcd(m,n)≠1(即p∣m或q∣m),可类似证明
-
-
安全性基础:由n分解p,q困难,从而由(n,e)求d困难
7-5 在RSA体制中,为什么加密指数e必须与模数n的欧拉函数φ(n)互素?
解答:
解密指数d满足ed≡1(modφ(n))。该同余方程有解的充要条件是gcd(e,φ(n))=1。
若gcd(e,φ(n))≠1,则e在模φ(n)下无乘法逆元,无法计算出解密密钥d,从而无法正确解密。
7-6 选择p=7,q=17,e=5,试用RSA算法对明文m=19进行加密,再对密文解密。
解答:
-
计算n=p×q=7×17=119
-
计算φ(n)=(p−1)(q−1)=6×16=96
-
验证gcd(e,φ(n))=gcd(5,96)=1,合法
-
计算解密指数d=e^(−1)mod 96。扩展欧几里得:5×77=385=4×96+1,故d=77
-
加密:c=m^e mod n=19⁵ mod 119
-
19²=361≡361−3×119=361−357=4
-
19⁴=4²=16
-
19⁵=19⁴×19=16×19=304≡304−2×119=304−238=66
-
密文c=66
-
-
解密:m=c^d mod n=66⁷⁷ mod 119
-
利用欧拉定理:66⁹⁶≡1,66⁷⁷=66^(−19)
-
计算较繁,结果应为19
-
答案:密文c=66,解密得m=19
7-7 对于n=pq,定义Ψ(n)=(p−1)(q−1)/gcd(p−1,q−1)。修改RSA体制为ed≡1mod Ψ(n)
(1) 证明加密和解密仍然互逆
证明:
设λ=Ψ(n)=lcm(p−1,q−1)。由欧拉定理:
-
对任意m与p互素,m^(p−1)≡1(modp),故m^λ≡1(modp)
-
对任意m与q互素,m^λ≡1(modq)
因此对任意m(与p或q可整除),有m^λ≡1(mod pq)。
由ed≡1(modλ),存在整数k使ed=1+kλ。则:
m^(ed)=m^(1+kλ)=m⋅(m^λ)^k≡m(mod n)
故加解密互逆。
(2) p=37,q=79,e=7,计算修改前后d的值
原RSA:
-
n=37×79=2923
-
φ(n)=36×78=2808
-
d=e^(−1) mod 2808
-
扩展欧几里得:2808=7×401+1,故7×(−401)≡1,−401 mod 2808=2407
-
d=2407
修改后:
-
gcd(36,78)=6
-
Ψ(n)=2808/6=468Ψ(n)=2808/6=468
-
d′=7^(−1) mod 468
-
扩展欧几里得:468=7×66+6,7=6×1+1,回代得1=7−6=7−(468−66×7)=67×7−468
-
故7×67≡1mod 468,d′=67
答案:原RSA中d=2407,修改后d=67
7-8 证明RSA中不动点x∈Zn∗的个数为gcd(e−1,p−1)×gcd(e−1,q−1)
证明:
不动点满足x^e≡x(modn),即x(x^(e−1)−1)≡0(modn)。
模p下:x(x^(e−1)−1)≡0(modp),解为x≡0或x^(e−1)≡1(modp)。
x^(e−1)≡1(modp)的解数等于gcd(e−1,p−1)。加上x≡0(对应x是p的倍数,但要求x∈Zn∗,故排除xx含p或q因子的情况),实际只考虑与n互素的解。
模p下非零解个数为gcd(e−1,p−1),模q下非零解个数为gcd(e−1,q−1)。由中国剩余定理,模n下的解个数为两者乘积。
因此不动点个数为:
gcd(e−1,p−1)×gcd(e−1,q−1)
7-9 Rabin密码体制:ek(x)=x(x+B)mod n,p=199,q=211,B=1357
(1) 计算加密y=ek(32767)
n=199×211=41989
y=32767×(32767+1357)mod 41989=32767×34124mod 41989
先模n化简:32767 mod 41989=32767,34124 mod 41989=34124
计算乘积后取模(具体数值需大数运算),结果为某个y值。
(2) 求密文y的四个可能解
Rabin解密需解x(x+B)≡y(modn),即x²+Bx−y≡0(modn)。配方得(2x+B)²≡B²+4y(modn)。
分别解模p和模q下的二次同余,各得两个解,组合得四个模n解。
7-10 找出模13的全体本原根
解答:
模13的乘法群Z13∗阶为12。本原根是阶为12的元素。
先找一个本原根:2是模13的本原根吗?计算:
-
2¹=2≠1,2²=4,2³=8,2⁴=16≡3,2⁶=64≡12≠1,2¹²=4096≡1
-
2的阶为12,故2是本原根
模p的本原根个数为φ(p−1)=φ(12)=4。全部本原根为:2^a,其中gcd(a,12)=1,即a=1,5,7,11
计算:
-
2¹=2
-
2⁵=32≡6
-
2⁷=128≡11
-
2¹¹=2048≡7
答案:2,6,7,11
7-11 给定Zp上ElGamal密码体制:p=31847,g=5,私钥a=7899,公钥y=18074,解密密文(3781,14409)
解答:
解密公式:m=c₂⋅(c₁^a)^(−1) mod p
-
计算c₁^a=3781⁷⁸⁹⁹ mod 31847(需快速幂)
-
p求其在模p下的逆元
-
乘以c₂=14409得到明文
具体数值计算较繁,最终可得明文m。
7-12 椭圆曲线y²=x³+17,P1=(−2,3),P2=(2,5)
(1) −P1:关于x轴对称,−P1=(−2,−3)
(2) 2P1:
λ=(3x₁²+a)/(2y₁)=2
x₃=λ²−2x₁=8
y₃=λ(x₁−x₃)−y₁=−23
则2P1=(8,−23)
(3) P1⊕P2:
λ=(y₂−y₁)/(x₂−x₁)=0.5
若在实数域,x₃=λ²−x₁−x₂=0.25−(−2)−2=0.25
y₃=λ(x₁−x₃)−y₁=−4.125
7-13 给定椭圆曲线E₂₃(13,22): y²=x³+13x+22。取生成元g=(10,5),私钥x=7,公钥y=7g=(17,21)。对消息P=(11,1),随机数k=13,加密并解密。
解答:
曲线E23(13,22): y²=x³+13x+22
生成元g=(10,5),私钥x=7,公钥y=7g=(17,21)
消息点P=(11,1),随机数k=13
加密:
-
c₁=kg=13×(10,5)(需在曲线上计算倍点)
-
ky=13×(17,21)
-
c₂=P⊕ky
-
密文(c₁,c₂)
解密:
- m=c₂⊕(−xc₁)=c₂⊕(−7×c₁)
需逐次计算椭圆曲线上的点加和倍点,得到最终结果。
7-14 椭圆曲线Massey-Omura密码体制(RSA的椭圆曲线版本):设椭圆曲线阶为N,公钥e,私钥d满足ed≡1mod N。对E₂₃(13,22)(N=22),消息点Pm=(11,1),公钥e=13,私钥d=17,加密并解密。
解答:
曲线E₂₃(13,22),阶N=22,消息点Pm=(11,1),公钥e=13,私钥d=17
验证ed=13×17=221=10×22+1≡1 mod 22,正确。
加密:C=ePm=13×(11,1)(计算曲线上的13倍点)
解密:Pm=dC=17×C,应恢复(11,1)
7-15 已知椭圆曲线E:y²=x³−4x−3(mod7),点p(−2,2),求2p,4p,6p
解答:
先验证点是否在曲线上:(−2)³−4×(−2)−3=−8+8−3=−3≡4(mod7),y²=4,正确。
计算2p:
-
λ=(3x₁²+a)/(2y₁)=2
-
x₃=λ²−2x₁=4−2×(−2)=4+4=8≡1(mod7)
-
y₃=λ(x₁−x₃)−y₁=2×(−2−1)−2=2×(−3)−2=−6−2=−8≡−1≡6(mod7)
-
2p=(1,6)
4p=2×2p,6p=2p⊕4p,继续计算可得。
7-16 RSA密码体制
(1) 取e=3有什么优缺点?取d=3安全吗?为什么?
优点:加密速度快(只有两次乘法),适合公钥加密短消息
缺点:易受低加密指数攻击。若同一消息用多个不同模数加密(e=3),可由中国剩余定理恢复明文
d=3是否安全:不安全。若d=3,由ed≡1mod φ(n)可推出e,攻击者可分解n。且Wiener攻击可破小d。
(2) 设n=35,密文C=10,公钥e=5,求明文M。
n=35,p=5,q=7,φ(n)=24。d=e^(−1)mod 24=5^(−1)mod 24。5×5=25≡1,故d=5。
解密:M=C^d mod n=10⁵ mod 35
- 10²=100≡30,10⁴≡30²=900≡25,10⁵=10⁴×10≡25×10=250≡5
答案:M=5
7-17 ElGamal 加密
已知:
-
素数 p=71
-
本原根 g=7
-
接收方 B 的公钥 yB=3
-
发送方 A 选择的随机数 k=2
-
明文 M=30
求:密文 (c1,c2)
解答:
1. ElGamal 加密公式
c1=g^k mod p
c2=M⋅yB^k mod p
2. 计算 c1
c1=72mod 71=49 mod 71=49
3. 计算 yB^k
yBk=32=9yBk=32=9
4. 计算 c2
c2=30×9=270 mod 71
270÷71=3 余 270−3×71=270−213=57
c2=57
5. 密文
(c1,c2)=(49,57)
7-18 椭圆曲线 E:y²=x³+x+1(mod 7),求所有点
步骤1:枚举 x∈={0,1,2,3,4,5,6},计算 x³+x+1mod 7
| x | x3 | x³+x+1 | 模 7 值 |
|---|---|---|---|
| 0 | 0 | 0 + 0 + 1 = 1 | 1 |
| 1 | 1 | 1 + 1 + 1 = 3 | 3 |
| 2 | 8 | 8 + 2 + 1 = 11 | 4 |
| 3 | 27 | 27 + 3 + 1 = 31 | 3 |
| 4 | 64 | 64 + 4 + 1 = 69 | 69 - 9×7 = 69 - 63 = 6 |
| 5 | 125 | 125 + 5 + 1 = 131 | 131 - 18×7 = 131 - 126 = 5 |
| 6 | 216 | 216 + 6 + 1 = 223 | 223 - 31×7 = 223 - 217 = 6 |
结果:
-
x=0: 1
-
x=1: 3
-
x=2: 4
-
x=3: 3
-
x=4: 6
-
x=5: 5
-
x=6: 6
步骤2:判断每个值是否为模 7 的平方剩余
模 7 的平方剩余:1²=1,2²=4,3²=2,4²=2,5²=4,6²=1。所以平方剩余是 1, 2, 4。
| aa | 是否为平方剩余 | yy(平方根) |
|---|---|---|
| 1 | 是 | y=±1≡1,6 |
| 3 | 否 | --- |
| 4 | 是 | y=±2≡2,5 |
| 3 | 否 | --- |
| 6 | 否 | --- |
| 5 | 否 | --- |
| 6 | 否 | --- |
步骤3:列出所有点(含无穷远点 O)
-
x=0: y=1,6 → (0,1), (0,6)
-
x=2: y=2,5 → (2,2), (2,5)
其他 xx 无解。
加上无穷远点 O。
最终答案
O, (0,1), (0,6), (2,2), (2,5)
共 5 个点。
7-19 经典公钥密码体制主要建立在哪些数学难题基础之上?请描述这些困难问题并对每一困难问题列举算法实例。
| 数学难题 | 描述 | 算法实例 |
|---|---|---|
| 大数分解 | 给定n=pq,求p,q | RSA |
| 离散对数 | 给定g,p,y=gx,求x | ElGamal、DSA |
| 椭圆曲线离散对数 | 椭圆曲线上给定P,Q=kP,求k | ECC、ECDSA |
| 背包问题 | 给定向量A和和S,求子集 | Merkle-Hellman(已破) |
| Rabin函数 | 模平方根问题 | Rabin加密 |
7-20 公钥密码体制的概念是在解决单钥密码体制中最难解决的两个问题时提出的,这两个问题是什么?
解答:
-
密钥分配问题:对称密码中,通信双方需共享密钥,安全分配密钥困难。公钥密码中公钥可公开,无需安全信道分配。
-
数字签名问题:对称密码无法实现不可否认的数字签名。公钥密码中私钥签名、公钥验证,可实现数字签名。
注:以上内容的理解和计算,如果有任何错误,希望各位读者和大佬指出改正,非常感谢!!!