Lăsa $d=x_2-x_1$, și lăsați cheile publice să fie pe punctul de bază binecunoscut $G$. Prin urmare, perechile de chei vor fi $(x_1, X_1=x_1G)$ și $(x_2, X_2=x_2G)$.
Valoarea $d$ poate fi forțat brut folosind Pas-Mare-Pas-Mic metoda, care va dura mai puțin de o secundă pe un procesor modern când $n=20$.
Dacă utilizați o semnătură Schnorr pentru a semna un mesaj $m$ folosind $X_1$, ați crea perechea de semnături $(c, r_1)$ prin alegerea unui nonce uniform aleatoriu $k$, și apoi calculând $c=H(kG\mathbin\| m)$ și $r_1=k-cx_1$.
Semnătura se verifică prin verificare $c\overset{?}{=}H(r_1G+cX_1 \mathbin\| m)$.
Atacatorul, care a fost forțat $d$, poate crea apoi o semnătură pe același mesaj, dar care pare să fie semnată de cealaltă cheie privată $x_2$, după cum urmează:
Valorile lui $k$ și $c$ ar rămâne la fel. Apoi calculează $r_2=r_1-cd$. Semnătura falsificată este perechea $(c, r_2)$.
Semnătura va fi verificată prin verificarea acesteia $c\overset{?}{=}H(r_2G+cX_2 \mathbin\| m)$.
Acest lucru va verifica cu succes dacă $kG==r_2G+cX_2$, ceea ce va fi adevărat dacă $k==r_2+cx_2$.
Prin substituire $r_2==r_1-cd$ și $x_2==d+x_1$, putem vedea că acest lucru va fi adevărat datorită alegerii noastre $r_2$.
Acest atac funcționează numai dacă hash-ul sau mesajul nu leagă semnătura de o anumită cheie publică. Dacă protocolul impunea asta $c$ a fost în schimb calculată ca $c=H(kG\mathbin\| X_1\mathbin\| m)$, atacul nu ar funcționa deoarece valoarea de $c$ nu a putut fi reutilizată între semnături (deoarece verificatorul ar verifica semnătura prin concatenare $X_2$ în interiorul hashului în loc de $X_1$).