主页 > imtoken靓号地址软件 > 区块链钱包的工作原理

区块链钱包的工作原理

imtoken靓号地址软件 2023-12-02 05:09:51

大家刚开始使用钱包的时候,都会被各种概念混淆,比如助记词、Keystore、私钥、地址、公钥等等,这些概念就像传统世界里的银行卡和密码一样简单。这个概念完全不同。只能根据钱包软件的提示做自己需要做的事,却不知道原因,感觉有点难以背书。这篇文章的主要目的是帮助大家:作为一个区块链钱包,它是如何工作的,如何生成密钥,助记词,Keystore等。先把结论置顶:

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

[背景]

区块链的诞生不仅仅是为了通过代码和智能合约进一步扁平化生产组织,从而优化中间流程,简化中介。它还产生了一种新的经济模式,创造了一种新的生产关系。这种概念上的变化远远大于技术本身的影响。最引人入胜的地方在于利用人性的特性建立了一套自主的经济激励机制,一种新型的价值载体加密货币诞生了(我以前是区分Coin和Token的,请参考文章区块链基础概念 - 了解 COIN 和 TOKEN)。

加密货币明显不同于传统货币。它是一种通过一定的加密算法计算出来的数字货币,也就是说,电子化将是它的本质属性,所以它的存储问题将是一个热门话题。研究领域,具体来说就是我们常说的区块链钱包。当然,这里需要强调的是,区块链钱包并不是存储每个人的加密货币,它是存储在链上的。钱包主要存储私钥,即用户对链上加密货币的所有权凭证。这是一个匿名且未报告的证书。从开发者的角度来看,钱包的作用就是管理用户的私钥,通过私钥签名交易管理用户的数字货币加密货币地址+私钥=区块链上的加密货币钱包。

以上是一个相对传统的钱包定义。笔者最近遇到了 AlphaWallet 联合创始人兼 CEO Victor Zhang,他对钱包有着非常独特而深刻的理解:区块链钱包其实更适合称为区块链客户端,其中“钱”只是应用场景之一。当然,他们的团队主要专注于带有智能合约的公链钱包。目前主要是ETH。在它的基础上衍生出很多应用场景来使用,而不是传统的钱包概念。笔者一直觉得,在数字货币价值波动解决之前,钱包用户的大规模趋势还很遥远,无法与交易所抗衡,但总有一天王位会转移到钱包。听了维克多的感悟,顿时觉得自己的视野更开阔了。顺便说一句,他们的团队也是 ERC875 的作者。他们在技术的追求和发展方面非常有成就。他们是一支值得关注的团队!

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

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

区块链钱包的基本特征

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

1.链上钱包-全节点钱包

私钥保存在用户手中,全节点钱包也保存了所有区块的数据。这样就可以在本地直接验证交易数据的有效性。大部分全节点钱包也有挖矿功能,也是区块链网络中的一个节点,比如比特币核心就是比特币; Mist、ETH 的 Parity 等。

优点:

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

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

缺点:

因为所有节点都下载了,也占用了很大的硬盘空间(Mist现在达到80G,作者好几天没下载;Bitcoin Core据说是150G);

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

用户体验对初学者来说不够好;

不支持多种数字资产;

通常是电脑版。

2.链上钱包-SPV轻钱包

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

优点:

用户体验非常好,尤其适合初学者

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

体积小,不占空间

缺点:

交易验证会稍慢

3.链下钱包——通过中心服务器钱包访问区块链网络

这种钱包的划分是有争议的,主要是钱包数据传输的方式可以扩展选择区块链节点或者必须经过钱包服务方的服务器,如果是后者,有私有密钥存储 关于中心化服务器的风险,目前有很多区块链钱包的体验非常好,甚至流畅。由于缺乏开源,不能排除这种风险。笔者推断Bitgo钱包应该属于这一类。

优点:

同SPV轻钱包

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

缺点:

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

比特币硬件钱包原理

会比链上钱包交易验证慢,但用户可能体验不到。

4.链下钱包-第三方托管钱包

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

优点:

如果你忘记了私钥,可以找回来

平台会做好私钥的安全工作

一般以企业作为信用背书

缺点:

你的私钥在平台手中,你无法阻止平台“做坏事”,也就是做坏事的风险

平台关闭后比特币硬件钱包原理,你的币就没了,也就是跑路的风险

当然,根据表现形式的不同比特币硬件钱包原理,我们也可以有不同的划分:

p>

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

因此,计算机钱包、移动钱包和在线钱包通常反映实时可用性。它们更多地被称为热钱包,即实时在线,因此存在被黑客入侵的风险;所以硬件钱包常年离线存储,更多的叫做冷钱包,也就是离线存储。

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

优点:

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

便于备份,设备在初始化配置时会生成一个助记词(一般为12个)。或 24 字),助记词是你的私钥的备份。当您的设备丢失或损坏时,您可以购买新设备并使用助记词恢复私钥;

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

缺点:

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

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

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

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

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

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

3.最后,与钱包设计相关的助记词、keystore、password的概念和区块链公钥、私钥、地址生成的方式是一样的,但是整个过程都属于设计过程区块链钱包不要与区块链相关知识混淆。

一、私钥、公钥和地址生成方式(以BTC为例):

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

2.在私钥前面加上版本号,后面是压缩标记和附加校验码(所谓附加校验码是指私钥经过了2次SHA-256操作,取两次hash结果的前四个字节),然后对其进行Base58编码,得到我们常见的WIF(Wallet import Format)格式的私钥。

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

从私钥推导出公钥,从公钥推导出公钥哈希是单向的,即使用不可逆算法。

椭圆曲线算法

比特币硬件钱包原理

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

5. 由版本号[2]+Hash160组成的21字节数组经过双SHA256哈希得到的哈希值的前4字节作为校验和,放在21-的末尾字节数组。

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

下图显示了上面的过程,使用了一个未压缩格式的 65 字节公钥:

二.远程过程调用(RemoteProcedure Call,RPC)

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

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

比特币:

1.RPC

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

API 参考 (JSON-RPC)

JSON RPC API

2.钱包

比特币核心,正式出品

bitcoinj,比特币协议Java版

bither,一个简单安全的比特币钱包

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

面包,一个iOS钱包

Mycelium,一个安卓钱包

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

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

DotNetWallet,一个 .NET 钱包

Coinpunk,基于浏览器的钱包

btcwallet,用 Go 实现的钱包

以太坊/ERC20

1.RPC

JSON RPC

JSON RPC API

管理 API

ethjsonrpc

网络3.py

2.钱包

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

比特币硬件钱包原理

Mist,官方产品

Parity,适用于 Windows、Mac、PC 的钱包

元掩码

MyEtherWallet,基于浏览器的钱包

eth-lightwallet,轻量级 JavasSript 版钱包

ethaddress.org,纸钱包生成器

Neureal 钱包,适用于 Windows、Mac、PC 的钱包

其他

1.Zcash

Zcash,官方产品

2.比特股

比特股,官方产品

3.新航

Sia,正式出品

4.N em

纳米钱包,官方产品

5.冲刺

Dash,官方产品

6.量子链

Qtum Core 钱包,官方产品

7.莱特币

莱特币,官方产品

8.IOTA

IOTA 钱包,官方产品

9.门罗币

门罗币,官方产品

10.GXS

GXS 移动钱包,官方产品

11.以太坊经典

以太坊经典钱包,官方产品

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

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

在正常情况下,助记符由一些单词组成。只要记住这些话,按顺序输入钱包,钱包也可以打开。

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

比特币硬件钱包原理

非确定性钱包:密钥对之间没有关联;

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

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

确定性钱包是基于BIP32(Bitcoin Improvement Proposal 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)。生成的种子用于生成和构造确定性钱包,推导出钱包密钥。

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

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

7.助记句作为密码;

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

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

DK = PBKDF2(PRF, Password, Salt, c, dkLen)

助记符生成种子

主私钥和主链码:

第一步是从根种子码生成主密钥和主链码)

种子生成密钥

上图中的根种子通过不可逆的HMAC-SHA512算法计算出一个512位的哈希串,左边256位是主私钥(m),右边256位是主链码。可以通过组合m得到对应于推导公钥的椭圆曲线算法的264位主公钥(M)。链码作为派生从属键的熵。

比特币硬件钱包原理

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

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

[摘要]

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

那么,在了解了钱包的生成原理之后,你会更好的理解以下几种钱包丢失的案例:

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

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

3.如果忘记密码,且私钥和助记词没有备份,则无法重置密码,也无法转移token,相当于失去对钱包的控制权。

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 亿台超级计算机,

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

每个 CPU 每秒可以穷举一亿个私钥。

假设有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 亿年。

现在宇宙的年龄是1.38.2亿年。相对而言,如果整个宇宙都在耗尽私钥,每1000倍于宇宙的年龄,可以预期会耗尽到0.21 BTC。

上面查询得到的计算方法只说明概率很小,小到可以忽略不计,但是随着时间线的积累,现在不仅有BTC,还有各种新公链,如果它们都使用相同的私钥生成地址规则,很可能在很长一段时间内最终无线中总会出现重复。而且,概率的范畴不能预测偶然事件:如果碰巧碰巧遇到了重复的事件。

所以,作者明白了:只能说刻意耗尽私钥推测的方法是不划算的(完全不可取或代价高昂),在这个默认假设下,万一发生意外,网络验证生成钱包地址时会执行,如果发现重复(注意理论上即使地址重复,私钥也不一定会重复。,但是算法保证不会有两个私钥对应的相同的公钥通过限制私钥生成的范围,所以仍然可以理解为私钥和地址一一对应)重新生成一个新的,不会出现资产丢失的可能.

【参考文献】

PBKDF2 算法概述

Hierarchical Deterministic Wallet HD Wallet简介

比特币开发者-guide#wallets

使用比特币高清钱包 II:派生公钥

地址前缀列表

小册子地址: