首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
拉勾
V2EX  ›  问与答

比特币矿池挖矿是如何保证无法作弊的?

  •  1
     
  •   pungis · 2017-02-26 19:19:28 +08:00 · 12329 次点击
    这是一个创建于 753 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比特币的挖矿原理我知道,穷举打包账本计算前 n 个 0 的 SHA 这也就是说最终只能有一个人算出来

    我想知道在矿池挖矿的 n 多人中如何保证下面两点:

    1. 当我撞彩算出来的时候不把结果提交给矿池,而是自己广播出去独吞收入(挖矿软件开源的,改改应该可以做到)

    上面还不算严重,下面这点更是重要:

    2.最终不是把成功打包的收益平分吗?分成的原则是计算贡献,也就是你的计算速度。但是如何保证我计算的正确性?我不算而是直接提交错误的结果上去增加计算贡献行不行。矿场是如何知道我确实计算过了而不是提交了个随机数?毕竟大家会一直算出不正确的结果直到有一个人算出正确的为止,如何确定我真实的计算贡献?

    49 回复  |  直到 2018-05-31 11:20:02 +08:00
        1
    Aliencn   2017-02-26 19:55:42 +08:00
    拥有超过 50%的计算能力就可以作弊了
        2
    murmur   2017-02-26 19:58:18 +08:00
    没法保证无法作弊,当世人知道比特币的时候,大量的原始数据已经被别人垄断了
    货币无法作弊是国家用信用背书,比特币背书的是什么玩意呢?所以从这个观点来看,国家变相封杀比特币是明智的选择
        3
    murmur   2017-02-26 20:10:15 +08:00
    顺便说一下,比特币绝对是个阴谋,很庆幸的是 zf 采取了有效的手段来抵御这个阴谋
    你说是两地三机房+上等硬件+银监局监管安全,还是你去中心化的算法安全
    人民币之所以是人民币,一是采用了方法(水印、特殊印刷、纸张)保证无法作弊,二是有刑法,而且最高死刑告诉你作弊的结果是怎么样
    比特币在后者还是个 0 ,
        4
    gam2046   2017-02-26 20:11:26 +08:00   ♥ 7
    @murmur 不知道对不对。我觉得现在的货币是以政府的信用背书,并不是以国家信用(甚至我觉得并不存在所谓的国家信用);至于比特币则是以他的数学公式作为信用背书。两者并没有很显著的区别。政府信用是因为大家都信任你,而数学公式是大家都认可这个公式的有效性。所以只要是“大多数人”认可,那么就可以通行。现在回到金本位、银本位是不太可能的了,那么数字货币的那一串数字与纸币的那一张纸又有多大区别呢。理论上存在 51%攻击,实际操作起来,也许并不需要 51%的计算力就可以发动攻击。
        5
    murmur   2017-02-26 20:14:41 +08:00
    @gam2046 我国是国=党=zf 么,至于别的国家不在乎,中国反正没人直接收比特币
    所以呢,谁都发货币, zf 会允许么
        6
    murmur   2017-02-26 20:18:21 +08:00
    顺便说一句,在古代私造货币跟谋反差不多,查出来按律当斩的,现在也有死刑,你说国家怎么会允许个人发行货币
    何况你没有创造价值,你在浪费电力啊
        7
    pungis   2017-02-26 20:23:31 +08:00   ♥ 24
    这里在讨论严肃的技术问题
    不懂的请不要在这里发垃圾言论
    50%攻击跟此问题没有半点关系,不要百度个概念就来胡说八道

    @murmur
    就你的认识之弱智真真是令人恶心
    所谓道不同不相为谋,你的一切观点我都不同意
    请圆润的离开,不要脏了我的帖子!
        8
    t6attack   2017-02-26 20:48:08 +08:00   ♥ 2
    51%攻击 和 私吞矿池成就 ,是两个问题。楼已经被人推歪了。没法讨论了
        9
    lqs   2017-02-26 21:04:38 +08:00   ♥ 8
    来回答一下 lz 的技术问题

    矿池分配任务会采用降低难度的方式,例如,比特币网络要求有前 16 个 0 得 25 个 BTC ,矿池分配任务时只要求矿工算出前 8 个 0 就上报,每上报一个可得 25/(16**(16-8))=0.00000000582 个 BTC 。那么:

    1. 矿池分配的任务里已经包含 [要把这 25 个 BTC 给矿池自己的地址] 这条信息了,如果矿工私自广播,相当于放弃了本属于自己的 0.00000000582 个 BTC 。

    2. 要算出前 8 个 0 也是需要一些计算量的,提交随机数没法做到前 8 个 0
        10
    murmur   2017-02-26 21:08:29 +08:00
    哎,水这么多就为了告诉你一点,安全和作弊相关的东西是法律问题,不是技术问题,就算中国有电子货币,他一定叫 rmc 不是 btc
    51%攻击?太简单了,国家先做一点微小的贡献把国外交易平台加到列表里,然后稍微开一下挂屏蔽 btc 的协议(有传言我国已经可以监控暗网,不知真假),最后搞个小新闻,国内的 btc 交易平台都会因为“经营问题”纷纷关闭转行

    所以 51%很难做到么?

    另外,私吞 btc 可不一定是在协议上做手脚,国外那个交易平台跑路,私吞那么多 btc 都被你无视了,真是悲哀
        11
    v9ox   2017-02-26 21:10:57 +08:00 via iPhone   ♥ 1
    Withholding attack

    楼主感兴趣可以看看相关论文 可以作弊
        12
    stabc   2017-02-26 21:19:36 +08:00
    @murmur 我觉得你是那种啥都懂点的人。(说白了就是啥都不懂)
        13
    kulove   2017-02-26 21:25:43 +08:00   ♥ 1
    @murmur #10 建议你先看下 btc 的原理,看看 51%是不是很难做到。
        14
    roist   2017-02-26 21:31:36 +08:00   ♥ 6
    @murmur 你不仅不懂比特币的基本原理,还高谈阔论半吊子经济学,你知道纸币的英文名叫 bank note 吗,照你的理论纸币也仅仅是在浪费特种纸张和和它的制造流通成本而已,没什么区别

    “国家先做一点微小的贡献把国外交易平台加到列表里,然后稍微开一下挂屏蔽 btc 的协议” 笑尿了,你是中学生?

    “最后搞个小新闻” 莫非又是“震惊世界 日本吓尿 美国颤抖” 开头的新闻?
        15
    fangxing204   2017-02-26 21:35:34 +08:00 via Android
    刚好最近看到一个,解释的不错 https://anders.com/blockchain/
        16
    xgdyhaiyang   2017-02-26 21:53:29 +08:00   ♥ 11
    作为 viabtc 比特币矿池 (www.viabtc.com) 的开发者,我可以回来这个问题。

    第一个问题:这叫做扣块攻击,矿工挖到合法区块不提交结果,确仍然可以照常拿到挖矿收益,矿池运营者会因此受到损失。这个问题是确实存在的,并且我们可以证实遭受过此类攻击。这个问题目前是无解的,修复此问题需要比特币修改工作量证明算法才行。这个攻击可以通过多种手段防御, 1 、通过运营的手段,攻击者为了隐蔽自己,通常通过层层代理,这是可以自动发现出来的; 2 、对于陌生的大算力矿工,要特殊注意; 3 、矿工长时间不出块,可以通过泊松分布计算其为诚实矿工的概率,如果太小则可以认为是攻击者,但这种情况下即使识别出来了矿工也损失很大。

    第二个问题:比特币网络有一个挖矿难度,假设为 D, 目前该数值大约为 440G, 而矿池会给每个矿机分配一个非常小的难度 d, 通常为 10K 左右。矿机只要计算出来的结果满足 d 的要求即可提交给矿池,矿池则为该矿机累计 d 的工作量作为分配收益的依据。由于 d 是足够小的,可以保证矿机平均每隔几秒就提交一个结果,最终结果和矿机实际计算量相差佷小。

    viabtc 目前在招聘工程师,欢迎关注: https://www.v2ex.com/t/337918#reply20
        17
    pungis   2017-02-26 22:10:57 +08:00
    @lqs 感谢回答
    第 1 点确实是这样。地址是人家的私自广播没有意义,改成自己的又不被矿池承认了,相当于自己独立挖矿了。
    第 2 点有些不理解, 8 个 0 就提交并计分,那是指 16 个 0 是某次算 8 个 0 时碰巧算出来的吗?毕竟最终要有 16 个 0 出来才有收益呀。
    这个的收益分配算法好像不太对的样子
    25/(16**(16-8))=0.00000000582
    如果运气好到极致第一次就算出来 16 个 0 了岂不是矿池得 24.999...的币,算出者得上面那一点点,其他人一点没有?
    再进一步,大家算了 10 分钟一个 8 个 0 都没有,直到刚刚才出来一个并且直接 16 个 0 的
    那所有其他人的这 10 分钟的计算都没有任何收益会不会显得很不公平?
    毕竟大矿池可是几十万的矿工
    我怎么记得应该每次都是所有人都有收益的只要你真的参与计算过?


    @v9ox
    谢谢,看了相关文章。这个攻击应该与双花有关不是矿池挖矿专有的。
    而且必须有 0 确认交易才能行,实践中可能性很低。
        18
    pungis   2017-02-26 22:27:06 +08:00
    @xgdyhaiyang
    第一个问题如 5 楼回答,只要把收益地址定死就破解了
        19
    kiro   2017-02-26 22:28:44 +08:00   ♥ 2
    比特币的初衷就是用数学的方法,来避免政治来作弊,因为数学是不受任何政治、法律、国家来操控的。虽然比特币的技术并不能说很完善。

    说实话,要我在数学和政治、法律、国家中来选,我选择信任数学。
        20
    lqs   2017-02-26 22:32:38 +08:00
    @pungis
    在一个长期运行并且参与人数足够多的矿池上不会发生这种极端的小概率情况。
        21
    cctvsmg   2017-02-26 22:49:41 +08:00   ♥ 3
    我来回答下这个问题。。。以前维护过矿池。。。 yacoin p2pool 代码还是我第一个弄出来的。。。

    矿池无法保证不作弊。。。 之前很多矿池直接带着挖到的币跑路了也是有的,巨型矿池&巨型交易所本来就是违反中本聪初衷的, 他自己估计也没想到会出来这种东西。。。 。 so ,比特币的去中心化理念其实是失败的。。。。

    但是呢,虽然矿池可以作弊,但是你可以不去啊,而且楼主想下,假如我的算力很大,我要去矿池作弊,矿池里面其他大户利益会受到损失吧,就是我有 1/3 矿池的算力,但是算力一天毛没收到,那我就跑路啦,直接换个矿池,最后结果是 整个矿池就剩那个作弊者一个人啦,于是 1 个人 vs 世界,他自己毛也挖不到啦。。。

    当然,最不容易作弊的矿池就是 p2pool ,因为 p2pool 在挖的时候呢,就把如果挖出来每个人要分的钱写进块了, 而且无法篡改,只要谁算的数对,谁广播成功能被全网接受即可。
        22
    pungis   2017-02-26 22:51:06 +08:00
    @lqs
    明白了,看了 11 楼的回答我理解了。
    我想得太极端了实际上是不会发生的。
    但是仍然发现每次出块矿池都是占大头的,很明显的不公平。

    @xgdyhaiyang
    明白了!我理解错了。
    你说的第一个问题扣块攻击不是我说的那种攻击方法
    就只提交 8 个 0 去得收益,出 16 个 0 的丢掉不提交
    力求在其他人出 16 个 0 之前尽可能多的算出 8 个 0 的以此来提高收益!
        23
    thinks   2017-02-26 22:54:11 +08:00 via Android
    @pungis 比特币去中心化的核心在于多点认证,即全部参与人数中有半数以上认同你持有货币。
    大致意思是,假设全场总数有 100 个人,只要超过 51 个说你持有 N 个货币,哪怕你什么都没有,整个系统也认定你持有。
    这也是为什么区块链技术需要更多的计算点参与,才有意义。
        24
    mooncakejs   2017-02-26 22:59:08 +08:00 via iPad
    比特币的最大的问题是必然通缩. 比特币丢失+寡头
        25
    pungis   2017-02-26 23:05:47 +08:00
    @thinks
    请审题,看懂了再发言。
    你说的这些都是基础中的基础,我在讨论比这高 n 个层次的问题
        26
    pungis   2017-02-26 23:20:35 +08:00
    @cctvsmg
    现有的收益分配算法有不小缺点:
    1. 矿池得大头,显失公平。(开个矿池简直躺着数钱)
    2. 重复计算浪费算力。矿工们随机改填充数计算 HASH ,不可避免会出现重复计算同一个填充数的情况。
    3. 矿工们为了获取更大的收益而扣块攻击
    4. 2 的对立面,因为这种随机改填充数,有可能点背的话所有人都没随机到正确的值而让整个矿池损失本来应得的收益。(指的是如果不浪费重复计算的算力应该能由此矿池算出来)
        27
    bitfish00079   2017-02-26 23:27:34 +08:00   ♥ 4
    第一个问题:
    当我撞彩算出来的时候不把结果提交给矿池,而是自己广播出;
    自己打包成块广播出去,新挖到的币还是到矿池挖矿地址里的;矿池分配任务的时候已经确定好了接收这个区块的地址;
    第二个问题 :不算而是直接提交错误的结果
    比特币挖矿是双 sha256 运算,挖矿结果很好校验,矿机提交的每个 shares 都会有进程校验,如果是正确,记做相应多少个 accepted shares ;如果是错误的(楼主说的这种情况)或者超时等,记做 reject shares ,最后根据不同分配机制分配所挖到的比特币,只有 accepted shares 才有收益;

    延伸一个问题: Withholding attack ;当矿机计算出符合难度 share 不提交给矿池,中文叫扣(藏)块攻击,
    这种主要针对 PPS 分配模式矿池, PPS 矿池按照用户提交的 accepted shares 根据难度按照理论值进行分配,扣块攻击会导致矿池挖到的比特币低于理论值,但是不影响矿工收益;需要修改 bitcoin 相关协议,暂时无解
        28
    bitfish00079   2017-02-26 23:29:24 +08:00
    @bitfish00079 利益相关 中国最早的比特币矿池 https://www.f2pool.com/ 创始人 神鱼, F2POOL 目前正在招聘工程师,欢迎关注
        29
    pungis   2017-02-26 23:47:29 +08:00
    @bitfish00079
    @v9ox
    Withholding attack 有两种形式
    一种是针对矿池的,上面说过了
    另一种我看到的文章中说:
    先计算出一个正确的块(块里包含自己花币的条目,没有广播过的),再花币,买 0 确认就成交的东西
    然后立即广播出块信息
    如果被承认,那么就成功了
        30
    dillon   2017-02-26 23:48:30 +08:00
    2 楼的发言让我差点没笑岔气
        31
    bxb100   2017-02-27 00:25:48 +08:00 via Android
    不是算法和签名?
        32
    BXIA   2017-02-27 05:43:07 +08:00 via iPhone
    @gam2046 所以说比特币很危险啊,一旦发生系统性危机没有任何国家可以进行调控,还有无解的通货紧缩为题,简直是无政府状态啊
        33
    relaxchen   2017-02-27 08:46:20 +08:00
    一周贬值能接近 50%的“货币”,老实说,我觉得他像是一种商品,而非“货币”
        34
    gam2046   2017-02-27 09:21:09 +08:00
    @BXIA (以下胡扯,仅供茶余饭后娱乐)从我半桶水的纯经济学角度看,比特币符合“货币”的所有特征。实体货币由各国政府中央银行管控(增发或减发),而比特币由算法保证总量一定(即不会超发)。至于你说的发生危机,我觉得更多的关注点应该在如何预防危机发生(例如制造业下滑......或者说如果发生危机,仅仅依靠调控货币是不能够恢复经济的。最终还是要靠实业)
    但是需要留意的是,各国政府可能为了自己的利益,操纵汇率来打压其他国家(近期可以参考美帝强势要求包括 RMB 在内的 JPY/EUR 等,需要随 USD 一同升值)。但是比特币不存在这个问题,由于算法是固定死的,不会以个人意志转移。
    我觉得目前以比特币为首的一众去中心化的数字货币,最大的阻碍是各国政府无法监控资金的往来。我阴谋论的认为,每个国家的政府都有棱镜项目,所以一旦出现某些不可描述又难以管控的东西,第一思维总是想给扼杀掉(对,没错,我说的是万恶的美帝,请不要想歪了)
    ----
    至于“无政府”状态,据说现在 US 有许多经济不太好的地区,经过当地选民投票表决,已经成为无政府区域。基础、公共、事业服务由上一级政府承担,如果上级也是无政府再由上一级承担(好像现在没听过有“县政府”被投票说不要了的),不过由上级政府托底的服务基本上已经和没有差不多了,例如公安方面只有一两个治安官来负责,其他方面也类似(毕竟你税交的少,美帝纳税人可以指着公务员鼻子骂)
        35
    skylancer   2017-02-27 09:48:46 +08:00
    @murmur 你的一系列帖子都在浪费资源,这个帖子本身在讨论技术和数学问题,你来个讨论法规,真是搞笑
        36
    shutongxinq   2017-02-27 09:52:20 +08:00
    @gam2046 #34 比特币这种总量一定的"货币"会一直通缩,怎么可能“符合'货币'的所有特征”...符合的话大家日子就别过了...
        37
    BXIA   2017-02-27 09:57:28 +08:00 via iPhone
    @gam2046 学宏观经济的吧?上到大二就应该能学到了,不能监管资金流动是小,全球统一使用一种货币是不现实也不理智的,况且比特币天然通缩,所有人都倾向于持有货币而非交易,比通胀更能打压商业。
        38
    boter   2017-02-27 10:10:42 +08:00
    @shutongxinq 是谁定义的货币的属性呀?有没有想过别人为什么这么定义,这个定义本身就是错的
        39
    jsjjdzg   2017-02-27 10:39:32 +08:00
    这个货币明显是寡头的,都在投机而已,赞同封杀
        40
    boter   2017-02-27 11:01:15 +08:00
    楼上好多踏空者呀 哈哈
        41
    starvedcat   2017-02-27 11:12:15 +08:00
    我还以为只有我这么想,直到我看到本帖最高赞回复。一下子就觉得好放心。
        42
    kn007   2017-02-27 11:51:47 +08:00
    2 楼真是迷之自信。。。
    另外楼主你 block 人后,楼层数就不对了。。。你回复说的几楼,都错了。囧
        43
    bitfish00079   2017-02-27 12:02:58 +08:00
    @pungis 你说的那个叫双重支付攻击 double spending ,并且是 0 确认的攻击,比较容易实现
        44
    bitfish00079   2017-02-27 12:09:12 +08:00
    @jsjjdzg 去中心化的,你封杀下看看。除非断网。封锁所有卫星信号、边境地区他国信号
        45
    pungis   2017-02-27 12:10:18 +08:00
    @kn007
    好像是这样的哈哈
    我 Block 之后别人还是能看到的
    V2 这个楼数机制不太智能

    订正:
    @xgdyhaiyang
    第一个问题如 9 楼回答,只要把收益地址定死就破解了

    @lqs
    明白了,看了 16 楼的回答我理解了。
        46
    Antidictator   2017-02-27 12:19:16 +08:00 via Android
    水深火热见, 233333
        47
    Laforet   2017-02-27 12:21:15 +08:00
    @gam2046

    符合特定条件下一般等价物的特征,作为货币还不够格,因为有总量上限和量子计算这两个回避不了的问题。

    @bitfish00079

    这个去中心化的系统太不堪一击了。前面说的 51%算力攻击,其实根本不用去获得那么多算力,只要把足够多的节点 D 下线,让自己成为 51%就可以。即使是看多的比特币投机者,对于大量算力集中在墙内的现状也是有顾虑的,因为一旦发生大规模通讯问题,区块链有分裂的危险。
        48
    xgdyhaiyang   2017-02-27 12:59:22 +08:00 via iPhone
    @pungis 收益地址是矿池决定的,矿机无法修改,另外矿机没有组成完整区块的完整信息(交易列表)无法自己广播。这种攻击是针对矿池的,降低矿池的收益,最终矿池入不敷出导致破产。
        49
    elitezhe   294 天前
    @xgdyhaiyang @pungis @cctvsmg @lqs

    抱歉挖旧贴, 我有关于矿池分发任务的疑问.
    -1 矿池分发给矿机的任务的信息都有哪些?
    -2 矿池分发给矿机的任务的难度如何理解?比如连接不同端口,会指派不同难度.

    矿机接收到矿池的任务,该如何理解呢?
    根据我目前的经验和猜测,我猜测:矿池将交易列表等相关信息发给矿机,然后每个任务发一个随机数给矿机,让矿机算 hash.
    那么矿池的难度,比如说 30000,应该就和挖矿的难度(算出的 hash 有几个 0 开头)不是一个含义了.我猜测是用了多少个随机数算了多少回合.假设难度 30000,就是矿机用了 30000 个矿池指定的随机数,算出了 30000 个 hash,然后一起提交给矿池,而不是提交 30000 次,对矿池造成 DDoS 效果.

    不知道理解对不对,还请各位帮助.
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2753 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 22ms · UTC 12:00 · PVG 20:00 · LAX 05:00 · JFK 08:00
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1