FIPS 206 状态更新

1. FIPS 206(FN-DSA)当前进展

NIST 在与 FALCON 团队协作并推进 FIPS 206 数年之后:

  • 预计将很快发布初始公开草案(Initial Public Draft, IPD)
    • 文档基本已完成,正在等待批准

本文将预览 FIPS 206 IPD 的主要内容:

  • FN-DSA / FALCON 概述
  • 与浮点运算相关的特殊挑战
  • 与其他 FIPS 标准的相似性 / 差异
  • 相对于提交版 FALCON 的计划修改

2. FIPS 206 与 FN-DSA

FIPS 206 基于 NIST PQC 竞赛中被选中的提交方案 FALCON,定义了 FN-DSA:

  • 一种基于格(lattice-based)的签名方案

  • 采用 Hash-Then-Sign(先哈希后签名) 范式

    • 签名是一个格点,该点接近目标点 t \mathbf{t} t
    • t \mathbf{t} t 派生自带随机性的消息哈希
  • 使用定义在 NTRU 格上的结构

    • 环为NTT友好环: Z q [ X ] / ⟨ X n + 1 ⟩ \mathbb{Z}_q[X] / \left \langle X^n + 1\right \rangle Zq[X]/Xn+1
      其中: n = 2 ℓ n = 2^\ell n=2
  • 使用 FFT(快速傅里叶变换)和 LDL 树(FALCON Tree)来近似离散高斯采样

FN-DSA 特点为:

  • 具有非常小的签名和公钥
  • 但实现难度较高

具体来说:

  • 相比 ML-DSA(FIPS 204)显著更小
  • KeyGen 和 Signing 中的运算需要浮点运算
  • 这会带来:
    • 验证(validation)挑战
    • 侧信道防护挑战

3. FALCON 细节

3.1 Falcon 密钥生成(KeyGen)

Falcon 密钥生成(KeyGen)过程为:

  • 私钥是一个格基(按行表示):
    B = ( g − f G − F ) \mathbf{B} = \begin{pmatrix} g & -f \\ G & -F \end{pmatrix} B=(gGfF)

    • 采样短(高斯分布)多项式: f , g ∈ Z [ X ] / ⟨ X n + 1 ⟩ f, g \in \mathbb{Z}[X] / \left \langle X^n + 1\right \rangle f,gZ[X]/Xn+1
    • 计算 F , G F, G F,G,满足 NTRU 方程: f G − g F = q fG - gF = q fGgF=q
    • 检查 Gram-Schmidt(GS)范数小于: 1.17 q 1.17 \sqrt{q} 1.17q 【后面有做修正为 0.9999 ⋅ 1.17 q 0.9999 \cdot 1.17 \sqrt{q} 0.99991.17q
    • 使用 reduce 找到等价基,使得 F , G F, G F,G 足够小,从而可以进行byte-encode(字节编码)
  • 如果某一步失败,则重新尝试

  • 如果全部成功,则:

    • 公钥: h = f − 1 g h = f^{-1} g h=f1g
    • 私钥: B \mathbf{B} B

3.2 Falcon 签名(Signing)

Falcon 签名(Signing)过程为:

  • 将私钥展开为: B ~ = FFT ( B ) \tilde{\mathbf{B}} = \text{FFT}(\mathbf{B}) B~=FFT(B) 以及 LDL 树 T T T
    • LDL 树由 B ~ \tilde{\mathbf{B}} B~ 计算得到
    • 正确的签名分布要求:LDL 树叶子节点的数值必须位于 σ min ⁡  与  σ max ⁡  之间 \sigma_{\min} \ \text{与} \ \sigma_{\max} \ \text{之间} σmin  σmax 之间
    • GS 范数检查应保证这一点(但需注意:浮点运算不是精确的)

3.3 NIST对 GS 范数、 σ min ⁡ \sigma_{\min} σmin σ max ⁡ \sigma_{\max} σmax 的暂定处理方法

当前NIST对 GS 范数、 σ min ⁡ \sigma_{\min} σmin σ max ⁡ \sigma_{\max} σmax 的暂定处理方法为:

  • 1)Keygen 密钥生成过程中:
    • 修改 GS 范数检查:新的最大值为 0.9999 ⋅ 1.17 q 0.9999 \cdot 1.17 \sqrt{q} 0.99991.17q
  • 2)Singing 签名过程中:
    • 显式检查 LDL 树叶子节点是否位于 σ min ⁡  与  σ max ⁡ \sigma_{\min} \ \text{与} \ \sigma_{\max} σmin  σmax 之间
    • 如果不满足,则签名始终返回 ⊥ \perp

3.4 NIST对浮点与验证的暂定策略

FN-DSA 中允许的表示方式为:

表示方式密钥生成(Key Generation) B ~ \tilde{\mathbf{B}} B~ 与 LDL 树签名(Signing)验签(Verification)
浮点数(Floating point)允许(Allowed)允许(Allowed)允许(Allowed)否(No / 不适用)
模拟浮点数(Emulated floating point)允许(Allowed)允许(Allowed)允许(Allowed)否(No / 不适用)
定点数(Fixed point)允许(Allowed)否(No)否(No)否(No / 不适用)

当前NIST对浮点与验证(floating point/validation)的暂定策略为:

  • 1)Verification(验签):
    • 不使用浮点运算
    • 实现应当与 KAT(已知答案测试,Known Answer Test)完全匹配
  • 2)Signing(签名):
    • 使用原生或模拟的浮点运算
      (IEEE-754 binary64 —— 相关摘录已在 FIPS 中包含并获授权)
    • 正确的签名分布对于避免私钥泄露至关重要
      • 因此,实现应当与 KAT 完全匹配
      • 为此,NIST规定了一些细节(如:运算顺序、不使用 fused multiply-add 等)
    • FFT 私钥基和 LDL 树可以缓存(但出于验证目的,它们仍被视为签名的一部分)
  • 3)Key Generation(密钥生成):
    • validation(验证)时不要求与 KAT 完全匹配,需要检查:
      • GS 范数
      • NTRU 方程
      • 无穷范数
      • 从种子正确生成 f , g f, g f,g
    • 这是可以接受的,因为私钥分布的微小偏差对安全性的影响有限
    • 允许:
      • 原生 / 模拟浮点
      • 或定点实现
    • 允许更小的循环上限(如用于避免定时侧信道)

3.4 NIST对公私钥默认编码暂定方案

当前NIST对公私钥默认编码暂定方案为:

  • 1)公钥(Public Key):
    • 使用 NTT 形式: h ^ = N T T ( f ) − 1 ⋅ N T T ( g ) \hat{h} = \mathrm{NTT}(f)^{-1} \cdot \mathrm{NTT}(g) h^=NTT(f)1NTT(g)
    • 可以节省少量计算开销,且没有实际缺点
  • 2)私钥(Private Key):
  • 使用: f , g , F f, g, F f,g,F(以及公钥哈希 t r t_r tr
  • G G G 可以通过以下方式重新计算: G = F f − 1 g m o d    ± q G = F f^{-1} g \mod ^{\pm}{q} G=Ff1gmod±q
  • 不使用种子作为私钥
    • KeyGen 实现的差异可能导致:
      • 相同种子生成不同的密钥对
  • 可以缓存 LDL 树 和 B ~ \tilde{\mathbf{B}} B~,但不建议导出这些数据

4. FIPS 206 与 FIPS 204 / 205 的对比(暂定)

FIPS 206 与 FIPS 204 / 205 的对比(暂定):

  • 1)相似点(Similarities)
    • 区分 pure(纯模式)和 prehash(预哈希模式)版本
    • 区分 内部 / 外部 keygen、sign、verify 算法
    • 数值编码使用 小端序(little-endian)
    • 使用 SHAKE 做伪随机采样
    • 包含 BUFF 变换
  • 2)不同点(Differences)
    • FIPS 206 仅允许随机化签名(randomized signing)
      • 确定性签名可能是危险的:浮点实现中的错误可能导致 对同一哈希生成不同签名
  • FIPS 206 禁止导出种子(seed)
    • KeyGen 不保证 种子总是以相同方式展开
  • FIPS 206 不鼓励导出 FFT 基和 LDL 树
    • 这些数据包含浮点数值,且FIPS 206中 未定义其标准字节序编码方式

5. FIPS 206 其他计划暂定修改

FIPS 206 其他计划暂定修改有:

  • 在签名与验签中,除了 L 2 L_2 L2 范数外,还额外限制签名的无穷范数(infinity norm)
    • 该修改由 Yang Yu 提出(见最近一次 FALCON 更新研讨会)
  • 基础采样器(base sampler)对每个系数采样 79 位随机性,而不是 72 位
    • 使用原本用于采样符号位的字节中的额外 7 位
    • 不需要额外调用 XOF

上述两项修改都被认为不是安全性所必需的,但:

  • 成本极低
  • 不会降低安全性

此外,将伪随机种子统一为 40 字节(但 keygen 仍使用 32 字节)。

6. 关于FIPS 206的可讨论 / 反馈问题

关于FIPS 206的可讨论 / 反馈问题有:

  • 对目前讨论的这些修改是否有任何反对意见?
  • 是否应当增加对 密钥 / 消息恢复模式(key/message-recovery mode) 的支持?
  • 是否应当增加对 定点版本签名(fixed-point signing) 的支持?

对于Eurocrypt 2025论文 Do Not Disturb a Sleeping Falcon: Floating-Point Error Sensitivity
of the Falcon Sampler and Its Consequences
,NIST认为:

  • 当前FIPS 206中的签名验证(validation)方法 以及对随机化签名的要求,可以防御这些攻击
  • 但是否也应考虑该论文提出的额外改进建议?

7. 关于FIPS 206的常数时间实现参考资料

关于FIPS 206的常数时间实现参考资料有:

参考资料

[1] NIST 2025年 slide FIPS 206 Status Update

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值