Applied PQC 首页 本书 在线演练 博客 @AppliedPQC English

ML-KEM(FIPS 203)的完整实现

《应用后量子密码学》本章的全部代码:共 7 段,其中 7 段可在此运行。编辑任意单元格,然后点击运行。

书中的代码片段在一章之内层层相依,但 Sage Cell 内核每次只运行一个单元格,运行后不保留任何状态,因此每个单元格都会用 apqc_book 重放此前的代码。这一调用是在书中原有代码之外唯一添加的内容。

← 在线演练

代码 1:SageMath 实验

对于教学实现,我们可以先用一个简单的确定性伪随机生成器来模拟这种扩展。

代码 2:实验 1:验证 ExpandA

使用同一个种子两次:

代码 3:实验 2:考察 CBD 的统计特性

从 CBD 分布中生成大量样本,并检查其平均值接近于零。

代码 4:实验 4:一次 MultiplyNTTs 基乘积

FIPS 203 中的 NTT 域乘法并不是 256 个相互独立的标量乘积。每对坐标都是在模一个二次关系的意义下相乘的。下面的检查实现了其中一对;它测试的是代数上的基本情形,而不是完整的标准化变换或其序列化。

代码 5:一个完整的 SageMath 实现

上面的实验演示了各个单独的部件。配套文件 sage/fips203_mlkem.sage 把它们全部组装成 FIPS 203 的一个完整的、字节级精确的实现:标准中编号的二十一个算法,每一个都以独立函数的形式出现,以标准中的名称命名并标注其算法编号,且适用于全部三个参数集。

其中的代数对象是真正的 Sage 对象,而不是不透明的字节数组。系数域就是商环本身,

而 NTT 域 T_q 则以 𝔽_q 上的 Sage 向量来承载:

代码 6:一个完整的 SageMath 实现

在此基础上,变换就是直接在 𝔽_q 上写出的标准蝶形网络:

代码 7:一个完整的 SageMath 实现

于是,密钥生成就是本章的七个阶段,逐行对应: