※ [本文转录自 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、丢一次、十次 他可能已经丢一千次一万次了
所以现在难度已经非常高 在有利可图的情况下
经过三年的时间全球的矿工疯狂挖的情况下
还能正常运转 其实就表示要攻破或恶搞是非常有难度的
至少就理论和三年实战看来 至今是非常可靠的
写得有点乱 有空的话再聊其它细节 有想到什么可能的攻击手法可以讨论看看
或许我可以回答得上 那至于信不信有没有那个价值 是不是骗局就免了
谈技术就好 反正我认为信的人信 不信的人还是不信囉 科科