11月初,ESP发布了新的wishlist,其中有一个是关于did的,大概是想实现没有私钥的身份体系。为什么现在以太坊又把did重视了起来,以及我们应该把did做成什么样子?下面就是我关于这些问题的见解。
一、为什么
我的答案有两个,其中一个可能大家都知道,那就是方便使用。众所周知,现在的去中心化钱包主要使用的是12个助记词。对于web3一点点都不了解的用户来说,别说12个助记词了,连12位字符密码都能忘记,使用web3的门槛会很高,而无私钥化的did就会大大降低他们的使用门槛。
另一个原因是量子计算。量子计算的发展对于密码学来说是一次巨大的冲击。最近Vitalik发文表示,随着量子计算的发展,在2028年以前椭圆加密可能会被破解。如果椭圆加密不可靠的话,那么现在的密钥体系就会崩塌。所以我们必须给出一种新的身份体系来应对量子计算的冲击。
二、怎么样
ESP在wishlist里是这样写的:
… Passkeys offer a simple, secure, and familiar way to authenticate using fingerprints, facial recognition, or device-stored credentials while preserving self-custody.
We would like to explore how passkey authentication can be implemented natively in smart accounts such as those based on ERC-4337 and ERC-7579. The goal is to enable users to interact with Ethereum applications using modern device authentication standards, without relying on centralized wallet infrastructure.
大致的意思就是想使用通行密钥技术来实现无秘钥的身份体系。
通行密钥其实很简单,就是一个网页/应用向设备发送创建通行密钥请求,然后设备就会创建一个密钥对并把公钥返回给网页/应用,之后登录的时候设备使用私钥进行签名与公钥进行匹配即可(和钱包签名差不多的流程)。
看起来使用通行密钥来实现是一件很简单的事,比如使用ERC-7579,然后通过通行密钥验证即可,就像safe多签钱包一样,只不过这里使用的是通行密钥而已。但是通行密钥存在几个问题:
-
通行密钥会为每一个网站都会生成一个密钥对,也就是A网站和B网站的通行密钥不一样,这样就导致同一个设备在A网站和B网站的账户不一样,除非有一个统一的网站像谷歌那样为一堆子dapp做webauth,不过这样的话中心化程度太高了,很容易出岔子;
-
通行密钥存储在设备本地,有很大的可能会感染病毒导致私钥被盗;
-
通行密钥存储在设备本地还会导致密钥丢失的情况。首先不同设备之间虽然可以进行通行密钥的转移,但是效率和失败率很高(在我手里就没有成功过,也许是我运气太差了)。其次如果设备突然丢失了,那么密钥也会丢失,但使用1password这样的密钥托管平台的话那么就背离我们的初心了。
不过还是有使用通行密钥做did的,比如icp identity (https://identity.ic0.app/),还有一些钱包也使用通行密钥。不过我们想要的并不是另一个插件钱包或者一个中心化的网站,而且这也与ESP的要求相悖:
Out of Scope
- Centralized or custodial authentication systems
- Proprietary or vendor-locked SDKs and APIs
- Integrations limited to a single wallet or ecosystem
- Exploratory work without a deployable prototype
- Commercial or closed-source wallet products
当然也有其他方式的did,比如:
1.使用邮箱
大多是向邮箱发送一个魔链(magic link),然后用户点击魔链就登录了,例如web3auth(当然也有发送验证码的)。但是现在用户用的邮箱主要依赖中心化的互联网大企业,比如谷歌的Gmail、微软的Outlook、网易的163邮箱和腾讯的QQ邮箱。如果这些公司的服务出现了问题(比如最近一段时间谷歌微软等出现故障),那么使用邮箱登录的方式也会出现问题。
2.使用手机验证码
不过发送手机验证码成本很高,并且还有审批,对于开发者来说是一件比较麻烦的事情。
3.使用社交图谱
通过人类的真实社交来验证(类似于登录QQ要3个好友验证一样),例如brightid。但是使用社交验证会比较慢,而且没有那么方便,甚至在某些极端情况(比如战争或者大型灾害导致某个人所有有联系的人全部去世了)可能就无法验证。
4.使用生物特征
通过验证人的生物特征(例如指纹、面部、虹膜、静脉分布等)来验证身份,例如Worldcoin。但是生物特征不可变,一旦泄露就永远无法正常使用。而且生物特征验证对于设备和环境要求比较高,例如虹膜验证还需要红外摄像头才能正常识别其特征,而且环境的光照影响也很大。
三、总结
身份验证一直都是一个棘手的问题,尤其是web3还有不可能三角等等缺点,但是我仍然相信新的did体系一定会出现。也许在不久的未来,通过did,我们每个人的身份信息得到安全的保障,每个人都能更好地与人交流,更好地构建desoc。
其实我个人是比较倾向生物验证的,首先生物验证已经有成熟的体系和技术,可以在保障信息安全的前提下进行可信的验证;其次未来VR等设备的普及可能会解决虹膜等生物特征识别的设备问题,所以我觉得生物验证还是比较可行的一种方式。
好像esp提到的是钱包登录而不是did。虽然did和钱包有些差别,但是对于普通用户来说都是账户一样的东西。如果实在诟病这一点的话就把这个did换成web3账户。