数学
今年初我偶然跟一个朋友讨论到比特币这个话题,这个朋友没有接触过密码学也没有任何技术背景,因此认为比特币的制造跟随便印钱同样能够超发,仿佛会无中生有,其实大部分人日常所接触的虚拟货币相似Q币之类的,由某个运营商或平台发型做为交换服务的凭证,而该虚拟货币的发行彻底就被该公司控制,现实世界中由政府发行的货币实际上跟这些传统虚拟货币同样,超发与否、价值涨跌彻底由该平台运行者或政府彻底控制。如今咱们经过各类解读知道了比特币并不会平白无故地超发,那么究竟是什么保证了它与“普通”虚拟货币不一样的特性呢?
答案就是数学。
散列
首先从散列讲起,散列又叫“杂凑”,国内也有根据其英文(Hashing)译为哈希,其实从名字的“零散地列出来”、“杂乱地凑起来”来看就知道,这是一种信息摘要算法,而摘要的意思和小学语文的把一段文章的中心大意提取出来相似。在计算机中,散列一般是通过某些特定的手段(例如通过一系列复杂的位运算)提取出某段数据的特征、该特征用来校验(好比验证从网络上下载的一个很大的文件的正确性)。语文课上的归纳中心大意是根据归纳的内容,你能还原出这段讲的内容是什么,而密码学级别的散列则偏偏相反,它使得你提取出来的表示数据特征的代码毫不能还原(或轻易还原)为原来的数据。 举例,如今流行的一种散列函数叫SHA-1,当你提交一个字符串: “The quick brown fox jumps over the lazy dog” 做为SHA-1的参数时,获得以下摘要信息: 2fd4e1c6 7a2d28fc ed849ee1 bb76e739 1b93eb12 可是哪怕你修改了一个字符: “The quick brown fox jumps over the lazy cog” 获得的结果也会发生翻天覆地的变化: de9f2c7f d25e1b3a fad3e85a 0bd17d9b 100db4b3 散列函数的这些特性保证了它不会轻易地经过小的修改和得到摘要的差异分析出算法的漏洞,以保证原始数据的安全。 那么散列函数该怎么用呢?它一般以“证实”的工具用。好比说Alice有一个字符串: “The quick brown fox jumps over the lazy dog” Bob说我也有那么一个字符串和 Alice 同样,可是Bob并不信任 Alice,万一Alice是假装那就会把本身真实的字符串泄漏给假 Alice;同时Alice也不信任Bob,由于若是Bob是冒牌的本身同样会把真实的字符串泄漏给假Bob;更可怕的是旁边站着一个间谍Eve时刻监听着Alice和Bob进行字符串交换的过程而且得到该字符串。那么如何让Alice和Bob两人互相相信对方不是冒牌货呢?简单的方法是两人将本身的字符串进行散列运算,而后比对便可。这样就算有人监听或者对方是冒牌货也不会泄漏原始数据。 这些相似SHA-1的散列函数是怎么来的呢?是通过美国国家安全局 (NSA) 设计美国国家标准技术研究院 (NIST) 发布的。而一个著名的散列标准(包括其余的加密标准)公开招标的过程是彻底公开的,全部提交的算法和标准都会通过来自全世界无数顶级的密码学家的检验,因此能够基本认为“同时期”流行的散列算法(包括其余加密算法)是安全的。 从以上讨论能够看出散列的过程是不可逆的,因此具有证实原始数据同时保护原始数据的能力。最近不少网站爆出明文密码让众人哗然,由于对密码进行不可逆的散列运算是保证用户信息安全的最最基本的措施之一,而这些网站居然都没有作该措施(想象一下明文密码泄漏后被人利用会用来尝试登陆受害者的邮箱等其余账号)。 工做证实 那么比特币从哪来呢?就从这些散列函数的运算结果来。想象一下咱们计算这么一道题,到底输入什么样的字符串,会获得一个散列结果开头是0?有人说我把该函数反向推导获得一个反函数不就能够得到原始结果吗?那可不行,由于这些散列函数是很是严密的通过无数数学家检验的,具备“密码学”级别安全度的,绝非轻易推导就能推导出来的,得到一个未知的原始结果的方法只能是穷举,换一句话说就是猜,把全部可能的结果一个个代入散列函数进行尝试,若是你敲得到了开头为0的结果,恭喜你,你解出了该“数学题”,奖励比特币若干,该解题的过程就叫作挖矿(Mining)。刚开始这样的工做是很是简单的,一道题只须要普通我的电脑的 CPU 就能快速解出最初的几道题,随着挖矿的人数增长题目会越变越难同时得到的收益会愈来愈低,由于一样的时间内只会产生必定数量的比特币,而分配的过程只会根据按而解出题目的个数。为了得到更多的比特币,有的人把解题的过程编制为显卡的GPU程序,由于显卡的特色你们都知道,就是有不少流处理器能够短期内作大量运算。买了高性能的显卡的人愈来愈多,用显卡挖矿的收益愈来愈少,因而一些人则干脆本身设计硬件,用专用的集成电路(ASIC)进行该解题过程,这类拥有大量专用挖矿集成电路的机器就叫作“矿机”。 分布式 那么有人说,假如本身反复给本身出一些本身早就找到答案的“数学题”而后本身快速解答,岂不是能随意得到比特币?固然不行。比特币设计精妙的地方、同时也是区别于其余传统货币的地方就在这里。“数学题”的产生并不是本身说了算,而是全部人一同采矿而且每一个人都存储着一份采矿得到的结果比特币的交易记录,本身制造的假的结果不算数,还得必须获得全网的其余人的承认。这么设计的结果就是,一我的不能随意伪造本身的财富,而本身已有的财富则会获得全网全部人的证实而不会被轻易剥夺。 证实力? 这些密码学支撑的虚拟货币到底安全吗?“ 从技术的角度来讲,一般来讲(下文会详细解释)”是安全的,实际上咱们平常上网、银行、军事等活动中都是靠密码学来支撑,如今已经没法想象没有这一系列密码学保障,咱们日常的生活会变得怎么样,而密码学归根结底就是数学。 这里咱们看到,实际上数学已经彻底做为一种天然元素而非人造的产品支撑着各类基于密码学的货币,它的证实力甚至强于黄金。 而单单有数学的保证还不行,还得从社会的角度获得证实,也就是足够多的人相信比特币能改变他们的生活,能提供一种便携的支付手段,甚至仅仅相信它能做为炒做的工具而使用,这些通过大量散列运算获得的数据块就是有价值的。 安全性 对于安全性方面咱们还须要进一步讨论。首先说明,安全并非一个数学公式、或一个算法的采用,更不多是一个所谓的“安全产品”能保证的,安全是一系列正确实施的过程的组合。 举例,某公司为了保证本身产品的设计图纸或者源代码的安全,给公司每台机器安装了杀毒软件,公司部署了最好的防火墙,进门出门须要验证指纹,同时每一个人不能携带存储设备出入也不能链接Internet。最后该公司的设计图纸和源代码仍是被对手公司的间谍获取了,获取的方法很简单,该间谍贿赂了公司主管,让该主管复制了一份设计图纸和源代码带出公司交给间谍…… 比特币也是同样,你说不能简单用安全或者不安全来归纳,而应该考虑与比特币相关的全部环节,同时每一个环节的安全措施都要作到位才能减小损失。 下面我根据发生的几率从高到低把一些可能威胁到比特币安全的事件列出来: 交易平台 毫无疑问交易平台是最脆弱的环节之一,你将各类虚拟货币保存在交易平台(或者说托管在交易平台)那么你对该货币安全性的惟一措施几乎就剩下登陆和交易密码的保护了。交易平台被攻击或被入侵的时间层出不穷,而损失也是惨重的,举几个例子: 10月23日,web比特币钱包Inputs.io被入侵,价值120万美圆比特币被盗窃; 10月26日,比特币交易平台GBL携客户存款跑路; 4月三日,交易所 Mt.GOX被DDOS攻击,比特币价格大幅下跌; …… 确保交易平台的安全性的方法除了制定良好的登陆和交易密码以外,最好的方法是把一部分比特币转移到本身私有的钱包,本身的安全性由本身保证,这样无论交易平台是跑路仍是被攻击也不至于损失所有。 本地钱包的安全 钱包文件记录着证实本身对该钱包全部的私钥等重要信息,因此本地钱包必定要安全保管而且妥善备份。保护本地钱包同时意味着必须保证本身的电脑上有足够的安全措施,包括操做系统(尤为是Windows这样的大众操做系统)必须及时更新(包括升级到较新的版本,好比2013年来讲应该升级到 Windows 7 或 Windows 8 ),使用自带的更新功能(好比 Windows Update )打上最新的补丁,若是有必要的话装一些安全软件,例如防火墙和杀毒软件也是不错的选择。 山寨币上位 随着比特币的流行,无数的山寨币也被强势推出,听说创造一个新的山寨币只须要1个比特币。这些山寨币中抱着捞一把就走,改改比特币客户端参数的大有人在,可是其中一些也提出了必定的改进(好比性能、交易时间等),这些改进中不乏有价值的改进。能够碰见一旦一个新的山寨币提供了足够吸引人的特性或者解决了比特币面临的一些严重的问题,将会迅速上位而且压过比特币的先发优点。 密码学级别的破解 比特币使用的算法遭到破解,虽说起来好像天方夜谭可是不是没有可能发生,好比历史上曾经流行过的对称加密算法DES由于密钥太短早就推荐不使用,而转为用3DES、AES以及Blowfish等替代;曾经流行的流加密算法RC4由于强度不够也遭到各类有效的攻击;而流行的散列算法MD5在2004年被山东大学数学系教授王小云发现了快速碰撞的方法把产生碰撞的步数从以前的2的80次方前后下降到2的69次方和2的63次方(这个下降的级别在计算机的角度是惊人的)。 咱们能够看看一些著名的加密算法提出的时间以及到被不推荐使用甚至废弃(遭到很是有效的攻击)的时间: MD5(1992-2004),12年; SHA-1(1995-2013),18年; DES(1976-1999),23年; 如今的产品中MD5和SHA-1还在大量使用,微软官方博客就宣布在2016年以前废弃SHA-1和RC4了。 比特币设计比较领先,2009年产生时已经使用了当时已经确立标准的最新的[SHA-256](http://en.wikipedia.org/wiki/SHA-2)以及RIPEMD-160散列算法,同时还选择了很是先进的采用secp256k1曲线的椭圆曲线公钥算法。这些密码学的基础措施在目前(2013年)看来依然十分安全,可是随着密码学家进一步的研究配合更加高性能的机器的暴力破解,这些算法会变得愈来愈脆弱,此时不管是迁移到新算法仍是增强现有算法都会变得很是困难。 大运算力的暴力破解 有人计算过,一个比特币私钥的长度是256 bits,要穷举全部的可能来破解该私钥须要: pow(2,128) / (15 * pow(2,40)) / 3600 / 24 / 365.25 / 1e9 / 1e9 = 0.6537992112229596 也就是650000000000000000年。看上去好像比特币绝对安全了,可是若是考虑摩尔定律,每18个月计算机的性能提升一倍,两个十八个月就变成了原先的四倍,这样的增加其实是很是惊人的。计算下来的结果就是只要59年后,计算机就可以在有意义的时间(好比1.13年内)破解一个私钥,也就是破解了某人的钱包,这是很是危险的。 你可能会说59年也足够长了,且慢,你还没考虑到专门针对破解用的硬件。显卡和专用集成电路制造的矿机能用来挖矿,为何不能用来破解? 政府的政策 虽然比特币等基于密码学的货币的一个功能就是抗来自政府的通胀,可是千万别觉得政府的措施会颇有限,若是须要剿灭(或者在某一地区剿灭)比特币,只须要在比特币赖以生存的介质网络上下手便可。在比特币找到更加难以封锁的介质以前,来自政府的态度也是不容忽视的。