DID以及社交网络中的ZKP
1. 引言
本文关键术语为:
- Decentralized Identity (DID,去中心化身份) or self-sovereign identity (SSI,自治身份) :是一个基于开放标准的框架,使用自主、独立的标识符和可验证证书,实现可信的数据交换。
- Credential / Attestation / Verifiable Credential (VC) / POAP / SBT:为Web2或区块链上的 一段指向详细资格信息的文档。可由权威机构签发,或自行签发。
- Issuer(发行者):颁发credentials、certifications或资格证书的实体、机构或组织。
- Verifier(验证者):查询credentials,并对该身份进行终端营销或参与活动的最终用户。
如:“XYZ studio想要向所有Uniswap v3 LP空投NFT”,则:
- Verifier:为XYZ studio,其想要致力于的终端参与活动为:空投。
- Credential:为仅由Uniswap LP持有的Uniswap V3 NFT。
- Issuer:Credential的issuer为Uniswap Labs。
- DID:为参与Uniswap协议的数字钱包。
当Verifier查询链上所有Uniswap V3 LP NFT时,Verifier可知道所有公开钱包地址——可将其看成是“可验证数据注册表(verifiable data registry)”。

2. Web2中的identity、Verifiable Credential以及社交网络
Meta、Twitter、Instagram、Reddit、Quora、Weibo、TikTok均为社交媒体平台。他们将用户身份、内容和社交网络结合在一个干净的预包装平台中,该平台易于使用,随后成为获取用户个人数据的好地方,如他们的爱好、活动、地点、兴趣等。
商业模式很简单——将匿名用户数据出售给广告商,广告商将利用这些信息进行更智能的活动。Meta和谷歌还启用了一种拍卖模式,使营销人员能够在广告位上出价。
这对平台来说是一种高利润的商业策略——美国顶级社交媒体公司通过广告收入估计为1811亿美元。谷歌和Meta 2021年总收入的81%和97.9%分别来自该渠道。

当这一收入岌岌可危时,没有一家公司会被激励开源他们的身份数据库,并使其更加用户友好。这就是Web3去中心化、透明、防篡改和保护隐私的社交解决方案的理念发挥作用的地方。
3. Web3社交基础设施的演进
区块链上社会基础设施的一些主要原则如下图所示。数据所有权对于完全控制其数字身份的最终用户来说至关重要。

- 1)所有权及防篡改:
- 用户拥有其自身身份,且为唯一可修改其身份的个体。
- 具有基础访问控制特性。
- 用户知道谁访问了其数据。
- 2)隐私:用户可私有地存储其数据,可避免人肉搜索,除非用户自行选择公开某些信息。
- 3)可验证性:
- 第三方可验证其市场营销用于实际的用户,而不是机器人(bots)。
- 第三方可验证其目标客户具有的特征。
- 第三方可验证凭证颁发者的可信度。
- 4)可访问性:
- 第三方可访问各个用户预定义的所有数据。
- 对于dapp开发人员来说,社交网络和用户attestation数据易于使用和构建。
- 5)有趣性:社交网络对用户来说很有趣,而且有一个基本的娱乐角度。
3.1 Web3社交基础设施现状
当前链上社交数据市场分为:
- 1)dStorage方案:如creamic、IPFS、Filecoin等。
- 2)Social Graphs方案:如LENS、CyberConnect、DeSo等。
- 3)SBT(Soulbound Token)+Social Graph方案:如Project Galaxy、Sismo等。
- 4)Applications/Front-ends/Credentials/SBTs/POAPs方案:如DeBank、OpenSea、LearnWeb3、POAP等。

对于工业应用的关键挑战在于: - 1)缺少链上数据粒度:
- 链上数据,如钱包持有量(ERC20&NFT)、交易、dApp交互、交易频率等,是收集的主要数据。
- 除非分析由钱包购买的NFT类型,否则不访问个人数据。
- 2)缺少隐私保护手段来将链下数据引入到链上:
- 如Ceramic将链下数据引入到链上,会将用户数据暴露给区块链公开查询。
- 3)社交网络上缺乏用户留存率,比如缺乏继续传播社交图的应用程序。
3.2 社交基础设施中的ZKP角色
将社交媒体网络(如Meta或Twitter)中的用户数据引入到链上的关键挑战在于缺乏隐私。即使存储在多个匿名节点的加密数据,也有被hack或解密的风险。
基于ZK的应用可:
- 支持trusteless验证用户数据
- 隐私保护用户数据
在DID系统中使用ZK验证,以ZK attestations或credentials形式,用户可引入更多粒度的社交数据到链上,从而在不泄露过多数据或不引入中心化数据库的情况下,实现trustless验证。
4. 现有ZKP + DID 和 ZKP + 社交网络
4.1 Sismo
基于用户/钱包交互,Sismo支持用户claim ZK attestations
利用Sismo的SDK,开发人员现在可以使用Sismo attestations来命中用户群体。
2022年8月上线的Sismo alpha版本(当时未审计)支持用户在Polygon网络上mint其ZK badge。不过,这些attestations为该钱包的以太坊activity。
如下图为Ethereum Power Users ZK Badges示例,每个attestation/badge为non-transferable SBT(ERC1155)。

4.2 First Batch
First Batch定位为将Discord、Twitter、Reddit等链下社交数据引入到链上。
First Batch使用Twitter的OAuth来对用户的链下数据进行索引,这些链下数据运行在其AI系统中。AI将对用户形象打标签with attestations,如”咖啡爱好者“、”运动爱好者“,甚至“Nespresso”和“湖人球迷”。
在不泄露终端用户真实身份的情况下,dApp开发者可与智能合约层进行交互,将这些标签转换为链上的ZK attestations。

4.3 Trinsic ID
Trinsic的flagship产品包含了:
- 供issuers的credential API;
- 供客户的provider API:可访问VC(Verifiable Credential)。
- 供用户和客户的wallet API:用于命中关键用户群,并主导一些链上参与——如空投。
为使用Trinsic:
- 终端用户必须创建一个Trinsic Studio数字钱包,并在该钱包内生成credentials。
- 与credentials一起,用户必须生成表示多种data points的验证策略,如”用户超过了21岁“。
4.4 Notebook Labs
Notebook支持用户设立关于其是人类,以及其他如姓名、地址、社交安全数字(可选)、居住国家等个人数据的”notebook“。用户notebook存储在某AWS服务器上。
若某用户想要证明其是人类,其证实其钱包地址关联其notebook。客户端生成一个证明:其在merkle tree中有一个叶子节点,并将该proof发送给验证智能合约。
该应用程序将是预批准KYC AML并在未来轻松将其集成到dApp中的好方法。使用基于ZK的DID可以很好地保护用户隐私,并允许用户控制编辑其的数据,而无需将整个数据存储在链上。
4.5 Humannode
Humannode为抗女巫攻击的L1链,其基础共识层采用:proof of uniqueness + proof of existence。Humannode为兼容EVM的substrate链。每个节点具有相同的投票权限,并对恶意行为设置黑名单。截止到2022年8月,该团队声称已收集了超过1万个人类的数据。
Humannode团队专门从事加密生物特征认证,将加密安全匹配和活体检测机制相结合,以验证真实人类的唯一性和存在性。其使用ZKP为协议提供唯一性和生动性的证明。
4.6 Polygon ID
Polygon 2022年8月宣布了其Polygon ID产品,并与Sismo类似。Polygon ID专注于对polygon 链上的钱包行为进行attestation,并帮助生成ZK proof作为验证机制。其核心产品为:
-
用户端的Identity App

-
具有相关API的ID client toolkit
-
供开发者、dApps、客户集成的SDK

4.7 Worldcoin
由Open AI联合创始人Sam Altman开发的Worldcoin,定位为:
- 为proof of personhood协议提供隐私保护
- 借助Semaphores(由以太坊AppliedZKP开发的ZK工具)
其开发了名为Orb的硬件产品,来收集人类的眼睛虹膜图像,将其转换为短数字码,使得可验证该人类是否已注册,若未注册,则可收到其对应份额的免费Worldcoin。
5. 结论
社交基础设施是在web3上构建任何形式的可持续社交网络或应用程序的关键。隐私、安全和数据所有权是基础设施领域的关键,有多家公司正在努力解决这个问题。几乎所有专注于身份背景下隐私的公司都以零知识证明作为验证来源。
随着行业的发展,这些公司面临的关键挑战将是占领市场——这主要是用户数据,只能通过要求用户“注册”的社交应用程序进行扩展。Worldcoin是他们走向市场的一个例外,但除此之外;所有公司都在积极争夺开发者和dApp的关注。为自主开发者创建一个功能性SDK对这些基础设施提供商来说至关重要。他们可能在自己的前端进行了一些游戏化,但由于加密货币中的“娱乐”、“内容”或“投机”概念发生了大规模用户迁移,因此规模有限。
参考资料
[1] Ishanee Nagpurkar 2022年8月博客 Zero Knowledge in DiDs and Social Networks
相关文章:
DID以及社交网络中的ZKP
1. 引言 本文关键术语为: Decentralized Identity (DID,去中心化身份) or self-sovereign identity (SSI,自治身份) :是一个基于开放标准的框架,使用自主、独立的标识符和可验证证书,实现可信的数据交换。…...
基于SWAT-MODFLOW地表水与地下水耦合
耦合模型被应用到很多科学和工程领域来改善模型的性能、效率和结果,SWAT作为一个地表水模型可以较好的模拟主要的水文过程,包括地表径流、降水、蒸发、风速、温度、渗流、侧向径流等,但是对于地下水部分的模拟相对粗糙,考虑到SWAT…...
2023拒绝内卷!两年转行网络安全真实看法!
我目前转行网络安全两年,没啥天分,全靠努力,基本能够得上中级的水平了。看到大家对转行网络安全挺感兴趣,也有挺多争议,想把我的建议和经验告诉大家。 有很多人觉得网络安全已经饱和了,现在选择这个工作&a…...
【SA8295P 源码分析】57 - libDSI_MAX96789_0.so驱动库 之 QDI_Panel_Init 显示屏初始化函数 代码分析
【SA8295P 源码分析】57 - libDSI_MAX96789_0.so驱动库 之 QDI_Panel_Init 显示屏初始化函数 代码分析 一、QDI_Panel_Init() 显示屏初始化函数:Panel_DSI_MAX96789_0_Init()二、QDI_Panel_SetPower() 显示屏初始化:Panel_DSI_MAX96789_0_PowerLCD()三、QDI_Panel_GetInfo() …...
IDEA偶尔编译的时候不识别lombok
偶尔IDEA启动项目的时候会识别不到lombok,识别不到get()跟set()方法 方案 在settings添加下面代码 -Djps.track.ap.dependenciesfalse...
rust学习-构建服务器
单线程server 服务器会依次处理每一个请求,在完成第一个连接的处理之前不会处理第二个连接 // cat main.rs use std::io::prelude::*; use std::net::TcpListener; use std::net::TcpStream;fn main() {let listener TcpListener::bind("127.0.0.1:7878&quo…...
Java并发----进程、线程、并行、并发
一、进程与线程 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的 当一个程序被运行…...
【计算机网络】第 4 课 - 物理层
欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、物理层的基本概念 2、物理层协议的主要任务 3、物理层任务 4、总结 1、物理层的基本概念 在计算机网络中,用来…...
深入理解MVVM架构模式
MVVM原理 MVVM是一种用于构建用户界面的软件架构模式,它的名称代表着三个组成部分:Model(模型)、View(视图)和ViewModel(视图模型)。MVVM的主要目标是将应用程序的UI与其底层数据模…...
配置IPv6 over IPv4手动隧道示例
组网需求 如图1所示,两台IPv6主机分别通过SwitchA和SwitchC与IPv4骨干网络连接,客户希望两台IPv6主机能通过IPv4骨干网互通。 图1 配置IPv6 over IPv4手动隧道组网图 配置思路 配置IPv6 over IPv4手动隧道的思路如下: 配置IPv4网络。配置接…...
Vue3--->组合式API与Pinia
目录 使用create-vue搭建 1、使用create-vue创建项目 2、项目目录和关键文件 组合式API 1、组合式API - setup选项 2、组合式API - reactive和ref函数 3、组合式API - computed 4、组合式API - watch 1、基础使用 - 侦听单个数据 2、基础使用 - 侦听多个数据 3、immediate&…...
三言两语说透柯里化和反柯里化
JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化的概念、实现原理和应用场景,然后介绍反柯里化的概念、实现原理和应用场景,通过大量的代码示例帮助读…...
细讲TCP三次握手四次挥手(四)
常见面试题 为什么TCP连接的时候是3次?2次不可以吗? 因为需要考虑连接时丢包的问题,如果只握手2次,第二次握手时如果服务端发给客户端的确认报文段丢失,此时服务端已经准备好了收发数(可以理解服务端已经连接成功)据…...
HarmonyOS/OpenHarmony元服务开发-配置卡片的配置文件
卡片相关的配置文件主要包含FormExtensionAbility的配置和卡片的配置两部分: 1.卡片需要在module.json5配置文件中的extensionAbilities标签下,配置FormExtensionAbility相关信息。FormExtensionAbility需要填写metadata元信息标签,其中键名称…...
mac安装nacos,M1芯片
第一步,官网下载 》nacos官网 去github中下载对应的版本,本人下载的是1.4.1版本 在这儿选择其他的版本,下面这里选择 tar.gz 压缩包 解压后放到一个非中文的目录下,我选择在 user目录下面创建一个other目录,将使用的环…...
老板说把跳针改过去,什么是主板跳针
最近骑车拍了很多视频,把电脑磁盘堆满了,想着买一条固态SSD卡扩展一下。 一咬牙一跺脚,直接安排,毫不犹豫。顺带加装了无限网卡和蓝牙5.2。 收到后立马安装。安装完发现识别不到新磁盘 确认安装没问题。然后就去问固态硬盘的客服 …...
PyTorch代码实战入门
人这辈子千万不要马虎两件事 一是找对爱人、二是选对事业 因为太阳升起时要投身事业 太阳落山时要与爱人相拥 一、准备数据集 蚂蚁蜜蜂数据集 蚂蚁蜜蜂的图片,文件名就是数据的label 二、使用Dataset加载数据 打开pycharm,选择Anaconda创建的pytorch环…...
TSINGSEE青犀视频汇聚平台EasyCVR多种视频流播放协议介绍
众所周知,TSINGSEE青犀视频汇聚平台EasyCVR可支持多协议方式接入,包括主流标准协议GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。今天我们来说一说,EasyCVR平台支持分…...
Vivado进行自定义IP封装
一. 简介 本篇文章将介绍如何使用Vivado来对上篇文章(FPGA驱动SPI屏幕)中的代码进行一个IP封装,Vivado自带的IP核应该都使用过,非常方便。 这里将其封装成IP核的目的主要是为了后续项目的调用,否则当我新建一个项目的时候,我需要将…...
开放自动化软件的硬件平台
自动化行业的产品主要以嵌入式系统为主,历来对产品硬件的可靠性和性能都提出很高的要求。最典型的产品要数PLC。PLC 要求满足体积小,实时性,可靠性,可扩展性强,环境要求高等特点。它们通常采用工业级高性能嵌入式SoC 实…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
网络六边形受到攻击
大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
10-Oracle 23 ai Vector Search 概述和参数
一、Oracle AI Vector Search 概述 企业和个人都在尝试各种AI,使用客户端或是内部自己搭建集成大模型的终端,加速与大型语言模型(LLM)的结合,同时使用检索增强生成(Retrieval Augmented Generation &#…...
Linux 中如何提取压缩文件 ?
Linux 是一种流行的开源操作系统,它提供了许多工具来管理、压缩和解压缩文件。压缩文件有助于节省存储空间,使数据传输更快。本指南将向您展示如何在 Linux 中提取不同类型的压缩文件。 1. Unpacking ZIP Files ZIP 文件是非常常见的,要在 …...
