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

[终端安全]-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)签名验证

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

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

相关文章:

[终端安全]-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) C…...

uniapp 支付宝小程序 芝麻免押 免押金

orderStr参数如下: my.tradePay({orderStr:res, // 完整的支付参数拼接成的字符串,从 alipay.fund.auth.order.app.freeze 接口获取success: (res) > {console.log(免押成功);console.log(JSON.stringify(res),不是JOSN);console.log(JSON.stringify…...

Python爬虫教程第一篇

一、爬虫基础概念 1. 什么是爬虫 爬虫(Spider,又称网络爬虫),是指向网站/网络发起请求,获取资源后分析并提取有用数据的程序。从技术层面来说,爬虫通过程序模拟浏览器请求站点的行为,把站点返…...

AI时代:探索个人潜能的新视角

文章目录 Al时代的个人发展1 AI的高速发展意味着什么1.1 生产力大幅提升1.2 生产关系的改变1.3 产品范式1.4 产业革命1.5 Al的局限性1.5.1局限一:大模型的幻觉 1.5.2 局限二:Token 2 个体如何应对这种改变?2.1 职场人2.2 K12家长2.3 大学生2.4 创业者 3 人工智能发…...

【Python学习笔记】Optuna + Transformer B站视频实践

【Python学习笔记】Optuna Transformer 实践 背景前摇(省流可不看): 之前以泰坦尼克号数据集为案例,学习了Optuna的基本操作,为了进一步巩固知识和便于包装简历,决定找个唬人一点的项目练练手。 ————…...

【自动驾驶/机器人面试C++八股精选】专栏介绍

目录 一、自动驾驶和机器人技术发展前景二、C在自动驾驶和机器人领域的地位三、专栏介绍四、订阅需知 一、自动驾驶和机器人技术发展前景 随着人工智能、机器学习、传感器技术和计算能力的进步,自动驾驶和机器人的技术水平不断提升,使得它们更加智能、可…...

Unity中一键生成具有身体感知的虚拟人物动作

在虚拟现实(VR)和增强现实(AR)的浪潮中,如何让虚拟人物的动作更加自然、真实,已经成为一个重要课题。AI4Animation项目,一个由 Sebastian Starke 主导的开源框架,为Unity开发者提供了强大的工具集,以实现这一目标。本文…...

谷粒商城实战-25-分布式组件-SpringCloud Alibaba-Nacos配置中心-加载多配置集

文章目录 一,拆分配置集二,配置文件中配置多配置集1,引用多配置集2,验证 三,多配置集总结1,使用场景2,优先级 这一节介绍如何加载多个配置集。 大多数情况下,我们把配置全部放在一个…...

UART编程

Q:为什么使用串口前要先在电脑上安装CH340驱动? 中断的作用? 环形buffer的作用? static和valitate的作用 三种编程方式简介 也可以通过DMA方式减小CPU资源的消耗 直接把数据在SRAM内存和UART模块进行传输 ,流程: …...

C++:右值引用

右值与左值 在讲解右值引用之前,我们就需要先辨析一下左值与右值的区别。 左值 左值是一个表示数据的表达式,我们可以获取它的地址并且对其赋值,左值可以出现在赋值操作符的左边,但是右值不能。 int i 0; int* p &i; do…...

(算法)硬币问题

问题:有1元,5元,10元,50元,100元,500元的硬币各有C1,C5,C10.C50,C100,C500个。 现在要用这些硬币来支付A元,最小需要多少枚硬币? 该题使用递归算法,利用局部最优解来推导…...

如何隐藏 Ubuntu 顶部状态栏

如何隐藏 Ubuntu 顶部状态栏 Chapter1 如何隐藏 Ubuntu 顶部状态栏Chapter2 Ubuntu增大屏幕可用面积之——自动隐藏顶部状态栏Chapter3 Ubuntu18.04隐藏顶栏与侧栏 Chapter1 如何隐藏 Ubuntu 顶部状态栏 https://www.sysgeek.cn/hide-top-bar-ubuntu/ 准备工作:安…...

【C++】入门基础(引用、inline、nullptr)

目录 一.引用 1.引用的定义 2.引用的特性 3.引用的使用场景 4.const引用 5.引用和指针的区别 二.inline 三.nullptr 一.引用 1.引用的定义 引用不是新定义一个变量,而是给已经存在的变量取一个别名,编译器不会给引用变量开辟内存空间&#xff0c…...

24/07/10数据结构(5.1213)链表OJ

继续练习题: 7.判断链表是不是回文结构 对于一个链表,设计一个时间复杂度O(n)空间复杂度O(1)的算法,判断是否为回文结果 给定一个链表的头指针A,返回一个bool值代表其是否为回文结构. 测试样例:1->2->2->1 返回:ture bool chkPalindrome(ListNode* A){ …...

C++ 入门基础:开启编程之旅

引言 C 是一种高效、灵活且功能强大的编程语言,广泛应用于系统软件、游戏开发、嵌入式系统、科学计算等多个领域。作为 C 语言的扩展,C 不仅继承了 C 语言的过程化编程特性,还增加了面向对象编程(OOP)的支持&#xff…...

据传 OpenAI秘密研发“Strawberry”项目

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

简单的SQL字符型注入

目录 注入类型 判断字段数 确定回显点 查找数据库名 查找数据库表名 查询字段名 获取想要的数据 以sqli-labs靶场上的简单SQL注入为例 注入类型 判断是数字类型还是字符类型 常见的闭合方式 ?id1、?id1"、?id1)、?id1")等,大多都是单引号…...

HttpClient调用SpringBoot项目的文件上传接口实现文件上传

1.导入httpclient的jar包 这里导入了httpclient、httpmime11 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:sch…...

[leetcode]kth-smallest-element-in-a-sorted-matrix 有序矩阵中第k小元素

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:bool check(vector<vector<int>>& matrix, int mid, int k, int n) {int i n - 1;int j 0;int num 0;while (i > 0 && j < n) {if (matrix[i][j] < mid) {num i 1;j;…...

【经典面试题】是否形成有环链表

1.环形链表oj 2. oj解法 利用快慢指针&#xff1a; /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; bool hasCycle(struct ListNode *head) {ListNode* slow head, *fast…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

VTK如何让部分单位不可见

最近遇到一个需求&#xff0c;需要让一个vtkDataSet中的部分单元不可见&#xff0c;查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行&#xff0c;是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示&#xff0c;主要是最后一个参数&#xff0c;透明度…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

Spring数据访问模块设计

前面我们已经完成了IoC和web模块的设计&#xff0c;聪明的码友立马就知道了&#xff0c;该到数据访问模块了&#xff0c;要不就这俩玩个6啊&#xff0c;查库势在必行&#xff0c;至此&#xff0c;它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据&#xff08;数据库、No…...

uniapp 开发ios, xcode 提交app store connect 和 testflight内测

uniapp 中配置 配置manifest 文档&#xff1a;manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号&#xff1a;4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...

Python 训练营打卡 Day 47

注意力热力图可视化 在day 46代码的基础上&#xff0c;对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...