格密码基础:q-ary格

news2024/10/1 5:28:58

目录

一. 格密码的重要性

二. 格密码基础

2.1 格点的另一种理解方式

三. q-ary格

3.1 q-ary垂直格

3.2 q-ary格

3.3 二者结合

四. 论文中的q-ary格

4.1 定理1

4.2 定理2

4.3 定理3


一. 格密码的重要性

格密码的基础是研究格点上的困难问题,这种格点使用抽象代数的观点则是R^n上的子群。格密码近些年非常火热,主要由于以下几点:

  1. 抗量子攻击。基于传统数论的公钥密码系统是无法抵抗量子攻击的,这也是格密码最大的优势;
  2. 效率很高,可以平行操作。这个其实不能一概而论,得看实际情况。但目前我们常见的格密码方案效率都挺高的;
  3. 可实现最坏情况与平均情况之前的归约(worst case to average case);
  4. 利用格密码相关理论可解决以前比较棘手的困难问题,这个地方的困难问题,指的是密码界常说的open question;

密码学的基础是LWE(learning with errors)和SIS(short integer solution)问题,当然也包括这两个问题的环版本。通常Ring版本的计算效率会更高。这两个问题可以实现可证明安全,由此让密码学家前仆后继。

二. 格密码基础

2.1 格点的另一种理解方式

有关格密码基础可以参看我之前的博客。今天,可以从抽象代数的角度理解格点:m维的格\Lambda可以看成R^m上的离散加法子群

其中,格的秩与矩阵的秩k类似,满足k\leq m(在非满秩情况下,格的维度比最大的维度要小)。由此,给定格基B=\lbrace b_1,\cdots,b_k\rbrace,该格基由k个线性独立的m维列向量组成,对该格基进行整数倍线性组合即可形成格,如下:

\Lambda=\lbrace Bz:z\in Z^k\rbrace

当然,正常情况下,研究格密码的论文大多是满秩格,也就是常说的\Lambda\subset Z^mk=m(如果涉及格上高斯采样,有可能会出现非满秩格)。

2.2 对偶格

格形成的整个空间,通常叫做span(\Lambda)。如果从格上取一个格点x\in \Lambda,接着再取一个向量点v\in span(\Lambda),满足如下要求的点,称之为对偶格\Lambda^*

\langle v,x\rangle\in Z

这个是从格点的角度看对偶格,还可以从格基的角度出发。

如果格非满秩,原始格\Lambda的格基为B,那么对偶格的格基如下:

B^*=B(B^tB)^{-1}

大家看这个式子可能有点复杂,其实就是伪逆。在满秩格下,对偶格的格基就是先求逆再转置,如下:

B^*=B^{-t}

三. q-ary格

其实准确来讲,应该分为q-ary垂直格q-ary格

很多格密码的方案都是建立在q-ary格上的,之所以起这个名字是因为qZ^m一定是q-ary垂直格子格

3.1 q-ary垂直格

我们先来看一个矩阵。对于正整数n和q,选出A\in Z_q^{n\times m}(密码学通常要求该矩阵随机取),这个矩阵是公开的,如果有一个向量z乘以该矩阵为0向量,那么把满足此条件的向量z全部都组合在一起,就称之为q-ary垂直格,如下:

\Lambda^\bot(A)=\lbrace z\in Z^m:Az=0 \quad mod\ q\rbrace

很明显可以得出qZ^m一定是该格的子格。

3.2 q-ary格

同样,先选出一个矩阵A\in Z_q^{n\times m},接着遍历向量s\in Z^n_q,将两者相乘,得到新的向量z,即可形成q-ary格,如下:

\Lambda(A^t)=\lbrace z\in Z^m:\exists s\in Z_q^n\ s.t.\ z=A^ts\quad mod \ q\rbrace

3.3 二者结合

实际上,q-ary格和q-ary垂直格互为q倍的对偶格,如下:

q\cdot \Lambda^\bot(A)^*=\Lambda(A^t)

在这里就不证明了。

当然,部分论文类推,也会出现“1-ary”格,也就是:

\frac{1}{q}\Lambda(A^t)=\Lambda^\bot(A)^*

此格既包含整数,又包含小数,可得Z^m为其子格。

如果我们将Az=0中的0改为任意向量u\in Z_q^n,就会出现平移格或者叫陪集格(coset),如下:

\Lambda_u^\bot(A)=\lbrace z\in Z^m:Az=u \quad mod\ q\rbrace

四. 论文中的q-ary格

密码学三大会中经常会出现q-ary格,这里梳理一些常用的相关结论。

随机取一个A\in Z_q^{n\times m},假定q-ary垂直格\Lambda^\bot(A)的某个格基为S\in Z^{m\times m}

4.1 定理1

对任意幺模矩阵T\in Z^{m\times m},都有:

T\cdot \Lambda^\bot(A)=\Lambda^\bot(A\cdot T^{-1})

理解:该定理描述了幺模矩阵与q-ary垂直格的关系。左边T\cdot \Lambda^\bot(A)代表对每个q-ary垂直格进行幺模矩阵变换,该新格的格基为T\cdot S。右边代表对矩阵A的变换,看q-ary格的原始定理可直接列出。

4.2 定理2

对任意可逆的方阵H\in Z_q^{n\times n},q-ary垂直格都满足:

\Lambda^\bot(H\cdot A)=\Lambda^\bot(A)

理解:矩阵可逆的话,HAz=0可直接变为Az=0,与原来的q-ary垂直格等效。(注意矩阵H的顺序)

4.3 定理3

设定矩阵A\in Z_q^{n\times m}的列秩大于等于n,换句话说也就是矩阵A的列向量可构成Z_q^n。接着随机取矩阵A'\in Z_q^{n\times m'}以及矩阵W\in Z^{m\times m'},满足如下:

AW=-A'\quad mod\ q

接着我们可以借助此性质对q-ary垂直格的矩阵A进行扩展,形成新的q-ary垂直格\Lambda^\bot ([A'|A]),该q-ary垂直格的格基为:

S'=\left[ \begin{array}{cc}I&0\\W&S \end{array} \right]

另外,我们知道格基是可以进行正交化的。其实S'正交化后的矩阵如下:

\tilde S'=\left[ \begin{array}{cc}I&0\\0&\tilde S \end{array} \right]

通过矩阵的表达形式不难看出,该矩阵的模长与原始格基S正交化的模长相等,也就是:

||\tilde S'||=||\tilde S||

这个定理的证明需要用到很多线性代数的基础,如果有人感兴趣,后期再补上吧。

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

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

相关文章

从浮点数度分秒1.40000中无损精度提取1度40分00.0秒的方法

那些最好的程序员不是为了得到更高的薪水或者得到公众的仰慕而编程,他们只是觉得这是一件有趣的事情! 从浮点数度分秒1.40000中无损精度提取1度40分00.0秒的方法 🍀前言🌸传统的提取方法🔖算法介绍🧾Python…

Java研学-HTTP 协议

一 概述 1 概念和作用 概念:HTTP 是 HyperText Transfer Protocol (超文本传输协议)的简写,它是 TCP/IP 协议之上的一个应用层协议。简单理解就是 HTTP 协议底层是对 TCP/IP 协议的封装。   作用:用于规定浏览器和服务器之间数据传输的格式…

(企业 / 公司项目)如何使用分布式任务调度框架Quartz集成 和 SpringBoot自带的定时任务集成?

SpringBoot自带的定时任务 首先在你的微服务项目中创建一个新的模块,定时调度模块 pom.xml里面关联公共模块common的依赖其他不需要改变 然后启动类别删,启动项目是否报错,写一个简单的测试类访问路径是否成功 package com.jiawa.train.bat…

力扣日记12.24-【二叉树篇】236. 二叉树的最近公共祖先

力扣日记:【二叉树篇】236. 二叉树的最近公共祖先 日期:2023.12.24 参考:代码随想录、力扣 ps:提前祝 平安夜快乐! 236. 二叉树的最近公共祖先 题目描述 难度:中等 给定一个二叉树, 找到该树中两个指定节点…

nodejs+vue+ElementUi摄影作品图片分享工作室管理系统

第1周 2.21~2.27 查阅资料,学习vscode开发平台和vue框架技术 第2周 2.28~3.6 对软件功能需求进行分析, 软件功能模块划分及软件界面设计 第3周 3.7~3.13 撰写并提交毕业设计开题报告、英文资料翻译 第4周 3.14&#xff5…

[Linux] MySQL数据库之索引

一、索引的相关知识 1.1 索引的简介 索引是一个排序列表,包含索引值和包含该值的数据行的物理地址(类似于 c 语言链表,通过指针指向数据记录的内存地址)。 使用索引后可以不用扫描全表来定位某行的数据,而是先通过索…

Linux环境变量剖析

一、什么是环境变量 概念:环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,是在操作系统中一个具有特定名字的对象,它包含了一个或多个应用程序所将使用到的信息&#xff0c…

excel统计分析——S-W正态性检验

参考资料: [1]马兴华,张晋昕.数值变量正态性检验常用方法的对比[J].循证医学,2014,14(02):123-128. 统计推断——正态性检验(图形方法、偏度和峰度、统计(拟合优度)检验)_sm.distributions.ecdf-CSDN博客 【统计学】…

Linux操作系统基础 – 修改文件权限

Linux操作系统基础 – 修改文件权限 Linux Operating System Essentials - Modify File Rights By JacksonML 文件是Linux操作系统存储信息的基本结构。文件是一组信息的集合。 在Linux操作系统和Windows操作系统相比较的最大不同,是Linux文件没有扩展名&#xff…

2023年全球前端大技术大会(GMTC北京站2023)-核心PPT资料下载

一、峰会简介 大会以“业务至上,效率为王”为主题,策划了 1 个主会场,10 个技术专场。会议议题包含前端 DevOps 实践、低代码、大前端监控、跨端技术选型、团队可持续发展、IoT 动态应用开发、移动端性能与效率优化、TypeScript、大前端技术…

等腰三角形两底角相等

等腰三角形定义: 是指至少有两边相等的三角形。相等的两个边称为这个三角形的腰 二.证明 有等腰△ABC,AB和AC是腰,p是BC的中点 证明等腰三角形两底角相等 即 ∠ A B P ∠ P C A ∠ABP∠PCA ∠ABP∠PCA ∴ ∴ ∴ 三角形内角和为180 ∵ { ∠ A B P ∠ A P B ∠ B A P 180 …

形态学处理

形态学处理的相关内容 (1)基于图像形态进行处理的一般方法 (2)这些处理方法基本是对二进制图像进行处理 (3)卷积核决定着图像处理后的结果 形态学图像处理 (1)腐蚀(…

如何打包鸿蒙应用并发布到应用市场

知识点: HarmonyOS 应用打包后的文件为.app 格式, android 打包后的文件为.apk,IOS 打包后的文件为.apa HarmonyOS通过数字证书(.cer文件)和Profile文件(.p7b文件)等签名信息来保证应用的完整性…

最常见的SQL报错注入函数(floor、updatexml、extractvalue)及payload总结

SQL报错注入是一种常见的SQL注入攻击方式,攻击者通过注入恶意代码,触发数据库的错误响应,并从错误信息中获取有用的信息。 下面介绍最常见的三个报错注入函数用法及payload总结: 1、floor() 使用floor报错注入,需要…

VS2020使用MFC开发一个贪吃蛇游戏

背景: 贪吃蛇游戏 按照如下步骤实现:。初始化地图 。通过键盘控制蛇运动方向,注意重新设置运动方向操作。 。制造食物。 。让蛇移动,如果吃掉食物就重新生成一个食物,如果会死亡就break。用蛇的坐标将地图中的空格替换为 #和”将…

[动态规划]完全背包问题及其优化

题目描述 有N种物品和一个容量为 V 的背包,每种物品都有无限件可用。 第 i 种物品的体积是Ci,价值是Wi。求解在不超过背包容量的情况下,能够获得的最大价值。 输入 第一行为两个整数N、V(1≤N,V≤10000),分别代表题目描述中的物…

java 怎么读取文件创建时间?

Java读取文件创建时间的实现方法 在工作时候,我们有时候需要获取到文件的最后更新时间,根据最近更新时间,来处理其他业务。那么,在Java中,怎么获取到文件最后更新时间呢?接下来凯哥(个人号:凯哥…

教你应对Github最新的2FA二次验证! 无地区限制, 你的Github账户可能被封禁!

文章目录 2FA 定义2FA验证方法1 硬件令牌2.推送通知3.SMS 验证4 基于语音的身份验证 解决方案安装身份验证器的谷歌浏览器插件打开 github 的二维码,直接扫描 2FA 定义 双因素身份验证 (2FA) 是一种身份和访管理安全方法,需要经过两种形式的身份验证才能…

大数据----MapReduce实现统计单词

目录 一、简介二、实现单词统计数据准备编程MapReduceJob 三、运行四、结果 一、简介 Hadoop MapReduce 是一个编程框架,它可以轻松地编写应用程序,以可靠的、容错的方式处理大量的数据(数千个节点)。 正如其名,MapReduce 的工作模式主要分…

每日一题——Leetcode908

方法一 数学思想&#xff1a; 其实就是看数组中最大值和最小值一个加上k一个减去k是否能刚好凑到0&#xff0c;如果不能就是两者之差 var smallestRangeI function(nums, k) {var min9999,max-1for(var i0;i<nums.length;i){min Math.min(min,nums[i])max Math.max(max…