Worldcoin知识点

1. Worldcoin在主网推出前致力于Optimism的superchain愿景

Worldcoin认为:隐私是一项基本人权,不应该为了使用重要的金融或身份服务而牺牲隐私。
Worldcoin的目标是:

  • 使人们能够普遍参与全球经济。为了帮助做到这一点,我们正在努力向数十亿人免费分发一种新的数字代币,包括那些没有护照或合法身份的人。但是,我们如何确保每个人只申请一次分配的股份?换言之,一个独特的人如何证明他们是第一次做某事?

Worldcoin Foundation和其早期贡献者Tools For Humanity(TFH),与2023年5月11日发表声明称:Worldcoin在主网推出前将致力于Optimism的superchain愿景,以推进基于OP Stack的扩容链生态。

  • World ID:为去中心化的、隐私优先的身份协议,未来将部署在OP主网。

    • 需使用Orb设备拍摄虹膜来注册World ID。
    • 可将WorldID看成是存在于持有人手机本地的全球数字护照或身份钱包,并借助ZKP技术来证明该持有人是真实的、唯一的人类。
    • 随着World ID协议的演化,未来将支持任意verified credential(如支持手机号验证和Orb虹膜身份验证等)。
    • 使个人能够在线验证自己的humanness,同时通过零知识证明保持匿名。
    • 一旦用户在Orb上验证了其humanness,其将收到一个unique PoP(Proof of Personhood) credential on a compatible digital wallt。首个电子钱包为WorldApp,未来将有更多。 通过PoP证书,World ID协议使每个人都可以在不需要第三方的情况下在线证明自己的人性。该协议利用零知识证明来最大限度地提高隐私,并最终由人们通过World ID本身进行管理。
    • World ID将与Verified credentials标准兼容,允许代表个人社交互动的多样性(soulbound tokens、intersectional的社交数据等)。
    • 当前有140万个用户参与,若成功,World ID将成为互联网上最大的真人网络,所有人都可以作为公共产品访问。
  • TFH的World App:为首个支持使用Worldcoin交易、数字资产交易以及稳定币交易的钱包,未来也将迁移到OP主网。

    • 在beta版中,当前已有160万注册量,月活用户量达50万+,在OP主网上的部署将扩大访问范围,并帮助Worldcoin建立一个由开发者和用户组成的价值观一致的生态系统。
    • 为verified World ID holders提供gas-free transactions。

Worldcoin知识点_第1张图片

将World ID引入到OP主网,为未来web3身份和治理提供基础。

早在2020年12月,当时 以太坊Rollup生态远非主流,Worldcoin决定采用Optimism生态中支持简单支付的Hubble开源框架。World App beta版上线时使用的是Hubble,但是上线后,用户对简单支付之外的功能的需求很快超过了Hubble的能力,该项目被转移到了Polygon PoS,因为当时,鉴于该项目的规模,Optimism和Arbitrum太贵了。

Worldcoin和Optimism的合作始于1年前对EIP-4844的联合贡献——可将L2 fee reduce 10倍。Coinbase和Base结盟也致力于对EIP-4844贡献并构建 Optimism Superchain愿景。预计将在以太坊下一次硬分叉时包含EIP-4844。

采用虹膜识别的原因在于:虹膜信息丰富且难于伪造,可用作humanness识别标记。
Worldcoin知识点_第2张图片

2. 何为Orb?

Orb在Worldcoin协议中至关重要,用于防止女巫攻击并证明unique personhood。可以不通过Orb来使用Worldcoin,但是若想注册World ID并收到免费份额的Worldcoin Tokens,则必须通过Worldcoin运营商的Orb设备来验证其unique personhood。Worldcoin does not use your iris to identify who you are, only to verify that you’re unique.
Orb由TFH用时3年开发的生物特征成像设备(虹膜扫描成像设备),用于提供 PROOF OF PERSONHOOD。若已在Orb上验证了某用户的uniqueness和humanness,该用户将收到一个World ID,该World ID可用作具有隐私保护的全球电子护照,在不泄露个人数据如名字、邮箱的情况下,用于登录网页、手机app和web3 dapp。

当前Orb硬件的PCB设计已开源:

  • https://github.com/worldcoin/orb-hardware

卸下外壳时,可以看到主板、光学系统和冷却系统。大部分光学系统隐藏在外壳中,与外壳一起形成防尘防水环境,即使在具有挑战性的环境中也能长期使用。



3. 用户注册以及claim reward基本流程

Worldcoin可利用以太坊现有的L1和L2技术,2周前仅在Polygon链上部署了合约。未来将在以太坊主网和Optimistic Rollup上部署合约。

  • Polygon主网合约:
    • https://polygonscan.com/address/0x515f06b36e6d3b707eaecbded18d8b384944c87f
  • Polygon Mumbai-Testnet测试网合约:
    • https://mumbai.polygonscan.com/address/0x719683f13eeea7d84fcba5d7d17bf82e03e3d260
      Worldcoin知识点_第3张图片

在注册和claim reward环节中的主要角色有:

  • 1)用户:希望注册的用户。

  • 2)Orb设备:用于扫描用户虹膜的已认证设备。会对用户注册时的公钥哈希以及虹膜哈希进行签名。【Orb设备无法作弊,因后续Sign-up Sequencer会做签名有效性、虹膜哈希唯一性验证。】

  • 3)Sign-up Sequencer:为链下服务,用于:【需信任Sign-up Sequencer服务,该服务由Worldcoin官方运营维护。】

    • 验证Orb设备签名,只接收 认证过的Orb设备提交的、签名有效的 注册信息
      检查注册时的虹膜哈希为唯一的。
      • 若唯一,在本地数据库中记录虹膜哈希值和公钥哈希值,同时,向链上合约提交公钥哈希值。
      • 若该虹膜哈希已注册,则数据库中不记录,且也不向链上合约提交“试图二次注册的公钥哈希值”。
    • 检查用户claim时的proof有效,并发起调用mint合约请求。
      • 可直接调用链上合约验证proof
      • 可使用Worldcoin官方提供的API来验证proof
  • 4)链上合约:负责:
    结合现有开源代码,已认证Orb设备的签名公钥信息目前未在合约中记录。
    以Merkle tree形式记录用户注册时的公钥哈希值。该Merkle tree中维护了所有注册成功的公钥哈希集合{pk1_hash,pk2_hash,…,pkn_hash}。
    claim reward时验证proof,nullifier并mint reward token。

3.1 用户注册

用户注册阶段流程为:

  • 1)用户在手机上生成a Semaphore keypair。
  • 2)用户通过QR码将the hashed public key(下图中SemaphoreHash)展示给Orb。
  • 3)Orb扫描用户的虹膜,本地计算用户的虹膜哈希值IrisHash。
  • 4)Orb将已签名的消息(包含the hashed public key和the IrishHash)发送到the sign-up sequencer node。
  • 5)Sequencer node会:
    • 5.1)验证Orb的签名。Orb的签名公钥必须已注册,若已注册且验签通过,则执行下一步。否则直接返回。
    • 5.2)验证该IrishHash 与现有数据库数据不匹配。若唯一性check通过,则该IrisHash和该hashed public key将保存在本地数据库中,同时将该公钥哈希值提交到链上合约中。否则不存数据库也不提交到链上合约。

Worldcoin知识点_第4张图片

用户注册a verified World ID的流程:
Worldcoin知识点_第5张图片

  • 1)用户下载World App。该app会生成2个密码学安全的随机私钥,其中一个私钥用于用户的World ID,另一个用于用户的加密钱包。密钥在用户的设备上生成,并使用该设备上的随机值。简单来说,就是这2个私钥都是随机生成的,与生物学特征信息完全无关,这2个私钥之间也互不相关。这2个密钥是在Orb介入之前生成的。

  • 2)更具用户的World ID私钥,创建identity commitment——类似于传统椭圆曲线机制的公钥。该identity commitment 使用Semaphore来生成。注意,该identity commitment源自 与钱包私钥、钱包地址或任何生物特征数据 完全独立的私钥.

  • 3)用户来到Orb设备勉强:Orb会根据不同的传感器采集输入(可见光谱内的人脸图像以及近红外光谱的虹膜图像)来判定其是否为human、非欺诈性、以及后续会判定唯一性。默认,不同传感器获取的图像进展本地内存中保存。

  • 4)根据传感器的输入,Orb会本地运行一组机器学习模型来探测欺诈,识别眼睛并控制图像采集。最终会采集2个聚焦的虹膜图像。

  • 5)根据用户的2张聚焦的虹膜图像,Orb内会运行一个算法来计算虹膜码。
    虹膜码类似为:
    Worldcoin知识点_第6张图片

  • 6)除非用户明确要求将其数据备份并用于未来升级和系统安全性以及包容性改进,否则所有图像将在Orb设备上销毁。

  • 7)Orb向sign up提交待签名消息,待签名消息包含了在第5)步中计算的红魔码。Orb的私钥在Trusted Platform Module(TPM)中,以认证该消息来自于合法的Orb设备。以Orb私钥对该消息进行签名。

  • 8)sign up服务与uniqueness服务一起,会将Orb设备所提交的虹膜码 与 现有的所有虹膜码 比对计算Hamming distance。若distance低于某阈值,则认为该注册是重复的,并拒绝该注册:

    • 除对虹膜码做重复性检查之外,还会检查签名有效性以及是否来自有效Valid。
    • 若所有条件都满足,则uniqueness服务会将该用户的identity commitment包含在一组verified commitments list中,并提交请求。该list存在于链上某智能合约内。
    • 为避免重复注册,虹膜码存储在数据库中,数据库中会包含之前看到的虹膜码以及identity commitments。当使用World ID时,用户永远不要分享其identity commitment,即使该数据库公开,ZKP可确保任何人都不知道指定某人的identity commitment或虹膜码。

3.2 用户claim reward

用户claim reward流程为:

  • 1)用户app本地生成一个钱包地址。
  • 2)用户app使用Semaphore来证明其拥有与阶段一注册的公钥相对应的私钥。由于这是一个零知识证明,并不会reveal which public key。
    生成proof时,隐私输入为:注册时公钥哈希所对应的私钥sk、注册时的公钥pk。公开输入为:当前已注册的公钥哈希集合{pk1_hash,pk2_hash,…,pkn_hash}。证明的关系为:pk的哈希值对应公钥哈希集合{pk1_hash,pk2_hash,…,pkn_hash}中的某一个值;sk为pk的私钥。
  • 3)用户会将收款钱包地址和proof发送给sequencer,sequencer会:
    • 调用链上合约验证该proof,若proof验证通过,sequencer会在数据库中记录相应的claim reward申请和proof。
    • 为节约gas费,sequencer会积攒一定数量的有效claim reward请求,将相应的proof聚合为一个batch proof,和相应的收款钱包地址列表一起,提交给链上合约。
  • 4)链上合约对batch proof通过后,会对相应的公钥哈希nullifier,以避免重复claim reward,同时会mint token给指定的钱包。

Worldcoin知识点_第7张图片

3.3 World ID应用示例

使用World ID,在不泄露个人信息的情况下,证明其为unique human:
Worldcoin知识点_第8张图片

  • 1)由某app触发验证流程(通常通过QR码或deeplink)。扫描QR码打开World App。在验证context中,验证请求通过WalletConnect发送,请求中包含了一组uniqueness set以及an optional image,称为signal:
    • context为app ID(每个app唯一)以及源自该app的可选附加数据,以应对app所需的女巫攻击的多种操作。
    • signal可为用户commit的任意数据。signal的值将包含在proof中,对该数据操纵将使得proof无效,类似于密码学签名。如在选举中使用World ID,其signal可以是用户的选票。这样用户就对其选票进行了commit,任何其他人都无法修改。
  • 2)用户identity list存储在链上Merkle root内。用户的World App会获取新的Merkle inclusion proof来生成proof。通过indexing服务(见开源的https://github.com/worldcoin/signup-sequencer)来实现,因其需要数GB的数据,在大多数手机设备上无法直接用。该indexing服务后续将改为由不同实体管理的去中心化indexing服务集,甚至可在其上增加匿名网络,以防止IP地址关联。
  • 3)World App使用当前的Merkle root来计算零知识证明,context和signal为public inputs,nullifier为public output,World ID私钥和inclusion proof为隐私输入。使用https://github.com/worldcoin/semaphore-rs来在多个手机设备上生成ZKP,包括计算资源有限的很老的设备。该proof可确保:
    • World ID私钥属于该identity commitment,从而prove knowledge of the private key。
    • inclusion proof正确展示了该identity commitment为roof所代表的Merkle tree的a member。
    • nullifier为根据context和private key正确计算。
    • 验证proof中的signal与公开的signal一致。
  • 4)Verifying application接收proof,并将其relay到自身的合约或后端进行验证。当从后端(通常为Web2)进行验证时,其后端可连接Worldcoin提供的Developer Portal(或某chain relayer service),因proof inputs需与链上数据验证。
    • 除proof之外,verifying application将接收nullifier,对于每个context,代表了唯一的用户表示。该nullifier是确定性的,对于相同的context,同一用户总是生成相同的nullifier,使得app可确保唯一性(即,之前未见过该nullifier)。但是,该nullifier无法关联同一用户的其它nullifier、identity commitment,从而可避免跨应用跟踪。

为集成World ID,应用只需要简单的在其前端增加JS SDK,从而可构建与World App的连接(即生成相关的QR码或deeplink)来接收ZKP,并通过on-chain 或 Developer Portal API 来验证该proof。

4. 何为proof of personhood(PoP)以及为何需要PoP?

  • 随着人工智能的快速发展,迫切需要能区分线上人工生成内容以及AI生成内容 的能力。
  • 在AI时代,proof of personhood可解决2大关键问题:
    • 1)对抗女巫攻击
    • 2)最小化AI生成的错误信息的传播。
  • World ID:为开源无需许可的身份协议,类似于全球数字护照,可用于匿名证明uniqueness和humanness,以及选择性地公开其他方发布的证书信息。

人工智能的进步使得在互联网上很难区分人工智能和人类,这突出了对真实人类识别和验证的需求。重要的是,这为人工智能资助的非国家UBI和数字货币的全球公平分配开辟了道路。World ID最终将使协议由人民管理,确保协议惠及所有人。
随着人工智能的快速发展,迫切需要能区分线上人工生成内容以及AI生成内容 的能力,为此proof of personhood(PoP)应运而生。

PoP机制建立与个体的humanness和uniqueness,可将其看成是建立数字身份的第一个也是最基本的组成部分。

Worldcoin知识点_第9张图片

Worldcoin知识点_第10张图片
一旦用户在Orb上验证了其humanness,其将收到一个unique PoP(Proof of Personhood) credential on a compatible digital wallt。首个电子钱包为WorldApp,未来将有更多。

潜在的Proof of Personhood机制有:
Worldcoin知识点_第11张图片

5. Worldcoin去中心化

Worldcoin知识点_第12张图片

6. Worldcoin中的隐私保护

Worldcoin构建的Privacy-Preserving Proof-of-Personhood Protocol (PPPoPP),初始目标是给10亿人空投token。随之发现,不仅需要在硬件端(即Orb)开发大量基础设施,还需要在crypto/protocol端开发大量基础设施。

由于Orb使用生物学特征来注册,需要将该生物学特征 与 钱包的建立以及未来的交易 解耦,从而确保用户隐私。
Worldcoin选择了Semaphore:

  • 既可为特定操作增加匿名信
  • 对新应用来说易于复用setup

6.1 Semaphore工作原理

Semaphore中的隐私是通过引入更大的名为“identity commitments”的身份集合,该集合内各元素为某秘密字符串的哈希值,并可与创痛的公钥对比。该集合以Merkle tree表示,使得该集合内的任何人都可高效证明membership。但是,由于Merkle proof会泄露单个member的身份,因此该proof需verified in zero knowledge。该ZKP(zero knowledge proof)然后可转换为,在不泄露身份的情况下,证明其身份并可由任何人验证。

使用Semaphore的协议可决定如何来创建identity set。智能合约中的“gatekeeper”函数需实现自定义逻辑来向该set添加identity。在Worldcoin用例中,虹膜哈希的唯一性检查就是该gatekeeper。由Orb提供并签名的虹膜哈希必须是唯一的,然后才能将该identity添加到set中。

Semaphore主要有2大模块:

  • identity set
  • 证明membership的机制

用户在创建ZKP证明时,需同时证明以下3个重要的cliams:

  • 1)Membership:即“I am a member of the set”。
  • 2)One-shot:即“I have not made a claim before in this context”。
  • 3)Signal:即“I want to say this …”。

总体代码示例为:

from poseidon import hash, verify_merkle_proof

def claim(external_nullifier, root, signal):

  # Private inputs
  private private_key, merkle_proof

  # MEMBERSHIP: Verify that the public key is a member of the set using a Merkle proof
  public_key = hash(private_key)
  verify_merkle_proof(root, public_key)

  # ONE-SHOT: Create a unique number ‘nullifier’ for this (member, context) pair
  nullifier = hash(private_key[0], external_nullifier)

  # SIGNAL: The value is not used, but it is tied to the proof
  observe signal

  return nullifier

6.1.1 membership claim

用户存储在Merkle tree中的为公钥(identity commitments)。为证明membership,用户需证明其拥有私钥,并提供Merkle proof证明相应的公钥在Merkle tree中。不过,其中的Merkle proof是在zero-knowledge proof内验证的,这样就没人知道使用的为哪个叶子节点或者具体的公钥值。因此可提供匿名性。对于外部观察者,仅可看到来自某member的proof,但无法区分具体是哪个member。

6.1.2 one-shot claim

几乎在所有应用中,都希望每个成员做某事仅做一次(如投票 或者 spend a token)。但是,因为membership以匿名方式证明了,我们无法区分2个proof是否来自同一user。为此,需要每个proof发布一个nullifier,该nullifier是随机值,对每个用户来说是唯一的。因此,来自于同一用户的不同proof具有完全相同的nullifier值,从而可探测并发现其来自于同一user。nullifier类似于随机假名,无法将其与真实identity关联。

在首个privacy coins中就已使用了nullifier。但Semaphore中采用的为非常规nullifier。以选举为例:希望每个用户对每个提案投一票。若采用常规nullifier,无法跟踪用户的跨提案投票,因为它们都具有相同的nullifier。为此,需要在每轮投票中使用新的随机假名。Semaphore的解决方案为在每轮混合一个唯一的随机值:the external nullifier。这个解决方案很强大,使得可build a set of all humans that everyone can build on。

6.1.3 signal claim

仍然以选举为例,每个用户都需要说出其决定。若简单地将用户的决定与零知识证明捆绑在交易中,存在一个问题:

  • 看到交易的攻击者可以替换用户的决定、复制证明并提前运行。

为了防止这种情况发生,我们需要将用户的决定与proof加密地联系起来。Semaphore支持将任意Signal附加到proof上以实现这一点。

6.2 当前进展

目前已在合约层将identity tree和usage以及nullifier实现做了分离,从而可支持更通用的用户场景。

已创建了rust版本的semaphore:

  • https://github.com/worldcoin/semaphore-rs

并将client库https://github.com/privacy-scaling-explorations/zk-kit 中的相关部分都由Typerscript迁移为了rust实现。已内部使用该哭来构建Worldcoin wallet——同时是支持本地生成Semaphore proof的identity wallet。该钱包为原始iOS和Android app,底层使用了跨编译器版本的semaphore-rs。该钱包预计在年内完全开源。

基本用例为:

use semaphore::{hash_to_field, Field, identity::Identity, hash::Hash, poseidon_tree::PoseidonTree, protocol::* };
use num_bigint::BigInt;

# Generate identity
let id = Identity::from_seed(b”secret”);

# Generate Merkle tree
let leaf = Field::from(0);
let mut tree = PoseidonTree::new(21, leaf);
tree.set(0, id.commitment());

let merkle_proof = tre.proof(0).expect(“proof should exist”);
let root = tree.root();

# Change signal and external_nullifier
let signal_hash = hash_to_field(b”xxx”);
let external_nullifier_hash = hash_to_field(b”appId”);

let nullifier_hash = generate_nullifier_hash(&id, &external_nullifier_hash);

let proof = generate_proof(&id, &merkle_proof, &external_nullifier_hash, signal_hash).unwrap();
let success = verify_proof(root.into(), nullifier_hash, signal_hash, external_nullifier_hash, &proof).unwrap();

assert!(success);

6.3 Semaphore扩展

当前致力于从以下2方面对Semaphore进行扩展:

  • 1)Identity insertion:当前每个叶子节点是逐个插入到Merkle tree中的,且更新的root值是在合约内计算的。由于Merkle proof可高效在ZKP内进行验证,Merkle tree采用poseidon hash来替换keccak hash。但是,Solidity中的插入是非常昂贵的(需要100万到200万gas)。Sequencer可将多个insertion批量在单个ZKP内,该ZKP 可聚合多个Merkle tree updates,从而有效降低identity insertion的开销。
  • 2)Proof verification:当前,每个semaphore proof独立提交和验证,使得相应的signaling开销约为30万gas。与identity insertion类似,可聚合多个proof,以摊平开销。不过,当前使用Groth16证明系统的semaphore,很难做这样的聚合。当前致力于升级支持聚合的更现代的证明系统。

为何不再Arbitrum或Optimism上部署呢?
原因在于Zero Knowledge proof仍需要大量的calldata,当前的L2无法满足这样的开销。聚合证明是唯一的方式,来降低单个proof的验证开销为sub-linear。

参考资料

[1] 2023年5月11日博客 WORLDCOIN COMMITS TO OPTIMISM’S SUPERCHAIN VISION AHEAD OF MAINNET LAUNCH
[2] 2023年5月9日twitter World App
[3] 2023年1月27日博客 OPENING THE ORB: A look inside Worldcoin’s biometric imaging device
[4] 2021年10月博客 HOW THE LAUNCH WORKS
[5] 2023年1月27日博客 UNDERSTANDING THE ORB AND WHY WORLDCOIN USES BIOMETRICS
[6] 2023年4月14日博客 PROOF OF PERSONHOOD: What it is and why it’s needed
[7] 2023年3月31日博客 HUMANNESS IN THE AGE OF AI
[8] 2023年4月3日博客 ALL ABOUT THE ENTROPY: Why irises beat faces and fingerprints for proving personhood
[9] 2023年2月16日博客 A primer on decentralization at Worldcoin
[10] 2022年4月22日博客 Privacy-Preserving Proof-of-Personhood Protocol
[11] 2023年2月10日博客 Privacy at Worldcoin: A Technical Deep Dive - Part I
[12] 2023年5月23日博客 Composability on World App: The protocols powering Worldcoin’s first wallet

你可能感兴趣的:(隐私应用,区块链)