本文属非商业用途,文中借鉴他人处均已注明出处,若侵犯原作权益,请联系删除,谢谢
简介
近两年火起来的除了人工智能(机器学习),P2P还有区块链。作为IT从业者也需要紧跟潮流,了解下技术动态。简单整理了网上一些琐碎资料,加上个人理解,作为一篇小报告吧。
为什么火?个人感觉是比特币的火爆,尤其前几天的黑客事件,勒索的是比特币而非法定货币。问题来了,为何勒索比特币?这就是他的匿名性,目前凡电子形式法定货币都是比较容易追踪的,这也有好处,比如把钱打错人了,理论上是可以追回的。由于比特币的这种特殊性质,成为理想的“电子黄金”(黄金显然也是不记名的)。
作为技术人员,不关系其应用,关心下技术框架吧(技术细节也不关系,否则要整个专题了,推荐图书《精通比特币》,若不打算从事此方向,不必深究)。
要讲比特币,先说区块链。
什么是区块链?
标题:什么是“区块链”?
作者:懒猫
地址:http://8btc.com/forum.php?mod=viewthread&tid=24008&page=1#pid273016
这篇文章讲非常棒,像作者致敬,同时配图也很精彩,老少皆宜^_^。
原始村庄案例
在这个世界上某个原始的封闭小村庄里,目前还处在用金条作为货币来进行商品交换的时期。
然而金条这么重,抱着金条跑来跑去很不方便,金条储存在家里又占地方。
于是有一天,村长想出了一个好主意。
这年的年初,村长在某村的村口召开全体大会,宣布要在自己家设立一个大账本,村民们上交金条,村长就在账本上做记录。
此后比如小张拿两个金条换小李的一头牛的时候,就给村长打个电话说明情况。村长看看账本,先得确定小张是否真的有两个金条,如果有就划归到小李名下,再打个电话告诉小李。而小李得知转账成功后,再把牛给小张。
村民们都很信任德高望重的村长,于是纷纷把金条交给村长家,村长家的大账本正式运营起来了。
一个春天过去了,一切交易都井然便利地进行着,只是村长一个人渐渐应付不了繁多的记账和电话,就雇佣了几个帐房先生管理账本。
可是没想到夏天的时候出了个事故,一个帐房先生被人抓住偷偷把别人家的金条记在自己家的账上,民情激愤之下村长只得当机立断开除了这个帐房先生,并宣布自己亲自监督和审查每一笔交易,这才稳住了民心。
秋天收获了,盛产庄稼的某村和盛产水果的隔壁东村开始有了频繁的商品交易,村民们懒得换现金,就请求村长把账本业务拓展到隔壁村。没想到,当村长拿着账本到了东村的地界,东村村长根本不认村长的账:“俺们村也有账本,但不是这么记的。你们这种记法俺们看不懂。”这时候,村民们开始有点沮丧。
冬天的时候,村长的门口突然来了个小孩,声称自己的母亲王翠花意外过世,想把妈妈存着的金条全部拿走,另谋生路。村长这下犯难了,之前从来没有见过这小子啊,莫不是翠花的私生子?可又万一是个骗子呢?于是村长只好说:只有你证明翠花是你妈了,我才能把钱给你。小孩拿出一张他妈的书信,村长挠头,这字迹是可以伪造的啊!万般无奈之下,小孩愤而离去。
虽然经历了种种波折,但终于挨到了过年,在年夜这天傍晚,村长又在村口召开了一次村民联欢晚会,想要回顾一下这一年的账本计划,重振一下村民对账本模式的口碑。可是还没等他说完,他家宝贝小儿子就因为玩炮仗把他家给炸了,账本也给毁了……
全村人都傻眼了,连村长都不值得信任了,今后到底该咋办?
这时候,一个叫中本聪的聪明人突然不知道从哪里冒了出来,贼兮兮的说:“我来给你们出个解决方案吧,我叫它区块链。这个方法我已经在我开发的比特币体系中实践和应用了,刚好可以拿来解决你们村的问题。”
中本聪的提议并不复杂,各家还是把现金转化成账上的记录,但是从此就不再在大账本上记账了。
当张三要拿两个金条换李四的一头牛时,中本聪悬赏一定的金额让大家帮着检验记账,第一个验证出“张三确实有两个金条并且确实把两个金条给了李四”的人被授予“矿工”称号并获得一定奖赏。“矿工”需要把这一笔交易写在一张编号001的纸条上;第二天李四拿出一个金条找王二买一只鸡,村民们便抢着翻阅大账本和编号001的纸条,验证成功后把交易内容写在编号002的纸条上,并在纸条上写上“之前交易内容见001”,以此类推。这时候,只要账本的“初始状态确定”,每一张纸条的记录“公开可验证并有时序”,当前每个人持有的钱数都是可以推算出来的。
于是,我们发现,在这种机制下,问题迎刃而解了。
区块链方案所有的规则都是公开透明的(建立的数学算法上),所以村民们获得了共识,可以相互之间达成信任;
账簿只在村长或者账房先生手上,造假的可能性就非常高,但每个人手里都有一本账簿,除非你说服了整个村里超过51%的人都更改某一笔账目,否则你的篡改都是无效的。另外,就算某个人手里的账本损坏,其它人手里都有副本,完全不用担心。
更进一步,除了账目,还可以把个人身份按照同样的原则记录在案,在需要核实的时候进行查询,实现自证的目的。
听到这里,村民们明白区块链的本质了:一个公开透明的可信赖的帐务系统,它能安全的存储交易数据,并且无需任何中心化机构的审核,因为这个过程完全是由整个网络来完成的。
从比特币的角度再次理解区块链
在以上这个故事的前提下我们再来说说比特币,由于区块链是伴生着比特币出现的,这样可以加深对区块链的理解。
和全体村民共同拥有的账本一样,比特币只有一个区块链——那就是在全球拥有的,没有任何主权国家去管理它,也没有任何中心 机构可以管理它,而且几乎没有哪个国家能够伤害它,不仅黑客无法伤害比特币区块链,政府也无法伤害比特币区块链。
我们将比特币的交易过程和上文中村民抢着记账的过程进行类比:如果你在区块链上,把比特币从A帐户付到B帐户,每个帐户有一把公钥、私钥,采用非对称的加密方法,所以你公钥是可以解码的,但是私钥到现在为止,没有人有这个能力,不管是政府还是黑客。
你只需要向全网广播:我要从这个帐户汇一笔钱到B帐户去,然后把B帐户的公钥也公布了,这事情就结束了,跟你没有关系了,剩下的就是由在网络上其他的人去抢,抢到这个把你这笔交易记帐的权利。
怎么抢呢?开始对你公布的这两个公钥进行解密,所以需要拥有很大的计算能力,才能够把它解开,对公钥解密,确认A帐户里面确实有100个比特币,然后再把B帐户的公钥解开,你把钱寄到他那里去,这就是我们俗称的挖矿,你把这个事情做了,每个区块会产生25个新的比特币(奖励每四年会减半,比特币到如今已经7个年头了),你就可以得到这个奖励。
大家应该看过这样的一个段子:数年前,A借了B君20000块,但是到了期限没有现金还给B,只好给了B君2000个比特币,B君当时不知道比特币是什么玩意儿,也就把这事儿忘了。某一天突然看到新闻说比特币大涨,多么多么值钱,赶紧回去看了眼自己的账户,于是,转眼他就变成百万富翁了........
且不论这个事情的真假,至少说明,几年前挖比特币是很赚钱的,但是鉴于目前比特币快被挖完了,挖的难度也越来越大,没有原来那么好赚了而已.....
当前比特币交易的一次确认时间大约平均是10分钟,这个特点跟现有银行体系和企业的结算方法有很大的差别。银行下午5点钟必定关门,不可能24小时营业,因为每天要结算,所以大部分的金融欺诈就这样产生净额交收当中——因为你事情已经记了,但是钱还在途,每家银行第二天一定要对头一天的帐进行修正,没有一家银行能够在下午5点钟截止之后,把事情和帐做平的,一定有钱在途而银行还没有收到,但是那个帐银行得先记,钱是没来的。第二天也许钱来了,你就要对头一天的帐重新平衡,也许这个帐就没收到,出现差错,这是必然的现象,但是比特币的区块链是24小时的,每10分钟结一次帐,比特币区块链上,10分钟的比特币交易变成一个区块,结一次帐一个区块就形成了,10分钟一个区块,任何一个区块,任何这10分钟的区块结帐的时候,基本上有三方面的内容:
- 上一个10分钟的所有比特币交易的摘要。
- 10分钟内比特币区块链上所有比特币交易的详细记录。
- 网络上盖一个时间戳,表现是这一段时间所有的帐。
那么这个区块就完成了,接着再进行下一个区块。
看完上文,应该能对区块链,比特币有个大概的认识了。一句话来描述,区块链就是分布式账本,而比特币就是分布式账本的一个具体应用(可以理解为,用账本记金钱可以,记录时间也可以,记录谁欠你几拳头也没问题。同时也可以发明出牛特比,顿特币)
区块链对若干核心问题的处理
作者:Alex Zhao
链接:https://www.zhihu.com/question/27687960/answer/38301765
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
把区块链想象成一个比特币的公共账本,这个账本:
1.存放在互联网的各个比特币节点上,每个节点都有一份完整的备份
2.里面记录着自比特币诞生以来的所有比特币转账交易
3.账本是分区块存储的,每一块包含一部分交易记录。每一个区块都会记录着前一区块的id,形成一个链状结构,因而称为区块链
4.当你要发起一笔比特币交易的时候只需把交易信息广播到p2p网络中,矿工把你的交易信息记录成一个新的区块连到区块链上,交易就完成了。
这里有几个问题:
1.如何保证用户有足够的余额,例如你只有十个币,而你居然发起了一笔转20个币的交易怎么办。
回溯所有的和你账户相关的历史交易就能知道你这个账户上到底有多少余额,余额不对矿工是会拒绝记录你的交易的
2,最初的比特币是从哪里来的呢?
最初的比特币是由系统奖励给记录区块的矿工的。每一个区块在生成的时候就会在生成这个区块的矿工的账户上生成一定数量的新比特币作为奖励。
3,如何保证你的账户不被冒名顶替
数字签名技术。每个比特币账户都有公钥和私钥。你发起交易的时候用私钥对交易信息签名,矿工收到信息后用公钥检查一下签名就好了。所以你的钱不一定是你的钱,而是你的私钥的前,私钥没了,钱就没了。即使你从其他地方偷到了比特币,别人也无法追踪或讨回,除非你泄露私钥。
4.那么多矿工,如何决定该由哪个矿工生成下一个区块?
解决方案是这样的:
中本聪设计了一个数学问题,这个数学问题会耗费大量的计算机cpu时间才能得出答案,同时每一次得出的答案都会作为下一次计算的初始条件进行技术。全世界的矿工一起来计算这个问题,谁先得出答案,他就可以用这个答案生成一个新的区块,再广播到网络中。收到这个新块数据的矿工会立即停止当前的计算,用新块里的数据重新进行下一次计算。这就是所谓的“挖矿”。矿工产生的区块一旦被网络接受,他就能获得一笔比特币作为酬劳。
这时要考虑一种情况:如果同时有两个矿工各自得到一个正确答案,并各自生成了一个区块广播出去会发生什么呢?
这时候在区块链上同一个位置就有了两个区块,所谓的“分叉”就出现了。
分叉是绝对不允许的,所以当矿工发现区块链分叉之后,会选择最长的一条继续计算,短的那条区块链会被丢弃。由于会有丢弃现象,所以就存在隐患。所谓51%攻击。
5,仔细思考下这个体系,你会发现它几乎无懈可击。首先你不能凭空造出比特币,只能挖矿获得;其次你无法伪造交易,无法控制不属于你的账户。一旦交易被确认,几乎无法取消。我这里说“几乎”,是因为有“51%攻击”的存在。51%攻击条件非常苛刻,这里就不扩展开讲了。感兴趣的朋友可以自行查阅相关资料。
51%攻击
所谓51%攻击,就是利用比特币使用算力作为竞争条件的特点,使用算力优势撤销自己已经发生的付款交易。方式就是上文提到过的,利用长链替代短链接,这样短链交易会被清除。
标题:什么是比特币51%攻击?
地址:http://8btc.com/article-1949-1.html
他能够:
1、修改自己的交易记录,这可以使他进行双重支付
2、阻止区块确认部分或者全部交易
3、阻止部分或全部矿工开采到任何有效的区块
但是他无法做到:
1、修改其他人的交易记录
2、阻止交易被发出去(交易会被发出,只是显示0个确认而已)
3、改变每个区块产生的比特币数量
4、凭空产生比特币
5、把不属于他的比特币发送给自己或其他人
一个典型51%攻击案例
比特币发动51%攻击具体思路大致如下:
准备工作:
1. 既然是51%攻击,就必须首先掌握足够的算力,无论是控制矿池,还是利用其它计算资源,总之必须使你的算力领先与现在网络总算力,领先的幅度越大,成功的可能性越高;
2. 拿到足够的BTC作为筹码,无论是自己挖到的,还是从任何渠道买的,都可以;
攻击步骤:
1. 将手中的BTC充值各大交易所,然后卖掉,提现;或者也可以直接卖给某人或某一群人;
2. 运用手中的算力,从自己对外付款交易之前的区块开始,忽略自己所有对外的付款交易,重新构造后面的区块,利用算力优势与全网赛跑,当最终创建的区块长度超过原主分支区块,成为新的主分支,至此,攻击完成;
攻击结果:
由于撤销了所有对外付款交易,等于收回来所以已卖掉的比特币。
可行性评估: 现在比特币全网算力差不多90T,而且还会快速增长,现在看来只有现在的几大矿池联合,才具有发动51%攻击的实力,普通个人或机构实施此攻击的可能性越来越小。
其实关于51%攻击,个人还是存在疑惑的。
第一点,为何是全网算力的51%,个人理解的每个节点独立算题,所以只需要比其他玩家快就ok了。
第二点,重复交易的比特币为何无法被比特币的自我校验逻辑发现,由于比特币创建也会记录账目的,所以通过回溯所有交易其实是可以发现 “支出!=收入”的现象的。