当前位置: 首页 > 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.lryc.cn/news/623161.html

相关文章:

  • 11-verilog的RTC驱动代码
  • CPP多线程2:多线程竞争与死锁问题
  • RK3568 NPU RKNN(三):RKNN-ToolKit2模型构建与推理
  • 微服务架构实战指南:从单体应用到云原生的蜕变之路
  • AUTOSAR进阶图解==>AUTOSAR_SWS_FlexRayTransceiverDriver
  • 如何在FastAPI中玩转APScheduler,实现动态定时任务的魔法?
  • 【Docker】Ubuntu上安装Docker(网络版)
  • 储能领域大数据平台的设计中如何使用 Hadoop、Spark、Flink 等组件实现数据采集、清洗、存储及实时 / 离线计算,支持储能系统分析与预测
  • 打卡day40
  • 一些 DS 题目
  • Spark 数据分发性能深度剖析:mapPartitions vs. UDF – 你该选择哪一个?
  • docker-compose-mysql-定时备份数据库到其他服务器脚本
  • 【Web后端】Django、flask及其场景——以构建系统原型为例
  • 【OpenGL】LearnOpenGL学习笔记09 - 材质、光照贴图
  • 体彩排列三第2025218期号码分析
  • [Python]PTA:for 求奇数分之一序列前N项和
  • OpenWrt的快速设置向导功能与相关问题解答
  • Media Controller API 介绍
  • ClickHouse的学习与了解
  • 离线环境中使用ISO文件构建Yum源
  • 双重调度(Double Dispatch):《More Effective C++》条款31
  • 视频理解综述
  • 低空经济产业链全景解析
  • cPanel Python 应用部署流程
  • 存算分离与云原生:数据平台的新基石
  • Flowith-节点式GPT-4 驱动的AI生产力工具
  • 数据结构初阶(17)排序算法——非比较排序(计数排序·动图演示)、排序算法总结
  • 基于Spring Boot的快递物流仓库管理系统 商品库存管理系统
  • 中国大学排名爬取与数据分析案例总结
  • 深入解析 @nestjs/typeorm的 forRoot 与 forFeature