dsa
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| dsa [2025/01/22 13:36] – lss | dsa [2025/12/01 11:40] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 3: | Line 3: | ||
| < | < | ||
| Tomislav je napisao aplikaciju za verifikaciju digitalnih potpisa. | Tomislav je napisao aplikaciju za verifikaciju digitalnih potpisa. | ||
| - | |||
| Želi da pregledaš izvorni kod i testiraš je li nekako moguće zaobići verifikaciju. | Ž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 | + | 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: | |
| - | naredbom nc chal.platforma.hacknite.hr 13011 ako koristite Linux odnosno | + | telnet chal.platforma.hacknite.hr 13011 ako koristite Windows |
| </ | </ | ||
| Line 16: | Line 15: | ||
| Kao unos se traži poruka te parametri " | Kao unos se traži poruka te parametri " | ||
| - | Ranjivost programa nalazi se u provjerama nad parametrima " | ||
| Kod za verifikaciju je sljedeći: | Kod za verifikaciju je sljedeći: | ||
| Line 43: | Line 41: | ||
| </ | </ | ||
| - | Po DSA specifikaciji " | + | Po DSA specifikaciji |
| - | Vidimo da implement | + | Vidimo da je implementacija u zadatku malo drukčija, ne provjerava se jesu li " |
| + | Također, vrijedi proučiti kako je implementirana funkcija modinverz. | ||
| - | def euklidov_prosireni(a, | + | <code python> |
| - | | + | |
| - | return (b, 0, 1) | + | |
| - | | + | def euklidov_prosireni(a, |
| - | g, y, x = euklidov_prosireni(b % a, a) | + | if a == 0: |
| - | return (g, x - (b // a) * y, y) | + | return (b, 0, 1) |
| + | else: | ||
| + | g, y, x = euklidov_prosireni(b % a, a) | ||
| + | return (g, x - (b // a) * y, y) | ||
| + | |||
| + | def modinverz(a, | ||
| + | g, x, y = euklidov_prosireni(a, | ||
| + | return x % m | ||
| + | </ | ||
| - | 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.1737552996.txt.gz · Last modified: 2025/12/01 11:40 (external edit)