网友发帖:
比特币的私钥,公钥和地址是什么?。在比特币中,经常出现三个词:私钥,公钥和地址。他们是什么意思呢?他们之间又有什么样的关系呢?搞清楚他们之间的关系和区别,是了解比特币的基础。私钥先说说私钥,一般我们看到的私钥是下面这样的一段字符串:
5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss
支持比特币协议的应用都可以正确把这段字符串转换成比特币的私钥,再转换成公钥,就可以得到一个地址,如果该地址上面对应的比特币,就可以使用这个私钥花费上面的比特币。- 私钥本质上是随机数私钥本质上是一个随机数,由32个byte组成的数组,1个byte等于8位二进制,一个二进制只有两个值0或者1。所以私钥的总数是将近2^(8*32)=2^256个,但是有一些私钥并不能使用,他真实的大小是介于:1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的数。这个数量已经超过了宇宙中原子的总数,想要遍历所有的私钥,耗尽整个太阳的能量也是不可能的。
我们所说的比特币私钥的是密码学上面安全的,并不是说不可能出现重复的私钥,而是说不可能通过遍历的方式找到某一个特定的私钥,或者通过其它的方式,不通过私钥就能花费地址上面的比特币,私钥的安全性是由数学上保证的。
私钥的总数量很大,但是私钥的生成是依赖随机数的,真正的随机是很难做到的,大部分私钥的生成都是依赖于伪随机算法(PRNG)。伪随机是用函数生成随机数。它并不真正是随机的。只是一个比较近似z真随机的随机数。
私钥生成的随机性就很重要的,密码学上面安全的随机是指:随机是不可预测的,随机的结果是不可遍历的,如果不是安全的随机数生成器,生成的私钥就会被别人碰撞到。不依赖随机生成的私钥就会大大的降低生生成的概率空间。
公钥和地址的生成都依赖私钥,所以我们只需要保存私钥即可,有了私钥就能生成公钥和地址,就能够花费对应地址上面的比特币。- 私钥到字符串
上面提高的私钥字符串是按照一定的规律从32位byte数据格式化生成的,32个byte的数组是由256个0或者1组成的,如果显示出来,不仅仅是识别率不高,而且私钥太长。
因此私钥字符串就是对于原始的随机数进行一定的转换,转换为识别率高的形式,上面私钥的是对32个byte数组就做了Base58的转换.Base58是用于比特币中使用的一种独特的编码方式,主要用于产生Bitcoin的钱包地址和私钥。相比Base64,Base58不使用数字"0",字母大写"O",字母大写"I",和字母小写"l",以及"+"和"/"符号。这样做的主要原因是为了肉眼容易识别,在输入的时候不容易打错,
不过上面那段没有规律的字符串输入起来还是挺费劲的,当然也可以把私钥转换为单词的形式(12或者24个单词),设置是脑钱包的形式,又自己记住的某一句话来生成私钥,注意这种方式生成的私钥随机的安全性并不高。我们看到的私钥除了以5开头的以外,还有以L和K开头的私钥,为什么会出现这样的情况呢?5,L,K又带代表什么呢?这就要说到公钥了。公钥比特币的根基是椭圆曲线数字签名算法:椭圆曲线数字签名算法(ECDSA)是使用椭圆曲线密码(ECC)对数字签名算法(DSA)的模拟
椭圆曲线加密法(ECC)是一种公钥加密技术:ECC以椭圆曲线理论为基础,利用椭圆曲线等式的性质来产生密钥,而不是采用传统的方法利用大质数的积来产生,其特点是:密钥长度小,安全性能高,整个数字签名耗时小。
DSA(DigitalSignature Standard)数字签名技术:在DSA数字签名和认证中,发送者使用自己的私钥对文件或消息进行签名,接受者收到消息后使用发送者的公钥来验