dsa
Differences
This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| dsa [2025/01/21 16:08] – created lss | dsa [2025/12/01 11:40] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| __PRIMJER__ -**Zadatak s Hacknite platforme - DSA** | __PRIMJER__ -**Zadatak s Hacknite platforme - DSA** | ||
| - | U zadatku | + | < |
| - | Kao unos se traži poruka te parametri " | + | Tomislav |
| - | na " | + | Želi da pregledaš izvorni kod i testiraš je li nekako moguće zaobići verifikaciju. |
| + | Dostupan ti je izvorni kod programa, a na njegov servis se možete spojiti naredbom: | ||
| + | nc chal.platforma.hacknite.hr 13011 ako koristite Linux, ili naredbom: | ||
| + | telnet chal.platforma.hacknite.hr 13011 ako koristite Windows | ||
| + | </ | ||
| - | if verificiraj(r, | ||
| - | if " | ||
| - | | ||
| - | | ||
| + | U zadatku je implementiran DSA (" | ||
| - | Ranjivost programa nalazi | + | Kao unos se traži poruka te parametri |
| + | |||
| + | |||
| + | Kod za verifikaciju je sljedeći: | ||
| + | |||
| + | <code python> | ||
| + | def verificiraj(r, | ||
| Line 18: | Line 25: | ||
| return False | return False | ||
| + | w = modinverz(s, | ||
| + | | ||
| m = int(sha256(M).hexdigest(), | m = int(sha256(M).hexdigest(), | ||
| | | ||
| Line 30: | Line 39: | ||
| - | Po DSA specifikaciji " | + | </ |
| + | |||
| + | Po DSA specifikaciji | ||
| + | Vidimo da je implementacija u zadatku malo drukčija, ne provjerava se jesu li " | ||
| + | |||
| + | Također, vrijedi proučiti kako je implementirana funkcija modinverz. | ||
| + | |||
| + | <code python> | ||
| + | def euklidov_prosireni(a, | ||
| + | if a == 0: | ||
| + | return (b, 0, 1) | ||
| + | else: | ||
| + | g, y, x = euklidov_prosireni(b % a, a) | ||
| + | return (g, x - (b // a) * y, y) | ||
| - | def euklidov_prosireni(a, b): | + | def modinverz(a, m): |
| - | if a == 0: | + | g, x, y = euklidov_prosireni(a, |
| - | return (b, 0, 1) | + | return x % m |
| - | else: | + | </code> |
| - | g, y, x = euklidov_prosireni(b % a, a) | + | |
| - | return | + | |
| - | def modinverz(a, m): | + | Funkcija |
| - | g, x, y = euklidov_prosireni(a, | + | Više o operaciji multiplikativnog modularnog inverza možete pročitati na [[https:// |
| - | return x % m | + | |
| + | Ono što je bitno, jest da će funkcija vratiti 0 ako multiplikativni modularni inverz nije definiran. Funkcija će vratiti nulu za 0 i //q// (koji nisu dozvoljeni), | ||
| - | Funkcija koja određuje | + | To znači da ako vrijednost |
| - | Modularni inverz " | + | |
| - | broj "k" | + | |
| - | Kako bi verifikacija bila uspješna potrebno je zadovoljiti uvjet " | ||
| - | Vrijednost " | ||
| - | vratile 1 pa bi samim time vrijednost v bila 1 (što je unutar dozvoljene domene " | ||
| - | Zbog toga je rješenje da se " | ||
| - | Otprije, zaključili smo da je " | ||
| - | vrijednost veće od " | ||
dsa.1737475694.txt.gz · Last modified: 2025/12/01 11:40 (external edit)