基于 RSA 盲签名的匿名认证调查系统 Noon
Anonymous Surveys with Authentication Using RSA Blind Signatures
Noon 用 RSA 盲签名把参与者身份与回答内容在数学上彻底解耦:签名服务器只对盲化哈希 m' = (m · r^e) mod n 签名,客户端去盲后经无会话 Cookie 的未认证连接提交,验证方用 m ≡ s^e mod n 校验。
1. 客户端设备
哈希与盲化
用秘密因子 r 乘以哈希值
m' = (m · re) mod n
已认证请求
m'(盲化哈希)
2. 签名服务器
盲签名
在看不到载荷 m 的情况下签名
s' = (m')d mod n
3. 客户端设备
去盲
移除盲化因子 r
s = (s' · r-1) mod n
未认证路径
零会话 Cookie
4. 公共验证者
匿名证明
在无法关联用户的情况下验证
m ≡ se mod n ✓
签名机构在看不到提交载荷 m 的情况下对盲化哈希 m' 进行签名。提交者将 s' 去盲后匿名提交。
大多数承诺提供“匿名反馈”或“保密投票”的 Web 应用依赖政策保证,同时却继续记录 IP 地址、会话 Cookie 和浏览器指纹。Noon 通过使用 RSA 盲签名密码学,在数学上切断了参与者身份与其回复之间的关联,从而消除了对组织信任的需求。
盲签名的密码学数学原理
盲签名由密码学家 David Chaum 于 1983 年首次设计,它使权威机构能够在未查看数字文档内容的情况下对其进行签名。生成的签名可由任何人使用签名者的公钥进行验证,但无法与原始签名交易相关联。
RSA 五步流程
- 设置:服务器维护一个 RSA 密钥对
(n, e, d),并公布公共模数n和指数e。 - Blinding: The client computes the digest of their answers
m = SHA256(Submission || Nonce). Choosing a random blinding factorrwheregcd(r, n) = 1, the client blinds the digest:m' = (m · re) mod n
- Signing: The server verifies that the user is authorized to submit, signs the blinded value
m', and decrements the user's signature balance:s' = (m')d mod n ≡ (md · r) mod n
- Unblinding: The client receives
s'and removes the random factorrby multiplying with its modular inverse:s = (s' · r-1) mod n ≡ md mod n
- Anonymous Verification: The client submits the submission data, nonce, and signature
sacross an unauthenticated connection. The server verifies that:m ≡ se mod n
无需去匿名化的认证
要在不识别提交者的情况下防止垃圾信息,需要一种解耦的两阶段架构:
- 步骤 1(已认证令牌交换):参与者使用标准认证方式(例如 OTP 或已验证账户)证明其资格。服务器验证权限并对盲化载荷进行签名,仅记录该特定账户使用了其提交权。
- 步骤 2(未认证载荷提交):客户端对签名去盲,并通过一个剥离了会话 Cookie、认证令牌或身份标识请求头的隔离网络请求,发送带有签名
s的答案。
密码学匿名真正重要的场景
大多数组织并非恶意泄露调查结果;它们是在架构上泄露的。当数据收集依赖行政信任时,真正的匿名性会在日常运营压力下崩塌。密码学解耦在多个关键场景中用数学保证取代了善意:
1. 高风险职场调查与第三方信任税
几乎每位员工都遇到过内部脉搏调查或季度评估上“严格保密”的免责声明,这些调查通常通过个性化电子邮件链接发送,或在公司 SSO 后要求认证。现实中,HR 仪表盘经常按团队、任职时间和部门筛选回复。当一个工程子团队只有四个人,其中一人对高管战略或经理能力给出尖锐评价时,去匿名化大约只需要三十秒。
这种动态造成了一种奇特的企业荒诞现象:公司每年花费大笔预算聘请 Culture Amp 或 Qualtrics 等第三方调查供应商,仅仅是为了向自己的员工提问。领导层无法开展内部反馈表单,因为员工知道内部 IT 管理员和经理掌控着数据库。为了获取真实数据,领导层将调查外包给外部供应商,并附上一项合同承诺:供应商保证只向雇主回传汇总后的分数。
然而外包并不能解决架构问题,只是把它挪了个地方。第三方供应商仍会在集中式云数据库中记录员工电子邮件地址、会话 cookie、IP 地址和原始调查答案。如果该供应商遭遇数据泄露、错误配置 API 端点,或在雇佣纠纷中面临诉讼取证,整段未经脱敏的反馈历史就会暴露。此外,在供应商仪表盘上交叉比对人口统计维度(例如将地点与职级结合)往往仍会去匿名化受访者。
有了 Noon,组织无需再花钱请外部诚信裁判。资格验证与响应接收被彻底分离。内部身份提供方验证提交者持有有效员工账户,并签署一个盲化令牌,仅记录该用户已使用其提交权。一旦去盲,响应便通过未经认证的连接传输。数据库不存储指向员工记录的外键、不存储跟踪 cookie,也不存储用户 ID。即便高管团队与数据库管理员合谋直接检查数据库,数据关联也根本不存在,无从恢复。
2. 数字选举、治理与董事会投票
电子投票历来难以解决一个顽固的冲突:如何在执行严格资格(一人一票)的同时,保持不可触碰的秘密投票。
传统投票平台通过电子邮件、短信 OTP 或政府身份证件对用户进行认证,然后将所投选票记录在同一个应用数据库中。如果该数据库被传票调取、泄露或被内部人员查看,选票保密性便荡然无存。持异议者可被悄然审查、边缘化或施压。
RSA 盲签名干净利落地解决了这一权衡:
- 资格验证:选举机构对照登记名册核验选民,验证其凭证,并签署一个盲化的选票序列号,而看不到选票内容或最终序列号。
- 无关联投票:选民的客户端在本地对签名去盲,并通过未经认证的通道将选票投入公开收集端点。服务器用选举机构的公钥验证签名,并将选票追加到账本中。
- 无跟踪的防重放:服务器将每张选票去盲后的 nonce 记录在一个已用令牌集合中。尝试用同一 nonce 提交第二张选票会因重复而失败,而伪造未经授权的选票则无法通过密码学验证。
3. 举报、安全报告与事件复盘
在医疗、航空和软件基础设施领域,事后审查和安全报告依赖于揭露令人不安的真相:未遂故障、被绕过的安全控制或被忽视的警告。当报告系统要求持续的用户身份时,初级工程师和操作员会因害怕被指责或正式处分而犹豫是否报告错误。
通过强制实施数学盲化,报告平台可以保证提交来自经授权报告的已验证内部人员,同时保证报告无法追溯到发出警报的人。
网络层匿名性与未来加固
虽然盲签名使密码学上的载荷关联变得不可能,但在高风险环境中还必须解决网络层侧信道问题:
- 通过 Tor / 代理路由:将签名请求与提交请求的网络路径分离,以防止 IP 关联。
- 时间解耦:在接收签名与提交响应之间加入随机延迟,以挫败时序分析。
- 客户端沙箱化:标准化用户代理字符串和标头,以防止浏览器指纹识别。
亲自尝试 Noon
体验由 RSA 盲签名驱动的零知识表单和调查。
你也可以在 GitHub 上探索 Noon 的开源实现:github.com/lupyd/noon。
来源:Hacker News · blogs.lupyd.com