CRYSTALS-Kyber(ML-KEM)简介

1. 引言

代数格密码套件(Cryptographic Suite for Algebraic Lattices,CRYSTALS) 包含两种密码学原语:

  • Kyber:一种达到 IND-CCA2 安全性的密钥封装机制(Key Encapsulation Mechanism,KEM);【即ML-KEM】
  • Dilithium:一种达到强 EUF-CMA(存在性不可伪造,针对选择消息攻击)安全性的数字签名算法。【即ML-DSA】

这两种算法均基于模块格(module lattices)上的困难问题构建,旨在抵御大型量子计算机的攻击,并已提交至 NIST 后量子密码学项目

1.1 模块格(Module Lattices)

模块格可以被视为介于用于定义 LWE(Learning With Errors)问题 的格与用于定义 Ring-LWE 问题的格之间的一类格。

如果模块所基于的环具有足够高的阶数(如 256),那么这些格不仅继承了 Ring-LWE 所使用格结构的全部效率优势,而且在CRYSTALS系列密码学算法中还具有以下额外优点:

  • 1)对于 Kyber 和 Dilithium 的所有安全等级,所需的运算仅包括:

    • Keccak 的各种变体;
    • 固定模数 q q q 下的 Z q \mathbb{Z}_q Zq 加法与乘法;
    • 环 Z q X / ( X 256 + 1 ) \mathbb{Z}_qX/(X^{256}+1) ZqX/(X256+1) 上的 NTT(Number Theoretic Transform,数论变换)。

    这意味着提高或降低安全等级几乎不需要对软件或硬件实现进行重新设计。

    只需调整少量参数,就可以将针对某一安全等级优化过的实现转换为针对另一安全等级的优化实现。

  • 2)Kyber 和 Dilithium 所使用的格结构比 Ring-LWE 所使用的格具有更少的代数结构,更接近于 LWE 中使用的非结构化格。

    因此,如果未来出现针对 Ring-LWE 的代数攻击(截至目前尚未发现此类攻击),那么这些攻击对 Kyber 和 Dilithium 等方案的效果很可能会更弱。

1.2 新闻

相关新闻有:

1.3 致谢

Kyber 和 Dilithium 的设计与实现得到了以下机构和项目的支持:

  • 欧盟委员会 ICT 计划资助项目 ICT-645622(PQCRYPTO)
  • 欧盟委员会 ICT 计划资助项目 ICT-644729(SAFEcrypto)
  • 瑞士国家科学基金会(Swiss National Science Foundation)2014 年 ERC Starting Grant 转移项目 CRETP2-166734(FELICITY)
  • 荷兰科学研究组织(NWO)Veni 项目 639.021.645(Cryptanalysis of Lattice-based Cryptography)
  • 欧盟委员会 ERC Starting Grant ERC-2013-StG-335086(LATTAC)
  • 欧盟委员会 ERC Consolidator Grant ERC-2013-CoG-615073(ERCC)
  • 欧盟委员会 ERC Starting Grant ERC-2018-StG-805031(EPOQUE)
  • 德国科研基金会(DFG)卓越集群 2092 项目(CASA

参与 Kyber 和 Dilithium 设计的机构包括:

  • Centrum voor Wiskunde en Informatica(CWI,荷兰国家数学与计算机科学研究中心)
  • École Normale Supérieure de Lyon(ENS Lyon,里昂高等师范学院)
  • IBM Research Zurich(IBM 苏黎世研究院)
  • Max Planck Institute for Security and Privacy(MPI-SP,马克斯·普朗克安全与隐私研究所)
  • NXP Semiconductors
  • Radboud University(拉德堡德大学)
  • Ruhr University Bochum(波鸿鲁尔大学)

2. Kyber简介

Kyber 是一种达到 IND-CCA2 安全性 的密钥封装机制(Key Encapsulation Mechanism,KEM),其安全性建立在模块格(Module Lattices)上的学习带误差问题(Learning With Errors,LWE)的求解困难性之上。

Kyber 是 NIST 后量子密码学项目 的最终入围算法之一。

Kyber 提交方案包含三个不同的参数集,对应不同的安全等级:

  • Kyber-512:目标安全性大致相当于 AES-128;
  • Kyber-768:目标安全性大致相当于 AES-192;
  • Kyber-1024:目标安全性大致相当于 AES-256。

对于希望实际使用 Kyber 的用户,建议:

  • 采用所谓的混合模式(hybrid mode),与成熟的"后量子前(pre-quantum)"安全机制联合使用,例如椭圆曲线 Diffie-Hellman(ECDH);
  • 推荐使用 Kyber-768 参数集。根据非常保守的安全分析,它能够抵御目前所有已知的经典和量子攻击,并提供超过 128 位的安全强度。

2.1 科学背景

Kyber 的设计源于 Regev 开创性的基于 LWE 的加密方案

自 Regev 的原始工作以来,LWE 加密方案的实际效率得到了显著提升,主要来自以下几个观察和改进:

  • LWE 中的秘密向量(secret)可以来自与噪声(noise)相同的概率分布
  • 可以通过使用方阵(square matrix)而非矩形矩阵(rectangular matrix)作为公钥,构造出所谓的 "LWE-like" 方案

另一项重要改进来自于最初应用于 NTRU 密码系统 的思想------研究人员引入多项式环(polynomial rings)来替代整数环,从而定义了:

Kyber 的结构建立在一个达到 CPA 安全性的密码系统之上,而该密码系统的安全性则基于 Module-LWE 问题的困难性。随后通过标准变换进一步构造出达到 CCA 安全性的 KEM------Kyber。

2.2 Kyber 的用户

Kyber 已经被工业界集成到多个密码库和系统中,如:

3. Kyber性能概览

下表展示了 Kyber 的性能情况。

所有测试数据均来自 Intel Core i7-4770K(Haswell)处理器的单核环境。

文中给出了两种实现方式的测试结果:

  • C 语言参考实现(Reference Implementation)
  • 使用 AVX2 向量指令优化的实现(Optimized AVX2 Implementation)

对于 ARM Cortex-M4 微控制器平台上的性能数据,可参考 pqm4 项目公布的基准测试结果:

Kyber-512
尺寸(字节) Haswell 周期数(参考实现) Haswell 周期数(AVX2)
sk(私钥) 1632 gen(密钥生成) 122,684 gen 33,856
pk(公钥) 800 enc(封装) 154,524 enc 45,200
ct(密文) 768 dec(解封装) 187,960 dec 34,572
Kyber-768
尺寸(字节) Haswell 周期数(参考实现) Haswell 周期数(AVX2)
sk(私钥) 2400 gen(密钥生成) 199,408 gen 52,732
pk(公钥) 1184 enc(封装) 235,260 enc 67,624
ct(密文) 1088 dec(解封装) 274,900 dec 53,156
Kyber-1024
尺寸(字节) Haswell 周期数(参考实现) Haswell 周期数(AVX2)
sk(私钥) 3168 gen(密钥生成) 307,148 gen 73,544
pk(公钥) 1568 enc(封装) 346,648 enc 97,324
ct(密文) 1568 dec(解封装) 396,584 dec 79,128

作为 NIST PQC 项目第二轮提交的更新,还提出了 Kyber 的一个变体,用于展示当底层硬件能够直接支持对称密码原语时,Kyber 所能达到的性能水平。

该变体称为 Kyber-90s,其使用:

  • AES-256 CTR(计数器)模式;
  • SHA-2;

来替代原始 Kyber 中使用的 SHAKE。

Kyber-512-90s
Haswell 周期数(参考实现) Haswell 周期数(AVX2)
gen(密钥生成) 213,156 gen 21,880
enc(封装) 213,156 enc 28,592
dec(解封装) 277,612 dec 20,980
Kyber-768-90s
Haswell 周期数(参考实现) Haswell 周期数(AVX2)
gen(密钥生成) 389,760 gen 30,460
enc(封装) 432,764 enc 40,140
dec(解封装) 473,984 dec 30,108
Kyber-1024-90s
Haswell 周期数(参考实现) Haswell 周期数(AVX2)
gen(密钥生成) 636,380 gen 43,212
enc(封装) 672,644 enc 56,556
dec(解封装) 724,144 dec 44,328

4. Kyber资源

4.1 NIST 第三轮提交包(Round 3)

NIST 第三轮提交包是提交给 NIST PQC 项目第三轮 的 ZIP 压缩包。

其中包含:

  • Kyber 规范文档(Specification)
  • 参考实现(Reference Implementation)
  • AVX2 优化实现
  • 测试向量(Test Vectors)

下载 NIST 第三轮提交包(ZIP)

4.2 NIST 第二轮提交包(Round 2)

NIST 第二轮提交包是提交给 NIST PQC 项目第二轮 的 ZIP 压缩包。

其中包含:

  • Kyber 规范文档(Specification)
  • 参考实现(Reference Implementation)
  • AVX2 优化实现
  • 测试向量(Test Vectors)

下载 NIST 第二轮提交包(ZIP)

4.3 NIST 提交包(Round 1)

NIST 提交包是于 2017 年 11 月提交给 NIST PQC 项目 的 ZIP 压缩包。

其中包含:

  • Kyber 第一轮(Round 1)规范文档
  • 参考实现
  • 测试向量

下载 NIST 提交包(ZIP)

4.4 Kyber论文

  • CRYSTALS-Kyber(版本 3.02)------ 提交至 NIST 后量子密码学项目第三轮

    作者:

    Roberto Avanzi、Joppe Bos、Léo Ducas、Eike Kiltz、Tancrède Lepoint、Vadim Lyubashevsky、John M. Schanck、Peter Schwabe、Gregor Seiler 和 Damien Stehlé。

    规范文档(2021 年 8 月更新版)。

    2021-08-04

    [pdf](https://pq-crystals.org/kyber/data/kyber-specification-round3-20210804.pdf)

  • CRYSTALS-Kyber(版本 3.01)------ 提交至 NIST 后量子密码学项目第三轮

    作者:

    Roberto Avanzi、Joppe Bos、Léo Ducas、Eike Kiltz、Tancrède Lepoint、Vadim Lyubashevsky、John M. Schanck、Peter Schwabe、Gregor Seiler 和 Damien Stehlé。

    规范文档(2021 年 1 月更新版)。

    2021-01-31

    [pdf](https://pq-crystals.org/kyber/data/kyber-specification-round3-20210131.pdf)

  • CRYSTALS-Kyber(版本 3.0)------ 提交至 NIST 后量子密码学项目第三轮

    作者:

    Roberto Avanzi、Joppe Bos、Léo Ducas、Eike Kiltz、Tancrède Lepoint、Vadim Lyubashevsky、John M. Schanck、Peter Schwabe、Gregor Seiler 和 Damien Stehlé。

    规范文档(提交包组成部分)。

    2020-10-01

    [pdf](https://pq-crystals.org/kyber/data/kyber-specification-round3.pdf)

  • CRYSTALS-Kyber(版本 2.0)------ 提交至 NIST 后量子密码学项目第二轮

    作者:

    Roberto Avanzi、Joppe Bos、Léo Ducas、Eike Kiltz、Tancrède Lepoint、Vadim Lyubashevsky、John M. Schanck、Peter Schwabe、Gregor Seiler 和 Damien Stehlé。

    规范文档(提交包组成部分)。

    2019-03-30

    [pdf](https://pq-crystals.org/kyber/data/kyber-specification-round2.pdf)

  • CRYSTALS-Kyber ------ 提交至 NIST 后量子密码学项目

    作者:

    Roberto Avanzi、Joppe Bos、Léo Ducas、Eike Kiltz、Tancrède Lepoint、Vadim Lyubashevsky、John M. Schanck、Peter Schwabe、Gregor Seiler 和 Damien Stehlé。

    规范文档(提交包组成部分)。

    2017-11-30

    [pdf](https://pq-crystals.org/kyber/data/kyber-specification.pdf)

  • CRYSTALS -- Kyber: a CCA-secure module-lattice-based KEM

    作者:

    Joppe Bos、Léo Ducas、Eike Kiltz、Tancrède Lepoint、Vadim Lyubashevsky、John M. Schanck、Peter Schwabe、Gregor Seiler 和 Damien Stehlé。

    发表于:

    2018 IEEE European Symposium on Security and Privacy(EuroS&P 2018)

    [从 ePrint 下载](https://eprint.iacr.org/2017/634)

  • Memory-Efficient High-Speed Implementation of Kyber on Cortex-M4(Cortex-M4 上 Kyber 的高性能低内存实现)

    作者:

    Leon Botros、Matthias Kannwischer 和 Peter Schwabe。

    发表于:

    第 11 届非洲密码学国际会议(Africacrypt 2019)

    [从 ePrint 下载](https://eprint.iacr.org/2019/489)

4.5 演讲资料(Presentations)

  • CRYSTALS-Kyber

    Peter Schwabe。

    第二届 NIST 后量子密码标准化会议(Second NIST PQC Standardization Conference)演讲。

    2019-08-23

    [slides](https://pq-crystals.org/kyber/data/slides-nistpqc19-schwabe.pdf)

  • CRYSTALS-Kyber

    Peter Schwabe。

    第一届 NIST 后量子密码标准化会议(First NIST PQC Standardization Conference)演讲。

    2018-04-12

    [slides](https://pq-crystals.org/kyber/data/slides-nistpqc18-schwabe.pdf)

  • Standardizing Lattice Cryptography ... and Beyond(格密码标准化及其未来发展)

    Vadim Lyubashevsky。

    PQCRYPTO 2017 特邀报告(Invited Talk)。

    2017-06-28

    [slides](https://pq-crystals.org/kyber/data/slides-pqcrypto17-lyubashevsky.pdf)

5. Kyber软件(Software)

5.1 公开 Git 仓库(Public Git Repository)

获取 Kyber 软件的主要渠道是其公开的 GitHub 仓库https://github.com/pq-crystals/kyber

下载并构建软件,请执行以下步骤:

bash 复制代码
git clone https://github.com/pq-crystals/kyber.git

cd kyber/ref && make

cd ../avx2 && make

ref/avx2/ 两个子目录中,上述命令会构建共 26 个可执行文件(binaries)

对于以下 6 个参数集:

  • Kyber-512
  • Kyber-512-90s
  • Kyber-768
  • Kyber-768-90s
  • Kyber-1024
  • Kyber-1024-90s

都会分别生成:

  • test_kyber
  • test_kex
  • test_vectors
  • test_speed

此外,还会为推荐参数集 Kyber-768 构建 NIST 测试向量生成程序:

  • PQCgenKAT_kem

其中:

  • 1)test_kyber 会执行多轮:

    • 密钥生成(Key Generation)
    • 封装(Encapsulation)
    • 解封装(Decapsulation)

    测试,以验证通信双方最终得到的共享密钥是否一致。

    此外,它还会进行多次异常测试:

    • 修改私钥后进行密钥交换;
    • 修改密文后进行密钥交换;

    并验证这些情况下密钥交换能够正确失败。

    如果所有测试均通过,程序只会输出:

    • 私钥大小(Secret Key Size)
    • 公钥大小(Public Key Size)
    • 密文大小(Ciphertext Size)
  • 2)test_kex 用于测试:

    • 单向认证密钥交换(Unilaterally Authenticated Key Exchange)
    • 双向认证密钥交换(Mutually Authenticated Key Exchange)

    如果测试成功,程序仅输出通信双方传输的数据总量。

  • 3)test_vectors 输出若干次 Kyber 执行过程中的确定性测试向量(Deterministically Generated Test Vectors)。

    该程序主要用于:

    验证不同独立实现之间的兼容性。

  • 4)test_speed 输出 Kyber 各种子例程(subroutines)的性能基准测试结果。

    该程序假设运行环境支持:

    Intel CPU 周期计数(cycle counting)。

5.2 与 Open Quantum Safe 的集成

对于 Open Quantum Safe(OQS) 框架的用户来说,直接使用 liboqs 可能更为方便。

因为:

liboqs 已经集成了 Kyber 的实现。

5.3 与 PQClean 的集成

对于希望将多个不同 NIST PQC 候选算法快速集成到现有代码库中的开发者,可以考虑使用集成于 PQClean 中的 Kyber 实现。

实际上:

liboqs 集成 Kyber 的方式也是通过 PQClean 实现的。

5.4 第三方实现(Third-party Implementations)

下面列出了若干 Kyber 的第三方实现链接。

这些实现并非由 CRYSTALS 团队维护;如遇到相关问题,请直接联系对应实现的作者。

参考资料

1 Kyber官网

相关推荐
mutourend11 天前
以太坊中的后量子密码学
后量子密码学
mutourend13 天前
Zcash 与量子计算机
区块链·量子计算·后量子密码学
mutourend13 天前
量子计算与区块链:让紧迫性与真实威胁相匹配
区块链·量子计算·后量子密码学
mutourend14 天前
Coinbase团队2026年Q1 量子计算与区块链 研报
区块链·量子计算·后量子密码学
mutourend19 天前
Solana 的量子准备情况
后量子密码学
mutourend20 天前
Anza团队的 Solana抗量子思考
后量子密码学
mutourend24 天前
NTT-EIP:作为 FALCON、DILITHIUM 和 STARK 验证器的基础构件
后量子密码学
mutourend1 个月前
ETHDILITHIUM 与 ETHFALCON:以太坊后量子时代方案
后量子密码学
mutourend1 个月前
后量子密码与区块链:行业现状
后量子密码学