格密码基础:q-ary格

目录

一. 格密码的重要性

二. 格密码基础

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.mzph.cn/news/329167.shtml

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

相关文章

java动脑公开课_java课堂动手动脑

实验任务一:阅读并运行示例PassArray.java.1)源代码:package demo;//PassArray.java//Passing arrays and individual array elements to methodspublic class PassArray {public static void main(String[] args) {int a[] { 1, 2, 3, 4, 5 };String o…

dotnet core开发体验之开始MVC

开始 在上一篇文章:dotnet core多平台开发体验 ,体验了一把dotnet core 之后,现在想对之前做的例子进行改造,想看看加上mvc框架是一种什么样的体验,于是我就要开始诞生今天的这篇文章来分享我的感受了。 一、项目改造加…

Java时间处理第三方包:Joda-Time

转载自 Java时间处理第三方包:Joda-TimeJoda-Time provides a quality replacement for the Java date and time classes.Joda-Time is the de facto standard date and time library for Java prior to Java SE 8. Users are now asked to migrate to java.time (…

Visual Studio Code五月版本更新

开源项目、跨平台代码编辑器Visual Studio Code刚发布了其1.2版本(虽然说是2016年5月发布,但其实是在6月交付的)。和往常一样,这次发布的版本中对于很大一部分功能都进行了改善,其中最值得关注的可能是一种全新整合的终…

关于SimpleDateFormat时间格式化线程安全问题

转载自 关于SimpleDateFormat时间格式化线程安全问题昨天推送的文章《关于创建和销毁对象》一文中,2.1重复利用对象这一小节所举的SimpleDateFormat格式化时间的例子是不合适的,因为多线程场景下,SimpleDateFormat存在线程安全问题。在此&am…

聊聊ASP.NET Core默认提供的这个跨平台的服务器——KestrelServer

跨平台是ASP.NET Core一个显著的特性,而KestrelServer是目前微软推出了唯一一个能够真正跨平台的Server。KestrelServer利用一个名为KestrelEngine的网络引擎实现对请求的监听、接收和响应。KetrelServer之所以具有跨平台的特质,源于KestrelEngine是在一…

pdfbox java.lang.outofmemoryerror_Apache PDFBox 1.8.11 发布,Java 的 PDF 处理类

Apache PDFBox 1.8.11 发布,此版本是个增量 bug 修复版本,包括大量 bug 修复和改进。现已提供下载:主要改进内容:Bug 修复[PDFBOX-962] - All sort of Problems when importing Xfdf files into PDFs ->damaged pdfs and NPEs[…

Java8 Striped64 和 LongAdder

转载自 Java8 Striped64 和 LongAdder 数据 STRIPING 根据维基百科的这段说明:In computer data storage, data striping is the technique of segmenting logically sequential data, such as a file, so that consecutive segments are stored on different phys…

Roslyn项目系统简介

发布15年后,Microsoft终于开始替换Visual Studio中基于COM的C#和Visual Basic项目系统。Microsoft谈及很多有必要放弃目前所用系统的原因: 原生且基于COM单线程并与UI线程绑定难以通过和(不同用途的)子类型类扩展到聚合之外与Visu…

fastdfs 集群 java_FastDFS集群部署(转载 写的比较好)

之前介绍过关于FastDFS单机部署,详见博文:FastDFSNginx(单点部署)事例下面来玩下FastDFS集群部署,实现高可用(HA)服务器规划:跟踪服务器1【主机】(Tracker Server):192.100.139.121跟踪服务器2【备机】(Tracker Server…

简析.NET Core 以及与 .NET Framework的关系

至2002微软公司推出.NET平台已近15年,在互联网快速迭代的浪潮中,许多语言已被淘汰,同时也有更多新的语言涌现,但 .Net 依然坚挺的站在系统开发平台的一线阵营中,并且随着.NET Core 即将到来(2016年6月27日)的正式版&am…

Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator

转载自 Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator功能简介:LongAdder是jdk1.8提供的累加器,基于Striped64实现。它常用于状态采集、统计等场景。AtomicLong也可以用于这种场景,但在线程竞争激烈的情况下,Long…

mysql 密码hash算法_如何用hash创建一个mySQL用户(‘sha256’,$salt.$password)?

我肯定错过了什么.我想为select-only事务设置数据库用户帐户,但mysql不允许我在创建用户帐户时选择密码的哈希方法.这失败了:GRANT SELECT ON myDB.* TO selectuserlocalhostIDENTIFIED BY hash(sha256, salted-myfakelongrandompasswordstring);错误1064(42000)&am…

为什么微软逐步转变为开源公司

微软目前拥有自己的 BSD Unix 操作系统,支持 Ubuntu 作为 Windows 10 的一个子系统,最近又将 Xamarin 软件开发工具包开源,所有这些意味着微软已不再是比尔盖茨和史蒂夫鲍尔默的微软了。 我知道这很难令人相信,但微软确实正大步走…

Jdk1.8 JUC源码增量解析(1)-atomic-Striped64

转载自 Jdk1.8 JUC源码增量解析(1)-atomic-Striped64功能简介:Striped64是jdk1.8提供的用于支持如Long累加器,Double累加器这样机制的基础类。Striped64的设计核心思路就是通过内部的分散计算来避免竞争(比如多线程CAS操作时的竞争)。Striped64内部包含…

java内部类选择题_java内部类详解(附相关面试题)

说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们就来一探究竟。一.内部类基础在Java中&am…

开源,新的平台之战

近日,OpenDaylight项目的执行总监Neela Jacques在文章《开源的转变:一种新的平台战争》 中提到:开源已经成为软件公司业务战略的关键,是一种新的平台之战。 多年来,开源软件似乎处于技术产业的边缘。而如今&#xff0c…

java下载图片到手机相册_Unity保存图片到Android手机且更新相册

Android 保存图片到设备前言:在许多的应用或游戏中,大多都有保存图片或者截图等等的功能,这篇文档我们的目的是通过 Unity 保存图片,并且调用 Andorid 中的更新相册的原生方法.流程步骤:编写更新相册的 Android 原生接口 -> Unity 编写保存图片逻辑以及调用更新相册 Android…

如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例

转载自 如何在 Java 中正确使用 wait, notify 和 notifyAll – 以生产者消费者模型为例 wait, notify 和 notifyAll,这些在多线程中被经常用到的保留关键字,在实际开发的时候很多时候却并没有被大家重视。本文对这些关键字的使用进行了描述。 在 Java 中…

.NET Core 使用Dapper 操作MySQL

.NET Core 使用Dapper 操作MySQL 数据库, .NET Core 使用Dapper。 目前官方没有出.NET Core MySQL 驱动,但是已经有第三方进行改动封装出.NET Core MySQL Connector 预览版。 Dapper 也已经出了 .NET Core 预览版。 Dapper dot net 是一个轻量型的ORM&a…