Bitcoin Forum
June 19, 2024, 11:01:33 PM *
News: Voting for pizza day contest
 
   Home   Help Search Login Register More  
Pages: « 1 2 3 [4] 5 »  All
  Print  
Author Topic: Bitcoin 高質技術討論專區  (Read 8430 times)
This is a self-moderated topic. If you do not want to be moderated by the person who started this topic, create a new topic.
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
July 19, 2014, 08:20:09 AM
 #61

有人嘗試計算隨機碰撞Bitcoin地址的概率, 可惜其最重要的計算都是錯誤的
http://8btc.com/thread-6089-1-1.html
https://bitcointalk.org/index.php?topic=698601.0

計算Bitcoin地址, 需要多種運算, 首先是一次ECDSA, 然後是一次SHA256, 最後是一次RIPEMD160. 論計算量, SHA256和RIPEMD160差不多, 但ECDSA卻遠超這兩者. (檢查碼的運算並非必須, 所以不用考慮.)

為方便估計, 我們假設計算一個私鑰需要3倍SHA256的計算量 (這是一個極保守的假設)


计算bitcoin地址的描述不算太准确。

計算Bitcoin地址, 需要多種運算, 首先是生成一个256位的随机数,然后是一次ECC运算计算出公钥, 然后是一次HASH160(一次SHA256+RIPEMD160), 然后是一次HASH256(两次SHA256),最后还有一次Base58编码。

我测试了一下,(CPU 2.6GHz,单线程运算):
按挖矿模式(hash256并比对bits值),计算1000万个HASH256(block_header): 12秒; 计算出10万个地址及其私钥:94秒。

结论:計算一個私鑰对应的地址需要约800倍挖矿的計算量。

地址的校驗碼只是給人看的,可有可無,所以那個HASH256不用考慮

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
xfli
Hero Member
*****
Offline Offline

Activity: 854
Merit: 1000


走哪算哪


View Profile
July 19, 2014, 08:24:39 AM
 #62

按照公钥生成算法,在计算完 RIPEMD-160 哈希值后,有效位已经从256位减少到了160位,实际相当于有损压缩。
假如真有算力能支撑的话,只要顺序取前2^160个私钥进行运算,碰撞出公钥的概率也许会接近100%。
为什么一定要随机生成一个256位的私钥去碰撞呢?碰撞成功的概率会变大吗?
不知道我这么理解对不对?

当然实用地址生成不能这么做,这样别人就太容易循序找出私钥了。

jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
July 19, 2014, 08:31:30 AM
 #63

按照公钥生成算法,在计算完 RIPEMD-160 哈希值后,有效位已经从256位减少到了160位,实际相当于有损压缩。
假如真有算力能支撑的话,只要顺序取前2^160个私钥进行运算,碰撞出公钥的概率也许会接近100%。
为什么一定要随机生成一个256位的私钥去碰撞呢?碰撞成功的概率会变大吗?
不知道我这么理解对不对?

当然实用地址生成不能这么做,这样别人就太容易循序找出私钥了。

不對,因為私鈅和地址不是一一對應,一個地址可能有多個私鈅,而且是隨機的

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
chehw
Newbie
*
Offline Offline

Activity: 5
Merit: 0


View Profile
July 19, 2014, 10:55:30 AM
 #64

按照公钥生成算法,在计算完 RIPEMD-160 哈希值后,有效位已经从256位减少到了160位,实际相当于有损压缩。
假如真有算力能支撑的话,只要顺序取前2^160个私钥进行运算,碰撞出公钥的概率也许会接近100%。
为什么一定要随机生成一个256位的私钥去碰撞呢?碰撞成功的概率会变大吗?
不知道我这么理解对不对?

当然实用地址生成不能这么做,这样别人就太容易循序找出私钥了。

按顺序取是一种最不可行的方法。

RIPEMD160后,碰撞成功几率肯定大了很多。但即使这样,如果按顺序遍历,即使每秒可以運算10^23個私鑰(現有全网總算力的一百萬倍给你一个人用),遍历完也需要大约4.6 × 10^17(46亿亿)年。平均碰撞成功到某一地址大约需23亿亿年。
xfli
Hero Member
*****
Offline Offline

Activity: 854
Merit: 1000


走哪算哪


View Profile
July 19, 2014, 11:58:05 AM
Last edit: July 19, 2014, 12:40:58 PM by xfli
 #65

私钥对公钥不是顺序一一对应,那么就是说算完前2^160个私钥并不能找出所有公钥,因为里面可能会有很多组私钥只对应某些公钥,这我现在理解了。
但是顺序取用私钥和随机生成私钥去碰撞公钥有什么不同吗?概率还是一样的。
为什么这么做是一种最不可取的方法呢?能证明一下吗?
或者说你算一下用随机生成私钥的方法碰撞成功一个地址和循序遍历私钥的方法各会需要多少时间。

而且顺序计算不会发生随机生成私钥有可能把某些私钥重复生成计算的问题,虽说概率很小,但理论上确实会发生。而且随机生成私钥本身也需要代价,虽说代价很小。

chehw
Newbie
*
Offline Offline

Activity: 5
Merit: 0


View Profile
July 19, 2014, 01:38:39 PM
 #66

私钥对公钥不是顺序一一对应,那么就是说算完前2^160个私钥并不能找出所有公钥,因为里面可能会有很多组私钥只对应某些公钥,这我现在理解了。
但是顺序取用私钥和随机生成私钥去碰撞公钥有什么不同吗?概率还是一样的。
为什么这么做是一种最不可取的方法呢?能证明一下吗?
或者说你算一下用随机生成私钥的方法碰撞成功一个地址和循序遍历私钥的方法各会需要多少时间。

而且顺序计算不会发生随机生成私钥有可能把某些私钥重复生成计算的问题,虽说概率很小,但理论上确实会发生。而且随机生成私钥本身也需要代价,虽说代价很小。


顺序遍历是在没有任何其他更好的方法的情况下才采取的方法,只要有其他方法可以解决,就一定不会选择遍历,所以说这是最不可取的方法。

如果没有任何可行的方法,小样本空间下当然选择顺序取样,但如果样本空间大到一定程度,则随机取样更适合。
这是因为你不能假设你可以持续不断地连续取样,除非你能活的足够长(需要远远超过太阳系预计所能存活的时间)。

碰撞目标出现在2^159之后的概率至少有50%,如果顺序取样,那么,至少有50%可能性你算到银河系毁灭也100%碰撞不到。
随机取样就是为了避免出现这种情况而采取的手段。有得必有失,因为无法预估最终结果,所以就要承担一定的(可接受的范围)性能损失。
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
July 19, 2014, 01:48:15 PM
 #67

私钥对公钥不是顺序一一对应,那么就是说算完前2^160个私钥并不能找出所有公钥,因为里面可能会有很多组私钥只对应某些公钥,这我现在理解了。
但是顺序取用私钥和随机生成私钥去碰撞公钥有什么不同吗?概率还是一样的。
为什么这么做是一种最不可取的方法呢?能证明一下吗?
或者说你算一下用随机生成私钥的方法碰撞成功一个地址和循序遍历私钥的方法各会需要多少时间。

而且顺序计算不会发生随机生成私钥有可能把某些私钥重复生成计算的问题,虽说概率很小,但理论上确实会发生。而且随机生成私钥本身也需要代价,虽说代价很小。


顺序遍历是在没有任何其他更好的方法的情况下才采取的方法,只要有其他方法可以解决,就一定不会选择遍历,所以说这是最不可取的方法。

如果没有任何可行的方法,小样本空间下当然选择顺序取样,但如果样本空间大到一定程度,则随机取样更适合。
这是因为你不能假设你可以持续不断地连续取样,除非你能活的足够长(需要远远超过太阳系预计所能存活的时间)。

碰撞目标出现在2^159之后的概率至少有50%,如果顺序取样,那么,至少有50%可能性你算到银河系毁灭也100%碰撞不到。
随机取样就是为了避免出现这种情况而采取的手段。有得必有失,因为无法预估最终结果,所以就要承担一定的(可接受的范围)性能损失。


非常典型的概率謬誤, 就像賭徒以為彩票結果 "1,2,3,4,5,6" 比 "1,14,18,31,34,41" 更難出現, 其實兩者出現的概率完全一樣

無論是順序還是隨機嘗試, 成功的概率都是完全一樣.

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
chehw
Newbie
*
Offline Offline

Activity: 5
Merit: 0


View Profile
July 19, 2014, 02:11:01 PM
 #68

私钥对公钥不是顺序一一对应,那么就是说算完前2^160个私钥并不能找出所有公钥,因为里面可能会有很多组私钥只对应某些公钥,这我现在理解了。
但是顺序取用私钥和随机生成私钥去碰撞公钥有什么不同吗?概率还是一样的。
为什么这么做是一种最不可取的方法呢?能证明一下吗?
或者说你算一下用随机生成私钥的方法碰撞成功一个地址和循序遍历私钥的方法各会需要多少时间。

而且顺序计算不会发生随机生成私钥有可能把某些私钥重复生成计算的问题,虽说概率很小,但理论上确实会发生。而且随机生成私钥本身也需要代价,虽说代价很小。


顺序遍历是在没有任何其他更好的方法的情况下才采取的方法,只要有其他方法可以解决,就一定不会选择遍历,所以说这是最不可取的方法。

如果没有任何可行的方法,小样本空间下当然选择顺序取样,但如果样本空间大到一定程度,则随机取样更适合。
这是因为你不能假设你可以持续不断地连续取样,除非你能活的足够长(需要远远超过太阳系预计所能存活的时间)。

碰撞目标出现在2^159之后的概率至少有50%,如果顺序取样,那么,至少有50%可能性你算到银河系毁灭也100%碰撞不到。
随机取样就是为了避免出现这种情况而采取的手段。有得必有失,因为无法预估最终结果,所以就要承担一定的(可接受的范围)性能损失。


非常典型的概率謬誤, 就像賭徒以為彩票結果 "1,2,3,4,5,6" 比 "1,14,18,31,34,41" 更難出現, 其實兩者出現的概率完全一樣

無論是順序還是隨機嘗試, 成功的概率都是完全一樣.

单次取样的概率确实是一样的,但如果连续不断地取值,则随机取样有可能取出重复值(好的算法也只能是出现重复值的概率极低而已),因而效率略低于顺序取样。
采取随机取样是因为在有生之年以最大速度所能取到的样本数占总样本的比例仍几乎为0,随机取样能覆盖的的范围会更广一些,所以仍有概率(虽然趋近于0)能取到。而顺序取样一旦选错了初始点,则100%碰撞不到。
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
July 19, 2014, 03:01:13 PM
 #69

私钥对公钥不是顺序一一对应,那么就是说算完前2^160个私钥并不能找出所有公钥,因为里面可能会有很多组私钥只对应某些公钥,这我现在理解了。
但是顺序取用私钥和随机生成私钥去碰撞公钥有什么不同吗?概率还是一样的。
为什么这么做是一种最不可取的方法呢?能证明一下吗?
或者说你算一下用随机生成私钥的方法碰撞成功一个地址和循序遍历私钥的方法各会需要多少时间。

而且顺序计算不会发生随机生成私钥有可能把某些私钥重复生成计算的问题,虽说概率很小,但理论上确实会发生。而且随机生成私钥本身也需要代价,虽说代价很小。


顺序遍历是在没有任何其他更好的方法的情况下才采取的方法,只要有其他方法可以解决,就一定不会选择遍历,所以说这是最不可取的方法。

如果没有任何可行的方法,小样本空间下当然选择顺序取样,但如果样本空间大到一定程度,则随机取样更适合。
这是因为你不能假设你可以持续不断地连续取样,除非你能活的足够长(需要远远超过太阳系预计所能存活的时间)。

碰撞目标出现在2^159之后的概率至少有50%,如果顺序取样,那么,至少有50%可能性你算到银河系毁灭也100%碰撞不到。
随机取样就是为了避免出现这种情况而采取的手段。有得必有失,因为无法预估最终结果,所以就要承担一定的(可接受的范围)性能损失。


非常典型的概率謬誤, 就像賭徒以為彩票結果 "1,2,3,4,5,6" 比 "1,14,18,31,34,41" 更難出現, 其實兩者出現的概率完全一樣

無論是順序還是隨機嘗試, 成功的概率都是完全一樣.

单次取样的概率确实是一样的,但如果连续不断地取值,则随机取样有可能取出重复值(好的算法也只能是出现重复值的概率极低而已),因而效率略低于顺序取样。
采取随机取样是因为在有生之年以最大速度所能取到的样本数占总样本的比例仍几乎为0,随机取样能覆盖的的范围会更广一些,所以仍有概率(虽然趋近于0)能取到。而顺序取样一旦选错了初始点,则100%碰撞不到。

我已經講了一次, 這是很初級的概率謬誤. 順序取樣, 也有可能選到極好的初始點, 很快就碰撞成功. 因此很明顯, 無論是隨機取樣還是順序取樣, 所需計算量的期望值是完全一樣.

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
August 06, 2014, 05:15:40 PM
 #70

最近(又)有人提出量子電腦的問題

据斯诺登透露的文件,美国国家安全局正在一个耗资$79.7M的项目中努力研制量子计算机。
加拿大公司D-Wave声称成功制造出了小型量子计算机,一旦量子计算机出现,比特币将会怎样?

简单的说:
1,挖矿用的SHA256算法是安全的。量子计算机用于挖矿,挖矿难度大幅提高。
2,比特币用的椭圆曲线签名算法(ECDSA)会被破解。通过量子计算机计算,通过公钥可以找到私钥。
一旦你的地址付过款,公钥就公开,此地址的钱就可能被盗。对于使用多地址钱包,每个地址只使用用一次的用户,钱还是安全的。
3,比特币的签名算法将要升级。

一旦量子计算机出现,现在电子商务、网银广泛使用的RSA 签名算法也会被破解,如果你去问银行,“量子计算机出现后,我的网银安全吗?”,银行会说你杞人忧天,但由于椭圆曲线签名算法的破解对比特币影响更为直接,所以比特币社区对量子计算机更为关注。

虽说量子计算机还在科研阶段,D-Wave的量子设备是否能运算真正的量子运算还受学术界质疑,一旦比特币用于存储大额财富,安全至关重要。

量子计算机出现,比特币会面临挑战,但依旧会前行。

建议:大额比特币不要重复使用地址。

本人對這題目了解有限, 不過據本人的理解, 以上所述基本上正確

Bitcoin主要涉及兩大類的密碼技術: 雜湊(Hash), 主要是SHA256及RIPEMD160; 以及ECDSA公鑰系統. 要破解挖礦, 就只需要破解SHA256; 要破解地址, 則要同時破解RIPEMD160, SHA256, 及ECDSA

假如量子電腦(QC)真的成功, 利用Grover's algorithm, 就可以大大縮短碰撞雜湊的時間, 例如160 bit的RIPEMD160, 就會被弱化為只有80 bit的安全性. 然而即使是80 bit的安全性, 仍然是十分安全, 令我們有足夠時間過渡至更強的雜湊算法. 只要把長度倍增至320 bit, 就可擁有和現在的160 bit相同的安全性, 代價只是地址會比現在長一倍. 因此基本上, QC對挖礦的影響基本可以不考慮

QC帶來真正的問題, 是Shor's algorithm容許以極快速度破解ECDSA; 用傳統電腦上萬年也不能從公鑰算出私鑰, 用QC可能以小時甚至分鐘就可以完成 (確實時間我不肯定, 反正是快得不能接受). 雖然如此, 因為Bitcoin地址並非公鑰本身, 而是公鑰的雜湊, 因此只有地址, 就算用QC也是不可能算出私鑰, 所以只作收款, 從未付款的地址仍然是安全的. 曾經付款的地址, 由於付款過程必須公開公鑰, 便會變得不安全了.

如果你真的擔心QC的問題, 從今天開始就不要重覆使用地址. Bitcoin的設計, 本來就不是要重覆使用地址的.

如果QC真的可以以極高速 (秒級) 破解ECDSA, 則單次使用地址也會有問題, 因為在沒確認前就可以被偷了. 這有兩個方法: 中心化的, 由"可信"的礦工處理交易  (http://bitcoinmagazine.com/6021/bitcoin-is-not-quantum-safe-and-how-we-can-fix/), 及本人提出的去中心化的, 稱為Guy Fawkes簽名的方法 ( https://bitcointalk.org/index.php?topic=320634.0 ).

在ECDSA被破解後, 我們可改用一些QC也不能快速破解的公鑰系統, 例如基於雜湊技術的Lamport簽名. 我有時間會另文再述

(C) jl2012@bitcointalk 2014. CC BY-NC-SA 3.0  http://creativecommons.org/licenses/by-nc-sa/3.0/



https://bitcointalk.org/index.php?topic=320634.0

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
innocent93
Legendary
*
Offline Offline

Activity: 896
Merit: 1000



View Profile
August 06, 2014, 06:03:03 PM
 #71

精彩的解答,现在我想问:面对量子计算机,比特币系统能否通过升级协议来修复这个先天缺陷来避免危机?或者说这种手术如果进行就足以致命几乎等于重新建造了一种新币? 这个问题社区迟早要面对的,毕竟量子计算机已经可以期望了。
jsgayo
Sr. Member
****
Offline Offline

Activity: 476
Merit: 250


View Profile
August 18, 2014, 02:01:56 AM
 #72


規則:

7. 有關山寨幣的技術問題, 如非與Bitcoin直接有關, 可被刪除


社区最近的热门话题:比特儿NXT币被盗事件。
能否请楼主详细解释一下“rollback”(回滚)是怎么回事?比特币历史上发生过的回滚是什么情况?

btcgov
Member
**
Offline Offline

Activity: 84
Merit: 10


View Profile
August 18, 2014, 03:38:35 AM
 #73

Quote
社区最近的热门话题:比特儿NXT币被盗事件。
能否请楼主详细解释一下“rollback”(回滚)是怎么回事?比特币历史上发生过的回滚是什么情况?

rollback跟51%的攻击有没有关联呢?我觉得是类似的。Rollback是主动安排的,通知社区并重复同意的,当然也会造成影响;51%攻击是攻击行为,是不可见人的,会让整个社区受到损害。

所以近期BTC下跌,跟大家对此的担心有很大关系。
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
August 18, 2014, 03:42:12 AM
 #74


規則:

7. 有關山寨幣的技術問題, 如非與Bitcoin直接有關, 可被刪除


社区最近的热门话题:比特儿NXT币被盗事件。
能否请楼主详细解释一下“rollback”(回滚)是怎么回事?比特币历史上发生过的回滚是什么情况?

Bitcoin, 及所有由Bitcoin啓發的山寨幣, 本質都是一個單向性的產權記賬系統. 例如:

1. A擁有1個幣, 他轉移給B
2. 之後B又把這1個幣轉移給C
3. C把這1個幣分割為三份, 其中0.3個幣給D, 0.4個幣給E, 0.3個幣給自己
4. E把他的0.4個幣分割為兩份, 其中0.1個給D, 0.3個給自己
5. D現在共有0.3+0.1個幣, 他重新融合再分割, 0.05個給A, 0.35個給自己

單向性的意思, 就是後來的步驟, 都必須依賴所有之前的步驟. 如果例子中的第3步是無效的, 那麼就連第4, 5步都會有如從未發生一樣; 也就是說, 如果第3步是無效, 結果就是C擁有從第2步得來的1個幣, ADE一無所有.

一般來說, 有效的交易, 必須有正確的數碼簽署, 而且該交易輸入的幣在區塊鏈上有紀錄而且還沒有被花. 如果例子中的第3步的數碼簽署錯誤, 那麼E就不會在區塊鏈紀錄上擁有0.4個幣, 所以第4步也是無效, 也令第5步無效. 如果第2步已記在區塊鏈上, A就不再擁有任何幣, 他嘗試再花他的1個幣也不會成功.

BTER的情況, 是這樣的
a. 很多用戶通過不同地址把幣發給BTER
b. BTER把這些幣都放到同一地址NXT-LSC3-VB9T-2W3V-BH7FB
c. 黑客得到地址NXT-LSC3-VB9T-2W3V-BH7FB的密鑰, 把所有幣發到自己的地址NXT-8WJ7-8A2H-MBYN-3W9K4 (https://nxtblocks.info/#section/txid/5930851748280200080)

所有交易, 在技術上都是有效的, 當然亦已經記在區塊鏈上.

現在有些人說: "我討厭交易c, 我認為那是無效的交易". 請記著, 交易c是技術上有效的交易, 有些人討厭這個交易, 可能是為了道德原因, 也可能是為了私利 (自己有很多錢在BTER), 但一定不是技術原因.

他們既然認為交易c是無效的, 那麼他們也必定認為記載著交易c的區塊209886號 (https://nxtblocks.info/#section/blockId/11441067699374044604)是無效的, 因為有效的區塊內所有交易都必須有效. 如果他們認為209886號區塊是無效的, 那麼也必定認為這區塊以後的所有區塊是無效.

現在NXT開發者就提供了一個新版本, 宣佈交易c是無效的, 讓用戶自行決定是否跟隨. 跟隨這版本的, 就會認為區塊鏈在209885號就斷了, 那麼礦工就會在這之上另挖一個不含交易c的209886號區塊, 黑客在這個新的區塊鏈上是一無所有的. 如果支持新版本的礦工多於舊版本, 他們最終就會超越舊版本, 成為最長的區塊鏈, 那麼就連舊版本都會認為黑客是一無所有, 因為這個新區塊鏈在舊版本眼中都是有效的.

如果支持新版本的礦工少於舊版本, 舊版本就會繼續堅持承認黑客擁有NXT, 新版本就會堅持認為黑客不擁有NXT. 區塊鏈就會出現硬分叉, 會有兩種NXT同時流通. 視乎你用的是哪一版本, 就會看到不同的產權紀錄. 這時候唯一方法就是新版本用戶要投降, 放棄自己的分叉, 接受交易c是有效的.

(註: NXT不叫自己做挖礦, 不過這不是重點)

回滾的意思, 就是把技術上有效而且已確認的交易, 人為地宣佈無效, 在特定位置另挖一個區塊鏈以趕上原有的區塊鏈. 這情況在Bitcoin發生過兩次, 兩次都是技術理由; 特別是是第一次, 如果不回滾, Bitcoin已經完蛋了. 也多次有人提出過技術以外的理由要回滾, 當然沒有實行, 因為這會嚴重損害Bitcoin的交易不可逆轉性. 待續.

(C) jl2012@bitcointalk 2014. CC BY-NC-SA 3.0  http://creativecommons.org/licenses/by-nc-sa/3.0/

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
August 18, 2014, 03:43:38 AM
 #75

Quote
社区最近的热门话题:比特儿NXT币被盗事件。
能否请楼主详细解释一下“rollback”(回滚)是怎么回事?比特币历史上发生过的回滚是什么情况?

rollback跟51%的攻击有没有关联呢?我觉得是类似的。Rollback是主动安排的,通知社区并重复同意的,当然也会造成影响;51%攻击是攻击行为,是不可见人的,会让整个社区受到损害。

所以近期BTC下跌,跟大家对此的担心有很大关系。

51%攻擊有很多種, 其中一種和rollback在技術上是相同的行為

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
August 18, 2014, 12:20:28 PM
 #76


規則:

7. 有關山寨幣的技術問題, 如非與Bitcoin直接有關, 可被刪除


社区最近的热门话题:比特儿NXT币被盗事件。
能否请楼主详细解释一下“rollback”(回滚)是怎么回事?比特币历史上发生过的回滚是什么情况?

Bitcoin, 及所有由Bitcoin啓發的山寨幣, 本質都是一個單向性的產權記賬系統. 例如:

1. A擁有1個幣, 他轉移給B
2. 之後B又把這1個幣轉移給C
3. C把這1個幣分割為三份, 其中0.3個幣給D, 0.4個幣給E, 0.3個幣給自己
4. E把他的0.4個幣分割為兩份, 其中0.1個給D, 0.3個給自己
5. D現在共有0.3+0.1個幣, 他重新融合再分割, 0.05個給A, 0.35個給自己

單向性的意思, 就是後來的步驟, 都必須依賴所有之前的步驟. 如果例子中的第3步是無效的, 那麼就連第4, 5步都會有如從未發生一樣; 也就是說, 如果第3步是無效, 結果就是C擁有從第2步得來的1個幣, ADE一無所有.

一般來說, 有效的交易, 必須有正確的數碼簽署, 而且該交易輸入的幣在區塊鏈上有紀錄而且還沒有被花. 如果例子中的第3步的數碼簽署錯誤, 那麼E就不會在區塊鏈紀錄上擁有0.4個幣, 所以第4步也是無效, 也令第5步無效. 如果第2步已記在區塊鏈上, A就不再擁有任何幣, 他嘗試再花他的1個幣也不會成功.

BTER的情況, 是這樣的
a. 很多用戶通過不同地址把幣發給BTER
b. BTER把這些幣都放到同一地址NXT-LSC3-VB9T-2W3V-BH7FB
c. 黑客得到地址NXT-LSC3-VB9T-2W3V-BH7FB的密鑰, 把所有幣發到自己的地址NXT-8WJ7-8A2H-MBYN-3W9K4 (https://nxtblocks.info/#section/txid/5930851748280200080)

所有交易, 在技術上都是有效的, 當然亦已經記在區塊鏈上.

現在有些人說: "我討厭交易c, 我認為那是無效的交易". 請記著, 交易c是技術上有效的交易, 有些人討厭這個交易, 可能是為了道德原因, 也可能是為了私利 (自己有很多錢在BTER), 但一定不是技術原因.

他們既然認為交易c是無效的, 那麼他們也必定認為記載著交易c的區塊209886號 (https://nxtblocks.info/#section/blockId/11441067699374044604)是無效的, 因為有效的區塊內所有交易都必須有效. 如果他們認為209886號區塊是無效的, 那麼也必定認為這區塊以後的所有區塊是無效.

現在NXT開發者就提供了一個新版本, 宣佈交易c是無效的, 讓用戶自行決定是否跟隨. 跟隨這版本的, 就會認為區塊鏈在209885號就斷了, 那麼礦工就會在這之上另挖一個不含交易c的209886號區塊, 黑客在這個新的區塊鏈上是一無所有的. 如果支持新版本的礦工多於舊版本, 他們最終就會超越舊版本, 成為最長的區塊鏈, 那麼就連舊版本都會認為黑客是一無所有, 因為這個新區塊鏈在舊版本眼中都是有效的.

如果支持新版本的礦工少於舊版本, 舊版本就會繼續堅持承認黑客擁有NXT, 新版本就會堅持認為黑客不擁有NXT. 區塊鏈就會出現硬分叉, 會有兩種NXT同時流通. 視乎你用的是哪一版本, 就會看到不同的產權紀錄. 這時候唯一方法就是新版本用戶要投降, 放棄自己的分叉, 接受交易c是有效的.

(註: NXT不叫自己做挖礦, 不過這不是重點)

回滾的意思, 就是把技術上有效而且已確認的交易, 人為地宣佈無效, 在特定位置另挖一個區塊鏈以趕上原有的區塊鏈. 這情況在Bitcoin發生過兩次, 兩次都是技術理由; 特別是是第一次, 如果不回滾, Bitcoin已經完蛋了. 也多次有人提出過技術以外的理由要回滾, 當然沒有實行, 因為這會嚴重損害Bitcoin的交易不可逆轉性. 待續.

(C) jl2012@bitcointalk 2014. CC BY-NC-SA 3.0  http://creativecommons.org/licenses/by-nc-sa/3.0/

Bitcoin的第一次回滾:

https://bitcointalk.org/index.php?topic=822.0

在2010年8月15日, 第74638號區塊出現了一個奇怪交易, 兩個輸出竟然都有92233720368.54277039 BTC (922億), 遠超BTC的設計總量2100萬. 原因是Bitcoin有漏洞, 當兩個輸出的總值加起來出現溢出 (Overflow), 被視為負數. 由於當時的代碼只會檢查輸出總值是否小於輸入總值, 這個"負總輸出"的交易就被視為合法, 並被接納在74638號區塊內. 當時Satoshi還在, 他要求礦工(*)先停止挖礦, 然後以原來的74637號開始以修正版本挖礦. 但由於並非所有礦工都立即更新, 要直到第74691號區塊, 新鏈才趕過舊鏈, 即是有53個區塊被浪費了, 沒及時更新的礦工一共損失50*53=2650BTC的獎勵. 沒有紀錄顯示有任何人對這2650BTC的損失作出過賠償, 但以當日Bitcoin價格只有0.064美元計算, 這只是總值170美元左右.

(*) 額外歷史知識: 第一個礦池發現的區塊, 是於2010年12月16日由Slush礦池 ( https://mining.bitcoin.cz/ ) 找到, 因此第一次回滾發生之時, 應該全部都是個人礦工.

Bitcoin的第二次回滾:

https://bitcointalk.org/index.php?topic=152030.0

2013年2月19日, bitcoind 0.8 推出. 其中一個大變動, 是以LevelDB取代Berkeley DB用以紀錄區塊鏈資料. 2013年3月11日, 運行0.8的Slush礦池找到了一個有1700多個交易的225430號區塊. 這區塊理論上是合法的, 但0.7或以前的版本所使用的Berkeley DB不能正確處理, 因此網絡出現分叉: 運行0.8的, 也就是大部份礦工, 視這個較大的225430號區塊為合法, 而且一直在其之上挖礦, 成為最長的鏈; 0.7或以前的, 視這個較大的225430號區塊為非法, 因此所有隨後的都是非法, 他們找到另一個只有797個交易的225430號區塊 ( https://blockchain.info/block/00000000000001c108384350f74090433e7fcf79a606b8e797f065b130575932 ), 並繼續挖礦. 因此兩個版本之間, 互不承認對方

當時的解決方法, 是決定回歸到0.7的區塊鏈, 放棄0.8區塊鏈. 原因是0.7的區塊鏈只要夠長, 0.8都會承認; 但無論0.8的區塊鏈有多長, 0.7或以前的版本都不會承認, 這會置舊版本用戶於很危險的情況, 因為他們看不到新版本(也就是最多人承認)的情況, 收到的Bitcoin可能已經一文不值

各大礦池立即轉向0.7的分叉, 最終225462號趕過了0.8分叉, 有32個0.8分叉的區塊被浪費了, 不算手續費涉及了800BTC的獎勵. 事件引致價格大幅波動, 由$47下跌至最低$36.65, 所以總損失約值30000多美元. 這次的損失由Gavin從Bitcoin Faucet的餘款作出賠償: https://blockchain.info/tx/c931f1aa9f0d211dca085342ec472e77b538b55980a2c7b0ff9fab9a20a9acd2

另外, 在分叉的時候, 有人成功雙花了211.9093BTC (約10000美元). 他首先發了211.9093BTC給OKPAY, 交易在0.8分叉上確認後, OKPAY把$9800打到該用戶的BTC-E賬戶. 然後該用戶發現他這個交易原來並不在0.7分叉上出現, 因此他另發一個交易, 把相同的Bitcoin發給自己, 並成功在0.7分叉上確認. 由於0.7分叉最終勝出, OKPAY便白白失去了211.9093BTC. 雖然該用戶的行為是實驗性質, 而且事後也還款給OKPAY, OKPAY還是決定不再接受Bitcoin存款了. 事件顯示任何回滾必須要非常小心的進行, 否則可以帶來很不良的後果.

(C) jl2012@bitcointalk 2014. CC BY-NC-SA 3.0  http://creativecommons.org/licenses/by-nc-sa/3.0/
 

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
August 18, 2014, 03:37:44 PM
 #77

精彩的解答,现在我想问:面对量子计算机,比特币系统能否通过升级协议来修复这个先天缺陷来避免危机?或者说这种手术如果进行就足以致命几乎等于重新建造了一种新币? 这个问题社区迟早要面对的,毕竟量子计算机已经可以期望了。

這問題太多假設性. 例如這所謂量子電腦會是由極少數人掌握的尖端軍事科技, 還是未來所有人都會有一部量子智能手機? 對Bitcoin的影響已經非常不同.

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
jyaken
Hero Member
*****
Offline Offline

Activity: 810
Merit: 1000


Your professional profile on the blockchain


View Profile
August 19, 2014, 05:36:02 AM
 #78

想知道楼主对proof-of-stack的看法。有种说法是因为很多PoW的矿工不真正持币,在PoW下矿工的利益和持币人利益是错位的。
jl2012 (OP)
Legendary
*
Offline Offline

Activity: 1792
Merit: 1097


View Profile
August 19, 2014, 10:13:04 AM
 #79

想知道楼主对proof-of-stack的看法。有种说法是因为很多PoW的矿工不真正持币,在PoW下矿工的利益和持币人利益是错位的。

無論是POS還是POW, 本質上都是當區塊鏈出現分叉, 決定哪一個是有效的方法. 總的來說, POS把這個權力給予持幣者, POW把這個權力給予運算者

通常支持POS的講法, 是節省能源, 以及持幣者應有權決定貨幣的命運. 我認為這在原則上沒有錯, 但純POS系統有嚴重缺憾. POW的算力同一時間只能為一條區塊鏈挖礦, 如果有礦工要為兩個不同的分叉挖礦, 他只能分散他有限的算力. 但POS卻不同, 只要是持幣者, 就可以同時為無數個互相矛盾的區塊鏈挖礦, 甚至可以在花幣後, 倒過來攻擊最長的區塊鏈以取回已花的幣, 例如:

1. 在123號區塊時共有100個幣, A擁有60個, B擁有40個.
2. A把60個幣轉給B(交易X); 當交易X進入124號區塊確認後, B付了若干貨物給A.
3. 由於在123號區塊的紀錄上, A仍然擁有60個幣, 他可以另尋一個不含交易X的124號區塊. 而且因為他擁有大多數的幣, 他可以更快延長對自己有利的分叉.
4. 結果B財貨兩空

如果Bitcoin一開始是一個純POS系統, Satoshi作為0號區塊的擁有人, 也就是說他當時是100% Bitcoin的擁有人, 他可以隨時把我們累積了多年的區塊鏈完全消滅.

為了防止這個問題, PPC就採用了中心化的檢查點(checkpoint), 也就是開發者會定時公佈哪個是最長的區塊鏈, 這當然是非常不理想.

NXT則用了另一策略, 就是在若干區塊出現後, 節點就會拒絕回滾. 這做法好一點, 但有機會無意中造成硬分叉.

我本人的看法, 較理想的做法是以POW為骨幹, 由POS輔助, 可以由軟分叉做到. 本人曾提議過一些方案, 都在"Development & Technical Discussion"區發表

(C) jl2012@bitcointalk 2014. CC BY-NC-SA 3.0  http://creativecommons.org/licenses/by-nc-sa/3.0/

Donation address: 374iXxS4BuqFHsEwwxUuH3nvJ69Y7Hqur3 (Bitcoin ONLY)
LRDGENPLYrcTRssGoZrsCT1hngaH3BVkM4 (LTC)
PGP: D3CC 1772 8600 5BB8 FF67 3294 C524 2A1A B393 6517
jyaken
Hero Member
*****
Offline Offline

Activity: 810
Merit: 1000


Your professional profile on the blockchain


View Profile
August 21, 2014, 01:10:48 PM
 #80

请问Bitpay的0确认是怎么实现的?
Pages: « 1 2 3 [4] 5 »  All
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!