什么是HD钱包?为什么要有那么多的私钥,进入数字货币的领域,我们就不得不接触钱包这个概念,而各种名目繁多的数字钱包甚至比区块链的基础理论还让人抓耳挠腮。今天我们就先了解一些有关HD钱包的知识吧!初次看到HD钱包,你有没有错误地将它理解成硬件(Hardware)钱包。我是根本不知道什么是HD钱包,它与我们通常看到的热钱包和冷钱包是什么关系,它是否属于全节点钱包、轻钱包、中心化钱包(链下钱包)中的一种。各种数字钱包的概念,给我一种云里雾里的感觉,完全搞不清楚其中的来龙去脉。
不过再难的结也需要一点点的去解开,毕竟关乎着我们的数字资产的安全,或许某个操作失误,就让我们的投资资产无处可寻。言归正传,来聊聊HD钱包吧!
一、HD钱包的概念
HD 钱包全称为是分层确定性(Hierarchical Deterministic)钱包的缩写 HD Wallets。
我们知道数字钱包是用来保存我们的密钥和地址的,而数字货币是被记录在区块链网络中的每个区块上的。因此,如何安全方便的生成、保存和备份恢复密钥才是钱包的关键。为此,钱包已经进化了三次,从最初的非确定(随机)钱包到第二代的确定性(种子)钱包,直到现在的分层确定性钱包,钱包的更新迭代经过了三个阶段。
实际上想要理解分层确定性钱包的概念也并没有我们想象的那么困难。它的原理用两句话就可以表达清楚:
首先,要用一个随机数来生成主私钥,这跟其他类型的钱包生成私钥过程没有任何区别。
然后,再用一个确定性的、不可逆的算法,基于主私钥生成任意数量的子私钥。
那为什么要用“确定、不可逆”的算法呢?因为“确定”才能保证从一个主私钥可以生成出全部的子私钥,而“不可逆”则是为了确保不能通过子私钥反推出主私钥。
之所以叫分层确定性钱包是因为私钥的衍生结构是树状结构,父密钥可以衍生一系列子密钥,每个子密钥又可以衍生出一系列孙密钥,以此类推,无限衍生。
这种结构跟公司的组织架构和家谱非常相似!
我们在首次创建 HD 钱包或者备份钱包时,会产生一个助记词,助记词是一连串的英⽂单词,这一串单词序列就可以创建种子,种子又可以创建所有的私钥。单词顺序也是钱包的备份,可以恢复钱包。而种⼦对应的就是所确定性钱包的随机数。
HD 钱包的优点在于只需要主公钥,就可以生成出任意数量的子公钥。也就是说,无需私钥介入(主私钥和子私钥),就能基于主公钥生成新(公钥)地址,而这些地址其实都能被主私钥所控制。
有利必有弊,当我们暴露助记词时,也相当于将所有的私钥拱手让人了,你所拥有的数字资产的安全性也归零了。
二,为什么要有那么多的私钥
为什么一个用户得需要那么多的私钥,我们以比特币交易的找零机制来说明。⼀笔⽐特币交易是⼀个含有输⼊值和输出值的数据结构,该数据结构植⼊了将⼀笔资⾦从初始点(输⼊值)转移⾄⽬标地址(输出值)的代码信息。
谈到比特币的交易输入和输出,还必须了解一个名词UTXO(Unspent Transaction Output),它是⽐特币交易的基本单位,是⼀个未经使⽤的交易输出。⼀个⽤⼾的⽐特币会被当作UTXO分散到数百个交易和数百个区块中。实际上,并不存在储存⽐特币地址或账⼾余额的地点,只有被所有者锁住的、分散的UTXO。
⽐特币可以被分割成表⽰⼋位⼩数的“聪”,⼀个UTXO可以是⼀“聪”的任意倍。UTXO可以是任意值,但只要它被创造出来了,就像不能被切成两半的硬币⼀样不可再分了。如果⼀个UTXO⽐⼀笔交易所需量⼤,它仍会被当作⼀个整体⽽消耗掉,但同时会在交易中⽣成零头。
这段话是什么意思,来举个形象点的例子。如果你有一笔20⽐特币的UTXO并且想⽀付1⽐特币,那么你的交易必须消耗掉整个20⽐特币的UTXO并且产⽣两个输出:⼀个是⽀付了1⽐特币给接收⼈,另⼀个是⽀付19⽐特币的找零到你的钱包。这样的话,⼤部分⽐特币交易都会产⽣找零。
问题就来了,产生的找零应该返还原地址呢,还是返还到一个新地址。中本聪在设计比特币时,运用的找零机制是创建了一个新的地址作为每笔交易的找零地址。这样设计的好处,是为了保护交易用户的隐私和避免一些安全隐患。
这在现实生活中,就好像你用多个名字和身份证在不同的银行开通了数个银行帐号,即便有人知道每个帐号上的资金往来情况,也是不能根据资金流向刨根溯源查到真正的数字货币拥有人,这就是比特币所谓的匿名性。
这样你应该知道了一个钱包用户为什么需要那么多的私钥,因为公钥和私钥总是成对出现的,每笔交易都有可能产生一个找零地址,而与这些地址相对应的私钥保管和备份就成了数字交易的技术难题。HD 钱包由一个公钥就可以生成任意个数的子公钥,这极大地解决了数字钱包的使用硬伤。
最后,再温馨提示一声,请一定要安全可靠的方式及时备份助记词,并仔细将钱包的助记词及时抄写到安全的地方。另外,助记词是未加密的私钥,安全性极低,对助记词加密也是保证钱包安全的措施之一。
比特币的所有权是通过密钥、比特币地址和数字签名共同确定的。 密钥不存在于比特币网络中,而是用户自己保存,或者利用管理私钥的软件-钱包来生成及管理。
比特币的交易必须有有效签名才会被存储在区块中,因此拥有密钥就拥有对应账户中的比特币。 密钥都是成对出现的,由一个公钥和一个私钥组成。 公钥相当于银行账号,私钥就相当于银行卡密码。 通常情况下密钥由钱包软件管理,用户不直接使用密钥。
比特币地址通常是由公钥计算得来,也可以由比特币脚本得来。
比特币私钥通常是数字,由比特币系统随机( 因为算法的可靠性与随机性正相关,所以随机性必须是真随机,不是伪随机,因此比特币系统可以作为随机源来使用 )生成,然后将私钥作为输入,使用椭圆曲线算法这个单向加密函数生成对应的公钥,再将公钥作为输入,使用单向加密哈希函数生成地址。例如,通过公钥K得到地址A的计算方式为:
其中SHA256和PIPEMD160被称为双哈希或者HASH160,Base58Check是带有验证功能的Base58编码,验证方式为先计算原始数据(编码前)的验证码,再比较编码后数据的验证码,相同则地址有效,否则无效。 而在使用Base58Check编码前,需要对数据做处理。 处理方式为: 版本前缀 + 双哈希后的数据 + 校验码 其中版本前缀是自定义的,如比特币私钥的前缀是0x80,校验码是把版本前缀和双哈希后的数据拼接起来,进行两次SHA256计算,取前4字节。 得到处理的数据后,再进行Base58编码,得到最终的结果。
下图是Base58Check版本前缀和Base58编码后的结果
密钥可以采用不同的编码格式,得到的编码后结果虽然不同,但密钥本身没有任何变化,采用哪种编码格式,就看情况而论了,最终目的都是方便人们准确无误的使用和识别密钥。 下图是相同私钥采用不同编码方式的结果:
公钥也有很多种格式,不过最重要的是公钥被分为压缩格式和非压缩格式,带04前缀的公钥为非压缩格式的公钥,而03,02开头的标识压缩格式的公钥。
前面说过,公钥是椭圆曲线上的一个点,由一对坐标(x, y)表示,再加上前缀,公钥可以表示为:前缀 x y。 比如一个公钥的坐标为:
以非压缩格式为例,公钥为(略长):
压缩格式的公钥可以节省一定的存储,对于每天成千上万的比特币交易记录来说,这一点点的节省能起到很大效果。
因为椭圆曲线实际上是一个方程(y2 mod p = (x3 + 7)mod P, y2是y的平方,x3是x的立方),而公钥是椭圆曲线上的一个点,那么公钥即为方程的一个解,如果公钥中只保留x,那么可以通过解方程得到y,而压缩公钥格式有两个前缀是因为对y2开方,会得到正负两个解,在素数p阶的有限域上使用二进制算术计算椭圆曲线的时候,y坐标或奇或偶,所以用02表示y为奇数,03表示y为偶数。
所以压缩格式的公钥可以表示为:前缀x 以上述公钥的坐标为准,y为奇数为例,公钥K为:
不知道大家发现没有,这种压缩方式存在一个问题,即一个私钥可以得出两个公钥,压缩和非压缩公钥,而这两个公钥都对应同一个私钥,都合法,但生成的比特币地址却不相同,这就涉及到钱包软件的实现方式,是使用压缩公钥还是非压缩公钥,或者二者皆用,这个问题后面来介绍。
比特币钱包最主要的功能就是替用户保管比特币私钥,比特币钱包有很多种,比如非确定性(随机)钱包,确定性(种子)钱包。 所谓的非确定性是指钱包运行时会生成足够的私钥(比如100个私钥),每个私钥仅会使用一次,这样私钥管理就很麻烦。 确定性钱包拥有一个公共种子,单向离散方程使用种子生成私钥,种子足够回收所有私钥,所以在钱包创建时,简单备份下,就可以在钱包之间转移输入。
这里要特别介绍下助记码词汇。 助记码词汇是英文单词序列,在BIP0039中提出。 这些序列对应着钱包中的种子,种子可以生成随机数,随机数生成私钥,私钥生成公钥,便有了你需要的一切。 所以单词的顺序就是钱包的备份,通过助记码词汇能重建钱包,这比记下一串随机数要强的多。
BIP0039定义助记码和种子的创建过程如下:
另外一种重要的钱包叫做HD钱包。 HD钱包提供了随机(不确定性) 钥匙有两个主要的优势。 第一,树状结构可以被用来表达额外的组织含义。 比如当一个特定分支的子密钥被用来接收交易收入并且有另一个分支的子密钥用来负责支付花费。 不同分支的密钥都可以被用在企业环境中,这就可以支配不同的分支部门,子公司,具体功能以及会计类别。 第二,它可以允许让使用者去建立一个公共密钥的序列而不需要访问相对应的私钥。 这可允许HD钱包在不安全的服务器中使用或者在每笔交易中发行不同的公共钥匙。 公共钥匙不需要被预先加载或者提前衍生,但是在服务器中不具有可用来支付的私钥。
BIP0038提出了一个通用标准,使用一个口令加密私钥并使用Base58Check对加密的私钥进行编码,这样加密的私钥就可以安全地保存在备份介质里,安全地在钱包间传输,保持密钥在任何可能被暴露情况下的安全性。 这个加密标准使用了AES,这个标准由NIST建立,并广泛应用于商业和军事应用的数据加密。
BIP0038加密方案是: 输入一个比特币私钥,通常使用WIF编码过,base58chek字符串的前缀“5”。 此外BIP0038加密方案需要一个长密码作为口令,通常由多个单词或一段复杂的数字字母字符串组成。 BIP0038加密方案的结果是一个由base58check编码过的加密私钥,前缀为6P。 如果你看到一个6P开头的的密钥,这就意味着该密钥是被加密过,并需个口令来转换(解码) 该密钥回到可被用在任何钱包WIF格式的私钥(前缀为5)。 许多钱包APP现在能够识别BIP0038加密过的私钥,会要求用户提供口令解码并导入密钥。
最通常使用BIP0038加密的密钥用例是纸钱包一一张纸张上备份私钥。 只要用户选择了强口令,使用BIP0038加密的私钥的纸钱包就无比的安全,这也是一种很棒的比特币离线存储方式(也被称作“冷存储”)。
P2SH函数最常见的实现时用于多重签名地址脚本。 顾名思义,底层脚本需要多个签名来证明所有权,然后才能消费资金。 这类似在银行开设一个联合账户。
你可以通过计算,生成特殊的比特币地址,例如我需要一个Hello开头的地址,你可以通过脚本来生成这样一个地址。 但是每增加一个字符,计算量会增加58倍,超过7个字符,需要专门的硬件或者矿机来生成,如果是8~10个字符,那么计算量将无法想象。
助记词由12-24个单词组成,助记词可以生成私钥。 一个助记词可以生成无穷个私钥,可以理解成助记词是个树的根,这个根上可以长很多分支,每个叶子是一个私钥,Cobo钱包不同币种用的是不同的分支。 这也是为何一个助记词可以管理HD账户下所有的钱包地址。 换句话说助记词就是另一种形式的私钥。 它通过算法将64位的私钥转换成若干个常见的英文单词,这样记忆起来就方便的多。 创建HD钱包时会出现一个备份助记词功能,选择备份助记词,输入密码,会出现12个单词,这个就是助记词,一个钱包只有一个助记词且不能修改。 请务必用安全的方式记录下这些单词,避免泄露。 Cobo最近上线了HD钱包,允许用户自己备份助记词,而且一个助记词可以掌管账户下的所有地址。 ·私钥(Private Key)我们都知道,私钥是管理和使用加密货币中最关键的东西,对所有数字货币用户而言,私钥决定了所有权,拥有私钥才能支配相应的加密资产。 简言之就是,如果私钥丢失你的币就不是你的币了。 私钥是由加密算法生成的一个64位十六进制的字符组成,就像这样:5KYZdUEo39z3FPrtuX2QbbwGnNP5zTd7yyr2SC1j299sBCnWjss私钥的生成方式是完全随机的,随机生成这样的字符串会有16的64次方种可能,即:2的256次方,一个钱包只有一个私钥并且不能修改,正常情况下你所生成的私钥与他人正好相同的概率几乎为零。 但是私钥的这种形式存储和记忆起来太复杂,于是就有了助记词工具。 助记词和私钥哪个重要?私钥和助记词其实两者都不能忘记,甚至可以说私钥和助记词是相辅相成的,两者都安全了,投资者的钱包才能安全,下面小编就给大家说说助记词,地址,私钥都一一对应什么呢?私钥你可以理解成随机生成的一个随机数,这个随机数的范围在1-2^256,一个随机数对应一个钱包密码,有了这个就能转移一个钱包的资产。 你可以把它理解为能从银行卡里面取钱的密码(有人可能会问,会不会有两个钱包随机数刚好相同,那我岂不是可以撬开别人的钱包,拿走别人的比特币,1/2^256这个概率有多小,和你一觉醒来成为百亿富翁的机会差不多)所以不用那么担心这种问题;但是私钥非常复杂,我们一般能看的到的助记词样式差不多这样——d1aa4cfac81c6968ac50dae409d71acc9de038d36(数字随便写的啦,别试啦)助记词太复杂,记录太困难,还容易出错。 所以人们通过某种算法让私钥可以变成助记词,一般为12个到24个英文单词。 助记词和私钥是互通的,拿到了助记词就等于拿到了私钥,拿到了私钥也相当于拿到了助记词,也就相当于你银行卡的密码,盗走你的币(除非你没钱)那是分分钟的事。 其实助记词和私钥在功能上是一致的,助记词的本质也是一串随机的数字,不过因为随机数形式和私钥形式都不方便使用,所以这两个助记词就等于私钥。 我们知道私钥就是钱,所以不管是助记词还是私钥,我们都应该好好的把他们保护起来,这是非常重要的。 如果我们想要保证我们的资产安全,一定要学会如何正确的保护我们的资产,为我们的数字资产负起责任。 以上就是助记词和私钥的区别是什么?助记词和私钥哪个重要?的详细内容,更多关于助记词和私钥详细介绍的资料请关注脚本之家其它相关文章!
简介 HD Wallets:全称Hierarchical Deterministic Wallets,中文名称分层确定性钱包,是目前广泛使用的虚拟货币钱包标准。 下面我就来给大家讲讲HD Wallets的工作机制以及开发原理。 BIPS BIPs 全名Bitcoin Improvement Proposals,是提出 Bitcoin 的新功能或改进措施的文件。 详情可见:BIP32, BIP39, BIP44 共同定义了目前被广泛使用的 HD Wallets,包含其理念、设计动机、实现方式、实例等。 定义Hierarchical Deterministic Wallets。 通过种子来生成主私钥,然后派生海量的子私钥和地址。 BIP39:Mnemonic code for generating deterministic keys 将 seed 用方便记忆和书写的单词表示。 一般由 12 个单词组成,称为 mnemonic code,中文称为助记词。 符合BIP39标准的助记词可以是 3个、6个、9个、12个、15个、18个、21个和24个单词。 它们所对应的强度分别是:2048(3次方) 、2048(6次方) ... 2048(24次方) ,一般采用12个单词,强度为:2048(12次方) BIP32 HD Wallets从一个 seed 生成一个树状结构储存多组 keypairs(私钥和公钥),进而根据树状结构具体结点上的keypair生成具体的钱包(如BTC钱包、ETH钱包)。 分层是指一个seed可以生成一个有层级关系的树状结构储存多组keypairs,子节点是由父节点根据一定的算法派生出来的。 例如,一个大公司可以为一级部门生成不同的私钥,一级部门可以再为自己的二级部门生成不同的私钥。 由于二级部门的私钥是由所属的一级部门的私钥派生的,每个一级部门可以拥有管理自己二级部门私钥的权限,即可以花里面的币。 也可以只给会计人员某个层级的公钥,让他可以看到这个部门的收支记录,但不能花里面的钱,使得财务管理更方便了。 BIP44:Multi-Account Hierarchy for Deterministic Wallets 基于 BIP32 的系统,赋予树状结构中的各层特殊的意义。 让同一个 seed 可以支持多币种、多帐户等。 各层定义如下: 其中的 purporse 固定是 44,代表使用 BIP44。 而 coin_type 用来表示不同币种,例如Bitcoin就是 0,Ethereum是60。 例如: m/44/0/0/0/0代表一个BTC钱包path m/44/60/0/0/0代表一个ETH钱包path 生成HD Wallets钱包的过程简单来说以下4步就可以搞定: HD Wallets钱包的优势有哪些? 1)方便备份; 2)在不同的应用间使用; 3)可同时管理多个钱包; 4)可同时管理多种币; 5)支持分层的权限控制; 6)可实现私钥离线存放,更安全。
Copyright @ 2024 啦啦收录网 此内容系本站根据来路自动抓取的结果,不代表本站赞成被显示网站的内容或立场。
你是本站第位访客 | 网站地图 | 粤ICP备2022150304号