首页 > 其他分享 >LWE问题初探

LWE问题初探

时间:2023-05-02 22:00:41浏览次数:37  
标签:target 问题 small vector 初探 print matrix LWE

最近发现了格问题的极致恶心,所以还是得系统学一下;

LWE问题

1. 基本概念

对于已知一个矩阵 A 和一个向量 b ,他们满足关系式:\(b=As+e\),e 为变换过程中的噪声向量,其值比较小,通过已知条件还原 s 称为LWE问题,又被称为误差还原,也是机器学习领域的一个容错学习问题;
对于基本的线性方程组求解:\(b=As\)问题,我们可以通过高斯消除法进行比较轻松的求解,但是对于引入噪声的情况,高斯消除法的消元过程会不断地放大噪声,导致最后的结果差异较大,所以我们应该采取更加合适的方法;
对于LWE问题,我们所得的 As 需要非常接近结果 b ,这和 CVP 问题又有了莫名地相似,也是一个 NP-hard 问题;

2. 分析过程

对于LWE问题,我们都是在有限域 p 上进行研究,所以它的基本表达式为\(As+e \equiv c \ (mod \ p)\),可以转换为:

\[s_0a_{i,0}+s_1a_{i,1}+……+s_na_{i,n} \equiv c_i-e_i\ (mod\ p) \]

进一步得到:

\[s_0a_{i,0}+s_1a_{i,1}+……+s_na_{i,n}+e_i+k_ip\equiv c_i \]

之后构造格子 L :
image
然后对格 L 使用 LLL 算法,得到无噪声下的最短向量 x(一个 good basis),然后再将 x 和 c 通过 babai 算法,求得在格基为 x 情况下 c 的 CVP 最近向量,这就是\(c-e\)的值,记为 b ,又因为:

\[A_{LWE}s=b^T \]

所以可以直接求得 s 的值;
这里直接借用 Lazzaro佬的脚本 https://lazzzaro.github.io

点击查看代码 ``` #脚本1-小规模 #Sage from sage.modules.free_module_integer import IntegerLattice

row =
column =
prime =

ma =
res =

W = matrix(ZZ, ma)
cc = vector(ZZ, res)

Babai's Nearest Plane algorithm

def Babai_closest_vector(M, G, target):
small = target
for _ in range(5):
for i in reversed(range(M.nrows())):
c = ((small * G[i]) / (G[i] * G[i])).round()
small -= M[i] * c
return target - small

A1 = matrix.identity(column)
Ap = matrix.identity(row) * prime
B = block_matrix([[Ap], [W]])
lattice = IntegerLattice(B, lll_reduce=True)
print("LLL done")
gram = lattice.reduced_basis.gram_schmidt()[0]
target = vector(ZZ, res)
re = Babai_closest_vector(lattice.reduced_basis, gram, target)
print("Closest Vector: {}".format(re))

R = IntegerModRing(prime)
M = Matrix(R, ma)
M = M.transpose()

ingredients = M.solve_right(re)
print("Ingredients: {}".format(ingredients))

m = ''
for i in range(len(ingredients)):
m += chr(ingredients[i])
print(m)

</details>

标签:target,问题,small,vector,初探,print,matrix,LWE
From: https://www.cnblogs.com/Vect0r/p/17368372.html

相关文章

  • PHP: mysql 5.7 and php 5.6 导入记事本编号查询不了和中文乱码问题
    --https://dev.mysql.com/doc/refman/8.0/en/charset-database.htmlshowvariableslike"character_set_%";CREATEDATABASE`geovindu`CHARACTERSETutf8COLLATEutf8_general_ci;--mysql官方说明文档才知道原来MySQL8.0已经已经把默认字符集升级成ut8mb4了,和5.0有区......
  • Android JetPack~LiveData(二) 数据倒灌问题
    Android数据绑定技术一,企业级开发Android数据绑定技术二,企业级开发Android JetPack~DataBinding(数据绑定)(一)  集成与使用Android JetPack~LiveData(一) 介绍与使用AndroidJetPack~LiveData(二)数据倒灌问题Android JetPack~ViewModel(一) 介绍与......
  • 11.迷宫问题(BFS 储存路径)
    迷宫问题↑题目链接题目给定一个\(n×n\)的二维数组,如下所示:intmaze[5][5]={0,1,0,0,0,0,1,0,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,1,0,};它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上......
  • 经典数学组合题——西尔维斯特问题
    题目:在一个平面内有n(n>=3)个不完全共线的点,求证:则该平面内至少存在一条线恰好穿过其中两点证明:考查这个平面上每个至少经过两点的边以及对于一条边,不在该边上的点到边的最短长度。考虑上面最短长度中最短的一条边和一个点则该边恰好经过两个点证明如下......
  • Java cmd下编译乱码问题解决办法
    1、报错样式 2、解决办法1)指定字符集,如下 2)修改编码格式通过“记事本”打开—》另存为3)修改环境变量此电脑——》属性——》高级系统设置——》环境变量——》(系统环境变量)新建——》“JAVA_TOOL_OPTIONS” “-Dfile.encoding=UTF-8”如下图:——》重启cmd,再......
  • C语言数据结构---迷宫问题(栈)
    #include<stdio.h>#include<stdlib.h>#defineMAXSIZE20#defineM4#defineN4/*迷宫---外围加上一圈1起点--0011 0000 0111 0000--出口*///此迷宫按照优先向右下方向移动的标准!!!!//要用链表形式的栈存放坐标+方向typedefstruct{ //存放坐标x,y接下来......
  • 解决Matlab在Linux下无法使用hardware OpenGL的问题
    解决Matlab在Linux下无法使用hardwareOpenGL的问题1报错信息在命令行使用命令matlab-nodesktop-nosplash启动Matlab时,出现如下报错:MATLABisselectingSOFTWAREOPENGLrendering.在查阅ArchWikiMatlabOpenGLAcceleration栏目后,发现这是因为Matlab未启用OpenGL硬件加......
  • unity发布到4399的webgl模式问题:FRAMEWORK.JS中的WEBREQUEST_SEND括号内的函数(不能有
    在发布4399的时候,之前遇到过这个问题,解决方法当然就是删除这个函数啦。步骤也很简单,但是刚开始摸不着头脑搞了好久,最后发现发布的时候有个加密选项,选择不加密,后面build的文件里面就可以进行打开修改,按照要求修改函数即可。......
  • MySql在服务器上使用问题的总结
    服务器是WindowsServer2012,我自己安装了一个MySql数据库,然后一个Web程序和客户端程序都想访问数据库,但是遇到一堆问题。主要是我仍然坚持使用.net2.0,挂接MySql.Data6.7.4版本。解决后记录一下1.IIS访问数据库的问题未能加载文件或程序集“MySql.Data”或它的某一个依赖项。找......
  • 港股股票接口访问的问题
    18年做了一个小程序“盯盘帮手”,就是监控价格提醒,结果腾讯审核不让过,说是证券业务,无语!。最近发现又可以通过了,于是捡起来继续完善。一个大的改进,想增加港股的支持。结果发现,收到的信息居然晚了15分钟。这是我用的腾讯接口的数据:v_hk00700=\"100~腾讯控股~00700~351.600~344.400~35......