主页 > imtoken下载链接 > 比特币客户端和钱包

比特币客户端和钱包

imtoken下载链接 2024-01-26 05:09:40

基本概念 椭圆曲线数字签名算法

椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线模拟数字签名算法(DSA),是比特币系统的基石。

私钥

非公开,所有者需要妥善保管。 它通常由随机算法生成。 说白了就是一个巨大的随机整数,256位,32字节。 1到0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的任何数字都可以认为是合法的私钥。 因此,除了随机方法之外,使用特定算法从固定输入中获取32字节输出的算法也可以成为获取私钥的方法。 于是,就有了迷你私钥(Mini Privkey),原理很简单,例如使用SHA256的一个实现:

private key = SHA256()

mini私钥存在安全问题,因为输入集太小,容易被构造常用组合的彩虹表暴力破解,所以通常使用系统随机生成比较好, 不存在安全隐患。

公钥

公钥对应于私钥。 私钥可以导出唯一的公钥,但是公钥不能导出私钥。 公钥有两种形式:压缩的和未压缩的。

早期的比特币使用未压缩的公钥,但现在大多数客户端默认使用压缩公钥。 这似乎是比特币系统中看起来像一个功能的错误。 早期,人们住的少,住的多。 代码不够详细,openssl库的文档也不够好,导致中本聪认为必须使用未压缩的完整公钥。 公钥左右32字节是相关的,左边(X)可以推导出右边(Y)的平方值,左边(X)就够了。

现在这两种方法在系统中共存,而且应该一直共存。 两个公钥的第一个字节是标识位,压缩后33字节,未压缩65字节。 0x04开头的是非压缩公钥,0x02/0x03开头的是压缩公钥。 0x02/0x03的选择由右边Y的平方根后的奇偶校验决定。

压缩形式可以减少Tx/Block的大小,每个Tx Input可以减少32字节。

符号

使用私钥 (Sign) 对数据进行签名会产生签名 (Signature)。 通常,首先将数据生成一个Hash值,然后对Hash值进行签名。 签名由两部分组成:R+S。从签名(signature)和Hash值可以推导出一个公钥,通过验证公钥就可以知道签名是否被对应的私钥签名公钥。

比特币分叉影响比特币总量_比特币衰减周期_比特币价值比特币最新

通常每个签名有73、72、71三种长度,校验和匹配的概率分别为25%、50%、25%。 因此,在每次签名后,需要找出满足验证的签名长度,然后提供给验证者。

地址

该地址是为了方便人们交换而制定的方案,因为公钥太长(130 串或 66 串)。 地址的长度为 25 个字节。 转成base58编码后就是34或35个字符。 base58是一种类似于base64的编码,但是去掉了容易引起视觉混淆的字符,并在地址末尾增加了4个字节的校验位,以保证当人们错误地交换个别字符时,也可以因地址验证失败 滥用。

由于公钥有两种形式,一个公钥对应两个地址。 两个地址都可以使用相同的私钥签署交易。

公钥生成地址算法:

1
2
3
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)

下图显示了从非压缩公钥生成地址的过程:

pubkeytoaddr

压缩公钥生成地址时,只能取公钥的X部分。

派生关系

推导出三者的关系:私钥>>公钥>>两个地址。 这个过程是不可逆的。 有了私钥,就万事大吉了,但通常为了方便,也会存储对应的公钥和地址。

贸易

比特币价值比特币最新_比特币衰减周期_比特币分叉影响比特币总量

比特币交易(Transation,简称Tx)不是通常意义上的一手支付、一手交付等交易,而是转账。 一笔交易由 N 个输入和 M 个输出组成。 交易的每一个输入都是正向交易的一个输出,所以追根溯源,必然有一个没有输入的交易。 这种类型的交易称为 CoinBase Tx。 CoinBase交易是奖励矿工产生的交易,交易总是位于Block的第一个区块。

qq20130727-18

有一个输入输出Tx数据:

Input:
Previous tx: f5d8ee39a430901c91a5917b9f2dc19d6d1a0e9cea205b009ca73dd04470b9a6
Index: 0
scriptSig: 304502206e21798a42fae0e854281abd38bacd1aeed3ee3738d9e1446618c4571d10
90db022100e2ac980643b0b82c0e88ffdfec6b64e3e6ba35e7ba5fdd7d5d6cc8d25c6b241501
Output:
Value: 5000000000
scriptPubKey: OP_DUP OP_HASH160 404371705fa9bd789a2fcd52d2c580b65d35549d
OP_EQUALVERIFY OP_CHECKSIG

比特币衰减周期_比特币价值比特币最新_比特币分叉影响比特币总量

一旦某个 Tx 的第 N 个输出成为另一个 Tx 的输入,比特币就被花掉了。 每笔交易都由一个唯一的哈希字符串标识,该哈希字符串是通过对交易数据进行两次 SHA256 哈希运算得到的:

Tx Hash ID = SHA256(SHA256(Tx Data))

矿工费

矿工费(Transaction Fee)是鼓励矿工将Tx打包进Block的奖励。 计算一笔交易的汽油费:

Transaction Fee = SUM(Input's amount) - SUM(Output's amount)

每笔Tx的矿工费必须大于或等于0,否则Tx将是非法的,不会被网络接受。

数据块

数据块(Block)是存储 Block Meta 和 Tx 的地方。 一个区块的第一个 Tx 总是 CoinBase Tx,所以区块中的交易数量总是大于等于 1,后面是这段时间网络广播的 Tx。

找到合适的区块是一件非常困难的事情,需要大量的数学计算才能找到。 这个计算过程称为“挖矿”。 第一个发现者将获得一些比特币奖励。

数据链接

比特币衰减周期_比特币价值比特币最新_比特币分叉影响比特币总量

多个Block连接起来形成一条数据链(Block Chain)。

blockchain

为了引入容错和竞争机制比特币衰减周期,比特币系统允许区块链分叉,但每个节点总是倾向于选择最高和最难的链,称为最佳链,节点只识别数据在最佳链上。

第一个 Block 称为 Genesis Block,其高度设置为零,每添加一个新 Block,高度就会增加 1。 目前不允许在 Genesis Block 中使用比特币。

货币存储

比特币是一种加密货币,一种纯粹的数字货币,没有有形的硬币或纸币。 持有比特币的人意味着:

它拥有一些地址的私钥,这些私钥是多次交易的输出而无需花费

所有货币记录都以交易的形式存储在整个区块链数据块中,没有交易就没有货币。 金钱不会凭空产生或消失。 丢失一个地址的私钥意味着这个地址上的Tx不能被签名,不能作为下一个Tx的输入,所以比特币就被认为永远消失了。

货币问题

由于所有交易的输入源都来自CoinBase,所以CoinBase的产生就意味着货币的发行。 比特币采用衰减发行,每四年产量减半。 每个区块的coinbase在前四年奖励50BTC,之后是25btc,12.5btc,……最后在2140年归零,当总量达到2100万个btc的上限时。

total_bitcoins_over_time_graph

严格来说,减半周期并不是恰好四年,而是每 210,000 个区块。 之所以俗称四年减半,是因为比特币系统会根据全网算力的大小自动调整难度系统,这样2016个区块大约每两周产生一次,所以大约21万个四年后的街区。

函数 GetBlockValue() 用于计算挖出区块的奖励值:

比特币分叉影响比特币总量_比特币价值比特币最新_比特币衰减周期

1
2
3
4
5
6
7
8
9

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;
}

达到2100万个btc后,CoinBase将不再有奖励,矿工的唯一收入来源就是矿工交易费。 这个时候每个区块的收益btc的绝对值很低,但是这个时候比特币应该会很繁荣,币值会相当高,让矿工还是有利润的。

避免多次付款

传统货币存在双重支出问题,例如非数字时代的支票欺诈和数字时代的信用卡欺诈。 在比特币系统中,每笔交易的确认都需要全网广播,并包含在Block中,才能真正得到确认。 每花费一笔钱,都需要查看上次输入交易的状态。 数据具有时间戳和公开性,区块链以其庞大的计算能力保证其安全性。 因此,比特币系统大大降低了货币多次支付的风险比特币衰减周期,几乎为零。 通过等待多个区块确认,概率降为零。 一般得到6次确认后,就可以认为是非常安全的了。 但对于可能影响您生活的大额付款,建议等待 20-30 次确认。

匿名

任何人都可以轻松生成大量的私钥、公钥和地址。 地址本身是匿名的,通过多个地址进行交易可以进一步提高匿名性。 但匿名并不是像媒体宣传的那样一定程度的匿名。 因为比特币的交易数据是公开的,任何资金的流向都可以被追踪。

不了解比特币的人对它的匿名性有一些顾虑,比如担心它更有利于非法经营; 了解比特币的人都被它的伪匿名性所困扰。 传统货币在消费上也是匿名的,受到法律的保障。 大多数国家不允许个人在纸币上作画。

该地址本身是匿名的,但是您可以通过使用该地址对应的私钥对消息进行签名来向公众证明您拥有一个比特币地址。

其他名词散列

哈希(Hash)是一种将一个数映射到另一个集合的函数。 不同的哈希函数有不同的映射空间,反映在计算机上时,生成的值也有不同的长度。 相同的哈希函数,相同的输入必然是相同的输出,但相同的输出可能有不同的输入,这种情况称为哈希碰撞。

常见的哈希函数有CRC32、MD5、SHA1、SHA-256、SHA-512、RIPEMD-160等,哈希函数在计算中应用广泛。 比特币主要使用 SHA-256 和 RIPEMD-160。

脑钱包&纸钱包

前面提到的脑钱包和纸钱包其实不属于钱包,只是生成和存储密钥的方式。 大脑钱包是迷你私钥的产物。 脑钱包就是把钥匙藏在脑袋里,纸钱包就是把钥匙印在纸上,仅此而已。

有同学提到用电脑文件作为输入,比如一张几MB大小的照片,经过某种Hash运算得到私钥的方法。 该方案的安全性还是不错的,同时可以防止木马根据自身特征扫描私钥窃取私钥。 以文本形式存储私钥是特点,但是照片文件很难被检测到,即使存储在云盘等第三方存储空间也是安全的。