FIPS203 后量子安全ML-KEM(标准简读)

news2024/11/27 1:45:29

FIPS 203是美国国家标准与技术研究院(NIST)发布的关于模块格基密钥封装机制(ML-KEM)的标准,旨在提供一种能抵御量子计算机攻击的密钥建立方案。以下是对该文档的详细总结:
在这里插入图片描述

标准概述

  • 目的与范围:规定ML-KEM算法及参数集,用于在公共信道上建立共享密钥,提供了不同安全强度与性能权衡的参数集,包括ML-KEM - 512、ML-KEM - 768和ML-KEM - 1024。
  • 背景:因量子计算机发展对现有公钥密码系统构成威胁,NIST开展后量子密码学标准化工作,ML-KEM基于CRYSTALS - KYBER算法,是被选中的标准化算法之一。

术语、缩写与符号

  • 术语定义:详细解释了如批准、(KEM)密文、密码模块、解封装、封装等相关术语。
  • 缩写:列举了AES、CBD、FIPS、KEM、LWE、MLWE、NIST等缩写的含义。
  • 数学符号:定义了如n、q、ζ、B、Q、Z、Zm、Zq^n、Rq、Tq等符号的意义。

ML - KEM方案概述

  • 密钥封装机制(KEM):由KeyGen、Encaps、Decaps三个算法和参数集组成,用于双方建立共享密钥,ML-KEM的安全性基于Module Learning with Errors (MLWE)问题。
  • ML - KEM方案
    • 计算假设:安全性基于MLWE问题,是Learning With Errors (LWE)问题的推广,与模块格中的计算问题相关。
    • 方案构造:先从MLWE问题构建公钥加密(PKE)方案,再用Fujisaki - Okamoto (FO)变换转换为KEM,使用Number - Theoretic Transform (NTT)提高多项式乘法效率。
    • 参数集与算法:包括ML-KEMKeyGen、ML-KEMEncaps、ML-KEMDecaps三个算法,有ML-KEM - 512、ML-KEM - 768、ML-KEM - 1024三个参数集,不同参数集影响密钥和密文长度及安全性。
    • 解封装失败:在正常情况下,解封装失败概率极低,如ML-KEM - 512的失败率为2^-138.8等。

ML - KEM实现要求

  • K - PKE仅为组件:K - PKE不能单独使用,只能作为ML - KEM算法的子例程。
  • 内部函数访问控制:ML - KEM内部函数接口仅用于测试,密钥生成和封装所需随机值由密码模块生成。
  • 等效实现:允许使用数学等效步骤替换标准算法。
  • 共享密钥使用:成功生成的共享密钥为256位,可直接用于对称加密或按规定方式派生密钥。
  • 随机数生成:ML - KEMKeyGen和ML - KEMEncaps需使用批准的随机位生成器(RBG)生成随机数,不同参数集对RBG安全强度有不同要求。
  • 输入检查:ML - KEMEncaps和ML - KEMDecaps需进行输入检查,确保输入合法。
  • 中间值销毁:计算过程中的中间数据应及时销毁,部分数据可按规定保留。
  • 禁止浮点运算:实现中不能使用浮点运算,以避免舍入误差导致错误结果。

辅助算法

  • 密码函数:使用SHA3 - 256、SHA3 - 512、SHAKE128、SHAKE256等哈希函数和可扩展输出函数(XOF),通过包装函数定义来实例化PRF、哈希函数和XOF等,避免字节数组与位长度混淆。
  • 通用算法
    • 转换与压缩算法:包括BitsToBytes、BytesToBits用于位数组和字节数组转换,Compress和Decompress用于整数压缩和解压缩,ByteEncode和ByteDecode用于整数与字节转换。
    • 采样算法:SampleNTT用于从均匀随机字节流生成NTT表示的多项式样本,SamplePolyCBD用于从特定分布采样多项式系数。
  • 数论变换(NTT):NTT是ML - KEM提高环Rq上乘法效率的重要部分,将多项式在Rq和Tq环之间进行转换,Tq环上乘法效率更高,算法9和10分别用于计算NTT和逆NTT,算法11用于计算Tq环上的乘法。

K - PKE组件方案

  • K - PKE概述:由K - PKEKeyGen(密钥生成)、K - PKEEncrypt(加密)、K - PKEDecrypt(解密)三个算法组成,不能单独使用,作为ML - KEM算法子例程,其参数集与ML - KEM相关联。
  • K - PKE密钥生成(K - PKEKeyGen):输入随机数,生成加密密钥(可公开)和解密密钥(需保密),涉及矩阵A、向量s和噪声e的生成与计算。
  • K - PKE加密(K - PKEEncrypt):使用加密密钥、明文和随机数生成密文,包括提取向量、重新生成矩阵、采样噪声、计算新的噪声方程、编码消息等步骤。
  • K - PKE解密(K - PKEDecrypt):使用解密密钥解密密文得到明文,通过恢复系数、计算真实常数项、解码消息等操作完成。

ML - KEM主算法

  • 内部密钥生成(ML - KEMKeyGen_internal):输入两个随机种子,生成封装密钥(与K - PKE加密密钥相同)和解封装密钥(包含K - PKE解密密钥、封装密钥哈希值和随机值)。
  • 内部封装(ML - KEMEncaps_internal):输入封装密钥和随机字节数组,输出密文和共享密钥,通过K - PKE加密随机值得到密文,并从随机值和封装密钥派生共享密钥。
  • 内部解封装(ML - KEMDecaps_internal):输入解封装密钥和密文,输出共享密钥,解析解封装密钥,解密密文得到明文,重新加密明文并计算候选共享密钥,根据密文匹配情况确定最终共享密钥。
  • ML - KEM密钥生成(ML - KEMKeyGen):生成封装密钥和解封装密钥,种子可存储用于重新生成密钥,密钥对可进行检查但不保证生成正确。
  • ML - KEM封装(ML - KEMEncaps):输入封装密钥,生成密文和共享密钥,需进行封装密钥检查,包括类型检查和模数检查。
  • ML - KEM解封装(ML - KEMDecaps):输入解封装密钥和密文,输出共享密钥,需进行输入检查,包括密文类型检查、解封装密钥类型检查和哈希检查。

参数集

  • 参数集内容:ML - KEM有三个参数集,每个参数集包含k、η1、η2、du、dv五个参数及n = 256和q = 3329两个常数,不同参数影响算法中矩阵、向量维度和分布等,如k决定矩阵A维度。
  • 安全强度与性能:不同参数集对应不同安全强度,如ML - KEM - 512安全类别为1,ML - KEM - 768为3,ML - KEM - 1024为5,安全强度通过与特定块密码或哈希函数比较衡量,选择参数集时需权衡安全与性能,NIST推荐默认使用ML - KEM - 768。

代码参考

ML-KEM: https://github.com/pq-crystals/kyber

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2236094.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿萌数据迁移服务: 企业服务器整机在线热迁移, 实现不停机业务转移

天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据存储、数据恢复、数据备份、数据迁移等解决方案与服务,并针对企业面临的数据安全风险,提供专业的相关数据安全培训。 鸿萌数据迁移业务为众多企业顺利高效…

macOS15.1及以上系统bug:开发者证书无法打开,钥匙串访问无法打开一直出现图标后立马闪退

团队紧跟苹果最新系统发现bug:今日设备信息如下,希望能带给遇到这个问题的开发者一点帮助。 错误图如下: 点击证书文件后,先出现钥匙串访问图标,后立马闪退消失 中间试过很多方法,都是一样的表现,最后好在解决了,看网上也没有相关的帖子,这里直接写解决办法和导致原因…

20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N

20241102在荣品PRO-RK3566开发板的预置Android13下适配宸芯的数传模块CX6603N 2024/11/2 18:04 在WIN10使用程序:ViewLink-4.0.7_0708-windows-x64.exe 在荣品PRO-RK3566开发板的预置Android13下使用:ViewLink-2023_12_21-release-0.2.6.apk adb install…

【STM32】DMA直接存储器读取

文章目录 DMA简介DMA定义DMA传输方式DMA传输参数STM32的存储器映像DMA基本结构DMA的具体应用数据转运 DMAADC扫描模式 DMA DMA库函数 DMA数据传输(数据转运 DMA)接线图MyDMA模块main.c 源程序 DMA AD多通道(ADC扫描模式 DMA)…

兰空图床配置域名访问

图床已经创建完毕并且可以访问了,但是使用IP地址多少还是差点意思,而且不方便记忆,而NAT模式又没法直接像普通服务器一样DNS解析完就可以访问。 尝试了很多办法,nginx配置了半天也没配好,索性直接重定向,反…

React 入门课程 - 使用CDN编程React

1. 第一个React 注意&#xff1a;在vscode里&#xff0c;使用Live Server来运行html文件。 index.html <html><head><link rel"stylesheet" href"index.css"><script crossorigin src"https://unpkg.com/react17/umd/react.de…

flink 内存配置(一):设置Flink进程内存

flink 内存配置&#xff08;一&#xff09;&#xff1a;设置Flink进程内存 flink 内存配置&#xff08;二&#xff09;&#xff1a;设置TaskManager内存 flink 内存配置&#xff08;三&#xff09;&#xff1a;设置JobManager内存 flink 内存配置&#xff08;四&#xff09;…

快讯,Flutter PC 多窗口新进展,已在 Ubuntu/Canonical 展示

相信 Flutter 开发者对于 Flutter PC 多窗口的支持一直是「望眼欲穿」&#xff0c;而根据 #142845 相关内容展示&#xff0c; 在上月 27 号的 Ubuntu 峰会&#xff0c;Flutter 展示了多窗口相关进展。 事实上 Ubuntu 和 Flutter 的进一步合作关系应该是在 2021 年就开始了&…

HTB:Nibbles[WriteUP]

目录 连接至HTB服务器并启动靶机 1.How many open TCP ports are listening on Nibbles? 使用nmap对靶机TCP端口进行开放扫描 2.What is the relative path on the webserver to a blog? 使用ffuf对靶机80端口Web进行路径FUZZ 3.What content management system (CMS) …

AI资讯快报(2024.11.3-11.8)

1.<字节跳动上线名为炉米 Lumi的 AI 模型交流社区> 近日&#xff0c;字节跳动上线了一款名为【炉米 Lumi】的 AI 模型交流社区&#xff0c;这是一个专门给AI爱好者、研究人员和开发者准备的AI模型分享社区平台。该平台目前还在内部测试阶段&#xff0c;只有白名单用户才…

使用最新版的wvp和ZLMediaKit搭建Gb28181测试服务器

文章目录 说明安装1.安装nodejs简介安装步骤 2.安装java环境3.安装mysql安装修改密码 4.安装redis5.安装编译器6.安装cmake7.安装依赖库8.编译ZLMediaKit9.编译wvp-GB28181-pro 配置1.ZLMediaKit配置2.wvp-GB28181-pro配置2.1.配置ZLMediaKit连接信息2.2.28181服务器的配置2.3.…

AutoOps 使每个 Elasticsearch 部署都更易于管理

作者&#xff1a;来自 Elastic Ziv Segal&#xff0c;Ori Shafir AutoOps for Elasticsearch 通过性能建议、资源利用率和成本洞察、实时问题检测和解决路径显著简化了集群管理。 虽然 Elasticsearch 是一款功能强大且可扩展的搜索引擎&#xff0c;可提供多种功能&#xff0c;但…

Excel:vba实现正则匹配

一、匹配数字 实现的效果&#xff1a;(点击右边“提取数字”按钮) 实现的代码&#xff1a; Sub 提取数字() Dim cell As Range Dim sj As Object Dim regx As Object Dim ss As Object Dim n As Integer创建了一个 VBScript 正则表达式对象 regx&#xff0c;用于匹配特定模式…

第三十五篇:HTTP报文格式,HTTP系列二

HTTP 是超⽂本传输协议&#xff0c;也就是HyperText Transfer Protocol。 前面我们讲到第三章中网络协议的定义&#xff0c;网络协议的定义&#xff1a;网络协议是通信计算机双方必须共同遵从的一组约定。就像两个人要进行交流&#xff0c;如果不制定一套约定&#xff0c;一方…

[JAVAEE] 面试题(四) - 多线程下使用ArrayList涉及到的线程安全问题及解决

目录 一. 多线程下使用ArrayList 1.1. 自行判断加锁 1.2 使用Collections.synchronizedList()套壳加锁 1.3 CopyOnWriteArrayList类 二. 总结 一. 多线程下使用ArrayList 多线程下使用ArrayList会涉及到线程安全问题, 例如: public static void main(String[] args) thro…

使用axois自定义基础路径,自动拼接前端服务器地址怎么办

请求路径&#xff1a; http://localhost:5173/http://pcapi-xiaotuxian-front-devtest.itheima.net/home/category/head 很明显多拼接了路径地址 查看基础路径文件发现&#xff1a; //axios基础封装 import axios from axiosconst httpInstance axios.create({baseURL: /h…

docker镜像仓库常用命令

docker镜像仓库常用命令 docker logindocker logoutdocker pulldocker pushdocker searchdocker imagesdocker image inspectdocker tagdocker rmidocker image prunedocker savedocker loaddocker history docker login 语法: docker login [options] [server] 功能&#xff…

itextpdf打印A5的问题

使用A5打印的时候&#xff0c;再生成pdf是没有问题的。下面做了一个测试&#xff0c;在打印机中&#xff0c;使用A5的纸张横向放入&#xff0c;因为是家用打印机&#xff0c;A5与A4是同一个口&#xff0c;因此只能这么放。 使用itextpdf生成pdf&#xff0c;在浏览器中预览pdf是…

python项目实战---使用图形化界面下载音乐

音乐下载 设计思路&#xff1a; 设计界面编写爬虫代码绑定爬虫打包exe文件 这个是最终的设计成果&#xff0c;所有的下载歌曲都在“下载mp3”文件夹里面 完整代码 逻辑代码 import os.path import reimport requests from PyQt5.QtWidgets import QApplication,QWidget,QM…

Golang--协程和管道

1、概念 程序&#xff1a; 是为完成特定任务、用某种语言编写的一组指令的集合,是一段静态的代码。(程序是静态) 进程&#xff1a; 是程序的一次执行过程。正在运行的一个程序&#xff0c;进程作为资源分配的单位&#xff0c;在内存中会为每个进程分配不同的内存区域&#xff0…