椭圆曲线
ECC
# Elliptic Curve Crtptography 椭圆曲线密码体制
base
椭圆曲线
加法定义
其上的3个点位于一条直线上,那么他们的和为 \(O\) (无穷远点)
加法定则
1️⃣\(O\) 为加法单位元 \(P+O = P\)
2️⃣加法逆元 $ -P = (x , -y)$
3️⃣加法 \(Q+R+P=O\), Q,R,P 位于一条直线上,则\(Q+R = -P\) 即\(P\) 的逆元
4️⃣倍数 过Q点做一切线,与ECC交于S点,则\(2Q = -S\)
有限域上的椭圆曲线
\(y^2=x^3+ax+b\ (a,b\in GF(p), 4a^3+27b^2 \ !=0)\)
记作\(E_p(a,b)\)
\(E_p(a,b)\)上点的产生方式
- 计算\(t\ = \ x^3+ax+b\ (mod\ p)\)
- t在模p下有平方根,则存在该点,否则,不存在
加法定则
点数
椭圆曲线上的点数
\(1+p+\epsilon \ \ \ (|\epsilon|\leq2\sqrt{p})\)
明文消息到椭圆曲线上的嵌入
k是一个整数,实际中,k可在30~50取值
\(x={mk+j,j=0,1,2...k-1}\)
更换 \(j\) 直到存在平方根,k次找到的概率不小于 \(1-2^{-k}\)
\(m = int(x/k)\)
ECC上离散对数问题
\(Q=kP\)
已知k,P 求Q 易得,由Q,P求 k 是困难的
Diffie-Hellman 密钥交换
公开参数
- \(E_p(a,b)\)
- \(G(x,y)\) 生成元,G的阶(n)是一个非常大的整数
过程
1️⃣A选择一个小于n的整数\(n_A\)作为秘钥, 计算公开钥 \(P_A=n_AG\)
2️⃣B选择一个小于n的整数\(n_B\)作为秘钥, 计算公开钥 \(P_B=n_BG\)
3️⃣A,B分别通过 \(K=n_AP_B=n_BP_A\) 计算双方共享的密钥
ElGamal 密码体制
公开参数
- \(E_p(a,b)\)
- \(G(x,y)\)
过程
1️⃣A选择一个小于n的整数\(n_A\)作为秘钥, 计算公开钥 \(P_A=n_AG\)
2️⃣B随机选取正整数k \(C_m={kG,P_m+kP_A}\) 记作\((C_1,C_2)\)
3️⃣A解密 \(P_m=C_2-n_AC_1\)