Fw: [技术] Bitcoin运作基本原理

楼主: a07051226 (葡萄糖)   2015-12-24 16:52:22
※ [本文转录自 Soft_Job 看板 #1IbUyXNc ]
作者: StubbornLin (键盘创业家) 看板: Soft_Job
标题: [技术] Bitcoin运作基本原理
时间: Wed Nov 27 21:09:36 2013
Bitcoin讲了这么多,很多人认为不安全什么的
但其实可能不太了解它是怎么运作的
正好我有研究一点点过,就嘴砲写一篇解释一下部份的运作原理
首先可以参考这篇
http://yowureport.com/?p=5358
他大略的方式解释得蛮清楚的,只是技术细节没写清楚
细节呢,Bitcoin有一种最基本的资料结构单位叫做Block
https://en.bitcoin.it/wiki/Blocks
它大略含了这些资讯,例如像这样
- 随机值 (Random nonce)
- 难度值
- 上一个Block的hash值
- 矿工奖励:
- 签属 10 BTC 给 Marry
- 签属 15 BTC 给 Julia
- 合法的交易资料:
- 交易1 John 签属 5 BTC 给 Tom
- 交易2 Tom 签属 0.5 BTC 给 Jimmy
...
实际的Block都是透过P2P交换 所以是完全公开的 可以到这个网站看看
http://blockexplorer.com/
每隔不多久就会又有新的Block被产生 我们随便挑一个出来看
http://goo.gl/RF9yrD
Transactions 那里就是收录合法的交易资料,可以看见第一行
Generation: 25 + 0.59209676 total fees
这个就是矿工奖励,剩下的就是合法的交易资料
所以简单来说这就是一本帐册,矿工就是造出这本帐册的人
他可以签属25BTC + 所有交易费用的总合 给他指定的人
进入重点,所以帐册要怎样造,好像这样听起来随便都可以造
但其实不是,一个合法的Block,要在P2P网络上被所有的节点认可
必需符合一条件,简单的来说,就是整个Block产生出来的Sha256值
要小于难度值
SHA256(Block data + Random nonce) < 难度值
SHA256算出来的长度就是256bits,也就是32Bytes长
这是一个很长的数字范围,难度值并不是一个很长的数字
而杂凑函数算出来的数值一般都视为乱数且无法预测的数值
因此,产生合法的一个Block唯一的方法,就是大量代入不一样的Rnadom nonce
暴力一直去试,直到产生一个Block的SHA256 Hash值小于难度值
这样的一个block才会被P2P上的所有节点认可
当你产生这样一个block其实我们就叫做挖到矿了
那个难度值会自动 每周依照上周的平均产出速率
去调出一个当初就设计好的速度,因此当越多人挖
这个值会自动调整出一个更难挖的 更小的难度值来
这里讲到的奖励金25BTC其实也会随着时间变动
它设计随着时间 越到后面挖矿的BTC奖金越少
最初其实是 50BTC的 只是时间到了现在变25了
它来控制发行总量 当然到最后会没有奖励
但透过收集交易费用 最后还是有人愿意挖
而每个block都有一个往上一个block的hash值
所以整个形成一个往前audit的hash chain
有时会出现短时间内出现两个合法的block来自同一个parent的情况
就是产生分支 (branch) 这时会看哪个chain花的运算资源最多
那个才会被承认 这样一来要恶搞就很困难
而交易是透过非对称加密,每个户头都是一把公钥
透过每个人私钥去数位签章 就可以把你有的BTC签给收款人的公钥
接着把签章的资料广播到P2P网络 最终被某个矿工收录在block里
如此一来整个P2P网络就认可你有那笔钱
嗯? 你说 那好 我身为矿工 挖到矿的奖励规订是25而已
但我偏要把它设成999999 不行吗? 当然可以
只是那个block因为不符规则会被视为无效的
嗯? 你说 那当我挖到矿时造假的交易收录在block里 我明明一毛钱都没有
却转帐给我另一个户头 9999999 BTC
没用 你没足够的余额去签那转帐 一样被视为无效的block丢掉
嗯? 你说 那我如果当个恶搞矿工 专门产生不收录交易的block让交易无法进行呢?
没用 你得和全世界贪婪的矿工们竞争 他们用的可都是ASIC等级的设备在挖的
嗯? 你说那我如果挖到矿了 把难度值恶搞一下 变超简单呢?
没用 难度值如果不照原先设计好的规则变动 你这个block一样被视为无效
嗯? 你说你造一个恶搞的block广播出去呢? 没有用
见到你这不合格的block的节点就会直接忽视 当垃圾丢掉
嗯? 那你说 好 假设我有100BTC 我在短时间内签两笔100BTC分别给不同人呢?
喔... 这就有可能有效了 如果收到的人只验数位签章 不等一下子
让有矿工收录的话 他可能就真的以为收到这笔钱了 但等过一阵子之后
第一笔交易被收录 第二笔就会被视为无效的丢掉
因为有这种可能 所以其实只要等五到十分钟 确认有被收录
这攻击就无效了
挖矿这整个游戏就像是在丢骰子一样 全球一起参赛
看谁先骰出小于指定数值的骰 大约每五分钟开出一轮
开出一个hash值就是丢一次骰子 看谁丢骰子的速度快
现在职业矿工都是靠 ASIC特制硬件在挖的
你CPU、丢一次、十次 他可能已经丢一千次一万次了
所以现在难度已经非常高 在有利可图的情况下
经过三年的时间全球的矿工疯狂挖的情况下
还能正常运转 其实就表示要攻破或恶搞是非常有难度的
至少就理论和三年实战看来 至今是非常可靠的
写得有点乱 有空的话再聊其它细节 有想到什么可能的攻击手法可以讨论看看
或许我可以回答得上 那至于信不信有没有那个价值 是不是骗局就免了
谈技术就好 反正我认为信的人信 不信的人还是不信囉 科科
作者: idleidle (格物致知 温故知新)   2014-11-27 21:51:00
现在进去只是抬轿而已...
作者: StubbornLin (Victor)   2014-11-27 21:59:00
这种东西其实很难讲 在100美元时也有人认为太高但现在快接近1000了 以前荷兰也有郁金香被炒作到疯掉的状况 但后来崩盘了 我是认为Bitcoin也有很大机会会崩盘 但是不像花 崩了就没了 它的可交易特性还在还是多少有人会用 只要有服务商 像Mega Wordpress这些肯收Bitcoin来卖服务 或商品 它还是有一定的够买力
作者: ldkrsi (衰神)   2014-11-27 22:06:00
节点是怎么确认帐户余额的? 用历史交易算出来的吗?
作者: proach ( )   2014-11-27 22:19:00
我记得上次看到有人用FPGA作了电路来挖...
作者: sayya2311 (ya)   2014-11-27 22:27:00
何必要假造? 直接再弄个Xcoin来炒作就行了...
作者: windlll (我要工作阿)   2014-11-27 22:42:00
bitcoin发明者说这玩意只是构想,火成这样他也吓到
作者: olctw (k.olc.tw)   2014-11-27 23:20:00
要看懂这个生态体系还真是不太容易 :)
作者: Lordaeron (Terry)   2014-11-28 00:45:00
非对称加密? 公钥 私钥 由谁发行? 谁来保证不重复?Bitcoin用哪套CRYPT LIB, OPENSSL.因为它最多人玩 流通性最好 -->rats company
作者: vvind (wind)   2014-11-28 00:57:00
作者: bruce3557 (bruce)   2014-11-28 03:42:00
推~
作者: ntddt (灭顶,降公投罢免门槛)   2014-11-28 08:25:00
推V大~~
作者: livefish (jo)   2014-11-28 09:57:00
消耗电力的游戏 :)
作者: Assyla (我只是居家了一点)   2014-11-28 10:24:00
这种机制比银行还要有公信力,看看台湾的银行一堆超贷
作者: CRPKT (crpkt)   2014-11-28 10:43:00
如果因为多人玩就算老鼠会的话不如说 GPL 也是老鼠会算了 XD
作者: ldkrsi (衰神)   2014-11-28 10:56:00
再问个问题 交易要经过六次确认才能成立 要花一个小时确认所以bitcoin没办法现在买进100后立刻卖出这笔100囉?
作者: SlimeEditor (菜瓜布)   2014-11-28 12:18:00
回Assyla, 你可以去问问现在各法人和机构相信哪套
作者: PriusC   2014-11-28 15:58:00
私钥在你自己的电脑上产生 你的地址其实就是由私钥产生的公钥的hash当你要收到比特币要花钱时 需要用你的私钥来透过ECDSA签名比特币的钥匙有256位元 要能破解不太可能要盗用也不是hash collision而是second image attackECDSA目前的电脑不可能逆向 除非等量子电脑出来用秀尔算法的变种可以把key space减半不过到那时现有的加密都会被破解 大家一起死XD当然也有不怕量子电脑的加密法 不过太耗资源了preimage attack*
作者: oaz   2014-11-28 17:06:00
可以问一下,交易纪录是存在谁那里?持有人没办法作假吗?
作者: PriusC   2014-11-28 17:26:00
存在每个人的电脑里他叫做blockchain可以作假阿 但是没人会理你的block
作者: vaio5566 (卖肉56)   2014-11-28 21:08:00
当你掌握全世界51%算力 就可以作假了
作者: Lordaeron (Terry)   2014-11-28 22:00:00
私钥在你自己的电脑上产生? 谁来保证不重复?更见鬼的SHA256要能破解不太可能? 哪"呆湾" 的自然人凭证, 你知为何要提升到2048?
作者: windlll (我要工作阿)   2014-11-28 23:06:00
电脑重灌....?
作者: xvid (DivX)   2014-11-28 23:24:00
商业型量子电脑不是早就问世了吗?用时间当加密保护的加密方式都不算多安全
作者: DarkerDuck (達克鴨)   2014-11-28 23:36:00
lordaeron你估狗一下好吗?http://tinyurl.com/nfqnuhu掌握51%算力也无法做假交易,因为一个交易是否有效看这笔交易的签章就知道了,51%攻击可以做的是撤销交易商业型量子电脑目前可以做的是量子退火算法量子电脑目前可以做的运算几乎都还是非常局限
作者: Lordaeron (Terry)   2014-11-28 23:39:00
DarkerDuck 哪么麻烦你估狗一下, 为何哪么多加密法都死了!!
作者: DarkerDuck (達克鴨)   2014-11-28 23:40:00
至少也给个网址吧,SHA256你破解了应该会被NSA抓走喔所有现行的加密法都可以靠暴力计算破解,还是你已经发明可以防止被暴力破解的加密算法?所有有资工常识的人都知道所谓的加密算法被破解是找到一个时间复杂度可能只有多项式时间的计算算法对了,SHA256和RSA2048是不一样的东西喔,请估狗 ^ ^
作者: PDCMG (拜托不要叫我神)   2014-11-29 00:09:00
哈哈~Lordaeron又来了喔?SHA256是HASH,RSA2048是非对称加密这个不用Google就可以知道了啊...上次也是砲一砲就溜了~科科
作者: DarkerDuck (達克鴨)   2014-11-29 00:12:00
可能反串的吧,Soft_Job版众应该素质挺高的
作者: Lordaeron (Terry)   2014-11-29 00:32:00
PDCMG 你还是省省吧.你还是直接回, 台湾为何要提高到SHA2048, 另外, 如何保证KEY PAIR 不碰撞另外, 你给出的LINK 是说用的是椭圆曲线算法, 怎么变成RSA 了? 你估狗的呢?就这一点程度?自然人凭证要由SHA1-1024 变成SHA2-2048 随便估都有.可能反串的吧,Soft_Job版众应该素质挺低的.还有我哪一次砲一砲就溜了?两位高人, 快来解答哦, 别砲一砲就溜了~科科!!!!还有哪位中文不好的PDCMG, 我哪一段说了 SHA256是加密法? 请指出来.
作者: DarkerDuck (達克鴨)   2014-11-29 00:41:00
哈哈~~~~SHA2048~~~BJ4
作者: Lordaeron (Terry)   2014-11-29 00:47:00
哦? 哈哈~~~~?
作者: PDCMG (拜托不要叫我神)   2014-11-29 03:27:00
真的颇哈~你如果只提SHA不提RSA...那你又何必提Key pair?就跟你说SHA只是HASH跟Key pair有啥关系?如果你要提Key pair那又跟SHA有啥关系?还是你根本不知道HASH是啥或是干嘛用的!?看来您出问题的应该不只是中文~XD
作者: PriusC   2014-11-29 04:32:00
其实Lordaeron问的都是好问题 不过自己找解答不是比较好吗这些问题几年前就讨论过了他说的key-pair指的是ECDSA private key不是SHASHA是用来proof-of-work严格说起来比特币里面没有东西是加密的
作者: popcorny (毕业了..@@")   2014-11-29 08:25:00
http://moica.nat.gov.tw/html/faq6-024-037.htmA:凭证管理中心使用2048位元RSA金钥及SHA-1杂凑函数演算SHA-1比SHA-256弱,而且SHA是拿来挖矿的..你所谓的破解就是去挖矿... 所以那个难度只是用来增加挖矿难度而已还有Public/Private本来就不需要第三方来签章发行因为就是要匿名性了啊,基本上private key就是你的钱包
作者: Lordaeron (Terry)   2014-11-29 12:26:00
PDCMG 别拗我没讲过的话了. 你省省吧. 我也没提过RSA全都是你提的而已, 你自已的想像然后套到我头上来看来你是脑子有问题了.popcorny没第三方管理, 所以才要问, 如何确定不碰撞.PriusC 不是说了是ELIPTIC CURVE 了, 你重复一次是?
作者: popcorny (毕业了..@@")   2014-11-29 12:33:00
key是2048bit耶 要破撞的机率太低了吧..
作者: PriusC   2014-11-29 12:34:00
碰撞机会不高啦 与其担心这个不如担心entropy不够crypto lib 有漏洞 例如说之前android的java乱数产生有问题同样一组私钥签两次名 乱数不变 导致私钥被反推算出来好像有一些BTC被盗吧 有一些是发现漏洞的人主动先盗走BTC后来也全数归还拥有者BTC用的privkey是256bit喔
作者: popcorny (毕业了..@@")   2014-11-29 12:51:00
Yes.256bit. 感谢指正
作者: Lordaeron (Terry)   2014-11-29 12:52:00
碰撞机会不高啦? 请问源出何处?密码学的东西, 一个是理论问题, 一个是实作问题.这些LIB 还有一直在PATCH.
作者: PriusC   2014-11-29 13:58:00
你可以去google也可以自己算一下啊 囧
作者: Lordaeron (Terry)   2014-11-29 14:00:00
你在鬼打架? 自已打自理, 理论上够成立, 实作就保证?
作者: Lordaeron (Terry)   2014-11-29 14:02:00
哪会出现你讲的故事是? 你在作梦?
作者: PriusC   2014-11-29 14:02:00
不知道你在不爽什么 你问的问题网络上都有一直在那边质疑质疑 是那么不爽比特币?我讲的什么故事@@
作者: Lordaeron (Terry)   2014-11-29 14:04:00
不知你在爽什么, 你讲的东西, 书上都有, 但跟实作无关crypto lib的故事.
作者: PriusC   2014-11-29 14:04:00
这我同意阿比特币客户端那么多 lib当然也不是只有一个所以lib有漏洞被盗币也是有可能的阿我非常同意 实作的问题http://tinyurl.com/mxfxnox android bitcoin hack的故事甚至可以说如果乱数产生用的芯片被动手脚有后门那光是靠软件lib也没办法http://tinyurl.com/kl4drn8现在离线钱包有人还去买16面骰子来制造乱数咧那你说假如骰子被灌铅怎么办?我想说的是你要的东西网络上都有 可以自己去找答案 @@
作者: Lordaeron (Terry)   2014-11-29 14:40:00
哪所以, 你在DEFENSE 什么呢?
作者: PriusC   2014-11-29 14:52:00
没什么 我觉得你说的都是聪明人会有的疑问
作者: PDCMG (拜托不要叫我神)   2014-11-29 16:14:00
您还是没说自然人那来的SHA2048呢?
作者: PriusC   2014-11-29 16:20:00
他搞错了吧 2048位元的是RSA KeySHA 则是升级成跟比特币一样的SHA-2家族
作者: Lordaeron (Terry)   2014-11-29 16:38:00
PriusC 讲对, 我搞错了, 但你还是回我哪来讲RSA 了呢?快找出来吧.另外, ECC 在2013 年, 就出事出了两次了, 也没多神而已
作者: PDCMG (拜托不要叫我神)   2014-11-30 11:17:00
科~从一开始我们就一直在说你把RSA和SHA搞错了啊...你提2048不就是在提RSA吗?科科~连SHA和RSA都搞不清楚会多聪明?!一早承认自己搞错道个歉不就没事了吗?搞错还能态度那么呛的真是颇少见啊...哈哈哈哈
作者: Lordaeron (Terry)   2014-11-30 13:47:00
还想将这两件事连在一起, 如果你找不出来我提过RSA你要道个歉? 哈哈哈.....呢我搞错的是升级的是RSA, 不是SHA, 但你鬼扯的, 是我将HASH 和CRYPT 的用途搞混, 现在还想在扯这件事.聪明的人, 一直扯呢.还有哪一次砲完就溜的, 你还未回呢.你再继续转吧.
作者: DarkerDuck (達克鴨)   2015-12-24 16:54:00
推一个,我会自己在写一份我会一份比较没那么学术,让不是资工专业也能大致了解^写
作者: secretmouse (あやとりの天才少年)   2015-12-24 18:28:00
达克鸭大一个战神XDD

Links booklink

Contact Us: admin [ a t ] ucptt.com