1

我试图观察/实现离散对数问题,但我注意到了一些事情;但在我开始之前,让我做一些澄清,可以更正。

a = b^x 模 P

然而

a = 地址的公钥;

b = secp256k1 koblitz 曲线的生成点(这是上下文中的曲线);

x = 离散对数;

P = 模整数。

我耦合了以下所有参数:

A = 044f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1 (uncompressed public key)
034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa : (compressed public key)

B = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10(未压缩发生器点)

02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798(压缩发生器点)

X = ?

P = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F

我实际上不知道我应该使用哪一部分参数(压缩或未压缩)

N. B:我尝试了 Mod P 的未压缩公钥,但未压缩公钥的大小超过了 Mod P。

我该怎么办?

4

1 回答 1

2

a = b^x mod P 其中为

a = 地址的公钥;

b = secp256k1 koblitz 曲线的生成点(这是上下文中的曲线);

x = 离散对数;

P = 模整数。

我们给出了一个离散对数问题(DLOG)(也称为指数演算);那是给定的a, b,P找到x这样a = b^x mod P的。以上实际上是 OP 使用的有限域 DLOG 的乘法符号。ECC DLOG 是相加的,具有不同的表示法:

  • 即给定点A和基数,B找到x保持A = [x]B在曲线 E(F P ) 上的点。[x]B只是意味着将点Bx 次添加到自身。

压缩

开始字节提供有关压缩的信息。

  • 02压缩和选择y
  • 03压缩和选择-y
  • 04无压缩

要找到y,将x放入曲线方程并通过 Tonelli-Shanks 算法求解二次残差。


在你的情况下,两者都给出,没问题。使用未压缩的公钥。

secp256k1 的当前记录是 114 位,由 Aleksander Zieniewic 于 2020 年 6 月 16 日提供,他们提供了他们的软件。所以,如果你没有低目标,你就不能打破离散日志。

我尝试了 Mod P 的未压缩公钥,但未压缩公钥的大小超过了 Mod P。

Q当使用仿射坐标系时,椭圆曲线中的一个点具有两个坐标,作为定义字段的Q=(x,y)位置x,y(在您的情况下为 P)。当检查点 Q 是否在曲线上或未放入曲线方程x并检查相等性时。yy^2 = x^3+ax+b

要解压缩,将 的值x插入等式x^3+ax+b mod P以得到让说值,然后使用 Tonelli-Shanks 算法在该等式中a找到 的平方根以找到和。根据压缩值选择或。ay^2 = a mod Py-yy-y

每条评论更新

我尝试使用压缩的公钥,但它仍然比 mod p 大。

压缩一个点需要关于什么是压缩的信息。现在您已经给出了两种形式的公钥a

  1. 无压缩:从一开始就是04
  2. 压缩但选择-ysince 开始03

在这里使用大写字母不要与 hex 混淆a

A = 04
4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1
A = 03
4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa

您可以使用曲线方程推导出第二部分-y

您可以将坐标值与

p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
a = 0x4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
if a>p:
    print("a")

或用你的眼睛和头脑;

P   = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
x(A)= 4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
y(A)= 385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1
于 2021-02-07T19:04:11.463 回答