我们知道,在PRESSone的web端创建账号时,有2种方式由你选择:
1、默认在服务器上加密保存私钥,你仅需输入邮箱地址和密码即可创建账号
微信图片_20181028214544.png
2、你可以勾选自己保管你的keystore文件,则仅需输入密码即可创建账号
微信图片_20181028214604.png
从创建账号页面,我们获知2个关键信息:
- 密码用于加密你的个人私钥
- PRESSone无法提供密码找回功能,所以你务必需要牢记密码
那么,对区块链技术稍有些好奇心的人就会问:
- 为什么PRESSone要把密码设定成不可找回、不可更改的?
- 如何验证PRESSone服务器是否保管用户的密码?
- PRESSone的登录验证是如何实现的?
我是这样理解的。下面开始分享我的推测。顺便说,这已经是第二个版本了,准确率在90%以上;前几天发布的第一个版本则疏漏较多。如果未来我需要更正本文信息,我会继续在自己的PRS主页上发布。欢迎订阅我。
用户在PRESSone网络创建账号的过程,就是采用密码学生成一对密钥的过程。这对密钥,一个是你的公钥,另外一个则是你的私钥。公钥可以公开,你可以把它理解成你家的门牌号地址,方便别人通过PRS网络给你“转账”或“访问”你的主页。私钥就像你家的钥匙,有了它连你家的保险箱都能随便开,所以务必要保管好,不可泄漏给他人;更需慎重的是,这把钥匙在区块链网络中是不可以重新拷贝一把的,被你弄丢就不可挽回。
哪里可以看到自己的公钥呢?
比如我的个人主页地址是:
https://press.one/main/p/ed73e900e209def08ff03a2e3fadbac99af087c0
由我签名发布的内容,验证签名信息时可以看到:
微信图片_20181017145109.png
上面有一个共同的字符串,即ed73e900e209def08ff03a2e3fadbac99af087c0体现的就是我(行动的女巨人这个账号)的公钥的一部分。虽然只是我公钥的一部分,但已经能唯一标识出我啦。
哪里可以看到自己的私钥呢?
你的私钥在创建账号时,通过你输入的密码加密后就成为keystore文件,这个keystore文件也只能通过你的密码来解密。每次登录验证就是通过你输入的密码来尝试解密keystore文件的过程,解密成功则登录验证通过,解密失败则无法通过登录验证。
基于此,我说明一下2种方式下的登录验证:
1、默认选择在服务器上加密保存私钥,你仅需输入邮箱地址和密码即可登录账号
用户每次登录输入邮箱地址和密码后,发生了什么呢?首先,根据邮箱地址向服务器获取并下载该邮箱地址对应的keystore文件到客户端,然后客户端根据你提供的密码来尝试解密该keystore文件,解密通过,则bingo你就能登入啦。
2、你选择自己保管keystore文件,则需要选择keystore文件上传并输入密码即可登录账号
用户每次登录,选择提交你的keystrore文件和密码后,客户端根据你的密码来尝试解密你的这份keystore文件,解密通过,则你就能登入。
你看,在上述两种方式中,登陆验证时在客户端本地就能验证身份的。完全不需要服务端来保管密码。
那么服务端会保管你的公钥吗?也不用。因为通过你的私钥,能够计算得出你的公钥。反之,通过公钥无法逆推算出你的私钥。所以,登录验证就是客户端的活儿,无需服务端保管你的密码,公钥或私钥之类的来比对。
在古典互联网中,所谓的登录验证是怎么回事呢?服务器会保存你的账号和密码,你在登录时输入账号和密码,由客户端提交给服务端,服务端比较一下对不对,然后告诉客户端。验证通过,就可以登入了。
我们所使用的99.9%以上的古典互联网服务,都是把密码保存在服务器的,而且在移动支付这么发达的年代,很多账号还存放着你重要的财富或者隐私呢!某些古典互联网的项目,由于工程师操作不慎,不小心把数据库账号和密码提交到github上,比如某酒店集团“脱裤”导致用户账号和密码和开放信息大面积泄露,就是该方案带来的风险。
那么,比较审慎的同学可能就要问了,既然PRESSone说自己没有保存用户的密码,我怎么相信它真的没有保存呢?
PRESSone的代码未来会开源,到时候懂代码的人自然可以去检查代码逻辑是怎么写的,那时候就可以验证。
如果你非要一个短期的验证,那么只能从情理上来理解。其一,既然你使用的99.9%以上的古典互联网服务,都保管了你的密码,你是否应该把你的担心面放大到自己所用的所有这些服务呢?其二,采用区块链技术的解决方案,无论是功能实现还是用户体验,在当前阶段都不如古典互联网那么简便,PRESSone为什么要选择真正的区块链技术的解决方案呢?密码不被存储,把密钥的管理权限交给用户自己,没有任何中心化的数据库或人物来染指你的财产安全。
让用户自行保管密码以此来保证密钥只有你一人可知,确实牺牲了“修改密码、找回密码”的可能性。而自从web端发布以来,社区用户已反馈多例未能妥善保管密码带来的问题。在安全和便捷这个天平上,我们总归是要做出一些选择或者权衡。
熟悉mixin的人可能就要问了,为什么PRESSone不考虑一下MIXIN那种手机号+验证码的方式登入呢?那种方式是非常便捷的,安全性如何呢?
真是个好问题啊。我们下回就一起来探讨下吧。