Krypto

Úvod §

Šifra Enigma byla polní šifra používaná Němci během druhé světové války. Enigma je jedním z nejznámějších historických šifrovacích strojů a ve skutečnosti označuje řadu podobných šifrovacích strojů. První stroj Enigma vynalezl německý inženýr Arthur Scherbius na konci první světové války. Od počátku dvacátých let 20. století se používal komerčně a byl také přijat vojenskými a vládními službami řady zemí – nejznámější bylo nacistické Německo před druhou světovou válkou a během ní. Vyráběla se celá řada různých modelů Enigmy, ale nejčastěji se hovoří o německém vojenském modelu Wehrmacht Enigma.

Pokud byste chtěli zašifrovat nějakou vlastní zprávu Enigma, podívejte se na javascriptový příklad.

Algoritmus §

V této části bude řeč o Enigmě I alias Wehrmacht Enigma, ostatní varianty fungují podobně. ‚Klíč‘ k enigmě se skládá z několika prvků:

  1. Rotory a jejich pořadí
  2. Startovací pozice rotorů
  3. Ringstellung neboli nastavení kroužků
  4. Steckerverbindungen neboli nastavení zásuvné desky

Informace o postupech používaných Němci za 2. světové války při odesílání zpráv Engima, včetně způsobu nastavení indikátorů, najdete v tomto popisu.

Rotory §

Předpokládejme, že naše rotory jsou I,II,III pohybující se zleva doprava a my se snažíme zašifrovat písmeno „A“. Prozatím budeme předpokládat, že při šifrování písmene ‚A‘ je každý rotor ve své počáteční poloze (‚AAA‘).protože naše rotory jsou I,II,III pohybující se zleva doprava, projde znak A nejprve rotorem III. Každý rotor provádí jednoduchou substituční operaci. Substituční tabulku pro rotor III vidíte níže.

ABCDEFGHIJKLMNOPQRSTUVWXYZBDFHJLCPRTXVZNYEIWGAKMUSQO

B je nahrazen znakem D, C je nahrazen znakem F atd. Takže poté, co písmeno „A“ projde rotorem, vyjde jako „B“. Písmeno ‚B‘ nyní prochází rotorem II, kde je nahrazeno písmenem ‚J‘ atd. Nejlépe to znázorňuje tabulka (úplný popis zapojení jednotlivých rotorů najdete na této stránce wikipedie):

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

Po průchodu písmene rotory III,II,I pak narazí na reflektor a projde další jednoduchou substitucí. Poté, co vyjde z reflektoru, je písmeno posláno zpět přes rotory v opačném směru (to znamená, že je použita inverzní substituce). z tabulky vidíme, že poté, co se zašifrované písmeno vrátí zpět z rotoru III, nám na konci zůstane písmeno U. Důležitým krokem, který jsem ještě nezmínil, je skutečnost, že rotory se před zašifrováním každého písmene inkrementují. Pokud jsou počáteční pozice rotorů „FEQ“, pak se před vyluštěním prvního písmene nejprve inkrementují na „FER“.

Inkrementace rotorů §

Častou chybou při realizaci enigmy je předpoklad, že se rotory chovají jako standardní odometr, je zde však několik zásadních rozdílů. Každý rotor má zářez, který způsobí, že rotor nalevo od něj udělá krok. Rotor I způsobí, že další rotor vykročí při přechodu z Q do R, rotor II při přechodu z E do F atd. Rotory I až V jsou použity v enigmě Wermachtu, později byly přidány další rotory, které měly dva zářezy.

.

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

Je tu ještě jeden matoucí detail, a to „dvojí krokování“. Když rotor šlape, způsobí, že šlape i rotor napravo od něj. Toho si při krocích druhého rotoru nevšimneme, protože první rotor krokujepo každém stisknutí klávesy. Když však krokuje třetí (nejlevější) rotor, způsobí to, že krokuje i druhý rotor. Toznamená, že perioda stroje není 26x26x26, ale pouze 26x25x26.

Ringstellung §

Ringstellung (nastavení kroužků) se obvykle uvádí jako řetězec tří písmen, např. „FAM“ (nebo alternativně jako čísla od 1 do 26, která představují písmena). V předchozí diskusi jsem předpokládal, že jednoduchá substituční šifra každého rotoru byla pevně stanovena. Ringstellung poskytuje možnost posunu substituční šifry takto. Při nastavení kroužku na „A“ (neboli 1) vypadá substituce rotoru I takto:

ABCDEFGHIJKLMNOPQRSTUVWXYZEKMFLGDQVZNTOWYHXUSPAIBRCJ

Při nastavení kroužku na „B“ (neboli 2) vypadá substituce rotoru I takto:

ZABCDEFGHIJKLMNOPQRSTUVWXYEKMFLGDQVZNTOWYHXUSPAIBRCJ

Steckerverbindungen §

Steckerverbindungen (zásuvná deska) je přidaná bezpečnostní vrstva, která se skládá ze 13 vodičů, které se zapojují do zásuvek na přední straně stroje enigma.Každý drát spojuje 2 písmena, např. písmeno P s písmenem O. Tyto dvojice jsou uvedeny jako součást klíčového materiálu. Když je písmeno napsáno, předtím, než se dostane do prvního rotoru, projde substitucí podle zásuvné desky a poté, co písmeno vyjde ven, je znovu podrobeno substituci podle zásuvné desky, než je vyvedeno na výstup. Příklad nastavení plugboardu je následující: PO ML IU KJ NH YT GB VF RE AC (to znamená, že P a O jsou zaměněny, M a L jsou zaměněny atd.).

Použijeme-li výše uvedený příklad, kdy bylo písmeno „A“ zašifrováno pomocí rotorů I, II a III s počátečními pozicemi AAA, měli jsme písmeno A zašifrované jako U. Pokud nyní vezmeme v úvahu zásuvnou desku, pomocí nastavení zásuvné desky v předchozím odstavci se písmeno „A“ před zašifrováním nejprve převede na písmeno „C“. Šifrování pokračuje jako obvykle, tentokrát je písmeno ‚C‘ vyvedeno jako ‚J‘. Toto písmeno je pak opět vedeno přes zásuvnou desku, kde je nahrazeno písmenem „K“. Nyní tedy máme „A“, které je zašifrováno jako „K“ s použitou zásuvnou deskou. Plugboard výrazně zvyšuje sílu šifry enigma jako celku, více než by mohlo přidání dalšího rotoru.

Příklad Javascriptu §

Plaintext

nastavení klíče:
nastavení kruhu:
Rotory:
Nastavení desky:

Ciphertext

Jiné implementace §

Pro šifrování vlastních zpráv v pythonu můžete použít modul pycipher. Nainstalujete jej pomocí příkazu pip install pycipher. Chcete-li šifrovat zprávy pomocí šifry Enigma (nebo jiné šifry, dokumentaci naleznete zde), podívejte se na příklad zde.

Kryptanalýza §

Nějaký kód pro automatické prolomení zpráv Enigma naleznete v části Kryptanalýza Enigmy.

Na prolomení Enigmy bylo odvedeno mnoho práce, některé metody jako rodding a buttoning up byly použity během druhé světové války, ale vyžadují ‚cribs‘ neboli známé kusy otevřeného textu. Tyto metody jsou popsány na stránce wikipedie.

Mezi modernější přístupy patří článek Jima Gilloglyho ‚Ciphertext only Cryptanalysis of the Enigma‘. Následný dopis opravující některé chyby v článku naleznete zde. Dalším článkem, který navazuje na článek Jima Gilloglyho, je ‚Applying Statistical Language Recognition Techniques in the Ciphertext only Cryptanalysis of Enigma‘ od Heidi Williamsové. Dalším zajímavým zdrojem je The Cryptographic Mathematics of Enigma.

.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.