余梁
比特币从2009年诞生,至今已经过去12年了,从一文不值到目前的近4万美金一枚,总市值7 500多亿美金。已经完全成长为一个庞然大物,那么,比特币目前安全性究竟怎样,持有比特币会被其他人偷走吗?
私钥、公钥、地址
就像银行取款、网银转账需要输入密码一样,动用钱包里的比特币也需要密码,这个密码被称之为“私钥”。
与“私钥”对应的是“公钥”,“公钥”就像你的银行账户。每个银行账户都有唯一的账户编号,也就是银行卡号。在比特币网络中,这个银行卡号就是“地址”,别人只要知道你的“银行卡号”(即地址),就可以给你转比特币了。
在银行,开户流程基本是“开设银行账户———给银行卡号———设置银行卡密码———开户成功”。但在区块链世界里,是先设置“密码”(私钥),再开设“银行账户”(公钥),最后给“银行卡号”(地址)。
如果你路上捡到了一张纸条,上面只写着银行卡密码,但没写银行卡号,即便这个银行卡密码是真的,也无法取走相关账户里的钱。
但在区块链世界,只要知道了别人的“银行卡密码”(私钥),就可以知道别人的“银行账户”(公钥)和“银行卡号”(地),可以取走里面的币。
为什么会这样呢?这是因为在区块链中,私钥通过加密生成公钥,公钥转换一下格式生成地址。也就是说,私钥可以推导出公钥,公钥可以推导出地址。
反向推导不可能
既然“私钥可以推导出公钥,公钥可以推导出地址”,动用账户里的比特币又必须输入“密码(私钥)”,那黑客要窃取你钱包里的比特币,必须、也只需拿到“私钥”即可。
理论上,黑客有2种方法窃取私钥:
1.通过地址/公钥,反向推导出私钥;
2.一个一个地去试私钥,也就是暴力破解。
第一种方法并不可行,因为比特币采用的加密算法,“失之毫厘,差之千里”。输入的内容,稍稍变动哪怕一丁点的东西,加密后输出的结果和之前输出的结果也有天壤之別,而且这些结果没有规律可循。
所以,这种加密算法是单向的、不可逆的,黑客无法通过输出(地址/公钥)推导出输入(私钥)。
暴力破解比特币私钥
既然第一种方法不可行,那第二种方法如何?在回答这个问题之前,先看下私钥是怎么产生的。
假设抛硬币,正面朝上为1,反面朝上为0,连续抛256次,把每次抛的结果记录下来,再转换成十六进制数,就是一个比特币私钥。
没错,比特币的私钥就是通过程序“抛256次硬币”,随机生成的。所以,比特币私钥的本质是256位二进制数。
每次抛硬币,都有正反两面,所以抛256次,一共可以出现「2×2×2×2…2×2×2」,即256个2相乘,也就是2的256次方这么多种结果。所以,比特币的私钥总数,理论上有2的256次方个。
注:私钥总数的实际值比上面的理论值略低,因为有一小部分私钥不可用,但对总数影响微乎其微。
2的256次方是多大呢?它约等于10的77次方。那10的77次方又是多大呢?
如果我们居住的这个地球,海洋、岩石、地底下的岩浆全部用沙子来填充的话,整个地球的沙子数量大概是10的30次方。也就是说,一个和地球一样大,全部由沙子组成的星球,只需要用到10的30次方粒沙子。
10的77次方比10的30次方大10的37次方倍,整整37个0。在比一个地球的沙子数量还要多10的37次方倍的比特币私钥集里,一个一个地试,破解出某个地址对应的私钥的难度超乎想象。所以,即便黑客有超级计算机,都无法暴力破解比特币私钥。
这就是为什么很多人说,“比特币是第一次通过技术手段,保证了个人的私有财产神圣不可侵犯”。
虽然未来的科技如何发展谁都无法准确预测,但如果有一天,人类发明了比超级计算机、量子计算机还要厉害的计算机,比特币私钥不就不安全了吗?
确实,很多人想知道量子计算机到底对比特币的安全性有没有威胁,如果有威胁,比特币有哪些措施可以应对。
鉴于这个问题不是三言两语能解释清楚,安全问题不仅仅牵涉到技术问题,也牵涉到私钥的保存,钱包授权等问题。如果是因为自己私钥保存不当、电脑中了病毒、使用的錢包软件有漏洞或是有后门,导致私钥被黑客窃走,那钱包里的比特币安全性就无从谈起了。
但是,因为自己的失误导致私钥被盗,这锅不能让比特币背,不是吗?所以,如果有人拿比特币被盗事件来质疑比特币的安全性,你会怎么回答他呢?
3288501908202