请选择 进入手机版 | 继续访问电脑版
您好!欢迎来到明日经济网-21世纪经济日报报道电子版专注中国中原产业经济信息与新闻
关注我们
扫码关注官方微信
手机版
下载明日经济APP

区块链钱包的工作原理

1
回复
616
查看
[复制链接]

72

主题

38

帖子

28

积分

新手上路

Rank: 1

积分
28
发表于 2018-6-28 03:46:40 | 显示全部楼层 |阅读模式
【媒介】


在正式开始先容区块链钱包的原理之前,笔者更新一下个人动向:
以下进入文章主题。
各人刚开始利用钱包的时间都会被助记词、Keystore、私钥、地点、公钥等各种概念搞得云里雾里,这些概念和传统天下的银行卡和暗码简朴的两个概念完全不一样,只能按照钱包软件的提示必要怎么做就怎么做,却无法知道缘由,有点儿死背书的感觉,本篇的主旨就是帮各人捋一捋:作为一款区块链钱包,是怎样工作的,怎样天生密钥、助记词、Keystore等。先把结论置顶:
区块链钱包实现的技能原理用一句话表现就是:钱包助记词天生了种子(Seed),种子(Seed)天生了私钥,私钥推导出公钥,公钥节选部门成了钱包地点。同时钱包提供了keystore,它也是私钥加密后的文件,可以共同正常的暗码利用,便捷了用户的钱包利用。
【配景】


区块链的诞生,不但仅是通过代码和智能合约来将生产构造进一步扁平化,从而到达优化中心过程、精简中介的作用,更是产生了一个新的经济模式,创建了一种新的生产关系,这种理念上的厘革远宏大于技能自己带来的影响,它最让人着迷的地方莫过于使用人性的特点,创建的一套自治的经济鼓励机制,并诞生了一个新型的代价载体cryptocurrency(笔者风俗区分Coin和Token,可拜见文章区块链底子概念 - 明白COIN和TOKEN)。
Cryptocurrency显然差别于传统的钱币,它是通过肯定的加密算法盘算出来的数字钱币,也就是说电子化会是它的本质属性,如许它的存储题目就会是一个热门的研究范畴,详细来讲就是我们常说的区块链钱包。固然,这里必要夸大的是,区块链钱包并不是存储着各人的cryptocurrency,它是在链上存储的,钱包重要存储的是私钥,它是用户对链上cryptocurrency的全部权凭据,这是一个不记名、不可挂失的凭据。从开辟者的角度看,钱包的作用就是管理用户的私钥、通过私钥署名生意业务管理用户在区块链上的数字钱币Cryptocurrency Address + Private key = Cryptocurrency Wallet。
以上属于对钱包相对传统的一个界说,笔者近来结识到AlphaWallet的团结首创人&CEO Victor Zhang对钱包的明白非常的独树一帜和有看法:区块链钱包,实在更好叫做区块链客户端,此中“钱”只是此中一个应用场景。固然他们这个团队重要focus在带有智能合约的公链钱包,现在重要就是ETH了,以其作为底子衍生出浩繁应用场景供利用,而不是传统明白的钱包概念了。笔者从前不停以为在未办理Cryptocurrency代价颠簸前,钱包的用户大规模朝潮还好久远,不能与生意业务所抗衡,但终究有一天王位会转移给钱包。在听了Victor的看法之后,笔者忽然以为视野更加开阔。BTW,他们团队照旧ERC875的执笔,对技能的寻求和开辟很有造诣,是个值得关注的团队!
【区块链钱包根本范例和特点】


区块链钱包的分类和形貌依照所涉及的概念差别会有所区别,从其本质特点上来讲,可用下图来表现:
区块链钱包本质特点分别
区块链钱包和区块链一样,也可以分为去onchain钱包和offchain钱包(现在许多人风俗称之为中央化钱包和去中央化钱包,固然方便无底子的人形象明白,但是整个概念和精华却会被误解),它们本质区别在于钱包私钥的存储方式和所在,私钥存储在用户手中,钱包商无获取途径,用户可以及时利用链上资产的称之为onchain钱包;而私钥存储在钱包商大概生意业务所手中,用户不能直接利用链上资产而必要通过第三方才气动的称之为offchain钱包。详细来讲:
1.onchain钱包——全节点钱包
私钥存储在用户手中,同时全节点钱包还生存了全部区块的数据,如许就可以在当地直接验证生意业务数据的有用性。大部门全节点钱包也具备挖矿功能,它自身也是区块链网络中的一个节点,如BTC的Bitcoin Core;ETH的Mist,Parity等。
长处:
一样平常属于官方为区块链计划的钱包,直接onchain,不必要颠末第三方发起生意业务,包管了根本安全性;
由于前节点下载到当地,以是会更快验证生意业务信息。
缺点:
也由于下载了全部节点,以是占用许多硬盘空间(Mist如今到达了80G,笔者下了好几天也失败了;Bitcoin Core听说是150G);
每次利用前必要同步数据;
新手的利用体验不敷好;
不支持多种数字资产;
每每都是电脑版本。
2.onchain钱包——SPV轻钱包
私钥存储在用户手中,但不生存全部区块的数据,只生存跟本身相干的数据,以是体积很小,可以运行在电脑,手机,网页等地方。如Blockchain, imtoken等
长处:
用户体验很好,尤其对于新手
许多轻钱包都支持多种数字资产
体积小,不占空间
缺点:
生意业务验证会轻微慢一点
3.offchain钱包——通过中心折务器访问区块链网络的钱包
该范例钱包的分别有肯定争议,重要在于钱包数据传输的方式是可以扩展选择区块链节点照旧必须通过钱包服务方的服务器,假如是后者就存在私钥存储在中央化服务器的风险,现在有许多区块链钱包体验都很不错,乃至很流通,由于不开源无法清除该类风险。笔者推断比特购钱包应该属于此类。
长处:
同SPV轻钱包
用户体验会比onchain钱包好
缺点:
存在安全风险(固然真正致力做区块链的钱包企业哪怕纵然通过本身的服务器将生意业务信息发送到节点上,即不会作歹,但是不能清除大概有作歹的人可以利用这种方式得到用户密钥)
会比onchain钱包生意业务验证更慢,但是用户大概领会不到。
4.offchain钱包——第三方托管钱包
完全依靠运行这个钱包的公司和服务器,存在某个构造大概个体的钱包地点里,中央化生意业务所里的Cryptocurrency就是在offchain钱包(生意业务所)里生存的。
长处:
私钥忘记了可以找回
平台会把私钥安全做的不错
一样平常以企业作为名誉背书
缺点:
你的私钥控制在平台手上,平台“做坏事”你是无法制止的,即作歹风险
平台关闭后你的币就没有了,即跑路风险
固然,根据差别的体现情势,我们还可以有差别的分别:
区块链钱包的工作原理  区块链 141409hhz1575wbbthhjcy

区块链钱包体现情势分别

这种分别明白就比力简朴了,电脑单机版的钱包,如前面提到的全节点钱包根本以此类为主;手机钱包和在线钱包以SPV轻钱包为主,前者以手机APP为重要体现情势,后者是网页插件,如MyEtherWallet, MetaMask等。硬件钱包是为了加强安全性,通过专门计划的安全硬件来离线生存储私钥,隔绝黑客入侵。
以是,电脑钱包、手机钱包、在线钱包一样平常表现的都是及时可用性,它们更多被称之为热钱包,即及时在线,如许就存在被黑客攻击的风险;于是硬件钱包作为常年离线生存,更多称之为冷钱包,即离线生存。
但是硬件钱包每每必要购置单独的硬件装备,以是在本钱上会付出更多,同时利用的便利性也不如热钱包,由于及时在线可用。固然也有利用优盘来本身制作硬件钱包的,一方面制作过程比力繁琐,同时每次转账付出时会比力繁琐,实用于比力有底子的人士。
长处:
安全,私钥不触网,黑客无法通网络攻击。别的装备都有PIN码掩护,纵然在物理情况中装备被盗走,也无法打开你的钱包;
易备份,装备在初始化设置的时间会天生助记词(一样平常为12个大概24个单词),而助记词就是你私钥的备份,当你的装备丢失大概破坏以后,可以够买新的装备然后通过助记词来规复私钥;
多币种同时管理,如今绝大多数的硬件钱包,不但仅可以管理比特币,像莱特币、以太坊、比特现金等数字钱币都可以同时管理。
缺点:
难免费,你要为硬件付费;
无法独立利用,硬件钱包都是隔绝网络的,以是必要共同联网的客户端(Chrome 插件、桌面客户端、手机客户端等)来完成收币和发币。不外为了安全捐躯一些方便些也是值得的,究竟一个比特币8000刀,丢半个都疼。
【区块链钱包实现技能原理】


明白区块链钱包实现技能原理,先要明白:
1.私钥、公钥和地点产生的方法,这是区块链的相干知识;
2.接着明白怎样利用API举行长途调用等底子概念,这是传统IT行业相干知识;
3.末了就是钱包计划相干的助记词, keystore和暗码的概念,它和区块链公钥、私钥和地点产生的方式思绪一样,但是整个过程属于区块链钱包计划过程,不能与区块链的相干知识肴杂。
一、私钥、公钥和地点产生的方式(以BTC为例):
1.比特币私钥实在是利用SHA-256天生的32字节(256位)的随机数,有用私钥的范围则取决于比特币利用的secp256k1 椭圆曲线数字署名尺度。
2.在私钥的前面加上版本号,背面添加压缩标记和附加校验码,(所谓附加校验码,就是对私钥颠末2次SHA-256运算,取两次哈希效果的前四字节),然后再对其举行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字节公钥表示上述过程:
区块链钱包的工作原理  区块链 141410flhlihaeqafohseh

比特币地点算法

二.长途过程调用(RemoteProcedure Call, RPC)
它是一个盘算机通讯协议。该协议答应运行于一台盘算机的步伐调用另一台盘算机的子步伐,而步伐员无需额外地为这个交互作用编程。RPC 的重要功能目的是让构建分布式盘算(应用)更轻易,在提供强盛的长途调用本领时不丧失当地调用的语义简便性。广为利用的是一个叫做 JSON(JavaScript Object Notation)- RPC 的协议。以是钱包都是通过某个区块链RPC接口调用来和区块链网络举行交互。
这里列出主流项目相干的 RPC 接口以及开源钱包项目,以供参考。
Bitcoin:
1.RPC
Original Bitcoin client/API calls list
API reference (JSON-RPC)
JSON RPC API
2.Wallet
Bitcoin Core,官方出品
bitcoinj,比特币协议 Java 版
bither,简朴安全的比特币钱包
Electrum,全平台轻钱包
bread,iOS 钱包
Mycelium,Android 钱包
Copay,同时支持 Bitcoin 和BitcoinCash
bitcoin-wallet,又一款 Android 钱包
DotNetWallet,.NET 实现的钱包
Coinpunk,基于欣赏器的钱包
btcwallet,Go 实现的钱包
Ethereum/ERC20
1.RPC
JSON RPC
JSON RPC API
Management APIs
ethjsonrpc
web3.py
2.Wallet
go-ethereum,以太坊协议 Go 版
Mist,官方出品
Parity,支持 Windows、Mac、PC 的钱包
MetaMask
MyEtherWallet,基于欣赏器的钱包
eth-lightwallet,轻量级 JavasSript 版资本包
ethaddress.org,纸质版钱包天生器
Neureal wallet,支持 Windows、Mac、PC 的钱包
其他
1.Zcash
Zcash,官方出品
2.BitShares
BitShares,官方出品
3.Sia
Sia,官方出品
4.Nem
NanoWallet,官方出品
5.Dash
Dash,官方出品
6.Qtum
Qtum Core Wallet,官方出品
7.Litecoin
Litecoin,官方出品
8.IOTA
IOTA Wallet,官方出品
9.Monero
Monero,官方出品
10.GXS
GXS Wallet for mobile,官方出品
11.EthereumClassic
Ethereum Classic Wallet,官方出品
三、钱包计划相干的助记词(mnemonic),keystore和暗码的概念
私钥一样平常太难影象了,利用也不方便,以是从钱包计划的角度,就为简化操纵同时不丢失安全性,就出现了助记词的方法。
一样平常环境下,助记词由一些单词构成,只要你记着这些单词,按照次序在钱包中输入,也能打开钱包。
根据密钥之间是否有关联可把钱包分为两类:nondeterministic wallet 和 deterministic wallet。
nondeterministic wallet:密钥对之间没有关联;
deterministic wallet: 密钥对由一个原始的种子主密钥推导而来。最常见的推导方式是树状层级推导 (hierarchical deterministic) 简称 HD。
比特币钱包 (Bitcoin Core) 天生密钥对之间没有任何关联,属于 nondeterministic wallet ,这种范例的钱包假如想备份导入是比力贫苦的,用户必须逐个操纵钱包中的私钥和对应地点。
deterministic wallet基于BIP32(Bitcoin Improvement Proposal 32) 尺度实现,通过一个共同的种子维护n多私钥,种子推导私钥接纳不可逆哈希算法,在必要备份钱包私钥时,只备份这个种子即可。
通过9个步调即可天生钱包助记词和种子,此中步调1~6天生助记词,步调7~9把前六步天生的助记词转化为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
区块链钱包的工作原理  区块链 141411anbq61iq4l47xd75

助记词规则

1.天生一个长度为 128~256 位(bits)的随机序列(熵);
2.取熵哈希后的前n位作为校验和(n= 熵长度/32);
3.随机序列+校验和;
4.把步调3得到的效果每 11位切割;
5.步调4得到的每11位字节匹配词库的一个词;
6.步调5得到的效果就是助记词串;
区块链钱包的工作原理  区块链 141412m7ma3veezahv7az5

钱包天生助记词方法

通过助记词天生种子
助记词由长度为128 到 256 位的随机序列(熵)匹配词库而来,随后接纳PBKDF2 function推导出更长的种子(seed)。天生的种子被用来天生构建 deterministic Wallet 和推导钱包密钥。
在暗码学中,Key stretching技能被用来加强弱密钥的安全性,增长了暴力破解 (Brute-force attack) 对每个大概密钥实验攻破的时间,加强了攻击难度。各种编程语言原生库都提供了 key stretching 的实现。PBKDF2(Password-Based Key Derivation Function 2)是常用的 key stretching 算法中的一种。根本原理是通过一个为随机函数(比方HMAC 函数),把明文和盐值作为输入参数,然后重复举行运算终极产生密钥。
为了从助记词中天生二进制种子,BIP39 接纳 PBKDF2 函数推算种子,其参数如下:
7.助记词句子作为暗码;
8."mnemonic" + passphrase 作为盐;
9.2048 作为重复盘算的次数+HMAC-SHA512 作为随机算法,终极得到BIP32 种子,512 位(64 字节)是盼望得到的密钥长度;
DK = PBKDF2(PRF, Password, Salt, c, dkLen)
区块链钱包的工作原理  区块链 141413lv0s3sfq1f3hjdqu

助记词天生种子

主私钥和主链码:
起首是从根种子天生主密钥 (master key) 和主链码 (master chain code)
区块链钱包的工作原理  区块链 141414mty1hyz129yatn9j

种子天生密钥

上图中根种子通过不可逆HMAC-SHA512算法推算出512位的哈希串,左256位是Master Private key(m),右256位是master chain code,通过m联合推导公钥的椭圆曲线算法能推导出与之对应的264位master public Key (M)。chain code作为推导下级密钥的熵。
同时钱包还提供了keystore和暗码根本功能
用户最好的体验仍旧会是暗码方式,以是钱包还提供了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个。假设全宇宙都在穷举私钥:
假设宇宙有一亿个星系,
每个星系有一亿颗恒星,
每颗恒星有一亿颗人造卫星,
每颗人造卫星上有一亿台超等盘算机,
每台超等盘算机有一亿个CPU,
每个CPU每秒可以穷举一亿个私钥。
假设有一亿个私钥的地点上有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,另有各种各样的新公链,假如都利用同样的私钥天生地点的规则,有概率就意味着终极无线长时间总会出现重复的环境。而且概率学的范畴无法猜测到偶尔变乱:如就偶尔撞上了一次重复变乱。
以是,笔者明白:只能说刻意去穷举私钥谋利的方式是不具备性价比(完全不可取大概说代价惨重)的,在如许的默认假设下,万一出现偶尔变乱,天生钱包地点时会举行网络验证,假如发现重复(留意理论上纵然地点重复也未必私钥会重复,但是算法上通过限定私钥天生的范围来包管不会有两个私钥对应同一公钥的环境,以是照旧可以明白成私钥和地点逐一对应)就重新天生新的,并不会出现资产丧失的大概。
【参考文献】


http://www.infoq.com/cn/articles/bitcoin-and-block-chain-part03
http://www.jianshu.com/p/41163f213e15
http://blockchain.info/zh-cn/api/blockchain_wallet_api
http://www.jianshu.com/p/e6a4150eb729
PBKDF2 算法概述
分层确定性钱包 HD Wallet 先容
Bitcoin developer-guide#wallets
Working with Bitcoin HD wallets II: Deriving public keys
List of address prefixes
http://www.jianshu.com/p/8191295e8b19
http://www.zhihu.com/question/27253380/answer/363379249
http://ethfans.org/posts/hardware-wallet-Ledger
http://8btc.com/article-2002-1.html
http://orchome.com/944
http://www.cnblogs.com/yitim/p/8880977.html
简书地点:http://www.jianshu.com/u/0b4c8940c6c5
(简书中的链接可以直接点击,公众号外部链接会无效)
公众号信息大概会看得不实时,凌驾48小时就不能复兴,各人可以选择留言,谢谢!
接待ERC20系列币打赏:
0xe7F9D2D4B6D3d8535Da330041aE7Ce814C35622B
回复

使用道具 举报

23

主题

37

帖子

18

积分

新手上路

Rank: 1

积分
18
发表于 2018-8-9 23:39:24 | 显示全部楼层
找到好贴不容易,我顶你了,谢了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

联系我们

免费联系电话

400-123-45678

客服QQ:1235689987

服务时间:周一到周日8:00-23:30

关注我们
  • 手机网页版

  • 手机APP

Archiver手机版小黑屋明日经济网-21世纪经济日报报道电子版专注中国中原产业经济信息与新闻 ( 京ICP备11005339号-2 )|网站地图

Powered by Discuz! X3.2  © 2001-2013 Comsenz Inc.