Vigenèren salaus

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 10.6.2020 tarkistetusta versiosta . tarkastukset vaativat 18 muokkausta .

Vigenère-salaus ( fr.  Chiffre de Vigenère ) on menetelmä kirjaimellisen tekstin moniaakkosiseen salaukseen avainsanan avulla. [yksi]

Tämä menetelmä on yksinkertainen polyaakkosisen substituution muoto. Vigenèren salaus on keksitty monta kertaa. Tämän menetelmän kuvaili ensimmäisenä Giovan Battista Bellaso ( italialainen  Giovan Battista Bellaso ) kirjassa La cifra del. Sig. Giovan Battista Bellas® vuonna 1553 [2] , mutta 1800-luvulla hän sai nimen Blaise Vigenère [3] , ranskalainen diplomaatti. Menetelmä on helppo ymmärtää ja toteuttaa, mutta se on mahdoton yksinkertaisille kryptausanalyysimenetelmille . [neljä]

Vaikka salaus on helppo ymmärtää ja toteuttaa, se on kolmen vuosisadan ajan kestänyt kaikki yritykset murtaa se; joka ansaitsi nimen le chiffre indéchiffrable ( fr.  ratkaisematon salaus ). Monet ihmiset ovat yrittäneet toteuttaa salausjärjestelmiä, jotka ovat olennaisesti Vigenère-salauksia. [5]

Historia

Vuonna 1466 Leon Alberti , kuuluisa arkkitehti ja filosofi, toimitti paavin kansliaan salakirjoituksia koskevan tutkielman. Tutkielmassa käsitellään erilaisia ​​salausmenetelmiä, mukaan lukien selvän tekstin peittäminen aputekstissä. Teos päättyy omaan salakirjoitukseensa, jota hän kutsui "kuninkaille sopivaksi salakirjaksi". Se oli monikirjaiminen salaus, joka toteutettiin salauslevynä. Tärkeintä on, että tämä salaus käyttää useita vaihtoja avaimen mukaisesti. Alberti keksi myöhemmin koodin salauskoodin. Tämä keksintö oli paljon aikaansa edellä, koska tämän tyyppistä salausta alettiin käyttää Euroopan maissa vasta 400 vuotta myöhemmin. [6]

Vuonna 1518 otettiin uusi askel kryptografian kehityksessä, kun Saksassa ilmestyi ensimmäinen painettu kryptografiaa käsittelevä kirja. Apotti Johann Trithemius, Würzburgin luostarin apotti, kirjoitti kirjan "Polygraphy", joka kuvaa useita salakirjoituksia. Yksi niistä käyttää " Tritemius-taulukkoa " (nykyään "Vigenère-taulukko") ja kehittää ajatusta polyaakkosten korvaamisesta. Salausjärjestelmä on seuraava: lähdetekstin ensimmäinen kirjain salataan ensimmäisellä rivillä, toinen toisella ja niin edelleen. Viimeisen rivin käytön jälkeen seuraava kirjain salataan jälleen ensimmäisellä rivillä. Trithemius-salauksessa ei ole avainta, salaisuus on itse salausmenetelmä. [neljä]

Seuraavan askeleen Trithemiuksen ehdottaman salausmenetelmän kehittämisessä teki italialainen Giovanni Belazo. Vuonna 1553 julkaistiin hänen pamflettinsa Signor Belazon salakirjoitus. Tässä salauksessa avain on niin kutsuttu salasana - lause tai sana. Salasana kirjoitettiin ajoittain selkokielisten kirjainten päälle. Salasanan kirjain selkeän tekstin vastaavan kirjaimen yläpuolella osoitti sen rivin numeron Trithemius-taulukossa, jonka mukaan tämän kirjaimen korvaaminen (salaus) tulisi suorittaa. [neljä]

Myöhemmin Trithemiuksen ja Belazon ideat kehitti Belazon maanmies Giovanni Battista Porta . Hän ehdotti luopumista kirjainten aakkosjärjestyksestä Trithemius-taulukon ensimmäisellä rivillä ja korvaamaan tämän järjestyksen jollain mielivaltaisella järjestyksessä, joka on salausavain. Taulukon rivit olivat edelleen syklisesti siirtyneet. Kirjassaan On Secret Correspondence (julkaistu vuonna 1563 [6] ) Porta ehdotti bigram-salausta ja esitti myös kuvauksen mekaanisesta levylaitteesta, joka toteuttaa bigrammin korvaamisen. [neljä]

1500-luvun puolivälissä Italiassa ilmestyi G. Cardanon kirja "Hienotuksista" lisäyksellä "Erilaisista asioista". Siellä heijastuivat uudet salausideat: itse lähetetyn selkeän tekstin osan käyttö salausavaimena (idea "omaavaimesta") ja uusi salausmenetelmä, joka meni historiaan " Cardano hila ". [neljä]

Ranskan Rooman-suurlähettiläs Blaise de Vigenère tutustui Trithemiuksen, Belazon, Cardanon, Portan ja Albertin teoksiin myös kiinnostumaan salakirjoituksesta. Vuonna 1585 hän kirjoitti traktaatin salakirjoituksista, jossa hahmotellaan kryptografian perusteet. Tässä teoksessa hän huomauttaa: ”Kaikki asiat maailmassa ovat salakirjoituksia. Koko luonto on vain salakirjoitus ja salainen kirje." Tämän ajatuksen toisti myöhemmin Blaise Pascal  , yksi todennäköisyysteorian perustajista, ja 1900-luvulla Norbert Wiener  , "kybernetiikan isä". [neljä]

Itse asiassa Vigenère yhdisti Trithemiuksen, Bellazeaun ja Portin lähestymistavat pelkkien tekstien salaukseen, pohjimmiltaan tuomatta niihin mitään omaperäistä. Meidän aikanamme "Vigenèren salaus", joka koostuu Trithemiuksen taulukon avainsanan säännöllisestä jatkosta, on syrjäyttänyt edeltäjiensä nimet. [4] David Kahn kirjassaan The Codebreakers ei hyväksynyt tätä ja kirjoitti, että historia "jätti huomioimatta tärkeän tosiasian ja nimesi salauksen Vigenèren mukaan, vaikka hän ei tehnyt mitään sen luomiseksi" [7] .

Vigenère-salauksella oli maine poikkeuksellisen kestävänä "manuaalista" halkeilua vastaan. Kuuluisa kirjailija ja matemaatikko Charles Lutwidge Dodgson ( Lewis Carroll ) kutsui Vigenère-salausta särkymättömäksi artikkelissaan The Alphabetical Cipher .  The Alphabet Cipher , julkaistiin lastenlehdessä vuonna 1868. Vuonna 1917 Scientific American kutsui Vigenère-salausta särkymättömäksi. [8] Tämä käsitys kumottiin sen jälkeen, kun Kasiski mursi salauksen kokonaan 1800-luvulla, vaikka joidenkin kokeneiden kryptanalyytikoiden tiedetään rikkoneen salauksen jo 1500-luvulla. [7]

Vigenère-salaus on riittävän yksinkertainen käytettäväksi kentällä, varsinkin jos käytetään salauslevyjä. Esimerkiksi "Confederates" käytti kuparista salauslevyä Vigenère-salaukseen sisällissodan aikana . Konfederaation viestit olivat kaikkea muuta kuin salaisia, ja niiden vastustajat hakkeroivat viestejä säännöllisesti. Sodan aikana Konfederaation komento turvautui kolmeen avainlauseeseen: "Manchester Bluff", "Complete Victory" ja - sodan lähestyessä loppuaan - "Come Retribution". [7]

Gilbert Vernam yritti parantaa murtunutta salausta (se kutsuttiin Vernam-Vigenère-salaukseksi vuonna 1918), mutta hänen parannuksistaan ​​​​huolimatta salaus pysyi alttiina krypta- analyysille . Vernamin työ johti kuitenkin lopulta Vernam-salaukseen , jota on todellakin mahdotonta rikkoa. [9]

Kuvaus

Caesar - salauksessa aakkosten jokaista kirjainta on siirretty useilla paikoilla; esimerkiksi Caesar-salauksessa, kun siirtymä on +3, A:sta tulisi D, B:stä E ja niin edelleen. Vigenèren salaus koostuu useista Caesar-salauksista, joilla on erilaiset siirtoarvot. Salaukseen voidaan käyttää aakkostaulukkoa nimeltä tabula recta tai Vigenèren neliö (taulukko). Mitä tulee latinalaisiin aakkosiin, Vigenère-taulukko koostuu 26 merkin riveistä ja jokaista seuraavaa riviä on siirretty useiden paikkojen verran. Siten taulukossa on 26 erilaista Caesar-salausta. Kussakin salausvaiheessa käytetään erilaisia ​​aakkosia, jotka valitaan avainsanan luonteen mukaan. Oletetaan esimerkiksi, että lähdeteksti näyttää tältä:

ATTACKATDAWN

Viestin lähettäjä kirjoittaa avainsanan (" LEMON ") silmukaksi, kunnes sen pituus vastaa alkuperäisen tekstin pituutta:

SItruunasitruuna

Selkeän tekstin ensimmäinen merkki ("A") on salattu sekvenssillä L, joka on avaimen ensimmäinen merkki. Salatekstin ensimmäinen merkki ("L") on Vigenèren taulukon rivin L ja sarakkeen A leikkauskohdassa. Vastaavasti lähdetekstin toiselle merkille käytetään avaimen toista merkkiä; toisin sanoen salatekstin toinen merkki ("X") saadaan rivin E ja sarakkeen T leikkauspisteestä. Loput selkeästä tekstistä salataan samalla tavalla.

Alkuperäinen teksti: ATTACKATDAWN Avain: LEMONLEMONLE Salateksti: LXFOPVEFRNHR

Salauksen purku suoritetaan seuraavasti: Vigenère-taulukosta löydetään avainsanan ensimmäistä merkkiä vastaava rivi; tästä merkkijonosta löydämme salatekstin ensimmäisen merkin. Sarake, jossa tämä merkki sijaitsee, vastaa lähdetekstin ensimmäistä merkkiä. Seuraavat salakirjoitusmerkit puretaan samalla tavalla.

Jos  on aakkosten kirjainten  lukumäärä, on selväkielisen kirjaimen  numero, on aakkosten avainkirjaimen numero, Vigenèren salaus voidaan kirjoittaa seuraavasti:

Ja salauksen purku:

[kymmenen]

Tietokoneessa tällainen toiminto vastaa viestimerkkien ASCII-koodien lisäämistä ja näppäin modulo some. Näyttää siltä, ​​​​että jos taulukko on monimutkaisempi kuin rivien syklinen siirto, salauksesta tulee luotettavampi. Tämä pitää paikkansa, jos sitä muutetaan useammin, esimerkiksi sanasta sanaan. Mutta tällaisten taulukoiden laatiminen, jotka ovat latinalaisia ​​neliöitä, joissa mikä tahansa kirjain esiintyy kerran rivissä tai sarakkeessa, on työlästä ja se tulisi tehdä vain tietokoneella. Manuaalisessa moniaakkosisessa salauksessa ne luottavat vain avaimen pituuteen ja monimutkaisuuteen käyttämällä annettua taulukkoa, jota ei voida pitää salassa, mikä yksinkertaistaa salausta ja salauksen purkamista. [yksitoista]

Sovellus

1800-luvulla niin sanottu pad-salausmenetelmä yleistyi. Sitä käyttivät populistiset vallankumoukselliset , vakoojat jne. Salaus käyttää kielestä otettuja lauseita salausavaimena. Esimerkiksi lause: "14. heinäkuuta - Marian syntymäpäivä." Jos käytämme esimerkeissä hyväksyttyä englannin aakkosten kirjainten numerointia, niin Marysbirthday tarkoittaa . Iamgoing ↔ -lauseen salaamiseksi mod26-teksti lisätään avaimeen, joka on tallennettu lause. Se käy ilmi

↔ UADEGJV X.

Kuten näette, tässä tapauksessa tämä on tavallista pelaamista . Ranskalainen kryptografi Vigenère ehdotti tämän tyyppisen avaimen käyttöä myös tapauksissa, joissa teksti on pidempi kuin avain, pakottamalla se niin monta kertaa kuin on tarpeen. Tässä tapauksessa ei ole ollenkaan välttämätöntä, että avainta saadaan merkityksellisestä lauseesta. Lisäksi se on jopa ei-toivottavaa, koska mielekkyys voi auttaa salauksen murtajaa. Otetaan esimerkiksi teksti:

ISÄNMAAN SAVU ON MEILLE MAKEAA JA ILOISTA ↔ ja avain: .

Salaus saadaan gamma mod26:lla:

Joten Vigenèren salaus saadaan toistuvana siirtoyhdistelmänä. Yleensä tämä salaus ei säilytä kirjainten esiintymistiheyttä , eikä sitä siksi voida suoraan kohdistaa tilastolliseen analyysiin.

Cryptanalysis

Vigenère-salaus "hämärtää" tekstissä esiintyvien merkkien esiintymistiheysominaisuudet, mutta joitain piirteitä tekstin merkkien esiintymisestä säilyy. Vigenère-salauksen suurin haitta on, että sen avain toistuu. Siksi salauksen yksinkertainen krypta-analyysi voidaan rakentaa kahdessa vaiheessa:

  1. Avaimen pituuden haku. On mahdollista analysoida taajuuksien jakautumista salatekstissä eri desimaatioilla. Eli otetaan teksti, joka sisältää salatekstin joka 2. kirjaimen, sitten joka 3. jne. Heti kun kirjainten taajuuksien jakauma eroaa suuresti tasaisesta (esimerkiksi entropiassa), voidaan puhua löydetystä avaimen pituudesta. .
  2. Kryptoanalyysi. Sarja l Caesar-salausta (jossa l  on löydetty avaimen pituus), jotka yksitellen murtuvat helposti.

Friedman- ja Kasiska-testit voivat auttaa määrittämään avaimen pituuden.

Kasiska-testi ja kuinka se määrittää avaimen pituuden

Charles Babbage kehitti ensimmäisenä hyökkäysalgoritmin Vigenère-salaukseen vuonna 1854. Sysäyksenä algoritmin kehittämiseen oli kirjeenvaihto John H. B. Thwaitesin kanssa. Hän väitti luoneensa uuden salauksen ja toimittaneensa sen Journal of the Society of the Artsille; Kun Babbage osoitti, että Thwaites-salaus oli vain Vigenère-salauksen erikoistapaus, Thwaites pyysi häntä rikkomaan sen. Babbage selvitti tekstin, joka osoittautui Alfred Tennysonin runoksi "The Vision of Syn" , joka on salattu avainsanalla Emily - runoilijan vaimon nimi. Hän ei kuitenkaan julkaissut löytöään. Siksi tämä algoritmi on nimetty Friedrich Wilhelm Kasiskan mukaan, preussilaisen armeijan upseerin mukaan, joka Babbagesta riippumatta kehitti saman algoritmin vuonna 1863. Ja vasta 1900-luvulla, kun tutkijat tutkivat Babbagen muistiinpanoja, ilmestyi tietoa tämän algoritmin ensimmäisestä keksijästä. [12]

Ensin määritellään tietyn tekstin yhteensattumaindeksin käsite . Olkoon tekstin katsottava vastaavan kirjaimista koostuvaa aakkostoa . Olkoon  tämän tekstin pituus. Merkitse kirjaimen esiintymiskertojen lukumäärällä numerolla tekstissä . Sitten tekstihakuindeksi määritellään muodossa

.

On empiirisesti todistettu, että pitkien, merkityksellisten englanninkielisten tekstien, kuten Mellvillen Moby Dick , hakuindeksi on noin 0,065. Tässä tapauksessa tekstissä on tietysti vain 26 englannin aakkosten kirjainta. Samaan aikaan täysin satunnainen, melko pitkä 26 kirjaimen teksti, jossa kaikki kirjaimet esiintyvät suunnilleen yhtä monta kertaa, on yhtä suuri kuin 0,038. On huomattu, että mitä "merkityksempi" teksti on, sitä korkeampi sen yhteensattumaindeksi. Tämä seikka auttaa vain laskemaan avaimen pituuden Vigenère-salauksessa.

Olkoon  alkuperäinen teksti, jossa  on sen th kirjain ja  sen Vigenère-salaus. Jos käytetään normaalia siirtoa eli avaimen pituutta , yhtälön on oltava voimassa , koska vain kirjainten lukumäärää muutetaan, mutta ei niiden esiintymiskertojen määrää. Koska  on merkityksellinen (oletuksena) teksti, arvo , on suunnilleen sama kuin vakioarvo annetulla kielellä. Tästä syystä pidetään esimerkkinä tavallisesta englannista . Tietenkin on epätodennäköistä, että Vigenère-salausta saadaan yleisessä tapauksessa avaimella, jonka pituus on 1. Siksi seuraavat hakuindeksit lasketaan peräkkäin: asti .






Tämä voi tarkoittaa, että avaimen pituus on , vaikka se voi olla väärä jälki.

Todellakin, jos avaimen pituus on yhtä suuri kuin , teksti saadaan siirrosta, joten se tallentaa , ja teksti puolestaan ​​on satunnainen näyte merkityksellisestä tekstistä, joten sen on säilytettävä tilastolliset ominaisuutensa, erityisesti otteluindeksi.

Jos jonkun kielen hakuindeksiä ei tunneta, on myös Kasiski-testin käyttö mahdollista. Sattumaindeksien saatuja arvoja ei tarvitse verrata vakioarvoon, vaan seurata, milloin tämä indeksi kasvaa jyrkästi. Tämä voi tarkoittaa löydettyä avaimen pituutta. Tietenkin puhumme merkityksellisten ja samalla melko pitkien tekstien purkamisesta. Muodollisten kielten merkityksellisyyden käsite ei kuitenkaan ole helppo käsite.

Toinen Kasiski-testin sovellus on tarkistaa, että salauksessa havaittujen kirjainten taajuudet säilyvät. Olkoon  salateksti, ja salausalgoritmi on tuntematon. Jos tiedetään, että käytettiin normaaleja englannin aakkosia ja arvo on lähellä 0,065, tämä viittaa siihen, että käytettiin taajuutta säilyttävää salausta. On mahdollista, että tämä on yksinkertainen korvaava salaus. Tilanteessa, jossa arvo on kaukana 0,065:stä, voidaan olettaa, että käytettiin salausta, joka ei säilyttänyt taajuutta, tai teksti oli merkityksetöntä tai käytettiin eri aakkosia jne. Sanalla sanoen, jokin osoittautui väärin ja syvempää analyysiä tarvitaan.

Palataan Vigenèren salaukseen. Määritetään oikein avaimen pituus, joka on yhtä suuri kuin . Nyt sinun on löydettävä itse avain.

Kielen kirjainten standarditaajuuksien mukaan rakennetulla histogrammilla on omat erityispiirteensä. Ne selittyvät englannin kielen erittäin epätasaisella kirjainten käytöllä. Tämä epätasaisuus mahdollistaa taajuusanalyysin tehokkaan soveltamisen.

Ensinnäkin kirjaimia A, E, H, I, N, O, R, S, T vastaavat ”huiput” ja kirjaimia J, Q, X, Z vastaavat ”kannot” herättävät huomion. vierekkäin on jopa kokonainen trio: R, S, T. Kaikki yhdessä antavat hyvin konkreettisen helpotuksen.

Jos käytetään 4:n siirtoa, kuva muuttuu syklisesti. On syklinen helpotussiirto 4 yksiköllä. Jos et tiedä muutoksen suuruutta, sen palauttaminen ei ole vaikeaa terveen järjen ohjaamana.

Pyörivät koneet

Vigenère-salausta on mahdollista parantaa pitämällä mielivaltaisten korvausten yhdistelmää toistuvana avaimena: . Tämä tarkoittaa, että lähdetekstin yksiköt muunnetaan yksiköiksi vastaavasti jne.

Kun tällaista salausta murretaan, kuten Vigenèren salauksen tapauksessa, on ensin määritettävä avaimen pituus . Tämä voidaan tehdä Kasiski-testillä samalla tavalla kuin kuvatussa tapauksessa. Lisäksi taajuusanalyysiä voidaan soveltaa substituutioiden määrittämiseen.

Taajuusanalyysi

Kun avaimen pituus on tiedossa, salateksti voidaan kirjoittaa useisiin sarakkeisiin, joista jokainen vastaa avaimen yhtä merkkiä. Jokainen sarake koostuu alkuperäisestä tekstistä, joka on salattu Caesar-salauksella ; Caesar-salauksen avain on vain yksi merkki Vigenère-salauksen avaimesta, jota käytetään tässä sarakkeessa. Salateksti voidaan purkaa käyttämällä samanlaisia ​​tekniikoita kuin Caesar-salauksen murtamisessa. Kasiskan testin parannus, joka tunnetaan nimellä Kirchhoff-menetelmä, vertaa sarakkeiden merkkien esiintymistiheyttä lähdetekstin merkkien esiintymistiheyteen löytääkseen sarakkeen avainmerkin. Kun kaikki avaimen merkit ovat tiedossa, kryptanalyytikko voi helposti purkaa salatekstin selkeästä tekstistä. Kirchhoffin menetelmää ei voida soveltaa, kun Vigenère-taulukkoa sekoitetaan tavallisen aakkosjärjestyksen sijaan, vaikka Kasiska-testillä ja vastaavuustesteillä voidaan silti määrittää avaimen pituus tässä tapauksessa. [13]

Maininnat kirjallisuudessa

Jules Verne kirjoitti vuonna 1881 romaanin Jangada . Tässä romaanissa kirjailija käytti Vigenère-salausta asiakirjan salaamiseen. Salatekstinä kirjoittaja käyttää seuraavaa asiakirjaa:

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

Tarinan aikana sankarit löytävät katkelman tämän asiakirjan salatusta sanasta: ORTEGA Sankarit arvasivat, että tämä nimi voisi tarkoittaa asiakirjan lopussa olevaa allekirjoitusta. Näin se tulee ulos:

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

Siksi avain on 432513. Kun tiedät avaimen, voit helposti kääntää tämän asiakirjan:

TIMANTTIVARKAUKSEN TODELLINEN SYY SGUCHPVELL ZIRTEPND NFGIN BORGYUG JA SUOJELUSOTUKSIEN TAPAAMINEN YÖSÄ L CHDKOTKHZHG UUMZDH RЪSGSYu D TPIA RV TAMMIKUUDEN KAHDENKYMINEN TOINEN TUH YGGISCHVCHE ETSSTUZH VSEVHA HYAFBBB KAHDENSAADATAKAHDENKUUDES ETFZSEFTKh ZHZBZЪGFB SCHIKHHRIP ZHTZV EI JOAM DACOSTA, Epäreilu AT TJ YTGO YBNTFFFE OIKHTEGIIIOKZP TFL PUHUTU KUOLEMAAN, JA MINÄ ONNELLINEN EUGSFIPTM O FOKSHM G B TJFYGUCHOYUN TIMANTTIOSASTON TYÖNTEKIJÄ FNSHZGALL SCHRUDENKOLG GNSBCSSEU LÄÄNI; KYLLÄ, MINÄ OLEN YKSI, MISSÄ JA ALLEKIRJOITUKSET PNFTSEE EG G SZHNO JA YIO N RSITKTS SOTA OIKEASSA NIMESSI, EDBUB TETLO TBFTSSBUYP MPZTZHP ORTEGA TUFKDG

Vaihtoehdot

On monia muita mieleenpainuvia neliöitä, joita voidaan käyttää polyaakkosjärjestelmän perustana samalla tavalla kuin Vigenèren neliö. Yksi kuuluisimmista on Beaufort-aukio . Sen linjat ovat Vigenèren aukion viivoja, jotka on kirjoitettu käänteisessä järjestyksessä. Se on nimetty  tuulen nopeusasteikon keksijän amiraali Sir Francis Beaufortin mukaan. Jos Vigenèren neliössä ensimmäinen rivi ja sarake osoittavat rivejä ja sarakkeita, niin Beaufortin neliössä ensimmäinen rivi ja viimeinen sarake palvelevat näitä tarkoituksia. [neljätoista]

Vigenère-salauksen juokseva avainmuunnos oli aikoinaan särkymätön. Tämä versio käyttää avaimena yhtä pitkää tekstilohkoa kuin alkuperäinen teksti. Koska avain on yhtä pitkä kuin viesti, Friedmanin ja Kasiskin ehdottamat menetelmät eivät toimi (koska avainta ei toisteta). Vuonna 1920 Friedman havaitsi ensimmäisenä tämän vaihtoehdon haitat. Vigenère-salauksen käynnissä olevan avaimen ongelmana on, että kryptaanalyytikolla on tilastotietoa avaimesta (kunhan tekstilohko on kirjoitettu tunnetulla kielellä) ja tämä tieto heijastuu salatekstiin. Jos avain on todella satunnainen, sen pituus on yhtä suuri kuin viestin pituus ja sitä on käytetty kerran, niin Vigenère-salaus on teoriassa särkymätön, itse asiassa tämä vaihtoehto on jo Vernam-Vigenèren salaus, jolle absoluuttinen kryptografinen vahvuus on todistettu.

Huolimatta Vigenère-salauksen ilmeisestä vahvuudesta, sitä ei käytetty laajalti Euroopassa. Yleisempi oli kreivi Gronsfeldin luoma Gronsfeldin salaus , joka oli identtinen Vigenèren salauksen kanssa, paitsi että siinä käytettiin vain 10 erilaista aakkostoa (vastaten numeroita 0-9). Gronsfeld-salauksen etuna on, että avaimena ei käytetä sanaa, vaan digitaalista sekvenssiä, jota toistetaan, kunnes se on yhtä suuri kuin salatun viestin pituus. Gronsfeld-salausta käytettiin laajalti kaikkialla Saksassa ja Euroopassa puutteistaan ​​huolimatta.

Toteutus

JavaScript

Koodi //Voit kopioida ja liittää koko tämän koodin selainkonsoliisi. var a = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ; //Aakkosmerkkijono var m = "ATTACKATDAWN" ; //Viesti var k = "SItruuna" ; //Avain function Vizhener ( m , k , mode ){ //(salaa/purkaa salaus) for "Gronsfeld" + "Vizhener" + "Beaufort" + "Shifted Atbash" //m - viesti tai salateksti (voi olla myös avain, jos Beaufort salaus ), //k - avain (tai viesti/salausteksti, jos Beaufortin salaus), //mode - mode: // Salaus: "salaa" (oletus), // Salauksen purku: "decrypt" (mode === 'decrypt' ), // Salaus-salauksen purku siirretyn atbash-taulukon mukaan: (mode==='shifted_atbash') // Poimi numerot Gronsfeldin salausavaimesta: "gronsfeld" tai "gronsfeld_encrypt", "gronsfeld decrypt". var maxlength = Math . max ( m . pituus , k . pituus ); var r = '' ; //Tyhjä tulos kohteelle ( i = 0 ; i < maxlength ; i ++ ){ //salaa/pura salaus //Vizhener - salaa/purkaa yksi forumula (salaa - oletuksena; pura salaus - when (mode === 'purkaa salaus' ) var mi = a . indexOf ( m [ ( ( i >= m . pituus ) ? i % m . pituus : i ) ] ); //sovita viesti/salausteksti - avaimeen (jos pienempi) var ki_s = k [ ( ( i >= k . pituus ) ? i % k . pituus : i ) ]; //sovita avain viestiin/salatekstiin (jos lyhyt) var ki = ( modeof type !== 'undefined' && mode . indexOf ( ' gronsfeld' ) !== - 1 ) ? parseInt ( ki_s ) : a . indexOf ( ki_s ); //vähennys salauksen purkamisen tai summauksen aikana. ki = ( ( tyypin tyyppi !== 'määrittämätön' && -tila . indexOf ( ' decrypt ' ) !== - 1 ) ? ( - ki ) : ki ); c = a [ ( ( ( a . pituus + ( mi + ki ) ) % a . pituus ) ) ]; //symboli Vigenère-taulukon mukaan. c = ( tila === 'shifted_atbash' ) ? a [ a . pituus - 1 - a . indexOf ( c )] : c ; // Atbash-merkki tai merkki. r += c ; //Lisää merkki tulokseen. } return r ; //palauttaa tulosmerkkijono } //Testit: //yksi. Gronsfeldin salaus. (Katkaistu versio Vigenère-salauksesta). //Parametrit: m - viesti/salausteksti, k - avain (vain numerot), tila - "salaus/purku" -konsoli . log ( '\n\n1. Gronsfeld-salaus (Vigenère-salauksen kuorittu versio digitaalisella avaimella):' , '\n' + 'm =' , 'GRONSFELD' , ' - viesti' , '\n' + 'k = ' , '2015' , '- avain' , '\n' + 'Gronsfeld-salaus - salaus: ' , Vizhener ( 'GRONSFELD' , '2015' , 'gronsfeld' ) //tuottaa IRPSUFFQF -salauksen , Grons ':n ' + 'Gronsfeldin salaus - pura: ' , Vizhener ( Vizhener ( 'GRONSFELD' , '2015' , 'gronsfeld' ), '2015' , 'gronsfeld decrypt' ) //tuottaa GRONSFELDin - Grons \ d -salauksesta n' + 'Vertaa viestiin: ' , "( purettu === m )" , ( Vizhener ( Vizhener ( 'GRONSFELD' , '2015' , 'gronsfeld' ), '2015' , 'gronsfeld_decrypt' ) === ' GRONSFELD' ) // m?true ); //2. Myös numeroiden sijasta Gronsfeld-salauksessa on mahdollista osoittaa myös kirjaimia. //Sitten Gronsfeld-salauksesta tulee tavallinen Vigenère-salaus, mutta merkkirajoituksella avainta kohti. //Esimerkiksi kun avaimessa "0123456789" on kaikki mahdolliset numerot, avain voi olla vain kirjaimista "ABCDEFGHIJ" //Saat sen näin: var Gronsfeld_key = '2015' ; var Vizhener_key = Gronsfeld_avain . jakaa ( '' ). kartta ( funktio ( x ){ return a [ parseInt ( x )]}). liity ( '' ); //CABF //Ja päinvastoin: var Gronsfeld_key2 = Vizhener_key . jakaa ( '' ). kartta ( funktio ( x ){ return a . indexOf ( x )}). liity ( '' ); //2015 //Tässä ne ovat, konsolissa: konsoli . log ( '\n2. Muunnetaan Gronsfeld-avain Vizhener-avaimeksi:' , '\nGronsfeld_avain' , Gronsfeld_avain , '\n' + 'Vizhener_avain' , Vizhener_key , '\n' + 'ja takaisin:' , Gronsfeld_avain2 ); //3. Sitten Gronsfeld-salauksen salaus-salauksen purku on työ Vigenère-salauksella: konsoli . log ( "\n3. Gronsfeldin salaus - Vigenère-avaimella, Vizhener-taulukon mukaan:" , '\n' + 'm =' , 'GRONSFELD' , ' - viesti' , '\n' + 'k = ' , Vizhener_avain , '- avain' , '\n' + 'Gronsfeld-salaus - salaus:' , Vizhener ( 'GRONSFELD' , Vizhener_key ) //tuottaa IRPSUFFQF - Beaufort-salauksen , '\n' + 'Gronsfeld-salaus:' - salauksen purku Vizhener ( 'GRONSFELD' , Vizhener_key ), Vizhener_key , 'decrypt' ) //Antaa GRONSFELDin - Beaufort-salauksen. , '\n' + 'Vertailu viestiin: ' , "( purettu === m )" , ( Vizhener ( Vizhener ( 'GRONSFELD' , Vizhener_avain ), Vizhener_key , 'decrypt' ) === 'GRONSFELD' ) //'GRONSFELD'? true ); //neljä. Vigenère-salaus (täysi versio): //Parametrit: m - viesti/salausteksti, k - avain, tila - "salaus"/"purkaa salaus" -konsoli . loki ( '\n4. Vigenère-salaus (täysi versio):' , '\n' + 'm =' , m , ' - viesti' , '\n' + 'k = ' , k , '- avain' , ' " _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 'decrypt' ) //antaa ATTACKATDAWN - Vizhener-salauksen , '\n' + 'Vertailu viestiin: ' , "( purettu === m )" , ( Vizhener ( Vizhener ( m , k , 'salaa' ), k , 'purkaa salaus' ) === m ) //m?true ); //5. Beaufortin salaus - Vigenère-salauksen kautta (on toinen taulukko ja salateksti - siirretty atbash linjoja pitkin). //Parametrit: m - avain, k - viesti/salausteksti, tila - 'decrypt' (vain salauksen purku) //Beaufort-salauksen erikoisuus on, että salauksen purku on salakirjoituksen uudelleensalausta - samalla avaimella. //Toisin sanoen sama operaatio. konsoli . log ( "\n5. Beaufortin salaus (taulukossa - atbash rivi riviltä):" , '\n' + 'm = ' , m , ' - viesti' , '\n' + 'k =' , k , '- avain' , '\n' + 'Beaufort-salaus - Vigenère-taulukon salaus: ' , Vizhener ( k , m , 'decrypt' ) //tuottaa LLTOLBETLNPR - Beaufort-salauksen , '\n' + 'Beaufort-salauksen - Vigenère-taulukon salauksen purku :' , Vizhener ( k , Vizhener ( k , m , 'decrypt' ), 'decrypt' ) //anna ATTACKATDAWN - Beaufort-salauksesta. , '\n' + 'Vertailu viestiin: ' , "( purettu === m )" , ( Vizhener ( k , Vizhener ( k , m , 'purkaa salaus' ), 'purkaa salaus' ) === m ) //m? true ); //6. Siirretty atbash - Vigenère-salauksen kautta (on toinen taulukko ja salateksti - atbash, siirretty riveissä sarakkeissa). //Parametrit: m tai k - viesti/salausteksti ja avain (tai päinvastoin), tila - 'shifted_atbash' (vain salaa + atbash tulokseen) //Ei ole vain sama operaatio (salauksen purku - salateksti on salattu ), mutta se on myös kommutatiivista. //Toisin sanoen tässä n:nnet kirjaimet (viestin/salatekstin) ja avain - voidaan vaihtaa, jolloin saadaan sama tulos. //Juuri tämä, shifted atbash - lähestyy Vernam-salausta, //koska kun salaus puretaan Vernam-salauksella, XOR-toiminnolla ei ole väliä missä avaintavut ovat ja missä salatekstitavut ovat. konsoli . log ( "\n6. Siirretty atbash (atbash-taulukossa, siirretty sekä rivejä että sarakkeita):" , '\n' + 'm =' , m , ' - viesti' , '\n' + 'k =' , k , '- avain' , '\n' + 'Siirretty atbash - Vigener-taulukon salaus: ' , Vizhener ( m , k , 'shifted_atbash' ) //Antaa OCULKEVUIMSI - siirretyn atbash-salauksen. , 'Korvaava kommutatiivisuustesti: ener ' ( k , m , ' shifted_atbash' ) // Sama, olipa avain ja missä viesti on. , ' \n' + ' Siirretty atbash - salauksen purku Vizhener- taulukon avulla : / _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /Sama, missä tahansa avain on, mutta missä salateksti on. , '\n' + 'Vertailu viestiin:' , "( purettu === m )" , ( Vizhener ( k , Vizhener ( k , m , 'shifted_atbash ' ) , ' shifted_atbash ' ) === m ) // m ? _ _ _ _ _ _ _ _ _ jos _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ , 'shifted_atbash' ), 'shifted_atbash' ) ) ) //Kommutatiivisuus? totta );

Delphi 10

Koodi ohjelma Vigenere ; käyttää System . SysUtils , Winapi . Windows ; const cmGronsfeld : tavu = 1 ; cmShiftedAtbash : tavu = 2 ; cmDecrypt : Tavu = 4 ; YesNo : array [ Boolean ] of string = ( 'ei' , 'kyllä' ) ; var log : TStringBuilder ; toiminto VigenereCrypt ( m , k : merkkijono ; tila : tavu = 0 ) : merkkijono ; const a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ; //Aakkosmerkkijono var maxLength , i , mi , ki , ix : Kokonaisluku ; r , ki_s , c : merkkijono ; gronsfeld , shiftedAtbash , purkaa salaus : Boolen ; begin //(salaa/pura salaus) for "Gronsfeld" + "Vigenere" + "Beaufort" + "Shifted Atbash" //m - viesti tai salateksti (voi olla avain, jos Beaufort-salaus), //k - avain (tai viesti/ salausteksti, jos Beaufortin salaus), //tila - tila: // Salaus: "salaa" (oletus), // Pura salaus: "decrypt" (mode === 'decrypt'), // Salaa ja pura salaus siirretyllä atbash-taulukolla: (mode = cmShiftedAtbash) // Poimi numerot Gronsfeldin salausavaimesta: "gronsfeld" tai "gronsfeld_encrypt", "gronsfeld decrypt". maxPituus := m . Pituus ; jos k . Pituus > maxPituus sitten maxLength := k . Pituus ; Tulos := '' ; //Tyhjä tulos gronsfeld := ( mode ja cmGronsfeld ) > 0 ; shiftedAtbash := ( tila ja cmShiftedAtbash ) > 0 ; pura salaus := ( mode ja cmDecrypt ) > 0 ; for i := 0 maksimipituuteen - 1 aloita //salaa/purkaa salaus // Vigenere - salaa/purkaa yksi forumula (salaa - oletusarvoisesti; pura salaus - kun (cmDecrypt on tilassa) ) //sovita viesti/salattu teksti - avaimeen (jos vähemmän) jos i >= m . pituus sitten ix := i mod m . Pituus else ix := i ; mi := a . IndexOf ( m [ ix + 1 ]) ; jos i >= k . pituus sitten ix := i mod k . Pituus else ix := i ; ki_s := k [ ix + 1 ] ; //sovita avain viestiin/salatekstiin (jos lyhyt) if gronsfeld sitten ki := ki_s . Kokonaisluku () else ki := a . IndexOf ( ki_s ) ; //vähennys salauksen purkamisen tai summauksen aikana. jos purkaa niin ki := ki * - 1 ; c := a [(( a . pituus + mi + ki ) mod a . pituus ) + 1 ] ; //symboli Vigenère-taulukon mukaan. jos shiftedAtbash sitten c := a [ a . pituus - a . IndexOf ( c )] ; // Atbash-merkki tai merkki. Tulos := Tulos + c ; //Lisää merkki tulokseen. loppu ; loppu ; toiminto GronsfeldToVigenere ( GfKey : merkkijono ) : merkkijono ; const a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ; //Aakkosmerkkijono var i : Kokonaisluku ; alkaa Tulos := '' ; for i := 1 to Length ( GfKey ) tee Tulos := Tulos + a [ StrToInt ( GfKey [ i ] ) + 1 ] ; loppu ; toiminto VigenereToGronsfeld ( VgKey : merkkijono ) : merkkijono ; const a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ; //Aakkosmerkkijono var i : Kokonaisluku ; alkaa Tulos := '' ; for i := 1 to Length ( VgKey ) do Result := Result + IntToStr ( a . indexOf ( VgKey [ i ])) ; //2015 loppu ; menettely GronsfeldTest () ; const MSG = 'GRONSFELD' ; AVAIN = '2015' ; TXT = '1. Gronsfeld-salaus (Vigenère-salauksen kuorittu versio digitaalisella avaimella):' #13#10 + 'Viesti:' #9 '"%s"' #13#10 + 'Avain:' #9#9 '"%s"' # 13#10 + 'Salaus:' #9 '"%s" (pitäisi olla "IRPSUFFQF")' #13#10 + 'Salauksen purku:' #9 '"%s" (pitäisi olla "%s")' # 13 #10 + 'Match:' #9 '%s' #13#10 ; var salattu , purettu : merkkijono ; alkaa //1. Gronsfeldin salaus. (Katkaistu versio Vigenère-salauksesta). //Parametrit: m - viesti/salausteksti, k - avain (vain numerot), tila - "salaa/purkaa salaus" salattu := VigenereCrypt ( MSG , KEY , cmGronsfeld ) ; //antaa IRPSUFFQF - Gronsfeld salauksen purettu := VigenereCrypt ( salattu , KEY , cmGronsfeld tai cmDecrypt ) ; //antaa GRONSFELDin - Gronsfeld-salauksesta loki . AppendFormat ( TXT , [ MSG , KEY , salattu , salaus purettu , MSG , YesNo [ purettu = MSG ]]) ; loppu ; menettely VigenereToGronsfeldTest () ; const GKEY = '2015' ; TXT = #13# 10'2. Gronsfeld-avaimen muuntaminen Vigenère-avaimeksi:' #13#10 + 'Gronsfeld-avain: "%s" >>> Vigenère-avain: "%s" ja takaisin: "%s"' #13#10 ; var GronsfeldKey2 : merkkijono ; VigenereKey : merkkijono _ alkaa //2. Myös numeroiden sijasta Gronsfeld-salauksessa on mahdollista osoittaa myös kirjaimia. //Sitten Gronsfeld-salauksesta tulee tavallinen Vigenère-salaus, mutta merkkirajoituksella avainta kohti. //Esimerkiksi kun avaimessa "0123456789" on kaikki mahdolliset numerot, avain voi olla vain kirjaimista "ABCDEFGHIJ" //Saat sen näin: VigenereKey := GronsfeldToVigenere ( GKEY ) ; //CABF //Ja päinvastoin: GronsfeldKey2 := VigenereToGronsfeld ( VigenereKey ) ; //2015 loki . AppendFormat ( TXT , [ GKEY , VigenereKey , GronsfeldKey2 ]) ; loppu ; menettely GronsfeldAsVigenereTest () ; const MSG = 'GRONSFELD' ; KEY = 'CABF' ; TXT = #13# 10'3. Gronsfeldin salaus - Vigenère-avaimella, Vigenère-taulukon mukaan:' #13#10 + 'Viesti:' #9 '"%s"' #13#10 + 'Avain:' #9#9 '"%s"' # 13 #10 + 'Salaus:' #9 '"%s" (pitäisi olla "IRPSUFFQF")' #13#10 + 'Salauspurku:' #9 '"%s" (pitäisi olla "%s")' #13 # 10 + 'Match:' #9 '%s' #13#10 ; var salattu , purettu : merkkijono ; alkaa //3. Sitten Gronsfeld-salauksen salaus-salauksen purku on työ Vigenère-salauksella: salattu := VigenereCrypt ( MSG , KEY ) ; //antaa IRPSUFFQF - Beaufort-salauksen decrypted := VigenereCrypt ( salattu , KEY , cmDecrypt ) ; //antaa GRONSFELDin - Beaufort-salauksesta. loki . AppendFormat ( TXT , [ MSG , KEY , salattu , salaus purettu , MSG , YesNo [ purettu = MSG ]]) ; loppu ; menettely VigenereFullTest () ; const MSG = 'ATTACKATDAWN' ; //Viesti KEY = 'SItruuna' ; //Avain TXT = #13#10 '4. Vigenère-salaus (täysi versio):' #13#10 + 'Viesti:' #9 '"%s"' #13#10 + 'Avain:' #9#9 '"%s"' #13#10 + ' Salaus:' #9 '"%s" (pitäisi olla "LXFOPVEFRNHR")' #13#10 + 'Salauksen purku:' #9 '"%s" (pitäisi olla "%s")' #13#10 + 'Match :' #9 '%s' #13#10 ; var salattu , purettu : merkkijono ; alkaa //4. Vigenère-salaus (täysi versio): //Parametrit: m - viesti/salausteksti, k - avain, tila - "salaa"/"purkaa salaus" salattu := VigenereCrypt ( MSG , KEY ) ; //antaa LXFOPVEFRNHR - Vigenere-salauksen decrypted := VigenereCrypt ( salattu , KEY , cmDecrypt ) ; //antaa ATTACKATDAWN - Vigenère-salauksesta loki . AppendFormat ( TXT , [ MSG , KEY , salattu , salaus purettu , MSG , YesNo [ purettu = MSG ]]) ; loppu ; menettely BeaufortTest () ; const MSG = 'ATTACKATDAWN' ; //Viesti KEY = 'SItruuna' ; //Avain TXT = #13#10 '5. Beaufortin salaus (taulukossa - atbash rivi riviltä):' #13#10 + 'Viesti:' #9 '"%s"' #13#10 + 'Avain:' #9#9 '"%s"' #13 #10 + 'Beaufortin Vigenèren salaus:' #13#10 + 'Salaus:' #9 '"%s" (pitäisi olla "LLTOLBETLNPR")' #13#10 + 'Salauksen purku:' #9 '"%s " (pitäisi olla "%s")' #13#10 + 'Match:' #9 '%s' #13#10 ; var salattu , purettu : merkkijono ; alkaa //5. Beaufortin salaus - Vigenère-salauksen kautta (on toinen taulukko ja salateksti - siirretty atbash linjoja pitkin). //Parametrit: m - avain, k - viesti/salausteksti, tila - 'decrypt' (vain salauksen purku) //Beaufort-salauksen erikoisuus on, että salauksen purku on salakirjoituksen uudelleensalausta - samalla avaimella. //Toisin sanoen sama operaatio. salattu := VigenereCrypt ( KEY , MSG , cmDecrypt ) ; //antaa LLTOLBETLNPR - Beaufort-salauksen purettu := VigenereCrypt ( KEY , salattu , cmDecrypt ) ; //antaa ATTACKATDAWN - Beaufort-salauksesta. loki . AppendFormat ( TXT , [ MSG , KEY , salattu , salaus purettu , MSG , YesNo [ purettu = MSG ]]) ; loppu ; menettely ShiftedAtbashTest () ; const MSG = 'ATTACKATDAWN' ; //Viesti KEY = 'SItruuna' ; //Avain TXT = #13#10 '6. Siirretty atbash (atbash-taulukossa, siirretty sekä rivejä että sarakkeita):' #13#10 + 'Viesti:' #9 '"%s"' #13#10 + 'Avain:' #9#9 '"% s "' #13#10 + 'Siirretty atbash - Vigenère-taulukon salaus:' #9 '"%s" (pitäisi olla "OCULKEVUIMSI")' #13#10 + 'Korvaava kommutatiivisuustesti:' #9 '"%s" ( pitäisi olla "OCULKEVUIMSI")' #13#10 + 'Siirtynyt atbash - Vigenère-salauksen purku:' #9 '"%s" (pitäisi olla "ATTACKATDAWN")' #13#10 + 'Korvaava kommutatiivisuustesti:' #9 '" %s"' #13#10 + 'Vertailu viestiin:' #9 '%s' #13#10 + 'Korvaamisen kommutatiivisuus:' #9 '%s' ; var csaMK , csaKM , csaKMK , csaKKM : merkkijono ; alkaa //6. Siirretty atbash - Vigenère-salauksen kautta (on toinen taulukko ja salateksti - atbash, siirretty riveissä sarakkeissa). //Parametrit: m tai k - viesti/salausteksti ja avain (tai päinvastoin), tila - cmShiftedAtbash (vain salaus + atbash tulokseen) //Ei ole vain sama operaatio (salauksen purku - salateksti on salattu), mutta lisäksi se on myös kommutatiivista. //Toisin sanoen tässä n:nnet kirjaimet (viestin/salatekstin) ja avain - voidaan vaihtaa, jolloin saadaan sama tulos. //Juuri tämä, shifted atbash - lähestyy Vernam-salausta, //koska kun salaus puretaan Vernam-salauksella, XOR-toiminnolla ei ole väliä missä avaintavut ovat ja missä salatekstitavut ovat. csaMK := VigenereCrypt ( MSG , KEY , cmShiftedAtbash ) ; //antaa OCULKEVUIMSI - shifted atbash cipher. csaKM := VigenereCrypt ( KEY , MSG , cmShiftedAtbash ) ; //Sama, sillä ei ole väliä missä avain on, vaan missä viesti on. csaKMK := VigenereCrypt ( csaKM , KEY , cmShiftedAtbash ) ; //antaa ATTACKATDAWN - siirretystä atbash-salauksesta. csaKKM := VigenereCrypt ( KEY , csaKM , cmShiftedAtbash ) ; //Sama, sillä ei ole väliä missä avain on, vaan missä salateksti on. loki . AppendFormat ( TXT , [ MSG , KEY , csaMK , csaKM , csaKMK , csaKKM , KylläEi [ csaKKM = MSG ] , KylläEi [( csaMK = csaKM ) ja ( csaKMK = csaKKM )]]) ; loppu ; aloita loki := TStringBuilder . luo () ; kokeile //Testit: GronsfeldTest () ; VigenereToGronsfeldTest () ; GronsfeldAsVigenereTest () ; VigenereFullTest () ; BeaufortTest () ; ShiftedAtbashTest () ; MessageBoxW ( GetDesktopWindow () , PWideChar ( log . ToString ()) , 'Vigenère' , 0 ) ; vihdoin kirjaudu . ilmainen () ; loppu ; loppua .

Ruby

Koodi luokka Salausluokka CryptoError < StandardError ; _ itse ; lopeta attr_reader :alphabet # hyväksyy mielivaltaisen joukon yksilöllisiä merkkejä, voi olla yksi tai useampia kieliä, oletusarvoiset latinalaiset pienet kirjaimet def alustus ( aakkoset = ( 'A' .. 'Z' ) . to_a ) @aakkoset = aakkosten tarkistus_aakkosten loppu # 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 ) . injektoi ( "" ) do | r , kirjain_indeksi | encode_letter_index = ( kirjain_indeksi + key_arr [ char_number_at_text % key_arr . size ] ) % aakkoset . koko char_number_at_text += 1 r + aakkoset [ encode_letter_index ] end end # 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_aphabet_index_arr ( text_srt ) . injektoi ( "" ) do | r , kirjain_indeksi | decode_letter_index = ( kirjain_indeksi + aakkoset . koko - avain_arr [ char_number_at_text % key_arr . size ] ) % aakkoset . koko char_number_at_text += 1 r + aakkoset [ decode_letter_index ] loppu loppu yksityinen def str_to_alphabet_index_arr ( str ) str . merkkiä . kartta tehdä | char | indeksi = aakkoset . index ( char ) jos indeksi indeksi muuten nostaa CryptoError , 'kirjainten tulee olla aakkosissa ' lopussa lopussa def check_alphabet raise CryptoError , 'aakkosten tulee olla array', ellei aakkoset . on? ( Array ) nosta CryptoError , "kirjainten tulee olla merkkijonoja", jos aakkoset . minkä tahansa? { | kirjaimet | ! kirje . on? ( String ) } raise CryptoError , 'aakkosten tulee sisältää vähintään yksi kirjain', jos aakkoset . koko < 1 nosta CryptoError , "kirjainten tulee olla yksilöllisiä", jos aakkoset . ainutlaatuinen . koko != aakkoset . kokoa korottaa CryptoError , 'kirjain ei saa olla tyhjä', jos aakkoset . minkä tahansa? ( & :tyhjä? ) nosta CryptoError , 'kirjainten tulee sisältää vain yksi merkki', jos aakkoset . minkä tahansa? { | kirjaimet | kirje . koko ! = 1 } loppupää # esimerkit krypto = krypto . uusi krypto . encode ( 'LEMON' , 'ATTACKATDAWN' ) # "LXFOPVEFRNHR" krypto . purkaa ( 'LEMON' , 'LXFOPVEFRNHR' ) # "ATTACKATDAWN" krypto . encode ( 'LEMON' , 'attack' ) # Crypto::CryptoError: kirjainten tulee olla aakkosissa eng_crypto = Salaus . new (( 'A' .. 'I' ) . to_a ) rus_crypto . encode ( 'KVAS' , 'MAMAMYLARAMU' ) # "TSVMSTSELSЪVMD" rus_crypto . purkaa ( 'KVAS' , ' TSVMTSELSЪVMD' ) # "MAMAMYLARAMU"

Muistiinpanot

  1. ↑ Martin , Keith M. Everyday Cryptography  . — Oxford University Press, 2012. — s. 142 s. — ISBN 978-0-19-162588-6 .
  2. Diskreetti matematiikka: Algoritmit. Historiallinen ääriviiva (pääsemätön linkki) . rain.ifmo.ru Haettu 22. joulukuuta 2017. Arkistoitu alkuperäisestä 21. joulukuuta 2017. 
  3. Sergey ja Marina Bondarenko . Salauksia menneisyydestä: salaus ja mysteerit tietokonetta edeltäneeltä aikakaudelta  (venäläinen) , 3DNews - Daily Digital Digest  (8. heinäkuuta 2015). Haettu 22. joulukuuta 2017.
  4. ↑ 1 2 3 4 5 6 7 Babash A.V., Shankin G.P. Krypografian historia. Osa I. - M .: Helios ARV, 2002. - S. 240 p .. - ISBN 5854380439 .
  5. Smith, Laurence D. Korvaussalaukset // Salakirjoitus salaisen kirjoittamisen tiede: salakirjoituksen  tiede . - Dover Publications , 1943. - S. 81. - ISBN 0-486-20247-X .
  6. ↑ 1 2 Nosov V. A. Lyhyt historiallinen luonnos kryptografian kehityksestä  (venäläinen)  // Moskovan yliopisto ja kryptografian kehitys Venäjällä. Moskovan valtionyliopiston konferenssin materiaalit .. - (17. lokakuuta 2002).
  7. ↑ 1 2 3 David, Kahn. Codebreakers: Salaisen kirjoittamisen tarina. - Simon & Schuster, 1999. - ISBN 0-684-83130-9 .
  8. Knudsen, Lars R. Block Ciphers — kysely. - Lontoo: Springer, 1997. - ISBN 3-540-65474-7 .
  9. Stanislaw Jarecki. Crypto Overview, Perfect Secrecy, One-time Pad  // University of California. – 2004.
  10. Richard A. Mollin. Koodit: Salassapitoopas muinaisista ajoista nykyaikaan. - Chapman ja Hall/CRC, 2005. - 704 sivua s. — ISBN 9781584884705 .
  11. Zhelnikov V. Kryptografia papyruksesta tietokoneeseen - M .: ABF , 1996. - 336 s. — ISBN 978-5-87484-054-9
  12. Singh S. Koodikirja: Salassapitotiede muinaisesta Egyptistä kvantti kryptografiaan. - New York City: Doubleday, 1999. - 416 s. Kanssa. - ISBN 978-1-85702-879-9 .
  13. Laboratorioharjoitus: Vigenere, RSA, DES ja Authentication Protocols  // CS 415: Computer and Network Security. - 2006. Arkistoitu 23. heinäkuuta 2011.
  14. Arto Salomaa. Julkisen avaimen kryptografia. — ISBN 3540528318 .

Kirjallisuus

  • Romankov V.A. Johdatus kryptografiaan: luentokurssi, 2009. - 238 s. — ISBN 5777909825 .
  • Babash A. V., Shankin G. P. Krypografian historia. Osa I. - M .: Helios ARV, 2002. - 240 s. — ISBN 5854380439 .
  • Zhelnikov V. Kryptografia papyruksesta tietokoneeseen - M .: ABF , 1996. - 336 s. — ISBN 978-5-87484-054-9
  • Arto Salomaa. Julkisen avaimen kryptografia. — ISBN 3540528318 .
  • N. Smart. Kryptografia .. - Moskova: Technosfera, 2005. - 528 s. - ISBN 5-94836-043-1 .
  • Singh S. The Code Book , Histoire des codes secrets  (englanniksi) : The Secret of Secrety from Ancient Egypt to Quantum Cryptography, De l'Égypte des pharaons à l'ordinateur quantique - NYC : Doubleday , Knopf Doubleday Publishing Group9, —1999 . 416 s.
  • Richard A. Mollin. Koodit: Salassapitoopas muinaisista ajoista nykyaikaan. - Chapman ja Hall/CRC, 2005. - 704 sivua s. — ISBN 9781584884705 .
  • Martin, Keith M. Everyday Cryptography. - Oxford University Press, 2012. - 142 s. — ISBN 978-0-19-162588-6
  • Knudsen, Lars R. Block Ciphers – kysely. - Lontoo: Springer, 1997. - ISBN 3-540-65474-7 .
  • Henk Ca van Tilborg. Encyclopedia of Cryptography and Security. - Springer, 2005. - 115 s. — ISBN 038723473X .
  • Arto Salomaa. Julkisen avaimen kryptografia. — ISBN 3540528318 .

Linkit