Cifrul Caesar , cunoscut și sub numele de cifrul shift , codul Caesar este una dintre cele mai simple și mai cunoscute metode de criptare.
Un cifru Caesar este un tip de cifr de substituție în care fiecare caracter din textul simplu este înlocuit cu un caracter care este un număr constant de poziții la stânga sau la dreapta acestuia în alfabet . De exemplu, într-un cifr cu o deplasare la dreapta de 3, A ar fi înlocuit cu D, B ar deveni D și așa mai departe.
Cifrul este numit după generalul roman Gaius Julius Caesar , care l-a folosit pentru corespondența secretă cu generalii săi.
Etapa de criptare efectuată de cifrul Caesar este adesea inclusă ca parte a unor scheme mai complexe, cum ar fi cifrul Vigenère , și are încă o aplicație modernă în sistemul ROT13 . Ca toate cifrurile monoalfabetice , cifrul Caesar este ușor de spart și nu are aproape nicio aplicație practică.
Dacă asociem fiecare caracter al alfabetului cu numărul său de serie (numerotarea de la 0), atunci criptarea și decriptarea pot fi exprimate prin formule de aritmetică modulară [1] [2] :
unde este caracterul text simplu, este caracterul text cifrat, este puterea alfabetului și este cheia.
Din punct de vedere matematic, un cifru Caesar este un caz special al unui cifru afin .
Criptare folosind o cheie . Litera „E” „deplasează” cu trei litere înainte și devine litera „Z”. Un semn greu mutat înainte cu trei litere devine „E”, o litera „I” mutată înainte cu trei litere devine „B” și așa mai departe:
Alfabetul inițial: A B C D E F G H I J K L M N O P R S T U V X Z Criptat: D E F G H I J K L M N O P R S T U V X TText original:
Mai mănâncă niște chifle franțuzești moi și bea niște ceai.Textul cifrat se obține prin înlocuirea fiecărei litere a textului original cu litera corespunzătoare din alfabetul cifrat:
Fezyya iz zyi akhlsh pvenlsh chugrschtskfnlsh dtsosn, zhg eyutzm gb.
Codul este scris și executat pentru 2 limbi: rusă și engleză.
# Textul pe care utilizatorul dorește să introducă text = input ( "Introduceți textul pe care doriți să îl criptați: " ) # Utilizatorul introduce cheia k = int ( input ( "Specificați cheia: " )) # Utilizatorul introduce limba pentru textul care urmează să fie criptat limba = intrare ( "În ce limbă este textul introdus (rusă, engleză): " ) # Funcție de criptare cu trei parametri: text, cheie, limbă def ceaser_cipher ( user , key , lang ): # rezultat variabil al criptării; variabilă care definește majuscule și minuscule res , n = [], "" # Verificarea limbii selectate de utilizator # Verificați dacă este selectată limba rusă (cazul literelor introduse de utilizator nu este important) dacă lang . mai mic () în [ "rusă" , "rusă" ]: # "abvgdeezhziyklmnoprstufhtschshshzhyyeyuya"=dicționar_mausă,dicționarDouă variabile sunt atribuite alfabetului rus cu litere mici și majuscule, respectiv elif lang . mai mic () în [ "English" , "english" ]: # Două variabile sunt atribuite litere mici și majuscule engleză, respectiv dicționar , dictionary_upper = "abcdefghijklmnopqrstuvwxyz" , "ABCDEFGHIJKLMNOPQRSTUVWXYZ" altfel : returnează "Această limbă" nu este # Bucla de testare, în care fiecare iterație va procesa un caracter din text secvenţial pentru i în interval ( len ( utilizator )): # Verificați caracterul pentru litere mari sau mici # Este caracterul cu litere mici dacă utilizatorul [ i ] în dicționar : n = dicționar # Este caracterul cu majuscule elif user [ i ] în dicționar_mauscul : n = dicționar_majuscul # Caracterul nu este nici minuscul, nici majuscul (caracterul nu este o scrisoare) else : res . adăugați ( utilizator [ i ]) # Dacă caracterul este în lista n (este o literă), atunci va fi criptat dacă utilizatorul [ i ] în n : # Buclă alfabetică pentru j în interval ( len ( n )): # Dacă numărul de serie al litera + cheia sunt în intervalul de la 0 până la sfârșitul alfabetului # și dacă litera din text se potrivește cu litera din alfabet, atunci: dacă 0 <= j + tasta < len ( n ) și utilizator [ i ] == n [ j ]: # Litera este adăugată la rezultat cu o tastă shift (litera criptată) res . append ( n [ j + tastă ]) # Dacă numărul ordinal al literei + tastei este în afara intervalului alfabetului, depășindu-l # și dacă litera din text se potrivește cu litera din alfabet, atunci: elif j + cheie >= len ( n ) și utilizator [ i ] == n [ j ]: # O literă este adăugată la rezultat cu o tastă shift, # în timp ce se convertește numărul de serie al literei în intervalul alfabetului (litera criptată ) res . append ( n [( 1 - j - cheie ) % ( len ( n ) - 1 )]) # Dacă numărul ordinal al literei + cheia este în afara intervalului alfabetului, nu ajunge la el # și dacă litera din text se potrivește cu litera din alfabet, apoi: elif j + tasta < 0 și user [ i ] == n [ j ]: # Adăugați litera deplasată la tasta rezultat, # în timp ce convertiți numărul de serie al literei la interval alfabetic (litera criptată) res . adăugați ( n [( j + tasta ) % len ( n )]) # Funcția returnează textul criptat '' . alăturați-vă ( res ) # Tipărire text cifrat de ieșire ( ceaser_cipher ( text , k , limba ))Cifrul Caesar este numit după Iulius Caesar, care, conform vieții celor doisprezece Cezari din Suetonius , l-a folosit cu tura 3 pentru a proteja mesajele militare. Deși Cezar a fost prima persoană înregistrată care a folosit această schemă, se știe că au mai fost folosite alte cifruri de substituție.
Dacă avea ceva confidențial de transmis, atunci l-a notat în cifr, adică a schimbat ordinea literelor alfabetului, astfel încât să fie imposibil să deslușești un singur cuvânt. Dacă cineva dorea să-l descifreze și să-i înțeleagă semnificația, atunci trebuia să înlocuiască a patra literă a alfabetului, și anume, D, cu A și așa mai departe, cu alte litere.
Gaius Suetonius Tranquill Viața celor doisprezece Cezari , cartea întâi, cap. 56 [3]
Nepotul său, Augustus , a folosit și el acest cifr, dar s-a deplasat la dreapta cu unul și nu s-a repetat până la începutul alfabetului:
Ori de câte ori a scris în cifr, a scris B pentru A, C pentru B și restul literelor pe același principiu, folosind AA pentru X.
Gaius Suetonius Tranquill Viața celor doisprezece Cezari , cartea a doua, cap. 88 [3]
Există dovezi că Iulius Caesar a folosit și scheme mai complexe [4] .
Nu se știe cât de eficient era cifrul lui Caesar la acea vreme, dar probabil că era rezonabil de sigur, nu în ultimul rând pentru că majoritatea dușmanilor lui Cezar erau analfabeți și mulți presupuneau că mesajele erau scrise într-o limbă străină necunoscută [5] . Nu există dovezi de atunci cu privire la metodele de spargere a cifrurilor simple de substituție. Cea mai veche înregistrare de analiză a frecvenței care a supraviețuit este lucrarea lui Al-Kindi din secolul al IX-lea privind descoperirea analizei frecvenței [6] .
Cifrul Caesar, schimbat cu unul, este folosit pe spatele mezuzei pentru a cripta numele lui Dumnezeu . Acest lucru poate fi o rămășiță dintr-o perioadă timpurie când poporului evreu nu avea voie să aibă mezuzah [7] .
În secolul al XIX-lea, secțiunea personală a reclamelor din ziare a fost uneori folosită pentru a face schimb de mesaje criptate folosind cifruri simple. Kahn (1967) descrie cazuri în care amatorii s-au angajat în comunicații secrete criptate folosind cifrul Caesar în The Times [8 ] . Chiar mai târziu, în 1915, cifrul Caesar și-a găsit întrebuințare: armata rusă l-a folosit ca înlocuitor pentru cifruri mai complexe care s-au dovedit prea dificile pentru trupe; criptoanalistii germani si austrieci au avut putine dificultati in a descifra aceste mesaje [9] .
Cifrul Caesar cu 13 trepte este folosit și în algoritmul ROT13 , o metodă simplă de înfundare a textului utilizată pe scară largă pe Usenet și este folosit mai mult ca o modalitate de a ascunde spoilere decât ca metodă de criptare [10] . Cifrul Vigenère folosește un cifru Caesar cu diferite schimbări la fiecare poziție din text; valoarea deplasării este definită folosind un cuvânt cheie care se repetă. Dacă cuvântul cheie este atât de lung cât mesajul, este generat aleatoriu, păstrat secret și folosit o singură dată - o astfel de schemă se numește o schemă de blocare unică - și acesta este singurul sistem de criptare pentru care s-a dovedit puterea criptografică absolută [11]. ] .
Cuvintele cheie mai scurte decât mesajul (cum ar fi „Victoria completă” utilizate de Confederație în timpul războiului civil american ) introduc un model ciclic care ar putea fi detectat cu o versiune îmbunătățită a analizei de frecvență [12] .
În aprilie 2006, șeful mafiei fugar Bernardo Provenzano a fost prins în Sicilia în parte din cauza criptoanalizei mesajelor sale, scrise folosind o variantă a cifrului Caesar. În cifrul Provenzano, literele au fost mai întâi înlocuite cu numere - numerele de serie ale literelor din alfabet, iar cifrul Caesar a fost deja aplicat secvenței de numere rezultate - astfel încât atunci când a fost deplasat cu 3, „A” a fost scris ca „4”, „B” - ca „5” și așa mai departe [13] .
Adesea, pentru confortul utilizării cifrului Caesar, se folosesc două discuri de diametre diferite montate pe o axă comună cu alfabete desenate de-a lungul marginilor discurilor. Inițial, discurile sunt rotite astfel încât fiecare literă a alfabetului discului exterior să fie vizavi de aceeași literă a alfabetului discului mic. Dacă acum rotim discul interior cu mai multe caractere, atunci vom obține o corespondență între simbolurile discului exterior și cel interior - cifrul Caesar. Discul rezultat poate fi folosit atât pentru criptare, cât și pentru decriptare [14] .
De exemplu, dacă roata interioară este rotită astfel încât simbolul A al discului exterior să corespundă simbolului D al discului interior, atunci obținem un cifr cu o deplasare de 3 la stânga.
Shift decriptare |
text simplu |
---|---|
0 | exxegoexsrgi |
unu | dwwdfndwrqfh |
2 | cvvcemcvqpeg |
3 | buubdlbupodf |
patru | atacatonce |
5 | zsszbjzsnmbd |
6 | yrryaiyrmlac |
… | |
23 | haahjrhavujl |
24 | gzzgiqgzutik |
25 | fyyfhpfytshj |
Cifrul Caesar poate fi spart cu ușurință chiar dacă crackerul cunoaște doar textul cifrat. Pot fi luate în considerare două situații:
În primul caz, cifrul poate fi spart folosind aceleași metode ca și pentru cifrul de substituție simplu, cum ar fi analiza de frecvență , etc. Folosind aceste metode, crackerul este probabil să observe rapid regularitatea în soluție și să realizeze că cifrul fiind folosit este cifrul lui Cezar.
În al doilea caz, spargerea cifrului este și mai ușoară. Nu există multe opțiuni pentru valorile de schimbare (26 pentru engleză), toate pot fi verificate prin forță brută [15] . O modalitate de a face acest lucru este să scrieți o bucată de text cifrat într-o coloană cu toate schimbările posibile, o tehnică denumită uneori „completarea unei componente simple” [16] . Luați în considerare un exemplu pentru textul cifrat „EXXEGOEXSRGI”; textul simplu este recunoscut imediat de ochi în a patra linie.
O altă modalitate de a aplica această metodă este să scrieți alfabetul sub fiecare literă a textului cifrat, începând cu acea literă. Metoda poate fi accelerată prin utilizarea benzilor alfabetice pregătite în prealabil. Pentru a face acest lucru, trebuie să pliați benzile astfel încât textul cifrat să fie format pe o linie, apoi pe altă linie vom vedea textul simplu.
O altă abordare a cracking-ului prin forță brută este verificarea frecvențelor literelor . Prin trasarea frecvenței literelor în textul cifrat și cunoașterea distribuției așteptate a literelor pentru textul simplu în limba în cauză, se poate determina cu ușurință deplasarea uitându-se la deplasarea unor caracteristici din diagramă. Această metodă este cunoscută sub denumirea de analiză a frecvenței . De exemplu, într-un text în limba engleză, frecvențele literelor E , T , (de obicei cele mai frecvente) și Q , Z (de obicei mai rare) sunt deosebit de diferite [17] . Acest proces poate fi automatizat dacă programul de calculator evaluează cât de bine se potrivește distribuția reală a frecvenței cu distribuția așteptată. De exemplu, poate fi folosit un test chi-pătrat [18] .
Pentru textul în limbaj natural simplu, cel mai probabil va exista o singură opțiune de decodare. Dar, dacă utilizați mesaje foarte scurte, atunci există cazuri în care sunt posibile mai multe opțiuni de decriptare cu diferite ture. De exemplu, textul cifrat „MPQY” poate fi decodificat fie ca „aden” fie „know” (presupunând că textul simplu este scris în engleză). În mod similar, „ALIIP” poate fi descifrat ca „păpuși” sau ca „roată”; „AFCCP” ca „vesel” sau ca „vesel” (vezi și distanța de unicitate ).
Criptarea de mai multe ori nu îmbunătățește în niciun fel securitatea, deoarece utilizarea cifrurilor cu schimbare a și b este echivalentă cu utilizarea cifrului cu schimbare a + b. În termeni matematici, criptarea cu chei diferite formează un grup [19] .
![]() |
---|