发布日期:2022-10-17 14:44    点击次数:165

写在前面: 对付比特币,我们偶尔会遇到一些难以理解的技能成就,譬如“新区块比旧区块早1秒诞生”、“同一时光差异全节点的大小差异”等奇葩景象,对付这些成就,就需哀告助业余的开发者来辅助解惑,在本文中,译者便选取了8个相对较乏味的成就,而来自比特币开发社区的大神们也给出了超卓的答案。 (注:下列成就和答案,均来自bitcoin.stackexchange.com)

比特币奇葩8问:为什么区块620826比区块620825早1秒诞生 (图片来自tuchong.com)

成就1 : 为什么两个齐全同步的Bitcoin Core节点在区块链大小上是差异的?

成就具体形貌:执行getblockchaininfo时,size_on_disk体现大小比同时(区块)报告的其他节点小1.2 GB。

txindex=1

兴许是什么启事导致的?我已经在twitter上问过其他平等节点规画者,看是否有他人也有同样的阅历,但每一集团的账本数据都要比我多。 (https://twitter.com/bitdov/status/1231915231368163328) Ugam Kamat答: 区块链大小上的差异,是因为节点存储的古老区块数导致的。古老区块是已经造成主链一部份,但而今不属于主链的区块。

譬如,假设有矿工同时在高度102挖取2个区块,当矿工经由过程gossip网络中继区块时,与矿工2开采的区块(102b)比较,更靠近矿工1的网络将首先级受它挖的区块(102a)。Bitcoin core将第一个领受到的有效区块增加到链的顶端。今后在同一高度领受的区块不会被删除,而是生活生涯在数据库中,以防发生重组。因而,假设在区块(102b)之上挖取下一个区块103,则首先级受到102a的节点,会将其链重组为包孕区块102b的链,以下图所示。

4

Bitcoin Core不会删除从其平等节点那领受到的任何有效区块。它永久存储在数据库中的blocks/blk****.dat文件中(这对付主链中的区块也是同样的)。然则,软件不会中继古老区块。为了领受古老区块,当你的平等节点从差异的链视图向你广播区块时,你必要在线。平等节点只会广播他们从今后流动链中看到的那些区块。因而,你只会拥有在线时收到的古老区块,因为这类可变性,良多节点的比特币区块链大小就是差异的。

成就2:我试着用bitcoin-core客户端同步全副区块链,尔后这花了我约莫9天的时光,终局却被破坏了,所以我不能不删除并从头同步。有无资源可以或许经由过程torrent或通例阅读器下载? chytrik答:假设你用torrent或其他编制下载区块链,但不验证收到的数据,那末你将没法得悉收到的数据是否有效。这意味着你兴许会等闲下载到一个被袭击者恶意改观的区块链,个中兴许纳入了子虚买卖,删除了非法买卖等,这些都是你没法得悉的。

这就是为什么bitcoin-core要花费时光来下载和验证区块链的启事:这是在无需信任的情形下,获适合前网络形态的仅有编制。

请留心,bitcoin-core在下载链数据时最有效,假设你下载一个区块链的torrent,尔后查验测验运用它举行验证,则必要更长的时光(你必要等待完备的下载,尔后举行完备的验证,而不是并行地执行每个部份)。

我不晓得有哪一个软件能比bitcoin-core更有效地执行这些验证步伐。假设RAM行使率无余,可以或许查验测验增加-dbcache选项。

成就3: 为什么比特币第620826个区块比第620825个区块早一秒诞生? Andrew Chow答:比特币并无哀告后一个区块的时光戳要晚于前一个区块,仅有的哀告是时光戳大于最后11个区块的时光戳中值。因而,这意味着一个区块在某个领域内的时光戳可以或许低于其父区块。

而第620826个区块早于第620825个,是因为矿工没有齐全同步的时钟,它们的外部时钟兴许略有差异,因而兴许会耽误几秒钟。假设一个矿工真的很幸运,并因为时钟的差异,而很快找到另外一个区块,那末因为时钟的差异,他的时钟兴许仍掉队于父区块的时光戳。这兴许就是这里发生的工作。

成就4 :我能用同样的钱包运行两个比特币节点吗?

成就具体形貌:我们在服务器上有一个比特币全节点和钱包,成就是我们的大大都钱包很久从前就实现同步了。对付我们来说,宛若此同步使命兴许会花费大量时光,而在该时光段内,全体其他哀告都将没法拜访比特币节点,而用户将没法运用我们的服务器。

我们推敲在零丁的服务器上复制今后的比特币节点,并在那里同步钱包。实现此进程后,我们会将钱包复制回原始服务器。

这是可行的吗?或许我们不克不及在两个差异的比特币节点上有沟通的钱包? Gašper Čefarin答:这是可行的,你可以或许痛处必要运行多个具有沟通钱包的节点。我想你之所以要这么做,是因为同步进程在另外一个节点上会更快吗?该进程实现后,你必必要复制完备的区块链数据,而不是钱包本身。

你兴许必要推敲查抄的瓶颈,兴许是硬盘、CPU或某些情形下的互联网带宽。

成就5 :为什么哈希公钥理论上匹敌量子计算没有协助?

成就具体形貌:在对付taproot的探究中,有人提到输出将间接包孕公钥,而不是对它们举行哈希运算。有人说,而今,哈希运算着实不克不及真正匹敌量子计算供应协助,这是为什么? Andrew Chow答:诚然哈希一个公钥本身确凿匹敌量子计算供应了协助,但理论上,只有在“真空”条件下才会是这样的,公钥哈希着实不是存在于这样的情形中的,比特币另有良多其他货物必要推敲。

首先,假设公钥是颠末哈希运算的,那末资金只有在运用前才是受到呵护的。一旦运用了P2PKH或P2WPKH输出,就会果真公钥。当买卖未经确认时,拥有足够快量子计算机的袭击者可以或许计算私钥并创立抵触的买卖,从而将资金发送给本身,而不是预期的领受者。

其他,假设袭击者是一名矿工,他们可以或许对每一笔买卖都这么做,只有推卸挖取不向本身发送币的买卖。

诚然这是一个成就,但人们平日觉得,这要比间接花比特币要好,因为他们拥有区块链中的公钥。诚然这是真的,然则有大量果真公钥的输出。

而今有逾越550 万 BTC的输出带有果真的公钥,它们要么是因为P2PK输出,要么是因为用户正在重用地点,因而其公钥在其他买卖中是果真的。因而,假设存在一台量子计算机,它兴许在公正的时光内为公钥生成私钥,则袭击者兴许获取的比特币就是这些。

因而,诚然你的特定输出兴许受到哈希的呵护,但这些输出的值将是0,因为会有数百万BTC会被盗。哈希真正能做的,只是供应一种舛误的安好感。

其他,公司相册器材和钱包软件也存在一些成就,它们只是在买卖和区块链中以其他编制果真公钥。没有现有的器材将公钥视为公有信息,它们没有因由这样做。

奔忙及公钥的宏壮脚本和合约还存在其他成就,这些脚本(如multisigs)并无哈希公钥,其他,这些合约的存在平日是因为并不是全体当事方都必须互信赖任(个中一方兴许是恶意的),在这类情形下,合约中的恶意染指者将晓得所奔忙及的公钥,并兴许窃取与这些输出相干的比特币。现有的公钥哈希没法预防这类情形。

最后,假设缔造存在可以或许破坏ECDLP的量子计算机,就有兴许向后量子密码体系体例过渡。假设及时检测到,但仍然来不及举行适合的降级,全体寄托ECDLP(即ECDSA和Schnorr)签名算法的运用均可以或许经由过程软分叉,从而锁定全体的币。尔后,这些币可以或许经由过程供应一个零知识的证据来证明某些非果真的或抗量子的信息,这些信息会评释私钥的全体权。

譬如,用户可以或许供应一个证据,证明他们拥有效于派生给定公钥对应私钥的BIP 32种子。因为它是零知识证明,种子本身不会果真(请留心,种子不是公私密钥对的一部份,因而不存在同享的民众组件)。因为大大都钱包都运用了BIP 32,这就足够了。大约另有其他编制可以或许证明全体权,而无须冒着还没有想到的币危险。

固然,这通通都假设有一台量子计算机兴许计算出一个公钥的私钥,而群众殊不晓得这项技能已经存在。理论更兴许的情形是,量子计算机的倒退将被窥察到,并且在它们强盛到足以攻破ECDLP从前的某个时分,比特币将软性地引入一种抗量子签名算法。终究,寄托于ECDLP的签名将被删除。全体这些,都将在量子计算机真正成为利诱从前发生。因而在这类情形下,哈希公钥不管怎么样,都不会供应协助。

请留心,以上全体内容不只限于量子计算机,它平日实用于ECDSA(或Schnorr)的任何密码学破坏。

成就6 : 怎么样经由过程同享沟通k值的两个签名获取私钥?

成就具体形貌:为了创立测试,我编写了本身的ECDSA签名算法,运用它我创立了两个签名,从地点1GXFXm3es....收回,孕育发生买卖56ec7ca7df...这些签名运用了沟通的k值(尽管k值永久不克不及重复运用)。

其后,有人从1GXFXm3es.... 这个地点偷走了0.0016BTC,并将这笔钱发送到了17WRjamox6VhTUaHsTWfFnMNDYHvwCtWio。

因而,肯定有人在监控区块链是否存在此类舛误,并在遇到此类舛误时窃取资金。

那怎么样从同享沟通k值的两个签名获取私钥? Pieter Wuille答: ECDSA签名是(r,s)对,个中r=(kG).x mod n,以及s = (m + rx)/k mod n,这内里的x是密钥,k是随机nonce,而m是信息。

对付同一密钥有两个s值s1和s2,并且具有沟通的nonce k(从而具有沟通的值r),则可以或许执行下列操作: s1 = (m1 + r*x)/k s2 = (m2 + r*x)/k 从中我们可以或许得出: s1 * k = m1 + r * x s2 * k = m2 + r * x (s1-s2)* k = m1-m2 k =(m1-m2)/(s1-s2) x =(s1 *(m1-m2)/(s1-s2)-m1)/ r x =(m1 * s2-m2 * s1)/(r *(s1-s2))(all mod n) 因而,你不只可以或许轻松地检测具有沟通随机数的签名(它们具有可识别的r值),并且一旦有人看到两个签名,就会有一个俭朴的公式来计算私钥。

起码从2013年起,这类袭击就已被广为人知了,也有人在积极行使它,不要重复运用k值,运用RFC6979肯定但安好地生成它们。

还要留心的是,光k值差异照旧不敷的,它们也不克不及以已知的编制联络纠葛在一起,譬如,你不克不及将k值用于一个签名,尔后将k + 1用于下一个签名。

成就7:为什么比特币抉择Merkle证明,而不抉择RSA累加器,两者比较有什么优弱点? Pieter Wuille答:

一、RSA累加器很难准确凿施; 二、RSA累加器必要一个可信配置(单个或多个实体必须失去一个足够大的整数,它是2个素数的乘积,尔后将这些素数扬弃)。比特币的策画平日是为了不成信方; 三、对付128位安好级别,你起码必要3000位RSA模块,这意味着证明将是3000位。 与具有逾越12层树的Merkle门路比较,这仅仅是一个所长,对付区块中的买卖而言,这意味着逾越4096笔买卖。 平日情形并不是云云,即便云云,也只是屈身云云。

成就8 : 三种比特币地点范例是否均可以或许互操作(legacy、segwit、native segwit)?

成就具体形貌:是否可以或许在全体3种地点范例(legacy、segwit、native segwit-bech32)之间来回发送买卖?

或许个中一类不克不及发送给另外一类? Pieter Wuille:在和谈层面,它们都是兼容的,买卖可花费个中任何一类,并发送给个中任何一种。

钱包软件固然兴许会无限定,但这些限定平日与组合有关。

Murch♦增补回覆: 在比特币和谈中,从任何范例的输停航送就任何地点范例都没无限定,然则一些较旧的钱包,兴许不支持发送到较新的地点范例。

让我们更好地相识一下在发送比特币买卖时,具体兴许会发生什么:

领受者抉择一个他们想领受资金的地点,这就奔忙及到一个地点项目,而抉择一种更有效的地点项目,可以或许减省开消,这吻合领受者的利益。

发送者抉择他们想要花费的输入,输入脚本是由这些输出从前领受到的地点范例配置的。然而,发送者被鼓励为他们的找零输出抉择一个有效的地点范例,以减省未来的成本。

然而,较旧的电子钱包软件兴许没法发送到较新的地点范例。具体来说,原生断绝见证地点在2017年3月才获取地点标准(BIP-173),着实不是全体钱包都支持发送到这类地点。在这类情形下,发送者该当供应一个封装断绝见证地点。全体钱包都该当兴许发送到封装断绝见证地点,因为它运用了2012年推出的Pay to Script Hash (p2sh, BIP-16) 地点标准。

在任何情形下,发送就任何特定地点范例的成就,都是由发送方钱包中缺乏功用而导致的,而与运用的输入范例没有任何关系。



  
友情链接:

Powered by 安徽安优易电子商务有限公司 @2013-2022 RSS地图 HTML地图