当前位置: 首页 > news >正文

后量子密码算法ML-KEM介绍及开源代码实现

标准原文:https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.203.pdf

一、标准背景与定位

NIST FIPS 203《模格基密钥封装机制标准》发布于 2024 年 8 月 13 日,是应对量子计算威胁的后量子密码学标准之一。该标准基于 CRYSTALS-KYBER 算法,定义了模格基密钥封装机制(ML-KEM),用于在公共信道上安全建立共享密钥,适用于联邦政府及私人组织的敏感信息保护,可抵抗大规模量子计算机的攻击。

二、核心定义与作用

密钥封装机制(KEM)是一种通过三个算法(密钥生成、封装、解封装)在通信双方间建立共享密钥的技术。ML-KEM 的核心作用是:通信双方通过公共信道交换信息后,各自生成相同的共享密钥,该密钥可直接用于对称加密、认证等安全通信任务。其安全性基于模格上的学习误差问题(MLWE),该问题在量子计算模型下仍被认为具有计算困难性。

三、关键算法与流程

ML-KEM 由三个核心算法构成,依赖公共密钥加密(K-PKE)作为子模块,具体流程如下:

1. 密钥生成(ML-KEMKeyGen)

  • 生成 32 字节随机种子,通过扩展生成封装密钥(公钥)和解封装密钥(私钥)。
  • 封装密钥包含多项式矩阵的种子和加密相关参数,可公开;解封装密钥包含私钥、封装密钥哈希等敏感信息,需保密。
  • 核心步骤:通过伪随机生成器生成矩阵A、秘密向量s和噪声向量e,计算t = A·s + e作为公钥核心部分,私钥包含s和e的信息。

2. 封装(ML-KEMEncaps)

  • 输入封装密钥,生成 32 字节随机数,通过 K-PKE 加密生成密文,并推导共享密钥。
  • 核心步骤:生成随机向量y和噪声e1、e2,计算u = A^T·y + e1和v = t^T·y + e2 + 消息编码,压缩后形成密文;同时通过哈希推导共享密钥。

3. 解封装(ML-KEMDecaps)

  • 输入解封装密钥和密文,解密得到明文,重新加密验证密文有效性,最终输出共享密钥。
  • 核心步骤:使用私钥s计算v' = s^T·u,通过v - v'恢复消息,重新加密比对密文一致性,确保安全性。

四、参数集与性能

ML-KEM 定义了三个参数集,平衡安全强度与性能,具体如下:

参数集

安全等级

核心参数(k/η₁/η₂/du/dv)

密钥与密文大小(字节)

适用场景

ML-KEM-512

类别 1

2/3/2/10/4

封装密钥 800、解封装密钥 1632、密文 768

一般安全需求场景

ML-KEM-768

类别 3

3/2/2/10/4

封装密钥 1184、解封装密钥 2400、密文 1088

中等安全需求(推荐默认)

ML-KEM-1024

类别 5

4/2/2/11/5

封装密钥 1568、解封装密钥 3168、密文 1568

高安全需求(如国防)

  • 安全等级:对应 NIST 定义的抗量子攻击能力,数值越高安全性越强,但密钥和密文尺寸越大,计算开销越高。
  • 共享密钥:均为 256 位,可直接用于对称加密或通过密钥派生生成更多密钥材料。

五、安全特性与实现要求

  1. 抗量子性:基于 MLWE 问题,抵抗量子算法攻击,保障长期安全性。
  1. 正确性:正常情况下,封装与解封装生成的共享密钥完全一致,解密失败率极低(≤2⁻¹⁶⁴.⁸)。
  1. 实现要求
    • 随机数生成:使用 NIST 批准的随机位生成器(RBG),安全强度匹配参数集(如 ML-KEM-1024 需≥256 位)。
    • 输入检查:验证密钥和密文的格式、长度及有效性,防止恶意输入。
    • 密钥管理:解封装密钥需保密,中间计算值需及时销毁,禁止使用浮点运算避免精度误差。
    • 兼容性:允许数学等效的实现步骤,但需保证输入输出一致。

六、与 CRYSTALS-KYBER 的差异

ML-KEM 基于 CRYSTALS-KYBER 演进,主要差异包括:

  • 共享密钥长度固定为 256 位,而非可变长度。
  • 调整 Fujisaki-Okamoto 变换,移除密文哈希在共享密钥派生中的作用。
  • 增加严格的输入检查步骤,确保密钥和密文格式合法。
  • 引入域分离机制,防止不同参数集的密钥混用。

七、应用场景

ML-KEM 适用于需要安全密钥协商的场景,包括:

  • 加密通信:如 VPN、TLS 等协议中的密钥交换。
  • 数据保护:云存储、金融交易中的敏感信息加密。
  • 物联网:设备间安全配对与通信。

作为 NIST 首批后量子密码标准,ML-KEM 为量子时代的安全通信提供了关键基础,是传统 RSA、ECDH 等密钥交换机制的重要替代方案。

开源代码实现参考

【openHiTLS开源密码库已开源实现ML-KEM,欢迎下载使用】

 openHiTLS旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
 项目地址:https://gitcode.com/openHiTLS/openhitls

http://www.dtcms.com/a/335097.html

相关文章:

  • 数据结构:二叉平衡树
  • ROS move_base 混合功能导航 RealSense D435i + 3D 点云地图 + 楼层切换 + 路径录制 + 路径规划
  • 微服务的编程测评系统12-xxl-job-历史竞赛-竞赛报名
  • C++ 力扣 1658.将 x 减到 0 的最小操作数 题解 优选算法 滑动窗口 (同向双指针)优化 每日一题 详细题解
  • 免费万能电子书格式转换器!Neat Converter支持 ePub、Azw3、Mobi、Doc、PDF、TXT 文件的相互转换。
  • 两个简单的设计模式的例子
  • FP16(半精度)和FP32(单精度)
  • CentOS7安装使用FTP服务
  • 产品设计.原型设计
  • TexStudio中的Latex,PDFLatex,XeLatex和LuaLatex的区别
  • vue优化有哪些手段?
  • ubuntu网络共享
  • 深度解析和鲸社区热门项目:电商双 11 美妆数据分析的细节与价值
  • ubuntu远程桌面很卡怎么解决?
  • [Linux] Linux系统负载监控 Linux服务管理
  • Java Stream sort算子实现:SortedOps
  • 网络层(1)
  • DeepResearch开源与闭源方案对比
  • autofit.js: 自动调整HTML元素大小的JavaScript库
  • 小智-ESP32的MQTT协议
  • linux设备驱动之字符设备驱动
  • Python-Pandas基础
  • 主从复制+哨兵
  • 移动互联网发展战略
  • Altium Designer 22使用笔记(7)---网表导入,叠层设置
  • Spring框架(IOC)
  • 程序设计|C语言教学——C语言基础4:进阶
  • TOGAF八步一法笔记2
  • day42_2025-08-16
  • TDengine 3.3.7.0 版新功能(BLOB 数据类型)