Files
linea-monorepo/prover/sis_estimation/direct_svp.py
Julien Marchand a001342170 chore: Initial commit
Co-authored-by: Franklin Delehelle <franklin.delehelle@odena.eu>
Co-authored-by: Alexandre Belling <alexandrebelling8@gmail.com>
Co-authored-by: Pedro Novais <jpvnovais@gmail.com>
Co-authored-by: Roman Vaseev <4833306+Filter94@users.noreply.github.com>
Co-authored-by: Bradley Bown <bradbown@googlemail.com>
Co-authored-by: Victorien Gauch <85494462+VGau@users.noreply.github.com>
Co-authored-by: Nikolai Golub <nikolai.golub@consensys.net>
Co-authored-by: The Dark Jester <thedarkjester@users.noreply.github.com>
Co-authored-by: jonesho <81145364+jonesho@users.noreply.github.com>
Co-authored-by: Gaurav Ahuja <gauravahuja9@gmail.com>
Co-authored-by: Azam Soleimanian <49027816+Soleimani193@users.noreply.github.com>
Co-authored-by: Andrei A <andrei.alexandru@consensys.net>
Co-authored-by: Arijit Dutta <37040536+arijitdutta67@users.noreply.github.com>
Co-authored-by: Gautam Botrel <gautam.botrel@gmail.com>
Co-authored-by: Ivo Kubjas <ivo.kubjas@consensys.net>
Co-authored-by: gusiri <dreamerty@postech.ac.kr>
Co-authored-by: FlorianHuc <florian.huc@gmail.com>
Co-authored-by: Arya Tabaie <arya.pourtabatabaie@gmail.com>
Co-authored-by: Julink <julien.fontanel@consensys.net>
Co-authored-by: Bogdan Ursu <bogdanursuoffice@gmail.com>
Co-authored-by: Jakub Trąd <jakubtrad@gmail.com>
Co-authored-by: Alessandro Sforzin <alessandro.sforzin@consensys.net>
Co-authored-by: Olivier Bégassat <olivier.begassat.cours@gmail.com>
Co-authored-by: Steve Huang <97596526+stevehuangc7s@users.noreply.github.com>
Co-authored-by: bkolad <blazejkolad@gmail.com>
Co-authored-by: fadyabuhatoum1 <139905934+fadyabuhatoum1@users.noreply.github.com>
Co-authored-by: Blas Rodriguez Irizar <rodrigblas@gmail.com>
Co-authored-by: Eduardo Andrade <eduardofandrade@gmail.com>
Co-authored-by: Ivo Kubjas <tsimmm@gmail.com>
Co-authored-by: Ludcour <ludovic.courcelas@consensys.net>
Co-authored-by: m4sterbunny <harrie.bickle@consensys.net>
Co-authored-by: Alex Panayi <145478258+alexandrospanayi@users.noreply.github.com>
Co-authored-by: Diana Borbe - ConsenSys <diana.borbe@consensys.net>
Co-authored-by: ThomasPiellard <thomas.piellard@gmail.com>
2024-07-31 18:17:20 +02:00

56 lines
1.2 KiB
Python

from bkz2 import svp_l2_oracle_cost, hypercube_l2_ball_intersection_log_prob, \
norm_frame, log2_volume_unit_ball
import math
from scipy.optimize import minimize_scalar
from math import ceil
def svp_attack_via_linf(
log2_q,
log2_bound,
n,
max_m=2**14,
):
"""
Two-level sieving attack [Aggarwal, Mukhopadhyay]
https://arxiv.org/pdf/1801.02358.pdf
"""
m = math.ceil(log2_q/log2_bound - 1)
dim = (m+1)*n
# Attack using direct SVP attack
return 0.62*dim
def svp_attack_via_l2(
log2_q,
log2_bound,
n,
max_m=2**14,
):
min_m = ceil(log2_q/log2_bound*n)
f = lambda m: l2_then_prob_estimate_for_m(
log2_q=log2_q,
log2_bound=log2_bound,
n=n,
m=m,
)
sec = sec = minimize_scalar(f, bounds=(min_m, max_m), method="bounded")
assert sec.success
return f(sec.x)
def l2_then_prob_estimate_for_m(
log2_q,
log2_bound,
n,
m,
):
best_norm = log2_q * (n/m)
log_t = svp_l2_oracle_cost(m)
log_p = hypercube_l2_ball_intersection_log_prob(
log2_bound=log2_bound,
log2_l2_norm=best_norm,
m=m,
)
return log_t - log_p