Vigenèrova šifra

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 10. června 2020; kontroly vyžadují 18 úprav .

Vigenèrova šifra ( fr.  Chiffre de Vigenère ) je metoda polyalfabetického šifrování doslovného textu pomocí klíčového slova. [jeden]

Tato metoda je jednoduchou formou polyalfabetické substituce. Vigenèrova šifra byla vynalezena mnohokrát. Tuto metodu poprvé popsal Giovan Battista Bellaso ( Ital  Giovan Battista Bellaso ) v knize La cifra del. Sig. Giovan Battista Bellas® v roce 1553 [2] , ale v 19. století dostal jméno Blaise Vigenère [3] , francouzský diplomat. Metoda je jednoduchá na pochopení a implementaci, ale je nepřístupná pro jednoduché metody kryptoanalýzy . [čtyři]

Přestože je šifra snadno pochopitelná a implementovatelná, po tři staletí odolává všem pokusům o její prolomení; který si vysloužil název le chiffre indéchiffrable ( fr.  nevyřešená šifra ). Mnoho lidí se pokusilo implementovat šifrovací schémata, která jsou v podstatě Vigenèrovy šifry. [5]

Historie

V roce 1466 předložil Leon Alberti , slavný architekt a filozof, papežské kanceláři pojednání o šifrách. Pojednání pojednává o různých metodách šifrování, včetně maskování otevřeného textu v nějakém pomocném textu. Dílo uzavírá jeho vlastní šifra, kterou nazval „šifra vhodná pro krále“. Byla to polyalfabetická šifra implementovaná jako šifrovací disk. Pointa je, že tato šifra používá několik substitucí v souladu s klíčem. Alberti později vynalezl dešifrovací kód. Tento vynález daleko předběhl svou dobu, protože tento typ šifry se v evropských zemích začal používat až o 400 let později. [6]

V roce 1518 byl učiněn nový krok ve vývoji kryptografie, když se v Německu objevila první tištěná kniha o kryptografii. Opat Johann Trithemius, opat kláštera ve Würzburgu, napsal knihu „Polygrafie“, která popisuje řadu šifer. Jeden z nich používá „ Tritemiovu tabulku “ (nyní „Vigenèrova tabulka“) a rozvíjí myšlenku polyalfabetické substituce. Systém šifrování je následující: první písmeno zdrojového textu je zašifrováno prvním řádkem, druhé druhým atd. Po použití posledního řádku je další písmeno opět zašifrováno na prvním řádku. V Trithemiově šifře není žádný klíč, tajemstvím je samotná metoda šifrování. [čtyři]

Další krok ve vývoji šifrovací metody navržené Trithemiem udělal Ital Giovanni Belazo. V roce 1553 vyšla jeho brožura Cipher of Signor Belazo. V této šifře je klíčem tzv. heslo – fráze nebo slovo. Heslo bylo psáno pravidelně přes písmena v otevřeném textu. Písmeno hesla nad odpovídajícím písmenem otevřeného textu udávalo číslo řádku v tabulce Trithemius, podle kterého by měla být provedena náhrada (šifrování) tohoto písmene. [čtyři]

Následně myšlenky Trithemia a Belaza rozvinul Belazův krajan Giovanni Battista Porta . Navrhl opustit abecední pořadí písmen v prvním řádku Trithemiovy tabulky a nahradit toto pořadí nějakým libovolným, což je šifrovací klíč. Řádky tabulky se stále cyklicky posouvaly. Porta ve své knize O tajné korespondenci (vydané v roce 1563 [6] ) navrhl bigramovou šifru a také poskytl popis mechanického diskového zařízení, které implementuje náhradu bigramu. [čtyři]

V polovině 16. století se v Itálii objevila kniha G. Cardana „On Subtleties“ s dodatkem „On Various Things“. Odrážely se zde nové myšlenky kryptografie: použití části přenášeného prostého textu samotného jako šifrovacího klíče (myšlenka „vlastního klíče“) a nová metoda šifrování, která vstoupila do historie jako „ Cardano mřížka “. [čtyři]

O kryptografii se začal zajímat i francouzský velvyslanec v Římě Blaise de Vigenère , který se seznámil s díly Trithemia, Belaza, Cardana, Porty, Albertiho. V roce 1585 napsal Pojednání o šifrách, které nastiňuje základy kryptografie. V tomto díle poznamenává: „Všechny věci na světě jsou šifra. Celá příroda je jen šifra a tajné písmeno." Tuto myšlenku později zopakoval Blaise Pascal  , jeden ze zakladatelů teorie pravděpodobnosti, a ve 20. století Norbert Wiener  , „otec kybernetiky“. [čtyři]

Ve skutečnosti Vigenère zkombinoval přístupy Trithemia, Bellazeaua, Porta k šifrování prostých textů, v podstatě aniž by do nich vložil něco originálního. V naší době „Vigenèrova šifra“, spočívající v periodickém pokračování klíčového slova na Trithemiově stole, nahradila jména svých předchůdců. [4] David Kahn ve své knize The Codebreakers s tím nesouhlasil a napsal, že historie „ignorovala důležitý fakt a pojmenovala šifru po Vigenèrovi, navzdory skutečnosti, že neudělal nic, aby ji vytvořil“ [7] .

Vigenèrova šifra měla pověst výjimečně odolné vůči „ručnímu“ prolomení. Slavný spisovatel a matematik Charles Lutwidge Dodgson ( Lewis Carroll ) označil Vigenèrovu šifru za neprolomitelnou ve svém článku Abecední šifra .  Abecední šifra , publikovaná v dětském časopise v roce 1868. V roce 1917 Scientific American také označil Vigenèrovu šifru za neprolomitelnou. [8] Tato představa byla vyvrácena poté, co Kasiski v 19. století šifru zcela prolomil, ačkoli je známo, že šifra byla prolomena některými zkušenými kryptoanalytiky již v 16. století. [7]

Vigenèrova šifra je dostatečně jednoduchá na to, aby mohla být použita v terénu, zvláště pokud jsou použity šifrovací disky. Například, “společníci” používali měděný šifrovací disk pro kód Vigenère během běhu občanské války . Zprávy Konfederace nebyly ani zdaleka tajné a jejich protivníci zprávy pravidelně hackovali. Během války se velení Konfederace spoléhalo na tři klíčové fráze: „Manchester Bluff“, „Úplné vítězství“ a – jak se válka chýlila ke konci – „Přijď odplata“. [7]

Gilbert Vernam se pokusil vylepšit prolomenou šifru (v roce 1918 byla nazvána Vernam-Vigenèrova šifra), ale i přes jeho vylepšení zůstala šifra zranitelná vůči dešifrování . Vernamova práce však nakonec vyústila ve Vernamovu šifru , kterou je skutečně nemožné prolomit. [9]

Popis

V Caesarově šifře je každé písmeno abecedy posunuto o několik pozic; například v Caesarově šifře s posunem +3 by se z A stalo D, B se stalo E a tak dále. Vigenèrova šifra se skládá ze sekvence několika Caesarových šifer s různými hodnotami posunu. Pro šifrování lze použít tabulku abeced zvanou tabula recta nebo Vigenèreův čtverec (tabulka). Co se týče latinské abecedy, Vigenèrova tabulka se skládá z řádků po 26 znacích, přičemž každý další řádek je posunut o několik pozic. V tabulce je tedy 26 různých Caesarových šifer. Každá fáze šifrování používá různé abecedy vybrané v závislosti na charakteru klíčového slova. Předpokládejme například, že zdrojový text vypadá takto:

ÚTOKATDAWN

Osoba odesílající zprávu zapisuje klíčové slovo (" LEMON ") do smyčky, dokud se jeho délka neshoduje s délkou původního textu:

LEMONLEMONLE

První znak otevřeného textu ("A") je zašifrován sekvencí L, což je první znak klíče. První znak šifrového textu ("L") je na průsečíku řádku L a sloupce A ve Vigenèrově tablo. Podobně pro druhý znak zdrojového textu se použije druhý znak klíče; to znamená, že druhý znak šifrového textu ("X") se získá na průsečíku řádku E a sloupce T. Zbytek otevřeného textu je zašifrován podobným způsobem.

Původní text: ATTACKATDAWN Klíč: LEMONLEMONLE Šifrovaný text: LXFOPVEFRNHR

Dešifrování se provádí následovně: ve Vigenèrově tabulce najdeme řádek odpovídající prvnímu znaku klíčového slova; v tomto řetězci najdeme první znak šifrového textu. Sloupec, ve kterém se tento znak nachází, odpovídá prvnímu znaku zdrojového textu. Následující znaky šifrovaného textu jsou dešifrovány podobným způsobem.

Pokud  je počet písmen v abecedě,  je počet písmen v otevřeném textu,  je číslo klíčového písmena v abecedě, pak lze Vigenèrovu šifru zapsat následovně:

A dešifrování:

[deset]

V počítači taková operace odpovídá přidání ASCII kódů znaků zprávy a key modulo some. Zdá se, že pokud je tabulka složitější než cyklický posun řádků, pak se šifra stane spolehlivější. To platí, pokud se častěji mění, například od slova do slova. Ale sestavování takových tabulek, což jsou latinské čtverce, kde se jakékoli písmeno vyskytuje jednou v řádku nebo sloupci, je pracné a mělo by se provádět pouze na počítači. U manuální polyalfabetické šifry se spoléhají pouze na délku a složitost klíče s využitím dané tabulky, kterou nelze utajit, a to zjednodušuje šifrování a dešifrování. [jedenáct]

Aplikace

V 19. století se rozšířila metoda tzv. padového šifrování. Používali ji populističtí revolucionáři , špioni atd. Šifra používá jako šifrovací klíč fráze převzaté z jazyka. Například fráze: "14. července - Mary's birthday." Pokud pro příklady použijeme číslování písmen anglické abecedy, pak Marysbirthday znamená . Pro zašifrování fráze Iamgoing ↔ se ke klíči přidá text mod26, což je nahraná fráze. Ukazuje se

↔ UADEGJV X.

Jak vidíte, v tomto případě jde o obyčejné hraní . Francouzský kryptograf Vigenère navrhl používat tento typ klíče i v případech, kdy je text delší než klíč, a ukládat jej tolikrát, kolikrát je potřeba. V tomto případě není vůbec nutné, aby byl klíč získán ze smysluplné fráze. Navíc je to dokonce nežádoucí, protože smysluplnost může pomoci luštění šifry. Vezměte si například text:

KOUŘ VLASTI JE PRO NÁS SLADKÝ A PŘÍJEMNÝ ↔ a klíč: .

Šifrování se získává pomocí gamma mod26:

Vigenèrova šifra je tedy získána jako opakující se kombinace posunů. Tato šifra obecně nezachovává frekvenci vyskytujících se písmen a z tohoto důvodu ji nelze přímo podrobit statistické analýze.

Kryptoanalýza

Vigenèrova šifra „rozmazává“ frekvenční charakteristiky vzhledu postav v textu, ale některé rysy vzhledu postav v textu zůstávají. Hlavní nevýhodou Vigenèrovy šifry je opakování jejího klíče. Proto lze jednoduchou kryptoanalýzu šifry sestavit ve dvou krocích:

  1. Hledání délky klíče. Je možné analyzovat rozložení frekvencí v šifrovém textu s různou decimací. To znamená, že vezměte text, který obsahuje každé 2. písmeno šifrového textu, pak každé 3. atd. Jakmile se rozložení četností písmen značně liší od jednotného (například v entropii), pak můžeme mluvit o nalezené délce klíče .
  2. Kryptoanalýza. Sada l Caesarových šifer (kde l  je nalezená délka klíče), které lze jednotlivě snadno prolomit.

Test Friedman a Kasiska mohou pomoci určit délku klíče.

Test Kasiska a jak určuje délku klíče

Charles Babbage jako první vyvinul v roce 1854 útočný algoritmus pro Vigenèrovu šifru. Impulsem pro vývoj algoritmu byla výměna dopisů s Johnem H. B. Thwaitesem. Tvrdil, že vytvořil novou šifru a předložil ji Journal of the Society of the Arts; Když Babbage ukázal, že Thwaitesova šifra je pouze speciálním případem Vigenèrovy šifry, Thwaites ho požádal, aby ji rozluštil. Babbage rozluštil text, ze kterého se vyklubala báseň „The Vision of Sin“ od Alfreda Tennysona , zašifrovaná klíčovým slovem Emily – jménem básníkovy manželky. Svůj objev ale nezveřejnil. Proto je tento algoritmus pojmenován po Friedrichu Wilhelm Kasiska , důstojníkovi pruské armády, který nezávisle na Babbageovi vyvinul stejný algoritmus v roce 1863. A teprve ve 20. století, kdy vědci studovali Babbageovy poznámky, se objevily informace o prvním vynálezci tohoto algoritmu. [12]

Nejprve definujeme pojem indexu shody daného textu. Nechť je text považován za odpovídající abecedě skládající se z písmen. Nechť  je délka tohoto textu. Označte počtem výskytů písmene s číslem v textu . Potom je index shody textu definován jako

.

Empiricky bylo ověřeno, že index shody dlouhých smysluplných anglických textů, jako je Mellville's Moby Dick , je přibližně 0,065. V tomto případě samozřejmě zbývá v textu pouze 26 písmen anglické abecedy. Přitom absolutně náhodný, dosti dlouhý text o 26 písmenech, ve kterém se všechna písmena vyskytují přibližně stejně často, se rovná 0,038. Všimli jsme si, že čím je text „smysluplnější“, tím vyšší je jeho index koincidence. Tato okolnost jen pomáhá vypočítat délku klíče ve Vigenèrově šifře.

Nechť  je původní text, ve kterém  je jeho th písmeno a  je jeho Vigenèrova šifra. Pokud je použit normální posun, tedy délka klíče , pak musí platit rovnost , protože se mění pouze počty písmen, nikoli však počet jejich výskytů. Protože  se jedná o smysluplný (předpokladem) text, bude hodnota , přibližně rovna standardní hodnotě , pro daný jazyk. Za příklad běžné angličtiny je považován, tedy . Samozřejmě je nepravděpodobné, že by se Vigenèrova šifra získala v obecném případě s klíčem o délce 1. Proto se postupně počítají následující indexy shody: do .






To může znamenat, že délka klíče je , ačkoli to může být falešná stopa.

Pokud je délka klíče rovna , pak bude text získán ze směny, tedy bude uložen , a text , je naopak náhodný vzorek smysluplného textu, proto si musí zachovat své statistické charakteristiky, zejména index shody.

Pokud není znám index shody některého jazyka, je také možné použít test Kasiski. Je nutné neporovnávat přijaté hodnoty koincidenčních indexů se standardní hodnotou, ale sledovat, kdy se tento index prudce zvyšuje. To může signalizovat nalezenou délku klíče. Samozřejmě se bavíme o luštění smysluplných a zároveň dosti dlouhých textů. Koncept smysluplnosti pro formální jazyky však není snadný koncept.

Další aplikací testu Kasiski je kontrola, zda jsou zachovány frekvence písmen vyskytujících se při šifrování. Nechť  je šifrový text a šifrovací algoritmus není znám. Pokud je známo, že byla použita normální anglická abeceda a hodnota je blízká 0,065, pak to naznačuje, že byla použita šifra zachovávající frekvenci. Je možné, že se jedná o jednoduchou substituční šifru. V situaci, kdy hodnota není ani zdaleka 0,065, lze předpokládat, že byla použita šifra, která nezachovala frekvenci, nebo byl text nesmyslný, nebo byla použita jiná abeceda atd. Jedním slovem se něco ukázalo jako špatně a je potřeba hlubší analýza. .

Vraťme se k Vigenèrově šifře. Definujme správně délku klíče rovnou . Nyní musíte najít samotný klíč.

Histogram vytvořený podle standardních frekvencí písmen v jazyce má své vlastní charakteristické rysy. Vysvětlují se extrémně nerovnoměrným používáním písmen v anglickém jazyce. Tato nerovnoměrnost právě umožňuje efektivně aplikovat frekvenční analýzu.

Pozornost upoutají především „vrcholy“ odpovídající písmenům A, E, H, I, N, O, R, S, T a „pahýly“ odpovídající J, Q, X, Z." vedle sebe je dokonce celá trojice: R, S, T. Všechny dohromady dávají velmi specifickou úlevu.

Pokud je použit posun o 4, obraz se cyklicky mění. Dochází k cyklickému posunu reliéfu o 4 jednotky. Pokud neznáte velikost posunu, pak není obtížné jej obnovit, veden zdravým rozumem.

Rotační stroje

Vigenèrovu šifru je možné vylepšit tím, že za opakující se klíč považujeme kombinaci libovolných substitucí: . To znamená, že jednotky zdrojového textu jsou převedeny na jednotky , respektive v atd.

Při prolamování takové šifry, jako v případě Vigenèrovy šifry, je třeba nejprve určit délku klíče . To lze provést pomocí Kasiski testu stejným způsobem jako v popsaném případě. K určení substitucí lze dále použít frekvenční analýzu.

Frekvenční analýza

Jakmile je známa délka klíče, lze šifrový text zapsat do více sloupců, z nichž každý odpovídá jednomu znaku klíče. Každý sloupec se skládá z původního textu, který je zašifrován Caesarovou šifrou ; klíč k Caesarově šifře je pouze jedním znakem klíče Vigenèrovy šifry, který je použit v tomto sloupci. Šifrovaný text lze dešifrovat pomocí technik podobných těm, které se používají při prolomení Caesarovy šifry. Vylepšení Kasikova testu, známého jako Kirchhoffova metoda, porovnává četnost výskytu znaků ve sloupcích s četností výskytu znaků ve zdrojovém textu za účelem nalezení klíčového znaku pro daný sloupec. Když jsou známy všechny znaky v klíči, může kryptoanalytik snadno dešifrovat šifrovaný text z otevřeného textu. Kirchhoffova metoda není použitelná, když je Vigenèrova tabulka zakódována namísto použití obvyklé abecední sekvence, ačkoliv Kasiska test a párovací testy mohou být stále použity pro určení délky klíče pro tento případ. [13]

Zmínky v literatuře

V roce 1881 napsal Jules Verne román Jangada . V tomto románu autor použil k zašifrování dokumentu Vigenèrovu šifru. Jako šifrovaný text autor používá následující dokument:

SGUCHPVELLZIRTEPNDNFGINBORGYUGLCHD KOTKHZHGUUMZDHRЪSGSYUDTPЪARVYGGISCHVCH EECSTOUZHVSEVHAHYAFBBETFZSEFTHZHZBZ ЪGFBSCHKHRPZhTZVTZJYTGOYBNTFFEOICHT TEGIIOKZPTFLEUGSFIPTMOFOXHGBBT JFYGUCHOYUNFNSHZGELLSHRUDENKOLGGNSBK SSEUPNFTSEEEGGSJNOYIONRSITKTSEDB UBTETLOTBFTSSBYPMPZTZHPTUFKDG

V průběhu příběhu hrdinové najdou fragment dešifrovaného slova pro tento dokument: ORTEGA Hrdinové uhodli, že toto jméno může znamenat podpis na konci dokumentu. Tak to vychází:

O R T E G A T U V K D G

Proto je klíč 432513. Když znáte klíč, můžete tento dokument snadno přeložit:

SKUTEČNÁ PŘÍČINA KRÁDEŽE DIAMANTŮ SGUCHPVELL ZIRTEPND NFGIN BORGYUG A VRAŽENÍ VOJÁKŮ OCHRANY V NOCI NA L CHDKOTKHZHG UUMZDH RЪSGSYu D TPIA RV DVACÁTÝ DRUHÝ LEDN TIS YGGISCHVCHE ETSSTUZH VSEVHA HYAFBBB OSM STO DVACET ŠESTÁ ETFZSEFTKh ZHZBZЪGFB SCHIKHHRIP ZHTZV NOT JOAM DACOSTA, NEFAIR AT TJ YTGO YBNTFFFE OIKHTTEGIIIOKZP TFL PROHOVOŘENO K SMRTI A JÁ, NEŠŤASTNÝ EUGSFIPTM O FOKSHM G B TJFYGUCHOYUN ZAMĚSTNANEC DIAMANTOVÉHO ODDĚLENÍ FNSHZGALL SCHRUDENKOLG GNSBCSSEU OKRES; ANO JSEM JEDNO, V ČEM A PODPISY PNFTSEE EG G SZHNO A YIO N RSITKTS VÁLKA Mým SKUTEČNÝM JMÉNEM, EDBUB TETLO TBFTSSBUYP MPZTZHP ORTEGA TUFKDG

Možnosti

Existuje mnoho dalších zapamatovatelných čtverců, které mohou být použity jako základ pro polyalfabetický systém stejným způsobem jako Vigenère čtverec. Jedním z nejznámějších je náměstí Beaufort . Jeho linie jsou linie Vigenèrova náměstí, psané v opačném pořadí. Je pojmenována po admirálovi Siru Francisovi Beaufortovi  , vynálezci stupnice rychlosti větru. Jestliže na Vigenèrově čtverci první řádek a sloupec ukazují na řádky a sloupce, pak na Beaufortově čtverci slouží těmto účelům první řádek a poslední sloupec. [čtrnáct]

Varianta běžícího klíče Vigenèrovy šifry byla kdysi neprolomitelná. Tato verze používá jako klíč blok textu stejně dlouhý jako původní text. Protože je klíč stejně dlouhý jako zpráva, metody navržené Friedmanem a Kasiskim nefungují (protože klíč se neopakuje). V roce 1920 Friedman jako první objevil nevýhody této možnosti. Problém s běžícím klíčem Vigenèrovy šifry je v tom, že kryptoanalytik má statistické informace o klíči (vzhledem k tomu, že blok textu je napsán ve známém jazyce) a tyto informace se projeví v šifrovém textu. Pokud je klíč skutečně náhodný, jeho délka je rovna délce zprávy a byl použit jednou, pak bude Vigenèrova šifra teoreticky neprolomitelná, ve skutečnosti touto možností již bude Vernamova-Vigenèrova šifra, pro kterou absolutní kryptografická síla byla prokázána.

Navzdory zjevné síle Vigenèrovy šifry nebyla v Evropě široce používána. Běžnější byla Gronsfeldova šifra , vytvořená hrabětem Gronsfeldem, identická s Vigenèrovou šifrou kromě toho, že používala pouze 10 různých abeced (odpovídajících číslicím 0 až 9). Výhodou Gronsfeldovy šifry je, že jako klíč není použito slovo, ale digitální sekvence, která se opakuje, dokud se nerovná délce zašifrované zprávy. Gronsfeldova šifra byla navzdory svým nedostatkům široce používána v celém Německu a Evropě.

Implementace

JavaScript

Kód //Veškerý tento kód můžete zkopírovat a vložit do konzole prohlížeče. var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; //Řetězec abecedy var m = "ATTACKATDAWN" ; //Zpráva var k = "CITRÓN" ; //Klíč function Vizhener ( m , k , mode ){ //(šifrovat/dešifrovat) pro "Gronsfeld" + "Vizhener" + "Beaufort" + "Shifted Atbash" //m - zpráva nebo šifrový text (může být také klíč, pokud Beaufort šifra ), //k - klíč (nebo zpráva/šifrový text, pokud je Beaufortova šifra), //režim - režim: // Šifrování: "šifrovat" (výchozí), // Dešifrování: "dešifrovat" (režim === 'dešifrovat ' ), // Šifrování-dešifrování podle posunuté tabulky atbash: (mode==='shifted_atbash') // Extrahujte číslice z Gronsfeldova šifrovacího klíče: "gronsfeld" nebo "gronsfeld_encrypt", "gronsfeld decrypt". var maxlength = Math . max ( m . délka , k . délka ); var r = '' ; //Prázdný výsledek pro ( i = 0 ; i < maxlength ; i ++ ){ //šifrovat/dešifrovat //Vizhener - zašifrovat/dešifrovat jeden forumula (šifrovat - ve výchozím nastavení; dešifrovat - když (režim === 'dešifrovat') ) var mi = a . indexOf ( m [ ( ( i >= m . délka ) ? i % m . délka : i ) ] ); //přizpůsobit zprávu/šifrovaný text - do klíče (pokud je menší) var ki_s = k [ ( ( i >= k . délka ) ? i % k . délka : i ) ]; //přizpůsobí klíč zprávě/šifrovému textu (pokud je krátký) var ki = ( typeof mode !== 'undefined' && mode . indexOf ( 'gronsfeld' ) !== - 1 ) ? parseInt ( ki_s ) : a . indexOf ( ki_s ); //odčítání při dešifrování nebo sčítání. ki = ( ( typ režimu !== 'nedefinováno' && režim . indexOf ( 'dešifrovat' ) !== - 1 ) ? ( - ki ) : ki ); c = a [ ( ( ( a . délka + ( mi + ki ) ) % a . délka ) ) ]; //symbol podle Vigenèrovy tabulky. c = ( režim === 'shifted_atbash' ) ? a [ a . délka - 1 - a . indexOf ( c )] : c ; // Atbash znak nebo znak. r + = c ; //Přidání znaku k výsledku. } return r ; //vrátí výsledný řetězec } //Testy: //jeden. Gronsfeldova šifra. (Zkrácená verze Vigenèrovy šifry). //Parametry: m - zpráva/šifrovaný text, k - klíč (pouze číslice), režim - konzola "šifrovat/dešifrovat" . log ( '\n\n1. Gronsfeldova šifra (odstraněná verze Vigenèrovy šifry s digitálním klíčem):' , '\n' + 'm = ' , 'GRONSFELD' , ' - zpráva' , '\n' + 'k = ' , '2015' , '- klíč' , '\n' + 'Gronsfeldova šifra - šifrování: ' , Vizhener ( 'GRONSFELD' , '2015' , 'gronsfeld' ) //produkuje IRPSUFFQF - šifra Gronsfeld ' \ ' + 'Gronsfeldova šifra - dešifrovat: ' , Vizhener ( Vizhener ( 'GRONSFELD' , '2015' , 'gronsfeld' ), '2015' , 'gronsfeld decrypt' ) //vytvoří GRONSFELD - ze šifry\ Gronsfeld , ' n' + 'Porovnejte se zprávou: ' , "( dešifrováno === m )" , ( Vizhener ( Vizhener ( 'GRONSFELD' , '2015' , 'gronsfeld' ), '2015' , 'gronsfeld_decrypt' ) === ' GRONSFELD' ) // m?pravda ); //2. Také místo čísel je v Gronsfeldově šifře možné označit písmena. //Pak bude Gronsfeldova šifra běžnou Vigenèrovou šifrou, ale s omezeným počtem znaků na klíč. //Například se všemi možnými číslicemi v klíči "0123456789" může být klíč pouze z písmen "ABCDEFGHIJ" //Získat to můžete takto: var Gronsfeld_key = '2015' ; var Vizhener_key = Gronsfeld_key . rozdělit ( '' ). map ( function ( x ){ return a [ parseInt ( x )]}). připojit se ( '' ); //CABF //A naopak: var Gronsfeld_key2 = Vizhener_key . rozdělit ( '' ). map ( function ( x ){ return a . indexOf ( x )}). připojit se ( '' ); //2015 //Tady jsou v konzoli: console . log ( '\n2. Převod Gronsfeldova klíče na klíč Vizhener:' , '\nGronsfeld_key' , Gronsfeld_key , '\n' + 'na Vizhener_key' , Vizhener_key , '\n' + 'a zpět:' , Gronsfeld_key2 ); //3. Pak je šifrování-dešifrování Gronsfeldovy šifry dílem Vigenèrovy šifry: konzole . log ( "\n3. Gronsfeldova šifra - s klíčem Vigenère, podle Vizhenerovy tabulky:" , '\n' + 'm = ' , 'GRONSFELD' , ' - zpráva' , '\n' + 'k = ' , Vizhener_key , '- klíč' , '\n' + 'Gronsfeldova šifra - šifrování: ' , Vizhener ( 'GRONSFELD' , Vizhener_key ) //vytváří IRPSUFFQF - Beaufortova šifra , '\n' + 'Gronsfeldova šifra - dešifrování (' , Vizhener : ' Vizhener ( 'GRONSFELD' , Vizhener_key ), Vizhener_key , 'dešifrovat' ) //Dává GRONSFELD - z Beaufortovy šifry. , '\n' + 'Porovnání se zprávou: ' , "( dešifrováno === m )" , ( Vizhener ( Vizhener ( 'GRONSFELD' , Vizhener_key ), Vizhener_key , 'dešifrovat' ) === 'GRONSFELD' ) //'GRONSFELD'? true ); //čtyři. Vigenèrova šifra (plná verze): //Parametry: m - zpráva/šifrovaný text, k - klíč, režim - "šifrovat"/"dešifrovat" konzole . log ( '\n4. Vigenèrova šifra (plná verze):' , '\n' + 'm = ' , m , ' - zpráva' , '\n' + 'k = ' , k , '- klíč' , ' \n' + 'Vigenèrova šifra - šifrování: ' , Vizhener ( m , k ) //vytváří LXFOPVEFRNHR - Vigenèrova šifra , '\n' + 'Vigenèrova šifra - dešifrování: ' , Vizhener ( Vizhener ( m , k ), k , 'decrypt' ) //dá ATTACKATDAWN - ze šifry Vizhener , '\n' + 'Porovnání se zprávou: ' , "( decrypted === m)" , ( Vizhener ( Vizhener ( m , k , 'encrypt' ), k , 'dešifrovat' ) === m ) //m?pravda ); //5. Beaufortova šifra - přes Vigenèrovu šifru (existuje další tabulka a šifrový text - posunutý atbash podél řádků). //Parametry: m - klíč, k - zpráva/šifrovaný text, režim - 'dešifrovat' (pouze dešifrování) //Zvláštností Beaufortovy šifry je, že dešifrování je opětovné zašifrování šifrovaného textu - se stejným klíčem. //To je stejná operace. konzole . log ( "\n5. Beaufortova šifra (v tabulce - atbash řádek po řádku):" , '\n' + 'm = ' , m , ' - zpráva' , '\n' + 'k = ' , k , '- key' , '\n' + 'Beaufortova šifra - šifrování Vigenèrovy tabulky: ' , Vizhener ( k , m , 'dešifrovat' ) //vytváří LLTOLBETLNPR - Beaufortovu šifru , '\n' + 'Beaufortovu šifru - dešifrování Vigenèrovy tabulky :' , Vizhener ( k , Vizhener ( k , m , 'dešifrovat' ), 'dešifrovat' ) //dát ATTACKATDAWN - z Beaufortovy šifry. , '\n' + 'Porovnání se zprávou: ' , "( dešifrováno === m)" , ( Vizhener ( k , Vizhener ( k , m , 'dešifrovat' ), 'dešifrovat' ) === m ) //m? true ); //6. Posunutý atbash - přes Vigenèrovu šifru (existuje další tabulka a šifrový text - atbash, posunutý v řádcích ve sloupcích). //Parametry: m nebo k - zpráva/šifrovaný text a klíč (nebo naopak), režim - 'shifted_atbash' (pouze zašifrovat + atbash k výsledku) //Nejde pouze o stejnou operaci (dešifrování - je šifrovaný text ), ale je také komutativní. //To znamená, že zde lze zaměnit n-tá písmena (zprávy/šifrového textu) a klíč - se stejným výsledkem. //Právě toto, posunutý atbash - se blíží Vernamově šifře, //protože při dešifrování Vernamovou šifrou nezáleží na operaci XOR, kde jsou klíčové bajty a kde jsou bajty šifrovaného textu. konzole . log ( "\n6. Posunuto atbash (v tabulce atbash, posunuty řádky i sloupce):" , '\n' + 'm = ' , m , ' - zpráva' , '\n' + 'k = ' , k , '- klíč' , '\n' + 'Posunutý atbash - šifrování tabulky Vigener: ' , Vizhener ( m , k , 'shifted_atbash' ) //Dává OCULKEVUIMSI - posunutou šifru atbash. , 'Náhradní test komutativnosti: Vizhener : ' ( k , m , ' shifted_atbash' ) // Stejné, bez ohledu na to, kde je klíč a kde je zpráva. , ' \n' + ' Posunuto atbash - dešifrování pomocí Vizhenerovy tabulky : / _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /Totéž, bez ohledu na to, kde je klíč, ale kde je šifrovaný text. , '\n' + 'Porovnání se zprávou: ' , "( dešifrováno === m)" , ( Vizhener ( k , Vizhener ( k , m , 'shifted_atbash' ) , ' Shifted_atbash ' ) === m ) // m ? _ _ _ _ _ _ _ _ _ ifted_atbash' ) === Vizhener ( k , m , 'shifted_atbash' )) && ( Vizhener ( Vizhener ( k , m , 'shifted_atbash' ), k , ' shifted_atbash ' ) === Vizhener ( k , Vizhener ( k ) , 'shifted_atbash' ), 'shifted_atbash' ) ) ) //Komutivita? pravda );

Delphi 10

Kód program Vigenere ; používá System . SysUtils , Winapi . Windows ; const cmGronsfeld : Byte = 1 ; cmShiftedAtbash : Byte = 2 ; cmDecrypt : Byte = 4 ; YesNo : array [ Boolean ] of string = ( 'no' , 'yes' ) ; var log : TStringBuilder ; function VigenereCrypt ( m , k : string ; mode : Byte = 0 ) : string ; const a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ; //Řetězec abecedy var maxLength , i , mi , ki , ix : Integer ; r , ki_s , c : řetězec ; gronsfeld , posunutýAtbash , dešifrovat : Boolean ; begin //(šifrovat/dešifrovat) pro "Gronsfeld" + "Vigenere" + "Beaufort" + "Shifted Atbash" //m - zpráva nebo šifrový text (může být klíč, pokud je Beaufortova šifra), //k - klíč (nebo zpráva/ ciphertext if Beaufort cipher), //mode - mode: // Encrypt: "encrypt" (výchozí), // Decrypt: "decrypt" (mode === 'decrypt'), // Encrypt-decrypt by shifted atbash table: (mode = cmShiftedAtbash) // Extrahujte číslice z Gronsfeldova šifrovacího klíče: "gronsfeld" nebo "gronsfeld_encrypt", "gronsfeld decrypt". maxLength := m . Délka ; pokud k . Délka > maxLength pak maxLength := k . Délka ; Vysledek := '' ; //Prázdný výsledek gronsfeld := ( mode a cmGronsfeld ) > 0 ; shiftedAtbash := ( režim a cmShiftedAtbash ) > 0 ; decrypt := ( mode a cmDecrypt ) > 0 ; for i := 0 maxlength - 1 do begin //šifrovat/dešifrovat //Vigenere - zašifrovat/dešifrovat jedno forumula (šifrovat - ve výchozím nastavení; dešifrovat - když (cmDecrypt je v režimu) ) //přizpůsobit zprávu/šifrovaný text - na klíč (pokud je menší) jestliže i >= m . délka pak ix := i mod m . Délka else ix := i ; mi := a . IndexOf ( m [ ix + 1 ]) ; pokud i >= k . délka pak ix := i mod k . Délka else ix := i ; ki_s := k [ ix + 1 ] ; //přizpůsobí klíč zprávě/šifrovému textu (pokud je krátký) if gronsfeld then ki := ki_s . ToInteger () else ki := a . IndexOf ( ki_s ) ; //odčítání při dešifrování nebo sčítání. if decrypt then ki := ki * - 1 ; c := a [(( a . Délka + mi + ki ) mod a . Délka ) + 1 ] ; //symbol podle Vigenèrovy tabulky. if shiftedAtbash then c := a [ a . délka - a . IndexOf ( c )] ; // Atbash znak nebo znak. Vysledek := Vysledek + c ; //Přidání znaku k výsledku. konec ; konec ; function GronsfeldToVigenere ( GfKey : string ) : string ; const a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ; //Řetězec abecedy var i : Integer ; begin Vysledek := '' ; for i := 1 to Length ( GfKey ) do Result := Result + a [ StrToInt ( GfKey [ i ]) + 1 ] ; konec ; function VigenereToGronsfeld ( VgKey : string ) : string ; const a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ; //Řetězec abecedy var i : Integer ; begin Vysledek := '' ; for i := 1 to Length ( VgKey ) do Result := Result + IntToStr ( a . indexOf ( VgKey [ i ])) ; // konec roku 2015 ; postup GronsfeldTest () ; const MSG = 'GRONSFELD' ; KLÍČ = '2015' ; TXT = '1. Gronsfeldova šifra (odstraněná verze Vigenèrovy šifry s digitálním klíčem):' #13#10 + 'Zpráva:' #9 '"%s"' #13#10 + 'Klíč:' #9#9 '"%s"' # 13#10 + 'Šifrování:' #9 '"%s" (mělo by být "IRPSUFFQF")' #13#10 + 'Dešifrování:' #9 '"%s" (mělo by být "%s")' # 13 #10 + 'Shoda:' #9 '%s' #13#10 ; var zašifrováno , dešifrováno : řetězec ; start //1. Gronsfeldova šifra. (Zkrácená verze Vigenèrovy šifry). //Parametry: m - zpráva/šifrovaný text, k - klíč (pouze čísla), režim - "šifrovat/dešifrovat" zašifrováno := VigenereCrypt ( MSG , KEY , cmGronsfeld ) ; // dešifruje IRPSUFFQF - Gronsfeldovu šifru := VigenereCrypt ( crypted , KEY , cmGronsfeld nebo cmDecrypt ) ; //dává GRONSFELD - z Gronsfeldovy šifry log . AppendFormat ( TXT , [ MSG , KEY , zašifrováno , dešifrováno , MSG , YesNo [ dešifrováno = MSG ]]) ; konec ; procedura VigenereToGronsfeldTest () ; const GKEY = '2015' ; TXT = #13# 10'2. Převod klíče Gronsfeld na klíč Vigenère:' #13#10 + 'Klíč Gronsfeld: "%s" >>> Klíč Vigenère: "%s" a zpět: "%s"' #13#10 ; var GronsfeldKey2 : string ; VigenereKey : řetězec _ začít //2. Také místo čísel je v Gronsfeldově šifře možné označit písmena. //Pak bude Gronsfeldova šifra běžnou Vigenèrovou šifrou, ale s omezeným počtem znaků na klíč. //Například se všemi možnými číslicemi v klíči "0123456789" může být klíč pouze z písmen "ABCDEFGHIJ" //Získat to můžete takto: VigenereKey := GronsfeldToVigenere ( GKEY ) ; //CABF //A naopak: GronsfeldKey2 := VigenereToGronsfeld ( VigenereKey ) ; //2015 log . AppendFormat ( TXT , [ GKEY , VigenereKey , GronsfeldKey2 ]) ; konec ; procedura GronsfeldAsVigenereTest () ; const MSG = 'GRONSFELD' ; KLÍČ = 'CABF' ; TXT = #13# 10'3. Gronsfeldova šifra - s klíčem Vigenère, podle tabulky Vigenère:' #13#10 + 'Zpráva:' #9 '"%s"' #13#10 + 'Klíč:' #9#9 '"%s"' # 13 #10 + 'Šifrování:' #9 '"%s" (mělo by být "IRPSUFFQF")' #13#10 + 'Dešifrování:' #9 '"%s" (mělo by být "%s")' #13 # 10 + 'Shoda:' #9 '%s' #13#10 ; var zašifrováno , dešifrováno : řetězec ; začít //3. Pak je šifrování-dešifrování Gronsfeldovy šifry dílem Vigenèrovy šifry: zašifrováno := VigenereCrypt ( MSG , KEY ) ; // dešifruje IRPSUFFQF - Beaufortovu šifru := VigenereCrypt ( crypted , KEY , cmDecrypt ) ; //dává GRONSFELD - z Beaufortovy šifry. log . AppendFormat ( TXT , [ MSG , KEY , zašifrováno , dešifrováno , MSG , YesNo [ dešifrováno = MSG ]]) ; konec ; procedura VigenereFullTest () ; const MSG = 'ATTACKATDAWN' ; //Zpráva KEY = 'CITRÓN' ; //Klíč TXT = #13#10 '4. Vigenèrova šifra (plná verze):' #13#10 + 'Zpráva:' #9 '"%s"' #13#10 + 'Klíč:' #9#9 '"%s"' #13#10 + ' Šifrování:' #9 '"%s" (mělo by být "LXFOPVEFRNHR")' #13#10 + 'Dešifrování:' #9 '"%s" (mělo by být "%s")' #13#10 + 'Shoda :' #9 '%s' #13#10 ; var zašifrováno , dešifrováno : řetězec ; začít //4. Vigenèrova šifra (plná verze): //Parametry: m - zpráva/šifrovaný text, k - klíč, režim - "šifrovat"/"dešifrovat" zašifrováno := VigenereCrypt ( MSG , KEY ) ; //dá LXFOPVEFRNHR - Vigenere šifra dešifrována := VigenereCrypt ( crypted , KEY , cmDecrypt ) ; //dává ATTACKATDAWN - z Vigenèrovy šifry log . AppendFormat ( TXT , [ MSG , KEY , zašifrováno , dešifrováno , MSG , YesNo [ dešifrováno = MSG ]]) ; konec ; postup BeaufortTest () ; const MSG = 'ATTACKATDAWN' ; //Zpráva KEY = 'CITRÓN' ; //Klíč TXT = #13#10 '5. Beaufortova šifra (v tabulce - atbash řádek po řádku):' #13#10 + 'Zpráva:' #9 '"%s"' #13#10 + 'Klíč:' #9#9 '"%s"' #13 #10 + 'Beaufortova Vigenèrova šifra:' #13#10 + 'Šifrování:' #9 '"%s" (mělo by být "LLTOLBETLNPR")' #13#10 + 'Dešifrování:' #9 '"%s " (mělo by být "%s")' #13#10 + 'Shoda:' #9 '%s' #13#10 ; var zašifrováno , dešifrováno : řetězec ; začít //5. Beaufortova šifra - přes Vigenèrovu šifru (existuje další tabulka a šifrový text - posunutý atbash podél řádků). //Parametry: m - klíč, k - zpráva/šifrovaný text, režim - 'dešifrovat' (pouze dešifrování) //Zvláštností Beaufortovy šifry je, že dešifrování je opětovné zašifrování šifrovaného textu - se stejným klíčem. //To je stejná operace. zašifrováno := VigenereCrypt ( KEY , MSG , cmDecrypt ) ; //dá LLTOLBETLNPR - Beaufortovu šifru dešifrovat := VigenereCrypt ( KEY , crypted , cmDecrypt ) ; //dává ATTACKATDAWN - z Beaufortovy šifry. log . AppendFormat ( TXT , [ MSG , KEY , zašifrováno , dešifrováno , MSG , YesNo [ dešifrováno = MSG ]]) ; konec ; procedura ShiftedAtbashTest () ; const MSG = 'ATTACKATDAWN' ; //Zpráva KEY = 'CITRÓN' ; //Klíč TXT = #13#10 '6. Posunuto atbash (v tabulce atbash posunuty řádky i sloupce):' #13#10 + 'Zpráva:' #9 '"%s"' #13#10 + 'Klíč:' #9#9 '"% s "' #13#10 + 'Posunutý atbash - šifrování tabulky Vigenère:' #9 '"%s" (mělo by být "OCULKEVUIMSI")' #13#10 + 'Test komutativnosti náhrady:' #9 '"%s " ( by mělo být "OCULKEVUIMSI")' #13#10 + 'Shifted atbash - Vigenère dešifrování:' #9 '"%s" (mělo by být "ATTACKATDAWN")' #13#10 + 'Test komutativnosti náhrady:' #9 '" %s"' #13#10 + 'Porovnání se zprávou:' #9 '%s' #13#10 + 'Komutivita nahrazení:' #9 '%s' ; var csaMK , csaKM , csaKMK , csaKKM : řetězec ; začít //6. Posunutý atbash - přes Vigenèrovu šifru (existuje další tabulka a šifrový text - atbash, posunutý v řádcích ve sloupcích). //Parametry: m nebo k - zpráva/šifrovaný text a klíč (nebo naopak), režim - cmShiftedAtbash (pouze šifrování + atbash k výsledku) //Nejen stejná operace (dešifrování - šifrovaný text je šifrován), ale k Navíc je také komutativní. //To znamená, že zde lze zaměnit n-tá písmena (zprávy/šifrového textu) a klíč - se stejným výsledkem. //Právě toto, posunutý atbash - se blíží Vernamově šifře, //protože při dešifrování Vernamovou šifrou nezáleží na operaci XOR, kde jsou klíčové bajty a kde jsou bajty šifrovaného textu. csaMK := VigenereCrypt ( MSG , KEY , cmShiftedAtbash ) ; //dává OCULKEVUIMSI - posunutou šifru atbash. csaKM := VigenereCrypt ( KEY , MSG , cmShiftedAtbash ) ; //Totéž, nezáleží na tom, kde je klíč, ale kde je zpráva. csaKMK := VigenereCrypt ( csaKM , KEY , cmShiftedAtbash ) ; //dává ATTACKATDAWN - z posunuté šifry atbash. csaKKM := VigenereCrypt ( KEY , csaKM , cmShiftedAtbash ) ; //Totéž, nezáleží na tom, kde je klíč, ale kde je šifrový text. log . AppendFormat ( TXT , [ MSG , KEY , csaMK , csaKM , csaKMK , csaKKM , YesNo [ csaKKM = MSG ] , YesNo [( csaMK = csaKM ) a ( csaKMK = csaKKM ; )] konec ; begin log := TStringBuilder . vytvořit () ; try //Testy: GronsfeldTest () ; VigenereToGronsfeldTest () ; GronsfeldAsVigenereTest () ; VigenereFullTest () ; BeaufortTest () ; ShiftedAtbashTest () ; MessageBoxW ( GetDesktopWindow () , PWideChar ( log . ToString ()) , 'Vigenère' , 0 ) ; konečně log . zdarma () ; konec ; konec .

Ruby

Kód class Crypto class CryptoError < StandardError ; sebe ; end attr_reader :alphabet # přijímá libovolné pole jedinečných znaků, může to být jeden nebo více jazyků, výchozí latinka malá písmena def initialize ( alphabet = ( 'A' .. 'Z' ) . to_a ) @alphabet = alphabet check_alphabet end # c{j}=(m{j}+k{j}) mod {n} def encode ( key_str , text_srt ) key_arr = str_to_alphabet_index_arr ( key_str ) char_number_at_text = 0 str_to_alphabet_index_arr ( text_srt ) . injekci ( "" ) do | r , písmeno_index | encode_letter_index = ( index_písmene + pole_klíče [ číslo_znaku_v_textu % velikost_pole_klíče ] ) % abeceda . _ _ velikost char_number_at_text += 1 r + abeceda [ kód_index_písmena ] konec konec # m{j}=(c{j} + n - k{j}) mod {n} def decode ( key_str , text_srt ) key_arr = str_to_alphabet_index_arr ( key_str ) char_number_at_text = 0 str_to_alphabet_index_arr ( text_srt ) . injekci ( "" ) do | r , písmeno_index | decode_letter_index = ( index_písmene + abeceda . velikost - pole_klíče [ číslo_znaku_v_textu % pole_klíče . velikost ] ) % abeceda . velikost char_number_at_text += 1 r + abeceda [ decode_letter_index ] end end soukromé def str_to_alphabet_index_arr ( str ) str . znaky . mapa do | char | index = abeceda . index ( char ) pokud index index else zvýší CryptoError , 'písmena by měla být v abecedě' end end end def check_alphabet raise CryptoError , 'alphabet should be array', pokud alphabet . je? ( Array ) zvýšit CryptoError , 'písmena by měla být řetězce', pokud je abeceda . žádný? { | písmena | ! dopis . je? ( String ) } zvýšit CryptoError , 'abeceda by měla obsahovat alespoň jedno písmeno', pokud je abeceda . size < 1 raise CryptoError , 'písmena by měla být jedinečná' if alphabet . jedinečný . velikost != abeceda . size raise CryptoError , 'letter should not be empty' if alphabet . žádný? ( & :empty? ) zvýšit CryptoError , 'písmena by měla obsahovat pouze jeden znak' v případě abecedy . žádný? { | písmena | dopis . velikost != 1 } konec konec # příklady crypto = Crypto . nové krypto . kódovat ( 'LEMON' , 'ATTACKATDAWN' ) # "LXFOPVEFRNHR" krypto . dekódovat ( 'LEMON' , 'LXFOPVEFRNHR' ) # krypto "ATTACKATDAWN" . encode ( 'LEMON' , 'attack' ) # Crypto::CryptoError: písmena by měla být v abecedě eng_crypto = Krypto . new (( 'A' .. 'I' ) . to_a ) rus_crypto . kódovat ( 'KVAS' , 'MAMAMYLARAMU' ) # "TSVMSTSELSЪVMD" rus_crypto . dekódovat ( 'KVAS' , ' TSVMTSELSЪVMD' ) # "MAMAMYLARAMU"

Poznámky

  1. ↑ Martin , Keith M. Každodenní kryptografie  . — Oxford University Press, 2012. — s. 142 str. — ISBN 978-0-19-162588-6 .
  2. Diskrétní matematika: Algoritmy. Historický nástin (nepřístupný odkaz) . rain.ifmo.ru Získáno 22. prosince 2017. Archivováno z originálu 21. prosince 2017. 
  3. Sergej a Marina Bondarenkovi . Šifry z minulosti: kryptografie a záhady předpočítačové éry  (ruština) , 3DNews - Daily Digital Digest  (8. července 2015). Staženo 22. prosince 2017.
  4. ↑ 1 2 3 4 5 6 7 Babash A.V., Shankin G.P. Historie kryptografie. Část I. - M .: Helios ARV, 2002. - S. 240 s .. - ISBN 5854380439 .
  5. Smith, Laurence D. Substitution Ciphers // Cryptography the Science of Secret Writing: The Science of Secret  Writing . - Dover Publications , 1943. - S. 81. - ISBN 0-486-20247-X .
  6. ↑ 1 2 Nosov V. A. Stručný historický náčrt vývoje kryptografie  (ruské)  // Moskevská univerzita a vývoj kryptografie v Rusku. Materiály konference na Moskevské státní univerzitě .. - (17. října 2002).
  7. ↑ 1 2 3 David, Kahn. The Codebreakers: Příběh tajného psaní. - Simon & Schuster, 1999. - ISBN 0-684-83130-9 .
  8. Knudsen, Lars R. Blokové šifry – průzkum. - London: Springer, 1997. - ISBN 3-540-65474-7 .
  9. Stanislaw Jarecki. Přehled kryptoměn, dokonalé utajení, jednorázová podložka  // University of California. — 2004.
  10. Richard A. Mollin. Kódy: Průvodce tajemstvím od starověku po moderní dobu. - Chapman a Hall/CRC, 2005. - 704 stran str. — ISBN 9781584884705 .
  11. Zhelnikov V. Kryptografie od papyru k počítači - M .: ABF , 1996. - 336 s. — ISBN 978-5-87484-054-9
  12. Singh S. The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography. - New York City: Doubleday, 1999. - 416 s. S. - ISBN 978-1-85702-879-9 .
  13. Laboratorní cvičení: Vigenere, RSA, DES a autentizační protokoly  // CS 415: Zabezpečení počítače a sítě. - 2006. Archivováno 23. července 2011.
  14. Arto Salomaa. Kryptografie veřejného klíče. — ISBN 3540528318 .

Literatura

  • Romankov V.A. Úvod do kryptografie: průběh přednášek, 2009. - 238 s. — ISBN 5777909825 .
  • Babash A. V., Shankin G. P. Historie kryptografie. Část I. - M .: Helios ARV, 2002. - 240 s. — ISBN 5854380439 .
  • Zhelnikov V. Kryptografie od papyru k počítači - M .: ABF , 1996. - 336 s. — ISBN 978-5-87484-054-9
  • Arto Salomaa. Kryptografie veřejného klíče. — ISBN 3540528318 .
  • N. Chytrý. Kryptografie .. - Moskva: Technosfera, 2005. - 528 s. - ISBN 5-94836-043-1 .
  • Singh S. The Code Book , Histoire des codes secrets  (anglicky) : The Science of Secrecy from Ancient Egypt to Quantum Cryptography, De l'Égypte des pharaons à l'ordinateur quantique - NYC : Doubleday , Knopf Doubleday Publishing Group , 1999 —. 416 str.
  • Richard A. Mollin. Kódy: Průvodce tajemstvím od starověku po moderní dobu. - Chapman a Hall/CRC, 2005. - 704 stran str. — ISBN 9781584884705 .
  • Martin, Keith M. Každodenní kryptografie. - Oxford University Press, 2012. - 142 s. — ISBN 978-0-19-162588-6
  • Knudsen, Lars R. Blokové šifry – průzkum. - London: Springer, 1997. - ISBN 3-540-65474-7 .
  • Henk Ca van Tilborg. Encyklopedie kryptografie a bezpečnosti. - Springer, 2005. - 115 s. — ISBN 038723473X .
  • Arto Salomaa. Kryptografie veřejného klíče. — ISBN 3540528318 .

Odkazy