Cripto

Introducere §

Criptograma Enigma a fost o cifră de câmp folosită de germani în timpul celui de-al doilea război mondial. Enigma este una dintre cele mai cunoscute mașini de criptare istorice și se referă, de fapt, la o serie de mașini de cifrat similare. Prima mașină Enigma a fost inventată de un inginer german pe nume Arthur Scherbius la sfârșitul primului război mondial. A fost folosită în scopuri comerciale de la începutul anilor 1920 și a fost, de asemenea, adoptată de serviciile militare și guvernamentale ale mai multor națiuni – cel mai cunoscut fiind cel al Germaniei naziste înainte și în timpul celui de-al Doilea Război Mondial. Au fost produse o varietate de modele diferite de Enigma, dar modelul militar german, Wehrmacht Enigma, este versiunea despre care se vorbește cel mai des.

Dacă doriți să criptați unele dintre propriile mesaje Enigma, aruncați o privire la exemplul javascript.

Algoritmul §

În această secțiune se va vorbi despre Enigma I aka Wehrmacht Enigma, alte variante sunt similare în funcționare. „Cheia” pentru enigma constă din mai multe elemente:

  1. Rotoarele și ordinea lor
  2. Positiile de pornire ale rotorilor
  3. Steckerverbindungen, sau setările inelelor
  4. Steckerverbindungen, sau setările plăcii de conectare

Pentru informații despre procedurile folosite de germani în timpul celui de-al doilea război mondial la trimiterea mesajelor Engima, inclusiv despre modul în care erau setați indicatorii, consultați această descriere.

Rotoarele §

Să presupunem că rotoarele noastre sunt I,II,III care se deplasează de la stânga la dreapta, iar noi încercăm să cifrăm litera „A”. Vom presupune deocamdată că, pe măsură ce litera „A” este cifrată, fiecare rotor se află în poziția sa de pornire („AAA”).Deoarece rotoarele noastre sunt I,II,III care se deplasează de la stânga la dreapta, caracterul A va trece mai întâi prin rotorul III. Fiecare rotor aplică o operație simplă de substituție. Tabelul de substituție pentru rotorul III poate fi văzut mai jos.

ABCDEFGHIJKLMNOPQRSTUVWXYZBDFHJLCPRTXVZNYEIWGAKMUSQO

B este înlocuit cu D, C este înlocuit cu F etc. Astfel, după ce litera „A” trece prin rotor, iese sub forma unui „B”. Litera „B” este acum introdusă prin rotorul II, unde este înlocuită cu „J” etc. Acest lucru este cel mai bine descris cu ajutorul unui tabel (pentru o descriere completă a cablajelor rotorilor pentru fiecare rotor, consultați această pagină wikipedia):

III II I Reflector inv(I) inv(II) inv(III)
A -> B B -> J J -> Z Z -> T T -> L L -> K K -> U

După ce litera trece prin rotoarele III,II,I, ea atinge apoi reflectorul și suferă o altă substituție simplă. După ce iese din reflector, litera este trimisă înapoi prin rotoare în sens invers (aceasta înseamnă că se aplică substituția inversă).Putem vedea din tabel că, după ce litera cifrată iese înapoi prin rotorul III la sfârșit, rămânem cu litera U. Un pas important pe care nu l-am menționat încă este faptul că rotoarele se incrementează înainte ca fiecare literă să fie cifrată. Dacă pozițiile de început ale rotorilor sunt „FEQ”, atunci acestea vor fi mai întâi incrementate la „FER” înainte ca prima literă să fie descifrată.

Incrementul rotorilor §

O greșeală frecventă atunci când se implementează enigma este aceea de a presupune că rotoarele acționează ca un odometru standard, existând totuși câteva diferențe cheie. Fiecare rotor are o crestătură care face ca rotorul din stânga sa să pășească. Rotorul I determină rotorul următor să pășească la trecerea de la Q la R, rotorul II la trecerea de la E la F etc. Rotoarele de la I la V sunt utilizate în enigma Wermacht; ulterior au fost adăugate mai multe rotoare care aveau două crestături.

.

I II III IV V VI VI VII VIII
Q E V J J Z Z,M Z,M Z,M

Există un detaliu suplimentar derutant, cel al „pasului dublu”. Atunci când un rotor pășește, îl determină și pe cel din dreapta sa să pășească. Acest lucru nu este observat atunci când al doilea rotor pășește, deoarece primul rotor pășește la fiecare apăsare de tastă. Cu toate acestea, atunci când al treilea rotor (cel mai din stânga) pășește, face ca și al doilea rotor să pășească. Acest lucru înseamnă că perioada mașinilor nu este 26x26x26, ci doar 26x25x26.

Ringtellung §

Ringtellung (setări ale inelelor) sunt, în general, furnizate sub forma unui șir de 3 litere, de exemplu „FAM” (sau, alternativ, sub formă de numere între 1 și 26, reprezentând literele). În discuția anterioară am presupus că cifra de substituție simplă a fiecărui rotor era fixă. În cazul în care se utilizează un inel, acesta are capacitatea de a schimba cifra de substituție după cum urmează. Cu o setare a inelelor la „A” (sau 1), substituția rotorului I arată astfel:

ABCDEFGHIJKLMNOPQRSTUVWXYZEKMFLGDQVZNTOWYHXUSPAIBRCJ

Cu o setare a inelelor la „B” (sau 2), substituția rotorului I arată astfel:

ZABCDEFGHIJKLMNOPQRSTUVWXYEKMFLGDQVZNTOWYHXUSPAIBRCJ

Steckerverbindungen §

Steckerverbindungen (placa de conectare) este un strat suplimentar de securitate care constă din 13 fire care se conectează în prize din partea frontală a mașinii enigma.Fiecare fir conectează 2 litere, de exemplu P cu O. Aceste perechi sunt specificate ca parte a materialului cheii. Atunci când o literă este tastată, înainte de a intra în primul rotor, aceasta este supusă substituției conform fișei, apoi, după ce litera iese, este supusă din nou substituției fișei înainte de a fi emisă. Un exemplu de setare a plugboard-ului este următorul: PO ML IU KJ NH YT GB VF RE AC (Aceasta înseamnă că P și O sunt schimbate, M și L sunt schimbate etc.).

Dacă folosim exemplul de mai sus, în care litera „A” a fost criptată cu rotoarele I, II și III cu pozițiile de start AAA, am avut litera A criptată ca un U. Dacă luăm în considerare acum plugboard-ul, folosind setările plugboard din paragraful anterior, „A” este mai întâi transformat într-un „C” înainte de a fi criptat. Cifrarea continuă ca de obicei, de data aceasta „C” este emis ca „J”. Această literă este apoi direcționată din nou prin placa de conectare pentru a fi înlocuită cu „K”. Așadar, acum avem un „A” cifrat ca un „K”, cu placa de conectare în funcțiune. Plugboard-ul mărește semnificativ puterea cifrului enigma ca întreg, mai mult decât ar putea-o face adăugarea unui alt rotor.

Exemplu JavaScript §

Plaintext

setări de chei:
configurări inel:
Rotori:
Setări ale plăcii de conectare:
Setări ale plăcii de conectare:

Ciphertext

Alte implementări §

Pentru a vă cifra propriile mesaje în python, puteți folosi modulul pycipher. Pentru a-l instala, utilizați pip install pycipher. Pentru a descifra mesaje cu cifrul Enigma (sau cu un alt cifru, consultați aici pentru documentație), consultați exemplul de aici.

Criptoanaliză §

Pentru câteva coduri pentru descifrarea automată a mesajelor Enigma, consultați Cryptanalysis of Enigma.

Multă muncă a fost depusă pentru a descifra Enigma, unele metode, cum ar fi „rodding” și „buttoning up”, au fost folosite în timpul celui de-al doilea război mondial, dar necesită „cribs”, sau bucăți cunoscute de text în clar. Aceste metode sunt discutate pe pagina wikipedia.

Abordări mai moderne includ lucrarea lui Jim Gillogly ‘Ciphertext only Cryptanalysis of the Enigma’. O scrisoare de urmărire care corectează unele greșeli din lucrare poate fi găsită aici. O altă lucrare care se bazează pe lucrarea lui Jim Gillogly este ‘Applying Statistical Language Recognition Techniques in the Ciphertext only Cryptanalysis of Enigma’ de Heidi Williams. O altă resursă interesantă este The Cryptographic Mathematics of Enigma.

(Matematica criptografică a Enigmei).

Lasă un răspuns

Adresa ta de email nu va fi publicată.