哈希值和比特币地址的关系
㈠ 区块链中的哈希值是什么意思
如果你对区块链领域有所了解,那么你一定听说过哈希值,或许我们在浏览区块链信息时会经常看到哈希值,但是如果让我们说说哈希值到底是什么,可能我们也并不能说明白。我知到,虽然很多人都已经进入币圈很久,但是对于区块链领域的一些概念还处于一个一知半解,知道又不完全清楚的状态。其实哈希就是一种压缩信息的方法,我们可以通过哈希将很长的一段文字压缩成一小段乱码,那么区块链中的哈希值是什么意思呢?现在就让我来为大家详细的讲解一下。
哈希值是将任意长度的输入字符串转换为密码并进行固定输出的过程。哈希值不是一个“密码”,我们不能通过解密哈希来检索原始数据,它是一个单向的加密函数。
区块链哈希是什么?如果是刚开始了解区块链,就需要结合“区块”的概念来一起理解了。每一个区块,包含的内容有数据信息,本区块的哈希值以及上一个区块的哈希值。区块中的数据信息,主要是交易双方的地址与此次交易数量还有交易时间信息等。而哈希值就是寻找到区块,继而了解到这些区块信息的钥匙。以上就是区块链中哈希的含义了。
区块链通过哈希算法对一个交易区块中的交易信息进行加密,并把信息压缩成由一串数字和字母组成的散列字符串。金窝窝集团分析其哈希算法的作用如下:区块链的哈希值能够唯一而精准地标识一个区块,区块链中任意节点通过简单的哈希计算都接获得这个区块的哈希值,计算出的哈希值没有变化也就意味着区块链中的信息没有被篡改。
在区块链中,每个块都有前一个块的哈希值,前一个块被称为当前块的父块,如果考虑父块有一个当前区块。它将会有上一个块的哈希值即父块。
在区块链中,每个块都有前一个块的哈希值。当我们更改当前块中的任何数据时,块的哈希值将被更改,这将影响前一个块,因为它有前一个块的地址。例如,如果我们只有两个块,一个是当前块,一个是父块。当前块将拥有父块的地址。如果需要更改当前块中的数据,还需要更改父块。当只有两个数据块时,很容易更改数据,但是现在,当我们在区块链中实现时,2020-01-24 12:32已经挖掘了614272个块,而614272(th)块的哈希值为00000000000000000007 。如果我们要更改当前块614272(th)中的数据,614271块的哈希地址必须更改,但是614271块的哈希是不可能更改的,所以这就是区块链被称为不可变的,数据可信的。区块链的第一个块,称为起源块。你可以从这个起源块中看到有多少块被开采到现在。
如果我们对输入的任何部分做一个小的改变,输出就会有一个大的改变,请看下面的例子以获得更多的理解。哈希值是区块链技术不可变的和确定的潜力核心基础和最重要的方面。它保留了记录和查看的数据的真实性,以及区块链作为一个整体的完整性。
#比特币[超话]# #数字货币# #欧易OKEx#
㈡ 比特币钱包地址是如何得到的不是比特币地址而是钱包地址!
首先,你应该在大脑中想象出一个“钱包”的概念。你的bitcoin都放在你的“钱包”中一个钱包可以包含很多很多......很多个地址。地址的形式就是形如。
利用比特币钱包中生成的比特币地址你可以接收来自他人的比特币,你也可以将你帐户上的比特币转到他人的比特币地址上面。比特币地址就像银行卡号一样,具有支付、转账、提现功能,但在转账时,你只有知道别人的比特币地址才能进行比特币转账。
如果我们把比特币钱包简单比作成银行卡账户的话,那么比特币钱包地址就可以看成是银行卡账号。不同的是,比特币地址是可以不存储在网络上的,更是可以独立于你的钱包而存在的。
(2)哈希值和比特币地址的关系扩展阅读:
比特币地址是一串由 26位到34位字母和数字字符串组成的。 看上去像一堆乱码一样,说白了这个就像你的银行卡卡号一样。 通过区块链查可以查每个比特币地址的所有转账记录,公开透明。
比特币钱包地址生成:通过随机选出256位二进制数字,形成私钥,然后通过加密函数来生成地址。这个生成方向是单向的。也就是你知道了地址是无法通过解密方法来计算出私钥的。就目前的人类计算机运算能力无法破解,你可以很放心地把地址公布到网上。
参考链接:比特币|网络
㈢ 离线生成的比特币地址是如何避免冲突的
BTC的地址生成过程如下,完整的可以查一下比特币中文维基:
比特币地址的生成过程
(说明: 有些数字以"0x"开头,意思是此数字使用十六进制表示法。"0x"本身没有任何含义,它是C语言流传下来的,约定俗成的写法,比如0xA就是十进制的10。另外,1个字节 = 8位二进制 = 2位十六进制)。
第一步,随机选取一个32字节的数、大小介于1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间,作为私钥。
第二步,使用椭圆曲线加密算法(ECDSA-secp256k1)计算私钥所对应的非压缩公钥。 (共65字节, 1字节 0x04, 32字节为x坐标,32字节为y坐标)关于公钥压缩、非压缩的问题另文说明。
第三步,计算公钥的 SHA-256 哈希值
第四步,取上一步结果,计算 RIPEMD-160 哈希值
第五步,取上一步结果,前面加入地址版本号(比特币主网版本号“0x00”)
00
第六步,取上一步结果,计算 SHA-256 哈希值
第七步,取上一步结果,再计算一下 SHA-256 哈希值(哈哈)
第八步,取上一步结果的前4个字节(8位十六进制)
D61967F6
第九步,把这4个字节加在第五步的结果后面,作为校验(这就是比特币地址的16进制形态)。
00D61967F6
第十步,用base58表示法变换一下地址(这就是最常见的比特币地址形态)。
㈣ 比特币基础知识 你绝对想不到
椭圆曲线数字签名算法
椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线对数字签名算法(DSA)的模拟,该算法是构成比特币系统的基石。
私钥
非公开,拥有者需安全保管。通常是由随机算法生成的,说白了,就是一个巨大的随机整数,32字节,256位。
大小介于1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的数,都可以认为是一个合法的私钥。
于是,除了随机方法外,采用特定算法由固定的输入,得到32字节输出的算法就可以成为得到私钥的方法。于是,便有了迷你私钥(Mini Privkey),原理很简单,例如,采用SHA256的一种实现:
private key = SHA256()1
迷你私钥存在安全问题,因为输入集合太小,易被构造常见组合的彩虹表暴力破解,所以通常仿轮纳还是使用系统随机生成的比较好,无安全隐患。
公钥
公钥与私钥是相对应的,一把私钥可以推出唯一的公钥,但公钥却无法推导出私钥。公钥有两种形式:压缩与非压缩。
早期比特币均使用非压缩公钥,现大部分客户端已默认使用压缩公钥。
这个貌似是比特币系统一个长得像feature的bug,早期人少活多代码写得不够精细,openssl库的文档又不足够好,导致Satoshi以为必须使用非压缩的完整公钥,后来大家发现其实公钥的左右两个32字节是有关联的,左侧(X)可以推出右侧(Y)的平方值,有左侧(X)就可以了。
现在系统里两种方式共存,应该会一直共存下去。两种公钥的首个字节为标识位,压缩为33字节,非压缩为65字节。以0x04开头为非压缩,0x02/0x03开头为压缩公钥,0x02/0x03的选取由右侧Y开方后的奇偶决定。
压缩形式可以减小Tx/Block的体积,每个Tx Input减少32字节。
签名
使用私钥对数据进行签署(Sign)会得到签名(Signature)。通常会将数据先生成Hash值,然后对此Hash值进行签名。签名(signature)有两部分组成: R + S。由签名(signature)与Hash值,便可以推出一个公钥,验证此公钥,便可知道此签名是否由公钥对应的私钥签名。
通常,每个签名会有三个长度:73、72、71,符合校验的概率为25%、50%、25%。所以每次签署后,需要找出符合校验的签名长度,再提供给验证方。
地址
地址是为了人们交换方便而弄出来的一个方案,因为公钥太长了(130字符串或66字符串)。地址长度为25字节,转为base58编码后,为34或35个字符。base58是类似base64的编码,但去掉了易引起视觉混淆的字符,又在地址末尾添加了4个字节校验位,保障在人们交换个别字符错误时,也能够因地址校验失败而制止了误操作。
由于存在公钥有两种形式,那么一个公钥便对应两个地址。这两个地址都可由同一私钥签署交易。
公钥生成地址的算法:
Version = 1 byte of 0 (zero); on the test network, this is 1 byte of 111
Key hash = Version concatenated with RIPEMD-160(SHA-256(public key))
Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash))
Bitcoin Address = Base58Encode(Key hash concatenated with Checksum)1234
下图是非压缩公钥生成地址的过程:
对于压缩公钥生成地址时,则只取公钥的X部分即可。
推导关系
三者推导关系:私钥
公钥
两个地址。过程均不可逆。拥有私钥便拥有一切,但通常为了方便,会把对应的公钥、地址也存储起来。
交易
比特币的交易(Transation,缩写Tx),并不是通常意义的桐散交易,例如一手交钱一手交货,而是转账。交易由N个输入和M个输出两部分组成。交易的每个输入便是前向交易的某个输出,那么追踪到源头,必然出现一个没有输入的交易,此类交易称为CoinBase Tx。CoinBase类备没交易是奖励挖矿者而产生的交易,该交易总是位于Block块的第一笔。
拥有一个输入与输出的Tx数据:
Input:
Previous tx:
Index: 0
scriptSig:
241501
Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160
OP_EQUALVERIFY OP_CHECKSIG12345678910
一旦某个Tx的第N个输出成为另一个Tx的输入,那么该笔比特币即为已花费。每个交易有唯一Hash字符串来标识,通过对交易数据做两次SHA256哈希运算而来:
Tx Hash ID = SHA256(SHA256(Tx Data))1
矿工费
矿工费(Transaction Fee)是鼓励矿工将Tx打包进Block的激励报酬。计算一笔交易的矿工费:
Transaction Fee = SUM(Inputs amount) - SUM(Outputs amount)1
每笔Tx的矿工费必然大于等于零,否则该笔Tx即为非法,不会被网络接收。
数据块
数据块(Block)是存储Block Meta与Tx的地方。Block的第一笔Tx总是CoinBase Tx,因此Block中的交易数量总是大于等于1,随后是这段时间内网络广播出来的Tx。
找到合适的Block是一件非常困难的事情,需要通过大量的数学计算才能发现,该计算过程称为“挖矿”。首个发现者,会得到一些比特币作为奖励。
数据链
多个Block连接起来成为数据链(Block Chain)。
为了引入容错与竞争机制,比特币系统允许Block Chain出现分叉,但每个节点总是倾向于选择最高的、难度最大的链,并称之为Best Chain,节点只认可Best Chain上的数据。
首个Block称为Genesis Block,并设定高度为零,后续每新增一个Block,高度则递增一。目前是不允许花费Genesis Block中的比特币的。
每个Block中的Tx在此Block中均唯一
一个Tx通常只会在一个Block里,也可能会出现在多个Block中,但只会在Best Chain中的某一个Block出现一次
货币存储
比特币是密码货币、纯数字化货币,没有看得见摸得着的硬币或纸币。一个人持有比特币意味着:
其拥有一些地址的私钥
这些地址是数笔交易的输出,且未花费
所有货币记录均以交易形式存储在整个blockchain数据块中,无交易无货币。货币不会凭空产生,也不会凭空消失。遗失了某个地址的私钥,意味着该地址上的Tx无法签署,无法成为下一个Tx的输入,便认为该笔比特币永久消失了。
货币发行
既然所有交易的输入源头都是来自CoinBase,产生CoinBase时即意味着货币发行。比特币采用衰减发行,每四年产量减半,第一个四年每个block的coinbase奖励50BTC,随后是25btc, 12.5btc, 并最终于2140年为零,此时总量达到极限为2100万个btc。
减半周期,严格来说,并不是准确的四年,而是每生成210000个block。之所以俗称四年减半,是因为比特币系统会根据全网算力的大小自动调整难度系统,使得大约每两周产生2016个block,那么四年约21万块block。
该函数GetBlockValue()用于计算挖得Block的奖励值:
int64 static GetBlockValue(int nHeight, int64 nFees)
{
int64 nSubsidy = 50 * COIN;
// Subsidy is cut in half every 210000 blocks, which will occur approximately every 4 years
nSubsidy = (nHeight / 210000);
return nSubsidy + nFees;
}123456789
当达到2100万btc以后,不再有来自CoinBase的奖励了,矿工的收入来源仅剩下交易的矿工费。此时,每个block的收入绝对值btc很低,但此时比特币应当会非常繁荣,币值也会相当的高,使得矿工们依然有利可图。
杜绝多重支付
传统货币存在多重支付(Double Spending)问题,典型的比如非数字时代的支票诈骗、数字时代的信用卡诈骗等。在比特币系统里,每笔交易的确认均需要得到全网广播,并收录进Block后才能得到真正确认。每笔钱的花销,均需要检测上次输入交易的状态。数据是带时间戳的、公开的,BlockChain由巨大的算力保障其安全性。所以比特币系统将货币的多重支付的风险极大降低,几近于零。通过等待多个Block确认,更是从概率上降低至零。一般得到6个确认后,可认为非常安全。但对于能影响你人生的重大支付,建议等待20~30个确认。
匿名性
任何人均可以轻易生成大量的私钥、公钥、地址。地址本身是匿名的,通过多个地址交易可进一步提高匿名性。但该匿名性并不像媒体宣传的那样,是某种程度上的匿名。因为比特币的交易数据是公开的,所以任何一笔资金的流向均是可以追踪的。
不了解比特币的人为它的匿名性产生一些担忧,比如担心更利于从事非法业务;了解比特币的人却因为它的伪匿名性而苦恼。传统货币在消费中也是匿名的,且是法律保障的,大部分国家都不允许个人涂画纸币。
地址本身是匿名的,但你可以通过地址对应的私钥签名消息来向公众证明你拥有某个比特币地址。
其他名词
哈希
哈希(Hash)是一种函数,将一个数映射到另一个集合当中。不同的哈希函数映射的空间不同,反映到计算机上就是生成的值长度不一样。同一个哈希函数,相同的输入必然是相同的输出,但同一个输出却可能有不同的输入,这种情况称为哈希碰撞。
常见的哈希函数有CRC32, MD5, SHA1, SHA-256, SHA-512, RIPEMD-160等,哈希函数在计算中有着非常广泛的用途。比特币里主要采用的是SHA-256和RIPEMD-160。
脑钱包纸钱包
前面提到过的脑钱包与纸钱包,这其实不算是钱包的分类,只是生成、存储密钥的方式而已。脑钱包属于迷你私钥的产物。脑钱包就是记在脑袋里的密钥,纸钱包就是打印到纸上的密钥,仅此而已。
有同学提到过,以一个计算机文件作为输入,例如一个数MB大小的照片,通过某种Hash运算后得到私钥的方法。这个方案的安全性还是不错的,同时可以防止盗私钥木马根据特征扫描私钥。文本形式存储私钥是有特征的,而一个照片文件却难以察觉,即使放在云盘等第三方存储空间中都是安全的。
㈤ 【2019-07-12】比特币的钱包地址验证
第一步,随机选取一个32字节的数,大小介于1~0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间,作为私钥
第二步,使用椭圆曲线加密算法(ECDSA-SECP256k1)计算私钥所对应的非压缩公钥(共65字节,1字节0x04,32字节为x坐标,32字节为y坐标)。
第三步,计算公钥的SHA-256哈希值
第四步,计算上一步哈希值的RIPEMD-160哈希值
第五步,在上一步结果之间加入地址版本号(如比特币主网版本号"0x00")
00
第六步,计算上一步结果的SHA-256哈希值
第七步,再次计算上一步结果的SHA-256哈希值
第八步,取上一步结果的前4个字节(8位十六进制数)D61967F6,把这4个字节加在第五步结果的后面,作为校验(这就是比特币地址的16进制形态)
00D61967F6
第九步,用base58表示法变换一下地址(这就是最常见的比特币地址形态)
如果给你个地址你只要:
base58->二进制-> 这时是第8步,
如果我们把后面4个字节拿掉,
就是第5步的结果,你只要重复以上步骤到第8步
取前4个和地址后4位比较就可以得到答案了
㈥ 比特币如何算出来的
要想了解bitcoin的技术原理,首先需要了解两个重要的密码技术: HASH码:将一个长字符串转换成固定长度的字符串,并且其转换不可逆,即不太可能从HASH码猜出原字符串。bitcoin协议里使用的主要是SHA256。
公钥体系:对应一个公钥和私钥,在应用中自己保留私钥,并公开公钥。当甲向乙传递信息时,可使用甲的私钥加密信息,乙可用甲的公钥进行解密,这样可确保第三方无法冒充甲发送信息;同时,甲向乙传递信息时,用乙的公钥加密后发给乙,乙再用自己的私钥进行解密,这样可确保第三者无法偷听两人之间的通信。最常见的公钥体系为RSA,但bitcoin协议里使用的是lliptic Curve Digital Signature Algorithm。 和现金、银行账户的区别? bitcoin为电子货币,单位为BTC。在这篇文章里也用来指代整个bitcoin系统。 和在银行开立账户一样,bitcoin里的对应概念为地址。每个人都可以有1个或若干个bitcoin地址,该地址用来付账和收钱。每个地址都是一串以1开头的字符串,比如我有两个bitcoin账户,和。一个bitcoin账户由一对公钥和私钥唯一确定,要保存账户,只需要保存好私钥文件即可。 和银行账户不一样的地方在于,银行会保存所有的交易记录和维护各个账户的账面余额,而bitcoin的交易记录则由整个P2P网络通过事先约定的协议共同维护。 我的账户地址里到底有多少钱? 虽然使用bitcoin的软件可以看到当前账户的余额,但和银行不一样,并没有一个地方维护每个地址的账面余额。它只能通过所有历史交易记录去实时推算账户余额。 我如何付账? 当我从地址A向对方的地址B付账时,付账额为e,此时双方将向各个网络节点公告交易信息,告诉地址A向地址B付账,付账额为e。为了防止有第三方伪造该交易信息,该交易信息将使用地址A的私钥进行加密,此时接受到该交易信息的网络节点可以使用地址A的公钥进行验证该交易信息的确由A发出。当然交易软件会帮我们做这些事情,我们只需要在软件中输入相关参数即可。 网络节点后收到交易信息后会做什么? 这个是整个bitcoin系统里最重要的部分,需要详细阐述。为了简单起见,这里只使用目前已经实现的bitcoin协议,在当前版本中,每个网络节点都会通过同步保存所有的交易信息。 历史上发生过的所有交易信息分为两类,一类为"验证过"的交易信息,即已经被验证过的交易信息,它保存在一连串的“blocks”里面。每个"block"的信息为前一个"bock"的ID(每个block的ID为该block的HASH码的HASH码)和新增的交易信息(参见一个实际的block)。另外一类指那些还"未验证"的交易信息,上面刚刚付账的交易信息就属于此类。 当一个网络节点接收到新的未验证的交易信息之后(可能不止一条),由于该节点保存了历史上所有的交易信息,它可以推算中在当时每个地址的账面余额,从而可以推算出该交易信息是否有效,即付款的账户里是否有足够余额。在剔除掉无效的交易信息后,它首先取出最后一个"block"的ID,然后将这些未验证的交易信息和该ID组合在一起,再加上一个验证码,形成一个新的“block”。 上面构建一个新的block需要大量的计算工作,因为它需要计算验证码,使得上面的组合成为一个block,即该block的HASH码的HASH码的前若干位为1。目前需要前13位为1(大致如此,不确定具体方式),此意味着如果通过枚举法生成block的话,平均枚举次数为16^13次。使用CPU资源生成block被称为“挖金矿”,因为生产该block将得到一定的奖励,该奖励信息已经被包含在这个block里面。 当一个网络节点生成一个新的block时,它将广播给其它的网络节点。但这个网络block并不一定会被网络接受,因为有可能有别的网络节点更早生产出了block,只有最早产生的那个block或者后续block最多的那个block有效,其余block不再作为下一个block的初始block。 对方如何确认支付成功? 当该笔支付信息分发到网络节点后,网络节点开始计算该交易是否有效(即账户余额是否足够支付),并试图生成包含该笔交易信息的blocks。当累计有6个blocks(1个直接blocks和5个后续blocks)包含该笔交易信息时,该交易信息被认为“验证过”,从而该交易被正式确认,对方可确认支付成功。 一个可能的问题为,我将地址A里面的余额都支付给地址B,同时又支付给地址C,如果只验证单比交易都是有效的。此时,我的作弊的方式为在真相大白之前产生6个仅包括B的block发给B,以及产生6个仅包含C的block发给C。由于我产生block所需要的CPU时间非常长,与全网络相比,我这样作弊成功的概率微乎其微。 网络节点生产block的动机是什么? 从上面描述可以看出,为了让交易信息有效,需要网络节点生成1个和5个后续block包含该交易信息,并且这样的block生成非常耗费CPU。那怎么样让其它网络节点尽快帮忙生产block呢?答案很简单,协议规定对生产出block的地址奖励BTC,以及交易双方承诺的手续费。目前生产出一个block的奖励为50BTC,未来每隔四年减半,比如2013年到2016年之间奖励为25BTC。 交易是匿名的吗? 是,也不是。所有BITCOIN的交易都是可见的,我们可以查到每个账户的所有交易记录,比如我的。但与银行货币体系不一样的地方在于,每个人的账户本身是匿名的,并且每个人可以开很多个账户。总的说来,所谓的匿名性没有宣称的那么好。 但bitcoin用来做黑市交易的还有一个好处,它无法冻结。即便警方追踪到了某个bitcoin地址,除非根据网络地址追踪到交易所使用的电脑,否则还是毫无办法。 如何保证bitcoin不贬值? 一般来说,在交易活动相当的情况下,货币的价值反比于货币的发行量。不像传统货币市场,央行可以决定货币发行量,bitcoin里没有一个中央的发行机构。只有通过生产block,才能获得一定数量的BTC货币。所以bitcoin货币新增量决定于: 1、生产block的速度:bitcoin的协议里规定了生产block的难度固定在平均2016个每两个星期,大约10分钟生产一个。CPU速度每18个月速度加倍的摩尔定律,并不会加快生产block的速度。 2、生产block的奖励数量:目前每生产一个block奖励50BTC,每四年减半,2013年开始奖励25BTC,2017年开始奖励额为12.5BTC。 综合上面两个因素,bitcoin货币发行速度并不由网络节点中任何单个节点所控制,其协议使得货币的存量是事先已知的,并且最高存量只有2100万BTC
㈦ 小白如何了解比特币
多去比特币新闻网看比特币新闻,以及行情,技术
比特币的诞生
比特币的诞生应该算在2008年的11月1号的那一天,一个化名为“中本聪”的人在网上发表了一篇论文。 在这篇论文里,他详细的描述了一种崭新的货币体系,他将之命名为“比特币”。
随后,次年的1月3日,首个比特币程序在中本聪的手里诞生,与之一起诞生的是最早挖矿所得的50个比特币。在那之后他开始逐渐淡出,直到彻底的消失。
人们至今也没找出这个叫中本聪的人的真实身份,即使如今的运营商、互联网巨头与政府已将人们在网络上的行迹牢牢掌握在了手里。
他在发言时会经常切换美式和英式英语,他随机在全天不同的时间上线,以隐瞒自己的国籍和时区;他隐藏自己的ip地址,加密自己的邮件,故意伪造一些写作和发言风格来混淆视听;此外他还是一名造诣颇深的密码学专家,对了,他发表论文的地方就叫做 "密码学邮件列表"。
所以比特币从诞生时起就带上了一种黑客精神:对抗任何势力所强加的审查。
当然我们也可以这么看: 如果一个发明了匿名货币系统的黑客,却连自我身份都不能匿名的话,那整件事会变成一个笑话。
但是所幸,中本聪没让我们失望。
1. 什么是货币
我发现要讲清楚什么是比特币,这一节是无论如何也跑不了的了。我不是什么经济领域的专家,我只能很粗浅且只能在很直观的意义上讲述这个问题。(不过就标题所表达出来的本文主旨而言,似乎也足够了)
高中的课本里有讲过(还记得吗?) , 货币是储存价值的媒介,一种东西要成为货币,最重要的,他必须满足:
1) 稀缺性。
这就是为什么黄金可以而沙子不能被当作货币的原因。稀缺性可以理解为获得它的难度,越是稀缺要获得它就越难。 一个直观的认识是这样的:假设你一个月的薪水是5000元,它意味着人民币的稀缺程度恰好到了这样一个度,即你要付出一个月的劳动才能获得5000个一元。 你不会同意以5000粒沙子来支付你的薪水,是因为与其通过劳动一个月来获得它,你大可以去沙滩走一圈就轻轻松松地得到了。
那么现在的金融系统是如何保证货币的稀缺性的呢?控制发行。货币的发行是被牢牢掌握在中央银行手中的,这样货币的发行量才能做到可控(所以你现在知道了,私自印钞是违法的)。回到刚刚那个例子, 你同意以5000元来支付你一个月的薪水,是因为人民币发行量刚好到了这个度。如果此时的人民币发行量翻倍了,稀缺度相应降低, 这时候你就应该要求以1万元来支付你的薪水了(但市场的响应往往不会这么快,在这期间你的财富其实是被剥夺了--你的劳动本该获得一万元却只得到5000元的回报)。
2)交易性
货币存在的目的当然是为了交易。就像很多人告诉你的那样,钱是用来花的,不是用来带进棺材的。所以除了满足稀缺性以外,一种东西它越是方便交易,那么他就越符合理想货币的标准。所以在货币史上,银元代替了贝壳,纸币代替了银元,数字货币正逐渐取代纸币。
这里所说的“交易”,是指财产从一方转移到另一方,即一方的财产减少相应的另一方增多。对实物货币来说,它发生得非常自然,甲要给100元乙,当100元钞票从甲的手里转移到乙的手里的那一瞬间,交易完成了,甲的财产减去了100元而乙的财产增加了100元,这个过程中没有第三方的参与,完全是甲和乙之间的私密行为;然而当交易发生在数字货币层面上时,就没这么简单了,甲要给100元给乙,如何确保交易完成了呢?假设甲和乙在各自的电脑上记录了自己的财富数额的话,那么如何确保乙在给自己增加了100元的时候甲如实地给自己减去了100元呢?这个时候我们不得不要引入第三方了--我们称之为“银行”的那个家伙。 当甲要转移100元给乙时,他不是直接给乙而是给银行, “请把我的100元转给乙” ,于是银行在甲的帐目上扣掉100元,再在乙的帐目上加上这100元。(我们假设它慷慨地不收取任何交易费)
以上所说的就是现代货币系统的一个粗廓模型,这个模型最大的弊端在于:人们不得不去信任一个中心系统。
数字货币的交易必须依赖银行,而一个人的银行账号可能会被审查、限制甚至是剥夺。当一方想要给另一方转移自己的财富时,银行可以收取高昂的费用或者直接拒绝(比如你试试汇一笔钱给美国的亲戚)。
货币的发行必须依赖中央银行。好吧,这已经是一个广为人知的秘密了:货币一直在贬值,或者说货币一直在超额发行(想想20年前的100块跟现在的100块)。 我引用两段话, 一段是凯恩斯说的, “通过连续的通货膨胀过程,政府可以秘密地、不为人知地没收公民财富的一部分。用这种办法可以任意剥夺人民的财富,在使多数人贫穷的过程中,却使少数人暴富。”, 另一段,出自哈耶克, “政府无法克制滥发货币的冲动”。
那么有没有可能设计出一套货币系统,在这个系统里我们不需要一个中心机构,不用被迫去信任任何的第三方, 使货币的发行透明可控,货币的交易私密而安全呢?
你猜?
2. 什么是比特币
所以我们现在可以回答到了,比特币是一个发行去中心化和交易去中心化的电子货币系统。在这个系统里,货币的发行量是透明且可预期的,货币的交易利用整个网络的协同合作来保证交易的安全。
下面我将逐步拆解比特币的原理。需要注意的是,比特币作为一个已经实际在使用的产品,它本身有着非常丰富的细节。本篇目的是向没有技术背景的读者讲述比特币的基本原理,因此并不会涉及到这些细节。比如说钱包的地址其实并不是公钥,而是公钥的二次哈希值; 区块链的难度要求并不是简单的把所有区块链的内容做一次哈希运算;等等。但是为了叙述的简洁性,在不影响对基本原理的讲解下这些都做了简化处理,希望大家能够理解。
2.0. 比特币网络 -- 由众多运行着比特币程序的节点组成
比特币是一个由众多平等的节点组成的网络。
一个节点就是一个比特币程序,任何能够连上网和具有一定计算能力的机器都能运行这个程序 -- 所以你家里的电脑也可以作为比特币网络里的节点:)
节点之间是可以互相通讯的,同时比特币有一套机制可以让一个节点向其他所有节点发出消息,这个行为被称为“广播”。
2.1. 区块链 -- 一个公共的账簿
我们先回到银行的例子。银行最基本的功能,无非是维护一个账簿,而这个账簿只需如实记录每一笔交易而已。比如X年X月X日,王小明转了30块钱给张大毛;Y年Y月Y日,张大毛转了12块钱给李小豆,诸如此类。 根据这个账簿我们可以查到一个人的所有交易记录,因而也就能推算出这个人此刻的账户余额为多少。比如李小豆从建银行帐号开始,转进的交易合计500元,转出的交易合计300元,那么可以算出此时李小豆账户余额一定是200元。
维护好这个账簿,并且作为唯一的维护者(只有银行才有权力查看和修改), 银行作为一个交易中心的职责就完成了。
比特币也有账簿,但是与银行不同的是,这个账簿是公开的,任何人可以去查看和审核它。
这个账簿被称为"区块链"。你可以把区块链想象成一个小册子,册子的每一页写满了交易信息,并且不断有新的页加入进来。
2.2 钱包 ---由一对公钥和私钥构成的的账户
上面一小节,解释了什么是比特币的账簿。这一小节将解释这个账簿里资金的归属权问题,亦即比特币的帐户系统。
比特币里的帐户跟银行的帐户有本质的区别。
在银行账户下,银行记录下了该账户所有者的身份信息(回想一下你去银行开户时提交的资料:照片、身份证、电话号码、家庭住址....),因而只要你能向银行证明你的身份,你也就获得了你名下财产的所有权。在这种模型下,银行扮演了一个全知全能的上帝角色:他知晓现实人们的财富信息。我们除了祈祷上帝不要把我们的信息泄露出去或者利用它干坏事以外,别无他法。
在比特币的世界里,并没有银行这样一个机构,它不会强制人们暴露自己的身份以换取资金的安全。比特币的帐户只是简单的由两串数字构成,分别被称为“公钥”和“私钥”,除此之外再无其他。
这个两个数字所具有的数学特性 -一个被私钥加密过的数据只能通过公钥来解开,所谓的非对称加密-使它们能够完美的实现一个帐户(比特币世界里被称为钱包)需要的功能。
我们把公钥作为帐户地址 --在比特币世界里也称钱包地址 --它类似于银行系统里的帐号,就是当你告诉别人“请给我的帐号打300块钱”时,需要告诉别人的那一串数字。对银行来说,它是“招商银行6214850200251100”,对比特币而言,它是“ ”。
私钥,是证明钱包所有权的*唯一*凭证,你通过证明你是该钱包的私钥持有者来获得该钱包的所有权。注意,和银行账号的密码不同的是,你丢失了密码还可以通过证实自己的身份来找回,但你一旦丢失了密钥那这个钱包里的资金就再也找不回了。
因为公钥和私钥所具备的非对称加密的美妙特性,钱包的所有者并不需要通过出示私钥来证明自己持有它。他只需要出示一段用私钥加密过的文字,验证者能用公钥(即钱包地址)解开这段文字即能证明。
那么怎么生成一对这样的数字呢?
相比于银行开户的繁琐手续,你唯一需要的只是一个实现了该功能的数学软件。
感谢数学。
2.3 区块 --- 有难度要求的账簿页
前面提到,区块链就是一个账簿,一个区块就是这个账簿里固定大小的一页。(比特币规定区块大小不超过1M,而一笔交易大约250字节大小,因此一个区块平均能写下4000笔左右交易。)
区块链是公共的,每个人都可以下载,验算和查看区块链里的交易信息。同时每个人也都可以向区块链增加区块,只是我们需要一种机制来防止坏人们通过提交大量的区块来拖垮整个网络。这个机制的核心在于我们要使区块的构造变得有代价,代价大到不可能在短时间内构造出大量的区块。
比特币要求,新的区块必须使区块链具有某种特征的哈希值才能被允许加入。 哈希值是一种数学运算(感谢数学!),你可以简单理解为对数据的摘要,不同的数据有不同的哈希值,即使两个数据只相差一个字节,他们对应的哈希值也会截然不同。
比特币通过“要求区块链的哈希值具有某种特征”来控制构造区块的难度,这个特征其实就是要求哈希值开头的几位数字为0. 比方说当前比特币要求哈希值前4位必须位0,我们用P表示当前的区块链,用B表示当前构造的区块,那么P+B的哈希值前4位必须为0该区块B才能被允许加入区块链中。 这里要注意三点, 1. 要构造出这样一个区块没有捷径,必须通过大量的计算,一遍一遍的往B里放随机数直到P+B的哈希值满足要求为止。2. 哈希值前面为0的位数越多,要构造出这个区块的难度就越大。
好了,我们现在有了控制区块构造难度的工具了,那么比特币通过什么样的规则来控制难度呢?
比特币规定区块链应保持在平均每两周时间增加2016个区块(也就是平均10分钟一个)的速度上。 也就是说,每增加2016个区块,系统就会算出产生这2016个区块的时间,如果它小于两周那么就提高接下来2016个区块的难度(比如从要求哈希值前3个必须为0提高到前4个为0), 如果它大于两周就降低难度(比如从要求4个0降低到3个0), 这样从长远来看,就使区块链平均以每10分钟一个的速度增加了。
也因此可以推论,区块链的难度要求与全网构造区块的算力成正相关关系。也就是说,参与构造区块的算力增加那么难度要求就会提高,相反则会降低,这样才能使区块链以固定的速度增加。
上面提到,让构造区块变得有难度,是为了防止被坏人攻击。同时,它还有一个作用是防止坏人们将一笔钱花两次(所谓双花问题)。 我们看如下一个比特币的应用场景:
小张要用比特币在小李那里网购一个商品,
1) 小李用数学软件生成好一个比特币钱包,并将该钱包地址(公钥)告诉小张。
2) 小张选取了自己一个有足够余额的钱包,并用这个钱包的私钥签发了一笔交易(该交易把一部分比特币发到小李的钱包地址上),然后把交易广播给全网络。
3)网络中的一些节点把该交易收纳到当前正在构造的区块中。 第一个成功构造出合法区块的节点把该区块广播给全网络,得到全网络的认可被加到区块链上。
4) 小李发现区块链上已经有一个区块包含了指向自己钱包地址的交易,并且交易金额正确。 小李随即给小张发货。
5)小张发现小李已经发货,这时他开始重新构造一笔交易,试图把刚刚发给小李的钱发到自己另外的一个钱包里。这个时候他不能再把这笔交易广播出去了,因为网络中的其它节点会发现该交易是不合法(花掉一笔已经花掉的钱)而直接拒绝掉, 小李只能自己构造一个包含了该交易的区块,并且试图说服网络中的其它节点他的这个节点才是合法而刚刚那个(包含发给小李交易的区块)是不合法的, 这样就能实现他一笔钱花两次的目的。
比特币规定当区块链发生分叉时(即出现了两个或以上互斥的合法区块)时,应该追随最长的那条。 那意味着小张要实现自己双花目的,他必须在产生了小李那个区块后,马上构造出两个区块来,才能说服其他节点跟随自己的这条链。 要达到这个目的,当前时间内他必须拥有(或者接近拥有了)全网51%的算力, 才能抢在其他所有节点之前构造出两个区块出来。
2.4 矿工 --- 通过挖矿来争夺记账权的区块链维护者们
前一节我们讲到,区块链的难度实际上是对区块链的保护,这个难度要求越高区块链就越免于被坏人攻击。换个方式表述就是,全网构造区块的算力保障了区块链的安全,全网的算力越高,那么坏人们获得全网51%算力的难度就越大,因此越不容易被攻击。
那么我们如何激励节点们贡献出自己的cpu跟电力来提高全网的算力呢? 答案是区块奖励。
比特币规定,成功构造出合法区块的节点会获得一部分比特币作为奖励,这部分比特币是系统生成的,他类似于淘金业里的挖矿,通过辛勤的劳动增加了黄金(比特币)的流通总量,因此构造区块的过程被称为“挖矿”,企图通过挖矿来获得区块奖励的节点被称为“矿工”。
挖矿的意义:
1) 它激励节点们贡献出算力来保护网络
2) 它实现了一种公平的方式发行比特币,因为不存在一个中央发行机构。
除了区块奖励外,交易者还可以通过额外支付一笔交易费给矿工们来鼓励他们将自己的交易收纳到它的区块里。这样当区块奖励趋于0时(比特币总量2100万枚,意味着越到后面区块奖励会越少), 因为有交易费的存在,矿工们也会继续维护整个网络。值得注意的是这里的交易费跟银行转账费有所不同,银行的转账费是由银行自上而下规定的,比特币的交易费是由使用者自由设置自下而上竞争的结果(如果当前交易数量很多而你给的交易费太低的话,可能不会被矿工们收取。)
亦即,矿工成功挖到区块时,他将获得 1)区块奖励 2)该区块内所有交易的交易费。
2.5 总结
比特币的核心是一个公共的账簿--区块链,每个人都可以核算查看这个账簿里的交易信息。这个账簿里不会记录任何真实世界里的个人信息,比特币保护了使用者的隐私。
通过非对称加密,用户可以不用出示密钥就可以证实自己是该密钥的持有者。因此提供了一个安全的不用信赖任何第三方(对比银行,你必须信赖它不把你的账号密码泄漏出去)的方式发起一笔交易。
因为比特币是开放的,意味着任何人都可以攻击比特币网络。通过控制区块的难度,使比特币网络免疫于大部分的攻击除非攻击者获取了接近全网51%的算力。而矿工们是比特币网络的保护者,比特币通过区块奖励和交易费的方式激励他们贡献出自己的cpu,组成巨大的算力屏障,使得任何组织或个人想要发起51%算力攻击都成为不可能。
㈧ 比特币是怎样产生的
比特币(Bitcoin)的概念最初由中本聪在2008年11月1日提出,并于2009年1月3日正式诞生 。根据中本聪的思路设计发布的开源软件以及建构其上的P2P网络。比特币是一种P2P形式的虚拟的加密数字货币。点对点的传输意味着一个去中心化的支付系统。
比特币网络通过“挖矿”来生成新的比特币。所谓“挖矿”实质上是用计算机解决一项复杂的数学问题,来保证比特币网络分布式记账系统的一致性。比特币网络会自动调整数学问题的难度,让整个网络约每10分钟得到一个合格答案。随后比特币网络会新生成一定量的比特币作为区块奖励,奖励获得答案的人。
㈨ 什么是哈希
散列是指从可变大小的输入生成固定大小的输出的过程。这是通过使用称为散列函数(作为散列算法实现)的数学公式来完成的。
尽管并非所有哈希函数都涉及密码学的使用 ,但所谓的密码哈希函数是加密货币的核心。多亏了它们,区块链和其他分布式系统能够实现显着水平的 数据完整性和安全性。
传统和加密散列函数都是确定性的。确定性意味着只要输入不变,散列算法将始终产生相同的输出(也称为摘要或散列)。
通常,加密货币的散列算法被设计为单向函数,这意味着如果没有大量的计算时间和资源,它们就无法轻易恢复。换句话说,从输入创建输出非常容易,但在相反的方向(仅从输出生成输入)相对困难。一般来说,越难找到输入,哈希算法被认为越安全。
不同的散列函数将产生不同大小的输出,但每种散列算法可能的输出大小始终是恒定的。例如,SHA-256 算法只能生成 256 位的输出,而 SHA-1 将始终生成 160 位的摘要。
为了说明这一点,让我们通过 SHA-256 哈希算法(比特币中使用的算法)运行“Bitcoin”和“bitcoin”这两个词。
请注意,微小的更改(第一个字母的大小写)会导致完全不同的哈希值。但由于我们使用 SHA-256,输出将始终具有 256 位(或 64 个字符)的固定大小 - 无论输入大小如何。此外,无论我们通过算法运行这两个单词多少次,两个输出都将保持不变。
相反,如果我们通过 SHA-1 哈希算法运行相同的输入,我们将得到以下结果:
值得注意的是,首字母缩略词 SHA 代表安全哈希算法。它指的是一组加密哈希函数,包括 SHA-0 和 SHA-1 算法以及 SHA-2 和 SHA-3 组。SHA-256 是 SHA-2 组的一部分,还有 SHA-512 和其他变体。目前,只有 SHA-2 和 SHA-3 组被认为是安全的。
传统的哈希函数具有广泛的用例,包括数据库查找、大文件分析和数据管理。另一方面,加密散列函数广泛用于信息安全应用,例如消息认证和数字指纹。就比特币而言,加密哈希函数是挖矿过程的重要组成部分, 也在新地址和密钥的生成中发挥作用。
散列的真正威力在于处理大量信息时。例如,可以通过哈希函数运行一个大文件或数据集,然后使用其输出来快速验证数据的准确性和完整性。由于散列函数的确定性,这是可能的:输入将始终产生简化的、压缩的输出(散列)。这种技术消除了存储和“记住”大量数据的需要。
散列在区块链技术的背景下特别有用。比特币区块链有几个涉及散列的操作,其中大部分在挖掘过程中。事实上,几乎所有的加密货币协议都依赖散列来将交易组链接和压缩成块,并在每个块之间产生加密链接,从而有效地创建区块链。
同样,部署密码技术的散列函数可以定义为密码散列函数。一般来说,破解密码哈希函数需要无数次的蛮力尝试。对于“还原”加密哈希函数的人来说,他们需要通过反复试验来猜测输入是什么,直到产生相应的输出。然而,也有可能不同的输入产生完全相同的输出,在这种情况下会发生“冲突”。
从技术上讲,加密哈希函数需要遵循三个属性才能被视为有效安全。我们可以将这些描述为抗碰撞性、抗原像性和抗二次原像性。
在讨论每个属性之前,让我们用三个简短的句子总结它们的逻辑。
如前所述,当不同的输入产生完全相同的散列时,就会发生冲突。因此,哈希函数被认为是抗冲突的,直到有人发现冲突为止。请注意,任何散列函数都将始终存在冲突,因为可能的输入是无限的,而可能的输出是有限的。
换句话说,当发现碰撞的可能性非常低以至于需要数百万年的计算时,哈希函数是抗碰撞的。因此,尽管没有无冲突的哈希函数,但其 中一些函数足够强大,可以被视为具有抵抗力(例如,SHA-256)。
在各种 SHA 算法中,SHA-0 和 SHA-1 组不再安全,因为已经发现冲突。目前,SHA-2 和 SHA-3组被认为是抗冲突的。
原像电阻的特性与单向函数的概念有关。当有人找到生成特定输出的输入的可能性非常低时,哈希函数被认为是抗原像的。
请注意,此属性与前一个属性不同,因为攻击者会试图通过查看给定的输出来猜测输入是什么。另一方面,当有人发现产生相同输出的两个不同输入时,就会发生冲突,但使用哪个输入并不重要。
原像抗性的特性对于保护数据很有价值,因为消息的简单散列可以证明其真实性,而无需披露信息。在实践中,许多服务提供商和 Web 应用程序存储和使用从密码生成的哈希值,而不是明文密码。
为简化起见,我们可以说第二原像电阻介于其他两个属性之间。当有人能够找到一个特定的输入,该输入生成与他们已经知道的另一个输入相同的输出时,就会发生二次原像攻击。
换句话说,第二原像攻击涉及寻找碰撞,但不是搜索生成相同散列的两个随机输入,而是搜索生成由另一个特定输入生成的相同散列的输入。
因此,任何抗碰撞的哈希函数也能抗第二原像攻击,因为后者总是意味着碰撞。然而,人们仍然可以对抗碰撞函数执行原像攻击,因为它意味着从单个输出中找到单个输入。
比特币挖矿有很多步骤 涉及哈希函数,例如检查余额、链接交易输入和输出,以及对区块内的交易进行哈希处理以形成 默克尔树。但比特币区块链安全的主要原因之一 是矿工需要执行无数的散列操作,以便最终为下一个区块找到有效的解决方案。
具体来说,矿工在为其候选块创建哈希值时必须尝试几种不同的输入。本质上,如果他们生成以一定数量的零开头的输出哈希,他们将只能验证他们的块。零的数量决定了挖矿难度,它根据网络的哈希率而变化。
在这种情况下,哈希率表示在比特币挖矿中投入了多少计算机能力。如果网络的哈希率增加,比特币协议会自动调整挖矿难度,使挖出一个区块所需的平均时间保持在接近 10 分钟。相反,如果几个矿工决定停止挖矿,导致算力大幅下降,则会调整挖矿难度,使其更容易挖矿(直到平均出块时间回到10分钟)。
请注意,矿工不必发现冲突,因为他们可以生成多个散列作为有效输出(从一定数量的零开始)。所以对于某个区块有几种可能的解决方案,矿工只需要找到其中一种——根据挖矿难度确定的阈值。
由于比特币挖矿是一项成本密集型任务,矿工没有理由欺骗系统,因为这会导致重大的经济损失。加入区块链的矿工越多,它就变得越大越强大。(国内禁止参与挖矿)
毫无疑问,哈希函数是计算机科学中必不可少的工具,尤其是在处理大量数据时。当与密码学结合时,散列算法可以非常通用,以多种不同的方式提供安全性和身份验证。因此,加密哈希函数对几乎所有加密货币网络都至关重要,因此了解它们的属性和工作机制对于任何对区块链技术感兴趣的人肯定会有所帮助。
㈩ 【区块链】什么是比特币地址
比特币地址是一串由字母和数字组成的26位到34位字符串,看起来有些像乱码。但它就是你个人的比特币账户,相当于你的银行卡卡号,任何人都可以通过你的比特币地址给你转账比特币。
它与比特币私钥不同,不会因为信息泄露而造成比特币丢失,因此你可以将比特币地址放心的告诉任何人。
通过区块链浏览器可以查看每个比特币地址所有的转账交易记录。
常用的比特币区块链浏览器有:
https://btc.com/block
https://www.blockchain.com/zh-cn/explorer
我们常用的比特币地址格式一般有如下四种。
1、BASE58格式
BASE58格式是人们常见的比特币地址格式,一般由1开头的。
例如:
2、HASH160格式
HASH160格式为RIPEMD160算法对130位公钥的SHA256签名进行计算得出的结果 。
例如:
3、WIF压缩格式
WIF压缩格式即钱包输入格式,是将BASE58格式进行压缩后的结果130位公钥格式 这是最原始的由ECDSA算法计算出来的比特币公钥。
例如:
4、60位公钥格式
60位公钥格式即130位公钥进行压缩后得出的结果。
例如:
比特币是建立在数学加密学基础上的,中本聪大神用了椭圆加密算法(ECDSA)来产生比特币的私钥和公钥。
由私钥是可以计算出公钥的,公钥的值经过一系列数字签名运算会得到比特币地址。
比特币地址是由算法随机生成,那么就会有人问,既然都是随机生成的,那么比特币的地址会不会重复呢?关于这个问题,想必就更不用担心。
因为比特币的私钥长度是256位的二进制串,那么随机生成的两个私钥正好重复的的概率是2 ^ 256 ≈ 10 ^ 77之一,这个数字大到你根本无法想象,比中彩票的概率还要小好多;所以不用担心的啦,每个人的比特币地址都是独一无二的。