Puncte:2

Întrebare despre coeficientul ECDSA în atacul lattice

drapel in
jin

Actualizare: mi-am făcut ca atacul cu zăbrele să funcționeze în sfârșit. Întrucât motivul real este destul de complicat, decid să scriu un răspuns mai jos pentru a descrie cum a funcționat, astfel încât oricine cu o întrebare similară să se inspire din munca mea. Întrebarea nu este modificată.

Am studiat recent atacul latice. Am încercat să folosesc date de la TPM-FAIL pentru a mă ajuta să înțeleg acest atac și să încerc să implementez un atac folosind „metoda manuală” (există unele optimizări în scripturile de atac TPM-FAIL). Am avut câteva întrebări citind materialele pe care nu le-am putut înțelege. Va rog sa ma ajutati daca aveti vreo idee.

  1. Formula semnăturii DSA poate fi în sfârșit transformată în următoarea ecuaţie:

    $k_i-s_i^{-1}r_id-s_i^{-1}H(m)\equiv 0 \pmod{n}$

    unde k este cheia efemeră, (r,s,) este perechea de semnături, d este cheie privată, H(m) este mesajul digest, ca de obicei... știi exercițiul.
    Atunci acesta poate fi transformat în formă de zăbrele. Ceva de genul următor ecuaţie:

    $k_i+A_id+B_i\equiv 0\pmod n$, Unde $A_i=-s_i^{-1}r_i$ și $B_i=-s_i^{-1}H(m)$

    Ce nu înțeleg este că, de ce trebuie să fie negativ? a încercat de fapt să modifice scriptul de atac furnizat în TPM-FAIL set de date și a constatat că eliminarea -1 din A_i și B_i va provoca atacul a eșuat. Dar putem rescrie prima ecuație ca:

    $s_i^{-1}r_id+s_i^{-1}H(m)\equiv k_i\pmod{n}$

    Conceptul de atac lattice ar trebui să rămână în continuare: Dacă lattice vectorul este mic, algoritmul de reducere a bazei ar trebui să genereze răspunsul. Ce am greșit?

  2. Al doilea lucru este că am încercat să folosesc abordarea neoptimizată, rețeaua SVP este construită ca mai jos:

$\begin{bmatrix}n&&&&&\&n&&&&\&&\ddots&&&\&&&n&&\A_1&A_2&\dots&A_t&K/n&\ B_1&B_2&\dots&B_t&&K\end{bmatrix}$

Dar putem vedea clar că K/n va fi un număr fracționar care nu poate folosi metoda BKZ() sau LLL() în sagemath. Ceea ce înțeleg este că putem înmulți fiecare lucru din această matrice cu n, astfel încât totul din această matrice este întreg. După aplicarea BKZ() împărțim totul la n pentru a recupera rezultatul inițial: cheia privată ar trebui să fie în ultima coloană a primului rând. Cu toate acestea, nu am reușit să recuperez cheia privată. Chiar dacă am folosit 100 de semnături cu scurgeri de 8 biți. Este corectă abordarea mea?

Mulțumesc anticipat pentru ajutor!

fgrieu avatar
drapel ng
Când scrii „de ce trebuie să fie negativ?”, te întrebi ce
drapel cn
Ar putea fi faptul că răsturnarea semnelor lui A și B face ca atacul să eșueze, deoarece optimizarea de centrare presupune semnele negative și face atacul mai rău pentru alegerea semnelor? Apropo, un tutorial bun pentru a învăța atacurile lattice îl găsiți [aici](https://ia.cr/2020/1506).
drapel in
jin
@j.p. Este posibil dar la prima vedere nu am văzut nicio diferență. Voi încerca să fac singur calculul și să actualizez întrebarea.
drapel cn
@jin: Vă rog să vă publicați actualizarea ca răspuns și să o acceptați, astfel încât întrebarea dvs. să fie marcată ca „rezolvată” de către sistem? Mulțumesc anticipat!
Maarten Bodewes avatar
drapel in
Aștept cu nerăbdare răspunsul tău, jin!
Puncte:2
drapel in
jin
  1. Răspunsul scurt este: Nu este nimic în neregulă cu ideea. Principalul motiv pentru care nu am atacat cu succes după schimbarea semnului este că a existat o optimizare în hârtia TPM-FAIL. Elimină prima semnătură printr-o anumită transformare. Acest lucru ar putea reduce dimensiunea rețelei cu 1, ceea ce crește ușor viteza de calcul. Rezultatul transformării este că pentru $B_i$ sunt doi termeni în loc de unul. Am schimbat semnul doar pentru un termen, prin urmare atacul nu a reușit.

    Apropo, vreau să subliniez în continuare că în unele lucrări această ecuație este convertită în CVP (cea mai apropiată problemă vectorială), care are forma $|\alpha \mathbf{t}-\mathbf{u}|_q < K$. Prin urmare, în acest caz $A_i=\mathbf{t}=s_i^{-1}r_i$ și $B_i=\mathbf{u}=-s_i^{-1}H(m)$

    În al doilea rând, a existat îngrijorarea că semnul ar putea afecta recentrizarea. De fapt, nu am reușit să văd cum a fost aplicat în metoda TPM-FAIL. În cele din urmă, am folosit o construcție diferită de zăbrele, așa că mi-am oprit cercetarea acolo.

  2. Grila finală pe care am ales-o este puțin diferită de aceasta. Se bazează pe această ecuație:

    $ |ds_i^{-1}r_i - (-s_i^{-1}H(m))|_n = k_i < n/2^l$

    Putem construi zăbrele după ce scăpăm de operația de modificare:

    $ d|s_i^{-1}r_i|_n - |(-s_i^{-1}H(m))|_n + C_i n=k_i < n/2^l$

    Pentru ca atacul lattice să funcționeze, avem nevoie doar $|k|$ a fi mic si ca $k$ este întotdeauna pozitiv că putem aplica recentrizarea:

    $ d|s_i^{-1}r_i|_n - |(-s_i^{-1}H(m))|_n + C_i n - n/2^{l+1} =k_i - n/2^{ l+1}$ Unde $ -n/2^{l+1} < k_i - n/2^{l+1} < n/2^{l+1}$

    Pentru a ne asigura că fiecare element din rețea este întreg, astfel încât să putem aplica LLL sau BKZ, lucrurile obișnuite pe care le-am face este să înmulțim ambele părți cu $2^{l+1}$

    $ d[2^{l+1}\times |s_i^{-1}r_i|_n] - [2^{l+1}\times |(-s_i^{-1}H(m))|_n + n] + C_i\times 2^{l+1}n =k_i - n/2^{l+1}$

    Prima paranteză pătrată va fi $A_i$ iar al doilea va fi $B_i$. Rețineți că termenul de centrare este îmbinat în $B_i$ deci are loc o schimbare de semn.

    Sunt mai multe lucruri care trebuie subliniate:

    • Trebuie să avem grijă de acea multiplicare a $2^{l+1}$ și $|s_i^{-1}r_i|_n$ este o multiplicare normală, nu modulară. În sagemath dacă scrii

      a = Mod(s_inv * r, n)  
      c = a * b
      

      A doua linie va deveni și multiplicare modulară. Pentru a face totul normal trebuie să scriem

      a = Mod(s_inv * r, n)  
      c = a.lift() * b
      
    • Răspunsul corect nu apare neapărat pe primul rând. În funcție de număr și algoritm, răspunsul poate apărea pe al doilea rând sau pe ultimul rând. Prin urmare, cel mai bun mod este să verificați coloana corespunzătoare din fiecare rând pentru a vedea dacă există un răspuns corect.

    • Ca rezultat al recentrării, este posibil ca rezultatul să nu fie pozitiv. Uneori ar putea fi $n-d \pmod n$. Deci, pentru fiecare rând, trebuie să le verificăm pe ambele Mod(răspuns, n) și n- Mod (răspuns, n)

      pentru rândul din interval(latice.nrows()):
          # numărul coloanei depinde de modul în care construiți zăbrele, într-un SVP normal cu tehnica de încorporare kanaan, coloana corespunzătoare este ultima
          soluție = Mod(zăbrele[rând, -2], modulo).lift() 
          dacă check_answer(soluție):
              soluție de returnare
          if check_answer(modulo - solution):
              returna modulo - soluție
      

    Dacă toate acestea sunt gestionate corect, ar trebui să aveți un atac de succes.

Puncte:0
drapel ng

Despre prima propoziție interogativă a întrebării:

de ce trebuie sa fie negativ?

citit literal și cu „ea” relativ la cantități $A_i$ și $B_i$.

Al doilea set de ecuații este într-adevăr (sau poate fi schimbat în) $k_i+{A_i}\,d+B_i\equiv0\pmod n$ Unde $A_i=-s_i^{-1}\,r_i\bmod n$ și $B_i=-s_i^{-1}\,H(m)\bmod n$. The $\bmod n$ sunt implicate. Prin urmare, în aceasta $A_i$ și $B_i$ sunt nenegative.

Asta prin definiția $\bmod$ operator:

  • $x\bmod n$ este $z$ in raza de actiune $[0,n)$ cu $x\equiv z\pmod n$.
  • $x^{-1}\bmod n$ este $z$ in raza de actiune $[0,n)$ cu $x\,z\equiv1\pmod n$
  • $-x^{-1}\,y\bmod n$ este $z$ in raza de actiune $[0,n)$ cu $x\,z\equiv-y\pmod n$

Amintește-ți asta $x\equiv z\pmod n$ este definită în sensul că $x-z$ este un multiplu al $n$.


Putem rescrie prima ecuație ca $s_i^{-1}\,r_i+s_i^{-1}\,H(m)\equiv k_i\pmod n$. Conceptul de atac lattice ar trebui să fie valabil: dacă vectorul lattice este mic, algoritmul de reducere a bazei ar trebui să genereze răspunsul. Ce am greșit?

Presupun vag că problema este că codul de reducere a rețelei folosit vrea o intrare sub formă de matrice. Putem potrivi acest lucru prin rescrierea ecuației ca $s_i^{-1}\,r_i+s_i^{-1}\,H(m)+k'_i\equiv 0\pmod n$ cu $k'_i=n-k_i$. Dar amintiți-vă că atacul se învârte în jurul fezabilității selectării, printr-un atac de timp, a $i$ astfel încât $k_i$ este mic. Aceeași metodă de selecție nu va da puțin $k'_i$; și nu sunt sigur că o metodă potrivită este nici măcar posibilă.

drapel in
jin
Multumesc pentru raspuns. Cred că am înțeles greșit legea modului de funcționare? Nu putem transforma primul set de ecuații direct în al treilea set de ecuații ca o ecuație normală. Asta e greșeala pe care am făcut-o?
fgrieu avatar
drapel ng
@jin: când întrebi „de ce trebuie să fie negativ?” întrebați de ce $A_i$ și $B_i$ trebuie să fie negative, ceea ce încearcă să abordeze răspunsul meu; sau de ce semnul minus?
drapel in
jin
Cred că nu am clarificat această întrebare. Îmi pare foarte rău pentru asta. Întrebarea mea reală este că prima ecuație ar putea fi transformată și în a treia ecuație, pe care nu trebuie să o înmulțim -1 în rețeaua de construcție. Ar trebui să-mi modific întrebarea

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.