Din câte am înțeles, semnătura unică Winternitz este făcută de:
- Realizarea unei serii de chei private.
- Realizarea unei matrice de chei publice prin hashing fiecare cheie privată de X ori, X fiind numărul de posibilități diferite de caractere care pot apărea în fiecare poziție a mesajului (sau hash-ul mesajului) de verificat.
- Crearea unei matrice de hashuri ca semnătură prin hashing fiecare cheie privată X minus „numărul ordinal al caracterului” ori.
- Verificarea semnăturii numărând câte ori fiecare dintre codurile hash de semnătură trebuie să fie hashing pentru a ajunge la cheia publică și interpretarea numărului ca număr ordinal al caracterului. Cu aceste numere, putem forma mesajul (sau hash-ul mesajului), care ar demonstra apoi că mesajul a fost valid.
Prin urmare, de exemplu, dacă semnăm prin cifre HEX, X ar fi 15, deoarece caracterele ar merge de la 0 (primul caracter, reprezentând 0 iterații) la F (al 16-lea caracter, reprezentând 15 iterații). Deci, ori de câte ori avem nevoie de hash semnătura pentru a ajunge la cheia publică, aceasta va reprezenta o anumită valoare, de la 0 ori la 15 ori (oferind efectiv 16 posibilități). Și dacă nu ajunge niciodată la el, atunci este invalid.
Acestea fiind spuse, am citit că slăbiciunea constă în faptul că semnătura poate fi modificată, deoarece, de exemplu, dacă un caracter semnat este A, atunci există suficiente informații pentru a șterge și B, C, D, E și F. Atunci , potrivit multora, inclusiv acest site web, soluția este să faceți o sumă de control.
Și aici am rămas blocat. Nici nu înțeleg cum să implementez suma de control. Am găsit câteva explicații, dar toate sunt prea tehnice sau prea vagi și nu îmi spun exact, în cuvinte simple, cum să fac acea sumă de control.
Vă rog să-mi explicați cum să fac suma de control într-un limbaj simplu pe care oricine îl poate înțelege.
Și, dacă este posibil, comentați cum acea sumă de control nu a putut fi, de asemenea, afectată. Mulțumesc.