椭圆曲线密码学

椭圆曲线密码学

Elliptic-curve cryptography (ECC) is an approach to public-key cryptography based on the algebraic structure of elliptic curves over finite fields. ECC requires smaller keys compared to non-ECC cryptography (based on plain Galois fields) to provide equivalent security

参考文章

[TOC]

椭圆曲线

数学上,椭圆曲线为一代数曲线,形如

椭圆曲线

$$y^2 = x^3 + ax + b$$

并且该曲线无奇点(尖点或自相交),判别式$\Delta = -16(4a3+27b2)$不为0.

椭圆曲线群

在椭圆曲线中添加无穷远点O,由于曲线关于y轴对称,假设P为曲线上一点,则P关于y轴的对称点定义为-P。无穷远点的对称点为其自身,因此O = -O

定义+运算,假设P,Q,-R在曲线上,则P + Q = -R -> P + Q + R = O其中-R与P,Q共线。

椭圆曲线加法

定义数乘*

$$
nP = \underbrace{P + P + \cdots + P}_{n\ \text{times}}
$$

有限域椭圆曲线

$$y^2 = x^3 + ax+ b \bmod{p}$$

下图是曲线$y^2 = x^3 -7x+10\bmod{p}$,其中p为19,97,127,487时的点集。可看到点集关于y = p/2对称。

有限域

点与点加法

定义直线$ax+bx+c \equiv 0 \bmod{p}$,既等间距的直线族。

有限域直线

若点集中P,Q,-R三点在同一直线上,则P+Q+R = O

取模运算

  • $(18 +9)\ mod\ 23 =4 $
  • $(7 - 14)\ mod\ 23 =16 $
  • $(4 * 7)\ mod\ 23 =5 $
  • $(9^{-1})\ mod\ 23 =18 $

$(99^{-1})\ mod\ 23 = 1 = (918)mod\ 23$

代数方法

$P = (x_p,y_p)$

$Q = (x_q,y_q)$

$R = (x_r,y_r)$

$$P+Q = -R$$

公式

$$
x_r = (m^2-x_p-x_q) \bmod{p}
$$

$$
y_r = [y_p+m(x_r-x_p)]\bmod{p}
$$

若$P \neq Q $则$m = (y_p - y_q)(x_p-x_q)^{-1}\bmod{p}$

若$P = Q$则$m = (3x_p2+a)(2y_p){-1}\bmod{p}$

椭圆曲线群阶数

点集中点的数量称为椭圆曲线的阶数,有快速算法Schoof's algorithm

点的数乘

$$nP = \underbrace{P + P + \cdots + P}_{n\ \text{times}}$$

例如曲线$y^2 \equiv x^3 + 2x + 3 \bmod{97}$的点$P = (3,6)$

  • $0P = O = (\infty,\infty)$
  • $1P = P = (3,6)$
  • $2P = P + P = (80,10)$
  • $3P = 2P +P = (80,87)$
  • $4P = 2*2P = (3,91)$
  • $5P = O$
  • $6P = 5P +P = P$
  • $7P = 5P+2P = 2P$
  • $8P = 5P +3P =3P$
  • $9P = 5P + 4P = 4P$
  • ...

通过上边例子可以看出P与数乘,最终只有有限的循环出现的几个结果$kP = (k\bmod{5})P$,这五点在加法运算下封闭。这五点构成了循环子群,其中P称为generator or base point of the cyclic subgroup

Cyclic subgroups are the foundations of ECC and other cryptosystems.

子群阶数

定义

the order of is the smallest positive integer $n$ such that $nP = 0$. In fact, if you look at the previous example, our subgroup contained five points, and we had $5P = 0$.

性质

The order of $P$ is linked to the order of the elliptic curve by Lagrange's theorem, which states that the order of a subgroup is a divisor of the order of the parent group.

In other words, if an elliptic curve contains $N$ points and one of its subgroups contains $n$ points, then $n$ is a divisor of $N$, so $N\ mod\ n \equiv 0$

计算

  1. 用Schoof's algorithm计算椭圆曲线阶数$N$
  2. 找到所有$N$的因子
  3. 求每个$N$因子$n$与$P$乘积$nP$
  4. 最小的$n$就是子群的阶数

For example, the curve $y^2 = x^3-x+3$ over the field $F_{37}$ has order $N = 42$ . Its subgroups may have order 1,2,3,6,7,14,21 and 42 . If we try $P = (2,3)$ can see that $1P\neq0,2P\neq0,3P\neq0,6P\neq0,7P=0,$ so the order of is 7.

寻找基点

对于ECC算法,我们希望子群阶数足够高。所以通常我们选择一条椭圆曲线,计算其阶数,并选择一个较大的因子作为子群的阶数,最终找到一个基点。

在Lagrange's theorem中令$h =N/n$,称$h$为cofactor of the subgroup余因子

由于$nP = 0$所以$h(nP) = 0 = n(hP)$

现在考虑$n$是素数,令$G =hP$,则生成一个以$G$为基点的n阶子群

  1. 计算椭圆曲线阶数$N$
  2. 选择$N$的素因子$n$
  3. 计算cofactor $h = N/n$
  4. 随机在曲线上选择一个点$P$
  5. 计算$G = hP$
  6. 如果$G =0$,从第四步从新选择另外点$P$.至此我们找到了以$G$为基点的$n$阶子群

离散对数

现已知点PQ在椭圆曲线上,如何确定整数$k$使得$Q =kP$ ?这个问题被称为椭圆曲线的离散对数问题,这个问题被认为是一个困难的问题,目前还没有多项式时间解决方法。

在密码学中Digital Signature Algorithm (DSA), the Diffie-Hellman key exchange (D-H) and the ElGamal algorithm都与该问题有关。

What makes ECC interesting is that, as of today, the discrete logarithm problem for elliptic curves seems to be "harder" if compared to other similar problems used in cryptography.

ECC问题相比其它几个问题更难以解决。

ECDH&ECDSA

定义参数

Our elliptic curve algorithms will work in a cyclic subgroup of an elliptic curve over a finite field.

  • 素数$p$确定有限域
  • 参数$a,b$确定椭圆曲线
  • 基点$G$生成子群
  • 子群阶数$n$
  • 子群余因子$h$

得到算法六元组$(p,a,b,G,n,h)$

随机曲线

在前面提到离散对数问题非常困难,但也不是所有的都困难,有些类型的椭圆曲线就非常脆弱,有非常快速的方法解决,例如$p = hn$时就有多项式时间解决的方法。

怎样保证曲线是安全的呢?

为了解决这个问题,我们需要再附加一个参数seed$S$,这是一个随机数涌来生成参数a和b,或者基点G再或者所有的参数。这些参数通过hash函数生成,hash容易计算但是难以逆推。

ab生成
参数逆推

椭圆曲线的生成通过随机数生成,这使得曲线足够的随机。

椭圆曲线加密(ECC)

  • The private key is a random integer $d$ chosen from ${1,2\cdots n-1}$ (where $n$ is the order of the subgroup).
  • The public key is the point $H=dG$ (where $G$ is the base point of the subgroup).

如果我们知道$d$和$G$,计算$H$非常容易。但是如果我们仅知道$H$和$G$,计算$d$将非常困难,因为这是离散对数问题。

ECDH

ECDH是 Diffie-Hellman algorithm的一种变体,更像密钥交换协商而不是加密。应用场景:双方需要安全的交换信息,即使第三方拦截到也无法破译。这是TSL背后的一个原则。

  1. Alice and Bob generate their own private and public keys.对于Alice私钥$d_A$公钥$H_A = d_AG$,对于Bob私钥$d_B$公钥$H_B=d_BG$,Alice&Bob使用共同的参数:共同的基点,相同的曲线,相同的有限域。
  2. Alice and Bob exchange their public keys $H_A$ and $H_B$ over an insecure channel.即使中间者截获了公钥$H_A&H_B$,除非解决离散对数问题否则不能知道私钥$d_A&d_B$
  3. Alice calcuates $S = d_AH_B$,Bob calculates $S=d_BH_A$.注意到他们获得的$S$是相同的。

$$S=d_AH_B=d_A(d_BG)=d_B(d_AG)=d_BH_A$$

Playing with ECDH
- $p$=0xffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f
- $a$=0
- $b$=7
- $x_G$=0x79be667e f9dcbbac 55a06295 ce870b07 029bfcdb 2dce28d9 59f2815b 16f81798
- $y_G$=0x483ada77 26a3c465 5da4fbfc 0e1108a8 fd17b448 a6855419 9c47d08f fb10d4b8
- $n$=0xffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141
- $h$=1
Curve: secp256k1
Alice's private key: 0xe32868331fa8ef0138de0de85478346aec5e3912b6029ae71691c384237a3eeb
Alice's public key: (0x86b1aa5120f079594348c67647679e7ac4c365b2c01330db782b0ba611c1d677, 0x5f4376a23eed633657a90f385ba21068ed7e29859a7fab09e953cc5b3e89beba)
Bob's private key: 0xcef147652aa90162e1fff9cf07f2605ea05529ca215a04350a98ecc24aa34342
Bob's public key: (0x4034127647bb7fdab7f1526c7d10be8b28174e2bba35b06ffd8a26fc2c20134a, 0x9e773199edc1ea792b150270ea3317689286c9fe239dd5b9c5cfd9e81b4b632)
Shared secret: (0x3e2ffbc3aa8a2836c1689e55cd169ba638b58a3a18803fcf7de153525b28c3cd, 0x43ca148c92af58ebdb525542488a4fe6397809200fe8c61b41a105449507083)
ECDSA数字签名

Alice使用私钥$d_A$签名文件,Bob使用Alice的共钥$H_A$来确认。

ECDSA作用在消息的hash上,而不是直接作用在消息上。Hash函数可以选择密码学安全的。hash需要被截断为和子群阶数$n$所占bit一样的长度,例如前边n是256bit,那么hash也需要是256bit,截断后的hash定义为整数$z$

  1. 随机选择$k\in{1,2\cdots,n-1}$,n是子群阶数
  2. 计算点$P= kG$ ,G是子群基点
  3. 计算$r=x_p\bmod{n}$,其中$x_p$是P的x坐标
  4. 如果$r=0$重新选择k
  5. 计算$s=k^{-1}(z+rd_A)\bmod{n}$ 其中$d_A$是Alice的私钥
  6. 如果$s=0$重新选择k

$(r,s)$ 就是签名。

ECDSA

Alice对hash $z$ 使用私钥 $d_A$ 和随机数 $j$签名。Bob使用Alice的共钥 $H_A$验证。

验证签名,验证签名需要Alice的共钥 $H_A$ 截断的hash $z$,以及签名 $(r,s)$.

  1. 计算整数 $u_1=(s^{-1}z)\bmod{n}$
  2. 计算整数 $u_2=(s^{-1}r)\bmod{n}$
  3. 计算点 $P=u_1G+u_2H_A$

如果 $r=x_P\bmod{n}$则是合法的

证明

$$
\begin{array}{rl}
P & = u_1 G + u_2 H_A \
& = u_1 G + u_2 d_A G \
& = (u_1 + u_2 d_A) G
\end{array}
$$

再带入 $u_1,u_2$的定义
$$
\begin{array}{rl}
P & = (u_1 + u_2 d_A) G \
& = (s^{-1} z + s^{-1} r d_A) G \
& = s^{-1} (z + r d_A) G
\end{array}
$$
这里省略了$mod\ n$,因为在子群阶数为$n$,所以相当于自动对n取模。由$s = k^{-1} (z + rd_A) \bmod{n}$推出$k = s^{-1} (z + rd_A)\bmod{n}$.
$$
\begin{array}{rl}
P & = s^{-1} (z + r d_A) G \
& = k G
\end{array}
$$

这与签名算法第二步生成的是同一个点P,接下来验证是否满足生成算法第三步即可验证签名。

k的重要性

当使用ECDSA进行数字签名时,k要相当饱满。如果每次签名都使用相同的k,或者k是可预测的,那么就被找出私钥。This is the kind of mistake made by Sony a few years ago.,PS3只能运行Sony使用ECDSA签名过的程序,但问题是Sony使用了固定的k

这样可以轻松的找出Sony的私钥$d_S$,只要买两份签名的游戏,取出他们的hash ($z_1 z_2$),和两份签名$(r_1,s_1),(r_2,s_2)$,以及椭圆参数。

  1. $r_1=r_2$
  2. 根据签名步骤5,考虑 $(s_1-s_2)\bmod{n} = k^{-1}(z_1-z_2)\bmod{n}$
  3. 等式两边乘以$k$,得到$k(s_1-s_2)\bmod{n} = (z_1-z_2)\bmod{n}$
  4. 两边除以$(s_1-s_2)$得到$k=(z_1-z_2)(s_1-s_2)^{-1}\bmod{n}$

$$
s = k^{-1}(z+rd_S)\bmod{n}\Rightarrow d_S = r^{-1}(sk-z)\bmod{n}
$$

打破安全性

我们认为离散对数问题是非常困难的,但是并没有数学上的证明。目前解决离散对数问题由三种方法,假设$Q=xP$,求x

Baby-step,giant-step

随意假定$x=am+b$
$$
\begin{array}{rl}
Q & = xP \
Q & = (am + b) P \
Q & = am P + b P \
Q - am P & = b P
\end{array}
$$

  1. 计算$m=\lceil\sqrt{n}\rceil$
  2. 对于每个$b\in{0,1\cdots m}$计算$bP$
  3. 对于每个$a\in{0,1\cdots m}$
  4. 计算$amP$
  5. 计算$Q-amp$
  6. 检查是否存在$bP$使得$Q-amp = bP$
  7. 如果存在那么就找到了$x=am+b$

Baby-step实例

选择一条标准曲线prime192v1,$n$=0xffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831,$\sqrt{n} \approx 7.9\cdot10{28}$,每个点需要32Byte存储,大概总共需要$2.5\cdot10{30}$byte,这比全世界存储还多。而且prime192v1还是一个低阶曲线。

Shor Algorithm

使用量子算法可让复杂度降低$O((\log{n})^3)$

ECC and RSA

RSA key size (bits) ECC key size (bits)
1024 160
2048 224
3072 256
7680 384
15360 521

其它曲线

Koblitz curves over binary fields

$y2+xy=x3+ax^2+1$ a为0或1,拥有$2^m$点,其中m为素数

Binary curves

$x2+xy=x3+x^2+b$ b是随机生成的整数

Curve25519 和 Ed25519

这两条曲线计算较快。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,011评论 0 2
  • (开经偈) 无上甚深微妙法 百千万劫难遭遇 我今见闻得受持 愿解如来真实义 第一品 Fǎ huì yīn yóu ...
    黄一轩阅读 2,376评论 0 1
  • 记忆力如果不好,说话就会打磕巴,写出的文章就不滑溜,读者读下去就有种粗米糊剌嗓子的感觉。 金庸的小说为什么好读?就...
    走的更远阅读 248评论 0 0
  • 学生基础差,学习习惯不好,学习主动性不高。我们常常采取课后补救的方式,增加教学时长,增加训练强度。相信:醋坛泡久了...
    沐芝阳阅读 4,275评论 0 1
  • 下面有句评论:没有在等你,也没喜欢上别人。喜欢 刚才爸问我,毕业之后打算干嘛。 我挺想步入社会去闯荡,真切的感受一...
    苏子好阅读 249评论 0 0