在线演练
《应用后量子密码学》中的每一个算法都有 SageMath 实现,下面的单元格直接在浏览器中运行它们,无需安装,也无需下载任何东西。编辑任意单元格,然后点击运行。
代码并没有复制到本页中。每个单元格都直接从代码仓库获取
.sage 源文件,因此这里运行的正是书中所讲解的代码。
代码在免费的 SageMath Cell 服务上执行,每次运行限时 30 秒。几乎所有内容都能在时限内完成;少数做不到的操作在下文注明,并给出在本地运行它们的命令。
下面是四个标准。书中其余的每一段代码(各章逐步搭建起来的格、LWE、NTT 和玩具版 Kyber 实验)同样可以运行,按章列在本页末尾。
ML-KEM (FIPS 203)
在全部三个参数集上进行密钥生成、封装与解封装。封装密钥与解封装密钥得到相同的共享秘密,各项尺寸与 FIPS 203 表 3 一致。
数论变换是一个环同构,而不只是一种快速乘法技巧。这项检查以 Sage 自身的算术为基准,验证了这一论断的全部三个部分;它正是 ML-KEM 一章中讨论的那项检查。
ML-DSA (FIPS 204)
签名采用带中止的 Fiat-Shamir,因此拒绝循环的迭代次数每次运行都不相同。公钥和签名的尺寸与 FIPS 204 表 2 一致。
SLH-DSA (FIPS 205)
f(“快速”)参数集的签名速度足够快,可以在这里端到端运行。
s(“小型”)参数集以签名时间换取签名尺寸,对它们签名所需的时间远超
30 秒。不过验证是快的方向,用时远不到一秒,因此由
apqc_demo_sig 从 NIST 的 ACVP
向量中提供一个签名,其余交给验证器完成。请注意这些签名比上面的
f 签名小了多少。
FN-DSA (FIPS 206, Falcon)
FIPS 206 仍在制定中,因此这里遵循第三轮的 Falcon 提交方案。有两项检查用时远不到一秒:用 Falcon 公布的测试向量检查高斯采样器,以及用多项式环中的精确算术检查浮点 FFT。
Falcon 的密钥生成要运行 NTRU
塔式求解器,需要的是几分钟而不是几秒钟,因此改由
apqc_demo_key 加载第三轮的 KAT
密钥。用它进行签名和验证都很快。
一个 Falcon-512 签名为 666 字节:1 个头部字节、40 字节的盐值,以及
625 字节压缩后的
s2。书中从采样器的高斯宽度以及“符号位、低七位、一元码”编码推导出这个数字;这个单元格在一个真实签名上检验该推导。公钥没有可利用的“短小”性质,每个系数要占满
14 比特。
浏览器中放不下的内容
有三件事超出了 30 秒的时间预算。apqc_require
会点名指出它们,并说明应当改为运行什么,而不是让单元格在时限处悄无声息地终止。
要不受限制地运行全部内容,包括针对 NIST ACVP 向量的完整 462 项检查测试套件:
git clone https://github.com/AppliedPQC/AppliedPQC
cd AppliedPQC/sage
./fetch_vectors.sh
sage test_kat.sage书中的每一段代码
各章的全部 108 段代码都可以用同样的方式运行。每个单元格会先重放本章此前的代码,因此任何一段都可以单独试运行。
没有匹配的内容。