# 去中心化身份终局之战

By [fhkyj7](https://paragraph.com/@fhkyj7) · 2022-08-13

---

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渗透认证能力，甚至是替代
    

* * *

---

*Originally published on [fhkyj7](https://paragraph.com/@fhkyj7/ieV7Kdp60morLtmycvv2)*
