Worldcoin认为:隐私是一项基本人权,不应该为了使用重要的金融或身份服务而牺牲隐私。
Worldcoin的目标是:
Worldcoin Foundation和其早期贡献者Tools For Humanity(TFH),与2023年5月11日发表声明称:Worldcoin在主网推出前将致力于Optimism的superchain愿景,以推进基于OP Stack的扩容链生态。
World ID:为去中心化的、隐私优先的身份协议,未来将部署在OP主网。
TFH的World App:为首个支持使用Worldcoin交易、数字资产交易以及稳定币交易的钱包,未来也将迁移到OP主网。
将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识别标记。
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设计已开源:
卸下外壳时,可以看到主板、光学系统和冷却系统。大部分光学系统隐藏在外壳中,与外壳一起形成防尘防水环境,即使在具有挑战性的环境中也能长期使用。
Worldcoin可利用以太坊现有的L1和L2技术,2周前仅在Polygon链上部署了合约。未来将在以太坊主网和Optimistic Rollup上部署合约。
在注册和claim reward环节中的主要角色有:
1)用户:希望注册的用户。
2)Orb设备:用于扫描用户虹膜的已认证设备。会对用户注册时的公钥哈希以及虹膜哈希进行签名。【Orb设备无法作弊,因后续Sign-up Sequencer会做签名有效性、虹膜哈希唯一性验证。】
3)Sign-up Sequencer:为链下服务,用于:【需信任Sign-up Sequencer服务,该服务由Worldcoin官方运营维护。】
4)链上合约:负责:
结合现有开源代码,已认证Orb设备的签名公钥信息目前未在合约中记录。
以Merkle tree形式记录用户注册时的公钥哈希值。该Merkle tree中维护了所有注册成功的公钥哈希集合{pk1_hash,pk2_hash,…,pkn_hash}。
claim reward时验证proof,nullifier并mint reward token。
用户注册阶段流程为:
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个聚焦的虹膜图像。
6)除非用户明确要求将其数据备份并用于未来升级和系统安全性以及包容性改进,否则所有图像将在Orb设备上销毁。
7)Orb向sign up提交待签名消息,待签名消息包含了在第5)步中计算的红魔码。Orb的私钥在Trusted Platform Module(TPM)中,以认证该消息来自于合法的Orb设备。以Orb私钥对该消息进行签名。
8)sign up服务与uniqueness服务一起,会将Orb设备所提交的虹膜码 与 现有的所有虹膜码 比对计算Hamming distance。若distance低于某阈值,则认为该注册是重复的,并拒绝该注册:
用户claim reward流程为:
使用World ID,在不泄露个人信息的情况下,证明其为unique human:
为集成World ID,应用只需要简单的在其前端增加JS SDK,从而可构建与World App的连接(即生成相关的QR码或deeplink)来接收ZKP,并通过on-chain 或 Developer Portal API 来验证该proof。
人工智能的进步使得在互联网上很难区分人工智能和人类,这突出了对真实人类识别和验证的需求。重要的是,这为人工智能资助的非国家UBI和数字货币的全球公平分配开辟了道路。World ID最终将使协议由人民管理,确保协议惠及所有人。
随着人工智能的快速发展,迫切需要能区分线上人工生成内容以及AI生成内容 的能力,为此proof of personhood(PoP)应运而生。
PoP机制建立与个体的humanness和uniqueness,可将其看成是建立数字身份的第一个也是最基本的组成部分。
一旦用户在Orb上验证了其humanness,其将收到一个unique PoP(Proof of Personhood) credential on a compatible digital wallt。首个电子钱包为WorldApp,未来将有更多。
Worldcoin构建的Privacy-Preserving Proof-of-Personhood Protocol (PPPoPP),初始目标是给10亿人空投token。随之发现,不仅需要在硬件端(即Orb)开发大量基础设施,还需要在crypto/protocol端开发大量基础设施。
由于Orb使用生物学特征来注册,需要将该生物学特征 与 钱包的建立以及未来的交易 解耦,从而确保用户隐私。
Worldcoin选择了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大模块:
用户在创建ZKP证明时,需同时证明以下3个重要的cliams:
总体代码示例为:
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
用户存储在Merkle tree中的为公钥(identity commitments)。为证明membership,用户需证明其拥有私钥,并提供Merkle proof证明相应的公钥在Merkle tree中。不过,其中的Merkle proof是在zero-knowledge proof内验证的,这样就没人知道使用的为哪个叶子节点或者具体的公钥值。因此可提供匿名性。对于外部观察者,仅可看到来自某member的proof,但无法区分具体是哪个member。
几乎在所有应用中,都希望每个成员做某事仅做一次(如投票 或者 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。
仍然以选举为例,每个用户都需要说出其决定。若简单地将用户的决定与零知识证明捆绑在交易中,存在一个问题:
为了防止这种情况发生,我们需要将用户的决定与proof加密地联系起来。Semaphore支持将任意Signal附加到proof上以实现这一点。
目前已在合约层将identity tree和usage以及nullifier实现做了分离,从而可支持更通用的用户场景。
已创建了rust版本的semaphore:
并将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);
当前致力于从以下2方面对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