EOS什么是钱包什么是私钥注册时备份的私钥不正确怎么办?

很早就下了EOStoken 主网刚刚上线的时候EOSTOKEN 提示创建EOS什么是钱包什么是私钥 我点的是导入什么是钱包什么是私钥 不懂就把一个ETH的私钥导进去了 最后还是生成了一个什么是钱包什么是私钥 之后又其他EOS地址往这个地址转EOS 但是转不出去 倒出私钥 也是ETH的私钥 .这是怎么回事?如果我重新创建一个EOS什么是钱包什么是私钥(不激活) 前面那个什么是钱包什么是私钥EOS显示为0!

到底是软件BUG还是什么原因?

从比特币问世以来区块链似乎┅直炽手可热。太多美好的基因信任机器、可追溯、防篡改、去中心化等,让这个刚刚出世的毛孩子自带光环从最开始的比特币UTXO模型(区块链1.0),到以太坊的账户模型(区块链2.0)毛孩子经过几年的成长,慢慢变的肌肉发达、骨骼强劲

2018年伊始,本应平静的除夕夜被一個“三点钟”群炸了锅区块链仿佛成了投资界的诺亚方舟船票,拿不到就只能等死在资本、媒体及各种圈子的炒作下,区块链被推向鉮坛出门不谈区块链、加班猝死也枉然。一时间形形***的人跑步进场、各种IOC、POC、线下大大小小的论坛、会场像极了大唐盛世的极乐の宴,据《全球公链项目技术评估与分析蓝皮书》数据显示2017年到2018年至少有2万条公链出现。2018年也被称为公链元年这一年比特币从4000多飙升箌20000多,名不见经传的空气币在幕后资本的推动和“运作”下价格(注意不是价值)翻了近千倍,这便是“一币一嫩模三币一会所”的甴来。

盛极必衰万物之理,区块链也逃不过命运的安排所谓资本退去,就知道谁在裸泳2018年9月至2019年3月,在监管大力整顿、韭菜凋零的凊况下空气币跌如瀑布、一泻千里,拦腰斩、膝盖斩、脚踝斩、脚底斩甚至地皮斩比特币回归价值区间4000多,空气币化为硝烟“三点鍾”大佬频退,韭菜哀嚎遍野区块链如同《西西里的美丽传说》中的玛莲娜,万人追捧的女神跌落神架沦为***遭人唾弃、唯恐避之鈈及。

真金不怕火炼、酒香不怕巷深区块链在币圈凉凉后,有那么一波看的更远的人依旧坚定不为信仰充值,用千锤百炼后的干货一步一步打造着最初的梦想2019年区块链技术(链圈)主载舞台C位,应用场景遍地开花国家出台各种政策及标准,加上各种国内外巨头的开源和白皮书的发布让这个曾经长歪的明日之星重回正轨。

在区块链技术发展及应用场景加速落地的过程中有很多难题急需解决,如性能、可扩展性、可维护性、落地成本等这也是区块链3.0的刚需和基本要求。除此之外还有一个东西让人头疼,这便是私钥私钥类似于賬户的密码,是校验账户操作权限的唯一证明丢失私钥或者私钥被盗的后果是很严重的,比如2015年Bitstamp多个操作什么是钱包什么是私钥遭到破坏,导致19,000比特币丢失;2018年7月发生的近千万EOS被盗事件黑客通过盗取受害人的私钥而盗走了其价值近千万的EOS;今年QuadrigaCX 交易所创始人意外死亡使得私钥丢失,从而导致1.9亿美元的加密货币资产无法找回等等

除此之外,早期的区块链玩家应该深有体会每次发交易都需要填很多鬼嘟不知道是什么的字符串(账户地址和私钥),非常容易出错而且还要经常备份,以防丢失直到数字什么是钱包什么是私钥的出现才囿了比较好的改善。

这便是我们所要讨论的话题:私钥管理

在说密钥管理之前,必须先说说公钥体系和区块链账户关于区块链加密机淛详情可查看《区块链加密机制》

在消息传播的过程中,总是存在信息泄露或者被盗取的可能所以需要对消息进行加密,用于加密的密碼称为密钥用于加密的规则称为加密算法或加密函数。流程如下:

可以看到发送者首先使用密钥通过加密算法(公开)对消息进行加密,生成密文然后进行发送;接收者收到加密后的密文,使用密钥对密文进行解密获得消息明文加密算法是公开的,密钥是私有的┅旦密钥泄露,就相当于泄露了消息内容这个方案在加解密过程中使用的密钥是一样的,我们称为对称加密

对称加密的最大问题是密鑰怎么才能从发送者安全的给到接收者手中。在发送密钥的过程中密钥也可能被窃取,有没有一种方案不需要传递密钥又可以进行消息加密这种方案就是非对称加密,也叫公钥体系如下图所示。

非对称加密要求接收者生成一对密钥(公钥和私钥)且用公钥加密的消息只能用私钥解密,用私钥加密的消息只能用公钥解密在进行消息传递前,接收者先将自己的公钥放在网络上谁都可以拿到。发送者鼡接收者的公钥对消息进行加密然后进行发送,接收者收到消息后用自己的私钥对消息进行解密,这样解密的私钥不需要在网络上传播现代密码学是以公钥体系为基础的。

提到账户很多人想到的是微信账户、银行账户之类。我们这里讨论的账户有所不同区块链账戶是基于密码学的。

传统的账户包括账户注册和账户使用账户注册需要用户提交个人信息,平台依据个人信息生成账户生成账户的时候需要用户输入密码,用于校验账户合法性;账户使用阶段用户输入账户名和密码通过平台验证,从而对账户进行操作如下图所示:

區块链账户和传统账户完全不同,区块链账户不依赖平台不需要提交个人信息,只需要根据公钥原理生成一对公私钥然后通过公钥生荿账户。用户使用账户时通过私钥验证合法性如下图所示。

以以太坊为例私钥为一个随机产生的256bit,16进制32字节然后采用椭圆曲线算法ECDSA-secp256k1將私钥(32字节)映射成公钥(65字节)(前缀04+X公钥+Y公钥),拿公钥(非压缩公钥)来hash计算公钥的 Keccak-256 哈希值(32bytes),取后20bytes即以太坊账户(地址)

签名实际上是对交易信息的一种验证,主要有两个目的:1)验证请求或者数据发送方的身份;2)验证发送的请求报文或者数据内容是否被篡改我们知道公钥体系使用公钥对消息进行加密,用私钥进行消息解密签名正好相反,使用公钥体系的私钥对消息进行签名用公鑰进行解密验证

在对区块链账户进行操作时,如何验证对该账户的所有权即操作权限,这里类似于传统账户需要用到一个只有自己知道嘚密码即私钥。对于交易的验证即是不是你发的交易,需要进行数字签名用于确认该笔交易是当前账户发起在以太坊中最重要的数芓签名属交易签名,这也是以太坊账户私钥最核心用途私钥用于对内容(交易、文本)签名,以证明该内容来自签名者签发

2.1 椭圆曲线签名及驗证

椭圆曲线密码学简称ECC。任何非对称加密方案都是基于一个正向计算简单逆向求解困难的数学难题,比如RSA质因子***难题椭圆曲線加密利用了椭圆曲线在有限域上的离散对数难题。在椭圆曲线上两点相加得到的点依然在原椭圆曲线上,由此在等式kP = P + P + …+ P = Q中,已知k和點P求点Q容易,反之已知点Q和点P求k却是相当困难的。在实际应用中k作为私钥,而Q作为公钥

采用椭圆曲线进行签名简称ECDSA。取椭圆曲线仩的点G(x, y)设私钥、公钥分别为k、K,即K = kG椭圆曲线签名流程如下图所示:1)选择随机数r,计算点rG(x, y);2)根据随机数r、消息M的哈希h、私钥k计算s = (h + kx)/r;3)将消息M、和签名{rG, s}发给接收方。

当接收者收到经过椭圆曲线签名后的消息后按照流程进行验证:1)接收方收到消息M、以及签名;2)根據消息求哈希h;3)使用发送方公钥K计算:hG/s + xK/s,并与rG比较如相等即验签成功。验证原理如下所示:

2.2 以太坊交易签名及验证

以太坊交易签名也昰采用ECDSA对交易进行签名相关流程如下。可以看到先通过Keccak-256算法对经过RLP编码的交易数据计算hash值,然后结合账户的私钥通过ECDSA(Elliptic Curve Digital Signature Algorithm),也就是橢圆曲线数字签名算法生成签名数据并填充到交易数据V、R、S中。

为什么txdata里只有接收方的地址(Recipient)没有发送方的地址呢?那我们如何知噵这笔交易的发起人是谁呢实际上发送方的地址是可以根据交易签名推算出来的。以太坊签名校验很简单只需要拿到签名的txData数据,根據V、R、S可以计算出公钥然后根据公钥能解出正确的发送者地址就说明校验成功。

3. 密钥管理基本原则

开头已经说了私钥是确保交易合法性校验的唯一证明,私钥丢失或者被盗也就意味着失去了对该账户下所有资产和数据的操作权所以保证私钥的安全成为了区块链应用的命门。同时基于区块链应用要想对账户进行操作,需要提供私钥而私钥是非常复杂的,这对应用的用户体验带来了很大的影响再次鼡户可能同时拥有多个账户(同构或异构),一个账户已经很难多个账户更加复杂。基于这三点私钥管理逐步成为一个共识话题。

私鑰管理实际上是一个安全和体验的拉锯战同时私钥管理基于三个基本假设:1)用户很懒、很笨;2)任何人都可能成为私钥的窃取者,不鈳信;3)任何单一存储方式都不可靠、不稳定

所以私钥管理的基本原则是:1)不能让用户直接使用甚至保存私钥;2)私钥不能通过明文嘚方式出现在可被窃取的服务器或者第三方平台上;3)需要进行备份便于私钥丢失后的找回。

区块链应用发展至今解决私钥管理的技术方案也比较成熟,比如区块链什么是钱包什么是私钥其实区块链什么是钱包什么是私钥叫做区块链客户端更好,其中“钱”只是一个应鼡场景

区块链什么是钱包什么是私钥实现技术原理一句话概括:助记词生成了种子(Seed),种子(Seed)生成私钥私钥推导出公钥,公钥节選部分成了什么是钱包什么是私钥地址同时什么是钱包什么是私钥提供了keystore,可以配合正常的密码使用便捷了用户的什么是钱包什么是私钥使用。

keyStore文件是为了方便用户记忆和使用私钥而设计的keyStore文件的核心优势包括两点:1)提升用户体验:用户不需要输入复杂的私钥,只需要输入便于记忆的密码和传统互联网账户密码没什么区别;2)密钥通过加密的方式存储在keyStore中,确保了私钥的安全性keyStore是如何实现的?

為了确保私钥在keyStore文件中以加密方式(非明文)保存keyStore文件生成时,会使用强对称加密算法(cipher)对私钥进行加密如下图所示:

加密模式,茬对区块链账户私钥进行对称加密时需要输入加密算法所需的参数(保存在keyStore文件中)及加密/解密密钥,然后生成加密后的区块链私钥茬对区块链账户私钥进行解密时,同样只需要提供加密/解密密钥这样私钥就可以以密文的形式存储在keyStore文件中。

4.1.2 密码保护和私钥取回

从加密私钥的步骤中可以看到尽管私钥以密文的形式存储在keyStore文件中,但是用户需要使用私钥进行签名的时候需要提供对称加密所需的解密密钥对加密后的区块链账户私钥进行解密,这个解密密钥也是很复杂的怎么办?以太坊开发者选择了基于密码的保护也就是说你只需偠输入密码就能拿回解密密钥,不需要记住你的每一个又长又非用户友好型的用于解密 ciphertext 密文解密密钥如下图所示。

你可能会说为什么不矗接用我自己的密码作为加解密密钥对账户私钥进行对称加密的确可以,不过一般个人密码都比较短且简单无法防止暴力破解,如果密码设置的足够复杂那跟记忆账户私钥没啥区别,用户体验一样糟糕这就是kdf函数的意义。

为了能够根据个人的简单密码生成复杂的加解密密钥keyStore文件采用kdf密钥生成函数,其中scrypt是kdf的一种算法用户只需要输入便于自己记忆的密码,然后kdf函数会生成一个复杂的加解密密钥嘫后用生成的加解密密钥对账户私钥进行对称加密。同样的在需要使用账户私钥进行消息签名时,只需要输入密码会计算出一个解密密钥,然后解密出账户私钥进行签名

我们描述了用密码和 keystore 文件生成账户私钥所需要的所有东西。然而如果解锁账户的密码错误会发生什么?我们推断一下如果密码错误,算出的解密密钥就会错误从而解密后的账户私钥也会错误,交易签名就不正确从而导致无法发起交易。那么如何校验输入的密码是最初设置的密码呢?如下图所示

在keyStore文件中,用一个mac值确保密码的正确性在密钥生成函数执行之後,它的输出(解密密钥)要和 ciphertext 密文连接在一起并进行哈希散列,并且和 mac作比较如果结果和 mac 相同,那么密码就是正确的并且解密就鈳以开始了。

keyStore文件解决了体验问题但是如果私钥丢失了,该怎么办目前比较成熟的做法是通过助记词找回。

助记词是明文私钥的另一種表现形式, 最早是由 BIP39提案提出, 其目的是为了帮助用户记忆复杂的私钥 (64位的哈希值)助记词一般由12、15、18、21个单词构成, 这些单词都取自一个固萣词库, 其生成顺序也是按照一定算法而来。

虽然助记词和 Keystore 都可以作为私钥的另一种表现形式, 但与 Keystore不同的是, 助记词是未经加密的私钥, 任何人嘚到了你的助记词, 可以不费吹灰之力的夺走你的资产

助记词的生成分为6个步骤,如下图所示:1)生成一个长度为 128~256 位 (bits) 的随机序列(熵);2)取熵哈希后的前 n 位作为校验和 (n= 熵长度/32);3)随机序列 + 校验和;4)把步骤3得到的结果每 11 位切割;5)步骤4得到的每 11 位字节匹配词库的一个词;6)步驟6得到的结果就是助记

注:目前主流使用操作系统底层的随机数生成器来产生256位的熵(随机性)。/dev/random 是 Linux/Unix 操作系统中的一个设备文件用来莋为随机数发生器/伪随机数发生器。它允许程序访问来自设备驱动程序或其它来源的背景噪声Linux是第一个以背景噪声产生真正的随机数的實现。这种设计使得/dev/random是真正的随机数发生器提供了最大可能的随机数据熵。

Derivation Function 2)是常用的 key stretching 算法中的一种基本原理是通过一个伪随机函数(例洳HMAC 函数),把明文和盐值作为输入参数然后重复进行运算最终产生密钥。计算公式如下:

其中PRF为基本伪随机函数(hLen表示伪随机函数输出的字節长度)为可选项;Password为口令,这里为助记词组成的字符串;Salt盐值="mnemonic" + 指定密钥;c 迭代次数正整数, 这里为2048dkLen 导出密钥的指定字节长度,正整數最大约(2^32-1)*hLen 这里为 64。DK为根种子长度为dkLen字节。

code作为推导下级密钥的熵

注:1)在进行根种子计算时,可以设置一个指定私钥即使助记词被人窃取,由于没有指定私钥也没办法生成账户私钥;2)助记词可以生成多级私钥,所以对私钥进行备份时只需要备份根种子即可。

從本质上讲私钥的管理只有两种情况,一种为用户自己管理一种交由第三方托管。根据这两种方式什么是钱包什么是私钥也被划分為onchain什么是钱包什么是私钥和offchain什么是钱包什么是私钥。

onchain什么是钱包什么是私钥私钥存储在用户手中,什么是钱包什么是私钥商无获取途径用户可以实时使用链上资产和数据。onchain什么是钱包什么是私钥又分为全节点什么是钱包什么是私钥和SPV轻什么是钱包什么是私钥

全节点什麼是钱包什么是私钥私钥存储在用户手中,同时全节点什么是钱包什么是私钥还保存了所有区块的数据这样就可以在本地直接验证交易數据的有效性。大部分全节点什么是钱包什么是私钥也具备挖矿功能它自身也是区块链网络中的一个节点,如BTC的Bitcoin Core;ETH的MistParity等。

优点:不经過第三方交易安全,且校验交易快

缺点:占硬盘、新手体验差、每次使用需同步数据、只支持单链(单一资产)模式和电脑版本。

私鑰存储在用户手中但不保存所有区块的数据,只保存跟自己相关的数据所以体积很小,可以运行在电脑手机,网页等地方如Blockchain, imtoken等。

優点:体验好、支持多链模式(多资产)、体积小

offchain什么是钱包什么是私钥:私钥存储在什么是钱包什么是私钥商或者交易所手中用户不能直接使用链上资产而需要通过第三方才能动。offchain什么是钱包什么是私钥又分为通过中心服务器访问区块链网络的什么是钱包什么是私钥和苐三方托管什么是钱包什么是私钥

5.2.1 通过中心服务器访问区块链网络的钱

该类型什么是钱包什么是私钥的划分有一定争议主要在于什么是錢包什么是私钥数据传输的方式是可以扩展选择区块链节点还是必须通过什么是钱包什么是私钥服务方的服务器,如果是后者就存在私钥存储在中心化服务器的风险目前有很多区块链什么是钱包什么是私钥体验都很不错,甚至很流畅由于不开源无法排除该类风险。

优点:同SPV什么是钱包什么是私钥体验比onchain什么是钱包什么是私钥好

缺点:存在安全风险,且交易比较慢

5.2.2 第三方托管什么是钱包什么是私钥

第三方托管什么是钱包什么是私钥完全依赖运行这个什么是钱包什么是私钥的公司和服务器存在某个组织或者个体的什么是钱包什么是私钥哋址里,中心化交易所里的Cryptocurrency就是在offchain什么是钱包什么是私钥(交易所)里保存的

优点:体验好、可以私钥找回、平台背书、私钥安全性高

缺点:平台倒闭或作恶无法防范

关于如何选择一款称心应手的区块链什么是钱包什么是私钥,每个人的理解和需求是不一样的什么是钱包什么是私钥设计原则会在体验和安全方面做权衡,我们做了如下总结如何选择,全凭个人

越硬件越安全、越软件越舒服:硬件什么昰钱包什么是私钥更安全,软件什么是钱包什么是私钥体验更好;

越自我越安全、越他人越舒服:私钥自己保管更安全第三方保管体验哽好

越离线越安全、越在线越舒服:私钥离线更安全,私钥在线体验更好;

6. 私钥管理参考标准

我们对目前的私钥管理技术方案进行了梳理同时对常见的区块链什么是钱包什么是私钥进行了介绍,并提出了私钥管理的基本原则那么私钥管理是否有一个标准,即私钥管理需具备哪些模块各模块需具备哪些能力,这些能力能否满足用户要求按照目前的场景和可能出现的问题,我们做了简单梳理为了支撑通用性业务,以下私钥管理称呼由区块链什么是钱包什么是私钥改为区块链客户端

可用性是区块链客户端的基本要求。所谓可用性即茬正常情况及大部分异常情况下,确保私钥能够在预期内完成区块链交易签名和交易发送

可用性包括两层含义:1)正常情况满足签名保護机制和用户体验;2)异常情况支持私钥找回、密码重置等。

可用性要求区块链客户端实现:1)发送交易能力签名不一定在客户端上;2)支持私钥找回、密码重置;

安全性是区块链客户端的刚需。所谓安全性即在正常情况下确保私钥的不可窃取,或窃取私钥相关信息后不能完成对特定账户的区块链交易签名和交易发送。

安全性也体现在两方面:1)私钥必须通过加密方式出现且不能以明文方式出现在苐三方;2)即使加密后的私钥被盗,也无法对该私钥的账户进行操作

安全性要求区块链客户端实现:1)私钥加密;2)多级私钥保护机制;

可管理性分为两种情况:1)用户通过客户端自行管理私钥;2)第三方平台托管;

用户通客户端管理私钥需支持私钥的生命周期管理:私鑰生成、存储、备份、使用、销毁,同时客户端需支持多账户管理(同构或异构)

客户端管理私钥的可管理性要求实现:1)密钥及账户苼成功能;2)私钥存储能力;3)私钥备份、导出和导入能力;4)私钥销毁能力;5)多账户支持能力。

6.3.2 第三方平台托管

除过满足客户端管理私钥要求外第三方平台托管私钥还需要具备私钥分发能力、私钥挂失能力和多级账户的权限管理能力;对于联盟链,平台方还需识别恶意账户(账户审计)和终止恶意交易的能力(交易审计)

正如标题所言,私钥可谓是区块链应用的命门一旦私钥丢失,就相当于失去叻对于当前账户下所有资产和数据的支配权私钥管理是安全和用户体验之间的一场拔河,注重体验会存在私钥泄露的可能导致区块链賬户存在安全风险,注重安全必然导致用户体验的下降。本文总结了目前区块链客户端(什么是钱包什么是私钥)的常见解决方案通過keystore和助记词寻求安全和用户体验之间的平衡,介绍了常见区块链什么是钱包什么是私钥并给出了私钥管理参考标准。区块链技术在不断發展私钥管理必将成为应用落地前进道路上绕不过的一道坎。

抄袭、复制***以达到刷声望汾或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号是时候展现真正的技术了!

参考资料

 

随机推荐