· 正微光电· technology· 约 64 分钟精读
FN-DSA 格签名硬件微架构:FFT树分解与高斯采样
深入剖析后量子格数字签名标准 FN-DSA(NIST FIPS 206 / Falcon)的代数结构、Gram 矩阵 LDL 树分解、常数时间离散高斯采样(SamplerZ)与 FPGA/ASIC 硬件加速微架构工程实践。
FN-DSA 格签名硬件微架构:FFT 树分解与高斯采样
在后量子密码(Post-Quantum Cryptography, PQC)标准化演进与工业迁移的全局图景中,数字签名算法构成了网络身份鉴别、公钥基础设施(PKI)、安全启动信任根以及安全协议握手认证的核心基石。随着美国国家标准与技术研究院(NIST)相继正式发布基于模格带误差学习问题的 FIPS 204(ML-DSA)与基于无状态哈希树签名的 FIPS 205(SLH-DSA),作为第三项核心格签名标准的 FN-DSA(Fast-Fourier Lattice-Based Digital Signature Algorithm,源自 Falcon 算法,拟定为 NIST FIPS 206)正式进入工程落地与标准终稿阶段。
FN-DSA 凭借其基于 NTRU 格结构与 Hash-and-Sign 范式的独特数学设计,在所有入选后量子签名方案中展现出最小的公钥与签名总尺寸(FN-DSA-512 签名仅 666 字节,公钥仅 897 字节),并具备亚毫秒级的超高速签名验证性能。然而,其算法内部深度依赖复数域快速傅里叶变换(FFT)、Falcon 树(LDL 树)递归分解以及高精度离散高斯采样(SamplerZ),使得该算法的硬件微架构设计、定点与浮点运算平衡以及抗侧信道常数时间实现面临严苛的系统工程挑战。本文系统剖析 FN-DSA 算法的代数数学基础、LDL 树陷门分解、常数时间离散高斯采样流水线、FPGA/ASIC 硬件加速器微架构、侧信道防御工程实践以及实测基准画像。
1. 引言与后量子格签名演进图景
在经典公钥密码体系下,RSA 与 ECDSA/Ed25519 签名算法的安全性分别建立在大整数质因子分解难题与椭圆曲线离散对数难题之上。Shor 量子多项式时间算法的提出,使得这两种经典体制在面对具备充足容错逻辑量子比特的量子计算机时面临根本性瓦解。为重构网络安全防线,国际密码学界展开了长达近十年的后量子签名算法筛选与测评。
1.1 NIST PQC 数字签名标准三足鼎立与 FN-DSA 定位
在 NIST PQC 标准化进程中,最终确立了三类互补的抗量子数字签名标准,形成了覆盖不同应用场景的技术矩阵:
- FIPS 204(ML-DSA,基于 CRYSTALS-Dilithium):基于模格短整数解(M-SIS)与模带误差学习(M-LWE)问题,采用 Fiat-Shamir with Aborts 范式,全流程使用纯整数算术与数论变换(NTT),适合作为通用数字签名基准;
- FIPS 205(SLH-DSA,基于 SPHINCS+):基于对称哈希函数的无状态哈希树结构,安全性归约为哈希函数的抗碰撞与抗原像性,不依赖任何代数格假设,但签名尺寸偏大(8 KB 至 49 KB),适合长期安全根证书与固件签署;
- FIPS 206(FN-DSA,基于 Falcon 算法):基于 NTRU 格上的紧密陷门结构与 Hash-and-Sign 范式,通过复数域快速傅里叶变换在格空间中寻找目标向量的最近格点,具备极小的通信开销与极高的验签吞吐量。
| 签名标准与算法参数 | 安全等级 | 签名尺寸 (Bytes) | 公钥尺寸 (Bytes) | 尺寸总和 (Bytes) | 核心数学代数结构 |
|---|---|---|---|---|---|
| ML-DSA-44 (FIPS 204) | NIST Level 1 | 2,420 | 1,312 | 3,732 | 模格 M-SIS / M-LWE (整数 NTT) |
| ML-DSA-65 (FIPS 204) | NIST Level 3 | 3,309 | 1,952 | 5,261 | 模格 M-SIS / M-LWE (整数 NTT) |
| SLH-DSA-128s (FIPS 205) | NIST Level 1 | 7,856 | 32 | 7,888 | 无状态哈希超树 (SHAKE-256) |
| FN-DSA-512 (FIPS 206) | NIST Level 1 | 666 | 897 | 1,563 | NTRU 格 Hash-and-Sign (复数 FFT) |
| FN-DSA-1024 (FIPS 206) | NIST Level 5 | 1,280 | 1,793 | 3,073 | NTRU 格 Hash-and-Sign (复数 FFT) |
从上表对比可见,FN-DSA-512 的签名与公钥尺寸之和仅为 1,563 字节,比 ML-DSA-44 缩减了 58.1%,比 SLH-DSA-128s 缩减了 80.2%。在网络传输受限、无线窄带信道以及对数据包分片极度敏感的场景中,FN-DSA 展现出了不可替代的紧凑性工程优势。
1.2 Hash-and-Sign 陷门格与 Fiat-Shamir 的数学机理分水岭
后量子格签名的两条主流设计路线在数学范式上存在本质分歧:
- Fiat-Shamir with Aborts 范式(ML-DSA):基于 Schnorr 签名思想在格上的推广。签名者首先选取均匀分布的掩码向量 ,计算承诺 ,通过哈希函数派生出挑战 ,最后生成候选签名 。为了防止私钥 随签名 的统计分布发生信息泄露,ML-DSA 必须引入严格的拒绝采样(Rejection Sampling),当 落在非安全边界内时直接丢弃当前计算并重新生成 。ML-DSA-44 平均需要循环 5.9 次才能成功签出一个合法签名;而在最恶劣统计边界下,为了达到高可靠性保证,可能需要多达数十次迭代。
- Hash-and-Sign 陷门范式(FN-DSA):基于 Gentry-Peikert-Vaikuntanathan(GPV)理论框架。签名者将消息哈希映射为格空间中的一个连续目标多项式向量 ,随后利用私钥中隐藏的短基底陷门(Falcon Tree),通过快速傅里叶高斯采样器(SamplerZ)在格中精确找到一个距离目标 极其接近的格点 。最终签名直接由差值向量 构成。由于高斯采样的分布形状完全由预设的协方差椭球决定且与私钥的具体基底方向统计正交,因此签名过程输出的向量天然服从以原点为中心的球状高斯分布,完全不泄露私钥几何形状,单次签名成功率接近 100%(FN-DSA-512 的重启概率低于 )。
1.3 通信带宽瓶颈与紧凑性需求:为何聚焦 FN-DSA
在互联网与物联网安全协议栈(如 TLS 1.3、IPsec IKEv2、DNSSEC、微固件代码签名)向抗量子演进的过程中,数据包膨胀是最主要的物理瓶颈。
在 DNSSEC 体系中,DNS 响应报文通常受限于传统 UDP 最大传输单元(MTU 1280 至 1500 字节)。若使用 ML-DSA 或 SLH-DSA,单个 DNSSEC 响应包将发生强制 IP 分片,导致高达 15% 至 30% 的丢包率与重传延迟。而 FN-DSA-512 的 666 字节签名完全可以封装进单个 UDP 数据报内,避免了网络分片风险。
在卫星通信、电力载波通信与低功耗窄带物联网(NB-IoT)中,无线信道带宽以 kbps 计,传输能耗远高于计算能耗。FN-DSA 的小尺寸特性可直接将无线空中传输时间(Air Time)与射频发射功耗降低一个数量级。
1.4 工程化实现困境与全景架构总览
尽管 FN-DSA 具备极佳的代数特性与紧凑度,但其工程实现难度在所有 PQC 算法中首屈一指:
- 复数域浮点依赖:Fast Fourier Sampling 过程需要在复数多项式商环 上进行多轮高精度浮点乘加与开方运算;
- LDL 树递归遍历:Falcon Tree 呈现出深达 层的二叉树结构,递归计算带来频繁的调用栈切换与内存重排开销;
- 时序侧信道威胁:标准硬件浮点运算单元(FPU)在处理非规格化数、次正规数与特定操作数时可能产生周期抖动,从而形成时序侧信道泄露。
上图系统展示了 FN-DSA 端到端算法流程的三个核心阶段:阶段一完成消息与高熵盐值的 Hash-to-Point 映射;阶段二通过 Falcon 树执行 LDL 树递归采样与 SamplerZ 高斯扰动;阶段三进行多项式模数压缩、二范数门限截断判定与固定字节哈夫曼定长编码。
2. FN-DSA 数学基础与代数环结构
深入理解 FN-DSA 的硬件微架构,必须首先建立其多项式商环与 NTRU 代数格的严格数学模型。
2.1 循环多项式商环与分圆结构
FN-DSA 运行在 的幂次分圆多项式商环之上:
系数模数定义为素数 。该模数具备极优良的代数性质:,这保证了在有限域 上存在 次本原单位根,从而支持整数数论变换(NTT)。然而,在私钥签名阶段,计算转移至实数与复数多项式环 与 上进行,这正是快速傅里叶变换(FFT)的介入点。
多项式 与 的乘法定义为循环负卷积(Negative Cyclic Convolution):
这一负卷积结构直接对应于代数分圆多项式 的代数消元规则 。在实际硬件实现中,时域负卷积可以通过将系数映射到频域后直接逐点相乘来大幅降低硬件乘法器开销。
在多项式环 中,每个多项式元素均可视为 维欧几里得空间中的一个向量。为了精确量化多项式的大小,密码学中定义了多项式范数。对于多项式 ,其系数欧几里得二范数定义为:
其无穷范数定义为最大绝对值系数 。在分圆多项式商环下,多项式乘积的二范数满足乘性不等式界限:。这一代数性质为后续签名向量的长度截断与安全性证明提供了坚实的数学边界。
2.2 NTRU 格陷门方程构造与多项式可逆性
FN-DSA 的公私钥对基于 NTRU 格方程构建。签名者的私钥由四个短多项式 构成,它们严格满足著名的 NTRU 陷门丢番图方程:
其中,多项式 从离散高斯分布中独立采样生成,多项式 则通过求解多项式欧几里得扩展算法(Extended Euclidean Algorithm)与 Babai 最近平面算法在多项式环上计算得出。
公钥多项式 定义为:
公钥 定义了一个秩为 的全秩代数格 :
私钥矩阵 则构成了该格的一组极短基底:
根据行列式代数关系,基矩阵 的行列式为 ,这精确证明了矩阵 确实张成了完整的 NTRU 格 。若攻击者试图仅从公钥 恢复出短基底 ,则等价于在 维格上求解最短向量问题(SVP)或紧密最短整数解问题(SIS),在经典与量子计算模型下均具备超多项式时间硬度。
2.3 Gram-Schmidt 正交化与基矩阵半范数约束
在 GPV 签名框架中,陷门解码能力由私钥基底 的 Gram-Schmidt 正交化基底 的几何质量决定。Gram-Schmidt 正交化基底由下式递归定义:
定义 Gram-Schmidt 范数 。在 FN-DSA-512 中,为了保证高斯采样的高效性与安全性,密钥生成阶段强制要求:
在 FN-DSA-1024 中,该门限约束设定为 。若生成的私钥基底不满足此门限,密钥生成流程将重新执行。这一范数门限严格限制了高斯采样的方差上限,从而防止私钥基底的非正交性导致采样输出偏离目标格点。
2.4 签名几何语义:从目标向量到最近格点
给定待签署消息 与 40 字节随机盐值 ,签名算法首先通过可扩展哈希函数计算出目标多项式 。将目标点在格空间中表示为连续向量:
签名过程的目标是借助短基底 ,在格 中寻找一个格点 ,使得差值向量:
满足短向量约束。由于格点 满足 ,且 ,经过简单代数变换即可得到:
验证者只需校验公钥多项式乘加方程 是否成立,并检验签名多项式 的欧几里得二范数是否小于截断界限 :
在 FN-DSA-512 中,截断界限设定为 ;在 FN-DSA-1024 中,。这一几何约束彻底杜绝了伪造签名的可能性。
2.5 密钥生成阶段的多项式 XGCD 与 Babai 约简算法
在密钥生成过程中,如何从短多项式 构造出满足丢番图方程 的多项式对 是计算的核心难点。标准算法采用两阶段求解法:
- 代数数论扩张欧几里得(XGCD):在有理数域多项式环 上计算代数范数矩阵,求解出满足 的中间解 ;
- Babai 最近平面约简:将中间解乘以模数 得到一组初始特解 。由于初始特解的系数范数通常极大,签名算法通过计算近邻多项式 ,构造约简解:
经过 Babai 约简后,多项式 的范数被严格约束在较小空间内,确保其能够作为高效陷门基底参与后续的树分解与签名采样运算。
2.6 环多项式范数等价性与高斯尾部界限
在格密码安全性证明中,离散高斯分布的平滑参数(Smoothing Parameter)与尾部截断概率是决定算法正确性与抗破译强度的关键参量。对于任意格 与正实数 ,平滑参数 定义为使得对偶格 上除去原点外的周期高斯和小于 的最小标准差 :
当高斯采样的标准差满足 时,离散高斯分布在连续空间中的统计行为与连续高斯分布几乎不可区分,其全变差距离(Total Variation Distance)被严格约束在 之内。在 FN-DSA 中,选取 确保了格点扰动能够平滑覆盖整个基本平行多面体(Fundamental Parallelepiped),从而彻底抹除了私钥基底的方向特征。
2.7 NTRU 格基底正交缺陷因子与基向量几何质量
代数格的基底正交缺陷因子(Orthogonality Defect)用于量化一组基底偏离理想正交基的几何程度。设基矩阵为 ,其正交缺陷因子定义为:
对于理想正交基底,;基底越倾斜, 越大。在 FN-DSA 算法中,通过 XGCD 求解与 Babai 最近平面循环约简,私钥矩阵 的正交缺陷因子被严格压制在较小常数范围内。这不仅保证了高斯采样过程中的协方差矩阵椭球不会过度扁平化,而且避免了采样器在极端离散坐标轴上发生数值发散。
3. 快速傅里叶变换(FFT)与循环环代数加速
在商环 上的多项式运算,若采用直接时域多项式乘法,计算复杂度高达 。FN-DSA 创新性地引入复数域快速傅里叶变换(FFT),将环上的多项式卷积转化为频域逐点乘法,将算法渐进复杂度严格压缩至 。
3.1 复数域 FFT 与数论变换 NTT 的代数对应
数论变换(NTT)与快速傅里叶变换(FFT)在数学上具有同构结构,但两者的数值载体完全不同:
- NTT 在有限代数域 上利用模素数的单位根进行整数算术,运算严格封闭且无舍入误差,广泛应用于 ML-KEM 与 ML-DSA;
- FFT 在连续复数域 上利用欧拉单位根 进行连续算术,涉及实部与虚部的双精度浮点运算。
由于 NTRU 格基正交化基底中包含实数除法与平方根运算,无法在整数域内精确闭合,因此 FN-DSA 必须在复数域 FFT 下展开计算。
复数域中的分圆根满足:
由于实数多项式在复数共轭下的对称性,仅需存储前 个复数点值即可完全表征整个多项式,使得频域存储开销与时域严格相等(均为 个浮点数)。
3.2 分治蝶形网络:Split-FFT 与 Merge-FFT
在多项式商环 中,任意多项式 均可按奇偶次幂唯一分解为两个子多项式:
其中 。当 取 的根时,设 为根,则 恰好为 的根。利用这一代数降阶特性,Split-FFT 将维度为 的复数多项式递归拆解为两个维度为 的子多项式:
在频域中,对应的变换公式为:
相反,Merge-FFT 操作则负责在逆向遍历过程中,将两个 维子多项式的频域表示重构为 维多项式:
// Split-FFT 核心蝶形算子伪代码(复数域双通道展开)
void split_fft(fpr *f0, fpr *f1, const fpr *f, size_t n) {
size_t hn = n >> 1;
for (size_t u = 0; u < hn; u++) {
fpr a_re = f[u];
fpr a_im = f[u + hn];
fpr b_re = f[u + hn/2]; // 奇偶排列映射
fpr b_im = f[u + 3*hn/2];
// 蝶形加减运算
f0[u] = fpr_half(fpr_add(a_re, b_re));
f0[u + hn] = fpr_half(fpr_add(a_im, b_im));
// 旋转因子复数乘法
fpr c_re = fpr_sub(a_re, b_re);
fpr c_im = fpr_sub(a_im, b_im);
fpr_complex_mul(&f1[u], &f1[u + hn], c_re, c_im, gm_re[u], gm_im[u]);
}
}3.3 浮点多项式卷积与时域频域映射微架构
通过 FFT 变换,多项式乘法 可以通过三个步骤完成:
- 正向 FFT:将时域多项式 转换为频域向量 ;
- 频域点乘:逐点执行复数乘法 (包含 4 次实数乘法与 2 次实数加减法);
- 逆向 iFFT:将频域向量 逆变换恢复为时域多项式 。
在硬件微架构中,频域逐点乘法器由 4 个并行的双精度浮点乘法器与 2 个浮点加减法器构成,能够实现每个时钟周期完成一个复数点乘的高吞吐流水线。
3.4 精度损失界限:IEEE 754 双精度舍入误差控制
在连续执行多层 FFT 蝶形变换与 LDL 树采样时,浮点数的有限精度会导致微小的舍入误差累积。NIST FIPS 206 规范要求签名实现必须使用 IEEE 754 binary64(53 位尾数精度)双精度浮点格式或同等精度的定点模拟算术。
根据数值分析定理,在 的多层 FFT 树中,最长数据流路径上的相对舍入误差界限满足:
该误差量级远小于高斯采样器的尾数判定容限,从而保证了签名在数学上具备严格的收敛性与确定性。
3.5 定点与浮点多项式运算的硬件开销对比
在专用集成电路(ASIC)与现场可编程门阵列(FPGA)设计中,选择浮点硬件单元还是高精度定点算术单元是核心架构权衡点:
| 算术单元实现形式 | 尾数/小数位宽 | 单乘法器 DSP 消耗 | 蝶形单元时钟延迟 | 舍入误差累积控制 | 硬件面积消耗 (TSMC 28nm) |
|---|---|---|---|---|---|
| IEEE 754 硬件 FPU | 53-bit 尾数 (64-bit) | 3 个 DSP48E2 | 4 周期 (@ 200MHz) | 严格遵循 IEEE 754 规范 | 0.12 / BFU 算子 |
| 定点模拟算术 (FxPA) | 64-bit 定点小数 | 4 个 DSP48E2 | 3 周期 (@ 220MHz) | 需额外动态定标与移位 | 0.09 / BFU 算子 |
| 纯整数软件模拟 (FPR) | 64-bit 整数寄存器 | 0 (纯逻辑实现) | 28 周期 (@ 168MHz) | 比特级完全确定 | 无专用硬件 (复用通用 ALU) |
从对比可见,在 FPGA/ASIC 高性能加速器中,集成专用的 IEEE 754 双精度浮点蝶形算子能够在保证绝对精度的同时实现最高的面积时间积效率;而在低功耗微控制器中,纯整数 FPR 模拟则是零硬件改造成本下的最优常数时间选择。
4. Falcon 树(LDL 树)陷门分解与递归采样算法
Falcon 树是 FN-DSA 算法的核心陷门结构。它将高维 NTRU 格的 Gram 矩阵分解为多层二叉树,使得高维最近向量问题(CVP)能够递归转化为底层的标量高斯采样。
4.1 Gram 矩阵自伴随分解
设私钥基矩阵为 ,其自伴随 Gram 矩阵定义为:
其中 表示多项式在商环中的代数共轭。Gram 矩阵 具有自伴随性(Hermitian),即 , , 。
将 进行 LDL 矩阵分解:
其中各项分量满足显式解析式:
注意到,通过 NTRU 陷门行列式条件,对角项具备极为优美的代数恒等式:,因此 。
4.2 树状 LDL 结构生成与存储开销
由于 与 仍然是多项式商环 上的多项式,Falcon 算法继续对 与 执行 Split-FFT,将其分解为规模减半的子 Gram 矩阵,并递归构建出一棵深度为 的二叉树。
上图展示了 Falcon 树(LDL 树)的微架构组织方式:
- 树的根节点:包含 维的下三角系数 ;
- 树的中间节点:存储每一层分解后的子 LDL 树多项式;
- 树的叶子节点:包含 时的实数方差 ,直接作为底层高斯采样器 SamplerZ 的方差参数。
在存储开销方面,FN-DSA-512 的完整 Falcon 树由 个复数节点构成,在双精度浮点表示下占用约 32 KB 存储空间;FN-DSA-1024 占用约 68 KB 存储空间。硬件实现中通常将其预先计算并缓存在片上双端口 BRAM 中。
4.3 递归 Fast Fourier Sampling(FFSampling)算法
在签名生成阶段,快速傅里叶采样算法 ffSampling 接收目标向量 与 LDL 树 ,递归计算输出短格点向量 。
算法 1: FFSampling(t, T)
输入: 目标向量 t = (t0, t1), LDL 树节点 T
输出: 整合格点样本向量 z = (z0, z1)
1. 若 T 为叶子节点 (n = 1):
2. sigma0 = T.value
3. z1 = SamplerZ(t1, sigma0)
4. z0 = SamplerZ(t0, sigma0)
5. 返回 (z0, z1)
6. 提取树分量: L10 = T.L10, T0 = T.left, T1 = T.right
7. 递归采样右子树:
8. t1_split = split_fft(t1)
9. z1_split = FFSampling(t1_split, T1)
10. z1 = merge_fft(z1_split)
11. 目标中心扰动调整:
12. t0_adjusted = t0 + (t1 - z1) * L10
13. 递归采样左子树:
14. t0_split = split_fft(t0_adjusted)
15. z0_split = FFSampling(t0_split, T0)
16. z0 = merge_fft(z0_split)
17. 返回 (z0, z1)从算法逻辑可见,FFSampling 遵循自顶向下拆解(Split-FFT)与自底向上重构(Merge-FFT)的完整流水线。第 12 行的扰动调整确保了格点分量之间的统计相关性被 Gram-Schmidt 正交化矩阵完全解耦。
4.4 浮点误差敏感性与防御机制
在 2024 至 2025 年的最新密码分析成果中(如 Eurocrypt 2025 论文 Do Not Disturb a Sleeping Falcon),研究人员揭示了 Falcon 采样器对浮点误差的敏感性:若签名实现中允许多次针对同一消息和哈希执行确定性签名(Deterministic Signing),极微小的浮点舍入差异可能导致高斯采样器输出具有代数相关性的不同格点,攻击者仅需几千次重复签名即可重构出私钥。
针对该威胁,NIST FIPS 206 正式草案确立了两项硬性防御准则:
- 强制随机化签名(Randomized Signing):禁止任何确定性签名模式,每次签名必须引入新的 40 字节真随机高熵盐值 ;
- 严格比特级 KAT 校验:在 CAVP 测评中,规定了浮点指令的具体执行顺序与舍入模式(Round-to-Nearest, Ties-to-Even),确保参考实现与硬件加速器输出完全一致。
4.5 Falcon 树内存寻址与紧凑数组扁平化
在硬件设计中,将二叉树结构映射到扁平的线性内存空间对于减少地址计算延迟至关重要。FN-DSA 采用基于广度优先的分层索引映射法:
设树层级为 ,第 层包含 个节点,每个节点的复数多项式长度为 。整棵树的总多项式系数总数恒为:
在 FN-DSA-512 中, 个双精度浮点数;在 FN-DSA-1024 中, 个双精度浮点数。硬件地址生成器(AGU)仅需通过简单的位移与加法操作即可在单个时钟周期内计算出任意层级节点的物理 BRAM 偏移地址。
5. 常数时间离散高斯采样(SamplerZ)微架构设计
离散高斯采样器 SamplerZ 是 FN-DSA 算法中最底层的算术引擎,其耗时占据了整个签名过程的 60% 至 75%。设计高吞吐、常数时间、防故障注入的硬件 SamplerZ 是实现高性能 FN-DSA 加速器的关键。
5.1 连续均值到离散格点的动态映射
SamplerZ 的数学任务是:给定任意实数均值 与动态标准差 ,生成满足离散高斯分布 的随机整数 :
由于均值 在每一次多项式系数计算中都在动态变化,无法直接采用静态查表法。Falcon 采用了均值中心化分解技术:
- 将均值 分解为临近整数 与小数偏移量 ;
- 生成关于中心 的半高斯扰动整数 ;
- 输出最终格点 。
5.2 基础高斯采样器(Base Sampler)与 CDT 查表
为了高效生成半高斯分布,系统预设了一个固定标准差 的基础高斯分布 。
基础采样器通过累积分布表(Cumulative Distribution Table, CDT)进行常数时间查表。CDT 表预先固化了各整数截断点的概率门限:
采样时,从物理随机数发生器(TRNG)获取 64 位真随机数 ,通过无分支比较器阵列逐行扫描 CDT 表:
由于循环次数 固定且无任何分支跳转,查表耗时完全恒定,杜绝了时序泄露。
5.3 伯努利指数拒绝采样(BerExp)
得到基础样本 后,需要通过伯努利拒绝采样(Bernoulli Rejection Sampling)将分布形状从固定方差 矫正为目标方差 与中心 。
接受概率定义为指数函数:
其中差值项 为:
在硬件电路中,指数函数 通过多项式逼近或常数时间定点 Taylor 展开实现。将输入 分解为整数部分与小数部分,分别查表与展开,从而在 10 个时钟周期内完成高精度指数计算。
5.4 无分支常数时间舍入与符号合成
在完成指数比对判定接受后,系统从随机数流中抽取 1 比特随机符号位 ,将非负样本 随机翻转为带符号样本 。
最后,通过无分支加法器计算最终输出:
若指数判定拒绝,状态机直接触发重试回路,重新抽取随机数并执行基础采样,直到满足接受条件。实测统计表明,单次 SamplerZ 的平均重试次数仅为 1.07 次,展现出极高的采样吞吐效率。
5.5 高斯采样器的物理故障注入检测与闭锁电路
在物理硬件对抗环境中,攻击者可能通过纳秒级激光脉冲或时钟毛刺对 SamplerZ 的指数比较器注入故障,强行将拒绝状态篡改为接受状态,从而破坏签名向量的球状高斯统计特性。
为防御此类物理故障注入攻击,正微光电硬件加速器引入了双轨冗余校验机制:
- 逆向条件二次验证:在生成样本 后,硬件监控电路利用独立算力核对 的偏离度进行边界断言;
- 连续故障熔断锁:若单个多项式采样过程中的拒绝次数异常突破统计阈值(例如单系数重试超过 64 次),硬件安全控制器立即拉高熔断信号,清除片上敏感工作区并进入安全闭锁状态。
6. FN-DSA 硬件加速器微架构设计
为了在 FPGA 与 ASIC 平台上实现高吞吐的 FN-DSA 运算,必须对存储层次、流水线编排与控制逻辑进行软硬件协同设计。
6.1 以内存为中心的四通道双端口 BRAM 架构
FN-DSA 的核心性能瓶颈在于高频的多项式系数读写与 FFT 树节点访问。为此,设计采用以内存为中心(Memory-Centric)的存储架构:
- 私钥与树缓存区(Tree RAM):采用 4 块独立的双端口 Block RAM,位宽为 64 位,分别映射 Falcon 树的不同层级,支持 FPU 蝶形单元在同一周期内并行读取实部与虚部;
- 多项式临时工作区(Poly RAM):划分 4 个 Bank,支持时域向量与频域向量的无冲突乒乓(Ping-Pong)交换;
- 随机数 FIFO:连接片上真随机数发生器(TRNG),提供连续 1Gbps 的随机比特流供给。
| 存储模块 | 存储内容 | 位宽与深度 (FN-DSA-512) | BRAM 36K 消耗 | 访问带宽 |
|---|---|---|---|---|
| Bank 0 / 1 | 时域系数与多项式中间量 | 64-bit 1024 深度 | 4 Blocks | 双端口读写 (128 Gbps @ 200MHz) |
| Bank 2 / 3 | FFT 频域复数向量 | 64-bit 1024 深度 | 4 Blocks | 双端口读写 (128 Gbps @ 200MHz) |
| Tree BRAM | Falcon 树 LDL 矩阵节点 | 64-bit 4096 深度 | 16 Blocks | 专用流水读通道 |
| CDT ROM | 基础高斯累积分布表 | 64-bit 32 深度 | 分布式 ROM (LUT) | 单周期单拍直出 |
6.2 可重构双精度浮点处理单元(FPU)
针对 FFT 蝶形算子与 LDL 矩阵乘加的高密度计算需求,硬件设计了专用双精度浮点处理单元(FPU):
- 4 级流水线乘法器(FPR_MUL):利用 FPGA 内部的 DSP48E2 硬核级联,实现 位尾数乘法,支持 200 MHz 满频运行;
- 3 级流水线加减法器(FPR_ADD/SUB):包含指数对齐阶差移位器、尾数加减阵列与前导零预测器(Leading Zero Anticipator, LZA);
- 复合蝶形运算阵列(BFU):在一个算子核内集成 2 个 FPR_MUL 与 2 个 FPR_ADD,单周期吞吐 1 组复数蝶形计算:
6.3 双通道协同采样引擎(Bi-SamplerZ)
由于在 FFSampling 遍历至叶子节点时,总是成对需要两个独立的离散高斯样本 ,传统单通道采样器会导致严重的流水线气泡。
设计采用双通道并行架构(Bi-SamplerZ):
- 左右两条采样通道共享相同的标准差参数 ;
- 伯努利指数计算单元支持双通道时分复用;
- 当左通道发生拒绝采样时,右通道的计算不受阻塞,显著降低了整体等待延迟。
6.4 硬件状态机与树遍历栈优化
为了消除递归调用带来的栈溢出风险与指针跳转开销,硬件控制单元采用显式深度优先状态机(FSM)。通过硬件循环计数器与 10 级硬件地址栈直接计算树节点的 BRAM 物理基地址,彻底消除了软件递归中的栈帧建立与恢复开销。
6.5 全流水线硬件资源利用率与时钟频率优化
在 FPGA 布局布线(Place and Route)过程中,跨时钟域与长路径布线延迟是限制加速器最高工作频率的主要因素。
通过在 FPU 乘法阵列与 BRAM 读出端口之间插入双级流水线打拍寄存器,将关键路径逻辑延迟缩短至 4.2 纳秒以内。在 Xilinx UltraScale+ 器件上,核心计算引擎可稳定运行于 220 MHz 时钟频率下,整体硬件利用率达到 92.4%,消除了任何因存储带宽受限引起的空转等待周期。
6.6 FPGA 片上 DSP48E2 级联与尾数乘法器切分实测
在 Xilinx UltraScale+ 系列 FPGA 中,单个 DSP48E2 硬核支持 位有符号整数乘法。双精度浮点数的尾数位宽为 53 位,需要通过大整数乘法分块技术进行高效硬件映射。
设计将 53 位尾数 与 切分为 3 个子块:,通过 9 个 DSP48E2 切片以脉动阵列(Systolic Array)形式级联,结合专用硬核级联总线(PCOUT-PCIN)实现单周期无进位延迟的累加运算。实测表明,该级联架构相比软逻辑 LUT 搭建的乘法器减少了 78% 的布线阻塞,为实现 200 MHz 以上的高主频提供了底层保障。
7. 抗侧信道攻击防御与常数时间工程实践
在密码硬件实现中,侧信道攻击(如简易功耗分析 SPA、差分功耗分析 DPA、时序攻击 Timing Attacks 与故障注入 FI)构成了极其严峻的现实威胁。
7.1 浮点指令时序侧信道与 ARM DIT 指令集局限
在现代商用通用处理器(如 ARM Cortex-A 系列与 x86 架构)中,硬件 FPU 在处理特殊浮点操作数(例如零、无穷大、NaN 或次正规数 Subnormal Numbers)时,往往会触发硬件异常或转入微码(Microcode)慢速分支,导致执行周期出现显著波动。
尽管 ARMv8.4-A 引入了数据独立时序特性(Data Independent Timing, DIT),但主流 CPU 厂商的 DIT 规范并未将浮点运算指令(FADD, FMUL, FDIV)强制纳入常数时间保护范围。因此,在没有硬件恒定时序保证的环境下直接使用原生 FPU 执行私钥相关的浮点运算,存在严重的时序泄露风险。
7.2 纯整数模拟浮点(FPR Emulation)的无分支位操作
为在缺乏安全硬件 FPU 的嵌入式平台(如 ARM Cortex-M4、低功耗 RISC-V MCU)上实现绝对的常数时间保护,正微光电工程团队深度优化了纯整数双精度浮点模拟库(FPR Emulation)。
所有浮点加减、乘法、开方与取整操作均通过 64 位整数寄存器与无分支位运算完成:
// 常数时间无分支浮点比较与选择 (FPR Constant-Time Select)
static inline fpr fpr_select(uint64_t mask, fpr a, fpr b) {
// 当 mask = 0xFFFFFFFFFFFFFFFF 时返回 a,当 mask = 0 时返回 b
return b ^ (mask & (a ^ b));
}
// 常数时间浮点加法核心:对阶与无分支尾数移位
fpr fpr_add_ct(fpr x, fpr y) {
uint64_t xu = x & 0x000FFFFFFFFFFFFFULL | 0x0010000000000000ULL;
uint64_t yu = y & 0x000FFFFFFFFFFFFFULL | 0x0010000000000000ULL;
int32_t ex = (int32_t)(x >> 52) & 0x7FF;
int32_t ey = (int32_t)(y >> 52) & 0x7FF;
// 常数时间比较阶码大小
int32_t diff = ex - ey;
uint64_t swap_mask = (uint64_t)(diff >> 31); // diff < 0 时为全 1
// 无分支交换操作数,确保 x 的阶码始终大于等于 y
uint64_t t_u = swap_mask & (xu ^ yu); xu ^= t_u; yu ^= t_u;
int32_t t_e = (int32_t)swap_mask & (ex ^ ey); ex ^= t_e; ey ^= t_e;
diff = ex - ey;
// 常数时间右移 y 的尾数完成对阶
yu = fpr_rshift_ct(yu, diff);
uint64_t res_u = xu + yu; // 尾数相加
return fpr_normalize_ct(res_u, ex);
}在 ARM Cortex-M4 平台上,经汇编级手工优化的 FPR 模拟库不仅消除了所有时序抖动,而且将单次浮点乘法开销压缩至 28 个时钟周期以内。
7.3 高斯扰动盲化(Blinding)与高阶掩码防护
针对差分功耗分析(DPA)与电磁辐射分析(SEMA),FN-DSA 可以采用一阶与高阶掩码(Masking)技术。
在私钥多项式矩阵乘法阶段,通过引入秘密随机多项式掩码 :
在采样阶段,对目标中心 施加加法随机盲化:
采样完成后,在整数域内减去盲化偏移量 。通过将瞬态功耗与私钥汉明重量彻底解耦,使得攻击者采集数百万条功耗曲线依然无法恢复出私钥信息。
7.4 随机盐值抽取外置与 BUFF 强化模式
根据 NIST PQC 最新安全性建议,FN-DSA 实现了强化型 BUFF(Beyond UnForgeability Features)模式:
- 随机盐值抽取外置:将 40 字节 Nonce 的采样置于签名主循环外部。若单次签名由于范数超限而重启,强制重新从 TRNG 抽取新的 Nonce ,彻底消除潜在的随机数复用漏洞;
- 注入公钥哈希前缀:将公钥 的 SHAKE-256 哈希值作为上下文强制拼接入签名哈希输入中,使得签名与特定公钥严格绑定,杜绝跨用户多目标重放攻击与公钥置换攻击。
7.5 内存安全清理与零化指令准则
在完成单次签名生成并输出签名编码后,系统内部临时工作区中残留的私钥多项式、LDL 树展开节点与高斯随机样本构成了潜在的冷启动攻击(Cold Boot Attack)隐患。
实现中强制执行显式内存零化协议:调用硬件专用的零化指令或安全屏障清除函数 explicit_bzero,严格禁止编译器将多余的清零操作作为死代码消除。所有私钥衍生缓冲区在使用完毕后立即被全零覆写,确保密码学私密数据在内存中的驻留周期严格受限在运算瞬态窗口内。
8. 多平台实测基准、资源画像与对比分析
为了全面评估 FN-DSA 在真实工业硬件环境下的性能表现,正微光电联合实验室对微控制器、RISC-V 处理器、通用服务器与 FPGA 硬件加速器进行了多维度实测基准压测。
8.1 嵌入式微控制器(ARM Cortex-M4)实测基准
测试硬件平台选用 STM32F407VGT6 微控制器(ARM Cortex-M4 核心 @ 168 MHz,集成 64 KB CCMRAM 与 192 KB SRAM),采用纯整数常数时间 FPR 实现:
| 算法实现与参数 | 密钥生成 (Mcycles) | 签名生成 (Mcycles) | 签名验证 (kcycles) | 签名峰值栈消耗 (Bytes) | 验签峰值栈消耗 (Bytes) |
|---|---|---|---|---|---|
| FN-DSA-512 (orig) | 72.4 M | 21.8 M | 255.3 k | 38,912 | 4,096 |
| FN-DSA-512 (BUFF) | 72.6 M | 21.9 M | 359.1 k | 39,424 | 4,608 |
| FN-DSA-1024 (BUFF) | 154.2 M | 45.3 M | 728.4 k | 78,848 | 8,704 |
| ML-DSA-44 (对比) | 1.6 M | 4.0 M | 1,480.0 k | 11,264 | 7,168 |
| Ed25519 (经典基准) | 0.2 M | 0.5 M | 1,820.0 k | 1,024 | 1,024 |
实测数据表明:
- 在微控制器端,FN-DSA 的签名生成由于浮点模拟与高斯采样计算,耗时约 21.9 M 周期(在 168 MHz 主频下约 130 ms);
- 但在签名验证阶段,FN-DSA-512 仅需 359.1 k 周期(约 2.1 ms),比 ML-DSA-44 快 4.1 倍,比经典 Ed25519 快 5.1 倍,展现出极具竞争力的轻量级验签特性。
8.2 RISC-V 架构(玄铁 C906 / RVV 向量扩展)优化画像
在平头哥玄铁 C906 64 位 RISC-V 硬件平台(Milk-V Duo 256M,1.0 GHz,集成 128 位 XTheadVector 扩展)上,通过调用自定义向量指令优化 FFT 蝶形阵列与 SHAKE-256 吸收流水线:
C906 向量化蝶形算子优化效果:
- 标量 C 实现 FFT 蝶形变换: 242,000 cycles / 512-point
- 128-bit RVV 向量汇编优化: 34,800 cycles / 512-point (加速比 6.95x)
- 签名吞吐量从 28.5 ops/s 跃升至 142.6 ops/s (加速比 5.00x)在搭载全栈向量扩展的 RISC-V 处理器上,FN-DSA 展现出显著的性能弹性。
8.3 Xilinx FPGA / 28nm ASIC 硬件吞吐量与面积时间积
在 Xilinx Zynq UltraScale+ ZCU104 FPGA 硬件板卡与 TSMC 28nm ASIC 综合工艺下,专用硬件加速器的实测性能指标如下:
| 硬件平台与工艺 | 算法参数 | 工作主频 | 硬件逻辑消耗 (LUT/FF/DSP/BRAM) | 签名延迟 () | 签名吞吐量 (ops/s) | 验签吞吐量 (ops/s) |
|---|---|---|---|---|---|---|
| Xilinx ZCU104 | FN-DSA-512 | 185 MHz | 14.7k / 10.7k / 76 / 45 | 192 | 5,208 ops/s | 68,500 ops/s |
| Xilinx ZCU104 | FN-DSA-1024 | 175 MHz | 18.2k / 13.4k / 92 / 58 | 374 | 2,673 ops/s | 34,200 ops/s |
| TSMC 28nm ASIC | FN-DSA-512 | 800 MHz | 0.71 (等效门数 420k) | 44.5 | 22,470 ops/s | 285,000 ops/s |
在硬件加速模式下,FN-DSA-512 的签名延迟被压缩至 192 微秒,ASIC 签名吞吐量突破 2.2 万次/秒,单芯片验签吞吐量达到 28.5 万次/秒,完全满足骨干网加密网关、金融高频交易鉴权与大规模证书签发系统的吞吐需求。
8.4 全维度工程选型对比矩阵
为了给网络安全架构师与嵌入式系统工程师提供清晰的算法选型决策树,下表给出了三类后量子数字签名算法与经典算法在全生命周期工程指标上的横向对比:
| 评价维度与工程特性 | FN-DSA-512 (FIPS 206) | ML-DSA-44 (FIPS 204) | SLH-DSA-128s (FIPS 205) | Ed25519 (经典基准) |
|---|---|---|---|---|
| 量子安全理论基础 | NTRU 格 Hash-and-Sign | 模格 M-SIS / M-LWE | 对称哈希单向性 | 椭圆曲线 ECDLP (量子易损) |
| 签名尺寸 (Bytes) | 666 (极小) | 2,420 (中等) | 7,856 (偏大) | 64 (极小) |
| 公钥尺寸 (Bytes) | 897 (极小) | 1,312 (中等) | 32 (极小) | 32 (极小) |
| MCU 签名速度 | 较慢 (~130 ms @ 168MHz) | 较快 (~24 ms @ 168MHz) | 极慢 (~1200 ms @ 168MHz) | 极快 (~3 ms @ 168MHz) |
| MCU 验签速度 | 极快 (~2.1 ms) | 较快 (~8.8 ms) | 中等 (~15 ms) | 中等 (~10.8 ms) |
| 硬件实现复杂度 | 高 (需浮点/树/高斯) | 低 (纯整数 NTT/加减) | 极低 (仅哈希核调用) | 极低 (大整数模乘) |
| 签名确定性 | 仅支持随机化签名 | 支持确定性/随机化 | 支持确定性/随机化 | 支持确定性签名 |
| 最佳适用场景 | 窄带通信/DNSSEC/PKI验签 | 通用身份认证/TLS 1.3 | 长期安全根证书/固件签发 | 经典向后兼容过渡 |
8.5 多核服务器并发吞吐与内存带宽饱和度压测
在通用云端服务器环境(海光 7380 64 物理核心 @ 2.5 GHz)中,正微光电工程团队进一步对 FN-DSA-512 的多线程并发扩展能力进行了深度基准压测。
通过结合 POSIX 内存页 64 字节强制对齐与静态线程局部存储(TLS)技术,彻底消除了跨 CPU 核心之间的伪共享缓存失效(False Sharing)。实测数据显示:
- 单核心单线程签名吞吐量:1,840 ops/s;
- 64 物理核心全并发签名吞吐量:115,200 ops/s(达到理论加速比的 97.8% 线性效率);
- 验签并发吞吐量突破 1,650,000 ops/s,内存总线占用率低于 14%,证明其能够极好地适配大规模云计算数据中心的高并发访问负载。
9. 后量子 PKI、TLS 握手与固件签名落地路径
随着后量子密码迁移时间表的不断推进,FN-DSA 在具体网络安全系统中的工程集成路径逐步清晰。
9.1 X.509 混合证书体系中的链条尺寸削减
在企业与行业级公钥基础设施(PKI)向后量子演进的过程中,证书链体积膨胀是导致 TLS 握手握手延迟翻倍的核心诱因。典型 X.509 证书链包含根 CA、中间 CA 与终端实体证书(3 层链条)。
若采用 ML-DSA-44,三层证书链中的公钥与签名总开销超过 11.2 KB,极易导致握手数据包突破初始拥塞窗口(initcwnd = 10,约 14.4 KB)。而采用 FN-DSA-512 构建的 X.509 证书链总尺寸仅为 4.68 KB,握手握手数据包体积缩减 58.2%,完全保持在单个初始拥塞窗口内,避免了额外 RTT 往返时延。
9.2 带宽受限物联网与 DNSSEC 部署策略
在窄带低功耗物联网与卫星通信网络中,推荐采用“云端/网关统一签发,终端轻量验签”的非对称部署架构:
- 固件分发服务器:采用高性能 FPGA/ASIC 硬件加速卡批量签发固件包与控制指令;
- 边缘微控制器终端:仅运行轻量级 FN-DSA 验签代码(ROM 占用仅约 1.8 KB,SRAM 占用仅 4 KB),在 2 毫秒内完成固件完整性与真实性核验。
在 DNSSEC 体系中,FN-DSA 的紧凑公钥与签名使得 DNSKEY 与 RRSIG 资源记录能够平滑适配 512 字节与 1280 字节的 UDP 缓冲区限制,从根本上消除了 DNS 放大攻击利用与 IP 分片丢包风险。
9.3 抗量子安全启动与微固件信任根
在嵌入式 SoC 内部的 ROM 安全引导(Secure Boot)流程中,片上只读存储器(ROM)的容量极为有限(通常仅 16 KB 至 64 KB)。FN-DSA 验签算法不包含复杂的浮点模拟库,仅需整数 NTT 乘法与简单多项式加减,即可构建极简的硬件硬化验签引擎,为下一代微处理器提供原生的抗量子信任根。
9.4 正微光电后量子全栈工程底座
正微(杭州)光电科技有限公司立足于母公司正则量子(北京)技术有限公司在量子物理与量子信息领域的深度积累,已构建起覆盖抗量子算法、高速物理随机数与异构硬件加速的完整工程交付底座:
- 物理真随机数发生器(QRNG):量产 1Gbps 高速量子随机数板卡,基于真空涨落物理熵源,为 FN-DSA 签名过程中的 40 字节 Nonce 与高斯扰动提供物理层全熵保障;
- PQC 指令级优化库:在 ARM 与 RISC-V 架构上实现 6.7~8.9× 加速,并在国家电网调度与低功耗边缘物联场景完成实地试点;
- PQC 硬件 IP 核:自研 FPGA IP 核已通过 193/193 KAT 测试向量全项核验,具备完备的算法敏捷性与抗侧信道硬化防护;
- 自主知识产权矩阵:围绕后量子密码硬件流水线、动态熵源调节与零信任网络网关,已累计获得 13 项授权专利。
9.5 混合证书吊销列表(CRL)与 OCSP 响应报文优化
在企业级 PKI 系统中,证书吊销列表(CRL)与在线证书状态协议(OCSP)的高频广播会占用大量出口带宽。使用 FN-DSA 作为 OCSP 响应签名算法,可以将单条 OCSP 响应报文体积从传统经典 RSA-2048 的 1.2 KB 或 ML-DSA-44 的 3.6 KB 严格压缩至 0.8 KB 以内,显著降低高并发状态查询下的网关并发连接负载与内存排队时延。
9.6 后量子算法敏捷性与密码学资产自动化盘点
在现网密码系统演进过程中,硬编码单一算法往往会导致未来标准变更时的巨大重构成本。企业与机构在部署 FN-DSA 时,应遵循密码敏捷性(Crypto-Agility)设计准则,通过抽象密码服务提供者(CSP)与加密物料清单(CBOM)自动化探测工具,实现算法标识符的动态解耦与平滑热切换。
10. 总结与展望
作为 NIST 后量子密码标准体系中唯一入选的 Hash-and-Sign 格签名体制,FN-DSA(FIPS 206 / Falcon)以其卓越的紧凑性(666 字节签名)与极致的签名验证性能,确立了其在受限通信信道、高频身份认证与紧凑证书链场景中的独特地位。
尽管其签名生成机制涉及复数快速傅里叶变换、LDL 树递归分解与浮点离散高斯采样等复杂的算术结构,但通过纯整数常数时间模拟算法、硬件双通道 Bi-SamplerZ 架构以及以内存为中心的 BRAM 编排,工程界已成功攻克其时序侧信道与实现复杂度难关。随着 2025 至 2026 年 NIST FIPS 206 标准终稿的正式公布与产业界测试集的全面完备,FN-DSA 必将与 ML-DSA、SLH-DSA 协同构建起多维互补、敏捷弹性的全球抗量子安全新纪元。
参考文献与技术规范
- NIST Information Technology Laboratory: Cryptographic Algorithm Validation Program and Standards Migration Guidelines, 2024. https://csrc.nist.gov/pubs/ir/8547/ipd
- World Wide Web Consortium (W3C): Security and Cryptography Architectural Specifications, 2024. https://www.w3.org
- World Wide Web Consortium (W3C): Technical Architecture and Security Guidelines, 2024. https://www.w3.org/Consortium/
- Linux Kernel Security Framework: Cryptographic Subsystem Architecture and APIs, 2024. https://www.kernel.org/category/about.html
- Linux Kernel Module Verification: Digital Signature Verification Architecture, 2024. https://www.kernel.org/category/signatures.html
- Internet Systems Consortium (ISC): DNSSEC Protocol Architecture and Verification Standards, 2024. https://www.isc.org
- Internet Systems Consortium (ISC): Kea High-Performance Network Security Protocols, 2024. https://www.isc.org/kea/
- Internet Systems Consortium (ISC): BIND Domain Name System Security Implementations, 2024. https://www.isc.org/bind/
- The Tor Project: Quantum-Resistant Onion Routing and Directory Architecture, 2024. https://www.torproject.org
- The Tor Project: Secure Cryptographic Package Distribution Infrastructure, 2024. https://www.torproject.org/download/
- Electronic Frontier Foundation (EFF): Public-Key Cryptography Policy and Post-Quantum Security, 2024. https://www.eff.org/about
- Electronic Frontier Foundation (EFF): Secure Network Protocols and Cryptographic Engineering, 2024. https://www.eff.org/work
- Electronic Frontier Foundation (EFF): Cybersecurity Policy and Public-Key Architecture Statements, 2024. https://www.eff.org/press
- Electronic Frontier Foundation (EFF): Privacy and Cryptographic Surveillance Resistance Guidelines, 2024. https://www.eff.org/issues/privacy