2017年5月12日,一种名为WannaCry的“蠕虫式勒索病毒”利用微软的TCP445端口漏洞,攻击主机并加密主机上存储的文件。从中国到英国、意大利、俄罗斯等150个国家受到网络攻击,影响到金融,能源,医疗等诸多行业。而最引入注目的还有“勒索病毒”所要的赎金是比特币,这点再度引发了各界的强烈关注。
相信所有人都会疑惑,为什么黑客指明要比特币支付赎金?账号不能被追踪么?
这个得从比特币的特性来说,因为比特币具有便捷性、匿名性,可以实现快速全球转账的特征,才被犯罪组织所看中。
在比特币网络中,拥有者的身份只以一组加密的计算机代码形式出现。网络只记录了一个比特币是由哪个地址挖出来的,如何流转,但这些地址的拥有者身份却无从查实,相关交易可以轻易地从政府监管的视野中隐形,而监管者难以跟踪或拦截。
相比其他方式,利用比特币汇款要“隐秘”的多。正常的跨国汇款而言,会经过层层外汇管制机构审查,且交易记录会被银行在内多方记录在案。交易超过一定额度后,需向有关部门上报,防止洗钱等违规行为。
以上只是浅显的解释了这个问题,为了更深入的探讨以上问题。我将依据比特币底层原理展开阐述。
1.比特币是什么?
比特币是由中本聪在2009年提出,根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P形式的数字货币。作为一款开源软件,比特币的协议栈可以跨平台的运行于电脑、手机等诸多电子设备之上,这使得比特币技术易于获取。比特币可以在特定的交易所或者交易软件上换取世界范围内的任何合法币种,国内比较大型的比特币交易机构如:火币网、okcoin等。从比特币的设计理念来说,它是目前为止最理想的货币形态,快捷、安全、无国界,嫣然一副世界通用货币的姿态存活于世。
比特币不同于传统的货币,它完全虚拟的,是特定的数字代码。比特币的最终所有权是通过一套分布式记账本系统,记录比特币交易的流水和时间戳来确认的。但是比特币网络没有特定的中央服务器,是通过矿工来记录比特币交易,网络中任何一台计算机都可以成为矿工,用该计算机的算力来验证和记录交易。平均每隔10分钟,就有一台计算机成功验证和记录过去10分钟内的交易,作为挖矿的报酬,将会获得一定数量的比特币和记账手续费。此外,比特币的总数量是固定的2,100万枚,造成通货膨胀是不可实现的。
其实比特币系统类似于银行系统,也是一个账本,记录了每个人的交易记录。唯一的区别是比特币的交易信息不保存在中央服务器中,而是保存在所有连接到比特币网络的每一台计算机内。
2.比特币账户体系——密钥、比特币地址体系
比特币的所有权是通过数字密钥、比特币地址和数字签名来确立的。数字密钥分为公钥和私钥,可以简单的把公钥理解为收款人的银行账号,私钥为账户密码。而比特币地址是由公钥通过不可逆加密获得的。公钥、私钥、比特币地址的对应关系如下图:
私钥通过非对称加密算法——椭圆曲线相乘法计算得到公钥,然后公钥通过单向哈希算法得到比特币地址。而这个比特币地址就是黑客勒索赎金的所提供的账号,从算法的过程可以看出,只依据比特币地址要追踪到比特币持有人几乎是不可能的。
2.1公钥生成
椭圆曲线加密法是一种基于离散对数问题的非对称加密法,可以用对椭圆曲线上的点进行加法或乘法运算来表达。比特币所用的椭圆曲线函数是
y2 mod p = (x3 + 7) mod p(p为素数)
对应曲线如图所示:
在比特币系统中,以一个随机生成的私钥k为起点,将其与椭圆曲线上已定义的 生成点G相乘以获得曲线上的另一点,也就是相应的公钥K。比特币密钥的生成点都是相同的:
{K = k * G}
简单描述就是在曲线上G点的切线与曲线相交的点在X轴上的对称点就是其中一个私钥k值对应的公钥。依据下图,可以想象得出该数学运算是单向不可逆的,所以私钥可以转换为公钥,但公钥不能转换回私钥。
顺便提一句:破解一个228字节的椭圆曲线秘钥的时间,等同于破解一个2,380字节RSA秘钥的时间,需要煮沸地球上所以水的电力能量,这几乎是不可能的事情。
椭圆曲线密码学的具体原理可参考:
1.椭圆曲线ECC加密算法入门介绍
2.一个关于椭圆曲线密码学的初级读本
2.2 生成比特币地址
比特币地址是一个由数字和字母组成的字符串,,由公钥生成的以数字“1”开头密码串。形如:
1J7mdg5rbQyUHENYdx39WVWK7fsLpEoXZy
比特币地址可由公钥生成比特币地址时,使用的算法是SHA256和RIPEMD160。以公钥 K 为输入,计算其SHA256哈希值,并以此结果计算RIPEMD160 哈希值,得到一个长度为160比特(20字节)的数字:
A = RIPEMD160(SHA256(K))
其中,K是公钥,A是生成的比特币地址。
为了提高了可读性、避免歧义并有效防止了在地址转录和输入中产生的错误。比特币地址是一般会利用“Base58Check”编码。
3.比特币底层原理——区块链技术
知道了比特币的账户体系机制,那么比特币的交易机制又是怎么样的呢?
比特币网络中,平均每隔十分钟,交易记录将被永久记录,这十分钟内的数据都将存储在一个新区块中。每一个区块组成的数据链路被称为区块链。在绝大多数情况下,区块数据一旦写上,就再也不能改变或删除。每个区块记录了它被创建之前发生的所有事件。类比记账本,就是每一个区块类似于账本的其中一页,整个区块链构成了整个账本。只是账本在比特币网络中每台计算机内都有一模一样的一份,保证了账本无法作假。
这里其实涉及到一个核心问题:分布式系统中怎么确保数据的一致性,其中一台计算机修改了自己的账本,全网如何识别作假。这边引入了有名的拜占庭将军问题。
3.1 拜占庭将军问题
拜占庭将军问题描述版本诸多,但是大同小异,这里做一个简单的非正式描述:拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。基于一些原因,这10支军队不能集合在一起单点突破,必须在分开的包围状态下同时攻击。他们任一支军队单独进攻都毫无胜算,除非有至少6支军队同时袭击才能攻下敌国。他们分散在敌国的四周,依靠通信兵相互通信来协商进攻意向及进攻时间。困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。在这种状态下,拜占庭将军们能否找到一种分布式的协议来让他们能够远程协商,从而赢取战斗?这就是著名的拜占庭将军问题。
应该明确的是,拜占庭将军问题中并不去考虑通信兵是否会被截获或无法传达信息等问题,即消息传递的信道绝无问。Lamport已经证明了在消息可能丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。所以,在研究拜占庭将军问题的时候,我们已经假定了信道是没有问题的,并在这个前提下,去做一致性和容错性相关研究。
具体可以参考:拜占庭将军问题深入探讨
3.2工作量证明
比特币通过对这个系统做出一个简单的(事后看是简单的)修改解决了这个问题,它为发送信息加入了成本,这降低了信息传递的速率,并加入了一个随机元素以保证在一个时间只有一个城邦可以进行广播。它加入的成本是“工作量证明”,它是基于计算一个随机哈希算法,唯一做的事情就是获得一些输入然后进行计算,并得到一串64位的随机数字和字母的字符串,就像这个:
d70298566aa2f1a66d892dc31fedce6147b5bf509e28d29627078d9a01a8f86b
在比特币的世界中,输入数据包括了到当前时间点的整个区块链。并且尽管单个哈希值用现在的计算机可以几乎即时的计算出来,但只有一个前13个字符是0的哈希值结果可以被比特币系统接受成为“工作量证明”。这样一个13个0的哈希值是极其罕见的,并且在当前需要花费整个比特币网络大约10分钟的时间来找到一个。在一台网络中的机器随机的找到一个有效哈希值之前,上十亿个的无效值会被计算出来,这就是减慢信息传递速率并使得整个系统可用的“工作量证明”。
000000000000084b6550604bf21ad8a955b945a0f78c3408c5002af3cdcc14f5
那台发现下一个有效哈希值的机器(或者说在我们类比中的城邦),把所有的之前的信息放到一起,附上它自己的,以及它的签名/印章/诸如此类,并向网络中的其他机器广播出去。只要其他网络中的机器接收到并验证通过了这个13个0的哈希值和附着在上面的信息,他们就会停止他们当下的计算,使用新的信息更新他们的总账拷贝,然后把新更新的总账/区块链作为哈希算法的输入,再次开始计算哈希值。哈希计算竞赛从一个新的开始点重新开始。如此这般,网络持续同步着,所有网络上的计算机都使用着同一版本的总账。
与此同时,每一次成功找到有效哈希值以及区块链更新的间隔大概是10分钟。在那10分钟以内,网络上的参与者发送信息并完成交易,并且因为网络上的每一台机器都是使用同一个总账,所有的这些交易和信息都会进入遍布全网的每一份总账拷贝。当区块链更新并在全网同步之后,所有的在之前的10分钟内进入区块链的交易也被更新并同步了。因此分散的交易记录是在所有的参与者之间进行对账和同步的。
最后,在个人向网络输入一笔交易的时候,他们使用内嵌在比特币客户端的标准公钥加密工具来同时他们的私钥以及接收者的公钥来为这笔交易签名。这对应于拜占庭将军问题中他们用来签名和验证消息时使用的“印章”。因此,哈希计算速率的限制,加上公钥加密,使得一个不可信网络变成了一个可信的网络,使得所有参与者可以在某些事情上达成一致(比如说攻击时间、或者一系列的交易、域名记录、政治投票系统、或者任何其他的需要分布式协议的地方)。
3.3 比特币安全
某个黑客想修改某个区块,一般情况下这是很难做到的,因为诚实的矿工会在最长的区块链上不断的增加新的区块,而整个比特币网络只认可最长的区块链。当黑客想修改某个区块时,由于后一个区块里面包含了前一个区块的hash值,因此会生成一个新的分支,只有当他在新的分支上面生产区块的速度,超过诚实旷工生产区块的速度时,才能真正做到记录的修改。
因此,该黑客需要有超过诚实矿工的运算速度,也即至少需要拥有全网51%的算力,这就是比特币51%攻击。我们可以认为比特币是安全的,以下几点可以看出:
- 得到全网51%以上的算力在现实社会是不太可能发生的。
- 即使某些黑客拥有全网51%以上的算力,它也只能修改自己的交易记录从而把自己刚付给别人的钱拿回来。因为交易是有比特币发送方的数字签名的,他很难伪造别人的数字签名从而把别人的比特币发送给自己。
4 比特币展望
比特币或者以区块链技术为基础的数字货币希望实现中本聪所展望的那样:建立一个分布式、去中心化、无中介、安全的世界,将数据安全、数据效验交给上帝。这也是他设计比特币,设计区块链技术的本意。虽然我不敢妄言能不能实现,但是区块链技术确实存在广阔的想象空间。
- 数据安全交给上帝的数据存储理念,给大数据时代的数据安全提供了一个可行的技术方案。
- 数据货币的实现,将推动货币的无纸质化,降低货币成本,同时银行、中央结算等金融结算结构将不复存在,取而代之的是上帝结算系统。
- 对于中介公司,最大的诱惑莫过于消除黑职介。区块链网络作为上帝系统,一旦发现用户诚信出现问题,将周知全网,黑职介将无所遁形。