Skip to content

Latest commit

 

History

History
42 lines (25 loc) · 1.76 KB

File metadata and controls

42 lines (25 loc) · 1.76 KB

MiMC

论文地址

MiMC(Minimal Multiplicative Complexity)

问题:传统密码(如 AES、SHA-256)在标准计算机上很快,但在 MPC/FHE/ZK 等场景中,非线性乘法操作是性能瓶颈,而线性操作(如 XOR)几乎"免费"。

方案:轮函数 = (x ⊕ k ⊕ c)³

即:状态与密钥、轮常数异或后,直接在有限域上做立方运算。通过迭代足够多的轮数,构建出安全的块密码、置换和哈希函数。

性能优势

指标 MiMC SHA-256 LowMC Keccak
处理单块时间 ~7.8 ms ~73 ms ~90 ms ~271 ms
约束生成 6.3 ms - 13.5 ms 9.2 ms
见证生成 1.5 ms - 76.8 ms 262 ms
乘法次数 1293 29000 9408 3300
Rank-1 约束 646 - 4704 2200
  • MiMC 比 SHA-256 快约 10 倍,比 LowMC 也快一个数量级

  • 原因是:虽然 LowMC 的 AND 门数更少,但其海量 XOR 操作在 SNARK 中累积成巨大开销;而 MiMC 每轮只有 1 次加法和 1 次乘法,结构极简。

轮数选择

  1. 先确定有限域大小 p

    • Groth16 + BN254 → 标量域约 254 bit
    • Plonk/Halo2 + BLS12-381 → 标量域约 255 bit
  2. 检查置换条件

    需要 gcd(3, p-1) = 1,也就是 x³ 在这个域上必须是双射(permutation)。

    很多常见 SNARK 曲线(比如 BN254)的 p-1 恰好能被 3 整除,这时候 x³ 根本不是置换,必须换成别的指数(比如 5、7)。

  3. 套用论文的轮数公式,再留安全余量

    $$r = \left\lceil \frac{\log_2 d}{\log_2 p} \right\rceil + \text{security margin}$$