LWN: Benenios - 用于不公开投票的系统!

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析 把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。 阅读详情

关注了就能看到更多这么棒的文章哦~

Belenios: a system for secret voting

By Jake Edge
March 8, 2022
DeepL assisted translation
https://lwn.net/Articles/887077/

最近关于 Debian 一般决议(GRs)改用秘密投票(secret voting)的讨论,自己也变成了一个 GR,提出了一个主题就是收集人们希望看到的 Debian 投票系统未来该拥有的特性。其中提到了一个系统,名为 Belenios,它提供了一个开源的 "可验证的在线投票系统(verifiable online voting system)"。无论 Debian 是否选择改用秘密投票,Belenios 对那些可能正在寻找满足他们自己投票需求的项目和组织来说,似乎可能是一个挺好的方案。

Background

正如 Debian GR 的讨论和来回修正中所强调的,秘密投票对不同的人来说其实理解都不一样。但一般来说,人们首先希望选举是可信的,这意味着投票者(以及会受到最终结论影响的人)需要了解并相信这个投票和统计结果的背后机制。有一些加密协议可以用来从技术上解决部分或所有这些问题,但有一些社会方面以及其他方面的考虑,从而导致它们在实际选举中可能是无法使用的,至少对于各级政府举行的选举来说还是不够的。我们对 2020 年 linux.conf.au 上的一次谈话的报道(https://lwn.net/Articles/810465/ )可以帮助大家了解其中的一些原因,也介绍了投票系统的加密协议实现得并不好。

Debian 目前有两种投票方式:一种是每年一次的 Debian 项目负责人(DPL, Debian project leader)选举,今年的 DPL 选举于 3 月 5 日开始;另一种是跟 Debian 开发者(DD)提出需求所发起的 GR。只要有六个开发者就可以通过 GR 针对任何一个问题来投票了,因此只要有一个赞助商再加上五个跟随者就可以满足要求了。所有的投票都是通过 PGP 签名的电子邮件进行的,投票结束后,选票和投票人名单会公布出来供所有人查看。不同的是,DPL 的选举结果不告知投票者各自的选票内容,而 GR 的投票者和他的选票内容一一对应的,所以每个人都可以看到每位投票者对选票上的选项进行排序的情况。

Debian 使用 Condorcet 投票系统,允许选民对候选人或提案进行排序,并有一些特定的机制来处理低概率会出现的一些循环结果。这已经是一个相当复杂的方案,需要选民进行一些复杂的思考,来了解它的工作原理。还有一些其他形式的排名投票工具已经被用于政府(和其他)选举中,从而试图避免一些技术含量不高的选举的复杂性。

对于这两种类型的 Debian 选举,任何人都可以使用公布的选票来验证所公布的结果是否与所投的票数相符,任何 DD (Debian Developer)也可以直接看到他们记录的票数与他们在 GR 选举中的投票方式是相符的。对于 DPL 选举,当正确签名的选票通过电子邮件提交时,devotee 投票收集系统会返回个人的秘密编号(secret code)给投票者,它可以配合统计表中报告的哈希值一起来验证他们的投票是否包含在选票中了。在这两种情况下,没有投票的开发者可以通过检查 DPL 选举的单独选民名单或决议的统计表来确保没有记录他们的投票。所有这些都增加了 Debian 投票的透明程度。

同时,一些选民对于把他们的选票与他们自己的名字一起公布在 GR 上感到不舒服,特别是一些有争议的决议,例如 2021 年关于 Richard Stallman 回到 FSF 董事会的立场声明的 GR 就是一个例子。于是就引出了这次的提议(resolution),希望能改变提议投票结果的报告方式,就像现在的 DPL 选举的方式一样,不要再把选民和他们的选票之间的联系公布出来。

这个秘密投票提案最初版本中的多个要点里,还有要求把通过电子邮件投票的要求从 Debian 章程中删除(目前还有另外两种投票方案,后续会作为 GR 的一部分进行投票来决定)。这就可以让项目秘书(project secretary)尝试其他的投票机制来增强目前基于电子邮件的系统;然而,一些开发者担心这也可能会导致今后取消通过电子邮件投票的功能。长期秘书(longtime secretary) Kurt Roeckx 针对后续可能会取消电子邮件投票要求,因此计划先研究一下 Belenios。

Belenios

Belenios 系统似乎提供了支持 GRs 秘密投票的人的大部分需求。它是由 Stéphane Glondu 开发的,他是一位 Debian 开发者,此系统通过同态加密(homomorphic encryption)为投票提供隐私性以及可验证性。使用该机制的话,就没有人可以真正看到任何一位选民的选票内容,投票结果可以在不解密选票的情况下就统计出来。其主页上对系统的可验证性(verifiability)描述如下:

每个选民都可以检查自己的选票是否被计算在内,而且只有符合条件的选民可以投票。[可验证性]依赖于投票箱(ballot box)是公开的(选民可以检查他们的选票是否已经收到)以及统计结果是可以公开验证的(任何人都可以重新计算选票)来实现。此外,选票是由选民的凭证来签名的(也就是只有符合条件的选民才能[投票])。

"how it works" 的网页给出了关于这个过程的更多细节,Belenios 的论文里更加详细。选民有一套用在网页界面的登录凭证(用户名/密码),以及一个单独交流的凭证,即用户的私人 ElGamal 密钥。服务器会存储相应的公钥,选民做出选择后在客户端里使用私钥对选票进行加密,并将其发送到服务器。

服务器使用公钥来验证选票,使用客户端提供的零知识证明(zero-knowledge proof),来证明选票是有效的(比如说只包含那些选择了适当数量的选项的投票)。零知识证明是一种证明断言(assert)的方法,除了能证明断言是真实之外,不会把给出验证证明的实体的任何额外信息暴露出来。在这种情况下,既可以证明选票的有效性,又不会给服务器任何关于选票中实际投票选择内容的信息。相关的维基百科链接中有一些 "现实世界" 的例子,以及零知识证明概念的数学背景。

等服务器验证了选票之后,它就会在选举的公共信息页面上列出该选票的 "追踪号码(tracking number)"(加密过的选票的一个哈希值)。选民可以在该页面上查找到他们的追踪号码,并在本地使用他们的私钥就可以查看到他们在选票上的实际投票记录。其他人无法解密这个选票。这一对密钥通常是由服务器生成,私钥在发送给用户后就被服务器丢弃。但也可以是由另一个实体来生成密钥并将两部分分别传送给各自的所有者。安全分发私钥显然是一个重要要求。不应该选择使用未加密的电子邮件来发送。

选举的结果由统计过程(tally process)决定,它的描述如下:

默认情况下,选举服务器会存储用于解密的密钥。加密方案有一个特殊的属性,称为同态性(homomorphism):从加密的选票中,任何人都可以不利用任何密钥就通过组合密码文本来计算出加密过的结果(每个候选人的票数之和)。这样一来,只有最终的这个加密过的结果需要被解密,这就保证了投票的隐私性:单个选民的具体选票永远不会被解密。

选举的最终加密结果可以由一个或多个被指定为解密机构的选举管理员来进行解密;所有这些机构需要配合来解密最终结果。这里利用了另一个零知识证明来证明这个加密过的加密结果就是投票的结果,同样不需要对单个选票进行解密。在某种程度上来说,这听起来像是 "神奇的密码学仙法(magic cryptographic fairy dust)",但其底层所依据的原理已被建立好并得到了充分的理解,至少在密码学领域是这样认为的。

用于审计和验证(auditing and verifying)过程的工具也在 Belenios 代码仓库中,尽管该项目欢迎其他人创造新的工具来配合该系统使用。协议规范 "应该提供了所有必要的细节(当然,也欢迎提出问题)"。Belenios 在线服务器可用来进行多达 2500 名选民的选举,当然,也可以在其他的个人服务器上运行其代码来创建自己的服务器。FAQ 中有关于如何实现这个做法(当然也包括许多其他主题的答案)。网站上似乎没有提到的一件事是,是否对 Belenios 代码进行过安全审计(security audit)或正式验证(formal verification);我们感觉在它被采用之前,至少对某些类型的投票来说可能还是要求这个系统的代码先要进行安全审计或正式验证的。

进行投票所选择的默认机制是一种批准投票(approval voting)的形式,投票者可以选择他们认为可以接受的一个或多个候选人:"例如,她可以在 10 个候选人的名单中选择 3 到 5 个候选人"。对其他投票机制(包括 Condorcet 投票)的支持正在开发中。

Back to Debian

这个想要从章程(constitution)中删除 "通过电子邮件方式" 这一要求的想法,是 Sam Hartman 最初提案的一部分(GR 页面上的提案 A),一些人对此并不支持,尽管他们可能也倾向于使用秘密投票方式。于是这就产生了提案 B,它只采用了秘密投票的语言,不再提及 "电子邮件" 相关的要求,并且没有像提案 A 一样添加关于推翻或取代秘书的两项规定。还有提案 C,它是表示仍然希望决议要进行公开投票,之所以加上这个选项,部分原因是因为其他提案中没有说明秘密投票系统的实施细节。

如果提案 B 得以通过,起码我们可以在 Belenios 中加入电子邮件投票收集机制,这似乎是合理做法。它可以使用 Debian 开发者在发行版钥匙圈(keyring)上的公共 PGP 密钥来加密 ElGamal 私钥,从而创建正确签名过的选票,这些密钥可以被发送给每个开发者。或者,有可能把 Belenios 修改为直接使用开发者的 PGP 密钥签名过的电子邮件。这可能会让一些投票者使用 Belenios 的网络应用来进行投票,而另一些人则像往常一样使用电子邮件。显然,如果提案 C 获胜,就不需要任何改动了。

用于 DPL 选举的系统有一些已知弱点,用户可能被迫透露他们的秘密编码,或者一群用户可能合作来把他们的投票 unmask 掉,这两种情况都会破坏选票的保密性。这些问题在 Belenios 中并没有得到真正的缓解,因为 ElGamal 私钥扮演着与 devotee secret code 相同的角色,但 Debian 发行版已经在这些可能的攻击下生存了很长时间了,不用太担心。

关于秘密投票决议的讨论期一直持续到 3 月 11 日,因此在此之前,其他提案可能会被加入到投票中。两周的投票期大概会在此后不久开始。看起来至少有可能,甚至是非常有可能的是,提案 A 在清理一些不相关的模糊之处(secretary overreach)的方面迈的步子有点太大了;此外,取消电子邮件方式对一些人来说也可能是太过了。似乎有合法的理由不对 GR 进行公开投票,即使最有争议的往往是政治问题,而不是技术或 Debian 内部的问题,许多 DD 认为这些问题根本就不应该被投票。无论如何我们应该在三月底左右知道 Debian 项目对秘密投票的观点。如果最终选择了采用某种形式进行秘密投票,那么也许 Belenios 可以被修改来适合这种需求。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

0aecb041bce8cb602861bf3254cab90d.png

保姆级教程:手把手教你用RKISP TURN为RV1106生成和配置IQfile(附AIQ版本匹配避坑指南) 本文提供RV1106 ISP调试的完整指南,详细讲解如何使用RKISP TURN工具生成和配置IQfile,包括环境搭建、参数调试、设备树配置及常见问题解决方案。特别强调AIQ版本匹配的重要性,帮助开发者避免常见陷阱,提升图像信号处理效率。 阅读详情

相关推荐

手把手教你:如何为自制的STM32H7飞控板适配PX4固件(基于NuttX)

本文详细介绍了如何为自制的STM32H7飞控板适配PX4固件,基于NuttX系统进行移植。从硬件设计规范到软件环境配置,再到PX4固件的移植与调试,提供了完整的实战指南。特别分享了如何复用FMU-v6u参考设计以节省开发时间,并解决了常见问题,帮助开发者快速实现高性能飞控系统的搭建。

weixin_27697385的博客 475

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 390

点到面点云配准(Point To Plane)算法知识详解和详细推导,C++代码实现

点到面 ICP (Iterative Closest Point) 是在 3D 点云配准中常见的一种变体,通过最小化点到对应面(由法向量定义的局部平面)的距离来提高收敛速度和精度。

qq_36812406的博客 1809

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 228

微信公众号 - 超详细 H5 网页接入微信支付功能,开发网站微信支付最详细的教程示例代码(微信公众号前端支付 JS-SDK / JSAPI 微信H5授权登录支付,唤起微信支付)最新超级详细教程

H5页面接入微信支付功能,前端网页端怎么做微信JSAPI支付,vue网站接入微信JSSDK支付,vueH5项目如何做使用微信支付,端h5调用微信支付jsapi方法,前端vue开发的H5网站怎么微信支付最详细的教程示例代码,vue怎么调取微信支付流程,将H5接入微信支付退款,vue网站怎么搞微信支付,H5前端开发网站在微信环境内H5调起微信支付,react项目h5如何调用微信支付的方法,nuxt.js项目vueH5集成微信JS支付,网站怎么做出H5微信公众号支付,请问vue.js这个框

🏆 前端领域优质创作者 8124

8.26华为OD机试真题 新系统 - 字符串回文判 (Java/Py/C/C++/Js/Go)

8.26华为OD机试真题 新系统 - 字符串回文判 (Java/Py/C/C++/Js/Go)

算法大师! 1230

Python+Agent入门笔记(二):列表推导式、模块和异常,这些写 Agent 前得会

接上一篇《Python+Agent入门笔记(一)》。基础语法跑通之后,这篇聊几块日常写脚本绕不开的东西。还是按 JS/Go 开发者的视角写,尽量记录我实际卡过的地方。

qq_41241612的博客 430

【SI案例分享】1000 BASE-T1共模终端的分析与评估

以太网的MDI接口应用中,共模端接网络的应用广泛,并且,其电路参数从100 BASE-T1到1000 BASE-T1保持了相同的参数定义,这就不得不引起使用者的怀疑,毕竟百兆和千兆以太网的工作频段差异巨大,这样的设计真的可以做到上下兼容吗?本文针对此问题,进行了深入的探讨。

一只豌豆象的博客 1364

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 205

【论文复现】——基于欧式聚类的车载点云道路提取

针对车载激光点云道路信息提取的问题,提出了一种基于欧式聚类的道路提取方法。首先通过统计滤波去除噪点以免对后续处理结果产生影响,然后用坡度滤波去除路坎点,使道路边界与人行道、绿化带等与路坎相连的地物形成10~25 cm的高程阶跃,最后用欧式聚类将路面点云与其他地物点云聚类为一簇或多簇并保留道路簇,从而实现道路点云的精确提取。

点云侠的博客 1134

SAP使用XCO框架创建RAP所有对象

通过XCO框架自动生成SAP ABAP开发对象。

DeveloperMrMeng的博客 548

微调数据集构建:清洗、标注、格式转换完整流程

摘要解决微调数据直接抓取导致的噪声污染、模式崩溃与Token错位问题。适用于需为大模型SFT阶段构建高质量训练集的数据与算法工程师。读完可获得包含启发式清洗、MinHash去重及ChatML格式对齐的完整可运行数据流水线。关键词数据清洗、MinHash去重、数据标注、ChatML、SFT数据集、数据配比背景与问题大模型微调效果的上限由数据质量决定,直接使用未经处理的原始语料极易引发模型复读、幻觉与指令遵循能力退化。

2402_85729970的博客 486

OpenWRT使用4G/5G无线网卡模块上网

将4G/5G开发板插入设备,终端输入lsusb或lspci,看设备是否识别到4G/5G模块。

1万+

Python3 协程:异步编程的核心机制与实战

协程是解决I/O密集型任务等待瓶颈的高效机制,相比线程更轻量、无锁开销。从yield到async/await的演进,使异步编程语义清晰、易于理解。通过async/await可实现并发执行多个任务(如gather、create_task),显著提升网络请求、爬虫等场景性能。关键在于使用异步库(如aiohttp)替代同步库,避免阻塞事件循环。合理控制超时与并发数,才能发挥协程最大优势。

Lxn2zh的博客 159

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

python如何控制浏览器

Python 可以通过 Selenium、Playwright 等工具实现浏览器自动化,从打开网页到执行复杂交互操作均可脚本化完成。Selenium生态成熟

2601_96797912的博客 76

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 267

torch.compile 差异仅 1e-6,边界样本预测为何翻转

torch.compile 加速后输出与 eager 不一致,部分预测翻转。逐层对比与 graph break 分析定位到动态分支翻转根因。容差回归仅适用于无分支翻转场景,零容忍场景应禁用编译。

昨日种种,皆成今我。今日种种,皆成新我。 158

Python 100讲课程导航:第08篇《Python input 与类型转换:构建可靠的交互程序》

本文详解Python中input()的返回类型为字符串,强调必须通过int()、float()等函数进行类型转换。重点讲解了输入验证的重要性,结合try-except处理ValueError等异常,实现可靠的交互程序。通过购物预算计算器实战,演示如何防范非法输入、处理边界值,并推荐使用Decimal避免浮点精度问题,提升程序健壮性。

铭渊老黄 133

【Python】国家中小学智慧教育平台电子教材批量下载与 PDF 合成实战

成果:两本语文电子课本(一年级上册 118 页 / 23MB、三年级上册 130 页 / 30.3MB),合计 248 页、约 54MB,单本下载加合成 40~60 秒,PDF 页数校验全部通过。经验教训SPA 站点的数据接口优先从 bundle 里挖,比抓页面稳得多;资源链接要按 private/public 分组看待,只取平台公开部分;页数、目录名这类“可推断”的信息,永远用实际响应验证一次;受限环境里“能不能跑浏览器”要在方案定稿前确认。后续计划:这版 PDF 是图片版,没有文字层;

木头大左的博客 122

魔塔社区微调训练Qwen2-1.5B-Instruct模型并烧录到‌RK3568开发板教程

本文基于Ubuntu 22.04 + CUDA 13.0.3环境,使用LLaMA-Factory框架对Qwen2-1.5B-Instruct模型进行LoRA微调,训练儿童故事生成专用模型。通过配置qwen模板、制作alpaca格式数据集、执行sft训练并合并LoRA权重,最终将模型转换为GGUF格式,并量化为Q4_K_M以适配RK3568嵌入式平台。全程支持国产镜像加速下载与显存优化,实现高效轻量化部署。

浅清秋慕夏的博客 184

【回眸】DeepSeek V4.1 Flash 快速上手与实战

本文介绍如何高效本地部署开源大模型,通过现代化工具链实现分钟级环境搭建。聚焦显存优化、一键安装、代码调用与多轮对话实现,解决“显存不足”“连接超时”等痛点,提供参数调优与结构化输出技巧,助力开发者在离线场景下快速构建稳定、高效的本地推理系统。

啤酒鸭的物联网开发记录博客 222

智叟云集-手机证据抓取系统的工程结构与应用入口

本文系统阐述手机证据抓取系统的工程结构与应用入口,涵盖四大层面:工程目录划分(Android、Python服务、Web页面、测试与构建工具);Android组件通过Manifest声明可启动页面,主界面由MainActivity管理;Python服务通过run.py解析参数并启动FastAPI应用,支持远程访问;浏览器页面采用HTML/CSS/JS分离架构,静态资源通过路径关联,实现动态交互。各模块分工明确,协同构建可运行的采集系统。

2301_77178996的博客 229

Java Arrays.asList 常见坑详解|UnsupportedOperationException、数组联动、基本类型 bug

解析 Arrays.asList 常见开发陷阱,演示 UnsupportedOperationException、底层数组引用共享、基本类型数组问题,区分 Arrays 内部 ArrayList 与 java.util.ArrayList,给出数组转 List 的各种场景正确代码。

weixin_42617033的博客 435

利用python中matplotlib.pyplot库绘制图

plt.plot(x,y) # x,y是每个点的坐标,plot()把每个点按顺序画折线。plt.subplots(2,2)表示绘制2*2的子图布局,axs[0,0]表示在第0行第0列绘制子图...coordinates_i[:,0]表示获取每一行(每一个spot)的第0列(x坐标)coordinates_i[:,1]表示获取每一行(每一个spot)的第0列(y坐标)plot.subplot(2,2,1) 表示子图布局是2*2的,开始绘制第一个。也可以导入数据绘制。可以设置color属性,设置颜色。

qq_46147236的博客 100

Spring Boot 自动配置原理

Spring Boot 自动配置由 @EnableAutoConfiguration 导入选择器,读取 jar 中 .imports 候选清单,经去重、排序、排除后逐类做条件判断,通过才注册 Bean。延迟导入让用户 Bean 优先,@ConditionalOnMissingBean 使默认配置让位。失效时查清单和 Negative matches。

2401_89855466的博客 368

【AI】方案设计:通用慢节奏策略游戏大模型智能体流水线开发架构设计——基于 OODA 文件总线与可插拔协议适配层

本方案设计了一种面向慢节奏策略游戏的通用智能体架构,通过C++与Python协同构建协议适配层,实现游戏状态与控制指令的解耦。核心采用文件目录作为唯一总线,基于OODA循环分阶段处理态势感知、研判、决策与执行,支持多协议接入、可审计回放、人在回路干预及自愈容错。大模型仅依赖统一结构化简报与通用指令,具备高兼容性与可扩展性,适用于复杂推演场景。

hknaruto的专栏 175

【随笔】KV缓存量化:省下的显存,要付出多少数值误差

用可运行量化器解释位宽、比例信息、分组和离群值的关系,核算KV缓存实际载荷,并给出Transformers配置与容量、延迟、质量验收方法。

code2cat的博客 452
上一篇: LWN:通用的地址空间隔离方案!
下一篇: LWN:为内核继续改善list遍历操作!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值