加密数字货币钱包必要知识
我们装纸币和银行卡的钱包,钱包和钱是两码事。钱是核心,钱包是工具。钱可以装在各种钱包里。钱的形式可以是纸币、银行储蓄卡和信用卡,也可以是存折、汇票等。
加密数字货币的钱包和币也一样,钱包软件和币是两码事。币是核心,钱包软件是工具。币可以装进各种钱包软件里。币的形式一般有私钥、助记词和私钥文件。
私钥和助记词就是一串字符,可以抄写在纸上,可以导入到各种钱包软件。私钥文件是一种数据,里面保存着私钥,可以拷贝到U盘或邮箱等。常见的私钥文件有dat文件和keystore文件,也可以导入到多种钱包软件。
一、钱包分类——按终端分
终端就是指手机、电脑、网页这些,可以将钱包分成如下5类。
移动端钱包。
即安装在智能手机上的钱包。
最大的优点就是便携,可以使用我们最常用的扫码支付的方式来支付和接收币。最大的缺点是经常需要更新。
移动端钱包是钱包软件可以装的币,币往往是以私钥或助记词保存。也有少量移动端钱包是能装币的私钥文件。
因为手机操作系统都有沙盒设计,跨应用访问数据很难,所以手机钱包是非常安全的。
现在几乎人人都有手机,几乎所有的钱包供应商都会提供移动端钱包。但因为国家一些政策,很多应用市场都不提供钱包下载。需要海外的GooglePlay和appleiD账号,或者直接到钱包官网下载安装包。
桌面端钱包。
即安装在windows,Mac,Linux等操作系统上的钱包。
最大的优点是桌面钱包提供的功能最完整。最大的缺点是复杂。
桌面端钱包软件能装的币,币的形式可以是私钥、助记词和私钥文件等存在。
操作系统现在也是非常安全了,桌面钱包也是很安全的。但比手机钱包相比,桌面钱包会有更多的安全性问题,受病毒、软件后门、木马、钓鱼软件这些影响更多。
桌面钱包的下载需要找到钱包官网去下载,一般来说没有区域限制,不会像手机钱包那样有中国区和国外区。但因为有国家防火墙的存在,很多钱包网站被墙了,需要梯子才能访问。
网页钱包。
即使用浏览器,通过网址就能访问。
最大的优点是方便,不需要安装软件就可以使用,而且非常方便在各种终端使用相同的钱包。最大的缺点是安全性相对来说是较弱的。
网页钱包软件能装的币,更多的是助记词和私钥文件。使用网页钱包后,要特别注意不要随意清空浏览器的缓存文件,你清空后你的币就被删除了,一定要在备份后才能清除。
网页钱包有很多特定的场景,比如一个游戏网站内置一个钱包,一个写作社交平台内置一个钱包。
网页钱包受钓鱼软件、后门、病毒这些影响更大,使用时最好使用一台特定的电脑,不要随便安装其他软件。
网页钱包的获取是最容易的,记住网址就好,但也会有墙的影响,很多著名的钱包需要梯子才能访问。
网页插件钱包。
即在浏览器上以插件形式存在的钱包。
插件钱包最大的优点是方便网站端的应用调用,各种网页端的Dapp往往会设计成和插件钱包交互。最大的缺点是安全性相对较弱。
插件钱包能装的币往往是助记词的形式。
插件钱包的安装一般可以通过浏览器插件应用市场搜索获得。但浏览器的插件管理和应用市场管理app相比是混乱很多。要特别注意来源,一定要从多个维度去验证你的插件下载来源。比如从官网、github、和插件应用市场去验证该插件。
硬件钱包。
即使用专门的硬件来管理币。
硬件钱包最大的优点是安全,最大的缺点是使用不方便。
硬件钱包可装的币,币的形式一般是助记词和钱包文件。
硬件钱包的安全性主要是其很难被病毒、软件后门、木马这些威胁。硬件钱包的安全性威胁主要来自厂家。因为验证硬件的安全性难度很高,这不像验证软件钱包,只要开源其他人就可以验证。所以一定要找靠谱的硬件厂家。
硬件钱包的使用远不如软件钱包那么方便。硬件钱包往往需要在手机或电脑端装一个软件钱包来配合使用。硬件钱包很难用于被各种Dapp使用。
硬件钱包的获取就是找商家买了,另外还要从厂家的官网下载软件来配合使用。
二、钱包分类——按软件特性来分
我们用来装纸币和银行的钱包可以按功能来分,比如多功能性,即可装纸还可装卡,还能装硬币;轻便型,简单到就一个夹子;防盗钱包型,带密码锁……
加密数字货币钱包也可以按软件提供的功能和特性来分成多种类型。
完整节点钱包
任何一个区块链产品都会有完整节点,这个软件定义了区块链的所有规则,包括共识机制,交易格式,区块格式等等。完整节点也包括了钱包功能,可以用来存币和发币。
完整节点会下载所有的历史交易数据,这对BTC、ETH、BCH这些链来说数据量是非常大的,都已经是几百G了。这些交易数据就是保存了全网所有账户的余额,相当于银行保存了所有用户的账户。
完整节点是可以完全验证所有的交易,可以确保钱包是处在区块链的最长链上,也可以识别硬分叉。用完整节点当钱包收发币是不会被骗。只要是完整节点验证过的币,就是真币。
运行完整节点是非常麻烦的事,是需要一台很好的电脑。手机干不了。
完整节点一般从一个币的“官网”下载。
普通用户一般不会,也不需要使用完整节点来当钱包。
SPV钱包。
SPV(Simplified Payment Verification)是在比特币白皮书里定义过的,叫简单支付验证。和简单支付验证对应的技术就是完整节点的交易验证。用户一般来说是不需要完全搞明白支付验证和交易验证的细节。
简单来说,交易验证是完整节点里定义好的验证币合法性的规则。支付验证是验证某个交易是否已经被完整节点验证过了的规则。
使用简单支付验证来实现管理币的钱包就叫SPV钱包。
SPV钱包不需要下载区块,只需要下载区块头。所以对硬件的要求很小,一般一个手机就能处理。
SPV钱包的支付验证也很安全,但安全性要次于完整节点,因为其要随机咨询其他完整节点来询问是否将交易纳入区块中。但币圈公认的是,SPV也是足够安全的。
SPV钱包主要是BTC、BCH这一类币会采用,像ETH和EOS这些币都不会采用这个技术。
对于保存和使用BTC、BCH来说,用户不需要使用完整节点钱包,采用SPV钱包就可以保证安全了。但SPV钱包现在的用户量其实也非常非常少。可能主要是因为SPV钱包很难商业化。
轻钱包
SPV钱包和轻钱包这两个概念经常容易搞混,业内其实也没有严格的定义,但我们最好能分辨清楚,因为这两者的安全机制是不一样的。
SPV钱包对币合法性验证采用的是简单支付验证,简单支付验证是一种定义在链上的规则。SPV钱包是随机访问完整节点来完成简单支付验证。很难使用特点的完整节点来欺骗SPV钱包。
轻钱包对币合法性验证是委托特定的完整节点来完成验证,轻钱包相当于特定完整节点的客户端,而该完整节点则是服务器。这就在理论上存在该完整节点欺骗轻钱包的可能性。
轻钱包不需要下载区块数据,只需要保存和用户交易相关的交易。SPV钱包需要下载所有区块头,以及保存和用户交易相关的交易。
SPV钱包是可以自己构造交易,并广播交易。轻钱包可以自己构造交易,但需要借助对应的完整节点来完成广播。
轻钱包的用户体验会比SPV钱包好。
SPV钱包一般会开源,这往往不是商业化的。而轻钱包往往是不开源的,往往是商业公司开发的。
一般来说,商业公司开发的钱包都会采用轻钱包模式,存在服务器,以优化用户体验。轻钱包是现在用户用的最多的Onchain钱包。
offchain钱包
完整节点钱包、SPV钱包和轻钱包,都是用户自己保管私钥。私钥丢了或密码忘了,谁也帮不了你。都不存在公司跑路偷走币的问题。统称为OnChain钱包,中文叫链上钱包。
对应的,存在offchain钱包,中文叫链外钱包。
offchain钱包的私钥不是由用户自己保管的,而是由公司代理持有。本质上offchain钱包里的币是用户在钱包公司里的一种记账单位,或叫存款。公司要是跑路,用户的币就没了。
交易所是最主流的offchain钱包商,这也是目前存币量最大的钱包了。
offchain钱包的优势是对用户来说很友好,用户不需要学习如何保管私钥之类的,哪怕是密码忘了,也可以找钱包公司凭实名信息恢复。
offchain钱包商还可以提供非常丰富的功能,比如理财,交易这些。链上钱包是不可能有这些功能的。
offchain钱包的缺点是公司存在跑路的风险,一定要找靠谱的offchain钱包商。
三、钱包的主要功能
我们用来装人民币和银行卡的钱包会提供很多功能,比如防水,装饰,密码锁,甚至有的钱包可以验钞。
加密数字货币钱包也一样会提供各种功能。
用户是否控制私钥
币最重要的就是私钥,这是币所有权的证明。选择加密数字货币钱包首先就是要看是否提供用户控制私钥的功能。
Onchain钱包是由用户控制私钥的,offchain钱包则是将私钥托管给钱包商。
钱包使用哪种技术来验证币合法性
币的合法性验证方法一般会有两种,一种是交易验证,这是最严格和最完整的验证方法。另一种是简单支付验证(SPV验证)。
一般钱包采用的验证方法却可以分三类。
一是钱包带交易验证,这是完整节点钱包才能做的事。
二是简单支付验证,这是SPV钱包的功能,SPV钱包会随机委托完整节点来验证交易是否被纳入区块中。
三是委托第三方节点来验证,offchain钱包和轻钱包都是委托服务器来完成币的合法性验证。
是否能保存多币种
是否提供多重签名
是否提供矿工费调节
有些钱包是默认固定某个矿工费的,而有些钱包会智能化地估算现在的网络拥堵程序,并提供一个推荐矿工费值,还有些钱包会让用户自己选择多少矿工费。
有些钱包甚至还提供追加矿工费的功能,比如比特币的RBF,以太坊的交易覆盖。
是否提供隐私保护
有些钱包会默认让用户使用不同的地址来收发币,以提高隐私性。甚至有的还提供混币功能,以保证用户的币难于追踪。
但绝大多数钱包为了用户方便,没有默认使用同一地址,特别是对新用户来说,老换地址会担心。
币是否可移植
对于绝大多数用户自己保管私钥的钱包来说,是可以任意切换硬件的。比如用户可以在PC端装一个钱包,在手机端装一个钱包,但使用同一个助记词来管理币。
绝大多数Onchain钱包也是可以任何切换到其他Onchain钱包的,私钥是通用的,可以导入到各种onchain钱包里。
对于offchain钱包来说,换硬件就更简单了,只需要你重新登录一下账户就可以。这和支付宝可以任何换手机是一个道理。
但有些用户自己管私钥的钱包,钱包商设计的私钥不是通用的,就不能换钱包了,用户要想换,保能把币转发到其他钱包。钱包商要是倒闭了,这种钱包会很麻烦。
是否私钥离线,即冷存储
私钥离线存储,即私钥从来不接触互联网,无论是不是处在加密状态。有些钱包是直接显性提供这样的功能。
有些钱包其实是可以让私钥离线,比如完整节点钱包安装在一台不需要联网的电脑上,SPV钱包也可以安装在不联网的电脑上,在不联网的电脑上签名,然后把签名结果拿到联网的电脑上广播。
其他功能
上面只是对于加密数字货币钱包最主流的几项功能。事实上,钱包可以有无穷的创新,比如支持闪电网络,支持某个Dapp,支持理财,支持交易,甚至可以加上社交功能……
四、钱包的使用场景
高频小额使用
如果你使用Dapp,比如链游,去中心化交易所,这些场景对币的发送和接收是非常高频的。这些场景,对安全性要求是不能做太高的要求,只能牺牲安全保证用户体验。
对于比特币这一类用来当日常支付,比如做OTC,上网买东西,等场景,也是不太可能使用高安全标准来保存币的。
高频场景,主要考虑省矿工费,方便使用,隐私保护,安全性是相对次要的。
正因为安全性不能要求太高,所以也特别注意限制金额,最好还定期更换助记词。
大额存储
安全第一。注意保护隐私。
一般来说,应该采取让私钥离线。应分多个私钥或助记词保存,以免单个金额太大。
为了保护隐私,最好分次小额,甚至是多个交易所提现到钱包,这样免于被别人追踪。
日常炒币
如果短期需要频繁交易,就把币存交易所。
小白存币
对于小白来说,无论金额多少,最好把币存在实名制的交易所里。等学会了更多的区块链知识再自己保管私钥。
五、下载钱包的流程
下载和使用某个币的钱包一个比较安全的流程是这样的:
第一步找到这个币的"官网",比如BTC就上bitcoin.org
第二步在“官网”上找到推荐的钱包链接。
第三步到搜索引擎搜索这个钱包的名字,用来验证第二步的链接。如果是手机APP,还要在googleplay或appstore搜索验证一下。
第四步下载并安装。对于手机app,安卓可能需要googleplay,或者直接下载APK文件,对于苹果,得有海外的appleid,才可以在appstore里下载。googleplay和海外appleid其实都很容易搞的到,到百度搜索一下就知道怎么做了。
第五步备份钱包私钥或助记词之类的。
第六步往钱包里转少量的币,比如100块钱的。然后等一周,让别人去偷好了。
第七步一周后没人偷你的币,那钱包就可以正式使用啦。
六、安全使用钱包的要点
币圈的钱包安全隐患主要来自四方面。
一是用户自己算了密码,丢了手机。或者电脑被植入了木马,币被偷了。
二是offchain钱包商跑路。
三是下载到恶意钱包,比如被钓鱼网站引导下载被植入了木马的钱包。
四是钱包出了bug,可能会搞丢币。
安全选择钱包我觉得至少应该做到以下几个方面
选择市面上存活了超过一年的钱包。
钱包至少是在币的“官网”有推荐,通过官网的推荐链接去下载。
如果你还是小白,优先使用交易所来存币。
通过多个渠道,比如至少使用两个搜索引擎,和一个朋友推荐的方式来获取钱包的下载链接。只有三个渠道得到的下载链接是一样的,才去下地。这样可以避免被钓鱼。
如果是在appstore和googleplay下载钱包app,同样需要至少通过三个渠道来核对app名字。比如使用网页搜索一次,appstore搜索一次,从钱包官网的下载二维码核对一次。
使用钱包遵守一些原则会大大提高安全性。
一定要备份助记词,wallet.dat,keystore文件等等,这些是私钥的不同形式。千万不要偷懒,拿纸和笔抄下来,dat文件和keystore文件拿专用的U盘备份一次。
一个助记词一个终端。比如你在手机上有一个钱包,在电脑上又安装了一个钱包,这两者最好不要共用同一个助记词。除非你用的是硬件钱包管理的私钥。如果你要把币迁移到另外的终端,请新生成一个助记词,将币发过去。
新钱包,先存少量的币,比如几百块钱的币,密码都不要设置。如果一周后没人偷的话,再正式用来存币。
一个币种尽可能使用一个助记词。现在虽然有多币种钱包,可以让你一个助记词管理多个币,但最好别这样做,分开来装,麻烦一点,值得。除非你的多币种钱包只是用来装各种币的小额零钱。
七、常见钱包下载地址
BTC钱包:https://bitcoin.org/en/choose-your-wallet?step=5
ETH钱包:https://ethereum.org/wallets/
BCH钱包:https://www.bitcoincash.org/wallets.html