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:
- Pt:

- avain:

- Ct:

- Pt:

- avain:

- Ct:

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:
- 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. .
- 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
- ↑ Martin , Keith M. Everyday Cryptography . — Oxford University Press, 2012. — s. 142 s. — ISBN 978-0-19-162588-6 .
- ↑ Diskreetti matematiikka: Algoritmit. Historiallinen ääriviiva (pääsemätön linkki) . rain.ifmo.ru Haettu 22. joulukuuta 2017. Arkistoitu alkuperäisestä 21. joulukuuta 2017. (määrätön)
- ↑ 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.
- ↑ 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 .
- ↑ Smith, Laurence D. Korvaussalaukset // Salakirjoitus salaisen kirjoittamisen tiede: salakirjoituksen tiede . - Dover Publications , 1943. - S. 81. - ISBN 0-486-20247-X .
- ↑ 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).
- ↑ 1 2 3 David, Kahn. Codebreakers: Salaisen kirjoittamisen tarina. - Simon & Schuster, 1999. - ISBN 0-684-83130-9 .
- ↑ Knudsen, Lars R. Block Ciphers — kysely. - Lontoo: Springer, 1997. - ISBN 3-540-65474-7 .
- ↑ Stanislaw Jarecki. Crypto Overview, Perfect Secrecy, One-time Pad // University of California. – 2004.
- ↑ Richard A. Mollin. Koodit: Salassapitoopas muinaisista ajoista nykyaikaan. - Chapman ja Hall/CRC, 2005. - 704 sivua s. — ISBN 9781584884705 .
- ↑ Zhelnikov V. Kryptografia papyruksesta tietokoneeseen - M .: ABF , 1996. - 336 s. — ISBN 978-5-87484-054-9
- ↑ Singh S. Koodikirja: Salassapitotiede muinaisesta Egyptistä kvantti kryptografiaan. - New York City: Doubleday, 1999. - 416 s. Kanssa. - ISBN 978-1-85702-879-9 .
- ↑ Laboratorioharjoitus: Vigenere, RSA, DES ja Authentication Protocols // CS 415: Computer and Network Security. - 2006. Arkistoitu 23. heinäkuuta 2011.
- ↑ 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
Sanakirjat ja tietosanakirjat |
|
---|