Crypto
introducere
cifrul Cezar este unul dintre cele mai vechi și mai simple cifruri cunoscute. Este un tip de cifru de substituție în care fiecare literă din textul clar este ‘deplasată’ cu un anumit număr de locuri în jos pe alfabet. De exemplu, cu o schimbare de 1, A ar fi înlocuit cu B, B ar deveni C și așa mai departe. Metoda este numită după Iulius Cezar, care se pare că a folosit-o pentru a comunica cu generalii săi.
scheme de criptare mai complexe, cum ar fi cifrul Vigen Otrivtre, folosesc cifrul Caesar ca element al procesului de criptare. Binecunoscuta ‘criptare’ ROT13 este pur și simplu un cifru Cezar cu un offset de 13. Cifrul Caesar nu oferă în esență nici o securitate a comunicării și se va arăta că poate fi ușor rupt chiar și manual.
exemplu
pentru a transmite un mesaj criptat de la o persoană la alta, este mai întâi necesar ca ambele părți să aibă ‘cheia’ pentru cifru, astfel încât expeditorul să îl poată cripta și receptorul să îl poată decripta. Pentru cifrul Cezar, cheia este numărul de caractere pentru a schimba alfabetul cifru.
Iată un exemplu rapid al pașilor de criptare și decriptare implicați în cifrul caesar. Textul pe care îl vom cripta este ‘apără peretele estic al castelului’, cu o schimbare (cheie) de 1.
plaintext: defend the east wall of the castleciphertext: efgfoe uif fbtu xbmm pg uif dbtumf
este ușor de văzut cum fiecare caracter din textul clar este mutat în sus alfabetul. Decriptarea este la fel de ușoară, folosind un offset de -1.
plain: abcdefghijklmnopqrstuvwxyzcipher: bcdefghijklmnopqrstuvwxyza
evident, dacă se folosește o altă cheie, alfabetul cifru va fi schimbat cu o sumă diferită.
descriere matematică
unde k este cheia (schimbarea) aplicată fiecărei litere. După aplicarea acestei funcții rezultatul este un număr care trebuie apoi tradus înapoi într-o literă. Funcția de decriptare este:
exemplu JavaScript al cifrului Caesar
text clar
shift:
text cifrat
alte implementări
pentru codul cifru Caesar în diferite limbaje de programare, consultați pagina implementări.
pentru a codifica propriile mesaje în python, puteți utiliza modulul pycipher. Pentru ao instala, utilizați pip install pycipher. Pentru a codifica mesajele cu cifrul Caesar (sau un alt cifru, a se vedea aici pentru documentare):
criptanaliza
a se vedea criptanaliza cifrului Caesar pentru o modalitate de a rupe în mod automat acest cifru.
criptanaliza este arta de a sparge coduri și cifruri. Cifrul Cezar este probabil cel mai ușor de spart dintre toate cifrurile. Deoarece schimbarea trebuie să fie un număr între 1 și 25, (0 sau 26 ar duce la un text clar neschimbat) putem încerca pur și simplu fiecare posibilitate și să vedem care dintre ele are ca rezultat o bucată de text lizibil. Dacă se întâmplă să știți ce este o bucată din textul cifrat sau puteți ghici o piesă, atunci acest lucru vă va permite să găsiți imediat cheia.
dacă acest lucru nu este posibil, o abordare mai sistematică este de a calcula distribuția frecvenței literelor din textul cifrat. Aceasta constă în numărarea de câte ori apare fiecare literă. Textul englezesc natural are o distribuție foarte distinctă care poate fi utilizată pentru a ajuta codurile crack. Această distribuție este după cum urmează:
aceasta înseamnă că litera e este cea mai comună și apare aproape 13% din timp, în timp ce z apare mult mai puțin de 1% din timp. Aplicarea cifrului Cezar nu schimbă aceste frecvențe ale literelor, ci doar le schimbă de-a lungul unui pic (pentru o schimbare de 1, cea mai frecventă literă de text cifrat devine f). Un criptanalist trebuie doar să găsească schimbarea care face ca frecvențele textului cifrat să se potrivească îndeaproape cu frecvențele naturale englezești, apoi să decripteze textul folosind acea schimbare. Această metodă poate fi utilizată pentru a rupe cu ușurință cifrurile Caesar cu mâna.
Dacă aveți în continuare probleme, încercați secțiunea criptanaliză a paginii de cifru de substituție. Toate strategiile care funcționează cu cifrul de substituție vor funcționa și cu cifrul Cezar (dar metodele care funcționează pe cifrul Cezar nu funcționează neapărat pe cifrul general de substituție).
pentru o metodă care funcționează bine pe computere, avem nevoie de o modalitate de a afla care dintre cele 25 de decriptări posibile seamănă cel mai mult cu textul în limba engleză. A se vedea criptanaliza cifrul Cezar pentru o prezentare generală a modului de a sparge folosind statistici quadgram. Cheia (sau shift) care are ca rezultat o decriptare cu cea mai mare probabilitate de a fi text în limba engleză este cel mai probabil cheia corectă. Desigur, cu cât aveți mai mult text cifrat, cu atât este mai probabil ca acest lucru să fie adevărat (acesta este cazul tuturor măsurilor statistice, inclusiv abordarea frecvenței de mai sus). Deci, metoda utilizată este să luați textul cifrat, să încercați să îl decriptați cu fiecare cheie, apoi să vedeți ce decriptare arată cel mai bine. Această metodă simplistă de criptanaliză funcționează numai pe cifruri foarte simple, cum ar fi cifrul Cezar și cifrul gardului feroviar, chiar și cifrurile puțin mai complexe pot avea prea multe chei pentru a le verifica pe toate.
referințe
- Wikipedia are o descriere bună a procesului de criptare/decriptare, istoria și criptanaliza acestui algoritm
- cartea de coduri a lui Simon Singh este o introducere excelentă în cifruri și coduri și include o secțiune despre cifrurile lui Cezar.
- Singh, Simon (2000). Cartea de coduri: știința secretului din Egiptul Antic până la Cuantumcriptografie. ISBN 0-385-49532-3.