格密码:如何找最近的格点(CVP问题)

格理论和密码学(一) 最近在学格,这里开个坑,尽量实训期间搞完 阅读详情

目录

一. 摘要

二. 介绍

2.1 简单的CVP问题

2.2 Gram-Schmidt向量

2.3 KZ基

三. 格密码的基本符号

四. CVP问题的发展

五. 如何解决CVP问题

5.1 随机取整算法

5.2 Babai算法+随机取整

5.3 小结

六. 推荐论文


一. 摘要

本文章将解释如何利用随机取整算法(randomized rounding)来找最近的格向量(closest lattice vector),其中最近指的是欧几里得范数(Euclidean norm)最小。将该问题总结如下:

给定格基,给出任意向量x(不在格点上),如何采用启发式算法大概率找到离其最近的格点?

该算法的运行时间取决于:

  1. x离最近格点的距离大小
  2. 格基的质量

二. 介绍

2.1 简单的CVP问题

格密码有一个基本问题叫做最近向量问题,如下指的是同一类:

最近向量问题:closest lattice vector problem 或者nearest lattice point problem,简称CVP问题。

格上CVP问题是NP-hard的,也就是没有多项式时间复杂度的算法能解决此类问题,只有指数时间复杂度的算法才能解决。但是,如果给该类问题外加一些限制的话,可能会变得简单。

Furst和Kannan发现了一类问题,叫做子集和问题,跟CVP问题有异曲同工之妙。如果给CVP问题如下限制的话,那么该问题就可以被解决:

v离格点的距离小于最短Gram-Schmidt向量的一半

在该条件下,很明显,满足条件的格点只有一个。

推荐阅读:

【格密码】最近平面算法解决CVP问题(1)-优快云博客

2.2 Gram-Schmidt向量

Gram-Schmidt算法可以将任意向量转为正交向量。给定一个格基b_1,\cdots,b_n,正交后的向量叫Gram-Schmidt向量,写做b_1^\dag,\cdots,b_n^\dag。b_i垂直于向量空间b_1,\cdots,b_{i-1}的分向量即为b_i^\dag.

2.3 KZ基

KZ基的全称是Korkin-Zolotarev基,最早由Lagarias等人提出。它们发现了最短的Gram-Schmidt向量与格上最短向量(SVP问题)之间的关系:

最短的Gram-Schmidt向量大于等于3/2n倍的最短向量长度。

接下来,我们将演示一个算法,其复杂度为:

n^{k^2+O(1)}

如果以下条件满足的话,那么可以找到离v最近的格向量:

实数点v离格的距离小于最短Gram-Schmidt向量长度的k倍。

也就是当解码半径变大时,时间复杂度也在增大。效率和正确率需要相互平衡。

三. 格密码的基本符号

n个向量b_1,\cdots,b_n,其形成的向量空间为V(b_1,\cdots,b_n),其形成的格记为L(b_1,\cdots,b_n)

输入点x以及格基b_1,\cdots,b_n,尝试输出:

y\in L(b_1,\cdots,b_n)

使得如下最小:

|x-y|

该问题的本质就是BDD问题,其时间复杂度为:

n^{|x-y|^2/min_i|b_i^\dag|^2}

很明显,当x离格的距离比最小的Gram-Schmidt向量的长度大太多,那么该算法的复杂度即为多项式时间复杂度。

四. CVP问题的发展

Kannan提出解决CVP问题的算法复杂度为n^n,其中n代表格的维度。当k<o(\sqrt n)时,本文章的算法就相当于对该算法进行了优化。

当k<1/2时,解决CVP问题的算法复杂度会直接降低到多项式水平。

回顾定理:

给定格基,给出任意向量v,v到格点的距离一定小于Gram-Schmidt向量长度和的一半。

如果实数点v距离格点近,但又不是那么近,会出现什么情况?

五. 如何解决CVP问题

5.1 随机取整算法

可以借助随机取整算法(random rounding)来将一个实数变为整数。这里随机指的是5取整的话,可能会变成其他整数。

我们将该算法记作randRound_c(r)。其中c为下标,r为输入。

将r写做r=p+a,其中p代表整数,a代表小数,也就是:

0\leq a<1

借鉴网络安全领域的离散高斯分布,来看一个特殊的表达:

s=\sum_{i\geq 0}e^{-c(a+i)^2}+\sum_{i\geq 0}e^{-c(b+i)^2}

根据高斯函数的性质,易得:

将该不等式的右边写做s(c),也就是:

s(c)=\sum_{i\geq 0}(e^{-ci^2}+e^{-c(1+i)^2})

当把此算法结合原始的Babai算法时,则可以出现比较好的结果。

5.2 Babai算法+随机取整

将寻找最近格点的算法记作near_A(x,d),其中A为下标代表公共参数,x代表输入,d代表维度。如果x为零向量的话,那么d=0。换句话说,向量x位于空间V(b_1,\cdots,b_d)内。

第一步:将x投影到b_d^\dag的分向量记为r_db_d^\dag

第二步:生成参数c,如下:

c_d=A|b_d^\dag|^2

这一步的c就是上个算法中的c

第三步:r_d进行随机取整,如下:

\lambda_d=randRound_{c_d}(r_d)

第四步:形成x',如下:

x'=x+(\lambda_d-r_d)b_d^\dag

d维结束,接着继续重复计算d-1维即可,此时可得:

near_A(x'-\lambda_db_d,d-1)+\lambda_db_d

5.3 小结

定理1

x'-\lambda_db_d位于空间V(b_1,\cdots,b_{d-1})内。

证明如下:

定理2

x和x'之间的差为(\lambda_d-r_d)b_d^\dag

定理3

对于任意向量满足:

x\in V(b_1,\cdots,b_d)

该算法near_A(x,n)可以输出一个向量满足:

很明显该向量y在格点上,而且该格点满足:

证明:

根据算法的定义,x'如下:

根据归纳假设,d-1维的算法输出的格点y'满足:

由此可得:

带入即可得:

定理4

假定\hat y为格点,x为实数点。以上算法输出\hat y的概率为:

所以要想输出最近的格点,可能需要调用算法多次,让后从这些样本中挑选出最近的。理论上,只有样本足够大,其中肯定包含最近的向量。算法调用的次数取决于三个值:x离格点的距离,1/s的值,参数A的取值。

如果将算法实例化,那么对应的概率为:

实际上借助decision tree,可以将其转为确定性算法。

六. 推荐论文

(1)格上CVP问题介绍

L. Babai, "On Lovhsz' lattice reduction and the nearest lattice point problem," Combinatorica (1986), pp. 1-13.

(2)介绍闵可夫斯基凸体定理

R. Kannan, "Minkowski's convex body theorem and integer programming," Mathematics o] Operations Research, vol. 12 (1987), pp. 415-440.

(3)介绍KZ基

J. C. Lagarias, H. W. Lenstra, and C. P. Schnorr, "Korkin-Zolotarev Bases and successive minima ofa lattice and its reciprocal lattice," Combinatorica (1990), pp. 333-348.

lattice cryptography基础——格密码学前置知识 这是Simons 2020 年格密码讲座 Lattices: Algorithms, Complexity, and Cryptography Boot Camp 的第 1 讲,所述内容。 主要是格密码的一些前置基本知识,并且对后面要讲的格密码学做个一个启发式。 本篇为学习记录+个人笔记。内容主要包含格的定义和一些基本量,基本困难问题、归约、对偶格以及对后面讲格密码的一些铺垫延伸式问题。 阅读详情

相关推荐

NTRU格密码初探

格 格的定义: 给定一组线性无关的基向量v1, v2, ..., vn,那么这些基向量的所有整系数线性组合 所形成的集合,就叫做这组基向量所张成的格(lattice)。 系数不再是任何实数,变成了是任何整数 也就是说,从无数个连续的点变成了无数个离散的点。 不同的基底,可能会张成不同的lattice: 对原基底进行整系数线性转换得到的新的基底,张成的lattice仍旧不变: 注意:同一个lattice有很多组基底。 在lattice里面,有两个知名的难题: SVP(最短向量问题,Shorte

m0_57329653的博客 1453

【格密码基础】:详解closest lattice vector problem(CVP)问题

当然,穷搜也太傻了。我们采用刚才谈到的二分搜寻法,也就是借助已有的decisional CVP的oracle,确定最终的距离dist(t,L(B))也就只需要2logR步。格基向量的长度是确定的,那么R跟n之间是多项式关系,此算法最多也是多项式形式。也就是给定格(lattice),以及一个目标点,该目标点通常不是格点,我们的目的是找出离其最近的格点,该问题计算上是困难的。其实CVP问题有三种变式情况,第一种就是找到离其最近的格向量,第二种就是找出最近的距离,第三种是判定其距离是否小于某个已知的常数。

forest_LL的博客 2279

lattice学习笔记(一)

什么是格 在数学中有两个完全不同的对象都称为格。我们现在说的格是定义为向量空间的离散子空间Rn。在此,离散意味着在格中不能存在任意彼此接近的两个向量。换句话说,存在一个正实数λ,使得格中的任何两个向量都不能小于距离λ。 子空间一词告诉我们,如果您的格中有两个向量,那么你可以几何地从另一个向量中减去另一个,而最终的位置将是格中的另一个向量。这意味着零向量始终在格中。 在视觉上,二维的格看起来像这样,每个点不是连续的,而是离散的: 格是欧几里得空间中的一个离散子群。格可以由线性独立的向量b1定义为整数跨度,…,

comptine的博客 4650

【格密码】最近平面算法解决CVP问题(1)

在1986年,L.Babai曾提出最近平面算法来解决CVP问题,利用n代表格的秩,该算法的输出近似值如下:CVP问题的六种变式,如下:当时,后三种问题就与前三种一样了。如果解决了计算问题,由于计算、优化和Gap问题三者困难性一样,那么剩下的优化和Gap问题也就可以解决了。最近平面算法可以解决计算CVP问题,且此时,为了简化分析的思路,后续仅仅讨论,通过修改算法相关的参数也可以达到想要的近似值。简单的取整算法就是把给定向量的系数全部直接取整(可以是上取整,也可以是下取整),概算法得到的格点与格基的选择有很大关

forest_LL的博客 2925

别再手动翻译PDF了!手把手教你用Zotero PDF Translate插件搞定外文文献(附最新GitHub下载链接)

本文详细介绍如何利用Zotero PDF Translate插件高效翻译外文文献,包括插件安装、配置及多引擎对比。通过划词翻译、段落翻译和全文翻译功能,显著提升科研工作效率,特别适合处理大量英文PDF文献的研究人员。

weixin_33712987的博客 771

实战分享:如何用Java调用Doris FE接口实现高效Stream Load数据导入(附完整代码)

本文详细介绍了如何通过Java调用Doris FE接口实现高效的Stream Load数据导入,包含完整代码示例和性能优化技巧。Stream Load作为Doris的高效数据导入方式,相比传统JDBC提升5-10倍速度,适用于大规模数据处理场景,帮助开发者解决高吞吐量数据导入挑战。

weixin_29304985的博客 416

[TPAMI‘21] Heatmap Regression via Randomized Rounding

本文探索了热图回归中的量化误差问题;本文提出了一个简单但有效的系统,包含两个部分:在训练时,用一种概率方法,将坐标小数部分编码到GT heatmap中;在测试时,从激活点集合中解码预测坐标本文在人脸关键点数据集(WFLW、300W、COFW和AFLW)和人体位姿检测数据集(MPII和COCO)上实验验证了本文方法的有效性。

qq_40731332的博客 1083

SMARTFORMS实战:用Template+Loop实现复杂表格布局(附避坑指南)

本文深入解析了SMARTFORMS中Template与Loop组合实现复杂表格布局的实战技巧,突破传统TABLE组件的限制。通过多级表头、单元格合并等案例演示,提供从基础架构搭建到动态数据绑定的完整解决方案,并分享性能优化与异常处理的最佳实践,助力开发者高效应对企业级报表设计挑战。

numpy6sculptor的博客 804

Heatmap Regression via Randomized Rounding

import torch import torch.nn as nn import torch.nn.functional as F def heatmap2coord(heatmap, topk=9): N, C, H, W = heatmap.shape score, index = heatmap.view(N,C,1,-1).topk(topk, dim=-1) coord = torch.cat([index%W, index//W], dim=2) re..

邹小驴 1903

手把手教你编写I2C读写EEPROM代码(驱动层实现)

从底层寄存器配置到时序控制,详解如何编写可移植的I2C读写EEPROM代码,覆盖起始信号、地址帧、数据收发及ACK应答等关键环节,确保在STM32、ESP32等主流平台稳定运行,真正落地i2c读写eeprom代码需求。

weixin_35756130的博客 505

C#实战:如何用Chart控件打造专业级数据可视化报表(附完整代码)

本文详细介绍了如何使用C#的Chart控件创建专业级数据可视化报表,涵盖柱状图、饼图和雷达图等多种图表类型的高级定制与交互增强。通过完整的代码示例,展示了从环境配置到动态数据绑定的全流程,助力开发者提升企业级应用的数据可视化能力。

ipfs8storage的博客 418

别再死记硬背了!用‘叠橘子’和‘铺地砖’的比喻搞定格密码核心概念

本文通过‘叠橘子’和‘铺地砖’的生活化比喻,生动解析了格密码的核心概念。格密码作为抗量子攻击的前沿密码学技术,其规则排列、格基选择和基本区等关键原理被巧妙类比,帮助读者轻松理解这一复杂领域。文章还揭示了格密码在网络安全中的独特优势和应用前景。

weixin_28700593的博客 268

关于ADS重新安装失败的解决方案

ads卸载安装license被锁无法修改导致安装最后没有证书

weixin_47103290的博客 9701

基于格密码的算法研究

Q1:传统公钥密码面临的挑战 (1)安全性挑战:Shor量子分解算法利用量子计算的并行性,对任意大的整数进行快速因子分解,大大降低目前普遍使用的RSA算法的破解时间。随后又出现了针对基于离散对数问题的量子求解算法。这些量子算法的提出意味着只要出现实际的量子计算机,现有的以传统公钥密码为基石建立的安全系统将丧失所有的安全性。 (2)效率挑战:传统公钥密码算法的密钥长度一直在增加,使得传统密码算法码效...

Mr.Yi的博客 1万+

GB9706.1-2020应用部分如何理解?

医用电气设备对应用部分的温度限制,绝缘考核,漏电流限制要求相对设备的其他部分来说都会要求比较严格。所以,划分设备的应用部分显得非常重要。现实中,医疗器械种类繁多,形状各异,比如大家熟悉的,小的如血压计,大的设备如CT。有些时候,我们应该如何根据应用部分的定义来确定ME设备的哪些部分是应用部分呢?还有GB 9706.1-2020中关于“应用部分”的定义中注2我们又该如何理解? 看过GB 9706.1-2020的朋友应该都已经注意到,相比老版也就是07版的9706.1,应用部分的定义是相对变...

喵叫兽的博客 8294

Unity零基础到进阶 ☀️| Unity中的 GC及优化 超级全面解析 ☆(ゝω・)v 建议收藏!

介绍: 在游戏运行的时候,数据主要存储在内存中,当游戏的数据在不需要的时候,存储当前数据的内存就可以被回收以再次使用。内存垃圾是指当前废弃数据所占用的内存,垃圾回收(GC)是指将废弃的内存重新回收再次使用的过程。 Unity中将垃圾回收当作内存管理的一部分,如果游戏中废弃数据占用内存较大,则游戏的性能会受到极大影响,此时垃圾回收会成为游戏性能的一大障碍点。 本文我们主要学习垃圾回收的机制,垃圾回收如何被触发以及如何提GC收效率来提高游戏的性能。 Unity内存管理机制简介 要想了解垃圾回收如何工作以及何时被

努力前行,总会成为自己心中的那道光 6万+

【CTF-Crypto】格密码基础(例题较多,非常适合入门!)

格密码基础入门,有较多例题,应用相应的定理,便于理解格密码其中的原理,希望对刚入门格密码的师傅们有帮助

jayq1的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

CTF-密码学题目解析之格密码

CTF 密码学 格密码 出题思路

攻防SRC 3740

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【格密码】最近平面算法解决CVP问题(2)(完结篇)

比如我们想要描述一个 m 维的 q-ary 格, 我们必须构建一个m维的矩阵才能够清楚得把这个 m 维格的具体结构表达出来, 这需要非常大的空间, 从而影响了基于格的数字签名走向实用化。相似的, 格上的数字签名方案的安全性都可以规约到格上的困难问题, 目前, 已经证明了格上许多困难问题是。给定n个线性独立的向量,把它们转化成n个正交的向量,这个过程就是线性代数中所谓的Gram-Schmidt正交化过程。注意向量正交化已经把格基改的面目全非,正交化后的格基已经不能形成原来的格点,看上面那张图就很清楚了。

forest_LL的博客 1513

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

10、格密码-抗量子计算

格密码

安全学习笔记 6504

【格密码基础理论与CRYSTALS-Dilithium数字签名算法学习分享】

本篇文章旨在通过格理论的概念、格的困难问题、基于格的密码算法的设计思路、和基于格的Dilithium数字签名算法的解析的学习路径,帮助大家初步理解格的概念,理清学习脉络。

2301_79846954的博客 3980

格密码6:Gauss 格约化算法和 LLL 格约化算法

《An Introduction to Mathematical Cryptography》格密码学一章学习6:2维格的 Gauss 格约化算法,LLL 格约化算法

Jason_Cheng667的博客 1518

投影矩阵在格密码中的应用

格密码在解决最近向量问题时(CVP)时,需要用到LLL算法。算法中有一个思想,需要把向量向低维度进行投影,如下图:这个过程的本质就是投影的思想,在格密码中就是所谓的降维过程,其运用非常广泛,比如基于格的攻击算法,解密算法等等。为了把这一思想更加具体化,本文章介绍投影矩阵这一工具相关的知识。

forest_LL的博客 1221

格密码--数学基础--08最近向量问题(CVP)与格陪集

08最近向量问题(CVP)与格陪集

2303_79193185的博客 514

格密码初学笔记

@格密码学习笔记 从初学到脱发 格的基础知识 定义1: 格(Lattice) 给定nnn个线性无关向量b1,b2,…,bn∈Rmb_1,b_2,\dots, b_n\in \mathbb{R}^mb1​,b2​,…,bn​∈Rm,由该组向量产生的格被定义为, L(1,b2,…,bn)={∑xibi∣xi∈Z}\mathcal{L}(_1,b_2,\dots, b_n)=\{\sum x_ib_i|x_i\in\mathbb{Z}\}L(1​,b2​,…,bn​)={∑xi​bi​∣xi​∈Z} 我们通常将向

qq_39290054的博客 2646

格密码3:最短向量问题、Minkowski 定理和 Babai 算法

《An Introduction to Mathematical Cryptography》格密码学一章学习3:最短向量问题、最近向量问题、Hermite 定理、Minkowski 定理和 Babai 算法

Jason_Cheng667的博客 1805
上一篇: 详解矩阵的正交化(附例题分析)
下一篇: 密码学基础
唠嗑!
唠嗑! 优质创作者: 信息安全技术领域 优质创作者: 信息安全技术领域
博客等级 码龄5年 3万+粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唠嗑!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值