[原创]我对PRESSone登录验证机制的理解,欢迎指正&探讨



  • 我们知道,在PRESSone的web端创建账号时,有2种方式由你选择:

    1、默认在服务器上加密保存私钥,你仅需输入邮箱地址和密码即可创建账号

    托管keystore

    2、你可以勾选自己保管你的keystore文件,则仅需输入密码即可创建账号

    自己保管keystore文件

    从创建账号页面,我们获知2个关键信息:

    • 密码用于加密你的个人私钥
    • PRESSone无法提供密码找回功能,所以你务必需要牢记密码

    那么,对区块链技术稍有些好奇心的人就会问:

    • 为什么PRESSone要把密码设定成不可找回、不可更改的?
    • 如何验证PRESSone服务器是否保管用户的密码?
    • PRESSone的登录验证是如何实现的?

    我是这样理解的。下面开始分享我的推测。

    用户在PRESSone网络创建账号的过程,就是采用密码学生成一对密钥的过程。这对密钥,一个是你的公钥,另外一个则是你的私钥。公钥可以公开,你可以把它理解成你家的门牌号地址,方便别人通过PRS网络给你“转账”或“访问”你的主页。私钥就像你家的钥匙,有了它连你家的保险箱都能随便开,所以务必要保管好,不可泄漏给他人;更需慎重的是,这把钥匙在区块链网络中是不可以重新拷贝一把的,被你弄丢就不可挽回。

    哪里可以看到自己的公钥呢?

    比如我的个人主页地址是:

    https://press.one/main/p/ed73e900e209def08ff03a2e3fadbac99af087c0

    由我签名发布的内容,验证签名信息时可以看到:

    查看签名2

    上面有一个共同的字符串,即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那种手机号+验证码的方式登入呢?那种方式是非常便捷的,安全性如何呢?

    真是个好问题啊。我们就一起来探讨下吧。