← Natrag

Kriptografija

Klasična kriptografija

Lista hashova i njigovih algoritama

Simetrična i asimetrična

Kategorija 1: Zadatci koji zapravo nemaju veze sa kriptografijom

Korisni alati:

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:

Korisni alati:

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.

E(E(m,k1),k2)=cypher E\left(E(m, k_1), k_2\right) = cypher

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 m16m_{16}[prvih poznatih 16 bajta poruke]:

k1k_1 E(m16,k1)E(m_{16}, k_1)
00 \dots 0 ashdsl
00 \dots 1 ogisaf
\vdots asčisa
k1k_1' x
\vdots asčisa
11 \dots 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)

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

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:

Kategorija 5: Traži se poznavanje pojmova i implementacija

Pristupi:

Korisni alati:

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

Aritmetika u ZN\Z_N

9 + 8 = 5 u Z12\Z_{12}

5 ⋅ 7 = 11 u Z12\Z_{12}

7 − 9 = 10 u Z12\Z_{12}

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.

Propozicija

Neka su xx i yy cijeli brojevi i neka je kk njihov najveći zajednički djelitelj, k=nzd(x,y)k = nzd(x, y). Postoje cijeli brojevi aa i bb tako da vrijedi ax+by=kax + by = k. Brojevi aa, bb i kk se mogu efikasno odrediti proširenim Euklidovim algoritmom.

Eulerova funkcija

Eulerova funkcija π(N)=ZN\pi(N) = |\Z\cdot N | je broj prirodnih brojeva manjih od NN i relativno prostih s NN.

na primjer: ϕ(15)=8\phi(15) = 8

Eulerov teorem

Za svaki prirodni broj NN i za svaki aZNa \in Z^*_N vrijedi aϕ(N)=1a^{\phi(N)} = 1 u ZN\Z_N .

Fermatov teorem

Za svaki prosti broj pp i za svaki aZpa \in Z^*_p vrijedi ap1=1a^{p-1} = 1 u Zp\Z_p .

RSA - generiranje kljuceva

Algoritam G:

  1. Odaberem velike slučajne proste brojeve pp i qq
  2. Izračunam N=pqN = p \cdot q
  3. Izračunam ϕ(N)=(p1)(q1)\phi(N) = (p − 1)(q − 1)
  4. Odaberem proizvoljni eZϕNe \in \Z^*_{\phi N} (u praksi 𝑒 = 65537)
  5. Izračunam d=e1uZϕNd = e −1 u \Z^*_{\phi N}
  6. Javni ključ: pk=e,Npk = e, N
  7. Privatni ključ: sk=(d,N)sk = (d, N)
Napomena

Ako je moguće NN efikasno rastaviti na faktore onda je RSA nesiguran.

Ako je moguće efikasno izračunati ϕ(N)\phi(N) onda je RSA nesiguran

Običan RSA - enkripcija i dekripcija

Algoritam E:

Algoritam D:

Note

(me)d=med=m1+ke(N)=m(me(N))k=eulerov teoremm(m^e)^d = m^{ed} =m^{1+ke(N)} = m(m^{e(N)})^k \stackrel{\text{eulerov teorem}}{=} m

Običan RSA nije siguran sustav kriptiranja javnim ključem

Primjer 1

Kriptiramo glasove na izborima

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
00 0e0^e
11 1e1^e
22 2e2^e
\vdots \vdots
255255 255e255^e

Primjer 3

Nepoznati ključ k (64 bit), enkriptiran je sa RSA

c=kemodNc = k^e \mod N
k=k1k2k = k_1\cdot k_2

c=(k1k2)ec=k1ek2ec(k1e)1=k2e \begin{align*} c &= (k_1k_2)^e \\ c &= k_1^ek_2^e \\ c(k_1^e)^{-1} &= k_2^e \end{align*}

Koristimo meet in the middle metodu:

k1k_1 c(k1e)1c\cdot(k_1^e)^{-1}
00 \vdots
\vdots \vdots
2322^{32} \vdots
for k2 ... (za svaki 32 bitni k2)
  x = k2^e
  pronađi x u tablici

Primjer 4

Šifriramo 128-bitni AES ključ kk

Ponekad će se slučajno dogoditi da je k=k1k2k = k_1 \cdot k_2 gdje su k1k_1 i k2k_2 32-bitni brojevi

c=ke=k1ek2e       u   ZNcke1=k2e       u   ZN \begin{align*} c &= k^e = k_1^e \cdot k_2^e \;\;\;\text{ u }\; \Z_N \\ c\cdot k^{e-1} &= k_2^e \;\;\;\text{ u }\; \Z_N \\ \end{align*}

Kategorija 7: Razni napadi na RSA

Tipičan zadatak: zadan je i skriveni tekst i ključ i postupak šifriranja baziran na RSA algoritmu.

Pristupi:

Korisna literatura:

Korisni alati: