Заштита података/К1П 2024 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (→‎2. zadatak [5]: popravljena resenja :))
 
(Није приказано 11 међуизмена другог корисника)
Ред 6: Ред 6:


== 1. zadatak [5] ==
== 1. zadatak [5] ==
Ana je Branku poslala poruku šifrovanu ''Vigenere''-ovim algoritmom sa autokey poboljšanjem. Ključ za ''Vigener''-ov algoritam je poslala šifrovan pomoću Cezarove šifre. Šifrovan ključ je dat dole kao ''enc_key'', a šifrovana poruka kao ''ciphertext''.
Ana je Branku poslala poruku šifrovanu ''Vigenere''-ovim algoritmom sa autokey poboljšanjem. Ključ za ''Vigener''-ov algoritam je poslala šifrovan pomoću ''Cezarove'' šifre. Šifrovan ključ je dat dole kao ''enc_key'', a šifrovana poruka kao ''ciphertext''.


I ''Vigenere-ov'' i ''Cezarov'' algoritam rade sa karakterima iz ASCII tabele sa vrednostima od 32 do 126, uključujući (tzv ''Printable ASCII'')
I ''Vigenere-ov'' i ''Cezarov'' algoritam rade u rasponu ASCII kodova od 32 do 126, uključujući oba (tzv. ''Printable ASCII'')


1.Pronaći ključ za ''Vigenerov'' algoritam ukoliko nije poznat pomeraj kod ''Cezarovog'' algoritma
1.Pronaći ključ za ''Vigenerov'' algoritam ukoliko nije poznat pomeraj kod ''Cezarovog'' algoritma.
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
enc_key = r'P/&t")/strt}$/zt)='
enc_key = r'P/&t")/strt}$/zt)='
Ред 20: Ред 20:
</syntaxhighlight>
</syntaxhighlight>


'''Napomena:''' karakter ''r'' ispred stringa u Pythonu označava ''raw'' string, odnosno da se svaki karakter tumači kao takav, jer bez toga bi skupovi karaktera imali posebno značenje, npr. ''\n'' bi se tumačio kao prelazak u novi red itd.  
'''Napomena:''' karakter ''r'' ispred stringa u Pythonu označava ''raw'' string, odnosno da se svaki karakter u stringu tumači takav kakav jeste, jer bez toga bi neki skupovi karaktera imali posebno značenje, npr. ''\n'' bi se tumačio kao prelazak u novi red itd.  


Ključ za ''Vigenere'': <span class="spoiler" data-solution="text">A very decent key.</span>
Ključ za ''Vigenere'': <span class="spoiler" data-solution="text">A very decent key.</span>
Ред 26: Ред 26:
Dešifrovana poruka: <span class="spoiler" data-solution="text">A congruence is defined as following: We say that a is congruent to b modulo n if n∣(a−b) where a and b are both integers</span>
Dešifrovana poruka: <span class="spoiler" data-solution="text">A congruence is defined as following: We say that a is congruent to b modulo n if n∣(a−b) where a and b are both integers</span>


Objašnjenje: <span class="spoiler" data-solution="explanation">Pošto ne znamo ključ za Cezarov algoritam, moramo da probamo svih 126-32+1 mogućih pomeraja i da vidimo koji od njih daje smislen plaintext kad se iskoristi za dešifrovanje Vigenere-a.
Objašnjenje: <div class="spoiler" data-solution="explanation">Pošto ne znamo ključ za Cezarov algoritam, moramo da probamo svih 126-32+1 mogućih pomeraja i da vidimo koji od njih daje smislen plaintext kad se iskoristi za dešifrovanje Vigenere-a.
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
modulus = 126 - 32 + 1
modulus = 126 - 32 + 1
Ред 43: Ред 43:


def decrypt_vigenere(ciphertext, key):
def decrypt_vigenere(ciphertext, key):
    key = list(key)
     plaintext = ""
     plaintext = ""
     for i in range(len(ciphertext)):
     for i in range(len(ciphertext)):
         plaintext += decrypt_caesar(ciphertext[i], c_to_n(key[i]))
         plaintext += decrypt_caesar(ciphertext[i], c_to_n(key[i]))
         key.append(plaintext[i])
         key += plaintext[i]
     return plaintext
     return plaintext


Ред 54: Ред 53:
     print(mykey,": ", decrypt_vigenere(ciphertext, mykey), end="\n\n")
     print(mykey,": ", decrypt_vigenere(ciphertext, mykey), end="\n\n")
</syntaxhighlight>
</syntaxhighlight>
</span>
</div>
 


== 2. zadatak [5]==
== 2. zadatak [5]==
Za originlani tekst 5A8B i ključ 76AE uraditi SAES.
Za originlani tekst 2598, ključ 723D, Rcon(1) = 60, Rcon(2) = A0 uraditi SAES.
[[Датотека:SboxZPK1P2024.jpg|мини|десно]]


# Podatak nakon inicjalne Add Round Key <span class="spoiler" data-solution="text"></span>
# Podatak nakon inicjalne Add Round Key <span class="spoiler" data-solution="text">57A5</span>
# Ključ prve iteracije <span class="spoiler" data-solution="text"></span>
# Ključ prve iteracije <span class="spoiler" data-solution="text">F9C4</span>
# Podatak nakon prve runde <span class="spoiler" data-solution="text"></span>
# Podatak nakon prve runde <span class="spoiler" data-solution="text">ACB1</span>
# Ključ druge iteracije <span class="spoiler" data-solution="text"></span>
# Ključ druge iteracije <span class="spoiler" data-solution="text">8541</span>
# Šifrovani tekst <span class="spoiler" data-solution="text"></span>
# Šifrovani tekst <span class="spoiler" data-solution="text">817D</span>


== 3. zadatak [3]==
Ana je poslala Branku svoju platu koju je šifrovala pomoću RSA algoritma. Ana je šiforvala podatak Brankovim javnim ključem {e,n} = {237997, 234339640697}. Vi ste presreli Aninu poruku i pročitali broj 163860944446. Kolika je Anina plata?


== 3. zadatak [3]==
Ana je poslala Branku svoju platu koju je šifrovanu pomoću RSA algoritma. Ana je šiforvala podatak Brankovim javnim ključem {e,n} = {237997, 234339640697}. Vi ste presreli Aniu poruku i pročitali broj 163860944446. Kolika je Anina plata?
Odgovor <span class="spoiler" data-solution="text">240000</span>
Odgovor <span class="spoiler" data-solution="text">240000</span>
<div class="spoiler" data-solution="explanation">
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
e = 237997
e = 237997
Ред 85: Ред 85:
print(pow(p, find_d(e, n), n))
print(pow(p, find_d(e, n), n))
</syntaxhighlight>
</syntaxhighlight>
</div>


== 4. zadatak [2]==
== 4. zadatak [2]==
Ред 97: Ред 98:


== 5. zadatak [2]==
== 5. zadatak [2]==
Koristeći napad izabranom porukom (''chosen plaintext attack'') moguće je dobiti koji ključ je korišćen za one-time pad. (Podrazumeva se da se ovim dobije plaintext i odgovarajući ciphertext)
Koristeći napad izabranom porukom (''chosen plaintext attack'') moguće je dobiti one-time pad ključ koji je korišćen za šifrovanje te poruke. (Podrazumeva se da se ovim dobije plaintext i odgovarajući ciphertext)
<div class="abc-list" data-solution="single">
<div class="abc-list" data-solution="single">
# <span class="solution">Tačno</span>
# <span class="solution">Tačno</span>

Тренутна верзија на датум 19. септембар 2025. у 23:17

K1P 2024. godine održan je 26. aprila i trajao je 1.5h.

  • За питања са више одговора, тачни одговори су подебљани и уоквирени
  • За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
  • Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:


1. zadatak [5]

Ana je Branku poslala poruku šifrovanu Vigenere-ovim algoritmom sa autokey poboljšanjem. Ključ za Vigener-ov algoritam je poslala šifrovan pomoću Cezarove šifre. Šifrovan ključ je dat dole kao enc_key, a šifrovana poruka kao ciphertext.

I Vigenere-ov i Cezarov algoritam rade u rasponu ASCII kodova od 32 do 126, uključujući oba (tzv. Printable ASCII)

1.Pronaći ključ za Vigenerov algoritam ukoliko nije poznat pomeraj kod Cezarovog algoritma.

enc_key = r'P/&t")/strt}$/zt)='

2.Dešifrovati poruku:

ciphertext = r'b ZUaarZKRITti_e^s(iRUSgTieUSRlYkiSM!iFKdsCm [XNaoYiX[:cGTgfW_nihVd D WcdY\^gauOUtnqwaobv{dmUUrT Kfa]a(D-D{q ZXZ[eiPtGVJrV.'

Napomena: karakter r ispred stringa u Pythonu označava raw string, odnosno da se svaki karakter u stringu tumači takav kakav jeste, jer bez toga bi neki skupovi karaktera imali posebno značenje, npr. \n bi se tumačio kao prelazak u novi red itd.

Ključ za Vigenere: A very decent key.

Dešifrovana poruka: A congruence is defined as following: We say that a is congruent to b modulo n if n∣(a−b) where a and b are both integers

Objašnjenje:

Pošto ne znamo ključ za Cezarov algoritam, moramo da probamo svih 126-32+1 mogućih pomeraja i da vidimo koji od njih daje smislen plaintext kad se iskoristi za dešifrovanje Vigenere-a.
modulus = 126 - 32 + 1

def c_to_n(char):
    return ord(char) - 32

def n_to_c(number):
    return chr(number + 32)

def decrypt_caesar(ciphertext, key):
    plaintext = ""
    for i in ciphertext:
        plaintext += n_to_c((c_to_n(i) - key) % modulus)
    return plaintext

def decrypt_vigenere(ciphertext, key):
    plaintext = ""
    for i in range(len(ciphertext)):
        plaintext += decrypt_caesar(ciphertext[i], c_to_n(key[i]))
        key += plaintext[i]
    return plaintext

for i in range(modulus):
    mykey = decrypt_caesar(enc_key, i)
    print(mykey,": ", decrypt_vigenere(ciphertext, mykey), end="\n\n")

2. zadatak [5]

Za originlani tekst 2598, ključ 723D, Rcon(1) = 60, Rcon(2) = A0 uraditi SAES.

SboxZPK1P2024.jpg
  1. Podatak nakon inicjalne Add Round Key 57A5
  2. Ključ prve iteracije F9C4
  3. Podatak nakon prve runde ACB1
  4. Ključ druge iteracije 8541
  5. Šifrovani tekst 817D

3. zadatak [3]

Ana je poslala Branku svoju platu koju je šifrovala pomoću RSA algoritma. Ana je šiforvala podatak Brankovim javnim ključem {e,n} = {237997, 234339640697}. Vi ste presreli Aninu poruku i pročitali broj 163860944446. Kolika je Anina plata?

Odgovor 240000

e = 237997
n = 234339640697
p = 163860944446
def find_d(e, n):
    p, q = None, None
    for i in range(3, n, 2):
        if n % i == 0:
            p, q = i, n // i
            break
    phi_n = (p - 1)*(q - 1)
    return pow(e, -1, phi_n)

print(pow(p, find_d(e, n), n))

4. zadatak [2]

Na slici je šema komunikacije između Ane i Branka. Podrazumeva se da je prvi nailazak na ključ enkripcija, a drugi dekripcija. Ukoliko je Branko Ani poslao poruku po ovoj šemi šta je postigao?

ZPK1n2024.jpg
  1. Autentikaciju
  2. Tajnost
  3. Tajnost i autentikaciju
  4. Ne znam

5. zadatak [2]

Koristeći napad izabranom porukom (chosen plaintext attack) moguće je dobiti one-time pad ključ koji je korišćen za šifrovanje te poruke. (Podrazumeva se da se ovim dobije plaintext i odgovarajući ciphertext)

  1. Tačno
  2. Netačno

5. zadatak [3]

Koji od sledećih napada na kompjuterske sisteme koriste softverske slabosti sistema?

  1. DNS spoofing
  2. DoS
  3. SQLi
  4. socijalni inžinjering
  5. XSS
  6. ARP spoofing