当前位置:首页 » 比特币问答 » 比特币算法波及私钥安全

比特币算法波及私钥安全

发布时间: 2023-06-05 12:22:31

1. 比特币交易在资金安全方面怎么样

国家不承认比特币的合法性。因此,在安全性方面,是不可能有保证的。即使黑客黑了你,也不能报案,不受理。

2. 比特币基础教学之:怎样保护你的私钥

私钥安全问题的重要性对比特币玩家来说不言而喻。对于比特币的重量级玩家或者比特币商家而言,如何保护好私钥更是需要仔细考虑和反复斟酌的。今天编者就和大家探讨一下如何保护比特币私钥的问题。对于bitcoin-qt客户端来说,比特币私钥一般储存在客户端的wallet.dat文件中。对于Blockchain这样的在线钱包用户来说,比特币私钥是储存在在线钱包的网络服务器上,用户也可以将私钥下载到本地。对于纸钱包的用户来说,私钥可以被打印出来。但是,怎样保护私钥的安全性呢?编者列出了几种方法供大家参考。
用对称加密的方法保管私钥 对称加密(Symmetric-key algorithm)是指加密和解密都用一个密钥。我们平时用到的加密方法一般都是对称加密,比如 winrar 中的加密,bitcoin-qt中对私钥文件的加密也是用的对称型加密算法。常用的对称加密算法有:AES、DES、RC4、RC5等等。对称加密需要用户设置相对比较复杂的密钥,以防止被暴力破解。Go to top方法一,用bitcoin-qt对私钥钱包进行加密。我们在命令模式下可以用encryptwallet命令来对钱包进行加密。命令模式的使用方法可以参见比特币基础教学之:怎样使用纸钱包私钥。这是私钥加密的最简易有效的方法。但是在使用walletpassphrase命令进行解密钱包时,密钥会被读入计算机内存中,所以存在攻击者获取密钥的可能性。加密命令: encryptwallet YOURPASSWORD解密钱包命令: walletpassphrase YOURPASSWORDTIMEOUT更改密码命令: walletpassphrasechange OLDPASSWORDNEWPASSWORDGo to top方法二,使用blockchain提供的AES加密。Blockchain为用户提供基于AES算法的私钥文件加密服务。用户可以将加密好的文件下载下来,并妥善保存。
Go to top方法三,用第三方软件Truecrypt对密钥文件加密,这也是编者比较推荐的方法。Truecrypt开源免费,软件成熟度很高,而且支持双因素认证和整个硬盘加密。另外,FBI人员在Truecrypt上面吃过亏,因此口碑很不错。Truecrypt的口碑FBI hackers fail to crack TrueCrypt The FBI has admitted defeat in attempts to break the open source encryption used to secure hard drives seized by Brazilian police ring a 2008 investigation.
The Bureau had been called in by the Brazilian authorities after the country’s own National Institute of Criminology (INC) had been unable to crack the passphrases used to secure the drives by suspect banker, Daniel Dantas.Brazilian reports state that two programs were used to encrypt the drives, one of which was the popular and widely-used free open source program TrueCrypt. Experts in both countries apparently spent months trying to discover the passphrases using a dictionary attack, a technique that involves trying out large numbers of possible character combinations until the correct sequence is found.
完整文章点击这里Truecrypt只支持对称加密算法。使用它的用户必须要将密钥牢记,如果你忘记密钥,那么没有人能够恢复你加密的文件。
Truecrypt官方网站Truecrypt使用文档 用非对称加密的方法保管私钥 非对称加密方法所采用公钥和私钥的形式来对文件进行加密。用户可以用公钥来对文件进行加密,用私钥对文件解密。常见的非对称加密算法有RSA、Elgamal、ECC等等。非对称加密的好处是密钥的复杂度一般很高,可以很有效的防止被暴力破解。缺点是有一定的使用门槛,不太适合普通级用户。Go to top 方法一、个人用户可以考虑使用RSA来进行加密。首先,可以创建公钥和私钥,点击这里生成密钥。将公钥私钥妥善保管后,便可以用公钥加密和私钥解密了,点击这里进行加密和解密。RSA公钥和私钥的产生过程RSA公钥和私钥的产生过程随意选择两个大的素数p和q,p不等于q,计算N=pq。根据欧拉函数,求得r= φ(N) = φ(p)φ(q) = (p-1)(q-1)选择一个小于r的整数e,求得e关于模r的模反元素,命名为d。(模反元素存在,当且仅当e与r互质)将p和q的记录销毁。(N,e)是公钥,(N,d)是私钥。Go to top方法二、比较成熟的非对称加密软件有我们可以采用PGP(Pretty Good Privacy)工具来对文件进行加密。PGP加密可以让每个公钥邦定到一个用户的所有信息。相比RSA来讲,PGP的功能更加完善可靠。但是随着PGP的升级,新的加密消息有可能不被旧的PGP系统解密,所以用户在使用PGP之前应该首先熟悉PGP的设置。PGP加密工具网上有很多,编者就不列举了。
wiki中关于PGP的介绍PGP在线加解密系统PGP命令FAQ 高级方法保管私钥 上述保管私钥的方式都很常见,有经验的攻击者依然可能得到用户的私钥文件。关于更加高级隐秘的私钥保管方式,参见以后的比特币高级教学内容。

3. 比特币的安全性到底有多高,你有怀疑比特币的安全性吗

近期,比特币突破新高,一枚比特币价值近26万人民币,一枚比特币换一辆特斯拉。对于刚入圈的新人来说,你肯定很关心比特币的安全问题。

那么,比特币安全吗?换句话说, 钱包里的比特币,容易被黑客盗走吗?

01
私钥、公钥、地址

就像银行取款、网银转账需要输入密码一样, 动用钱包里的比特币也需要密码,这个密码被称之为“私钥”。

与“私钥”对应的是“公钥”,“公钥”就像你的银行账户。 每个银行账户都有唯一的账户编号,也就是银行卡号。 在比特币网络中,这个银行卡号就是“地址”。 别人只要知道你的“银行卡号”(即地址),就可以给你转比特币了。

在银行,开户流程基本是“开设银行账户——给银行卡号——设置银行卡密码——开户成功”。但在区块链世界里,是先设置“密码”(私钥),再开设“银行账户”(公钥),最后给“银行卡号”(地址)。

如果你路上捡到了一张纸条,上面只写着银行卡密码,但没写银行卡号,即便这个银行卡密码是真的,你也无法取走相关账户里的钱。

但在区块链世界,你只要知道了别人的“银行卡密码”(私钥),就可以知道别人的“银行账户”(公钥)和“银行卡号”(地址),可以取走里面的币。

为什么会这样呢?

这是因为在区块链中,私钥通过加密生成公钥,公钥转换一下格式生成地址。也就是说, 私钥可以推导出公钥,公钥可以推导出地址。


02
反向推导?没门!

既然“私钥可以推导出公钥,公钥可以推导出地址”,动用账户里的比特币又必须输入“密码(私钥)”, 那黑客要窃取你钱包里的比特币,必须、也只需拿到“私钥”即可。

理论上,黑客有2种方法窃取你的私钥:

第一种方法并不可行,因为比特币采用的加密算法,“失之毫厘,差之千里!”。 输入的内容,稍稍变动哪怕一丁点的东西,加密后输出的结果和之前输出的结果也有 天壤之别 ,而且这些结果没有规律可循。

所以,这种加密算法是“单向的”、“不可逆的”,黑客无法通过输出(地址/公钥)推导出输入(私钥)。


03
暴力破解比特币私钥有多难?

既然第一种方法不可行,那第二种方法如何?在回答这个问题之前,我们先看下私钥是怎么产生的。

假设你抛硬币,正面朝上为1,反面朝上为0,连续抛256次,把每次抛的结果记录下来,再转换成十六进制数,就是一个比特币私钥。

What? 这么简单?这么任性?

没错,比特币的私钥就是通过程序“抛256次硬币”,随机生成的。所以, 比特币私钥的本质是256位二进制数

每次抛硬币,都有正反2面,所以抛256次,一共可以出现「2 x 2 x2 x 2……2 x 2x2」,即256个2相乘,也就是「2的256次方」种结果。 所以,比特币的私钥总数,理论上有「2的256次方」个。

注: 私钥总数的实际值比上面的理论值略低,因为有一小部分私钥不可用,但对总数影响微乎其微。

「2的256次方」是多大呢?它约等于「10的77次方」。那「10的77次方」又是多大呢?

如果我们居住的这个地球,海洋、岩石、地底下的岩浆全部用沙子来填充的话,整个地球的沙子数量大概是「10的30次方」。也就是说, 一个和地球一样大,全部由沙子组成的星球,需要用到「10的30次方」粒沙子。

「10的77次方」比「10的30次方」大「10的47次方」倍,整整47个0。在比一个地球的沙子数量还要多「10的47次方」倍的比特币私钥集里,一个一个地试,破解出某个地址对应的私钥,简直比大海捞针还难。

所以,即便黑客有超级计算机,都无法暴力破解比特币私钥。

这就是为什么很多人说 , “比特币第一次通过技术手段,保证了个人的私有财产神圣不可侵犯”。

04
如果比超级计算机还要厉害?

虽然未来的 科技 如何发展谁都无法准确预测,但如果有一天,人类发明了比超级计算机、量子计算机还要厉害的计算机,比特币私钥不就不安全了吗?

确实,很多人想知道量子计算机到底对比特币的安全性有没有威胁,如果有威胁,比特币有哪些措施可以应对。

鉴于这个问题不是三言两语能解释清楚,后面我们会单独开一篇文章,探讨这个问题,敬请期待。

05
结语

当然,安全问题不仅仅牵涉到技术问题,也牵涉到私钥的保存问题。 如果是因为自己私钥保存不当,或是电脑中了病毒,或是使用的钱包软件有漏洞或是有后门,导致私钥被黑客窃走,那钱包里的比特币安全性就无从谈起了。

但是,因为自己的失误导致私钥被盗,这锅不能让比特币背,不是吗?

所以,如果有人拿比特币被盗事件来质疑比特币的安全性,你会怎么回答他呢?

4. 比特币算法原理

比特币算法主要有两种,分别是椭圆曲线数字签名算法和SHA256哈希算法。

椭圆曲线数字签名算法主要运用在比特币公钥和私钥的生成过程中,该算法是构成比特币系统的基石。SHA-256哈希算法主要是运用在比特币的工作量证明机制中。

比特币产生的原理是经过复杂的运算法产生的特解,挖矿就是寻找特解的过程。不过比特币的总数量只有2100万个,而且随着比特币不断被挖掘,越往后产生比特币的难度会增加,可能获得比特币的成本要比比特币本身的价格高。

比特币的区块由区块头及该区块所包含的交易列表组成,区块头的大小为80字节,由4字节的版本号、32字节的上一个区块的散列值、32字节的 Merkle Root Hash、4字节的时间戳(当前时间)、4字节的当前难度值、4字节的随机数组成。拥有80字节固定长度的区块头,就是用于比特币工作量证明的输入字符串。不停的变更区块头中的随机数即 nonce 的数值,并对每次变更后的的区块头做双重 SHA256运算,将结果值与当前网络的目标值做对比,如果小于目标值,则解题成功,工作量证明完成。

比特币的本质其实是一堆复杂算法所生成的一组方程组的特解(该解具有唯一性)。比特币是世界上第一种分布式的虚拟货币,其没有特定的发行中心,比特币的网络由所有用户构成,因为没有中心的存在能够保证了数据的安全性。

5. 高中生如何理解比特币加密算法

加密算法是数字货币的基石,比特币的公钥体系采用椭圆曲线算法来保证交易的安全性。这是因为要攻破椭圆曲线加密就要面对离散对数难题,目前为止还没有找到在多项式时间内解决的办法,在算法所用的空间足够大的情况下,被认为是安全的。本文不涉及高深的数学理论,希望高中生都能看懂。

密码学具有久远的历史,几乎人人都可以构造出加解密的方法,比如说简单地循环移位。古老或简单的方法需要保密加密算法和秘钥。但是从历史上长期的攻防斗争来看,基于加密方式的保密并不可靠,同时,长期以来,秘钥的传递也是一个很大的问题,往往面临秘钥泄漏或遭遇中间人攻击的风险。

上世纪70年代,密码学迎来了突破。Ralph C. Merkle在1974年首先提出非对称加密的思想,两年以后,Whitfield Diffie和Whitfield Diffie两位学者以单向函数和单向暗门函数为基础提出了具体的思路。随后,大量的研究和算法涌现,其中最为著名的就是RSA算法和一系列的椭圆曲线算法。

无论哪一种算法,都是站在前人的肩膀之上,主要以素数为研究对象的数论的发展,群论和有限域理论为基础。内容加密的秘钥不再需要传递,而是通过运算产生,这样,即使在不安全的网络中进行通信也是安全的。密文的破解依赖于秘钥的破解,但秘钥的破解面临难题,对于RSA算法,这个难题是大数因式分解,对于椭圆曲线算法,这个难题是类离散对数求解。两者在目前都没有多项式时间内的解决办法,也就是说,当位数增多时,难度差不多时指数级上升的。

那么加解密如何在公私钥体系中进行的呢?一句话,通过在一个有限域内的运算进行,这是因为加解密都必须是精确的。一个有限域就是一个具有有限个元素的集合。加密就是在把其中一个元素映射到另一个元素,而解密就是再做一次映射。而有限域的构成与素数的性质有关。

前段时间,黎曼猜想(与素数定理关系密切)被热炒的时候,有一位区块链项目的技术总监说椭圆曲线算法与素数无关,不受黎曼猜想证明的影响,就完全是瞎说了。可见区块链项目内鱼龙混杂,确实需要好好洗洗。

比特币及多数区块链项目采用的公钥体系都是椭圆曲线算法,而非RSA。而介绍椭圆曲线算法之前,了解一下离散对数问题对其安全性的理解很有帮助。

先来看一下 费马小定理

原根 定义:
设(a, p)=1 (a与p互素),满足

的最下正整数 l,叫作a模p的阶,模p阶为(最大值)p-1的整数a叫作模p的原根。

两个定理:

基于此,我们可以看到,{1, 2, 3, … p-1} 就是一个有限域,而且定义运算 gi (mod p), 落在这个有限域内,同时,当i取0~p-2的不同数时,运算结果不同。这和我们在高中学到的求幂基本上是一样的,只不过加了一层求模运算而已。

另一点需要说明的是,g的指数可以不限于0~p-2, 其实可以是所有自然数,但是由于

所以,所有的函数值都是在有限域内,而且是连续循环的。

离散对数定义:
设g为模p的原根,(a,p) = 1,

我们称 i 为a(对于模p的原根g)的指数,表示成:

这里ind 就是 index的前3个字母。
这个定义是不是和log的定义很像?其实这也就是我们高中学到的对数定义的扩展,只不过现在应用到一个有限域上。

但是,这与实数域上的对数计算不同,实数域是一个连续空间,其上的对数计算有公式和规律可循,但往往很难做到精确。我们的加密体系里需要精确,但是在一个有限域上的运算极为困难,当你知道幂值a和对数底g,求其离散对数值i非常困难。

当选择的素数P足够大时,求i在时间上和运算量上变得不可能。因此我们可以说i是不能被计算出来的,也就是说是安全的,不能被破解的。

比特币的椭圆曲线算法具体而言采用的是 secp256k1算法。网上关于椭圆曲线算法的介绍很多,这里不做详细阐述,大家只要知道其实它是一个三次曲线(不是一个椭圆函数),定义如下:

那么这里有参数a, b;取值不同,椭圆曲线也就不同,当然x, y 这里定义在实数域上,在密码体系里是行不通的,真正采用的时候,x, y要定义在一个有限域上,都是自然数,而且小于一个素数P。那么当这个椭圆曲线定义好后,它反应在坐标系中就是一些离散的点,一点也不像曲线。但是,在设定的有限域上,其各种运算是完备的。也就是说,能够通过加密运算找到对应的点,通过解密运算得到加密前的点。

同时,与前面讲到的离散对数问题一样,我们希望在这个椭圆曲线的离散点阵中找到一个有限的子群,其具有我们前面提到的遍历和循环性质。而我们的所有计算将使用这个子群。这样就建立好了我们需要的一个有限域。那么这里就需要子群的阶(一个素数n)和在子群中的基点G(一个坐标,它通过加法运算可以遍历n阶子群)。

根据上面的描述,我们知道椭圆曲线的定义包含一个五元祖(P, a, b, G, n, h);具体的定义和概念如下:

P: 一个大素数,用来定义椭圆曲线的有限域(群)
a, b: 椭圆曲线的参数,定义椭圆曲线函数
G: 循环子群中的基点,运算的基础
n: 循环子群的阶(另一个大素数,< P )
h:子群的相关因子,也即群的阶除以子群的阶的整数部分。

好了,是时候来看一下比特币的椭圆曲线算法是一个怎样的椭圆曲线了。简单地说,就是上述参数取以下值的椭圆曲线:

椭圆曲线定义了加法,其定义是两个点相连,交与图像的第三点的关于x轴的对称点为两个点的和。网上这部分内容已经有很多,这里不就其细节进行阐述。

但细心的同学可能有个疑问,离散对数问题的难题表现在求幂容易,但求其指数非常难,然而,椭圆曲线算法中,没有求幂,只有求乘积。这怎么体现的是离散对数问题呢?

其实,这是一个定义问题,最初椭圆曲线算法定义的时候把这种运算定义为求和,但是,你只要把这种运算定义为求积,整个体系也是没有问题的。而且如果定义为求积,你会发现所有的操作形式上和离散对数问题一致,在有限域的选择的原则上也是一致的。所以,本质上这还是一个离散对数问题。但又不完全是简单的离散对数问题,实际上比一般的离散对数问题要难,因为这里不是简单地求数的离散对数,而是在一个自定义的计算上求类似于离散对数的值。这也是为什么椭圆曲线算法采用比RSA所需要的(一般2048位)少得多的私钥位数(256位)就非常安全了。

6. 比特币的地址、公钥、私钥,你都了解了吗

了解比特币,就不可避免地要掌握什么是比特币的地址、公钥、私钥,下面我们一个一个来解释。

地址,就好比是银行账(卡)号,在创建数字钱包后就会自动生成,简单来说,就是创建钱包的时候,先产生一对私钥和公钥,然后公钥通过一套算法生成地址,这个地址实质上是一串字符,比如。

像银行账(卡)号可以用来收款一样,比特币地址也可以用来接收比特币。

这个比特币地址不单单给你转币的人知道,连整个比特币网络的人都能查看,可以说,全球所有用户的地址都可以被任何人知道。为什么这样说呢?因为比特币本质就是一个大型的公开账本,所有交易对所有人都是可见的。而交易记录中包括了交易流水单号、发币人的发币地址、收币人地址、发币人的找零地址。

私钥,可以看作是银行密码,是一串很长的由钱包生成的随机数,比如, LBB9ZXMCJ。私钥是唯一能够证明你拥有的比特币是属于你的,也只有用私钥才能转账、交易和使用数字钱包里的比特币。

我们都知道了,银行密码绝对不能泄露给别人,私钥也一样,打死也不要告诉他人,否则你的比特币很容易就被转走。银行的钱被盗了,因为有国家监管和第三方信用,还有可能被追回,但比特币是去中心化的,没有第三方,自己的币只能自己负责看管,丢了,或被他人转走了,就永远拿不回来了。所以千万千万不要把私钥告诉他人,不要把私钥保存在手机或者电脑上,不要通过网络传输你的私钥,那怎么办?记住了,要用笔写在纸上,写两到三份分别放在不同的地方,保管好。

公钥,顾名思义,是可以公开的,也是像地址和私钥一样,是一串长长的字符。公钥由私钥通过椭圆曲线加密算法生成,通过私钥可以算出唯一一个公钥,但公钥不能逆向推导出私钥。

那到底比特币地址、公钥、私钥在交易中起什么作用的呢?

首先,钱包通过加密算法把私钥加密成字符串(也叫作签名),然后把这个字符串,和公钥一起写到交易信息里,再发给矿工。矿工收到信息后,就会将签名、公钥写入一个验证函数,如果得出的结果为“true”,那么这个交易会被确认为真实有效,就能被验证通过。而结果为“false”,则说明这笔交易存在问题,不能被验证通过。

通过以上浅显的文字,希望能帮到你对比特币的地址、公钥和私钥有一个初步的了解吧!感谢你的阅读!

7. 比特币基础教学之:怎样保护你的私钥

比特币挖矿是利用计算机硬件为比特币网络做数学计算进行交易确认和提高安全性的过程。作为对他们服务的奖励,矿工可以得到他们所确认的交易中包含的手续费,以及新创建的比特币。挖矿是一个专业的、竞争激烈的市场,奖金按照完成的计算量分割。并非所有的比特币用户都挖矿,挖矿赚钱也并不容易。

通俗点就是利用你的挖矿设备的算力解决数学难题,确认交易,根据贡献算力的大小获得不等的比特币奖励。目前,挖矿需要专业的ASIC矿机,例如,搭乘阿瓦隆三代芯片的矿机。

8. 干货:暂时不用的比特币应该怎样存放才安全

最近加了不少微信群,跟着大家伙们学了不少。其中我看到最多的建议是 ,如果你的币暂时不用,最好存冷钱包,安全。

这个很好理解,放在交易平台的币,实际上就是不属于你。当你把币放在交易平台,平台给你打了一个欠条。如果平台拿你的币去干一些偷鸡摸狗的事情,你十有八九是不知道的。

那假如你放在平台的资产是不受监管的,那么这个平台很有可能会挪用你的法币或者比特币去做其他事情。

极端地想一想, 倘若平台卷款逃跑,很有可能是你人财两空,甚至倾家荡产,白白花了这么多时间精力,为他人做了嫁衣,所以这也是我们之前为什么要挑选一些比较靠谱安全的交易所的一个原因。

那么问题来了,怎么着?钱包还有分冷的热的?我赶紧掏出钱包捂在脸上,嗯,这个天气,确实是挺冷的。

开个玩笑, 其实这里的钱包可能指的是钱包客户端, 例如QT钱包,multibit轻钱包,在线钱包等等; 也有可能指的是存储私钥的介质, 例如钱包文件.wallet,纸钱包。

而比特币里的冷热钱包指的是私钥的存储方式。

冷钱包是指网络不能访问到你私钥的钱包。 冷钱包往往依靠“冷”设备确保比特币私钥的安全,比如不联网的电脑、手机、写着私钥地址的小本本等。

冷钱包的电脑之所以离线,第一是病毒木马进不来,最重要的是第二点,即使电脑有木马,离线的电脑私钥不会被木马发出去。

尽管冷钱包避免了被黑客盗取私钥的风险,但是可能面临物理安全风险 ,比如电脑不小心进水了,被老婆砸坏了,被熊孩子删除了等等风险。

相反,热钱包是指互联网能直接访问你私钥的钱包。

使用热钱包时,最好在不同平台设置不同密码,且开启二次认证,以确保自己的资产安全。

平台为了资产的安全,会做很多措施防止黑客攻击,比如冷热钱包分离。平台只留5%的资产用于提现充值,剩下的部分用冷钱包储存。

无论是使用冷钱包还是热钱包,只要其他人知道了你的比特币私钥,就能转走你的比特币。 记住,谁手握私钥,谁才是比特币真正的主人。

问题又来了,什么是公钥私钥?

公钥是密码学上的一个概念,是通过一种算法得到的,一般公钥和私钥是成对出现的。

例如,你要传送一个信息给我,而这份信的内容是机密的。你用我的的公开的钥匙(简称公钥)来加密来送信,而只有用我的私有的钥匙(简称私钥)才能够看到这封信的内容。也就是说你仅仅充当了一个邮递员的角色,只有保管私钥的人才能看到这封信的内容。

根据地址,公钥的概念,就很容易理解什么是私钥。你可以把它看成是你的银行卡密码。

注意:一定要保管好自己的私钥,因为一旦丢失,你手里的比特币就真的没了,永远也找不回来。前几年有很多人屯过许多比特币,但是因为私钥没有,就和好几个亿错过了,好气啊!

那么除了这些,我们在购买比特币的时候还需要注意些什么问题呢?

9. 比特币如何防止篡改

比特币网络主要会通过以下两种技术保证用户签发的交易和历史上发生的交易不会被攻击者篡改:

  • 非对称加密可以保证攻击者无法伪造账户所有者的签名;

  • 共识算法可以保证网络中的历史交易不会被攻击者替换;

  • 非对称加密


  • 非对称加密算法3是目前广泛应用的加密技术,TLS 证书和电子签名等场景都使用了非对称的加密算法保证安全。非对称加密算法同时包含一个公钥(Public Key)和一个私钥(Secret Key),使用私钥加密的数据只能用公钥解密,而使用公钥解密的数据也只能用私钥解密。

  • 图 4 - 51% 攻击


  • 1使用如下所示的代码可以计算在无限长的时间中,攻击者持有 51% 算力时,改写历史 0 ~ 9 个区块的概率9:

  • #include

  • #include


  • double attackerSuccessProbability(double q, int z) {

  • double p = 1.0 - q;

  • double lambda = z * (q / p);

  • double sum = 1.0;

  • int i, k;

  • for (k = 0; k <= z; k++) {

  • double poisson = exp(-lambda);

  • for (i = 1; i <= k; i++)

  • poisson *= lambda / i;

  • sum -= poisson * (1 - pow(q / p, z - k));

  • }

  • return sum;

  • }


  • int main() {

  • for (int i = 0; i < 10; i++) {

  • printf("z=%d, p=%f\n", i, attackerSuccessProbability(0.51, i));

  • }

  • return 0;

  • }


  • 通过上述的计算我们会发现,在无限长的时间中,占有全网算力的节点能够发起 51% 攻击修改历史的概率是 100%;但是在有限长的时间中,因为比特币中的算力是相对动态的,比特币网络的节点也在避免出现单节点占有 51% 以上算力的情况,所以想要篡改比特币的历史还是比较困难的,不过在一些小众的、算力没有保证的一些区块链网络中,51% 攻击还是极其常见的10。


  • 防范 51% 攻击方法也很简单,在多数的区块链网络中,刚刚加入区块链网络中的交易都是未确认的,只要这些区块后面追加了数量足够的区块,区块中的交易才会被确认。比特币中的交易确认数就是 6 个,而比特币平均 10 分钟生成一个块,所以一次交易的确认时间大概为 60 分钟,这也是为了保证安全性不得不做出的牺牲。不过,这种增加确认数的做法也不能保证 100% 的安全,我们也只能在不影响用户体验的情况下,尽可能增加攻击者的成本。

  • 总结


  • 研究比特币这样的区块链技术还是非常有趣的,作为一个分布式的数据库,它也会遇到分布式系统经常会遇到的问题,例如节点不可靠等问题;同时作为一个金融系统和账本,它也会面对更加复杂的交易确认和验证场景。比特币网络的设计非常有趣,它是技术和金融两个交叉领域结合后的产物,非常值得我们花时间研究背后的原理。


  • 比特币并不能 100% 防止交易和数据的篡改,文中提到的两种技术都只能从一定概率上保证安全,而降低攻击者成功的可能性也是安全领域需要面对的永恒问题。我们可以换一个更严谨的方式阐述今天的问题 — 比特币使用了哪些技术来增加攻击者的成本、降低交易被篡改的概率:

  • 比特币使用了非对称加密算法,保证攻击者在有限时间内无法伪造账户所有者的签名;

  • 比特币使用了工作量证明的共识算法并引入了记账的激励,保证网络中的历史交易不会被攻击者快速替换;


  • 通过上述的两种方式,比特币才能保证历史的交易不会被篡改和所有账户中资金的安全。

10. 什么是比特币加密技术

比特币和区块链的诞生需要依赖于很多核心技术的突破:一是拜占庭容错技术;二是非对称加密技术;三是点对点支付技术。下面会依次介绍。
拜占庭容错技术
比特币和区块链诞生的首要难点在于如何创建分布式共识机制,也就是菜斯利·兰伯特等人1982年提出的拜占庭将军问题。所谓拜占庭将军问题是指,把战争中互不信任的各城邦军队如何达成共识并决定是否出兵的决策过程。延伸至计算机领域,试图创建具有容错性的分布式系统,即使部分节点失效仍可确保系统正常运行,也可让多个基于零信任基础的节点达成共识,并确保信息传递的一致性。
中本聪所提到的“拜占庭将军问题”解决方法起始于亚当﹒拜克在1997年发明的哈希现金算法机制,起初该设计是用于限制垃圾邮件发送与拒绝服务攻击。2004年,密码朋克运动早期和重要成员哈尔·芬尼将亚当﹒拜克的哈希现金算法改进为可复用的工作量证明机制。他们的研究又是基于达利亚·马凯与迈克尔·瑞特的学术成果:拜占庭容错机制。正是哈尔·芬尼的可复用的工作量证明机制后来成为比特币的核心要素之一。哈尔·芬尼是中本聪的最早支持者,同时也是第一笔比特币转账的接受者,在比特币发展的早期与中本聪有大量互动与交流。
非对称加密技术
比特币的非对称加密技术来源于以下几项密码学的技术创新:1976年,Sun公司前首席安全官Whitfield Diffie与斯坦福大学教授Martin Hell,在开创性论文《密码学的新方向》首次提出公开钥匙密码学的概念,发明了非对称加密算法。1978年省理工学院的伦纳德·阿德曼、罗纳德·李维斯特、阿迪·萨莫尔三名研究人员,共同发明了公开钥匙系统“RSA”可用于数据加密和签名,率先开发第一个具备商业实用性的非对称RSA加密算法。1985年,Neal Koblitz和Victor Miller俩人,首次提出将椭圆曲线算法(ECC),应用于密码学,并建立公钥加密的算法,公钥密码算法的原理是利用信息的不对称性,公钥对应的是私钥,私钥是解开所有信息的钥匙,公钥可以由私钥反推算出。ECC能够提供比RSA更高级别的安全。比特币使用的就是椭圆曲线算法公钥用于接收比特币,而私钥则是比特币支付时的交易签名。这些加密算法奠定了当前非对称加密理论的基础,被广泛应用于网络通信领域。但是,当时这些加密技术发明均在NSA严密监视的视野之内。NSA最初认为它们对国家安全构成威胁,并将其视为军用技术。直到20世纪90年代末,NSA才放弃对这些非对称加密技术的控制,RSA算法、ECC算法等非对称加密技术最终得以走进公众领域。
不过,中本聪并不信任NSA公布的加密技术,在比特币系统中没有使用RSA公钥系统,原因除了ECC能够提供比RSA更高级别的安全性能外,还担心美国安全部门在RSA留有技术后门。2013年9月,斯诺登就曾爆料NSA采用秘密方法控制加密国际标准,比特币采用的RSA可能留有后门,NSA能以不为人知的方法弱化这条曲线。所幸的是,中本聪神一般走位避开了RSA的陷阱,使用的加密技术不是NSA的标准,而是另一条鲜为人知的椭圆曲线,这条曲线并不在美国RSA的掌握之下。全世界只有极少数程序躲过了这一漏洞,比特币便是其中之一。

热点内容
区块链代替直销6 发布:2025-07-17 22:17:19 浏览:485
叫大学生买比特币是谁 发布:2025-07-17 21:54:05 浏览:137
eth接收数量 发布:2025-07-17 21:40:49 浏览:137
大空翼比特币6 发布:2025-07-17 21:35:11 浏览:773
广州一等奖去哪里兑奖中心 发布:2025-07-17 21:30:21 浏览:122
比特币2015年多少钱一个 发布:2025-07-17 21:04:52 浏览:106
eth最多pending几天 发布:2025-07-17 21:00:05 浏览:141
adc矿机软件多开 发布:2025-07-17 20:47:13 浏览:39
比特币挖矿教程2017 发布:2025-07-17 20:44:46 浏览:480
比特大陆矿机利润下降 发布:2025-07-17 20:15:58 浏览:454