区块链钱包是什么?

区块链钱包是什么?
在介绍区块链钱包之前,我们先详细介绍下比特币的地址生成过程。
大的流程是:私钥–》公钥–》地址。
先啰嗦一点计算机知识:位,字节,字,KB,MB
位:“位(bit)”是电子计算机中最小的数据单位。每一位的状态只能是0或1。
字节:8个二进制位构成1个“字节(Byte)”,它是存储空间的基本计量单位。1个字节用16进制来表示是两个字符,比如1011 1111可以表示为AF、1110 0000可以表示为E0。
字:“字”由若干个字节构成,字的位数叫做字长,不同档次的机器有不同的字长。例如一台8位机,它的1个字就等于1个字节,字长为8位。如果是一台16位机,那么,它的1个字就由2个字节构成,字长为16位。字是计算机进行数据处理和运算的单位。
KB:K表示1024,也就是2的10次方。1KB表示1K个Byte,也就是1024个字节。
MB:1MB = 220 Bytes = 1048576Bytes
私钥是一个256位随机数,根据上面的计算机知识,所谓256位就是256个0和1组成的数字,256除以8等于32,即32个字节,用16进制表示这个数的范围大小是介于0x0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的一个数。

  1. 我们随机生成一个合法的私钥如下:
    8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3
  2. 椭圆曲线算公钥
    生成了私钥之后,我们使用椭圆曲线加密算法(ECDSA-secp256k1)计算私钥所对应的非压缩公钥,生成的公钥共65字节, 其中一个字节是0x04,非压缩的公钥如下:0406CCAE7536386DA2C5ADD428B099C7658814CA837F94FADE365D0EC6B1519385FF83EC5F2C0C8F016A32134589F7B9E97ACBFEFD2EF12A91FA622B38A1449EEB
  3. 对公钥哈希技术
    对上面的公钥进行SHA-256哈希计算,得到结果:2572e5f4a8e77ddf5bb35b9e61c61f66455a4a24bcfd6cb190a8e8ff48fc097d
  4. 计算 RIPEMD-160哈希值
    取上一步结果,进行RIPEMD-160计算,得到结果:
    0b14f003d63ab31aef5fedde2b504699547dd1f6
  5. 加入地址版本号
    比特币主网版本号“0x00”,取上一步结果,在前面加上16进制的00,即:000b14f003d63ab31aef5fedde2b504699547dd1f6
  6. 计算 SHA-256 哈希值
    取上一步结果,进行SHA-256计算,可得:
    ddc2270f93cc84cc6869dd373f3c340bbf5cb9a8f5559297cc9e5d947aab2536
    然后,对以上结果再次计算 SHA-256 哈希值,得到:
    869ac57b83ccf75ca9da8895823562fffb611e3c297d9c2d4612aeeb32850078
  7. 取上一步结果的前4个字节(8位十六进制)869ac57b
  8. 把这4个字节加在第五步的结果后面作为校验位,将这4个字节加载第五步的结果后面,这就是比特币地址的16进制形态了:869ac57b000b14f003d63ab31aef5fedde2b504699547dd1f6
  9. 用Base58编码变换地址
    对上一步的结果进行Base58编码,得到:
    1QCXRuoxWo5Bya9NxHaVBArBQYhatHJrU7
    啰嗦了这么长,是为了让开发者能够清楚怎么出编程开发出一个钱包工具。
    从上面的比特币的地址生成流程来看,钱包的本质其实就是一个私钥,它是一个随机的哈希值字符串,拥有了私钥就拥有了该钱包的使用权。
    1
    钱包的定义
    任何一个钱包,对用户而言,有两个基本的组成部分,公钥和私钥。为了方便理解,我们可以简单的将他们对应为,公钥=账号=转账地址,私钥=密码=身份认证。尽管有些不同,但是这是最方便理解的说明。
    然而跟传统的账号密码不同,这个账号,既是你身份也是你收款的地址,却并不具备你个人的任何信息,而密码,则能够证明你对这个账号的所有权,且可以使用你的密码随时更换你的账号名称。因此不同点在于,并不是同时需要账号和密码才能使用账户。你的账号通常可以提供给任何人,他们也将使用你提供的账号给你进行资产的转移。而你的密码,则一定需要完美的保护起来,因为任何人都可能使用你的密码在任何地方获取并控制你的账户,转走你的资产。
    这是通过非对称加密技术实现的,也就是说,不管你的账号如何变化,你都可以通过自己的密码找回自己的账号或者证明自己对这个账号的控制,因此账号既代表你,也代表你的银行账号,而密码则代表账号的所有及使用权。
    2
    到这里你可能会想这样不会太不安全了吗?别人只需要一个密码就可以掌握你的资产。这一点需要用一些篇幅来澄清。
    1.记忆有难度。私钥是不具备身份特征的一串很长的随机字母和数字的组合,只靠人的记忆几乎是不可能完整的记录下来的。
    2.碰撞极难。由于没有身份特征,就避免了传统账号密码中出现的盗号,比如知道这是谁的账号,就去试对方的生日电话之类的信息,碰巧碰出密码。公钥和私钥虽然存在一定的对应关系,但是几乎不存在碰撞可能。
    3.私钥再加密。一些钱包会使用私钥再加密的方式处理,以免用户不慎丢失或暴露私钥。有多种方式帮助用户保护私钥,比如脑钱包加密(将私钥转化为十几个方便记忆但无关联的英文词汇,使用这些可以恢复私钥),隔离保存(将私钥在服务器端隔离,给用户独立的账号和密码),使用验证(需要使用私钥时使用谷歌提供的随机数验证服务等)。值得注意的是,上述方法可能增加了安全性和便捷度,但一定程度上将私钥保存在更不安全的服务器里,会增加私钥在网上暴露的风险。
    所以由于上面的特性,通常推荐的方法是将私钥写在纸上,然后妥善保存,这样就几乎不存在资产被盗的风险了(但存在自己把纸条弄丢的情况)。
    3
    区块链钱包有哪些类别
    【交易平台】
    交易平台提供的是一种中心化的钱包,采用传统的用户名密码方式登录。钱包的私钥是不属于你的,你看到的只是虚拟账户的数字。用交易所钱包,优点是方便,无需自己管理。缺点是不安全,交易平台可能被黑,账务可能被黑,所以使用交易平台账户务必启用多重验证。比如火币提Token需要四重验证,密码、短信、邮件和Google验证码。
    【非独立轻钱包】
    被大家所普遍使用的钱包,包括 Bitcoin Electrum, 以太坊的MyEtherWallet, imtoken 和 Jaxx。这类钱包的Private Key在用户自己手里的,安全性更好一些,而且简单易用。局限性在于,完成交易签名后,把交易广播出去还是依赖中心化节点服务器,遇到业务量大时,服务器性能过载,可能导致交易无法成功发送。
    【独立轻钱包】
    使用SPV (Simplified Payment Verificationwww.abitpart.com)从而不需要下载整个区块链数据,而只下载区块头数据即可完成验证和交易打包,基本可以实现去中心化。
    【硬件钱包】
    在这里插入图片描述
    优势是把私钥和交易签名都放在了USB设备上,即使电脑被黑被偷,钱包安全不受任何影响, 目前体验最好的是Trezor和Ledger。
    【全节点钱包】
    它是一个完整的区块链节点,会下载整个区块链数据,这意味着你要准备一台高性能CPU的电脑和足够大的硬盘,全节点钱包会验证每一笔交易(以太坊的话还会运行每一个智能合约交易),常见的全节点钱包:Bitcoin Core客户端,以太坊Mist客户端,Parity。
    【纸钱包】
    也叫冷钱包,安全系数高,钱包私钥和地址的生成在无网络的情况下完成。纸钱包将私钥和地址打印在纸上,即使电子设备损坏也无妨。局限性是每次要扫描私钥二维码到钱包软件,转账频繁的话非常麻烦。

猜你喜欢

转载自blog.csdn.net/kaihuiguoji/article/details/89710866