区块广播:
16
已解决

悬赏10金币请大神帮解答下,为什么会有不同私钥对应相同地址的情况?

玛_雅版主发布在 问答/互助
 9424  25
在开发建立Z应用 时,发现了个的奇怪现象。到现在想了很多天了还没有理解弄懂。请大神指导。

举例私钥:
5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAnchuDf
5Km2kuu7vtFDPpxywn4u3NLpbr5jKpTB3jsuDU2KYEqetyuszSh
均对应地址:1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm


5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAvUcVfH
5Km2kuu7vtFDPpxywn4u3NLpbr5jKpTB3jsuDU2KYEqeuAG7sU9
均对应地址:1LagHJk2FyCV2VzrNHVqg3gYG4TSYwDV4m


5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreB1FQ8BZ
5Km2kuu7vtFDPpxywn4u3NLpbr5jKpTB3jsuDU2KYEqeuGro6xM
均对应地址:1NZUP3JAc9JkmbvmoTv7nVgZGtyJjirKV1

大家可以到脑钱包N应用验证。确实是可以有少量的两私钥对应同一地址的情况。

请大神解答下产生的原因。以及这种现象是否普遍,是否有规律?谢谢。


最佳答案
周琪船员
2015-07-21 19:32:26
这是椭圆曲线的特性,在原点g经过了0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 次同点相加后会回到原点g。这个值是数学家们计算得到的并且是由原点g决定的。
  • 正序
  • 最新
只看帖主楼层直达
  • 周琪 船员 2015-07-21 19:32:26 来自PC沙发
    这是椭圆曲线的特性,在原点g经过了0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 次同点相加后会回到原点g。

    这个值是数学家们计算得到的并且是由原点g决定的。
  • jb9802 副船长 2015-07-21 21:02:31 来自PC板凳
    理论上私钥碰撞是一定存在的,不过出现的概率应该是非常非常低的,楼住一下找到这么多碰撞好牛逼呀。
  • bling 副船长 2015-07-21 21:14:45 来自PC地板
    地址是私钥经过变换再丢弃一部分信息得到的,所以一个地址对应很多私钥
  • hash 船员 2015-07-21 21:51:30 来自PC5楼
    比特币私匙和公匙都有2^256个,而比特币地址却只有2^160个,这是由于在从公匙计算地址时用的是摘要算法,会损失大量信息,所以同一个地址会有很多个公匙以及私匙对应,这在理论上杜绝了由比特币地址逆推出私匙的可能
    下面两张图分别展示了从比特币私匙计算公匙,再由公匙计算地址的过程

    Fig...4-4.png67.60KB下载:0次

    Fig 4-4.png

    Fig...4-5.png82.57KB下载:0次

    Fig 4-5.png
  • 莱比特矿池 版主 2015-07-22 01:27:32 来自PC6楼
    1、从私钥(公钥)生成地址使用了哈希运算(具体过程参见楼上hash的回答)。

    2、哈希算法将任意长度的二进制值(输入)映射为固定长度的二进制值(输出),
    比如输入是一篇文章,输出是统计字数的后三位,这就是一种哈希运算。
    哈希算法是一种信息有损的,不可逆运算,
    比如你无法通过一篇文章的字数的后三位来倒推一篇文章的具体内容。

    4、由于哈希算法的不同输出数量是有限的(比如上面例子的输出是000~999共1000种),
    而输入是无限种的,故肯定存在不同的输入,其输出是相同的,
    这种现象称为哈希算法的碰撞,

    优秀的哈希算法会使用较大的输出长度来减少碰撞概率,
    同时使用优秀的算法让攻击者无法人为主动构造出碰撞。

    5、不过碰撞是无法避免的,
    比如比特币私钥和私钥都有2^256个(长度是256二进制位),
    而比特币地址却只有2^160个(长度是160位二进制),
    故一个比特币地址平均对应1^96个私钥和私钥,这是正常现象,你只是随机找到了其中几个。
  • 比特丝 副船长 2015-07-22 09:55:00 来自PC7楼
    马住,长姿势了。以后可以在小白面前装逼的时候用。
  • miner 海盗王 2015-07-22 10:04:27 来自PC8楼
    莱比特矿池 发表于 2015-7-22 01:27 1、从私钥(公钥)生成地址使用了哈希运算(具体过程参见楼上hash的回答)。
    2、哈希算法将任意长度的二 ...
    优秀回复,20金币奖励!
    楼层直达
  • bitcoin_ 水手 2015-07-22 10:09:24 来自PC9楼
    不懂,学习了。。
  • sumubaobei 船员 2015-07-22 10:49:57 来自PC10楼
    期待大神来解答,看看牛人是怎样的
  • bjnetbee 船员 2015-07-22 10:59:54 来自PC11楼
    5Km2kuu7vtFDPpxywn4u3NLpbr5jKpTB3jsuDU2KYEqeuAG7sU9
    这样的私钥,不在合法范围内,你试试bitcoin官方客户端导入私钥试试,
  • cxddd 副船长 2015-07-22 11:21:30 来自App12楼
    不懂啊,学习了
  • 玛_雅 版主 2015-07-22 12:13:32 来自PC13楼
    bjnetbee 发表于 2015-7-22 10:59 5Km2kuu7vtFDPpxywn4u3NLpbr5jKpTB3jsuDU2KYEqeuAG7sU9 这样的私钥,不在合法范围内,你试试bitcoin官方客 ...
    您是距离最终答案最接近的,楼上那几位答的很好,但是那些是我已经知道的。 请问,为什么不合法,为什么不能导入。其在脑钱包上是可以正常生成的。能正常签名的。 按道理说,应该是能合法的。
    楼层直达
  • 周琪 船员 2015-07-22 13:23:16 来自PC14楼
    虽然因为hash的原因,的确存在可能性2个私钥“恰巧”对应同一地址,但楼主说的这几组情况都不是这个原因。(哪有那么巧!)

    原因是因为椭圆曲线的有效值的范围是有限的,1 ~ 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141

    当值超过了0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 则对其取余。

    以楼主第一组为例实际是 1 和 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364142 所对应的地址,那么后一个取余后也是1。所以地址相同。

    没验后续的,应该是一个原因。
  • 玛_雅 版主 2015-07-22 14:14:35 来自PC15楼
    周琪 发表于 2015-7-22 13:23 虽然因为hash的原因,的确存在可能性2个私钥“恰巧”对应同一地址,但楼主说的这几组情况都不是这个原因。 ...
    这个现象就是我在主楼中说的在做Z应用http://idgui.com/Z时发现的奇怪现象。并命名为[循环区]。 问题的关键是,为什么0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141为上限?而不是全是fffffffff的为上限。我就是这个地方不太懂。
    楼层直达
  • chehw_1 副船长 2015-07-22 15:35:19 来自PC16楼
    周琪 发表于 2015-7-22 13:23 虽然因为hash的原因,的确存在可能性2个私钥“恰巧”对应同一地址,但楼主说的这几组情况都不是这个原因。 ...
    正解。
    后面的那两组用的是2和3。
    0 * G = 0 1 * G = G 2 * G = 2G ... (n-1) * G = (N-1)G n * G = 0 (n+1) * G = G (n+2) * G = 2G ...
    其中,n = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141
    有限域下的椭圆曲线点的标量乘法运算是一个循环组, n和G是提前算好的,(制定算法的那个人)先找出了一个尽可能大的质数n,然后找一个基点G,构成一个以n为序的循环组。
    如果两个数以n为模的结果相同,那么这两个数与G的乘积结果也相同。
    楼层直达
  • 1
  • 2
登录 账号发表你的看法,还没有账号?立即免费 注册