I'm interesting in the lattice problems (the one used in the post quantum crypto), especially the shortest vector problem. I'm trying to understand why it is hard by finding an example, but I can't find in dimension 2 a lattice and a base in which finding the shortest vector is not trivial (I'm always able to find the shortest vector by doing something like two subtractions).
For example, let's consider this "nice" (nearly orthogonal) base:
I can build from this base a new base (C,D) (in read):
which is less orthogonal. However, I can recover (A, B) in only two steps:
B = D-C
A = C-B
All the others based I can found are in the same idea: add to (C,D)
a given number n
of the B
vector, but all of these bases allow me to recover the initial base in a small number of steps (basically a greedy algorithm seems to be able to find it by subtracting the two vectors, and then use this new vector to find the other vector by doing n
subtracts).
Does anyone know a way to generate non trivial bases such that finding the original base would be more complicated than just doing two substractions?
Thank you!
EDIT
I react here to the solution proposed by Will Jagy (thank you for your answer). If I try the basis $v_1 = (15,-7,-7)$, $v_2 = (-7,15,-7)$ and $v_3 = (-7,-7,15)$, then I can find in 6 operations the shortest vector $v_m = (1,1,1)$ (thank you to the great 3D tools of Geogebra). So it's not amazing but you can tell me "you were lucky", or "it's because it's in a small dimension". Well the problem is that this vector is even given by the Hermite decomposition which is computable in polynomial time (here using the great sagemath to compute it):
>>> matrix(ZZ,3, [15,-7,-7,-7,15,-7,-7,-7,15]).hermite_form()
[ 1 1 1]
[ 0 22 0]
[ 0 0 22]
(the vectors are read line by line)
I tried then to plot the lattice using blender:
import bpy
def main():
m = 3
v1 = [15,-7,-7]
v2 = [-7, 15, -7]
v3 = [-7,-7,15]
for i in range(-m,m):
for j in range(-m,m):
for k in range(-m,m):
l = [i*t1+j*t2+k*t3 for (t1,t2,t3) in zip(v1,v2,v3)]
bpy.ops.mesh.primitive_uv_sphere_add(size=0.3, location=l)
main()
in read I put the base vectors, in green the shortest vector, and in grey you have some others vectors of the lattice:
Wouldn't it be possible to also have a basis where the Hermite form is also bad?