这篇文章上次修改于 2323 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

钱包介绍

钱包是区块链很重要的一个概念,讲到这我们很多人联想钱包这个概念能够想到肯定是我们真实的钱包或者微信钱包、支付宝。将到这钱包就有了一个大概的分类了——数字钱包、现实钱包
我们说的数字钱包与现实的钱包还是有很多差别的,首先现实的钱包存的是白花花的钞票,而我们的数字钱包呢存储的只是一把钥匙。
我们拿微信钱包举个例子,微信钱包就是我们存储法币的保险箱,每个账号密码都是一把钥匙用来打开相应的保险箱,然而这些保险箱都存储在腾讯的服务器上。
那么我们要讲的区块链钱包和普通的数字钱包很类似,钱包里存储只有一把私钥,私钥都是一把钥匙用来打开相应的保险箱,然而这些保险箱都存储在区块链网络上。

那么钱包里面的私钥有什么作用呢

  1. 生成公钥,然后由公钥生成地址(类似于微信的收款二维码)
  2. 签名,确保交易的正确性(类似支付密码)
区块链网络的信息都存储在节点上,每个节点都是有全网的转账信息,所以要篡改的话信息的话要在短时间内篡改全网半数以上的节点的信息,理论上是非常安全的

私钥

私钥在区块链中就非常重要了,他是资产安全的保障,也是资产消费的凭证,如果你的私钥信息泄露了也就意味着钱包丢了、你的资产安全性受到了很大的影响。如果你忘记了私钥,那么你相对应的资产就意味着丢失了,你是没有任何办法来找回的。

既然私钥这么重要有没有什么安全放心的保存方式呢!

  1. 比特币第 38 号补充协议也就是 BIP38
  2. 以太坊 KeyStore

除了这两种记录之外还有 助记词、明文私钥 等等的方式,但是这都是没有经过加密的一旦保护不好泄露了会导致资产丢失,非常不安全

生成私钥

那么私钥是怎么生成的呢,其实它就是一个 256 位的二进制随机数,随机的目的是保证不重复,随机的方式当然就有很多了,比如抛 256 次硬币,正面记 1、反面记 0。
而我们的计算机的实现呢,是通过密码学安全随机出一段字符串,然后进行 SHA256 哈希算法就可以产生私钥了。
当然这只是原始的私钥,我们不同的区块链网络还需要经过不同格式化才能产生对应区块链网络的私钥。

公钥

公钥就是在网络上传播的,它的作用就是其他人在不知道私钥的情况下都可以去验证交易的签名,是不是对应的私钥进行签名的,以用来验证交易的正确性,从而各个节点达成共识。

简单说一下公私钥

  1. 公钥是由私钥计算出来的,使用公钥加密的数据可以使用私钥解谜。
  2. 私钥计算的签名可以由公钥来验证
  3. 无法由公钥推算出私钥

公钥的生成

在之前包括现在很多公私钥都是由 RSA、DSA 算法来生成的,而区块链的公私钥是由 ECC(椭圆曲线加密算法)来实现的,那么 ECC 相比 RSA、DSA 有什么优势呢?

  1. 相同密钥长度下,安全性能更高,如160位ECC已经与1024位RSA、DSA有相同的安全强度。
  2. 计算量小,处理速度快,在私钥的处理速度上(解密和签名),ECC远 比RSA、DSA快得多。
  3. 存储空间占用小 ECC的密钥尺寸和系统参数与RSA、DSA相比要小得多, 所以占用的存储空间小得多。
  4. 带宽要求低使得ECC具有广泛得应用前景

正是基于这几点所以非常适合区块链使用,我在上面提到过,区块链的所有数据都是存在各个节点的,每个节点都有全部的数据,所以对数据大小很敏感,还有一点交易需要在网络中快速传播,所以 ECC 天生适合用在区块链上。

椭圆曲线加密法是一种基于离散对数问题的非对称(或公钥)加密法,可以用对椭圆曲线上的点进行加法或乘法运算来表达。

椭圆曲线
上图就是大概椭圆曲线的样子了,如果想了解椭圆曲线请看下面的这篇文章
椭圆曲线算法

区块链中使用的都是 secp256k1 曲线他的函数定义

y2 mod p = (x3 + 7) mod p

上述mod p(素数p取模)表明该曲线是在素数阶p的有限域内,也写作Fp,其中 p 是一个非常大的素数。

p = 115792089237316195423570985008687907853269984665640564039457584007908834671663 

其中公钥生成的公式是

{K = priv * G}

G 是生成点,他是 Secp256k1 椭圆曲线定义中的一部分,他的坐标点是

GX = 79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
GY = 483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8

得到的公钥就是 04 + KX + KY
在比特币中还有压缩,非压缩的概念,非压缩公钥就是 04 + KX + KY,压缩公钥就是先判断 KY 的奇偶如果是偶数 02 + KX,如果是奇数就是 03 + KY

地址

地址就是公钥进行哈希,不同的区块链系统各不相同,比如 EOS 还没有地址这个概念

总结

以上我们简单的了解区块链系统的几个概念,让我们好好了解区块链!
那么我们谈个很严肃的问题,为什么区块链一定要有币?

众所周知区块链安全需要靠装机量,需要节点数量来保证安全,凭什么人们随随便便就装你的节点,装了节点还需要一直开机费电,所以就要有奖励,比如你这台电脑记了一笔账,你就会拿到一笔奖励,这个奖励就是币,这也就是所谓的挖矿,还有一点就是区块链网络是分布式的,他的同步效率说实话是比较差的,为了防止人们频繁发起乱七八糟的交易,造成区块链网络阻塞,所以进行交易必须要付一笔手续费,防止滥刷!既能方式滥刷,也能促进装机量。

我现在正在维护一个 比特币、以太坊、EOS的公私钥生成以及签名的库,欢迎各位有志青年一块来维护
BlockchainWallet-Crypto