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 实…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
