去中心化身份终局之战
0x6E18
July 24th, 2022

web3认证目前存在的问题

第一次玩StepN时,用户需要使用邮箱账号注册。完成注册后,需要导入/新建一个加密钱包,如果导入原有助记词(使用过有资产的钱包),会很担心助记词触网的安全问题。

如果新建一个钱包,也有同样的热钱包备份不当的安全担忧。这是加密老用户的担忧,而对于一个web3新人,什么是助记词,如何安全保管助记词,都是非常陌生且没有概念的,非常容易导致资产丢失。

使用Mirror发布文章时,要链接钱包进行签名认证,它提供了一个比较友好的“remember me”功能,在一次签名后,可以在一段时间内(大概一周)不需再次签名,一定程度上方便了用户,但对于月更的我来说,每次都需要链接硬件钱包去签名,实在觉得繁琐,仅仅发布一个文章而已。

更极端的例子,是目前的一些社交类web3应用,当需要关注人、发表评论等操作时,都需要验证签名,为了方便大多人会专门搞一个热钱包(有安全意识的)。

但有些应用,由于涉及历史行为的标注以及空投等诱惑,迫不得已还是要用老地址去做验签,这种地址往往有很多资产在里面,如果签名不注意,就容易导致授权过大,进而导致一些不必要的资产损失。

如果有大额资产参与DeFi,常常会使用多签、硬件钱包等相对安全的基础设施。这些地址也可能会被用来交易NFT,而NFT交易很多时候需要签名授权。目前的应用签名信息不够直观,用户大多不太理解具体签名的内容,这很容易导致签名授权过大从而被黑。

这几个典型的场景,总结起来就是目前web3身份验证存在的不易用、不便捷和不安全等问题。

这些问题出现的本质原因,大多是因为身份和账号没有被清晰界定,大部分情况下钱包即被认为是账号,又被认为是用户的身份。

而去中心化非托管钱包的发展,实际远远无法适配当前的web3发展速度。当DeFi出现时,我们采用这种模式还感觉不到太多问题。而当越来越多非金融类去中心化应用出现时,这种认证方式就会凸显诸多问题。

web2都有哪些常用的认证场景

早期我们使用网页类web2应用时,大多采用账号+密码的认证方式访问。为了方便很多网站设置的都是相同的密码(这很不安全)。

随着移动应用的普及,慢慢我们习惯了手机号+验证码的认证方式。即便是网页端,也慢慢的支持了这种验证方式。

而为了更方便,我们的很多应用都使用了基于微信/手机号一键验证等验证模式,密码几乎不再被使用。

随着生物识别技术的发展,现在很多设备也都在采用刷脸、验证指纹等认证方式,验证码也在不断的被更新替代。

web2的身份验证正在往安全便捷的无密码认证方向发展。

无密码认证要比账号+密码的方式安全很多,由于账号+密码的方式存在弱口令问题和大量的被泄露数据,黑客可以利用大数据+撞库等方式破解。

如果有好的安全习惯,目前的移动应用大多很难被盗。配合使用1password等应用(做到一应用一密码),对于需要设置密码的应用也相对比较安全。

再看金融类应用的认证发展,最早网银很不方便,要使用密码卡转账。后来发展为使用usbkey的验证模式。

对于个人用户,现在手机网银几乎与其他非金融应用是一样的体验,手机号+刷脸认证,刷脸/验证码转账等等,非常方便。

这也有一定安全隐患,如果手机被黑了,存在手机里银行账户被盗的风险。

对于企业用户,目前usbkey(数字证书)的验证方式依然延续。而像银行间通信,大多采用点对点加密的方式。

很多初次使用web3应用的用户都会发出一个疑问,为啥这应用这么难用?最直观的就是大多是网页端访问,而且用户认证普遍不够友好。

难道web2中已被广泛采用的友好且安全的验证方式不能应用在web3么?

这里我们就要说一下web3与web2最重要的一点不同,就是用户资产的自主可控(可拥有)。

web2中,数据和资产都在中心化平台端,实际用户很难拥有自主权。

而web3中,去中心化的属性让用户从密码学角度拥有了自主权,your keys,your coins!

这也是为什么web3应用的认证方式,是让用户自主签名的原因。因为这些信息只有用户自己拥有。

web3身份需要提供什么样的服务和能力

自行更改密钥

我们常用的web2应用,每隔一段时间都可以重置密码以保证安全性,避免密码丢失导致的信息泄露。

如果发现账号被盗了,我们也可以及时修改密码,或者通过申诉等方式找回账号。

这种情况下,我们的账号仍然可以继续使用,跟我们账号关联的其他内容、数据和应用,都不需要重新授权或链接。

而对于去中心化钱包,一旦助记词/私钥丢失,这个钱包就没办法再使用了。因为只要有人知道这个助记词/私钥,就可以动里面的资产,就可以验证各类应用。

在web2中,账号被盗一方面可以申诉找回,另一方面也很容易进行各类禁用操作,只要有足够证据,就可以对可能的风险进行中心化的处理。比如向不同平台申诉,添加黑名单等等操作。

而在web3中,目前还没有一个能有效针对被盗账号的防范措施。一旦私钥丢了,这个账号就不再可用。但随着越来越多应用对身份行为的重视,我们很多的链上行为都与账号地址有关,一个用了很久的地址,或许就是一笔可观的财富。如果弃之不用,就非常的可惜。

是否有一种方式,能让我们像web2更换密码一样,在不变更账号(公钥地址)的情况下,对web3的钱包助记词/私钥进行自行更改呢?

多账号分离,身份聚合

目前在国内有很多面向个人用户的多账号分离/身份聚合的应用场景。

比如我们在使用共享单车时,有时会用支付宝扫码开锁,有时候会用微信扫码开锁,经常自己都没留意,但都能打的开锁。

各种共享商品,只要上面有个码,我们就会下意识的直接用微信/支付宝去扫,租充电宝、电车、雨伞等等。

这些应用使用起来非常方便,不需要我们注册任何账号,也不需要提供大量的个人信息,只需要进行一次授权即可。

在这些场景里,租借各种设备时,我们实际使用的还是这些应用本身的账号,而这个账号是通过身份授权产生的。

我们的大量身份信息和行为,都被聚合在一个叫“芝麻信用”/“微信支付分”的系统里,这个就是我们在互联网世界的聚合身份。

它是一套信用评价系统,拥有我们的各类身份数据和信用评级。不同应用通过与它的集成,可以申请一个授权,读取我们的身份,并创建临时的账号。

只要我们的信用能达到这些应用的设计要求,我们就可以平滑的使用。

对于企业级的应用,一个员工往往也会使用几十套各种不同系统,如果每个系统都有独立账号,记忆起来非常不方便。大多员工也都习惯用一样的密码,这样很不安全。

为了解决这一问题,有专门服务于企业级身份管理的解决方案IAM。能提供一套便捷安全的单点登录和统一账号密码系统,既解决了安全问题,又让员工使用系统更加便捷。

像以上这样的使用体验,在web3中也是被需要的。我们希望在玩游戏,体验社交应用,参与DeFi挖矿时,都有不同的账号,但他们都可以使用一套方便的方式进行统一的安全的管理。

既能做到资产在不同账号的隔离,也能做到身份在不同账号的互通。我们自己可以决定像外部展现何种身份,可以控制哪些身份是显性的,哪些是隐形的,以及他们之间的行为关系。

灵活的密钥管理

大部分的互联网用户都没有密码管理的安全意识,常常使用一套密码打遍天下。被用最多的安全保护措施就是不使用,比如不使用网银等等。

移动应用认证技术的发展演化,一方面是为了平台应用能有更大的网络效用,另一方面也切实的提升了用户使用的安全和便捷性。比如验证码+刷脸+风控等方式,让一般的密码泄露很难造成严重影响。

而web3应用,将身份主权交还给了用户,每个人对如何管理密钥在知识和技能上有着非常大的差异。

即便是一些老韭菜,也经常范丢失私钥的错误,不小心被钓鱼或是由于电脑被黑导致热钱包被盗。

使用硬件钱包、冷钱包、多签钱包的门槛更高,一般对于没有技术背景的用户,很难真正掌握这些钱包的安全使用方法,一不小心有可能自己反而把密钥搞丢。

web3这种不友好也不是很安全的密钥管理方式,切实的阻碍了很多人参与web3应用。

在web2中,我们可以通过1password、google密码管理等程序帮助管理密钥。但

助记词和私钥的使用大多比较强调离线备份,或者存放在硬件钱包里,或者采用更加安全的多签等技术。这些对于专业用户来说还好,对于web3用户来说就有一些难度了。

我们是否可以像web2那样保管密钥?不需要抄写,不需要硬件。即安全,又可以快速的恢复?

对于不同的使用需求,可以有不同的密钥管理策略,大额资产可以使用专业级安全方案。社交应用就使用一些便捷的方法,这样的角色授权分离,也让我们在使用不同应用时不至于过多的担心安全和隐私问题。

让web3认证拥有和web2一样的体验

前面提到的很多问题,以及相对应的解决方案,我们目前看有一些web3项目已经在试图解决。

如果想让web3的使用体验与web2类似,个人认为需要合约钱包的大范围应用,这会实现目前很多不能实现的体验。比如恢复密钥、无费用交易、多账户风险隔离等等。

ERC 4337 以太坊账户抽象

ERC4337是以太坊关于账户抽象的一个提案。它的提出主要目的是在不更改共识层协议的情况下,将用户账户升级为合约账户,这样做会带来非常多的好处。

目前,以太坊的账户类型分为外部账户(EOA)和合约账户。ERC4337的账户抽象方案,提出将两种账户类型减少为一种,即只保留合约账户。

ERC4337实现的账户抽象方案,可以为用户带来以下体验提升:

支持社交恢复:这个方案支持用户为钱包账户设置多个守护者,可以在丢失密钥的情况下帮助恢复钱包密钥。守护者可以是用户拥有的其他安全钱包、家人或朋友,甚至是第三方机构。

这个功能可以让用户的钱包账户更加安全,避免由于不理解助记词/私钥原理,或保管不善而导致的意外丢失。可以像web2一样管理应用的账户,在发现不安全因素或丢失密钥时,对钱包账户的密钥进行找回和重置。

支持代建账户/代付手续费:这一功能可以让应用帮助用户支付创建账户的gas费,也可以帮助用户代付交易手续费。甚至使用任意的ERC20代币支付交易手续费。简单说用户不需要自己入金就可以完整的体验web3应用。

这对普通用户来说非常有效,他们不需要支付创建账户的费用,甚至一些交易也不需要付费。这可以实现0门槛用户引流,并为用户建好安全的web3钱包。对于游戏和社交类应用,尤其好用。

支持账户升级:账户抽象的钱包是由智能合约控制,因此可对合约功能进行升级,可实现用户高度可自定义的能力,比如简化/个性化签名算法等。

对于ERC4337的实现,vitalik给出了一个路线图,其中包括:

短期:

  • 让ERC-4337投产,支持将EOA升级为智能合约账户

  • 支持ERC4337账户的易用的浏览器插件钱包

  • 实施对Layer2友好的功能,短期在Layer2中推广ERC4337应用

中期:

  • 实施Verkle树,降低gas成本

  • 添加可选的EOA到ERC4337的转换

  • 添加crLIst逻辑

长期:

  • 考虑强制实行EOA转换,和单一的ERC4337账户

web3auth

Web3Auth提供了一种与web2类似的社交认证方法,可以让web3认证保持与web2一致的使用体验。

Web3Auth是一项toB的应用,需要应用程序自主集成和配置后,用户才能体验到相应的认证体验,包括:

主流社交帐户登录和无密认证:用户可通过 Google、Twitter、GitHub 和其他 OAuth 提供商进行注册。用户还可以通过发送电子邮件的方式,进行无密码设置的注册流程。

支持Web3 钱包与密钥管理:可授权用户使用自主选择的钱包或密钥管理。比如用户可以使用他们现有的钱包登录或选择密钥管理(导入助记词),并将其直接连接到应用程序。

web3auth可以为用户提供类似web2的注册和认证体验,只需要通过第三方社交认证即可完成。

同时,web3auth还支持非托管的公钥基础设施(SSS 2/3 Shamir's Secret Sharing),这种方式极大方便了不懂管理密钥的用户,同时做到既是非托管钱包(用户完全自主掌握资产),又无需用户自行保管密钥。

如果觉得这种非托管方式不够安全,用户也可选择采用自己常用的钱包进行链接登录,比如ledger、phantom等。浏览器插件钱包keplr就是用web3auth扩展,用户可自行体验。

unipass

UniPass是多链统一加密身份应用,提供基于电子邮件的非托管社交恢复钱包解决方案。可以通过无密钥的方式控制用户的加密身份。还可以通过加密方式验证多链地址甚至社交帐户。

在前端功能上,unipass与web3auth类似,都有提供社交认证、社交恢复钱包等功能。相对已实现功能,unipass的2022年产品规划中提到的能力,与本文锁期望的去中心化身份演进有很多契合之处,其中包括:

web3身份聚合:基于密码学实现多链多账户的聚合。通过这种聚合方式,可以将用户在不同链上不同地址的行为聚合到一个身份ID中,实现信任的传递。简单说就是可以最大程度提升用户的链上行为评分。

web2身份验证:在智能合约中提供验证电子邮件地址、Twitter 账户、Discord 账户的能力,从而在 Web3 中原生提供 Web2 身份信息。

单点登录与访问门户:通过使用unipass id,进行多应用的统一登录。并为用户提供统一的web3门户导航。

账户命名

身份标识对于身份识别非常重要,web3中每个账户都是一长串类似乱码的字母+数字,这难于记忆和识别。

ENS

ENS是一个基于以太坊区块链的分布式、开放和可扩展的命名系统。其推出的xxx.eth服务,将可读名称映射到了0x123xxx...的标识符,这在一定程度上缓解了这种识别困难。

Nametag

Nametag 的目标是成为建立在区块链上的通用命名服务,用户通过铸造、存储、交易和使用唯一命名的 NFT 作为他们的通用用户名。

LENS

Lens 是Polygon上的 Web3 社交图谱协议。它的目标是形成一个完全可组合的、用户拥有的社交图谱。该协议从一开始就采用模块化设计,允许第三方基于协议开发新功能,同时确保用户拥有的内容和社交关系不可变。

其中ENS和Nametag是想成为基础命名服务让其他应用都来引用和适配。而Lens是想做社交基础设施,自带的xxx.lens有点类似微信名。最终哪种方式会在web3中更受欢迎,还有待时间验证。

Gnosis Safe

对于web3用户来说,相对web2有一个更为重要的需求是自主的安全性,一切身份应该是建立在自主可控的安全基础之上。

相对于一个简单助记词导入的metamask热钱包,硬件钱包会更安全。避免了助记词被黑、钓鱼等风险。

在硬件钱包之上,还有更安全的多重签名解决方案,主要面向组织/社区/大额资金的管理需求。

对于一般个人,硬件钱包就已经相对比较安全了。但对于组织而言,还要考虑单点风险、作恶风险、授权风险等等,因此采用多签会更符合大额资金安全管理的需要。

Gnosis Safe 是一个可在多链运行的智能合约钱包,需要最少人数批准交易才能执行(M-of-N)。

Safe是一个智能合约账户,提供的能力包括:多签、限制转账金额、白名单转账、捆绑交易、紧急冻结/恢复账户、预设条件触发操作等。

一种理想化的去中心化身份认证架构

上文的大量铺垫,是为了能更好的提出一种架构。它能更好的帮助用户进入web3应用,同时能获得更大的安全性和更好的体验感。

在web3里,钱包、账户、身份的概念有些模糊,没有清晰区分,往往钱包就是账户,账户被当做身份。

实际身份是一个集合,而账户是我们使用应用的具象载体,是身份的外延。而加密钱包是我们账户的一种载体和验证方法。

去中心化身份可以被分为三个层次,分别是:外显身份、代理身份和主权身份。

代理身份

代理身份是一系列专属功能的账户,比如社交账户、游戏账户、交易账户、DeFi账户、匿名账户等等。

在这个模型中,所有的代理账户都可以是主权账户控制的合约账户,在发生危险时可以使用主权账户重置密钥,避免资产损失。同时可以延续各种行为画像。

这些代理账户是用户不同身份角色的代理,他们之前拥有独立用途和安全边界。避免使用一个账户什么都做,在安全的基础上又能提供便捷的体验。

比如社交账户中没有资产,专门用于登录各种应用,转评赞。游戏账户专门用于玩链上游戏,跟NFT账户可以共用或是分离。而NFT账户有可以专做一个貔貅账户,只买不卖,避免被黑。当要卖时再临时授权挂单。

为什么要采用这种按照角色分离的账户设置?

实际我们在使用web2应用时,大多时候也都是每个应用使用了不同的账户,他们之间没有统一的联系,账户名一样也是我们的主观选择。

而社交登录流行后,我们大多采用微信、gmail等认证方式,这种实际也是授权在应用中建立了一个新的账户映射,而不是直接使用gmail等作为账户主体。

在这个模式下,微信和gmail更类似我们的主权身份,他们可以恢复我们在不同应用中被忘记的账户,或是重置这些账户的密码。

角色分离的好处,是可以将风险隔离,可以提升使用不同应用的体验。我们不需要每次关注人时,都打开硬件钱包授权。而在需要操作资产时,又可以进行更复杂的策略授权,避免不小心或恶意的被盗。

使用代理账账户,我们会担心代理账户产生的行为无法共享,会降低我们在一些场景下的评级。这个问题实际可以通过外显身份的设置来解决。

外显身份

外显身份是一系列凭证、标识、行为、关系、声誉的集合。

我们可以简单的理解外显身份就是一个个身份标签,主要作用是方便外部关系对我们的身份进行标识。

比如ens、lens等就是一个标识的外显身份,他们的作用是在社交关系上让身份更加易读。

poap是一类行为轨迹的外显身份,它主要是标记我们参与了哪些活动,类似的还有galaxy、rabbithole等。

在vitalik的SBT论文中,提到灵魂绑定token的很多用处,实际都是这种外显身份的能力范围。比如我们的社交关系、信誉、学历证书等等,都可以采用SBT的方式,与我们的身份进行绑定。

在实际应用层面,外显身份实际可以与代理身份合一,他们可以就是同一个账户地址,只是在逻辑层面加以区别会更好的为用户提供服务,或是便于应用进行设计和体验提升。

比如有些用户更加注重安全和隐私,那么这种外显身份就可以是独立的账户,专门用户外部的展示和关系构建。

而代理身份的行为映射完全可以通过隐私计算完成,既可以让我们的身份更像一个整体,又可以让用户可以灵活的控制向外部展现哪些身份特征。更进一步,我们可以灵活的构建多个外显身份,可以有更真实的,也可以有更匿名的。这样会降低用户使用的心里门槛。

在技术层面,要实现这种设计,目前的做法可以采用链上代理的模式,类似在链上签署一个授权,记录代理身份和外显身份的授权关系。一旦外显身份有什么问题,可以重新签署授权去更新或禁用身份行为的授权。听橙皮书关于DID那期播客,有讲到unipass就是采用了这种链上授权模式。

另一种更隐私的方式,可以采用合约账户+零知识证明的方式,以一种外部无法获取直接关系,而可以证明用户的身份不是伪造的方法,来实现这种身份属性的关联和外显。

采用这种外显身份与代理身份分离的设计方式,直观好处就是让用户的微信账号与银行账号分离。而不是别人知道你的微信号,就可以直接看你银行资产,甚至可以看你的钱从哪赚的,怎么亏的。

主权身份

Not Your Keys, Not Your Coins.

这是web3最重要的基础,是个人资产神圣不可侵犯的保障。

对密钥的安全管理,一直是参与加密游戏的最重要一课,很多人因为保管不善而损失资产。

而如何安全的保管密钥,相对来说也是一件比较专业的事,新用户很难短时间掌握,需要大量的实践和很多次突破心理防线,才能真正自己安全的用非托管钱包管理资产。

密钥就是我们的主权身份,它宣誓了一切都是自己可控的。而不像web2那样说被禁用就被禁用。

而密钥的安全管理,一定是采用去中心化非托管的方式。这让我们能随时对自己的账户有控制权。

如果是个人使用,到硬件钱包这一层已经相对比较安全。如果是一个组织/社区来使用,可以采用多签的方式。

在未来架构中,这一身份可以是我们最不常使用的身份。只需要在创建代理身份时,用它来授权即可。当代理身份存在风险时,我们可以用它来充值代理身份的密钥,确保一切资产都在自己最终的可控范围。

对于web3新人,这种主权身份实际也可以采用第三方服务来实现。这是一种基于去中心化非托管的方案,比如像web3auth的SSS方案。这也降低了新人使用密钥的门槛。

以上提到的三个身份层次,他们实际上可以是辩证统一的整体,极端情况他们就是一个地址而已,所有身份都汇聚到一个公钥地址,目前很多用户也是在这么使用。

但这样的应用方式不够安全,很多人因此丢失了资产。由于很多心理阻碍,也无法真正让各类账号很好的组合起来,让一些本是积极建设的用户,在链上评分上不会很好。

目前的身份账户体系,并没有像web2那种更好的服务于用户。在web3,最重要的就是资产所有权问题,而用户与链上资产的关系,就是通过身份来桥接的。

只有处理好身份的关系,才能更好的让用户使用链上资产,使用各种web3应用。

通过将去中心化身份进行分层设计,一方面可以让专业人做专业事,各项目如果能围绕一个大的共识方向去做,也能更快更好的实现高度可组合的身份产品矩阵,真实的让用户得到实惠。

另一方面,也是为了能让用户更好的理解web3的身份账户概念,在先进来的前提下,通过更多的使用来慢慢了解和熟悉身份的安全管理。

因为web3的身份是属于个人的,因此需要我们自己对自己的身份资产负责。

最终,我们其实拥有的是一个身份集合(钱包账户集合)。

在上面的举例中,看似有很多身份概念很复杂。但实际如果有这样的应用,它可以将这些元素汇聚在一个应用中,让用户实际没有这些复杂概念的感知,只是去用就好了。

未来发展

要达到这个理想化的架构,我们要做哪些事:

  • 专业化web3身份认证服务商

  • toB先行,各DAPP采用web3身份认证组件

  • 标准化认证服务、接口和流程

  • 易用化用户注册、认证流程

  • 提供代理账户能力,实现账户间的身份授权(链上)

  • 支持浏览器插件的合约钱包

  • 支持直接在web3的移动应用采用社交化认证

  • 大量web3应用对合约账户的支持和安全的密钥管理

  • 面向个人用户的一站式综合服务

  • ERC4337的实施,实现账户抽象

  • 安全多签和硬件钱包的普及

  • 去中心化非托管的密钥基础设施

对于个人用户,我们可以做些什么:

  • 基于现有条件,划分自己的账户角色

  • 使用不同角色的账户参与不同类型应用,风险隔离

  • 安全保管好助记词/私钥,学习相关知识

  • 尝试使用新型web3认证基础应用

对于专业身份认证、DID、社交等应用可以做些什么:

  • 提供更安全的合约账户功能

  • 尝试提供代付注册、交易费等能力

  • 尝试向web2渗透认证能力,甚至是替代


wechat&twitter:nigdaemon

知识星球:DeFi研习社


Subscribe to 不确定思维
Receive new entries directly to your inbox.
Collectors
View
#1
#2
#3
View collectors
This entry has been permanently stored on-chain and signed by its creator.