Prezentarea PowerPoint pentru acest laborator poate fi găsită aici.
Pentru acest laborator, vom avea nevoie de scheletul de cod care se găsește aici: lab2_sketch.zip. Puteți lucra acest laborator folosind și platforma Google Colab, accesând acest link.
Conținutul arhivei:
Va trebui să completați cu soluțiile voastre acolo unde apare TODO, în fișierele ex1.py, ex2.py, și ex3.py.
Alice îi trimite lui Bob următoarele ciphertexte:
LDPWKHORUGBRXUJRG XNTRGZKKGZUDMNNSGDQFNCRADENQDLD DTZXMFQQSTYRFPJDTZWXJQKFSDLWFAJSNRFLJ SIOMBUFFHINNUEYNBYHUGYIZNBYFILXSIOLAIXCHPUCH ERZRZOREGURFNOONGUQNLGBXRRCVGUBYL CJIJPMTJPMAVOCZMVIYTJPMHJOCZM DTZXMFQQSTYRZWIJW ZPVTIBMMOPUDPNNJUBEVMUFSZ FVBZOHSSUVAZALHS KAGETMXXZAFSUHQRMXEQFQEFUYAZKMSMUZEFKAGDZQUSTNAGD MCIGVOZZBCHRSGWFSOBMHVWBUHVOHPSZCBUGHCMCIFBSWUVPCIF
Charlie reușește să intercepteze ciphertextele și își dă seama că cifrul folosit pentru criptare este Shift Cipher (fiecare mesaj posibil criptat cu o cheie diferită). Puteți decripta mesajele?
Charlie știe de asemenea ca plaintextul este în limba engleză și constă în litere ale alfabetului englez (A-Z), numai majusculă și fără semne de punctuație.
Se pare că al cincilea string este diferit. Puteți să găsiți o modalitate de a-l decripta?
Alice îi trimite lui Bob un alt ciphertext, dar mai lung de această dată…
Charlie trebuie de asemenea să decripteze acest mesaj. Unii colegi i-au spus că este criptat folosind cifrul substituției (engl. substitution cipher), și din nou textele în clar constau doar în litere ale alfabetului englez de la A la Z (toate majusculă, fără punctuație). Încercați să-l ajutați pe Charlie să decripteze acest mesaj.
Hint: Folosiți mecanismul analizei bazate pe frecvența literelor, care a fost discutată la curs. Vedeți că frecvența fiecărei litere nu se mapează precis. Cu alte cuvinte, cele mai frecvente două litere se potrivesc cu tabelul dat la curs, dar altele sunt amestecate. Cu toate acestea, Charlie știe că cele mai frecvente bi-grame sunt următoarele (de la cel mai frecvent la cel mai puțin frecvent):
TH, HE, IN, OR, HA, ET, AN, EA, IS, OU, HI, ER, ST, RE, ND
Folosind această informație, puteți spune despre ce este vorba în textul cifrat?
Charlie reușește să intercepteze o ultimă comunicație care se pare a fi cea mai importantă, deci este decisiv ca el să o decripteze. Cu toate acestea, de data aceasta Alice a folosit cifrul Vigenere, cu o cheie despre care Charlie știe ca are 7 caractere.
Ciphertextul este în fișierul atașat. Încercați metoda multiplicării probabilitătilor așa cum a fost explicat la curs și vedeți dacă puteți decripta ciphertextul. Puteți găsi mai multe detalii despre această metodă aici.
Acestea sunt frecvențele cunoscute ale textului în clar:
{'A': 0.07048643054277828, 'C': 0.01577161913523459, 'B': 0.012074517019319227, 'E': 0.13185372585096597, 'D': 0.043393514259429625, 'G': 0.01952621895124195, 'F': 0.023867295308187673, 'I': 0.06153403863845446, 'H': 0.08655128794848206, 'K': 0.007566697332106716, 'J': 0.0017594296228150873, 'M': 0.029657313707451703, 'L': 0.04609015639374425, 'O': 0.07679967801287949, 'N': 0.060217341306347746, 'Q': 0.0006382244710211592, 'P': 0.014357175712971482, 'S': 0.05892939282428703, 'R': 0.05765294388224471, 'U': 0.02749540018399264, 'T': 0.09984475620975161, 'W': 0.01892824287028519, 'V': 0.011148804047838086, 'Y': 0.023045078196872126, 'X': 0.0005289788408463661, 'Z': 0.00028173873045078196}
La curs am spus că One Time Pad este maleabil (i.e. putem schimba cu ușurință criptarea unui text în clar prin simpla schimbare a ciphertextului). De asemenea, am discutat cum CRC este o idee proastă de design pentru protocolul WEP, din cauza proprietății de linearitate.
Vi se dă următorul ciphertext, în hexazecimal:
021e0e061d1694c9
care corespunde concatenării mesajelor “floare” și CRC-16 asociat mesajului (în hexa este “8E31”) obținut folosind acest website: http://www.lammertbies.nl/comm/info/crc-calculation.html
Dacă trebuie să modificăm ciphertextul astfel încât o decriptare corectă să ducă la “albina” în loc de “floare”, iar calcularea CRC-16 să rămână corectă, care este modificarea pe care trebuie să o realizăm?
Afișați noul ciphertext după modificările necesare, și arătați că în mod corect duce la plaintextul “albina” și un CRC-16 calculat corect.
Poate găsiți acest început de script util:
from utils import * def main(): # Plaintexts s1 = 'floare' s2 = 'albina' G = '' # To find # Obtain crc of s1 # See this site: # http://www.lammertbies.nl/comm/info/crc-calculation.html x1 = str_2_hex(s1) x2 = str_2_hex(s2) print("x1: " + x1) crc1 = '8E31' # CRC-16 of x1 # Compute delta (xor) of x1 and x2: xd = hexxor(x1, x2) print("xd: " + xd) if __name__ == "__main__": main()
Dacă d = 'floare' XOR 'albina', iar C = [C1 | C2] = [m XOR G1 | CRC(m) XOR G2], atunci C1' = C1 XOR d.