本文介绍了Suffragium,一个利用零知识证明(ZKP)和全同态加密(FHE)构建的链上加密投票系统,该系统利用Zama的fhEVM来保护投票的隐私性、完整性和可验证性。Suffragium旨在通过加密技术,实现安全、私密且防篡改的投票过程,同时确保投票结果的透明和可信。
/
2024 年 11 月 6 日
-
Alessandro Manfredi
这是一篇由 Alessandro Manfredi 撰写的客座博客文章。
TLDR: Suffragium 是一个安全、保护隐私的投票系统,它结合了零知识证明 (ZKP) 和全同态加密 (FHE),以创建一个无需信任且防篡改的投票平台。利用 Zama 的 fhEVM,Suffragium 保留了安全投票系统的所有基本属性。
传统的投票系统虽然是民主的基础,但也面临着诸如以下的挑战:
随着技术的快速发展,改进投票过程的新机会不断涌现——但潜在的威胁也随之而来。为了保护和加强民主价值观,创新和改进我们的投票系统至关重要,使其适应现代安全和隐私标准。
探索 Suffragium — 一个旨在改变选举过程的新投票系统。Suffragium 利用全同态加密 (FHE) 和零知识证明 (ZK proofs),旨在维护安全投票的核心属性:隐私性、完整性、透明性和可验证性。这种方法不仅保护了选民的匿名性,还确保了每次投票都被准确计算,并免受操纵。
在 Suffragium 中,零知识证明在保护投票过程和维护隐私方面发挥着关键作用。选民通过注册时由当局发送的电子邮件生成的身份证明,获得匿名投票的权利。这些加密证明不包含任何可识别的信息,除了用于注册的电子邮件的哈希值。其他匿名措施,例如选择使用一次性电子邮件地址,可以保护选民免受可能泄露其参与情况的潜在攻击。
为了参与,用户需要经过了解你的客户 (KYC) 流程,以类似于传统选票验证的方式验证他们的身份。但是,此 KYC 流程的结构旨在防止当局了解用户是否或如何投票。ZK 证明是确定性生成的,防止同一选民重复投票。虽然理论上,当局可以通过创建不同的电子邮件地址来提交多个选票,但 Suffragium 秉承诚信原则运作,信任当局维护良好治理。请注意,可能还有其他(有时更简单的)验证选民身份的方式,但此示例更普遍地展示了如何将电子邮件地址与链上机密智能合约相关联。
一旦选民成功生成其加密证明,他们就可以投票。为了保护区块链上的选民隐私,Suffragium 避免以纯文本形式存储选票。相反,它利用 Zama 的 fhEVM,从而可以使用 FHE 在以太坊虚拟机 (EVM) 上实现机密智能合约。这项技术确保个人选票保持私密、安全且无法被任何人(包括当局)访问,从而在投票过程中保持机密性和信任。
投票。
要投票,用户调用 castVote 函数:
function castVote(
uint256 voteId,
einput encryptedSupport,
bytes calldata supportProof,
bytes calldata identityPublicValues,
bytes calldata identityProofBytes
) external {
bytes32 voterId = verifyProofAndGetVoterId(identityPublicValues, identityProofBytes);
if (_castedVotes[voteId][voterId]) revert AlreadyVoted();
_castedVotes[voteId][voterId] = true;
Vote storage vote = _getVote(voteId);
if (block.number > vote.endBlock) revert VoteClosed();
ebool support = TFHE.asEbool(encryptedSupport, supportProof);
vote.encryptedResult = TFHE.add(vote.encryptedResult, TFHE.asEuint64(support));
TFHE.allow(vote.encryptedResult, address(this));
vote.voteCount++;
emit VoteCasted(voteId);
}
投票期结束后,任何人都可以通过调用 requestRevealVote 来启动结果解密:
function requestRevealVote(uint256 voteId) external {
Vote storage vote = _getVote(voteId);
if (block.number <= vote.endBlock) revert VoteNotClosed();
uint256[] memory cts = new uint256[](1);
cts[0] = Gateway.toUint256(vote.encryptedResult);
uint256 requestId = Gateway.requestDecryption(cts, this.revealVote.selector, 0, block.timestamp + 100, false);
addParamsUint256(requestId, voteId);
vote.state = VoteState.RequestedToReveal;
emit VoteRevealRequested(voteId);
}
此调用触发链下中继器与持有解密密钥的密钥管理系统 (KMS) 进行交互。解密后,中继器调用回调函数 revealVote,以将最终结果存储在链上。
revealVote 函数使用解密后的结果更新 Suffragium 智能合约,使所有参与者都可以访问它们:
function revealVote(uint256 requestId, uint256 result) external onlyGateway {
uint256[] memory params = getParamsUint256(requestId);
uint256 voteId = params[0];
// Update state and publish results
Vote storage vote = _getVote(voteId);
vote.state = VoteState.Revealed;O
emit VoteRevealed(voteId);
}
调用 revealVote 后,所有人都可以看到最终的投票数,从而确保透明度和问责制,同时在整个过程中保持选民隐私。
考虑一下典型的政府投票流程:你开车前往指定的投票站,在长队中等待,然后在其他人包围的实体投票站投票。然后,你的选票被放入一个盒子中,稍后手动清点。此系统感觉过时,主要迎合习惯了亲自投票的年长人群,同时限制了年轻的、在数字时代出生的几代人的可访问性。
Suffragium 提供了一种变革性的替代方案。通过使用安全保密的智能合约将整个过程转移到链上,它可以确保投票是私密的、防篡改的,并且可以从任何地方访问。Suffragium 为现代投票解决方案树立了新的基准,使每个人都可以更轻松、更安全、更具包容性地参与民主进程。
对此帖子有疑问或想法?\ \ 加入 Zama 社区论坛,与我们的团队展开对话!我们已经创建了一个专门的线程,用于讨论与此主题相关的所有内容——欢迎你的参与。
Zama Bounty Program 第 7 季 \ 宣布 Zama Bounty Program 第 7 季,以及第 6 季的获奖作品。 2024 年 12 月 18 日\ \ Zama 团队
公告
推出 fhEVM Coprocessor:在 Ethereum、Base 和其他 EVM 链上运行 FHE 智能合约 \ 宣布 Zama 迄今为止最令人兴奋的产品:fhEVM coprocessor。 2024 年 12 月 6 日\ \ Rand Hindi
公告
fhEVM
Concrete ↗ Concrete ML ↗ FHEVM ↗ TFHE-rs ↗
博客 文档 ↗ Github ↗ FHE 资源 ↗ 研究论文 ↗ Bounty Program ↗ FHE STATE OS
与专家交谈 联系我们 X Discord Telegram 所有社区频道
隐私对于电子时代的开放社会是必要的。隐私不是秘密。私事是不想让全世界知道的事,但秘密是不想让任何人知道的事。隐私是选择性地向世界展示自己的力量。如果双方有某种交易,那么每一方都会记住他们的互动。每一方都可以谈论他们自己对这件事的记忆;谁能阻止它呢?你可以通过法律来禁止它,但是言论自由,甚至比隐私更重要,是开放社会的基础;我们不寻求限制任何言论。如果许多当事人在同一个论坛上一起发言,每个人都可以对所有其他人发言,并将关于个人和其他当事人的知识汇总在一起。电子通信的力量促成了这种群体言论,并且它不会仅仅因为我们可能希望它消失而消失。由于我们渴望隐私,我们必须确保交易的每一方只了解该交易直接需要的知识。由于任何信息都可以被谈论,我们必须确保我们尽可能少地透露信息。在大多数情况下,个人身份并不重要。当我在商店购买杂志并向店员支付现金时,没有必要知道我是谁。当我要求我的电子邮件提供商发送和接收消息时,我的提供商不需要知道我在和谁说话,或者我在说什么,或者其他人对我说什么;我的提供商只需要知道如何将消息发送到那里以及我欠他们多少费用。当我的身份被交易的底层机制泄露时,我就没有隐私。我不能在这里有选择地展示自己;我必须总是展示自己。因此,开放社会中的隐私需要匿名交易系统。到目前为止,现金一直是主要的这种系统。匿名交易系统不是秘密交易系统。匿名系统使个人能够在需要时以及仅在需要时才披露其身份;这是隐私的本质。开放社会中的隐私还需要密码学。如果我说了一些话,我希望只有我打算让它听到的人才能听到。如果我的言论内容对全世界都可用,我就没有隐私。加密是指示对隐私的渴望,而使用弱密码学加密是指示对隐私的渴望不太强烈。此外,当默认设置为匿名时,为了有把握地揭示某人的身份,需要使用加密签名。我们不能期望政府、公司或其他大型的、没有面孔的组织出于他们的恩惠而赋予我们隐私。谈论我们对他们有利,我们应该期望他们会谈论。试图阻止他们的言论是与信息的现实作斗争。信息不仅仅是想自由,它渴望自由。信息会膨胀以填满可用的存储空间。信息是谣言更年轻、更强大的表亲;信息比谣言跑得更快,有更多的眼睛,知道更多,但理解得更少。如果我们期望拥有任何隐私,我们必须捍卫自己的隐私。我们必须走到一起,创建允许匿名交易发生的系统。几个世纪以来,人们一直用耳语、黑暗、信封、关着的门、秘密握手和信使来捍卫自己的隐私。过去的技术不允许强大的隐私,但电子技术可以。我们,密码朋克,致力于构建匿名系统。我们正在用密码学、匿名邮件转发系统、数字签名和电子货币来捍卫我们的隐私。密码朋克编写代码。我们知道必须有人编写软件来捍卫隐私,并且由于我们不能在所有人都这样做的情况下获得隐私,因此我们将编写它。我们发布我们的代码,以便我们的密码朋克伙伴可以练习和使用它。我们的代码供全世界所有人免费使用。我们不太关心你是否不赞成我们编写的软件。我们知道软件无法被销毁,并且广泛分散的系统无法被关闭。密码朋克谴责对密码学的法规,因为加密本质上是一种私人行为。事实上,加密行为将信息从公共领域移除。即使是反对密码学的法律也只能达到一个国家的边界和它的暴力手臂的延伸。密码学将不可避免地传播到全球,并伴随着它所实现的匿名交易系统。为了使隐私得到广泛传播,它必须成为社会契约的一部分。人们必须走到一起,为了共同利益而部署这些系统。隐私的延伸范围仅限于一个人的同伴在社会中的合作程度。我们,密码朋克,寻求你的问题和关注,并希望我们能够与你互动,以便我们不会欺骗自己。但是,我们不会因为有些人可能不同意我们的目标而改变我们的路线。密码朋克们正在积极努力使网络对隐私更加安全。让我们一起快速前进。前进。作者:Eric Hughes。1993 年 3 月 9 日。
- 原文链接: zama.ai/post/encrypted-o...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!