0. 总体结论
结论一:Dora Vota 作为 Cosmos/CometBFT Appchain,本身不具备端到端 post-quantum security。
它的链级安全主要继承 Cosmos SDK、CometBFT、IBC 与 CosmWasm 生态。Dora Vota 依赖 cosmos-sdk v0.47.17、cometbft v0.37.5、ibc-go/v7、wasmd 与 wasmvm,并在应用层启用了 auth、bank、staking、slashing、gov、group、ibc、CosmWasm 等模块。该架构的交易认证、验证人共识签名、IBC 轻客户端安全性仍然依赖传统椭圆曲线签名体系,因此面对具备密码学相关能力的量子计算机时,链级认证与共识层不具备抗量子性。(github.com)
结论二:aMACI 在经典密码学模型下是一个结构完整、设计复杂的匿名/抗合谋投票系统,但它不是 post-quantum secure。
aMACI/MACI代码包含 BabyJubJub、EdDSA-Poseidon、ECDH、ElGamal、Poseidon、Groth16/PLONK、BN254 等组件;电路侧包含 AddNewKey、ProcessDeactivate、ProcessMessages、TallyVotes 等核心电路。这些核心组件,包括投票指令认证、加密消息隐私、deactivation/new-key 匿名性、rerandomization 隐藏性、zkSNARK 证明 soundness,均不同程度依赖椭圆曲线离散对数、配对曲线或椭圆曲线群假设。(github.com)
结论三:aMACI 最严重的抗量子问题不是哈希,而是“公钥密码层 + 证明系统”。
Poseidon、SHA-256、Merkle tree、hash chain 等哈希型组件在量子环境下会受到 Grover 类型平方根加速影响,但它们不是系统最薄弱点。真正的高危点是 BabyJubJub ECDH、BabyJubJub ElGamal、EdDSA-Poseidon、BN254 Groth16。NIST 对后量子迁移的基本判断也是:传统 RSA、DSA、ECDSA、EdDSA、ECDH 等公钥密码会受到大型量子计算机威胁,而哈希/对称类原语主要面对的是安全位数折半性质的泛型攻击。(csrc.nist.gov)
1. 分析范围与威胁模型
本文只做 post-quantum cryptographic analysis,分析对象包括:
- Dora Vota:基于 Cosmos SDK / CometBFT / CosmWasm 的 Appchain。
- aMACI:重点分析匿名投票协议、电路、合约验证与密码原语。
这里的“抗量子性”指:在攻击者拥有 CRQC,cryptographically relevant quantum computer 的前提下,系统关键安全属性是否仍然成立。核心量子攻击模型如下:
NIST 已在 2024 年发布后量子密码主标准,包括用于密钥封装和签名的 FIPS 203、FIPS 204、FIPS 205;这说明传统公钥密码被量子威胁替代并非抽象学术问题,而是标准化层面已经明确处理的问题。(csrc.nist.gov)
Part I:Dora Vota 抗量子性分析
2. Dora Vota 架构与密码暴露面
Dora Vota为DoraFactory构建的appchain,支持aMACI,用于投票、加密民意调查、前沿科技治理、公共物品资助。它是一个 Go 语言为主的 Cosmos 链,依赖 Cosmos SDK、CometBFT、IBC-Go、CosmWasm/wasmd/wasmvm,并提供标准链模块与自定义 sponsor contract tx 模块。(github.com)
链级密码暴露面可以分成五层:
Cosmos SDK 账户体系支持 secp256k1、ed25519 与 multisig 等公钥类型;CometBFT 默认会生成 Ed25519 共识密钥,并支持若干 validator public key 类型,包括 ed25519、secp256k1、secp256k1eth、bls12381 等。无论是 ECDSA/secp256k1、Ed25519,还是 BLS12-381,这些都不是后量子签名。(docs.cosmos.network)
3. Dora Vota 关键安全属性的量子影响
3.1 用户账户认证
Dora Vota 作为 Cosmos 链,用户交易授权依赖账户私钥签名。对于 secp256k1/ECDSA 或 Ed25519/EdDSA 类型账户,一旦公钥暴露,具备 CRQC 的攻击者理论上可以通过椭圆曲线离散对数恢复私钥,从而伪造交易签名。Cosmos SDK secp256k1 签名实现本质上是 ECDSA 风格签名,CometBFT/Cosmos中Ed25519 和 secp256k1 是标准支持类型。(pkg.go.dev)
影响:高
账户层的 post-quantum 风险不是“签名长度不足”,而是签名数学假设被 Shor 算法直接击穿。攻击者不需要暴力破解 mnemonic,也不需要入侵 HSM;只要能够从公开公钥还原私钥,账户控制权就失效。
3.2 验证人共识安全
CometBFT validator consensus key 默认是 Ed25519。验证人公钥通常是公开的,因为其他节点需要验证共识投票、区块提交和 validator set 更新。若攻击者可恢复验证人私钥,则可以伪造 prevote/precommit、制造双签、破坏 finality 或构造伪造 commit。(docs.cometbft.com)
影响:高
在 BFT 共识中,攻击者控制或伪造足够比例的验证人签名后,风险从单账户盗用上升到链级安全:超过三分之一可导致 liveness/finality 问题,达到三分之二级别则会威胁安全性与错误 finalization。量子攻击对验证人密钥的风险尤其严重,因为 validator public keys 是长期公开的信息。
3.3 IBC 与跨链安全
Dora Vota 代码中启用了 IBC core、transfer、fee、interchain accounts、Tendermint light client 等模块。IBC 的安全性依赖对端链区块头、validator set、签名与 Merkle proof 的组合验证。Merkle proof 本身主要依赖哈希,抗量子性相对较强;但 Tendermint/CometBFT 风格 validator signatures 不是抗量子的。(raw.githubusercontent.com)
影响:高
即使 Dora Vota 自身应用逻辑没有问题,只要跨链信任链中的任一关键链仍使用非 PQ(非抗量子) validator signatures,IBC 的最终安全也不是 post-quantum secure。IBC 的量子风险是组合式的:它继承了两端链及中间轻客户端所依赖签名体系的最弱点。
3.4 CosmWasm 与链上合约
Dora Vota 集成了 CosmWasm/wasmd/wasmvm。CosmWasm 本身是执行环境,并不自动提供 post-quantum 安全;合约是否抗量子取决于合约内使用的密码原语。aMACI 合约使用 Groth16 proof verification、BN254 相关验证逻辑和 BabyJubJub/Poseidon 相关工具,因此从合约级来看,它也不具备完整 PQ 安全性。(raw.githubusercontent.com)
3.5 哈希、Merkle、状态承诺
状态承诺、Merkle proof、哈希链等组件相较于签名和 ECDH 更抗量子。Grover 算法会降低哈希 preimage 搜索复杂度,但 SHA-256 这类 256-bit 输出在 preimage 层面仍有约 128-bit 级别的量子安全边际。NIST 对 PQ 安全级别也把哈希/对称类攻击与公钥崩溃区别对待。(csrc.nist.gov)
影响:中。
Dora Vota 的哈希/状态承诺不是最主要 PQ 风险点。真正高危的是账户签名、共识签名、IBC validator signatures、合约内椭圆曲线/配对证明系统。
4. Dora Vota 抗量子风险评级
Dora Vota 总体判断:
Dora Vota 是一个典型现代 Cosmos appchain,在经典安全模型下依赖成熟生态组件;但从 post-quantum 角度看,基础链并不抗量子。其抗量子瓶颈位于签名与共识,而不是业务模块。
Part II:aMACI 协议抗量子性分析
5. aMACI 架构与核心安全目标
aMACI电路包括:
这些电路还共享 ECDH、ElGamal encryption/decryption、Poseidon hashing、signature verification、Merkle/quinary tree、message parsing 等组件。(github.com)
6. aMACI 的经典安全逻辑
aMACI 的核心目标是解决原始 MACI 中 operator/coordinator 能够观察身份关联的问题。原 MACI 中链上消息对外隐藏,但 operator 由于需要解密和处理消息,可能看到用户行为与身份之间的关系;aMACI 使用 deactivation、new key、ElGamal rerandomization、nullifier 等机制,使旧 key 与新 key 的关联在经典假设下难以被 operator 证明或识别。(ethresear.ch)
从代码与电路看,aMACI 的经典安全结构大致如下:
- 用户拥有 BabyJubJub 私钥/公钥。
- 投票或状态变更消息通过 ECDH 派生 shared key,再用 Poseidon cipher 解密成 command。
- command 使用 EdDSA-Poseidon 签名验证。
- deactivation 与 add-new-key 流程使用 ElGamal rerandomization 隐藏旧 key 与新 key 的关联。
- nullifier 使用
Poseidon(oldPrivateKey, pollId),防止同一旧 key 重复激活/重复添加。 - Groth16 proof 证明状态转换、deactivation、tally 等步骤正确执行。
- 链上 CosmWasm 合约验证 proof 与 public input hash。
这些逻辑在经典安全模型下相当严密:电路验证 pollId、nonce、签名、余额、投票选项、Merkle path、state root、deactivation root、tally commitment 等条件。(raw.githubusercontent.com)
7. aMACI 核心原语的抗量子性逐项分析
7.1 BabyJubJub 私钥、公钥与 ECDH
aMACI 电路中 Ecdh 使用 BabyJubJub 椭圆曲线 scalar multiplication,从 coordinator public key 与 voter private key 派生 shared key。PrivToPubKey 也通过 BabyJubJub base point scalar multiplication 从私钥得到公钥,并检查私钥小于 subgroup order。(raw.githubusercontent.com)
PQ 判断:不抗量子。
BabyJubJub 是椭圆曲线群。其安全性基于椭圆曲线离散对数困难性。Shor 算法一旦可在相应规模群上运行,攻击者可从公钥恢复私钥,进而破坏 ECDH shared secret。该问题直接影响 aMACI 的 encrypted command、deactivation status、匿名 key-change 机制。
具体影响:
这意味着 aMACI 存在明显的 harvest-now-decrypt-later 风险:链上或公开记录的 encrypted messages、encrypted deactivation data、public keys、nullifiers 在未来量子能力出现后可能被重新解释和解密。
7.2 EdDSA-Poseidon 签名验证
VerifySignature 电路使用 EdDSA-Poseidon 逻辑:对 command preimage 与 new public key 等字段做 Poseidon hash,然后在 BabyJubJub 上验证签名。MessageValidator 再将签名验证与 state index、vote option index、nonce、pollId、voice credit 等检查结合,最终决定 command 是否有效。(raw.githubusercontent.com)
PQ 判断:不抗量子。
EdDSA-Poseidon 的哈希部分是 Poseidon,但签名安全性仍然来自 BabyJubJub 离散对数。量子攻击者若可从 public key 恢复 private key,即可伪造有效 command 签名。Poseidon hash 并不能把椭圆曲线签名变成 PQ 签名。
具体影响:
因此,aMACI 的“投票指令来自合法用户”这一属性在 CRQC 模型下不成立。
7.3 ElGamal rerandomization 与 deactivation anonymity
aMACI 的匿名性重点在 deactivation/new-key 流程。AddNewKey 电路中,nullifier 被设为 Poseidon(oldPrivateKey, pollId);deactivation leaf 绑定 c1、c2 与 ECDH shared key hash;随后通过 ElGamal rerandomization 将旧密文转换为新的 d1、d2,同时证明该转换正确。(raw.githubusercontent.com)
aMACI 通过 ElGamal 可重随机化,使 operator 难以把 deactivation key 与新 key 直接关联。ElGamal 形式为 c1 = g^y、c2 = m * pk^y,rerandomization 则计算 d1 = g^z * c1、d2 = pk^z * c2。(ethresear.ch)
PQ 判断:不抗量子。
ElGamal 的隐藏性、rerandomization unlinkability 依赖离散对数困难性。量子攻击者可解离散对数后,恢复 randomness、解密密文、分析 ciphertext relation。更重要的是,aMACI 的 public nullifier 是 Poseidon(oldPrivateKey, pollId):一旦 old public key 对应 private key 可由量子攻击恢复,攻击者就可以对所有 old keys 计算 nullifier,并与链上 public nullifier 匹配,从而直接破坏 old key 与 new key 的匿名关联。
这是 aMACI 中最关键的 PQ 匿名性失败点之一。
7.4 Poseidon hash / Poseidon cipher
aMACI 大量使用 Poseidon:message hash、state commitment、nullifier、input hash 辅助、Merkle tree、Poseidon encryption/decryption 等。电路工具中有多种 Poseidon hasher、Poseidon decrypt、message hash、hash-left-right 等组件。(github.com)
PQ 判断:相对较强,但不是系统性 PQ 保障。
作为哈希/置换类原语,Poseidon 面对量子攻击主要是 Grover 型泛型加速,而不是 Shor 式直接崩溃。如果输出空间约为 254-bit field element,preimage 级别可粗略理解为约 127-bit 量子安全边际。但这只是泛型判断;Poseidon 并不是 NIST 后量子标准中的签名/KEM,也不能补偿 ECDH、ElGamal、EdDSA、Groth16 的非 PQ 问题。
尤其需要注意:当 Poseidon cipher 的密钥来自 BabyJubJub ECDH 时,真正的风险不是 Poseidon 被直接量子破解,而是 ECDH shared key 被量子攻击恢复,导致 Poseidon 加密内容被正常解密。
7.5 Groth16 / BN254 zkSNARK
aMACI 合约使用 Groth16 proof verification,并导入 pairing_ce::bn256::Bn256、bellman_ce_verifier 等组件。run_groth16_verify 会解析 verifying key 与 proof,并以 public input hash 作为输入执行 Groth16 验证。maci-crypto 也明确依赖 ark-bn254,并称 BN254/BN128 是 MACI 主要使用的曲线。(raw.githubusercontent.com)
PQ 判断:不抗量子。
Groth16 的 soundness/knowledge soundness 依赖 pairing-friendly elliptic curve groups 上的计算假设。这类假设属于 Shor 算法威胁范围。BN254/BN128 本身是配对友好曲线,不是后量子证明系统基础。
具体影响:
这里需要精确表述:并不是说当前现实攻击者已经能伪造 Groth16 proof,而是说 Groth16/BN254 的安全假设不是 post-quantum assumptions。在 CRQC 模型下,链上 verifier 接受某个 proof 不再等价于“该状态转换在后量子意义下可信”。
8. aMACI 电路级 PQ 分析
8.1 AddNewKey 电路
AddNewKey 的关键逻辑包括:
- 输入 old private key、new public key、coordinator public key、deactivation root、ElGamal ciphertext 等。
- 计算
nullifier = Poseidon(oldPrivateKey, pollId)。 - 使用 old private key 与 coordinator public key 做 ECDH。
- 验证 deactivation leaf 在 deactivation root 中。
- 对 ElGamal ciphertext 做 rerandomization。
- 将 public inputs 压缩成
inputHash。(raw.githubusercontent.com)
PQ 评价:高风险。
该电路在经典模型下可证明“知道 old private key 的用户可以匿名添加 new key”。但在量子模型下,old private key 可由 old public key 恢复,nullifier 可被外部枚举匹配,ECDH shared key 可被重算,ElGamal rerandomization 隐藏性失效。因此 AddNewKey 的匿名性与授权性均不具备 PQ 安全。
8.2 ProcessDeactivate 电路
ProcessDeactivate 会:
- 验证 message hash chain。
- 由 coordinator private key 派生 coordinator public key 并检查一致性。
- 使用 ECDH/Poseidon 解密 deactivate messages。
- 验证签名、pollId、state leaf、active state。
- 更新 deactivation tree 与 active state root。(raw.githubusercontent.com)
PQ 评价:高风险。
该电路依赖 coordinator private key、ECDH 解密、BabyJubJub signature verification、Merkle proof 和 Groth16 proof。Merkle proof 本身相对抗量子;但 coordinator key、voter key、签名和 Groth16 均不抗量子。量子攻击者可以恢复 coordinator private key 解密消息,也可以恢复 voter private key 伪造 deactivate command。
8.3 ProcessMessages 与 StateLeafTransformer
ProcessMessages 验证 message hash chain、pollId、state commitment、deactivation commitment、active state root,并通过 ECDH 解密 command 后交给 state transformer。StateLeafTransformer 调用 MessageValidator,同时解密 active flag,检查 message 是否有效,进而更新 state leaf、nonce、vote weights。(raw.githubusercontent.com)
PQ 评价:关键风险。
这个流程承担投票系统最核心的“谁投了什么、状态如何变更、票权如何扣减”逻辑。其经典安全性高度依赖签名不可伪造、ECDH 不可解、Groth16 proof soundness。量子模型下,这三项同时失效,因此不能称为 PQ-secure vote processing。
8.4 MessageValidator
MessageValidator 验证:
- state index 是否有效;
- vote option index 是否有效;
- nonce 是否等于旧 nonce + 1;
- command pollId 是否等于 expected pollId;
- EdDSA-Poseidon 签名是否有效;
- voice credit 是否足够;
- vote weight 是否在安全范围内;
- 最终
isValid由多项检查共同决定。(github.com)
PQ 评价:逻辑完整,但认证基础不是量子安全。
nonce、pollId、余额和 vote option 检查是良好的协议约束;但这些约束不能抵御“攻击者已恢复合法 private key”的量子攻击。量子模型下,攻击者可生成新签名、新 nonce、新 command,而不是重放旧 command。
8.5 TallyVotes
TallyVotes 验证 state commitment、state root、vote option tree roots、tally commitments、batch index、public input hash,并更新 tally result tree。(raw.githubusercontent.com)
PQ 评价:哈希承诺部分相对稳健,证明 soundness 不是量子安全。
tally commitment、Merkle root、salt/hash 结构不是主要量子短板;真正问题是 Groth16 proof。若 proof system 的 soundness 在量子模型下不成立,链上 verifier 对 tally correctness 的保证也不具备 PQ 意义。
9. aMACI 攻击场景分析
场景 A:外部攻击者记录链上数据,未来量子解密
aMACI 的 encrypted messages、public keys、proofs、commitments、nullifiers 等数据可能长期保留在链上或归档系统中。若未来攻击者拥有可攻击 BabyJubJub 的量子能力,则可以:
- 从 coordinator public key 恢复 coordinator private key;
- 重算 ECDH shared keys;
- 解密历史 encrypted commands;
- 从 voter public keys 恢复 voter private keys;
- 计算
Poseidon(oldPrivateKey, pollId)并匹配 public nullifier; - 重建 old key 与 new key 的关联。
结果:历史投票隐私和匿名性不具备长期 PQ 保密性。
场景 B:攻击者伪造用户投票或 key-change 消息
若 voter public key 已知,量子攻击者可以恢复 voter private key,然后生成符合 MessageValidator 要求的新 command,包括正确签名、正确 pollId、递增 nonce、合法 vote option 等。nonce 和 pollId 只能防止重放,不能防止私钥被恢复后的新消息伪造。(github.com)
结果:投票授权性不具备 PQ 安全。
场景 C:恶意 operator/coordinator 获得量子能力
在普通 MACI 中,operator 本就能解密投票消息以完成计票;aMACI 的价值在于降低 operator 对身份关联的认知能力。量子能力会让 operator 从公开 old public keys 恢复 old private keys,并计算 public nullifier,从而把 old identity/key 与 new key/deactivation 流程关联起来。(ethresear.ch)
结果:aMACI 相对 MACI 增强的匿名性在 PQ 模型下被严重削弱。
场景 D:伪造 zkSNARK proof 或破坏 tally soundness
aMACI 合约使用 BN254 Groth16 verifier。Groth16 在经典模型下可高效证明电路约束被满足;但在量子模型下,底层 pairing curve assumptions 不成立。攻击者若能够攻击证明系统所依赖的群假设,则可能构造 verifier 接受但 witness/statement 不真实的 proof。(raw.githubusercontent.com)
结果:链上 proof acceptance 不再提供 post-quantum tally correctness guarantee。
场景 E:Dora Vota 基础链与 aMACI 叠加风险
即使 aMACI 协议本身修补了某些应用层问题,部署在 Dora Vota 上时仍继承 Dora Vota 基础链的非 PQ 安全态势:交易签名、validator signatures、IBC security、治理和合约调用入口都不是 post-quantum secure。(raw.githubusercontent.com)
结果:aMACI 的 PQ 安全不能单独脱离底层链讨论。
10. aMACI 组件级风险
11. aMACI 哪些部分“相对抗量子”
严格说,当前 aMACI 不能称为 post-quantum secure。但为了区分风险重点,可以说以下组件 相对不是第一优先级的量子薄弱点:
-
SHA-256 input hash compression
inputHash使用 SHA-256 或 hash compression 将 public inputs 压缩给 verifier。SHA-256 在量子模型下面临 Grover 加速,但不是像 ECDH/ECDSA 那样被 Shor 直接击穿。(raw.githubusercontent.com) -
Poseidon Merkle trees / message hash chains
Poseidon-based Merkle tree、message hash chain、state root、tally commitment 在量子模型下主要面对泛型搜索加速。它们仍需保守参数分析,但不是 aMACI 最主要 PQ 失败点。(github.com)
-
pollId、nonce、balance、vote option validation
这些是协议级约束,不直接依赖椭圆曲线难题。它们在经典模型下对 replay、跨 poll 复用、非法 vote option、余额不足等问题有效。但一旦签名私钥可被恢复,它们只能约束消息格式,不能防止合法格式的伪造消息。(github.com)
12. 最终判断
Dora Vota
Dora Vota 的基础链抗量子性评级为:低。
原因很明确:它是 Cosmos/CometBFT 架构,链级安全依赖传统公钥签名。用户交易、验证人共识、IBC finality、治理操作、合约调用入口都需要非 PQ 签名体系。哈希和 Merkle 状态承诺相对稳健,但无法弥补账户与共识层的量子脆弱性。
一句话总结:
Dora Vota 在经典安全模型下是标准 Cosmos appchain;在 post-quantum 模型下,基础认证与共识层不是抗量子的。
aMACI
aMACI 的协议/电路抗量子性评级为:低。
它的经典设计相当完整:有 encrypted commands、EdDSA-Poseidon 认证、ECDH shared key、ElGamal rerandomization、nullifier、deactivation root、active state、message hash chain、state/tally commitments、Groth16 proof。但这些关键安全属性大多建立在 BabyJubJub 和 BN254 这类非 PQ 原语上。
最严重的三类问题是:
- 长期隐私失败:历史 encrypted messages 可被 harvest-now-decrypt-later,带来强迫投票和买票风险。
- 匿名性失败:old private key 可由 old public key 恢复后,public nullifier 可被匹配,old/new key unlinkability 被破坏。
- 证明 soundness 失败:Groth16/BN254 不是 post-quantum proof system,链上 verifier 的接受结果不提供 PQ 级正确性保证。
一句话总结:
aMACI 是一个强经典安全设计,但不是 post-quantum 匿名投票协议;在 CRQC 模型下,它的隐私、匿名性、认证和证明正确性都会受到根本性影响。
13. 最简评级表
最终结论:
Dora Vota 与 aMACI 当前都不能被描述为 post-quantum secure。Dora Vota 的短板在链级签名/共识/IBC;aMACI 的短板更集中在 BabyJubJub ECDH、EdDSA-Poseidon、ElGamal rerandomization、BN254 Groth16。aMACI 的哈希、Merkle、nonce、pollId、commitment 设计在经典协议层面是有条理的,但它们无法抵消椭圆曲线和 pairing-based proof system 在量子模型下的根本脆弱性。