GREATWALLET钱包如何保护用户的私钥安全
自从有了加密货币,就有了“存放”币的钱包,然而实际上,币真的不在你的钱包里,币在区块链上。钱包里只保存了你的私钥,钱包通过私钥算出公钥或地址,然后据此到区块链上查询出你的余额显示出来,所以只是看似币在你的钱包里。私钥是你消费你的币的唯一凭证,丢了它,你自己无法消费,别人也用不了,币就成了“死”币;同样,如果别人窃取了你的私钥,他就能消费掉属于你的币。所以,保护好自己的私钥非常重要。
GREATWALLET钱包分两种情况保护你的私钥。一是导入阶段,当你按私钥导入钱包时(按助记词导入时,钱包会生成正确的私钥),输入私钥的同时还要设置一个长度不小于8位的高强度密码,GREATWALLET会用这个密码加密你的私钥,生成Keystore格式的字符串保存在cookie里(GREATWALLET是浏览器钱包,只能保存在cookie里)。一个经过加密处理的私钥看起来如下:
以太坊的官方钱包就是用上面这种格式保存用户私钥的。EOS官方钱包保存私钥的数据格式更加简单:
无论哪种格式,其中都包含了你的私钥。只要你设置的密码不是特别简单,比如全部是数字、字符这种简单的字符组合,在现有的算力下,通过暴力破解要用N年才能解开。所以,GREATWALLET经过这样加密处理,安全地把你的密码保护起来。下图是GREATWALLET保存的私钥实例:
而有的钱包APP只是对私钥(或助记词)经过简单的对称加密,把密文保存在本地,让用户的私钥暴露在危险之中。
其二是交易签名阶段。钱包的另一功能是做各种交易,比如转账、购买内存、注册新账号等等。每一笔交易都需要用你的私钥签名,BP节点或矿工收到一笔交易要验证你的签名,从而确定交易是你发出的,无效的签名不会被承认,交易也就不会写到区块链上。做交易的时候,钱包一定会让你输入密码,这个密码就是导入钱包时你设置的那个密码。钱包用这个密码解开Keystore里面的私钥,从而完成签名。如果你输错了密码或者别人冒充你,错误的密码无法解出私钥,交易就无法进行。如果某个钱包做交易的时候没让你输入密码,你要小心了,它在没有你密码的情况下取得私钥,这种钱包是不安全的。你可以故意输入个错误密码试一试。(如果你真的忘了这个密码怎么办,很简单,删除当前账户或地址,重新导入一次)
GREATWALLET钱包的签名过程在本地进行,就是在你的浏览器里进行,你的私钥不会被上传到网络,它从来没有离开过你的电脑(而且是加密过的),做完签名后,私钥明文会从内存里清除,这进一步保护你的私钥安全。经过签名的一笔EOS交易大致如下(BTC、ETH交易类似):
其中的蓝色部分就是签名。这样的交易数据包在区块链浏览器上随处可见,别人只能查看,无法修改。一方面,修改任何一个字节,签名就无效;另一方面,别人没有你的私钥,也无法再造出一个伪装成你的签名。
这里有一个漏洞是,如果黑客控制了你的电脑,他就有可能在你做交易解开私钥的时候窃取到它。对于这个问题,App类型的钱包也面临同样的风险。如果黑客程序侵入到了你的手机里,APP钱包也同样是不安全的。所以,你要确保自己的钱包运行环境是安全的。在运行环境安全的前提下,个人认为,浏览器钱包更可信。因为APP钱包对大多数用户来说就是一个黑盒子,它里面做了什么,不反编译出代码无从知晓。而浏览器钱包的代码都是用Javascript写成,无须反编译就可以看到,开发者根本没有机会做手脚。
欢迎使用GREATWALLET钱包,访问http://greatwallet.io 或者 https://greatwallet.io.目前它对手机浏览器支持得还不够好,请使用桌面浏览器。
关于GREATWALLET钱包,这里有一篇简单的介绍。