主页 > 怎么下载imtoken钱包最安全 > 你从未想象过的比特币基础知识
你从未想象过的比特币基础知识
椭圆曲线数字签名算法
椭圆曲线数字签名算法 (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的一个实现:
私钥 = SHA256()1
迷你私钥存在安全问题。由于输入集太小,很容易被构造常见组合的彩虹表暴力破解,所以通常使用系统随机生成比较好,没有安全隐患。
公钥
公钥和私钥是对应的,私钥可以推导出唯一的公钥,但公钥不能推导出私钥。公钥有两种形式:压缩和未压缩。
比特币早期使用的是未压缩的公钥,现在大多数客户端默认使用压缩的公钥。
这似乎是比特币系统中的一个类似功能的错误。早期的人写的代码少,代码多,openssl库的文档不够好,导致中本聪认为必须使用未压缩的完整代码。公钥,后来我们发现公钥的左右32个字节是有关系的,左边(X)可以推导出右边(Y)的平方值,左边(X)就够了。
这两种方法现在系统共存,应该永远共存。两个公钥的第一个字节是标识位,压缩后的 33 字节,未压缩的 65 字节。 0x04开头为未压缩,0x02/0x03开头为压缩公钥,0x02/0x03的选择由右Y平方的奇偶性决定。
压缩后的形式可以减少Tx/Block的大小,每个Tx Input减少32字节。
签名
使用私钥 (Sign) 对数据进行签名将产生签名 (Signature)。通常,首先将数据生成为Hash值,然后对Hash值进行签名。一个签名由两部分组成:R+S。从签名和哈希值可以推导出一个公钥,通过验证公钥可以知道签名是否是由公钥对应的私钥签名的。
通常每个签名会有三个长度:73、72、71,验证匹配的概率分别为25%、50%、25%。因此,每次签名后,都需要找出满足验证的签名长度,然后提供给验证者。
地址
地址是一种方便人们交换的方案,因为公钥太长(130串或66串)。地址长度为25字节,转换为base58编码后为34或35个字符。 base58是一种类似于base64的编码,但去掉了可能造成视觉混淆的字符,并在地址末尾添加了4字节校验位,以确保当人们交换个别字符不正确时,也可以因地址验证失败而停止操作错误。
由于公钥有两种形式,一个公钥对应两个地址。两个地址可以使用相同的私钥签署交易。
从公钥生成地址的算法:
版本 = 0 的 1 个字节(零);在测试网络上,这是 111 的 1 个字节
密钥哈希 = 与 RIPEMD-160 连接的版本(SHA-256(公钥))
校验和 = SHA-256 的第一个 4 个字节(SHA-256(密钥哈希))
比特币地址 = Base58Encode(Key hash concatenated with Checksum)1234
下图显示了从非压缩公钥生成地址的过程:
用于压缩公钥生成地址时,只取公钥的X部分。
派生关系
三向推导关系:私钥>>公钥>>两个地址。这个过程是不可逆的。如果你有私钥,你就拥有了一切,但通常为了方便,也会存储相应的公钥和地址。
交易
比特币交易(Transation,简称Tx)并不是单手支付单手交付等通常意义上的交易,而是一种转账。一笔交易由 N 个输入和 M 个输出组成。一笔交易的每一个输入都是一个前向交易的输出,然后溯源比特币基础知识,必然有一笔没有输入的交易,这样的一笔交易称为 CoinBase Tx。 CoinBase 交易是奖励矿工产生的交易,始终是区块中的第一笔交易。
有一个输入输出Tx数据:
输入:
上一个交易:f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
p>
索引:0
scriptSig:304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501
输出:
价值:5000000000
scriptPubKey:OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_CHECKSIG12345678910
一旦一个 Tx 的第 N 个输出成为另一个 Tx 的输入,比特币就会被花费。每笔交易都由一个唯一的 Hash 字符串标识,该字符串通过对交易数据进行两次 SHA256 哈希运算得到:
Tx 哈希 ID = SHA256(SHA256(Tx 数据))1
矿工费
交易费是一种激励奖励,旨在鼓励矿工将 Tx 打包到 Block 中。计算一笔交易的矿工费:
交易费用 = SUM(Input's amount) - SUM(Output's amount)1
每笔Tx的矿工费必须大于等于0,否则交易Tx是非法的,不会被网络接收到。
数据块
数据块(Block)是Block Meta和Tx存储的地方。区块的第一个 Tx 始终是 CoinBase Tx,因此该区块的交易数量始终大于等于 1,随后是此期间网络广播的 Tx。
找到一个合适的区块是一件非常困难的事情,需要大量的数学计算才能找出来,而计算过程称为“挖矿”。第一个发现者将获得一些比特币奖励。
数据链
多个区块连接起来形成一条数据链(Block Chain)。
比特币系统为了引入容错和竞争机制,允许区块链分叉,但每个节点总是倾向于选择最高、难度最高的链,称为最佳链,节点只识别上面的数据最佳连锁店。
第一个块称为创世块,高度设置为零。每个后续块添加,高度增加一。目前不允许在创世区块中使用比特币。
每个区块中的Tx在这个区块中是唯一的
一个Tx通常只存在于一个区块中,也可能出现在多个区块中,但只在最佳链中的一个区块中出现一次
货币存储
比特币是一种加密货币,一种纯数字货币,没有可以看到和触摸的硬币或纸币。持有比特币的人意味着:
他拥有一些地址的私钥
这些地址是几个没有成本的交易的输出
所有货币记录以交易的形式存储在整个区块链数据块中,没有交易也没有货币。金钱不会凭空产生,也不会凭空消失。丢失一个地址的私钥意味着该地址上的Tx无法签名,也不能作为下一个Tx的输入,比特币就被认为永远消失了。
货币发行
由于所有交易的输入源均来自 CoinBase,所以 CoinBase 生成时,即表示货币发行。比特币采用衰减发行,每四年减半。前四年每个区块的coinbase奖励50BTC,其次是25btc,12.5btc,……最后在2140年归零。此时总量达到2100万btc的上限。
减半周期,严格来说,并不完全是四年,而是每产生 210,000 个区块。之所以俗称四年减半,是因为比特币系统会根据全网算力自动调整难度系统,这样每两周就会产生2016个左右的区块,所以大约有21万个区块四年。
函数GetBlockValue()用于计算区块奖励值:
int64 静态 GetBlockValue(int nHeight, int64 nFees)
{
int64 nSubsidy = 50 * COIN;
// 补贴每 210000 个区块减半,大约每 4 年发生一次
nSubsidy >>= (nHeight / 210000);
返回 nSubsidy + nFees;
}123456789
当达到 2100 万比特币时,CoinBase 将不再有奖励,矿工的唯一收入来源是交易费。这个时候每个区块的收益绝对值很低比特币基础知识,但是这个时候比特币应该很红火,币值会很高,这样矿工还是有盈利的图。
消除多次付款
传统货币存在多重支付(Double Spending)问题,例如非数字时代的支票欺诈、数字时代的信用卡欺诈等。在比特币系统中,每笔交易的确认都需要广播在整个网络上并记录在区块中,才能真正得到确认。每一笔钱的花费都需要检测最后一笔输入交易的状态。数据是有时间戳的并且是公开的 是的,BlockChain 以巨大的计算能力保证了它的安全性。因此,比特币系统大大降低了货币多次支付的风险,接近于零。通过等待多个区块确认,概率降低到零。一般6次确认后,可以认为是非常安全的。但对于可能影响您生活的大笔付款,建议等待 20~30 次确认。
匿名
任何人都可以轻松生成大量私钥、公钥、地址。地址本身是匿名的,通过与多个地址进行交易可以进一步提高匿名性。但这种匿名并不像媒体宣传的那样匿名。因为比特币比特币的交易数据是公开的,所以任何资金的流向都可以追踪。
不了解比特币的人对其匿名性有些担忧,比如担心它更有利于从事非法业务;了解比特币人们对其伪匿名性感到困扰。传统货币消费也是匿名的,有法律保障,大多数国家不允许个人提取纸币。
地址本身是匿名的,但你可以使用与地址对应的私钥向公众签名消息公开证明你拥有某个比特币地址。
其他名词
哈希
Hash 是将一个数字映射到另一个集合的函数。不同的哈希函数映射的空间不同,生成的值在计算机上反映时的长度也不同。对于同一个哈希函数,同一个输入必然是同一个输出,但是同一个输出可能有不同的输入。这种情况称为哈希冲突。
常用的散列函数有CRC32、MD5、SHA1、SHA-256、SHA-512、RIPEMD-160等。散列函数在计算中应用广泛。 SHA-256 和 RIPEMD-160 主要用于比特币。
大脑钱包和纸钱包
前面提到的脑钱包和纸钱包并不是真正的钱包分类,只是一种生成和存储密钥的方式。脑钱包是迷你私钥的产物。大脑钱包是存放在你脑袋里的钥匙,纸钱包是印在纸上的钥匙,仅此而已。
有同学提到,用电脑文件作为输入,比如一张几MB大小的照片,通过一定的Hash运算得到私钥。该方案安全性好,可以防止盗取私钥的木马根据特征对私钥进行扫描。私钥以文本形式存储是有特点的,但是照片文件很难被检测到,即使放在云盘等第三方存储空间也是安全的。