主页 > imtoken2022官网版 > 区块链钱包的基本类型、特点及工作原理介绍

区块链钱包的基本类型、特点及工作原理介绍

imtoken2022官网版 2023-08-16 05:09:36

刚开始使用钱包时,你会被助记词、Keystore、私钥、地址、公钥等各种概念搞糊涂,这些概念与传统世界中银行卡、密码等简单概念完全不同。 同理,你只能根据钱包软件的提示去做你需要做的事情,却无法知道其中的道理。 感觉像是死背书。 这篇文章的目的是帮助大家:作为区块链钱包,它是如何工作的? ,如何生成密钥,助记词,Keystore等。先放结论:

区块链钱包实现的技术原理用一句话表达:钱包助记词生成种子(Seed),种子(Seed)生成私钥,私钥导出公钥,公钥摘录成为钱包地址。 同时钱包提供了keystore,也是用私钥加密后的文件,使用普通密码即可,方便用户使用钱包。

区块链的诞生,不仅是通过代码和智能合约进一步扁平化生产组织,从而优化中间流程,理顺中介的作用,更重要的是产生新的经济模式,创造新的生产关系,这观念的改变远大于技术本身的影响,其最引人入胜的是利用人的特性建立一套自主的经济激励机制,催生出一种新型的价值载体加密货币(我习惯区分Coin和Token,请参考文章区块链基本概念——理解COIN和TOKEN)。

加密货币明显不同于传统货币。 它是一种通过一定的加密算法计算出来的数字货币,这意味着电子化将是其本质属性,因此其存储问题将成为研究的热点。 具体来说,就是我们常说的区块链钱包。 当然,这里需要强调的是,区块链钱包并不是存储每个人的加密货币,它是存储在链上的,钱包主要存储的是私钥比特币的种子服务器在哪儿,即用户对链上加密货币的所有权凭证。 不可挂失的不记名证书。 从开发者的角度来看,钱包的作用是管理用户的私钥,通过私钥签名交易管理用户在区块链上的数字货币。 加密货币地址 + 私钥 = 加密货币钱包。

以上是钱包比较传统的定义。 笔者最近会见了AlphaWallet的联合创始人&CEO Victor Zhang,他对钱包的理解非常独到和有见地:区块链钱包其实叫区块链客户端更好。 其中,“Money”只是其中一个应用场景。当然,他们的团队主要是做智能合约的公链钱包,目前主要是ETH。基于它衍生出很多应用场景来使用,而不是传统的钱包概念,笔者一直觉得,在加密货币的价值波动没有解决之前,大规模的钱包用户潮还需要很长时间才能与交易所抗衡,但是一个那天王位将转移到钱包,听了Victor的感悟,笔者顿时觉得自己的眼界开阔了,BTW,他们的团队还是ERC875的作者,在技术的追求和发展上很有造诣。他们是一支值得关注的球队!

【区块链钱包的基本类型及特点】

区块链钱包的分类和描述会根据所涉及的概念而有所不同。 就其本质特征而言,可以用下图表示:

区块链钱包的本质特征

区块链钱包和区块链一样,也可以分为链上钱包和链下钱包(现在很多人习惯称它们为中心化钱包和去中心化钱包。虽然方便没有基础的人理解,但是整个概念和本质会是误解),它们的本质区别在于钱包私钥的存储方式和位置,私钥保存在用户手中,钱包提供者无从获取,用户可以使用资产实时上链,称为链上钱包; 而私钥存放在钱包商户或交易所手中,用户不能直接使用链上资产,需要通过第三方进行移动,称为链下钱包。 具体来说:

1.onchain钱包——全节点钱包

私钥保存在用户手中,全节点钱包也保存了所有区块的数据,可以直接在本地验证交易数据的有效性。 大多数全节点钱包也有挖矿功能,本身就是区块链网络中的一个节点,比如BTC的Bitcoin Core; ETH等的Mist和Parity

优势:

一般属于专为区块链设计的官方钱包,直接上链,无需通过第三方发起交易,保证基本安全;

由于之前的节点是在本地下载的,交易信息的验证会更快。

缺点:

也因为下载所有节点,占用硬盘空间大(Mist现在已经到80G了,笔者下载了好几天都失败了;Bitcoin Core据说是150G);

每次使用前需要同步数据;

新手用户体验不够好;

不支持多种数字资产;

通常是电脑版。

2.onchain钱包——SPV轻钱包

私钥保存在用户手中,但不保存所有区块的数据,只保存与自身相关的数据,所以体积小,可以在电脑、手机、网页等地方运行. 比如区块链、imtoken等。

优势:

用户体验非常好,特别适合新手

许多轻钱包支持多种数字资产

体积小,不占空间

缺点:

交易验证会稍微慢一些

3.offchain钱包——通过中央服务器接入区块链网络的钱包

这类钱包的划分存在一些争议。 主要原因是钱包数据传输方式是否可以扩展为选择区块链节点或必须通过钱包服务提供商的服务器。 如果是后者,则存在私钥存储在中心化服务器中的风险。 目前,有很多区块链钱包的体验都非常好,甚至是流畅的,不能排除这样的风险,因为它们不是开源的。 笔者推断Bitbuy钱包应该属于这一类。

优势:

同SPV轻钱包

用户体验会比链上钱包更好

缺点:

存在安全隐患(虽然真正致力于区块链的钱包公司即使通过自己的服务器向节点发送交易信息也不会作恶,但不排除作恶者可以通过这种方式获取用户键)

它会比链上钱包交易验证慢,但用户可能没有意识到。

4. offchain wallet——第三方托管钱包

它完全依赖于运行钱包的公司和服务器,存储在组织或个人的钱包地址中,中心化交易所中的加密货币存储在链下钱包(交易所)中。

优势:

如果您忘记了您的私钥,您可以找回它

平台会做好私钥安全

一般以企业为信用背书

缺点:

你的私钥由平台控制,你无法阻止平台“做坏事”,即有作恶的风险

平台关闭后,你的币就没了,即跑路风险

当然,根据不同的表现形式,我们也可以有不同的划分:

区块链钱包的基本类型和特点以及工作原理介绍

这种划分比较容易理解。 电脑单机版钱包,比如前面提到的全节点钱包,基本都是基于这种类型; 手机钱包和在线钱包主要是SPV轻钱包,前者主要体现在手机APP上。 ,后者是网页插件,如MyEtherWallet、MetaMask等。硬件钱包是为了增强安全性,通过专门设计的安全硬件将私钥离线存储,防止黑客入侵。

因此,电脑钱包、手机钱包、网络钱包一般都体现了实时可用性。 它们更叫热钱包,即实时在线,因此存在被黑客攻击的风险; 因此,硬件钱包常年处于离线状态。 它通常被称为冷钱包,即离线存储。

但是,硬件钱包往往需要购买单独的硬件设备,因此你会付出更多的成本,而且使用的便利性不如热钱包,因为它们是实时在线可用的。 当然,也有人使用U盘制作自己的硬件钱包。 一方面制作过程比较繁琐,同时每次转账花钱也比较麻烦,适合基础比较基础的人。

优势:

安全,私钥不接触网络,黑客无法攻击网络。 此外,设备受PIN码保护,即使在物理环境中设备被盗,也无法打开钱包;

轻松备份,设备在初始化配置时会生成助记词(一般为12或24个字),助记词就是您私钥的备份。 当您的设备丢失或损坏时,您可以购买一台新设备,然后通过助记词恢复私钥;

同时管理多种货币。 现在大部分硬件钱包不仅可以管理比特币,还可以同时管理莱特币、以太币、比特币现金等数字货币。

缺点:

不是免费的,你得为硬件付费;

不能独立使用,硬件钱包与网络隔离,需要配合联网客户端(Chrome插件、桌面客户端、手机客户端等)完成收币和发币。 然而,为了安全牺牲一些便利是值得的。 毕竟一个比特币要8000美金,亏了一半就心疼了。

【区块链钱包实现技术原理】

要了解区块链钱包实现的技术原理,首先要了解:

1、私钥、公钥、地址生成的方法,是区块链的相关知识;

2、然后了解如何使用API​​进行远程调用等基本概念,这是传统IT行业的相关知识;

3、最后是钱包设计相关的助记词,keystore和password的概念,和区块链公钥、私钥、地址的生成方式相同,但整个过程属于区块链钱包设计流程和无法与区块链钱包设计过程相提并论。 区块链相关知识一头雾水。

1、私钥、公钥和地址的生成方法(以BTC为例):

1、比特币私钥实际上是一个使用SHA-256生成的32字节(256位)的随机数。 有效私钥范围取决于比特币使用的secp256k1椭圆曲线数字签名标准。

2.在私钥前加上版本号,然后加上压缩标记和附加校验码。 bytes),然后用Base58编码得到我们常用的WIF(Wallet import Format)格式的私钥。

3、私钥乘以椭圆曲线后,可以得到公钥。 公钥是椭圆曲线上的一个点,具有 x 和 y 坐标。 公钥有两种形式:压缩的和未压缩的。 早期的比特币使用未压缩的公钥,但现在大多数客户端默认使用压缩公钥。

从私钥推导公钥和从公钥推导公钥散列都是单向的,即采用不可逆算法。

椭圆曲线算法

4、公钥生成后,通过SHA256哈希算法对公钥进行处理,得到32字节的哈希值; 然后使用RIPEMD-160算法得到一个20字节的哈希值——Hash160

5、对版本号[2]+Hash160组成的21字节数组进行两次SHA256哈希运算,将哈希值的前4个字节作为校验和,放在21字节数组的末尾。

6、对25位数组进行Base58编码,最终得到地址。

下图以未压缩格式的 65 字节公钥说明了上述过程:

区块链钱包的基本类型和特点以及工作原理介绍

二。 远程过程调用 (RPC)

它是一种计算机通信协议。 该协议允许在一台计算机上运行的程序调用另一台计算机上的子程序,而无需程序员为此交互额外编程。 RPC 的主要功能目标是更容易构建分布式计算(应用程序),同时又不失本地调用的语义简洁性,同时提供强大的远程调用能力。 广泛使用的是一种称为 JSON(JavaScript 对象表示法)-RPC 的协议。 因此,钱包通过区块链RPC接口调用与区块链网络进行交互。

列出主流项目相关的RPC接口和开源钱包项目,供参考。

比特币:

1.RPC

原始比特币客户端/API 调用列表

API 参考 (JSON-RPC)

JSON 远程调用 API

2.钱包

Bitcoin Core,官方产品

bitcoinj,比特币协议的 Java 版本

biter,简单和安全的比特币钱包

Electrum,适用于所有平台的轻型钱包

面包,iOS 钱包

Mycelium,一款安卓钱包

Copay,同时支持比特币和比特币现金

比特币钱包,另一个安卓钱包

DotNetWallet,一个在 .NET 中实现的钱包

Coinpunk,一个基于浏览器的钱包

btcwallet, Go 实现的钱包

以太坊/ERC20

1.RPC

JSON远程调用

JSON 远程调用 API

管理API

ethjsonrpc

web3.py

2.钱包

go-ethereum,以太坊协议的 Go 版本

Mist,官方产品

Parity,一款支持Windows、Mac、PC的钱包

元掩码

MyEtherWallet,一个基于浏览器的钱包

eth-lightwallet,一款轻量级JavasSript版钱包

ethaddress.org,纸钱包生成器

Neureal钱包,一款支持Windows、Mac、PC的钱包

其他

1.零币

Zcash,官方产品

2. 比特股

比特股,官方产品

3.新航

Sia,正式发布

4. 内姆

NanoWallet,官方产品

5. 破折号

Dash,官方产品

6. 量子链

Qtum 核心钱包,官方产品

7. 莱特币

莱特币,官方产品

8. 物联网

IOTA钱包,正式发布

9.门罗币

门罗币,官方产品

10.GXS

GXS手机钱包,官方产品

11. 以太坊经典

以太坊经典钱包,正式出品

3、钱包设计相关的助记词、keystore、密码的概念

私钥一般太难记,使用起来也不方便,所以从钱包设计的角度,为了简化操作又不失安全性,出现了助记词的方式。

一般来说,助记词由一些单词组成。 只要记住这几个字,并按顺序输入到钱包里,也可以打开钱包。

根据密钥是否关联,钱包可以分为两类:非确定性钱包和确定性钱包。

nondeterminisTIc wallet:密钥对之间没有关联;

确定性钱包:密钥对源自原始种子主密钥。 最常见的推导方法是层次确定性(hierarchical deterministic,简称HD)。

Bitcoin Core生成的密钥对之间没有任何关系,属于非确定性钱包。 如果要备份导入这类钱包,就比较麻烦了。 用户必须将钱包中的私钥和对应地址一一操作。

确定性钱包基于BIP32(比特币改进提案32)标准实现。 一个公共种子用于维护 n 个多个私钥。 种子推导私钥采用不可逆哈希算法。 当需要备份钱包私钥时,只能备份这个种子。

钱包助记词和种子可以通过9个步骤生成,其中第1~6步生成助记词,第7~9步将前6步生成的助记词转化为BIP32种子:

生成助记词:

规定熵的位数必须是32的整数倍,所以熵的长度在128和256之间应该是32的整数倍,分别为128、160、192、224、256;

校验和的长度是熵的长度/32位,所以校验和的长度可以是4、5、6、7、8位;

助记词库中有2048个词,词库中的所有词都可以用11位作为词的索引来定位,所以一个词用11位表示,助记词的个数可以是(熵+校验和) /11,值为12、15、18、21、24

区块链钱包的基本类型和特点以及工作原理介绍

助记规则

1、生成一个长度为128~256位(bits)的随机序列(熵);

2、取熵散列后的前n位作为校验和(n=熵长/32);

3、随机序列+校验和;

4、将步骤3得到的结果截成11位;

5、步骤4得到的每11个字节匹配词库的一个词;

6、第5步得到的结果就是助记词串;

区块链钱包的基本类型和特点以及工作原理介绍

如何在钱包中生成助记词

从助记词生成种子

助记词通过长度为128~256位的随机序列(熵)与词汇表进行匹配,然后使用PBKDF2函数推导出更长的种子(seed)。 生成的种子用于生成确定性钱包并派生钱包密钥。

在密码学中,Key stretching 技术用于增强弱密钥的安全性,增加 Brute-force 攻击尝试破解每个可能密钥的时间,增加攻击难度。 各种编程语言本机库提供了密钥拉伸的实现。 PBKDF2(Password-Based Key Derivation Function 2)是常用的密钥拉伸算法之一。 其基本原理是使用一个随机函数(如HMAC函数),将明文和salt值作为输入参数,然后重复上述操作,最终生成密钥。

为了从助记词中生成二进制种子,BIP39使用PBKDF2函数计算种子,其参数如下:

7、助记词作为密码;

8. “助记词”+密码作为盐;

9.2048作为重复计算次数+HMAC-SHA512作为随机算法最终得到BIP32种子,512位(64字节)为期望的密钥长度;

DK = PBKDF2(PRF, 密码, 盐, c, dkLen)

区块链钱包的基本类型和特点以及工作原理介绍

助记词生成种子

主私钥和主链码:

首先是从根种子生成主密钥(master key)和主链码(master chain code)

区块链钱包的基本类型和特点以及工作原理介绍

种子生成密钥

上图中,根种子通过不可逆的HMAC-SHA512算法计算出一个512位的哈希串。 左边256位是主私钥(m),右边256位是主链码。 将m与公钥推导相结合的椭圆曲线算法可以推导出对应的264位主公钥(M)。 链码作为导出低级密钥的熵。

同时钱包还提供了keystore和password的基本功能

最好的用户体验仍然是密码方式,所以钱包也提供了keystore供用户导出保存。 这个Keystore也是私钥加密后的一个文件。 您需要设置密码才能打开文件。 这样做的好处是即使keystore文件被盗,只要你设置的附加密码足够长且随机,短时间内私钥不会泄露,有足够的时间转移地址中的加密货币到其他地址。 Keystore会保存在使用的设备中,这样您每次登录时只需要输入相应的密码即可。

【总结】

因此,区块链钱包实现的技术原理一句话表述为:钱包助记词生成种子(Seed),种子(Seed)生成私钥,私钥导出公钥,公钥摘录成为钱包地址。 同时钱包提供了keystore,也是用私钥加密后的文件,使用普通密码即可,方便用户使用钱包。

因此,了解了钱包的生成原理后,您会对以下几种钱包丢失情况有更好的认识:

1、如果忘记地址,可以使用私钥、助记词、keystore+密码,导入钱包找回。

2.如果忘记密码,可以使用私钥和助记词导入钱包重置密码。

3. 如果忘记密码,没有备份私钥和助记词,则无法重置密码,无法转出代币,即失去对钱包的控制权。

4. 如果忘记密码,keystore 将失去作用。

5.私钥忘记了,只要你的钱包没有被删除,密码也没有忘记,就可以导出私钥。

6.如果私钥忘记了,也可以使用助记词,keystore+密码,导入钱包找回。

7.如果忘记助记词,可以使用私钥、keystore+密码导入钱包,重新备份助记词。

8.忘记keystore,只要你的钱包没有被删除,密码也没有忘记,可以重新备份keystore。

9、如果忘记了keystore,可以使用私钥和助记词导入钱包,重新备份keystore。

【私钥复制疑惑】

最后比特币的种子服务器在哪儿,问题是根据私钥生成的机制可能会被复制。

私钥有32个字节(1字节=8位二进制),所以私钥总数为2^(8*32)=2^256≈10^77。 假设整个宇宙都在穷举私钥:

假设宇宙中有1亿个星系,

每个星系都有一亿颗恒星,

每颗恒星 1 亿颗卫星,

每颗人造卫星上有一亿台超级计算机,

每台超级计算机有1亿个CPU,

每个 CPU 每秒可以耗尽 1 亿个私钥。

假设有1亿个带BTC的私钥地址(平均每个地址0.21BTC),穷举一个带币的私钥需要多长时间为:

10^77(私钥总数)/10^8(带硬币的私钥)/10^8(星系)/10^8(星星)/10^8(卫星)/10^8(超级计算机)/10 ^ 8 (CPU)/10^8(每秒耗尽)= 10^21 秒。

10^21秒/3600秒/24小时/365天=317098亿年。

目前宇宙的年龄是138.2亿年。 相对而言,如果全宇宙穷举私钥,宇宙年龄每1000倍可望穷尽达到0.21个BTC。

上面查询得到的计算方法只说明概率很小,小到可以忽略不计,但是随着时间轴的积累,现在不仅是BTC,还有各种新的公链,如果都用同样的私钥生成地址规则,有一个概率意味着在无线网络中长期存在会一直重复。 而且,概率的范围不能预测偶然事件:比如偶然撞到重复的事件。

因此,笔者理解:只能说故意枚举私钥进行炒作的方式是不划算的(完全不可取或代价高昂)。 进行网络验证,如果发现重复(注意理论上即使地址重复,私钥也不一定重复,但是算法限制了私钥生成的范围,保证不会有两个私钥对应同一个公钥key,所以还是有可能的(据了解私钥和地址是一一对应的)重新生成一个新的,不存在资产丢失的可能。