MQDSS 多变量后量子签名算法:从 5 通道识别协议到 NIST PQC 竞赛

算法原理 · 2026-09-26


title: "MQDSS 多变量后量子签名算法:从 5 通道识别协议到 NIST PQC 竞赛" slug: "mqdss-multivariate-post-quantum-signature-algorithm" excerpt: "MQDSS(Multi-Quad Digital Signature Scheme)是首个基于多变量二次方程(MQ)困难问题的数字签名方案,安全性可归约至 MQ 问题。本文从 Sakumoto-Shirai-Hiwatari(SSH)5 通道识别协议出发,完整推导 MQDSS 的密钥生成、签名与验签公式,分析其参数体系(L1/L3/L5)、小尺寸密钥优势(72 字节公钥 / 64 字节私钥),以及 Kales-Zaverucha 攻击如何导致其在 NIST PQC 第二轮的淘汰。" category: algorithm tags: - MQDSS - 多变量密码 - 后量子签名 - Fiat-Shamir - SSH协议

概述

MQDSS(Multi-Quad Digital Signature Scheme)是 Ming-Shing Chen、Andreas Hulsing、Joost Rijneveld、Simona Samardjiska、Peter Schwabe 等人于 2016 年提出的多变量密码签名方案,也是 NIST 后量子密码(PQC)标准化项目第二轮候选算法之一。它的核心创新在于:

首次将多变量二次方程(MQ)困难问题直接用于构造存在性不可伪造(EUF-CMA)的数字签名方案,并通过 Fiat-Shamir 变换从 SSH(Sakumoto-Shirai-Hiwatari)5 通道识别协议导出。
与基于格的 ML-DSA(Dilithium,FIPS 204 已标准化)不同,MQDSS 的安全性建立在 有限域 $\mathbb{F}_{31}^n$ 上求解 $m$ 个二次方程的代数困难性 之上,代表了一条完全不同的后量子安全路线。

本文要点

  • 数学基础:MQ 问题、SSH 5 通道识别协议、Fiat-Shamir 变换
  • 算法结构:KeyGen / Sign / Vf 完整公式推导
  • 参数体系:MQDSS-L1(128 位安全)/ L3(192 位)/ L5(256 位)的具体参数
  • 性能特征:72 字节公钥 + 64 字节私钥(极小密钥),但签名 ~40 KB
  • 安全分析:Kales-Zaverucha 攻击对参数集的影响
  • 国密对照:MQDSS 与国内 SM9 标识签名的异同

数学基础

MQ 问题(Multivariate Quadratic Problem)

MQDSS 的安全性核心是 MQ 问题:

给定有限域 $\mathbb{F}_q$ 上的 $m$ 个 $n$ 元二次多项式 $F = (f_1, \ldots, f_m)$ 和目标值 $y = (y_1, \ldots, y_m) \in \mathbb{F}_q^m$,求 $x \in \mathbb{F}_q^n$ 使得 $F(x) = y$。
当 $q=31$(素数域)、$n \approx 48-88$、$m \approx 31-64$ 时,经典算法(Groebner base:F4/F5)和量子算法均无已知多项式时间解法。MQ 问题是 NP-hard 的(Byrness 等人 1993 年证明)。

SSH 5 通道识别协议

MQDSS 的签名协议基于 SSH(Sakumoto-Shirai-Hiwatari, CRYPTO 2011)的 5 通道识别协议:

CODE
通道1: 证明者发送 commitment  C
通道2: 验证者发送挑战      c₁ ∈ {0,...,q-1}
通道3: 证明者发送中间响应  z
通道4: 验证者发送次挑战    c₂ ∈ {0,1}
通道5: 证明者发送最终响应  s
验证:   检查一致性方程

该协议具有 Honest-Verifier Zero-Knowledge (HVZK) 性质,且 Soundness error = 1/q + 1/2(每轮约 $1/31 + 1/2 \approx 0.532$)。通过 $r$ 轮并行重复,总 soundness 降至 $(1/q + 1/2)^r$。


算法结构

1. KeyGen(密钥生成)

输入:安全参数 $\kappa$(目标安全比特数)

输出:私钥 $sk$、公钥 $pk$

步骤:

CODE
1. 随机选取种子 $s \in \{0,1\}^\kappa$
2. 使用 PRG(伪随机生成器)从 $s$ 扩展出生成函数:
   - $G_S: \{0,1\}^\kappa \to \mathbb{F}_{31}^{Flen}$  (生成多项式系数)
   - $G_K: \{0,1\}^\kappa \to \mathbb{F}_{31}^n$      (生成私钥向量)
   - $G_C: \{0,1\}^{2\kappa} \to \mathbb{F}_{31}^{r(2n+m)}$  (生成挑战参数)
3. 构建私有二次映射 $F = (f_1, ..., f_m)$,其中每个 $f_i$ 是 $n$ 个变量的稀疏二次多项式:
   $f_i(x) = \sum_{j≤k} a_{i,j,k} x_j x_k + \sum_j b_{i,j} x_j + c_i$
4. 随机选取 $\Delta \in \mathbb{F}_{31}^m$(偏移量)
5. 计算公共二次映射 $G = F + \Delta$(逐分量加法)
6. 私钥 $sk = (s, \Delta, \text{auxiliary data})$
7. 公钥 $pk = (G, \text{parameter description})$

密钥尺寸(MQDSS-L1,$\kappa=128$):

  • 公钥:$G$ 的系数压缩表示 + 描述参数 ≈ 72 字节
  • 私钥:种子 $s$ (16 字节) + $\Delta$ (约 48-64 字节) ≈ 64 字节
  • 总计:136 字节,远小于 ML-DSA(~2.4 KB 公钥 / ~4.8 KB 私钥)

2. Sign(签名)

输入:消息 $M$、私钥 $sk = (s, \Delta)$

步骤:

签名尺寸(MQDSS-L1):约 40,952 字节(~40 KB)

3. Vf(验签)

输入:消息 $M$、公钥 $pk = G$、签名 $\sigma$

步骤:

CODE
1. 解析 $\sigma$ 为 $(c_{1,i}, c_{2,i}, s_i)_{i=1}^{r}$
2. 对每轮 i = 1,...,r:
   a. 根据 $c_{2,i}$ 重新计算 expected commitment
   b. 若 $c_{2,i} = 1$:验证 $G(s_i) \stackrel{?}{=} \text{reconstructed } C_i$
   c. 若 $c_{2,i} = 0$:验证另一组一致性方程
3. 重新计算 challenge:$c'_{1,i} = H_1(\text{all commitments}, M)$
4. 比较:若所有 $c_{1,i} == c'_{1,i}$ 且一致性方程全部通过 → 返回 True

正确性证明:

由于 $G = F + \Delta$,且签名过程保持了线性关系: $$G(s_i) = F(s_i) + \Delta = \text{commitment 的一致性方程}$$

当 $c_{2,i} = 1$ 时验证的是 $F$ 的线性部分;当 $c_{2,i} = 0$ 时验证的是 $\Delta$ 的线性部分。两者缺一不可。


参数体系

MQDSS 定义了三个安全级别(对应 NIST PQC 安全等级):

参数集安全等级$\kappa$ (比特)$n$ (变量数)$m$ (方程数)轮数 $r$公钥 (字节)私钥 (字节)签名 (字节)
L1128-bit1284831135~72~64~40,952
L3192-bit1926431202~72~64~61,440
L5256-bit2568831268~72~64~81,920

MQDSS 官方规范

版本说明下载
v2.1修正 Kales-Zaverucha 攻击后的参数集specification.html
v2.0NIST PQC 第二轮提交版本PDF
源码(Public Domain):https://joostrijneveld.nl/papers/mqdss/
性能数据(MQDSS-L1,Intel Haswell @ 3.4 GHz,含抗时序攻击保护):
  • 密钥生成:~1.8 × 10⁶ 时钟周期
  • 签名:~8.5 × 10⁶ 时钟周期
  • 验签:~5.8 × 10⁶ 时钟周期

安全性分析

EUF-CMA 安全性证明

MQDSS 的安全性通过以下归约链证明:

CODE
EUF-CMA 不可伪造性
    ↓ (Fiat-Shamir 变换,Don-Fehr-Majenz 2018 结果)
HVZK + Soundness 的 5 通道识别协议
    ↓ (SSH 协议的安全性)
MQ 问题($\mathbb{F}_{31}^n, m$ 个二次方程)的困难性

关键定理(MQDSS 规范 Chapter 10):

若 SSH 5 通道识别协议在随机预言模型下是 HVZK 且具有 soundness error $\kappa$,则 MQDSS 在 EUF-CMA 模型下是安全的,安全损失为 $O(r \cdot Q_s)$,其中 $Q_s$ 是签名查询次数。

Kales-Zaverucha 攻击(2019)

攻击原理:对 MQDSS 的并行重复结构进行"分阶段攻击"——在第一轮尝试暴力破解部分 commitment,从而减少后续轮次的搜索空间。

影响:

  • L1 参数集需要 ~2⁹⁵ 次哈希调用(而非目标的 2¹²⁸)
  • 解决方案:将轮数 $r$ 增加约 1.4 倍以补偿攻击优势
  • 攻击不破坏 MQDSS 的设计本身,仅说明原始参数集不安全
结论:修正后的 MQDSS v2.1 参数集仍具备可证明的安全性,但性能代价显著增加。

与 ML-DSA(Dilithium)对比

维度MQDSSML-DSA(FIPS 204)
安全假设MQ 问题(代数困难)Module-LWE(格困难)
公钥尺寸72 字节(极小)~2,400 字节
私钥尺寸64 字节(极小)~4,800 字节
签名尺寸~40 KB(较大)~2,400-6,000 字节
签名速度较慢(~8.5M cycles)较快(~100K cycles)
验签速度中等(~5.8M cycles)较快(~200K cycles)
NIST 状态第二轮淘汰已标准化(FIPS 204)
核心权衡:MQDSS 用签名尺寸换取了极小的密钥尺寸;ML-DSA 则反之。


国密对照

MQDSS 与国密 SM9 标识密码签名(GM/T 0044.2-2016) 有一些有趣的对比点:

维度MQDSSSM9-IBS(GM/T 0044.2)
签名模式EUF-CMA(Fiat-Shamir)EUF-CMA(Fiat-Shamir)
安全假设MQ 问题(代数)BDH 问题(双线性对)
公钥尺寸72 字节(无身份绑定)~64 字节(身份即公钥)
私钥尺寸64 字节~64 字节
签名尺寸~40 KB~512 字节(2× 256 位点)
后量子安全✅ 是❌ 否(Shor 算法可破)
关键差异:
  • 身份绑定:SM9 的天然优势——用户身份(邮箱、手机号)即公钥,无需证书;MQDSS 仍需传统公钥管理
  • 签名尺寸:SM9 的签名比 MQDSS 小约 80 倍,这对物联网设备至关重要
  • 量子安全:MQDSS 是后量子安全的,SM9 在量子计算机面前脆弱
适用场景建议:
  • MQDSS 优势场景:密钥管理受限的 IoT 设备、需要最小公钥尺寸的嵌入式系统
  • SM9 优势场景:需要身份绑定的 PKI 替代方案、对签名尺寸敏感的应用

已知攻击与防御

攻击类型发现者年份影响防御状态
分阶段 commitment 攻击Kales, Zaverucha2019L1 参数需增加 1.4 倍轮数✅ 已修复(v2.1)
MQ 问题 Groebner base 攻击通用-对 $n \geq 48, q=31$ 无效✅ 参数足够大
时序攻击通用-泄露私钥信息✅ 规范中要求 constant-time 实现
Side-channel on PRG潜在-种子泄露风险⚠️ 实现需谨慎

总结

MQDSS 代表了后量子签名算法设计的一条独特路线:用大签名换小密钥。其核心价值在于:

  • 理论贡献:首个将 MQ 问题直接用于 EUF-CMA 签名的方案,安全性有严格归约证明
  • 工程价值:72 字节公钥 + 64 字节私钥,是已知后量子签名方案中最小的密钥尺寸之一
  • 历史意义:虽未通过 NIST PQC 竞赛,但其设计思想(Fiat-Shamir + 多轮平行重复)影响了后续的 MAYO、QR-UOV 等算法
对于国密场景,MQDSS 可作为 SM9 的补充——当设备对密钥尺寸极其敏感(如 RFID 标签、智能卡)时,MQDSS 的极小密钥优势值得考虑。


参考来源


相关实践