如何解决公钥超过 Mod P?关于离散对数问题的澄清请求
我试图观察/实现离散对数问题,但我注意到了一些事情;但在我开始之前,让我做一些澄清,这是可以纠正的。
a = b^x mod P
在哪里
a = 地址的公钥;
b = secp256k1 koblitz 曲线的生成点(这是 上下文中的曲线);
x = 离散对数;
P = 模整数。
我耦合了以下所有参数:
A =
044f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa385b6b1b8ead809ca67454d9683fcf2ba03456d6f1bcbcf2f2fe1bcb7f2fe2
(未压缩的公钥)
034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa:
(压缩公钥)
B = 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8(未压缩生成点)
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。
我该怎么办?
解决方法
a = b^x mod P where as
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(FP) .[x]B
只是意味着将点B
x 次添加到自身。
压缩
起始字节提供有关压缩的信息。
-
02
压缩并选择y
-
03
压缩并选择-y
-
04
无压缩
要找到 y
,请将 x
代入曲线方程并通过 Tonelli-Shanks 算法求解二次残差。
在你的情况下,两者都给出了,没问题。使用未压缩的公钥。
secp256k1 的当前记录是 114 位,由 Aleksander Zieniewic 于 2020 年 6 月 16 日提供,他们提供了 their software。所以,如果你没有一个低目标,你就无法打破离散对数。
我尝试将未压缩的公钥发送到 Mod P,但未压缩的公钥大小超过了 Mod P。
椭圆曲线中的一个点 Q
当使用仿射坐标系时,它有两个坐标为 Q=(x,y)
其中 x,y
来自定义字段(在您的情况下为 P)。检查点 Q 在曲线上或不在曲线上时,将 x
和 y
放入曲线方程 y^2 = x^3+ax+b
中并检查相等性。
要解压缩,将x
的值插入方程x^3+ax+b mod P
得到假设值a
,然后使用Tonelli-Shanks算法求{{1}的平方根} 在这个等式 a
中找到 y^2 = a mod P
和 y
。根据压缩值选择-y
或y
。
每条评论更新
我尝试使用压缩的公钥,但它仍然比 mod p 大。
压缩一个点需要关于什么是压缩的信息。现在你已经给出了两种形式的公钥 -y
;
- 无压缩:因为开头是
a
- 压缩但选择
04
,因为从-y
开始
此处使用大写字母不要与十六进制 03
混淆;
a
A = 04
4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1
您可以使用曲线方程推导出带有所选 A = 03
4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
的第二部分
您可以将坐标值与
进行比较-y
或者用你的眼睛和头脑;
p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
a = 0x4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
if a>p:
print("a")
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。