[终端安全]-7 后量子密码算法

本文参考资料来源:NSA Releases Future Quantum-Resistant (QR) Algorithm Requirements for National Security Systems > National Security Agency/Central Security Service > Article

Commercial National Security Algorithm Suite 2.0” (CNSA 2.0) Cybersecurity Advisory (CSA)

(第6文终端安全之应用安全,稍后时日补上)

1 CNSA2.0

CISA、NIST 和 NSA 敦促各个行业安全应用开始为实施后量子密码学做准备。NSA发布了《商业国家安全算法套件 2.0》(CNSA 2.0) 未来抗量子 (QR) 算法要求,如下所示:

备注:

Crystal-Kyber算法标准,可参照NIST.FIPS.203.ipd.pdf(draft)

Crystal-Dilithium算法标准,可参照NIST.FIPS.204.ipd.pdf(draft)

附:以下为CNSA1.0发布算法需求

2 Crystal-Kyber

Crystal-Kyber 是一种基于格的加密方案用于密钥封装机制(KEM),可高效安全且适应未来量子计算攻击。

1)数学原理

Crystal-Kyber 基于Learning with Errors(LWE)和Ring-LWE问题,这些问题在量子计算机上被认为是难解的。Ring-LWE 难题,对于环 R =Z[x]/(x^n + 1) 和模数q,给定一个秘密向量  s∈R_q 和多个采样  (a_i, b_i = a_i s + e_i)模q,其中 a_i 是从 R_q 中均匀分布的随机元素,e_i是从某个误差分布中采样的错误向量,目标是从 (a_i, b_i) 中恢复 s 。

1.1)公钥生成:pk = a s + e mod q

1.2)加密过程:c_1 = a r + e_1 mod q;c_2 = pk r + e_2 + m⌊q/2⌋mod q

1.3)解密过程:m' = c_2 - s c_1 mod q;m = Decode(m')

2)算法步骤

2.1)参数生成:模数 q 、环的度 n 和误差分布χ。

   

2.2)密钥生成:

   - 生成一个随机多项式 a ∈ R_q 。

   - 选择秘密多项式 s, e 从χ中采样。

   - 计算公钥 pk = a s + e 。

   - 私钥为 sk = s 。

2.3)加密:

   - 选择随机多项式 r, e_1, e_2 从χ中采样。

   - 计算密文 c_1 = a r + e_1 和 c_2 = pk r + e_2 + m⋅ ⌊q/2⌋,其中m 是明文消息。

2.4)解密:

   - 计算 m' = c_2 - s c_1 。

   - 解码 m' 得到明文消息m 。

3)硬件实现

多项式运算单元:实现多项式乘法、加法、减法和模运算;使用Number Theoretic Transform (NTT)加速多项式乘法。

随机数生成器:用于生成密钥和随机噪声。

模运算模块:实现模q运算,用于多项式系数的约束。

存储单元:用于存储密钥、多项式系数和中间运算结果。

3 Crystal-Dilithium

Crystal-Dilithium 是一种基于格的数字签名方案,它的设计目标是提供高效和安全的签名和验证过程,适应未来量子计算攻击。

1)数学原理

Crystal-Dilithium 基于Module Learning with Errors(Module-LWE)和Module Short Integer Solution(Module-SIS)难题。对于环R =Z[x]/(x^n+1)和模数q,Module-LWE 问题定义如下:给定一个秘密矩阵S∈Rqk×l和多个采样A_i, B_i = A_i S + E_i模q,其中A_i是从 Rqk×l中均匀分布的随机矩阵,E_i 是从某个误差分布中采样的错误矩阵,目标是从(A_i, B_i)中恢复S。

1.1)公钥生成:pk = A S + E mod q

1.2)签名过程:W = A y mod q; c = H(W, μ); z = y + c S mod q

1.3)验证过程:W' = A z - c pk mod q;验证 c = H(W', μ)

2)算法步骤

2.1)参数生成:

   - 模数 q 、环的度 n 和误差分布χ。

   - 选择参数k 和l 。

   

2.2)密钥生成:

   - 生成随机矩阵A ∈Rqk×l。

   - 选择秘密矩阵 S, E 从χ 中采样。

   - 计算公钥 pk = A S + E 。

   - 私钥为 sk = S 。

2.3)签名:

   - 选择随机矩阵 y 从某个分布中采样。

   - 计算 W = A y 并计算 c = H(W, μ),其中 H是哈希函数,μ是消息。

   - 计算签名 z = y + c S。如果 z 的系数太大,则重新生成 y 并重复。

   - 最终签名为 (μ, z, c) 。

2.4)验签:

   - 计算 W' = A z - c pk 。

   - 检查 c = H(W', μ) 是否成立。如果成立验证通过;否则验证失败。

3)硬件实现

多项式运算单元:实现多项式乘法、加法、减法和模运算;使用NTT加速多项式乘法。

哈希单元:实现SHA-3和Keccak函数,用于消息哈希和挑战生成。

随机数生成器:用于生成随机挑战和密钥。

存储单元:用于存储密钥、多项式系数、哈希值和中间运算结果。

4 基于哈希的数字签名算法

XMSS(eXtended Merkle Signature Scheme)和 LMS(Leighton-Micali Signature)是两种基于Merkle树的哈希函数数字签名方案,被NSA推荐用于软件和固件签名。

备注:参照[终端安全]-1 总体介绍 ,[终端安全]-5 移动终端之操作系统安全,终端设备的安全启动非常重要。XMSS和LMS作为后量子密码算法,用于在软件和固件中实现安全的数字签名和认证功能以防止恶意软件或未经授权对固件的修改,同时可应对未来可能出现的量子计算攻击。

1)XMSS

XMSS使用一棵 Merkle 树来组织多个一次性签名(WOTS+,Winternitz One-Time Signatures),每个叶子节点对应一个一次性签名的公钥,每次签名一个消息后对应的 OTS 就不能再使用;XMSS基于哈希函数的抗碰撞性和 Merkle 树的结构安全性高,适用于需要处理大量签名的应用如区块链。

1.1)密钥生成

参数选择:选择安全参数,包括哈希函数(通常是SHA-256或者SHA-3等安全的哈希函数)、树的高度、叶子节点哈希链长度(WOTS+ 参数)等;生成一个随机的种子作为生成所有私钥相关信息的起点。

生成主私钥和公钥:使用种子和适当的参数,通过哈希函数生成主私钥,通常是一个随机数或特定格式的数据。通过主私钥使用同样的哈希函数生成对应的主公钥。

生成签名树:根据选择的树高度生成Merkle树结构,每个叶子节点存储一个哈希链,用于后续签名生成过程中的一次性使用。

1.2)签名生成

消息哈希:使用选择的哈希函数对消息进行哈希,得到消息的摘要。

- 生成签名链:根据消息的哈希值确定要使用的Merkle树中的叶子节点索引,从选定的叶子节点开始使用哈希函数链生成一系列的哈希值,形成签名链并更新对应的叶子节点的哈希值、Merkle树的内部节点,确保树的完整性。

1.3)签名验证

- 消息哈希:使用同样的哈希函数对接收到的消息进行哈希得到摘要。

- 验证签名:根据签名中的一部分信息(通常是与签名相关的部分)确定要验证的叶子节点索引,使用公钥和相应的Merkle树中的哈希值,验证从选定的叶子节点到根节点的哈希值链是否与签名中的哈希链一致。如果验证成功说明签名有效,否则签名无效。

2)LMS

LMS使用HORS(Hash to Obtain Random Subsets)来生成签名,适用于嵌入式系统和IoT设备。

2.1)密钥生成

参数选择:选择安全参数,包括哈希函数(通常是SHA-256或者SHA-3等安全的哈希函数)、签名树的高度和哈希函数链长度;生成一个随机的种子作为生成所有私钥相关信息的起点。

- 生成主私钥和主公钥:使用种子和适当的参数通过哈希函数生成主私钥;通过主私钥使用同样的哈希函数生成对应的主公钥。

生成认证路径:根据签名树的高度生成一系列的认证路径,认证路径是从叶子节点到根节点的哈希值链,用于验证签名。

2.2)签名生成

- 消息哈希:使用选择的哈希函数对消息进行哈希得到摘要。

- 计算签名:根据消息哈希值的一部分(例如最低位的一些比特)选择要使用的签名树的叶子节点,使用哈希函数链生成一系列的哈希值,直到生成根节点的哈希值。结合消息摘要生成最终的数字签名。

2.3)签名验证

消息哈希:使用同样的哈希函数对接收到的消息进行哈希,得到消息的摘要。

验证签名:依据签名中的一部分信息(通常是与签名相关的部分)选择相应的签名树节点,使用公钥和事先生成的认证路径,验证从选定的叶子节点到根节点的哈希值链是否与签名中的哈希链一致。如果验证成功说明签名有效,否则签名无效。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode之最长回文子串

1.题目链接 5. 最长回文子串 - 力扣(LeetCode)https://leetcode.cn/problems/longest-palindromic-substring/description/ 2.题目解析 对于这道题目我们可以使用动态规划的思路来求解,具体思路是,对于一个长度大于2的子串&…

新火种AI|微软和苹果放弃OpenAI董事会观察员席位

作者:一号 编辑:美美 微软苹果双双不做OpenAI“观察员”,OpenAI能更自由吗? 7月10消息,微软当地时间周一宣布将放弃在OpenAI董事会的观察员席位,他们称,OpenAI在过去八个月中取得了“重大进展…

2024机器遗忘(Machine Unlearning)技术分类-思维导图

1 介绍 机器遗忘(Machine Unlearning)是指从机器学习模型中安全地移除或"遗忘"特定的数据点或信息。这个概念源于数据隐私保护的需求,尤其是在欧盟通用数据保护条例(GDPR)等法规中提出的"被遗忘的权利…

STM32利用FreeRTOS实现4个led灯同时以不同的频率闪烁

在没有接触到FreeRTOS时,也没有想过同时叫两个或两个以上的led灯闪烁的想法,接触后,发现如果想叫两个灯同时以不同的频率闪烁,不能说是不可能,就算是做到了也要非常的麻烦。但是学习了FreeRTOS后,发现要想同…

PHP 安装Memcached 扩展 PHP使用Memcache

memcache扩展下载 访问官网&#xff1a;https://pecl.php.net/package/memcache&#xff0c;下载合适的memcache版本的安装包&#xff0c;注意要与php版本相匹配。 1、查看运行环境php版本,可以运行以下代码 <?php phpinfo(); ?>2、查看版本信息以及是否支持多线程…

linux radix-tree 基数树实现详解

radix tree&#xff0c;又称做基数树&#xff0c;是一种适合于构建key(index)与value(item)相关联的数据结构。内核中使用非常广泛。本文主要聚焦linux内核基数树的代码实现,大量注释过的代码。 radix-tree组织结构如下: 1、数据结构 /** The bottom two bits of the slot de…

开放式耳机哪个品牌质量比较好?2024高性价比机型推荐!

作为耳机测评师这几年开放式耳机也越来越火&#xff0c;各种品牌各种机型让人看得眼花缭乱&#xff0c;那我们如何分辨一款开放式耳机是好是坏呢&#xff1f;今天这篇文章就是来告诉大家如何去分辨去挑选一款还不错的开放式耳机&#xff0c;在教大家如何挑选之后&#xff0c;我…

Python模块ConfigParser读取应用程序的配置文件简单示例

一、模块说明&#xff1a; 系统管理员通常通过文本编辑器编辑这些配置文件&#xff0c;以设置应用程序的默认值&#xff0c;然后应用程序将读取并解析这些配置文件&#xff0c;并根据其中的内容执行对应操作。ConfigParser模块具有read()方法&#xff0c;用于读取配置文件。 …

jstat命令介绍

jstat&#xff1a;查看JVM统计信息 一 基本情况二 基本语法2.1 option参数1. 类装载相关的&#xff1a;2. 垃圾回收相关的-gc&#xff1a;显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息。-gccapacity&#xff1a;显示…

基督教堂变身“知识网红”!枢纽云助力传统教堂数智化升级

随着互联网技术的发展&#xff0c;知识获取的方式悄然发生了改变。传统的书籍、课堂教学等知识传递模式逐渐被线上课程、电子书、知识付费平台等新形式所补充和替代。知识付费&#xff0c;作为一种新兴的知识传播和变现模式&#xff0c;迅速崛起并受到广泛关注和欢迎。 何为知…

Python爬虫:BeautifulSoup的基本使用方法!

1.简介 Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析“标签树”等功能。它是一个工具箱&#xff0c;通过解析文档为用户提供需要抓取的数据&#xff0c;因为简单&#xff0c;所以不需要多少代码就可以写出一个完整的应用程序。 Beautiful Soup…

springboot中国女篮资讯平台-计算机毕业设计源码12641

目录 1 绪论 1.1 研究背景 1.2 研究现状 1.3论文结构与章节安排 2平台分析 2.1 系统可行性分析 2.1.1硬件可行性分析 2.1.2软件可行性分析 2.1.3经济可行性 2.1.4 操作可行性 2.2系统功能分析 2.3 系统用例分析 2.4本章小结 3平台总体设计 3.1 系统架构设计 3.2…

数据结构——二叉树之c语言实现堆与堆排序

目录 前言&#xff1a; 1.二叉树的概念及结构 1.1 特殊的二叉树 1.2 二叉树的存储结构 1.顺序存储 2.链式存储 2. 二叉树的顺序结构及实现 2.1 堆的概念 ​编辑 2.2 堆的创建 3.堆的实现 3.1 堆的初始化和销毁 初始化&#xff1a; 销毁&#xff1a; 插入&…

【SVN的使用- SVN的基本命令-SVN命令简写-注意事项-解决冲突 Objective-C语言】

一、SVN的更新命令:update 1.服务器如果新建了一个文件夹,yuanxing,版本变成6了, 我现在本地还只有三个文件夹,版本5, 终端里边,我们敲一个svn update, 我这儿就多了一个yuanxing文件夹, 这个就是更新,就是把服务器最新的代码下载下来, 假设服务器上大家提交了这…

双向链表 -- 详细理解和实现

欢迎光顾我的homepage 前言 双向链表是一种带头双向循环的链表。在双向链表中&#xff0c;首先存在着一个头结点&#xff1b;其次每个节点有指向下一个节点的指针next 和指向上一个节点的指针prev &#xff1b…

MySQL安全值守常用语句

一、用户权限设置 1、Mysql中用户是如何定义的 用户名主机域 10.0.0.5110.0.0.%%10.0.0.0/255.255.255.0Db01Localhost127.0.0.1 2、用户创建 create user xinjing% identified by 123 3、用户删除 drop user username&#xff1b;username 是要删除的用户名:如 drop user root…

Docker 基本管理及部署

目录 1.Docker概述 1.1 Docker是什么&#xff1f; 1.2 Docker的宗旨 1.3 容器的优点 1.4 Docker与虚拟机的区别 1.5 容器在内核中支持的两种技术 1.6 namespace的六大类型 2.Docker核心概念 2.1 镜像 2.2 容器 2.3 仓库 3.安装Docker 3.1 查看 docker 版本信息 4.…

SpringBoot新手快速入门系列教程十:基于docker容器,部署一个简单的项目

前述&#xff1a; 本篇教程将略过很多docker下载环境配置的基础步骤&#xff0c;如果您对docker不太熟悉请参考我的上一个教程&#xff1a;SpringBoot新手快速入门系列教程九&#xff1a;基于docker容器&#xff0c;部署一个简单的项目 使用 Docker Compose 支持部署 Docker 项…

LLM基础模型系列:Fine-Tuning总览

由于对大型语言模型&#xff0c;人工智能从业者经常被问到这样的问题&#xff1a;如何训练自己的数据&#xff1f;回答这个问题远非易事。生成式人工智能的最新进展是由具有许多参数的大规模模型驱动的&#xff0c;而训练这样的模型LLM需要昂贵的硬件&#xff08;即许多具有大量…

51单片机(STC8051U34K64)_RA8889_SPI4参考代码(v1.3)

硬件&#xff1a;STC8051U34K64 RA8889开发板&#xff08;硬件跳线变更为SPI-4模式&#xff0c;PS101&#xff0c;R143&#xff0c;R141短接&#xff0c;R142不接&#xff09; STC8051U34K64是STC最新推出来的单片机&#xff0c;主要用于替换传统的8051单片机&#xff0c;与标…