Kriptográfia

Bevezetés §

Az Enigma rejtjelezés a németek által a második világháború alatt használt rejtjelezés volt. Az Enigma az egyik legismertebb történelmi rejtjelezőgép, és valójában egy sor hasonló rejtjelezőgépre utal. Az első Enigma gépet egy Arthur Scherbius nevű német mérnök találta fel az első világháború végén. A gépet az 1920-as évek elejétől kezdve kereskedelmi forgalomban használták, és számos nemzet katonai és kormányzati szolgálatai is átvették – a leghíresebb a náci Németországban a második világháború előtt és alatt. Az Enigmának számos különböző modelljét gyártották, de a német katonai modell, a Wehrmacht Enigma a leggyakrabban tárgyalt változat.

Ha szeretnél néhány saját Enigma üzenetet titkosítani, nézd meg a javascript példát.

Az algoritmus §

Ez a rész az Enigma I-ről, más néven Wehrmacht Enigmáról fog szólni, a többi változat hasonlóan működik. Az enigma “kulcsa” több elemből áll:

  1. A rotorok és azok sorrendje
  2. A rotorok indítóállásai
  3. A ringstellung, vagyis a gyűrűbeállítások
  4. Steckerverbindungen, vagyis a dugaljak beállításai

A németek által a második világháború alatt az Engima üzenetek küldésénél alkalmazott eljárásokról, beleértve a mutatók beállítását is, lásd ezt a leírást.

A rotorok §

Tegyük fel, hogy a rotoraink I,II,III balról jobbra haladnak, és az ‘A’ betűt próbáljuk meg kódolni. Egyelőre feltételezzük, hogy az ‘A’ betű kódolásakor minden rotor a kezdő pozíciójában van (‘AAA’).Mivel a rotoraink I,II,III balról jobbra haladnak, az A karakter először a III-as rotoron fog áthaladni. Minden rotor egy egyszerű helyettesítési műveletet hajt végre. A III. rotor helyettesítési táblázata az alábbiakban látható:

ABCDEFGHIJKLMNOPQRSTUVWXYZBDFHJLCPRTXVZNYEIWGAKMUSQO

B helyébe D lép, C helyébe F lép stb. Tehát miután az “A” betű áthalad a rotoron, “B”-ként jön ki. A ‘B’ betű most a II. rotoron keresztül kerül bevitelre, ahol ‘J’-re cserélődik stb. Ezt legjobban egy táblázat segítségével lehet ábrázolni (az egyes rotorok huzalozásának teljes leírását lásd ezen a wikipedia oldalon):

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

Miután a levél átmegy a rotorokon III,II,I forgókon keresztül a reflektorba kerül, és egy újabb egyszerű helyettesítésen megy keresztül. Miután kijön a reflektorból, a betű fordított irányban (ez azt jelenti, hogy a fordított helyettesítést alkalmazzuk) visszakerül a rotorokon keresztül.A táblázatból láthatjuk, hogy miután a kódolt betű a végén a III-as rotorból visszajön, marad az U betű. Egy fontos lépés, amit még nem említettem, hogy a rotorok minden egyes betű kódolása előtt inkrementálódnak. Ha a rotorok kezdőpozíciója ‘FEQ’, akkor először ‘FER’-re inkrementálódnak, mielőtt az első betűt megfejtjük.

A rotorok inkrementálása §

A rejtvény megvalósításakor gyakori hiba, hogy a rotorok úgy viselkednek, mint egy hagyományos kilométeróra, van azonban néhány lényeges különbség. Minden rotornak van egy bevágása, ami a tőle balra lévő rotort lépésre készteti. Az I. rotor a következő rotor lépését okozza a Q-ból R-be való átmenetkor, a II. rotor az E-ből F-be való átmenetkor stb. Az I-V rotorokat a Wermacht rejtvényben használták, később további rotorokat adtak hozzá, amelyeknek két bevágásuk volt.

.

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

Van még egy zavaró részlet, a “kettős lépés”. Amikor egy rotor lép, akkor a tőle jobbra lévő rotor is lép. Ezt nem vesszük észre, amikor a második rotor lép, mivel az első rotor minden billentyű lenyomásakor lép. Amikor azonban a 3. (bal szélső) rotor lép, a második rotor is lép. Ez azt jelenti, hogy a gép periódusa nem 26x26x26, hanem csak 26x25x26.

A Ringstellung §

A Ringstellung (gyűrűbeállítások) általában 3 betűs karakterláncként vannak megadva, pl. “FAM” (vagy alternatívaként 1 és 26 közötti számokként, amelyek a betűket képviselik). Az előzőekben azt feltételeztem, hogy minden egyes rotor egyszerű helyettesítési rejtjelezése rögzített. A gyűrűállítás lehetővé teszi a helyettesítési rejtjelezés eltolását a következők szerint. Az “A” (vagy 1) gyűrűbeállítással az I. rotor helyettesítési kódja így néz ki:

ABCDEFGHIJKLMNOPQRSTUVWXYZEKMFLGDQVZNTOWYHXUSPAIBRCJ

A “B” (vagy 2) gyűrűbeállítással az I. rotor helyettesítési kódja így néz ki:

ZABCDEFGHIJKLMNOPQRSTUVWXYEKMFLGDQVZNTOWYHXUSPAIBRCJ

A Steckerverbindungen §

A steckerverbindungen (dugalj) egy további biztonsági réteg, amely 13 vezetékből áll, amelyek az enigma gép elején lévő foglalatokba csatlakoznak.Minden egyes vezeték 2 betűt kapcsol össze, pl. P és O. Ezek a párosítások a kulcsanyag részeként vannak megadva. Amikor egy betűt begépelünk, mielőtt az első rotorba kerülne, a betű a dugaljnak megfelelő helyettesítésen megy keresztül, majd miután a betű kijön, a kimenet előtt ismét átesik a dugalj helyettesítésen. Egy példa a plugboard beállítására a következő: (Ez azt jelenti, hogy a P és az O felcserélődik, az M és az L felcserélődik stb.).

Ha a fenti példát használjuk, ahol az “A” betűt az I, II és III rotorokkal titkosítottuk az AAA kezdőpozícióval, akkor az “A” betűt U-ként titkosítottuk. Ha most figyelembe vesszük a plugboardot, az előző bekezdésben szereplő plugboard-beállítások használatával az “A” betűt a titkosítás előtt először “C”-re fordítjuk. A kódolás a szokásos módon folytatódik, ezúttal a “C” betű “J”-ként kerül kiadásra. Ezt a betűt ezután ismét átvezetik a dugaljzaton, hogy “K”-val helyettesítsék. Így most egy “A” betűt “K”-ként kódolunk a használt dugaljjal. A plugboard jelentősen növeli a rejtjelezés egészének erősségét, jobban, mint egy másik rotor hozzáadása.

Javascript Example §

Plaintext

kulcsbeállítások:
gyűrűbeállítások:
Rotorok:
Rotorok beállításai:

Ciphertext

Más implementációk §

A saját üzenetek python nyelven történő kódolásához használhatjuk a pycipher modult. Telepítéséhez használd a pip install pycipher parancsot. Az Enigma rejtjelezéssel (vagy más rejtjelezéssel, lásd itt a dokumentációt) történő kódoláshoz lásd a példát itt.

Kriptanalízis §

Az Enigma üzenetek automatikus feltöréséhez szükséges kódot lásd: Cryptanalysis of Enigma.

Az Enigma feltörésén sokat dolgoztak, néhány módszert, mint a rodding és a buttoning up a második világháború alatt használták, de ehhez “cribs”, azaz ismert nyílt szövegdarabok szükségesek. Ezeket a módszereket a wikipedia oldal tárgyalja.

A modernebb megközelítések közé tartozik Jim Gillogly “Ciphertext only Cryptanalysis of the Enigma” című tanulmánya. A dolgozat néhány hibáját kijavító utóirat itt található. Egy másik cikk, amely Jim Gillogly cikkére épül, a Heidi Williams által írt ‘Applying Statistical Language Recognition Techniques in the Ciphertext only Cryptanalysis of Enigma’. Egy másik érdekes forrás: The Cryptographic Mathematics of Enigma.

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.