rsa
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rsa [2023/09/25 08:53] – osnovni tekst katarina | rsa [2023/11/27 09:22] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====RSA==== | ====RSA==== | ||
- | **RSA** je kriptografski sustav javnog-ključa koji pruža enkripciju podataka i sigurnost komunikacije. Kao i kod ostalih sustava javnog ključa, enkripcijski ključ | + | **RSA** je kriptografski sustav javnog ključa koji pruža enkripciju podataka i sigurnost komunikacije. Kao i kod ostalih sustava javnog ključa, enkripcijski |
- | Sigurnost RSA sustava se temelji na činjenici da je teško pronaći faktore produkta dvaju velikih prostih brojeva. Ne postoji objavljena metoda koja takav problem pouzdano rješava za dovoljno velik ključ. Napadi na RSA mogući su kod matematičkih (npr. kratak ključ) i implementacijskih (npr. pogreška u računanju) | + | Sigurnost RSA sustava se temelji na činjenici da je teško pronaći faktore produkta dvaju velikih prostih brojeva. Ne postoji objavljena metoda koja takav problem pouzdano rješava za dovoljno velik ključ. Napadi na RSA mogući su kod matematičkih |
RSA algoritam se odvija u 4 koraka: generiranje ključa, distribucija ključa, enkripcija i dekripcija. | RSA algoritam se odvija u 4 koraka: generiranje ključa, distribucija ključa, enkripcija i dekripcija. | ||
Line 20: | Line 20: | ||
c< | c< | ||
- | Glavni problem RSA sustava je resursna i vremenska zahtjevnost generiranja većih ključeva, što je zašto | + | Glavni problem RSA sustava je resursna i vremenska zahtjevnost generiranja većih ključeva. Zato se u praksi |
+ | |||
+ | ===PRIMJER: Zadatak s Hacknite platforme – Mod n je potreban? | ||
+ | < | ||
+ | Nepoznatom kriptografskom tehnikom je šifrirana vrlo bitna poruka. Doduše... kako pročitati poruku ako je | ||
+ | u heksadecimalnom obliku? Flag je u formatu CTF2022[brojevi] | ||
+ | |||
+ | n = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | ||
+ | 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | ||
+ | 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | ||
+ | 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | ||
+ | 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | ||
+ | 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | ||
+ | 000000000000000000000000000000000000000000000000000000000000000000000032620000000000000000000000000000000 | ||
+ | 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | ||
+ | 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | ||
+ | 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | ||
+ | 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | ||
+ | 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | ||
+ | 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 | ||
+ | 00000000000000000000000000000002536257 | ||
+ | e = 5 | ||
+ | c = 92260048134780451430743670477111543438924684573046367556601992909235481070476207627157450280593865611 | ||
+ | 012706620334747312329287157051261420568964568896236178920279295535597399319671817735848009861634962584298 | ||
+ | 31826686059321141234157025789273804698859757 | ||
+ | </ | ||
+ | |||
+ | U ovom zadatku, zadani su nam parametri n, c i e. Trebamo dekripcijom doći do m. Da bismo to obavili na najlakši mogući način, promotrimo prvo matematiku funkcije dekripcije RSA algoritma. | ||
+ | |||
+ | |||
+ | c< | ||
+ | c< | ||
+ | c = m< | ||
+ | m = < | ||
+ | |||
+ | Sada kada znamo matematički najlakši način dekripcije poruke, možemo napisati jednostavnu skriptu koja će nam dati rješenje. Skripta računa broj m (// | ||
+ | |||
+ | <code python> | ||
+ | import gmpy2 | ||
+ | |||
+ | c = 92260048134780451430743670477111543438924684573046367556601992909235481070476207627157450280593865611 | ||
+ | 012706620334747312329287157051261420568964568896236178920279295535597399319671817735848009861634962584298 | ||
+ | 31826686059321141234157025789273804698859757 | ||
+ | e = 5 | ||
+ | |||
+ | plaintext = gmpy2.iroot(c, | ||
+ | print(plaintext) | ||
+ | hex_string = hex(int(plaintext[0])) | ||
+ | print(bytes.fromhex(hex_string[2: | ||
+ | </ | ||
+ | |||
+ | Dobivamo rješenje CTF2022[487200747574] | ||
+ | |||
+ | ===PRIMJER: Zadatak s Hacknite platforme – RSA2=== | ||
+ | < | ||
+ | Nakon prvog RSA zadatka, Marko je otprilike shvatio funkcioniranje algoritma. Međutim, sada je naišao na | ||
+ | novi problem: poznatih brojeva je još manje nego u prošlom zadatku, a ne zna ni kako faktorizirati velike | ||
+ | brojeve. Doduše, | ||
+ | Također, s obzirom na to da broj e nije poznat, pitao je prijatelja za pomoć, a on mu je rekao da je e | ||
+ | onaj koji se najčešće koristi, što god to značilo. Flag je u formatu CTF2021[brojevi] | ||
+ | |||
+ | Zadano: | ||
+ | n = 1306669742744796749498943411816234417330843064608069219396331 | ||
+ | c = 134574356578714976505253204571948000299853829171428860751796 | ||
+ | |||
+ | </ | ||
+ | |||
+ | Da bismo dobili rješenje, moramo prvo naći još korisnih brojeva. Najčešći e je 65537 pa ćemo se njime koristiti. Zadani n rastavit ćemo na njegove komponente, tj. na 2 prosta broja p i q. Ovo nije trivijalan zadatak pa ćemo se koristiti gotovim alatima dostupnim na internetu kao što su https:// | ||
+ | |||
+ | Nakon što smo dobili e, p i q, možemo doći i do m:\\ | ||
+ | 𝜑 = (p - 1)(q - 1)\\ | ||
+ | d = e-1 mod(𝜑)\\ | ||
+ | c< | ||
+ | |||
+ | Programski, to rješenje možemo zapisati kao: | ||
+ | <code python> | ||
+ | n = 1306669742744796749498943411816234417330843064608069219396331 | ||
+ | q = 2381330959053608086744420842569 | ||
+ | e = 65537 | ||
+ | c = 134574356578714976505253204571948000299853829171428860751796 | ||
+ | p = 548714044881898853851432478099 | ||
+ | |||
+ | phi = (p - 1) * (q - 1) | ||
+ | d = pow(e, -1, phi) | ||
+ | m = pow(c, d, n) | ||
+ | print(hex(m)) | ||
+ | </ | ||
+ | |||
+ | Dobivamo zastavicu, rješenje je CTF2021[487200747574] | ||
+ | |||
+ | |||
+ | ===Izvori=== | ||
+ | [1] Christof Paar, Jan Pelzl, Understanding Cryptography, | ||
+ | [2] https:// | ||
+ | [3] Kriptografija i kriptoanaliza, | ||
+ | [4] Budin, L.; Golub, M; Jakobović, D., Jelenković, | ||
+ | [5] Dan Boneh, Twenty years of attacks on the RSA cryptosystem\\ | ||
rsa.1695632014.txt.gz · Last modified: 2025/06/03 10:22 (external edit)