一、什么是区块链钱包

  区块链数字钱包是管理区块链节点的密钥和地址的工具,用来帮助用户存储、管理、交易数字货币,它并没有真正的存储货币资产,而是作为与区块链交互的工具,可加载区块链账本数据。区块链的第一个落地应用就是区块链钱包,全球第一个区块链钱包在2009年1月由中本聪发布。

  从技术角度来说,钱包的核心功能是私钥的创建、存储和使用,从用户的角度来说,具体为收款、转账、查询三大基础功能,便于用户做数字资产管理。

 

二、区块链钱包的地址、密钥、助记词

地址:

   区块链钱包地址就相当于银行卡卡号,在创建钱包后生成,一个区块链钱包对应一个区块链钱包地址,就相当于一张卡只有一个卡号,区块链钱包地址可以接受和转出加密货币。
 
密钥:

  密钥中的「公钥」则是银行卡的密码,

  密钥中的「私钥」是更高级的能够证明用户身份的东西,即证明持卡人身份的身份证号码。私钥意味着数字货币的一切权, 任何时候私钥丢掉,都意味着一切的数字财物都能够被轻易盗取,所以私钥一般存储在本地,比如手机App和互联网硬件,而不是像我们日常生活中放在支付宝中。
 
助记词:

  助记词是明文「私钥」的另一种表现形式,最早是由BIP39提案提出,钱包助记词的诞生是私钥太难记,但是又要保证钱包的安全性。一般情况下,助记词由一些单词组成,只要你记住这些单词,按照顺序在钱包中输入,也能打开钱包。助记词一般由12、15、18、21、24个单词构成,这些单词都取自一个固定词库, 其生成顺序也是按照一定算法而来。

  虽然助记词和 Keystore 都可以作为私钥的另一种表现形式, 但与 Keystore 不同的是,助记词是未经加密的私钥, 没有任何安全性可言,任何人得到了你的助记词,,可以不费吹灰之力的夺走你的资产。

  钱包助记词的诞生是私钥太难记,但是又要保证钱包的安全性。一般情况下,助记词由一些单词组成,只要你记住这些单词,按照顺序在钱包中输入,也能打开钱包。

 

注意:

  要注意的是一个区块链钱包只能有且仅有一个私钥并且不能修改,就相当于用户有且仅有一个身份证号码不能修改,私钥可以证明该用户是钱包所有者,允许该用户进入钱包并且拥有钱包的掌控权。
  同时,可以用来找回公钥和钱包地址,就像用户银行卡丢了或者密码忘记了,可以带身份证去银行找回一样。但是如果身份证丢了,事情要麻烦的多。私钥也是一样,而且在加密世界,没有公安部门,私钥丢失将无法重新办理,只能利用“助记词”找回。

 

三、区块链钱包的种类

  • 依据钱包是否触网,分为冷钱包和热钱包

    • 热钱包:指的是以任何方式与网络连接的钱包。热钱包不断涉及买卖、转账、在线验证和付出,有必要坚持在线,功用多但安全性差。这种钱包可能会被偷或被攻击。 一般来说,大部分用户热衷于热钱包,由于它运用方便。
    • 冷钱包:指的是与互联网无任何连接的钱包。冷钱包一般以硬件设备的方式出现,用来保存用户钱包的私钥并与网络阻隔,安全性高。 一般情况下,财物是转入,而不是转出。
       
  • 依据私钥归属可分为集中式钱包和分散式钱包

    • 集中式钱包:用户不持有钱包的私钥,私钥由第三方或服务商保管。
    • 去中心化钱包:用户自己持有钱包的私钥,第三方或服务供给商不知道也不持有用户的私钥。
       
  • 依据节点数据存储是否完好,可分为全节点钱包和轻节点钱包

    • 全节点钱包:将区块链中的一切数据同步到钱包中,占用存储空间大,运用起来相对费事,所以大部分全节点钱包都是桌面钱包。
    • 轻节点钱包:一般轻钱包会运转一个完好的节点,同步一切数据,然后依据不同的钱包地址划分数据,按需发送。 由于轻节点钱包的用户体验更好,尤其是关于新手区块链来说,并且它体积小,占用空间小,能够支撑多种数字财物,所以大部分用户都会选择轻节点钱包。
       
  • 依据是否支撑多币种,可分为单/多币种钱包和全币种钱包

    • 单币种钱包:指只服务于单一区块链数字财物的区块链钱包。 由于它一般只支撑单一的区块链骨干平台,所以也被称为骨干钱包,一般由项目方或社区开发。
    • 多钱银钱包:支撑多种区块链数字财物的钱包。 各种区块链数字财物能够是区块链骨干网和围绕骨干网协议设置的令牌,或者是各种区块链骨干网上的不同数字财物。
    • 全钱银钱包:支撑区块链骨干网中一切类型的数字财物和令牌财物的区块链钱包。 但是全币钱包现在仅仅一个想法,由于数字钱银在不断增加,现在还无法完成。

 

四、区块链钱包相关底层原理

  钱包助记词生成了种子,种子发芽结果,果实就是私钥,私钥推导出了公钥,公钥数据的节选部分成了钱包地址。同时钱包提供了Key Store,也是私钥加密后的文件为了配合正常的密码使用,便捷用户的钱包使用。

 

对应用到的技术:

4.1 获取随机数

   随机数用于生成私钥,若随机数可以被预测或重现,则私钥就会立刻形同虚设。软件本身是无法生成具有不可重现性的随机数,因为运行软件的计算机本身仅具备有限的内部状态。所以通过确定性的代码,在周期足够长的情况下,必然会出现相同的随机数。

   因此要生成具备不可重现性的随机数,需要从不确定的物理现象中获取信息,比如周围温度、环境噪音、鼠标移动,键盘输入间隔等。

   在 Linux 内核中维护了一个熵池用来收集来自设备驱动程序和其它来源的环境噪音。熵(entropy)是描述系统混乱无序程度的物理量,一个系统的熵越大则说明该系统的有序性越差,即不确定性越大。

   所以在选择生成私钥的随机数方法时,需要选择满足密码学强度的随机数方法,比如 Node 中的 crypto.randomBytes。当你调用 crypto.randomBytes(32) 方法时,它会等待熵池搜集足够的信息后,返回 64 位的随机数,即私钥。

 

4.2 非对称加密

  在非对称加密中,将密钥分为加密密钥和解密密钥,也就是我们常说的公钥和私钥。公钥和私钥一一对应,由公钥加密的密文,必须使用公钥配对的私钥才可以解密。

  以太坊生成公钥时,使用的是非对称加密中的椭圆曲线算法。通过该算法可以从私钥推导出公钥,这是一个不可逆的过程:K = k * G。给出常数点 G 时,使用已知私钥 k 求公钥 K 的问题并不困难,但反过来,已知公钥 K 求私钥 k,则非常困难。

 

4.3 单向散列函数

  单向散列函数 (one-way hash function) 有一个输入和一个输出,其中输入称为消息 (message) ,输出称为散列值 (hash value) 。散列值也称为消息摘要 (message digest) 或者指纹 (fingerprint) 。单向散列函数可以根据消息的内容计算出散列值,而散列值就可以用来检查消息的完整性。

单向散列函数拥有下列四项特征:

  1. 根据任意长度的消息计算出固定长度的散列值

  2. 能够快速计算出散列值

  3. 具备单向性

  4. 消息不同散列值也不同

  以太坊中使用海绵函数,对公钥与初始的内部状态做 XOR 运算得到 32 字节散列值,取其后 20 字节,转成 40 位的 16 进制字符,即为地址。

 

五、当前成熟的区块链钱包

1、MetaMask

MetaMask是一款在浏览器上使用的插件类型的以太坊钱包,该钱包不需要下载,只需要在浏览器添加对应的扩展程序即可,非常轻量级,使用起来也非常方便。目前支持谷歌、360、火狐等浏览器。

2、imToken

imToken钱包它旨在为普通用户提供一款安全放心、简单好用、功能强大的数字资产钱包应用。主要功能:1. 私钥自持 2.轻钱包功能 3.支持多种数字资产 4.关注全球各大交易所,各类数字资产行情-设置价格提醒

3、Coinbase Wallet

Coinbase是全球较大的数字货币钱包。它位于旧金山,但为190多个国家/地区的加密货币资产存储提供支持。它还支持32种不同的法定货币交易。特别是由于可以在其平台上存储大量的加密货币,该钱包已变得很受欢迎。

4、Kcash

Kcash数字货币钱包(以下简称 Kcash)是一款打通数字货币和实体世界的钱包应用,旨在解决用户管理多种数字货币的不便、兑换交易过程繁杂、价值传输不畅、区块链性能不足以及应用场景不足的问题,Kcash拥有独有的跨链和跨合约技术,并结合自有的高性能公链为数字货币领域提供强大的基础设施,促进数字货币的应用与发展。

5、AToken

AToken移动端数字货币钱包轻便安全,支持19个币种&跨链互换。旨在为广大数字货币用户提供更轻便、更安全、更多币种的多维度服务,旨在打造数字资产存储类APP领跑者。

等等…

 
 
参考链接:
https://zhuanlan.zhihu.com/p/539240877
https://zhuanlan.zhihu.com/p/523164816
https://www.bxqe.com/qkl/xy/4477.html
https://www.jb51.net/blockchain/801898.html
https://blog.csdn.net/Lisa_8888888/article/details/103637783

 
如有不对,烦请指出,感谢~