Cryptography 公钥超过Mod P?关于离散对数问题的澄清要求

Cryptography 公钥超过Mod P?关于离散对数问题的澄清要求,cryptography,compression,public-key-encryption,secp256k1,Cryptography,Compression,Public Key Encryption,Secp256k1,我试图观察/实现离散对数问题,但我注意到了一些问题;但在我开始之前,让我澄清一下,这是可以纠正的 a=b^x模p 何处为 a=地址的公钥 b=secp256k1 koblitz曲线的生成点(这是 上下文中的曲线) x=离散对数 p=模整数 我耦合了以下所有参数: A= 044F355BDCB7CC0AF728EF3CCEB9615D90684BB5B2CA5F859AB0F0B704075871AA385B6B1B8EAD809CA67454D9683FCF2BA03456D6FE2C4ABE2

我试图观察/实现离散对数问题,但我注意到了一些问题;但在我开始之前,让我澄清一下,这是可以纠正的

a=b^x模p

何处为

a=地址的公钥

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

x=离散对数

p=模整数

我耦合了以下所有参数:

A= 044F355BDCB7CC0AF728EF3CCEB9615D90684BB5B2CA5F859AB0F0B704075871AA385B6B1B8EAD809CA67454D9683FCF2BA03456D6FE2C4ABE2B07F0FBB2F1C1 (未压缩公钥)
034f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa: (压缩公钥)

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

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

X=

p=FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE FFF C2F

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

注意:我尝试将未压缩的公钥转换为Mod p,但未压缩的公钥的大小超过了Mod p

我该怎么办

a=b^x模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(FP)上
    [x]B
    仅表示将点
    B
    x倍添加到自身
压缩

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

  • 02
    compression并选择
    y
  • 03
    压缩并选择
    -y
  • 04
    无压缩
要找到
y
,将
x
放入曲线方程中,并使用Tonelli-Shanks算法求解二次剩余


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

Aleksander Zieniewic于2020年6月16日提供的secp256k1当前记录为114位。因此,如果没有一个较低的目标,就无法打破离散日志

我尝试将未压缩公钥转换为Mod p,但未压缩公钥的大小超过了Mod p

椭圆曲线中的一个点
Q
当使用仿射坐标系时,它有两个坐标,即定义字段中的
Q=(x,y)
,其中
x,y
。检查点Q是否在曲线上时,将
x
y
放入曲线方程
y^2=x^3+ax+b
,并检查是否相等

要解压缩,请将
x
的值插入方程
x^3+ax+b mod p
中,以获得假设值
a
,然后使用Tonelli-Shanks算法在该方程
y^2=a mod p
中找到
y
-y
。根据压缩值选择
y
-y

按评论更新

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

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

A = 04
4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1
  • 无压缩:因为开头是
    04
  • 压缩,但选择
    -y
    ,因为从
    03
  • 在这里使用大写字母不要与十六进制
    a
    混淆

    A = 04
    4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
    385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1
    
    您可以使用曲线方程,通过选择的
    -y

    您可以将坐标值与

    p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
    a = 0x4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
    if a>p:
        print("a")
    
    或者用你的眼睛和头脑

    P   = FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
    x(A)= 4f355bdcb7cc0af728ef3cceb9615d90684bb5b2ca5f859ab0f0b704075871aa
    y(A)= 385b6b1b8ead809ca67454d9683fcf2ba03456d6fe2c4abe2b07f0fbdbb2f1c1
    

    我还在这个问题上。我尝试使用压缩公钥,但它仍然比mod p大。我想这是因为当A作为一个点被生成时,它是这样的:A=G^x。没有一个mod p可以掉入有限域。但是我们能做些什么呢?为什么它应该比
    P
    更大呢。EC点是成对的
    (x,y)
    ,因此
    x
    y
    在Zp中,它们必须满足曲线方程。我知道,对吗?这是指向曲线参数的链接。这里,我的A比P本身大。未压缩和压缩分别为:044F355BDCB7CC0AF728EF3CCEB9615D90684BB5B2CA5F859AB0F0B704075871AA385B6B1B8EAD809CA67454D9683FCF2BA03456D6FE2C4ABE2B07F0FBDBF1C1 034F355BDCB7CC0AF728EF3CCEB9615D90684BB5B2CA5B59AB0F0B704075871ADONE。下一步是什么?哇,我没看到。现在天气很晴朗。谢谢