用户保存私钥实现

在地址管理工具模块,已经提到用户保存私钥的雏形。那为什么需要用户自己保存私钥呢?私钥是账户的钥匙,你的xxx账户,不也有密码这把钥匙吗?这把钥匙也是用户自己保存呀。

不过,传统Web2的钥匙和区块链的钥匙有一个非常重要的区别。传统Web2的钥匙不止是用户持有,平台也持有的,平台会拿用户的这把钥匙去数据库查找对比,判断钥匙的一致性,只有钥匙一致,用户才能打开钥匙对应的房间。而区块链的钥匙于用户是完全独立自主的,平台也完全不知道钥匙是什么,用户拿着钥匙直接访问区块链资产。而且,平台没有钥匙,也无法访问用户的链上资产。

这也是为什么区块链中会更加强调用户保存私钥的重要性。在公链环境下,都是用户自己保存私钥的。不过在钱包环境下,钱包平台也可能托管用户私钥。国内的联盟链环境下,用户私钥大多数是平台托管的,甚至平台把私钥封装到对用户不可见不可知。

正因为如此,这里才重点提出联盟链环境下怎么实现用户保存私钥。我觉得,用户保存私钥是区块链的基本。

要实现用户保存私钥,必须实现地址管理工具。在地址管理工具中,实现区块链密钥对生成和私钥签名。当然,高级一些,也可以把这个地址管理工具升级为钱包,但是钱包的程序应该开源或支持离线。

实现用户自己保存私钥,在地址管理工具中,生成密钥对,复制公钥,到平台导入区块链账户,平台将持有区块链账户的公钥和地址,但是没有私钥。针对这类区块链账户发起的交易,签名过程需要私钥,这时候平台返回待签名的字符串给用户,用户复制这个字符串到地址管理工具,再复制自己的私钥到地址管理工具,生成签名,再复制签名到平台提交,这样就完成交易了。整个过程中,用户都是自己持有着私钥,平台不经手私钥。这样,不就实现了真正意义上的用户保存私钥吗?

在实现用户保存私钥的过程中,最重要的是保证涉及私钥的操作环节开源透明或支持离线操作,不然平台都有可能偷偷保存私钥。

不过,最终还是要看用户需求,普遍来看,平台都应该实现平台托管私钥和用户保管私钥两种,以方便不同的用户群体使用。