Kriptografija
Link na zadatke
Klasična kriptografija
Lista hashova i njigovih algoritama
Simetrična i asimetrična
- U simetričnoj se koristi isti ključ za zaključavanje i otključavanje
- U antisimetričnoj se koristi matematika tako da se jednim ključen može samo zaključati (javni ključ), a drugim se može otključati (privatni ključ)
Kategorija 1: Zadatci koji zapravo nemaju veze sa kriptografijom
Korisni alati:
- Linux naredba
file - CyberChef
Zadatak 01: Mic Check
Svi zadatci dostupni ovdje
HA! SCH! PF! PF! HA! N! N! Z85! ZeroMQ! Mic check!
x<$N]w{X!SeP0jLeP2iiuT)+9v@3F
Nije zapravo enkriptirano namjerno već se koristi određeni message protokol Koristiti CyberChef za dekriptiranje.
Note
Koristiti from Base 85, odabrati Z85 abecedu i maknuti zero group char
Cezarova šifra
Svako slovo u ulazu mijenja se sa slovom koje je K slova prije njega u abecedi.
Kategorija 2: Brute-force napadi na kriptosustave
Pristup:
- Isprobaj sve moguće ključeve
Korisni alati:
- Hashcat
- John the ripper
- Crackstation
- Programski jezik po vlastitom izboru :)
Zadatak 02: Super Encryption
Svi zadatci dostupni ovdje
Dobijemo encript.py i cypher.txt.
Moramo unazad raditi kako bi dobili zastavicu.
Zastavicu m program šifrira ključem k1 i onda opet ključem k2.
U encript.py nam je poznat oblik zastavice tj. znamo da počinje sa TheBlockTechLtd{
U aes ecb načinu rada, šifra ako je dulja od 16 bajta djeli se u blokove od 16 bajta.
Koristimo meet in the middle metodu s [prvih poznatih 16 bajta poruke]:
| 00 0 | ashdsl |
| 00 1 | ogisaf |
asčisa |
|
x |
|
asčisa |
|
| 11 1 | pdsajd |
for k2 ... (svaki mogući k2 [20 bit])
x = D(cypher, k2)
nađi x u drugom stupcu tablice
Kategorija 3: Povijesna kriptografija
Korisni alati:
Vigenèreova šifra
Koristi ključ kako bi zbrojio poruku i ključ da dobije rezultat (ponavlja ključ ako je potrebno)
npr.
k = "DEDA"
m = "NAPADAMO U ZORU"
V(m, k) = "QESAGEPO Y ZRVX"
Dešifriranje: frekvencijska analiza Kaskijevim testom (ili for petljom)
- neke riječi u određenom jeziku često se ponavljaju (npr. riječ “the”)
Simetrične šifre
Jedan ključ s kojim se enkriptira i dekriptira
Jednokratna bilježnica (one-time pad)
Poruka se šifrira sa ključem tako da se odradi xor operacija nad porukom.
OTP(m, k) = c
OTP(c, k) = m
primjer
OTP(0110, 0011) = 0101 // cypher isto kao i 0110 ^ 0011
OTP(0101, 0011) = 0110 // plain text isto kao i 0101 ^ 0011
Nedostatci
- ključ se može koristiti samo jednom jer se inače može dobiti ključ
- ključ mora biti jednako velik kao i poruka
- ne štiti integritet komunikacije (kao niti jedna šifra sama po sebi)
Zadatak 03: Otp Saas
Svi zadatci dostupni ovdje
- koristan python lib
pwntools
Ključ su znakovi engleske abecede i brojevi od 0 do 9
Poruka se dobiva xor-anjem poruke i ključa bajt po bajt.
Greška u programu, isti ključ koristi se dva puta.
c = flag ^ k
m = input() # user inputed message
c1 = m ^ k
c1 ^ m == m ^ k ^ m == k
Kategorija 4: Neispravna upotreba inače rezumnog kriptografskog algoritma
Pristupi:
- Pronađi dio koji nije dobar
- Pronađi napad (Google, čitanje udžbenika, čitanje znanstvenih članaka, čitanje writeup-ova).
- Pronađi ili implementiraj alat koji napada kriptosustav.
Kategorija 5: Traži se poznavanje pojmova i implementacija
Pristupi:
- Pronađi te prilagodi, ili samo upogoni gotovu implementaciju.
Korisni alati:
- Github
Asimetrične šifre (kriptiranje javnim ključem)
Dva ključa pub i priv
Enkripcija se radi sa pub ključem i dekripcija sa priv
Teorija brojeva
- - pridorni broj
- - prosti brojevi
- - prsten u kojemu se zbraja, oduzima i množi modulo
- Pišemo u umjesto
Aritmetika u
9 + 8 = 5 u
5 ⋅ 7 = 11 u
7 − 9 = 10 u
Prosti brojevi i najveći zajednički djelitelj
Prirodni broj je prost ako je veći od 1 i ako je djeljiv samo s brojem 1 i sa samim sobom.
- – najveći zajednički djelitelj
- Ako je onda kažemo da su i relativno prosti.
Propozicija
Neka su i cijeli brojevi i neka je njihov najveći zajednički djelitelj, . Postoje cijeli brojevi i tako da vrijedi . Brojevi , i se mogu efikasno odrediti proširenim Euklidovim algoritmom.
Eulerova funkcija
Eulerova funkcija je broj prirodnih brojeva manjih od i relativno prostih s .
na primjer:
Eulerov teorem
Za svaki prirodni broj i za svaki vrijedi u .
Fermatov teorem
Za svaki prosti broj i za svaki vrijedi u .
RSA - generiranje kljuceva
Algoritam G:
- Odaberem velike slučajne proste brojeve i
- Izračunam
- Izračunam
- Odaberem proizvoljni (u praksi 𝑒 = 65537)
- Izračunam
- Javni ključ:
- Privatni ključ:
Napomena
Ako je moguće efikasno rastaviti na faktore onda je RSA nesiguran.
Ako je moguće efikasno izračunati onda je RSA nesiguran
Običan RSA - enkripcija i dekripcija
- e - javni exponent
- d - privatni exponent
- N - modul
- cyphertext i plaintext su brojevi u
Algoritam E:
Algoritam D:
Note
Običan RSA nije siguran sustav kriptiranja javnim ključem
- Niti od napada poznatim izvornim tekstom.
- Niti od napada odabranim tekstom.
Primjer 1
Kriptiramo glasove na izborima
- sudjeluju dva kandidata označeni s 1 i 2
Primjer 2
Datoteka je enkriptirana tako da je bajt po bajt enkriptiran sa RSA.
Svaki ASCII znak može se izračunati pomoču dobivenog javnog ključa i stavljen u tablicu. Onda koristimo tu tablicu tako da gledamo originalnu poruku i uspoređujemo s podatkom u tablici.
| bajt | cypher |
|---|---|
Primjer 3
Nepoznati ključ k (64 bit), enkriptiran je sa RSA
Koristimo meet in the middle metodu:
for k2 ... (za svaki 32 bitni k2)
x = k2^e
pronađi x u tablici
Primjer 4
Šifriramo 128-bitni AES ključ
- Koristimo 2048-bitni RSA ključ u kojem je
- šaljemo
- Može li napadač odrediti 𝐾 na temelju javnog ključa i 𝑐?
Ponekad će se slučajno dogoditi da je gdje su i 32-bitni brojevi
Kategorija 7: Razni napadi na RSA
Tipičan zadatak: zadan je i skriveni tekst i ključ i postupak šifriranja baziran na RSA algoritmu.
- Primjer: https://github.com/infobip/infobip-ctf-2021/tree/master/crypto/rsa_lol/attachments
- https://gitlab.com/CapTaaha/foobarctf-22/-/tree/main/crypto/new-intern/dist?ref_type=heads
Pristupi:
- Ručno pronađi matematički način da se dođe do privatnog ključa ili poruke.
- Pretraživanjem literatura pronađi točan napad.
Korisna literatura:
Korisni alati: