Appearance
ECC
数学基础
椭圆曲线
形如的曲线被称为椭圆曲线,其中。
常见曲线参数:
secp256k1:
P-256(FIST):
SM2:
BN128(zk-snark):
:::tips 一些特殊曲线
Baby Jubjub Elliptic Curve(扭曲爱德华曲线方程):
- 对于运算 ,运算如下:
点加法
对于椭圆曲线上的两个不同点 和 ,其和 计算如下:
斜率计算:
新点坐标:
数学推导
直线方程:通过 和 的直线:
其中
求交点:将直线方程代入椭圆曲线 :
展开得:
整理为三次方程:
根的关系:设三个根为 ,由韦达定理:
因此:
y坐标计算:将 代入直线方程得到交点,然后取其关于x轴的对称点:
倍乘运算
当 时(),进行点倍乘操作:
斜率计算:
新点坐标:
数学推导同上
标量乘法
标量乘法 是计算点 自身相加 次的结果。通常使用二进制展开法(类似于快速幂)来高效计算:
输入:点 P,标量 k
输出:k·P
1. 初始化 Q = O (无穷远点)
2. 将 k 表示为二进制
3. 从最低位开始:
- 如果当前位为1,则 Q = Q + P
- P = 2P (点倍乘)
- 移到下一位
4. 返回 Q
ECDH(密钥交换)
密钥生成
私钥生成
私钥 是一个随机整数,满足:
公钥生成
公钥 通过标量乘法计算:
密钥交换
Alice 和 Bob 通过以下步骤交换密钥:
- Alice 生成私钥 和公钥 ,将 发送给 Bob。
- Bob 生成私钥 和公钥 ,将 发送给 Alice。
- Alice 接收到 后,计算共享密钥:
- Bob 接收到 后,计算共享密钥:
- 最终得到相同共享密钥 。
ECIES(公钥加密)
密钥生成
私钥生成
私钥 是一个随机整数,满足:
公钥生成
公钥 通过标量乘法计算:
加密过程
给定消息 和公钥 ,ECIES加密过程如下:
- 生成随机数 ,满足 。
- 计算点 。
- 计算公钥 。
- 生成对称密钥 ,其中 是哈希函数。
- 加密消息 。
- 输出密文 。
- 发送密文 给接收方。
解密过程
给定密文 和私钥 ,ECIES解密过程如下:
- 计算共享密钥 。
- 生成对称密钥 。
- 解密消息 。
- 输出明文 。
ECDSA(签名)
域参数
- :有限域的大小
- :椭圆曲线参数
- :基点(生成元)
- :基点的阶(即 )
密钥生成
私钥生成
私钥 是一个随机整数,满足:
公钥生成
公钥 通过标量乘法计算:
其中 是椭圆曲线的基点。
签名生成
给定消息的哈希值 和私钥 ,ECDSA签名过程如下:
步骤1:生成随机数
生成一个随机数 ,满足:
!!!: 是一次性的随机数,必须保证每次签名都不同,且不能被泄露。
步骤2:计算点
计算椭圆曲线点:
步骤3:计算 r
r = x_1 \bmod n!!!:取点 的 坐标模 ,作为签名的第一部分。如果 ,则重新选择 。
步骤4:计算 s
s = k^{-1}(h + r \cdot d) \bmod n!!!:
- 是 在模 下的乘法逆元
- 将消息哈希与私钥信息结合
- 整个表达式确保了签名与私钥和消息的绑定关系
如果 ,则重新选择 。
步骤5:输出签名
签名为 。
签名验证
给定消息哈希 、签名 和公钥 ,验证过程如下:
步骤1:参数验证
验证 和 在有效范围内:
步骤2:计算逆元
计算 的乘法逆元:
w = s^{-1} \bmod n步骤3:计算标量
u_1 = h \cdot w \bmod n u_2 = r \cdot w \bmod n步骤4:计算验证点
步骤5:验证结果
如果 {x_1}^{'} \bmod n = r,则签名有效;否则无效。
数学原理
从签名生成有:
s = k^{-1}(h + r \cdot d) \bmod n重排得到:
k = s^{-1}(h + r \cdot d) \bmod n \quad (\alpha)在验证过程中:
替换 和 :
由于 :
根据签名生成中(式)的关系:
这证明了验证点 的 坐标确实等于 ,从而验证了签名的有效性。