根据“椭圆曲线密码学指南”(第182页),可以用无效的曲线攻击恢复d。
一旦恢复,如何使用此值?例如,对于椭圆曲线Diffie (例如在TLS中),我们可以使用d做什么?
发布于 2021-03-04 18:46:36
Weierstrass曲线点加法公式
考虑Weierstrass方程
y^2 = x^3 + a x + b
设P=(x_1,x_2)和Q=(x_2,y_2)是椭圆曲线上的两点。
P+O=O+P=Px_1 = x_2 ,y_1 = - y_2,Q =(x_2,y_2)=(x_1,−y_1)=−P,那么P + (-P) = OQ \neq -P,则可以用以下方法计算加法P+Q = (x_3,y_3)和坐标;\begin{align} x_3 = & \lambda^2 -x_1 - x_2 \mod p\\ y_3 = & \lambda(x_1-x_3) -y_1 \mod p \end{align}
\lambda = \begin{cases} \frac{y_2-y_1}{x_2-x_1}, & \text{if $P \neq Q$} \\[2ex] \frac{3 x_1^2+a}{2y_1}, & \text{if $P = Q$} \\[2ex] \end{cases}
Weierstrass曲线上的加法律不使用常数 \color{red}{b}。This是攻击的核心。
Invalid曲线攻击
假定所用曲线为Secp256k1,曲线方程为y^2 = x^3+7。
现在,利用加法公式不使用7的事实,攻击者A可以选择公钥(x_a,y_a),这样就可以在另一条曲线上使用小阶n。现在,您没有验证这个公钥,而是使用[a](x_a,y_a)作为KDF的输入来派生密钥。现在,攻击者可以尝试所有n可能值[i](x_a,y_a)、0 \leq i ,并验证您发送的加密消息的结果。
现在,您不知道任何事情,而且A没有停止,下一次在同一曲线上选择另一个点,以不同的小顺序,或者在另一个曲线上进行攻击。最后,将所有提取的信息与中国剩余定理(CRT)结合起来。
现在,攻击者访问了密钥,并使用它。
TLS
如果攻击者的公钥没有使用CA进行验证,并且假设是这样的,那么您就有了问题。
在TLS 1.3之前,EDHK不一定是短暂的(ECDHE).在这种情况下,它被称为静态。如果您使用静态,则攻击者可以提取您的密钥。记录下来的过去的通讯已不再安全。
由于您在任何DHKE期间使用[d]Q_b计算交换点,所以Q_b = [d_b]G是Bobs公钥,所以它们可以重新计算[d]Q_b。在此之后,我们可以解密所有记录的会话。
如果您使用TLS1.3(应该使用),那么您必须使用ECDHE。在短暂的情况下,私钥和公钥是动态生成的。他们受到签名的保护。在这种情况下,攻击者只能恢复不用于任何其他会话的当前私钥。
这是很好的做法,因为这是原DHKE文件所界定的前向保密。为了实现前向保密,必须删除旧密钥,这正是TLS所做的。
因此,在允许静态DHKE的TLS 1.3之前,它可能是危险的.
The对策
验证点CA验证点,然后通过信任链信任CA。在您的协议上使用压缩点,在解压缩过程中包含验证。使用EDHKEhttps://crypto.stackexchange.com/questions/88636
复制相似问题