ECC浅析和在ctf中的应用
字数 991 2025-08-06 23:10:27
ECC浅析及其在CTF中的应用
1. 椭圆曲线密码学(ECC)概述
英文全称: Elliptic Curve Cryptography
主要优势:
- 较短的密钥长度可提供与RSA相当的安全性
- 一般认为160位ECC密钥强度相当于1024位RSA密钥
- 优势:加解密速度快、节省能源、带宽和存储空间
- 应用实例:比特币(256位ECC)、中国二代身份证(256位ECC)
2. ECC数学基础
2.1 椭圆曲线定义
标准椭圆曲线方程:
y² = x³ + ax + b
其中a、b满足:
4a³ + 27b² ≠ 0
(避免奇点/不可导点)
2.2 椭圆曲线离散对数问题(ECDLP)
核心安全基础:
Q = kP
- Q和P是椭圆曲线上的点
- k是一个大整数(私钥)
- 已知k和P求Q容易
- 已知Q和P求k困难(ECDLP)
3. ECC加解密流程
3.1 密钥生成
- 选择椭圆曲线Ep(a,b)和基点P
- 选择大数k作为私钥
- 计算公钥Q = kP
3.2 加密过程
- 选择随机数r
- 生成密文C = (rP, M + rQ)
3.3 解密过程
M + rQ - k(rP) = M + rkP - krP = M
4. 有限域上的椭圆曲线
4.1 有限域概念
- 域:支持加减乘除运算的集合
- 有限域:元素个数有限的域
- 阶:有限域中元素的个数,必须是质数的幂(pⁿ)
4.2 椭圆曲线在有限域上的表示
- 对计算结果模p(p为素数)
- 满足交换律、结合律、分配律
- 记作GF(pⁿ)
5. 椭圆曲线点运算
5.1 点加法(A+B)
给定A(x₁,y₁)和B(x₂,y₂),计算C(x₃,y₃) = A + B:
λ = (y₂ - y₁)/(x₂ - x₁) mod p
x₃ = λ² - x₁ - x₂ mod p
y₃ = λ(x₁ - x₃) - y₁ mod p
5.2 点倍乘(2A)
给定A(x₁,y₁),计算2A:
λ = (3x₁² + a)/(2y₁) mod p
x₃ = λ² - 2x₁ mod p
y₃ = λ(x₁ - x₃) - y₁ mod p
6. CTF中的ECC-RSA混合题目分析
6.1 题目背景
- 使用P521曲线生成RSA的素数p和q
- p和q是椭圆曲线上的点Q的x和y坐标
- Q = sG,其中s是私钥
6.2 解题思路
-
建立方程:
- 已知Q在椭圆曲线上:y² ≡ x³ + ax + b mod p
- 题目中p和q是Q的x和y坐标
- 因此有:q² ≡ p³ + ap + b mod P
-
结合RSA的n=pq:
q = √(p³ + ap + b) n = p√(p³ + ap + b) n² = p²(p³ + ap + b) p⁵ + ap³ + bp² - n² ≡ 0 mod P -
使用Sage求解:
a = -0x3
b = 0x51953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f00
n = 0x118aaa1add80bdd0a1788b375e6b04426c50bb3f9cae0b173b382e3723fc858ce7932fb499cd92f5f675d4a2b05d2c575fc685f6cf08a490d6c6a8a6741e8be4572adfcba233da791ccc0aee033677b72788d57004a776909f6d699a0164af514728431b5aed704b289719f09d591f5c1f9d2ed36a58448a9d57567bd232702e9b28f
P = 0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
PR.<x> = PolynomialRing(Zmod(P))
f = x^5 + a*x^3 + b*x^2 - n^2
roots = f.roots()
print(roots)
- RSA解密:
import gmpy2
from Crypto.Util.number import *
n = 0x118aaa1add80bdd0a1788b375e6b04426c50bb3f9cae0b173b382e3723fc858ce7932fb499cd92f5f675d4a2b05d2c575fc685f6cf08a490d6c6a8a6741e8be4572adfcba233da791ccc0aee033677b72788d57004a776909f6d699a0164af514728431b5aed704b289719f09d591f5c1f9d2ed36a58448a9d57567bd232702e9b28f
p = 4573744216059593260686660411936793507327994800883645562370166075007970317346237399760397301505506131100113886281839847419425482918932436139080837246914736557
q = n//p
e = 65537
c = 0x3862c872480bdd067c0c68cfee4527a063166620c97cca4c99baff6eb0cf5d42421b8f8d8300df5f8c7663adb5d21b47c8cb4ca5aab892006d7d44a1c5b5f5242d88c6e325064adf9b969c7dfc52a034495fe67b5424e1678ca4332d59225855b7a9cb42db2b1db95a90ab6834395397e305078c5baff78c4b7252d7966365afed9e
d = gmpy2.invert(e,(p-1)*(q-1))
print(long_to_bytes(pow(c,d,n)))
7. 关键点总结
- ECC安全性基于椭圆曲线离散对数问题(ECDLP)
- 有限域上的椭圆曲线运算是ECC的基础
- 点加法和点倍乘是ECC的核心运算
- CTF中常结合ECC和RSA,需灵活运用代数关系
- Sage是解决ECC问题的强大工具
- 理解曲线参数(a,b,P,G)之间的关系至关重要