Schema de semnătură Schnorr originală suferă de un atac de cheie asociat (RKA), așa cum este descris de Morita et al. Autorii acestei lucrări sugerează apoi o modificare a algoritmului de semnătură pentru a preveni o RKA după cum urmează:
- A stabilit $\psi \leftarrow g^x$, Unde $x$ este cheia privată (de semnare) pentru schemă.
- Setează provocarea să fie $h \leftarrow H(M || r || \psi)$.
Al doilea pas de mai sus diferă de schema originală Schnorr (Aici) care necesită doar $h \leftarrow H(r || M)$.
Această modificare are sens, totuși lucrarea lui Morita și colab. spune (la pagina 9):
„Rețineți că al doilea pas al algoritmului de semnare, calculul $\psi \leftarrow g^x$, nu trebuie modificată pentru a utiliza pur și simplu cheia de verificare $y$ la fel de $\psi$."
Autorii nu explică de ce $y$ (cheia publică/de verificare) nu poate fi folosită în locul $\psi$, chiar dacă sunt exact aceeași valoare - există un motiv pentru asta?
Ceea ce face acest lucru și mai confuz este faptul că, odată cu adăugarea Schnorr la Bitcoin în Taproot soft furk, dezvoltatorii Bitcoin Core și-au scris propria implementare pentru semnăturile Schnorr (așa cum este descris în BIP340), inclusiv atenuările pentru RKA. Cu toate acestea, în BIP340, au decis să folosească $y$ în provocarea hash over $\psi$, mergând împotriva recomandării de mai devreme.
Este greșită această implementare?