一种无需密码的开放协议登录方式

2020-10-09 01:12:54 +08:00
 weitch
互联网上到处需要密码,为了方便记忆人们喜欢用同一个密码,一个网站被黑客攻破后你的密码就泄露,其他网站也关联被攻破造成更多隐私泄露。

后来出现了 OAuth 登录方式,但这种方式是一种中心化的登录方式,中心平台决定了用户信息的提供,比如微信决定给开发者提供什么样的权限,而且随时可以以各种借口屏蔽、限制开发者或用户的账号,从而造成服务的中断。
这就使得用了 OAuth 登录的网站或 APP 为了双层保障又让用户重新填写提供邮箱、手机和密码。


于是,我在思考,有没有一个更好的方式来解决这个问题。


受到比特币去中心化方式的启发,我们都知道比特币最重要的是它的开放协议,不同的客户端有不同的实现方式,但它们都遵守同一协议,它们就可以实现通信。
所以,我就在想,我们是否能实现一个这样的标准化登录协议,接入协议的无论是网站、开发者、用户,就能实现统一的登录方式,因为是开放的协议,所以就不再受制于任何一个平台。


具体实现:
1,用户要登录网站时,网站生成一个登录码(其实是一个 api 接口),任何实现了登录协议的客户端收到接口后都可以向接口发送加密数据(包括登录、授权信息读取、退出、永久注销等等功能)。
2,本地客户端收到登录码后从本地选择一个账户或生成一个新的账户私钥,通过一定的方式生成加密数据发送给网站,网站收到数据后解析出公钥、登录有效时间等信息完成登录。
3,各个网站的登录私钥、以统一的格式保存在本地客户端。
4,用户可以随时加密导出私钥数据包,导入到其他客户端。
---------------------------------------------------------------------------------

整个登录过程,用户不再需要提供密码,各个网站的登录信息,用户自行保管。


我们唯一需要留意的是客户端的安全,通过社区开源、社区鉴别等方式能让用户自由选择一个安全可信赖的客户端。
而且,因为是去中心化的,即使某个用户的终端被黑客攻破,不会对其他用户产生影响,不会出现大面积的数据泄露的情况。
5395 次点击
所在节点    奇思妙想
42 条回复
sean10
2020-10-09 01:19:12 +08:00
基本上就是,把我们去密码管理器里输入主密码,找到网站的用户名密码,再填到网站的过程,这部分由一个客户端自动生成保存密钥,并这个客户端有和各服务网站对接,或者反过来,服务网站提供这个渠道登录。

但是这个就引申出一个问题,如果保障用户使用不同设备时登录相同的账号,这就意味着需要一个同步盘来同步这个客户端对接的数据库。

从上面这个角度来说,我感觉苹果的生态最容易无缝迁移的实现这个标准和功能
vk42
2020-10-09 01:27:57 +08:00
这不就是类似把 SSH 密码转成 SSH key 验证么。对一般用户来说 key 的管理方便程度并不会更低,要么就是像#1 说的依赖某个生态比较完全的厂商,这反而更加中心化了吧……
yyfearth
2020-10-09 01:30:25 +08:00
其实没必要那么麻烦
其实就算是 1Password 或者 lastpass 这种也可以做到去中心化
因为他们无非就是把用户的所有数据加密存在自己的数据中心
那么把整个数据中心存储变成 ipfs 类似的去中心化的存储方案不就解决了
只要客户端连接到这个中心化的存储 加上账号+主密钥+主密码 来解开就好了
只要“账号+主密钥+主密码”不泄漏 那么就算你的加密数据是公开的 也没有关系啊
反过来如果“账号+主密钥+主密码”泄漏 不管数据是公开的还是私密的 中心化的还是去中心化的 都没救了啊
yyfearth
2020-10-09 01:31:03 +08:00
只要客户端连接到这个去中心化的存储 加上账号+主密钥+主密码 来解开就好了
netlous
2020-10-09 01:46:57 +08:00
如果去中心化是为了安全的话,那这个反而更不安全,51%攻击或者局部的 51%攻击可预见是一定会发生的
weitch
2020-10-09 01:48:42 +08:00
@sean10 #1
同步的确是一个问题,但并不是太大的问题。
我们可以手动生成数据包,导入到其他设备即可。当然我们也可以借助社区服务器传输数据包,因为数据包是加密的,也不用担心中间服务器读取你的信息。
weitch
2020-10-09 02:12:14 +08:00
@yyfearth #3
重点并不在于去中心,而是把整个系统变成一种协议,类似于 TCP/IP,只要遵守协议任何开发者都可以开发出他们合适的客户端,而且数据通用,不依赖于任何第三方。

我具体没用过 1password,但我想它只是一个产品而不是协议,这样你就无法得知产品背后的人会不会作恶偷偷保存你的密码信息,而且你不能把它的数据倒入到其他同类型的客户端。
fengchang
2020-10-09 02:58:43 +08:00
weitch
2020-10-09 03:54:07 +08:00
@fengchang #8
看来我是孤陋寡闻了,我大概查了一下 fido 的介绍,觉得他们那一套都是做了底层的身份认证,是不是有些过于复杂了,估计也就只有大厂们会去对接。
yyfearth
2020-10-09 04:02:24 +08:00
@weitch 这个在消费者产品中很多大厂都在开始做了
而且很多企业内部基本上都在用 2FA 所以 FIDO 这种还是很有应用前景的
fengchang
2020-10-09 04:27:06 +08:00
@weitch 很正常…你可以基于 FIDO 的协议写你设想的那个本地客户端,但是没有硬件加密谁敢用
lizheming
2020-10-09 04:47:01 +08:00
WebAuthn 就是无密码协议,已经进入 W3C 规范了,楼上说的 fido 有实现。直接使用硬件设备存储凭证😅 除了硬件设备之外,还支持指纹形式 https://mp.weixin.qq.com/s/tLIzR6BXiSBFVrG6oP3cEg
基于它我们在自己的网站上已经实现无密码登录 https://ppt.baomitu.com 但是目前它的兼容性不是很好,而且硬件设备比较难买到,所以用的人很少🌚
cmdOptionKana
2020-10-09 04:47:31 +08:00
想开小号怎么办?手机或电脑等丢失或被盗怎么办?登录密码与支付密码等权限等级不同的情况怎么办?
cmdOptionKana
2020-10-09 04:49:20 +08:00
需要临时借用别人的设备登录自己账号时怎么办?
yyfearth
2020-10-09 05:34:49 +08:00
@cmdOptionKana 这些都是可以解决的
首先网站肯定任然会提供密码登陆的方式 也可以使用扫码登陆的方式

用 fido 的话 也是可以的
fido 硬件设备不一定是用来打开应用或者网站的设备
说白了 fido 硬件就只是一个有线或蓝牙(可以支持 NFC)的键盘 用来动态生成和输入密码
你用别人的设备 只要插上或者配对上你的 fido 硬件 任然可以正常使用
比如在公司或者图书馆用公共 PC
只要你用 fido 设备插入 USB 或者 NFC 蓝牙配对 就可以登陆了
这样也就解决了多用户或者小号的情况

对于 fido 设备被盗丢失 很简单 你任然可以用其他途径 就像忘记密码一样 来禁用被盗或者都是的 fido 设备
shynome
2020-10-09 05:46:02 +08:00
通过 pgp 密钥认证的尝试: https://github.com/browser-pgp/browser-pgp
因为我对 pgp 还不熟悉所以没做宣传,想法和这个蛮像的
340244120w
2020-10-09 06:37:41 +08:00
我敲 这不是银行 u 盾咩
gps949
2020-10-09 07:53:04 +08:00
ca 行业表示总感觉自己做的内容也没啥新意千篇一律很老套,为什么还总有客户需要我们给他们设计呢?听到 fido 、ifaa 之类的感觉和一直在搞的没太多区别,只是方案级的整合而已,听到零信任感觉也只是个概念也没提出什么新技术啊,为什么客户会对这些兴趣昂然呢?

搞久点才知道,原来是因为这个圈子比较封闭,圈外人听这些就会觉得很新鲜,殊不知一些新名词对应的技术早用了二三十年
singerll
2020-10-09 08:21:32 +08:00
@gps949 #18 说得对,这个就是 ca 的证书认证的一小部分。。。。
lvybupt
2020-10-09 08:58:04 +08:00
基于 password 的认证和密钥协商 本身才是很小的一部分,计算机或者信息系统里大部分认证登录密钥协商密钥分发本身就不用 password 的。

自己系统里存的私钥证书临时会话密钥等等本身就可以随便导出。

至于服务器端,自我阉割中心的问题本身就不是个技术问题。
我为啥要要在我提供的服务里去掉我自己的中心呢???我又不靠去中心化融资骗钱。

密码学研究了认证和密钥协商几十年,依然认为基于口令的加密不够安全,但行业根本抛弃不了,还不是因为它便捷易用。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/713159

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX