【格密码基础】旋转格的性质

目录

一. 回顾ZSVP问题

二. 基于ZSVP问题的密码系统

三. 格基旋转与Gram矩阵

四. 补充矩阵QR分解

4.1 矩阵分解

4.2 举例


前序文章请参考:

【格密码基础】详解ZSVP问题-CSDN博客

一. 回顾ZSVP问题

根据之前的讨论我们知道解决ZSVP问题的计算复杂度为:

2^{\frac{n}{2}+o(n)}

在实际应用中,可利用随机算法将ZSVP问题归约到y-SVP或者y-uSVP问题,其中\gamma\geq 1。在2023年论文[Duc23]中,出现了一个确定性的算法,没有近似因子。也就是直接从ZSVP问题归约到SVP问题。但遗憾的是,归约前格维度为n,归约后为n/2.

 L´eo Ducas. Provable lattice reduction of Zn with blocksize n=2. Cryptology ePrint Archive, Paper 2023/447, 2023. https://eprint.iacr.org/2023/447. 5, 27

在本文章中,我们重点关注将格Z^n旋转后的格。

二. 基于ZSVP问题的密码系统

众所周知,如果ZSVP问题是困难的,那么就可以设计新的公钥密码方案(public key encryption)。

另外有两个显然可得的优点:

  1. Z^n旋转格非常的简单;
  2. 对应的格困难性假设也比较特别

在格Z^n中,任意两个相邻的格点距离为1,所以其译码半径(unique decoding radius)为1/2.另外,根据格密码的基础概念,格Z^n的行列式(determinant)也为1.

如果想设计一个比格Z^n更稠密的格,则可以选择:

Z^n\oplus \alpha Z^n

其中\alpha为缩放因子。选取不同的值,格的稠密程度也不一样。

当然利用ZSVP问题除了可以形成加密方案外,还可以形成签名方案(signature scheme)以及零知识证明(zero-knowledge proof).

在这些方案中,无一例外,都会涉及到worst case到average case的证明。当然也可以利用攻击算法来破解这些方案,比如对偶(dual)攻击。

其实在严格的格密码证明中,可证明安全的格基该怎么选一直是一个问题。目前学者很喜欢用离散高斯基(discrete Gaussian bases)。

由此便出现了接下来要讲的格基旋转。

三. 格基旋转与Gram矩阵

将格Z^n的格基进行正交变换之后的基记为格基B,其也可以看成Z^n旋转格的格基。

实际应用时,这种正交变换怎么选?

最直接的肯定是均匀且随机的选取了:

R\in O_n(R)

一方面,我们现在对格基矩阵B做一个运算,可以得到:

B^TB

在另一方面,我们先把格基做一个旋转,得到RB,接着再做同样的运算:

(RB)^TRB=B^TR^TRB=B^TB

很神奇,前后结果是一样的。其实实际上Gram矩阵就是:

G=B^TB

在以上我们将旋转矩阵R隐藏了。或者换句话说,Gram矩阵是抗旋转的(rotation independent)。

这个矩阵非常优秀,每个元素的值一定为整数(平方效果)。

由此我们又给出一个新的格密码困难问题:

给定矩阵G,且满足:

G=B^TB

求出特定的整数矩阵B\in Z^{n\times n}

这个问题也是困难的,更进一步将这个问题本质还是ZSVP问题的变式情况。

现在我们尝试思考一个问题,以上旋转格中旋转角度该怎么选?

一种方法是对Gram矩阵进行Cholesky分解。

另一种方法是满足如下等式:

B'=RB

上式子中,B'是上三角矩阵,R为正交变换R\in O_n(R)。根据矩阵QR分解的理解,以上等式中B'和B是一一对应的。实际上在格基的LLL约化算法中,也出现了QR分解。

由此可见QR分解的重要性,接下来我们将补充QR分解。

四. 补充矩阵QR分解

4.1 矩阵分解

如果一个矩阵m行n列,则可以认为该矩阵包含n个m维的列向量。

假如矩阵A有3列,则包含3个列向量,记为a,b,c

采用正交化的思想,可以将矩阵A变为一个正交矩阵Q,也就是包含3个列向量,记为q_1,q_2,q_3。通常转化为后的这3个列向量都是标准的正交向量,也就是长度均为1.

熟悉线性代数的同学都知道,这种变换过程也可以用一个矩阵来衡量。也就是矩阵A通过乘以另外一个矩阵,可以变为矩阵Q。

更加具体化,向量a可以用向量q_1表示;向量b可以用q_1,q_2表示;向量c可以用q_1,q_2,q_3表示。

来看一张投影图:

向量a与q1共线;

向量a,b与q1,q2共面;

同理,向量a,b,c与q1,q2,q3共体。

从图中,我们可以看出可以将向量b用分量q1,,q2来表示,具体分析如下:

同理向量c也可以用q1,q2和q3来表示,即为:

将以上转化过程表示为矩阵的运算则为:A=QR,如下:

其中R为上三角矩阵(upper triangular)。

4.2 举例

请将如下矩阵A进行QR分解,并写出计算过程:

解:

将矩阵A的第一列记作向量a,第二列为向量b,第三列为向量c,如下:

第一步:找出正交矩阵Q

已知q1与向量a共线,且长度为1.那么很明显可得:

q_1=(\frac{1}{\sqrt 2},0,\frac{1}{\sqrt 2})

接着去掉向量b在q1上的分量,可得:

将向量B标准化,使其长度为1,可得q2:

接着去掉向量c在q1和q2上的分量,可得:

可以发现向量C的长度本身就为1,所以无需标准化长度,可直接得到q3.

综合以上正交矩阵Q便可得:

第二步:计算上三角矩阵R

接着根据QR分解的公式,可分别计算:

q_1^Ta=\sqrt 2

q_1^Tb=\frac{1}{\sqrt 2}

q_2^Tb=\frac{1}{\sqrt 2}

q_1^Tc=\sqrt 2

q_2^Tc=\sqrt 2

q_2^Tc=\sqrt 2

由此,矩阵A完整的QR分解如下:

补充一个有意思的性质:上三角矩阵R的对角线处有个三个元素,其实对应着向量a,B,C的长度(q1,q2,q3标准化前的长度)。

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

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

相关文章

C++ 入门09:友元函数和友元类

往期回顾: C 入门06:类的进阶(构造函数的重载与拷贝构造函数)-CSDN博客 C 入门07:静态成员和常量成员-CSDN博客 C 入门08:运算符重载-CSDN博客 一、前言 在前面文章的学习中,我们了解了类和对象…

一款IM即时通讯聊天系统源码,包含app和后台源码

一款IM即时通讯聊天系统源码 聊天APP 附APP,后端是基于spring boot开发的。 这是一款独立服务器部署的即时通讯解决方案,可以帮助你快速拥有一套自己的移动社交、 企业办公、多功能业务产品。可以 独立部署!加密通道!牢牢掌握通…

第九届MathorCup高校数学建模挑战赛-A题:基于数据驱动的城市轨道交通网络优化研究

目录 摘 要 一、 问题的提出 二、 基本假设 三、 符号说明 四、 问题分析 4.1 问题 1 的分析 4.2 问题 2 的分析 4.3 问题 3 的分析 4.4 问题 4 的分析 五、 问题 1 的模型建立与求解 5.1 问题分析 5.2 数据处理 5.2.1 数据统计 5.2.2 异常数据处理方法 5.2.3 剔除异常数据值 5…

您需要了解的欧盟网络弹性法案

了解CRA包含的内容以及如何遵守。 什么是CRA? 《网络弹性法案》(CRA)是即将出台的欧盟法规,旨在确保在欧盟销售的所有数字产品和服务(如连接到互联网的软件和硬件)都采用强大的网络安全措施。 该法案要求…

【数据结构与算法】选择排序篇----详解直接插入排序和哈希排序【图文讲解】

欢迎来到CILMY23的博客 🏆本篇主题为:【数据结构与算法】选择排序篇----详解直接插入排序和哈希排序 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏:Python | C | C语言 | 数据结构与算法 | 贪心算法 | Linux…

Chrome浏览器的Profile数据内容简介

前文简介了Chrome存储的账密/Cookie数据:一段代码读取Chrome存储的所有账号密码和Cookie 本文再扩展介绍一下Chrome存储的其它一些隐私数据。 注:因为业务需要,简单调研了一些基本内容和存储路径,没有深入去研究,有啥…

新160个crackme - 002-abexcm5

运行分析 猜测需要输入正确序列号 PE分析 32位,ASM程序,无壳 静态分析 ida shift F12 ,发现字符串定位主函数 分析主函数 lstrcat:拼接字符串 lstrcmpiA:比较字符串 动态调试 serial输入123456调试 发现序列号…

Codeforces Round 957 (Div. 3)(A~D题)

A. Only Pluses 思路: 优先增加最小的数&#xff0c;它们的乘积会是最优,假如只有两个数a和b&#xff0c;b>a&#xff0c;那么a 1&#xff0c;就增加一份b。如果b 1&#xff0c;只能增加1份a。因为 b > a&#xff0c;所以增加小的数是最优的。 代码: #include<bi…

Spring Boot集成groovy快速入门Demo

1.什么是groovy&#xff1f; Groovy 是构建在 JVM 上的一个轻量级却强大的动态语言&#xff0c;它结合了 Python、Ruby 和 Smalltalk 的许多强大的特性。 Groovy 就是用 Java 写的&#xff0c;Groovy 语法与 Java 语法类似&#xff0c;Groovy 代码能够与 Java 代码很好地结合&…

SunnyUI中UIAnalogMeter的使用

在 SunnyUI 控件库中&#xff0c;UIAnalogMeter 是一个模拟仪表盘控件&#xff0c;用于显示数值数据&#xff0c;如温度、压力、速度或其他需要模拟表盘形式显示的量。下面是如何在你的应用程序中使用 UIAnalogMeter 的步骤&#xff1a; 1. 引入 SunnyUI 控件库 确保你的项目…

STM32MP135裸机编程:定时器内核时钟频率计算方法

0 工具准备 STM32MP13xx参考手册 1 定时器内核时钟频率计算方法 1.1 定时器分组 STM32MP135的定时器按照时钟源不同分成了三组&#xff0c;如下&#xff1a; APB1: APB2: APB6&#xff1a; 1.2 定时器内核时钟频率计算方法 APB1DIV是APB1的分频系数&#xff0c;APB2DIV、…

python双下划线怎么打

连续按键盘上的“shift_”键两次即可&#xff0c;不同编辑器可能显示会不太一样。像图1中那样没连起来也是对的&#xff0c;没有语法错误。

基于python豆瓣电影爬虫数据可视化分析推荐系统(完整系统源码+数据库+详细文档+论文+详细部署教程)

文章目录 基于python豆瓣电影爬虫数据可视化分析推荐系统&#xff08;完整系统源码数据库详细文档论文详细部署教程&#xff09;一、 选题背景二、研究目的三、开发技术介绍1、Django框架2、LDA3、机器学习推荐算法4、大数据爬虫5、大数据Echarts可视化 四、系统设计思想五、部…

C++ | Leetcode C++题解之第235题二叉搜索树的最近公共祖先

题目&#xff1a; 题解&#xff1a; class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {TreeNode* ancestor root;while (true) {if (p->val < ancestor->val && q->val < ancestor->val) {anc…

贪心算法案例

1.买卖股票的最佳时机 给定一个数组 prices &#xff0c;它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。 你只能选择 某一天 买入这只股票&#xff0c;并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。 返回你可以从这笔…

代码随想录算法训练营第31天|LeetCode 56. 合并区间、738.单调递增的数字、968.监控二叉树

1. LeetCode 56. 合并区间 题目链接&#xff1a;https://leetcode.cn/problems/merge-intervals/description/ 文章链接&#xff1a;https://programmercarl.com/0056.合并区间.html 视频链接&#xff1a;https://www.bilibili.com/video/BV1wx4y157nD 思路&#xff1a; 本题关…

SpringBoot新手快速入门系列教程十一:自动生成API文档,Springboot3.x集成SpringDoc

本次项目我们用Maven来做&#xff0c;最近发现gradle其实很多项目的支持比较差&#xff0c;所以项目还是用Maven来新建项目。对比了市面上的几种API生成第三方库&#xff0c;只有springdoc 是能够按照文档就能部署出来的。 官网&#xff1a; OpenAPI 3 Library for spring-bo…

北京航空航天大学学报

《北京航空航天大学学报》是由中华人民共和国工业和信息化部主管&#xff0c;北京航空航天大学主办的中文核心期刊&#xff0c;中国精品科技期刊。1956年创刊&#xff0c;现为月刊&#xff0c;主要刊登有关航空航天及相关学科的优秀学术论文&#xff0c;面向国内外发行。 《北…

链接追踪系列-04.linux服务器docker安装elk

[rootVM-24-17-centos ~]# cat /proc/sys/vm/max_map_count 65530 [rootVM-24-17-centos ~]# sysctl -w vm.max_map_count262144 vm.max_map_count 262144 #先创建出相应目录&#xff1a;/opt/dockerV/es/…docker run -e ES_JAVA_OPTS"-Xms512m -Xmx512m" -d -p 92…

渗透测试入门指南:关键术语一览

引言 在信息安全领域&#xff0c;渗透测试&#xff08;Penetration Testing&#xff09;是一项重要的技能。对于初学者而言&#xff0c;理解一些常用的专业术语是迈向渗透测试的第一步。本文将为基础小白详细介绍渗透测试中的关键术语&#xff0c;帮助你快速上手。 1. POC、EX…