Caesar-salaus , joka tunnetaan myös nimellä vaihtosalaus , Caesar-koodi on yksi yksinkertaisimmista ja tunnetuimmista salausmenetelmistä.
Caesar-salaus on korvaussalauksen tyyppi, jossa jokainen selkeän tekstin merkki korvataan merkillä, joka on vakiomäärä aakkosten vasemmalla tai oikealla puolella . Esimerkiksi salauksessa, jonka siirto oikealle on 3, A korvattaisiin D:llä, B:stä tulisi D ja niin edelleen.
Salaus on nimetty roomalaisen kenraalin Gaius Julius Caesarin mukaan, joka käytti sitä salaiseen kirjeenvaihtoon kenraalien kanssa.
Caesar-salauksen suorittama salausvaihe sisältyy usein osaksi monimutkaisempia järjestelmiä, kuten Vigenère-salausta , ja sillä on edelleen moderni sovellus ROT13 -järjestelmässä . Kuten kaikki yksiaakkosiset salakirjoitukset , Caesar-salaus on helppo murtaa, eikä sillä ole käytännössä mitään käyttöä.
Jos yhdistämme aakkosten jokaisen merkin sen sarjanumeroon (numerointi alkaen 0), salaus ja salauksen purku voidaan ilmaista modulaarisen aritmeettisen kaavan [1] [2] avulla :
missä on selvätekstimerkki, on salatekstin merkki, on aakkosten voima ja avain.
Matemaattisesti Caesar-salaus on affiinisen salauksen erikoistapaus .
Salaus avaimella . Kirjain "E" "siirtää" kolme kirjainta eteenpäin ja muuttuu kirjaimeksi "Z". Kolmella kirjaimella eteenpäin siirretystä kovasta merkistä tulee "E", kolmella eteenpäin siirretystä I-kirjaimesta tulee "B" ja niin edelleen:
Alkuaakkoset: A B C D E F G H I J K L M N O P R S T U V X Z Salattu: D E F G H I J K L M N O P R S T U V X TAlkuperäinen teksti:
Syö lisää noita pehmeitä ranskalaisia pullia ja juo teetä.Salattu teksti saadaan korvaamalla jokainen alkuperäisen tekstin kirjain vastaavalla salakirjoitusaakkoston kirjaimella:
Fezyya iz zyi akhlsh pvenlsh chugrschtskfnlsh dtsosn, zhg eyutzm gb.
Koodi on kirjoitettu ja suoritettu kahdella kielellä: venäjäksi ja englanniksi.
# Teksti, jonka käyttäjä haluaa syöttää text = input ( "Syötä teksti, jonka haluat salata: " ) # Käyttäjä syöttää avaimen k = int ( input ( "Määritä avain: " )) # Käyttäjä syöttää kielen salattava teksti kieli = syöttö ( "Millä kielellä kirjoitit tekstin (venäjä, englanti): " ) # Salaustoiminto kolmella parametrilla: teksti, avain, kieli def ceaser_cipher ( user , key , lang ): # Salauksen muuttuva tulos; muuttuja, joka määrittää isot ja pienet kirjaimet res , n = [], "" # Tarkistetaan käyttäjän valitsemaa kieltä # Tarkista, onko valittuna venäjän kieli (käyttäjän kirjoittamilla kirjaimilla ei ole merkitystä) , jos lang . alempi () in [ "venäläinen" , "venäläinen" ]: # "abvgdeezhziyklmnoprstufhtschshshzhyyeyuya"=dictionary_upper,sanakirjaKaksi muuttujaa on määritetty pienet ja isot venäjän aakkoset vastaavasti elif lang . alempi () in [ "English" , "english" ]: # Kaksi muuttujaa on määritetty pienet ja isot englanniksi, vastaavasti sanakirja , dictionary_upper = "abcdefghijklmnopqrstuvwxyz" , "ABCDEFGHIJKLMNOPQRSTUVWXYZ" muuten : paluu "Tämä kieli" ei ole vaihtoehdossa # Testisilmukka, jossa jokainen iteraatio käsittelee yhden merkin tekstistä peräkkäin i :lle alueella ( len ( user ) ): # Tarkista isot tai pienet kirjaimet # Onko merkki pienillä kirjaimilla, jos käyttäjä [ i ] sanakirjassa : n = sanakirja # Onko merkki isoilla kirjaimilla elif user [ i ] sanakirjassa_upper : n = sanakirja_upper # Merkki ei ole pieni eikä iso kirjain (merkki ei ole kirjain) else : res . liitä ( käyttäjä [ i ]) # Jos merkki on luettelossa n (se on kirjain), se salataan, jos käyttäjä [ i ] alueella n : # Aakkosilmukka j :lle alueella ( len ( n ) ): # Jos merkkijonon sarjanumero kirjain + avain ovat välillä 0 aakkosten # loppuun ja jos tekstin kirjain vastaa aakkosten kirjainta, niin: jos 0 <= j + näppäin < len ( n ) ja käyttäjä [ i ] == n [ j ]: # Kirjain lisätään tulokseen vaihtonäppäimellä (salattu kirjain) res . liitä ( n [ j + näppäin ]) # Jos kirjaimen + järjestysnumero on aakkosten alueen ulkopuolella, ylittää sen # ja jos tekstin kirjain vastaa aakkosten kirjainta, niin: elif j + avain >= len ( n ) ja käyttäjä [ i ] == n [ j ]: # Tulokseen lisätään kirjain vaihtonäppäimellä, # samalla kun kirjaimen sarjanumero muunnetaan aakkosten alueeksi (salattu kirjain ) res . liitä ( n [( 1 - j - näppäin ) % ( len ( n ) - 1 )]) # Jos kirjaimen järjestysnumero + näppäin on aakkosten alueen ulkopuolella, jää alle sen # ja jos tekstin kirjain vastaa aakkosten kirjainta, sitten : elif j + avain < 0 ja käyttäjä [ i ] == n [ j ]: # Lisää tulosnäppäimeen siirretty kirjain, # samalla kun muunnat kirjaimen sarjanumeron aakkosalue (salattu kirjain) res . liitä ( n [( j + näppäin ) % len ( n )]) # Funktio palauttaa salatun tekstin palautuksen '' . liity ( res ) # Tulosta salatekstitulostus ( ceaser_cipher ( teksti , k , kieli ) )Caesar-salaus on nimetty Julius Caesarin mukaan, joka Suetoniuksen Life of the Twelve Caesarin mukaan käytti sitä vaihteen 3 kanssa suojellakseen sotilasviestejä. Vaikka Caesar oli ensimmäinen kirjattu henkilö, joka käytti tätä järjestelmää, muita korvaussalauksia tiedetään käyttäneen aiemmin.
Jos hänellä oli jotain luottamuksellista lähetettävää, hän kirjoitti sen muistiin salakirjoituksella, toisin sanoen hän muutti aakkosten kirjainten järjestystä niin, että oli mahdotonta erottaa yhtä sanaa. Jos joku halusi tulkita sen ja ymmärtää sen merkityksen, hänen täytyi korvata aakkosten neljäs kirjain, nimittäin A, D ja niin edelleen muilla kirjaimilla.
Gaius Suetonius Tranquill Kahdentoista keisarin elämä, ensimmäinen kirja, luku. 56 [3]
Hänen veljenpoikansa Augustus käytti myös tätä salausta, mutta siirtyi yhdellä oikealle, eikä se toistunut aakkosten alkuun:
Aina kun hän kirjoitti salauksella, hän kirjoitti B:n A:lle, C:n B:lle ja loput kirjaimet samalla periaatteella käyttäen AA:ta X:lle.
Gaius Suetonius Tranquill Kahdentoista keisarin elämä, toinen kirja, ch. 88 [3]
On näyttöä siitä, että Julius Caesar käytti myös monimutkaisempia järjestelmiä [4] .
Ei tiedetä, kuinka tehokas Caesarin salaus tuolloin oli, mutta se oli luultavasti kohtuullisen turvallinen, varsinkin siksi, että useimmat Caesarin viholliset olivat lukutaidottomia ja monet olettivat, että viestit oli kirjoitettu tuntemattomalla vieraalla kielellä [5] . Tuolta ajalta ei ole todisteita menetelmistä yksinkertaisten korvaussalausten rikkomiseen. Varhaisin säilynyt taajuusanalyysin tietue on Al-Kindin 9. vuosisadan työ taajuusanalyysin löytämisestä [6] .
Caesar-salausta, jota on siirretty yhdellä, käytetään mezuzahin takana Jumalan nimien salaamiseen . Tämä saattaa olla jäänne varhaisesta ajasta, jolloin juutalaisilla ei ollut lupaa pitää mezuzaa [7] .
1800-luvulla sanomalehtien ilmoitusten henkilökohtaista osiota käytettiin joskus yksinkertaisilla salakirjoilla salattujen viestien vaihtamiseen. Kahn (1967) kuvaa tapauksia, joissa amatöörit osallistuivat salaiseen viestintään salattuina Caesar-salauksella The Timesissa [8 ] . Jo myöhemmin, vuonna 1915, Caesar-salaukseen löydettiin käyttöä: Venäjän armeija käytti sitä monimutkaisempien, joukkoille liian vaikeiksi osoittautuneiden salausten korvikkeena; saksalaisilla ja itävaltalaisilla kryptanalyytikoilla oli vähän vaikeuksia näiden viestien tulkinnassa [9] .
13-vuoroista Caesar-salausta käytetään myös ROT13 -algoritmissa , yksinkertaisessa tekstin hämärtämismenetelmässä, jota käytetään laajalti Usenetissa , ja sitä käytetään enemmän tapana piilottaa spoilereita kuin salausmenetelmänä [10] . Vigenère-salauksessa käytetään Caesar-salausta eri siirroilla tekstin jokaisessa kohdassa; siirtoarvo määritetään toistuvalla avainsanalla. Jos avainsana on yhtä pitkä kuin viesti, se on luotu satunnaisesti, pidetty salassa ja käytetty vain kerran - tällaista järjestelmää kutsutaan kertaluonteiseksi tyynyksi - ja tämä on ainoa salausjärjestelmä , jonka absoluuttinen kryptografinen vahvuus on todistettu [11 ] .
Viestiä lyhyemmät avainsanat (kuten "Complete Victory", jota Confederacy käytti Yhdysvaltain sisällissodan aikana ) tuovat esiin syklisen kuvion, joka voidaan havaita parannetulla taajuusanalyysin versiolla [12] .
Huhtikuussa 2006 karannut mafiapomo Bernardo Provenzano jäi kiinni Sisiliassa osittain hänen Caesar-salauksen muunnelmalla kirjoitettujen viestiensä kryptausanalyysin vuoksi. Provenzanon salakirjoituksessa kirjaimet korvattiin ensin numeroilla - aakkosten kirjainten sarjanumeroilla, ja Caesar-salausta käytettiin jo tuloksena olevaan numerosarjaan - niin, että kun siirrettiin 3:lla, "A" kirjoitettiin "4", "B" - kuten "5" ja niin edelleen [13] .
Usein Caesar-salauksen käytön helpottamiseksi käytetään kahta eri halkaisijaltaan olevaa levyä, jotka on asennettu yhteiselle akselille ja aakkoset on piirretty levyjen reunoja pitkin. Aluksi levyjä käännetään siten, että jokainen ulomman levyn aakkosten kirjain on vastapäätä pienen levyn aakkosten samaa kirjainta. Jos nyt kierrämme sisälevyä useilla merkeillä, saamme vastaavuuden ulomman levyn ja sisemmän - Caesar-salauksen - symbolien välillä. Tuloksena olevaa levyä voidaan käyttää sekä salaukseen että salauksen purkamiseen [14] .
Esimerkiksi, jos sisäpyörää käännetään niin, että ulkolevyn symboli A vastaa sisemmän levyn symbolia D, saadaan salaus, jonka siirtymä on 3 vasemmalle.
Shift salauksen purku |
pelkkää tekstiä |
---|---|
0 | exxegoexsrgi |
yksi | dwwdfndwrqfh |
2 | cvvcemcvqpeg |
3 | buubdlbupodf |
neljä | hyökkäys |
5 | zsszbjzsnmbd |
6 | yrryaiyrmlac |
… | |
23 | haahjrhavujl |
24 | gzzgiqgzutik |
25 | fyyfhpfytshj |
Caesar-salauksen voi rikkoa helposti, vaikka murskaaja tietää vain salatekstin. Voidaan harkita kahta tilannetta:
Ensimmäisessä tapauksessa salaus voidaan murtaa samoilla menetelmillä kuin yksinkertaisella korvaussalauksella, kuten taajuusanalyysillä jne. Näitä menetelmiä käyttämällä krakkauskone havaitsee todennäköisesti nopeasti ratkaisun säännönmukaisuuden ja huomaa, että salaus on käytetty on Caesarin salaus.
Toisessa tapauksessa salauksen rikkominen on vielä helpompaa. Siirtoarvoille ei ole paljon vaihtoehtoja (26 englanniksi), ne kaikki voidaan tarkistaa raa'alla voimalla [15] . Yksi tapa tehdä tämä on kirjoittaa salateksti kaikkien mahdollisten muutosten sarakkeeseen, tekniikkaa, jota joskus kutsutaan "yksinkertaisen komponentin viimeistelyksi" [16] . Harkitse esimerkkiä salatekstistä "EXXEGOEXSRGI"; Selkeän tekstin silmä tunnistaa välittömästi neljännellä rivillä.
Toinen tapa käyttää tätä menetelmää on kirjoittaa aakkoset salatekstin jokaisen kirjaimen alle, alkaen kyseisestä kirjaimesta. Menetelmää voidaan nopeuttaa käyttämällä valmiiksi valmistettuja aakkosliuskoja. Tätä varten sinun on taitettava nauhat niin, että salattu teksti muodostuu yhdelle riville, sitten jollain toisella rivillä näemme pelkän tekstin.
Toinen lähestymistapa raa'an voiman murtamiseen on tarkistaa kirjainten taajuudet . Piirtämällä kirjainten tiheys salatekstissä ja tietämällä odotetun kirjainten jakautumisen kyseessä olevan kielen pelkkää tekstiä varten, siirtymä voidaan helposti määrittää tarkastelemalla joidenkin piirteiden siirtymää kaaviossa. Tämä menetelmä tunnetaan taajuusanalyysinä . Esimerkiksi englanninkielisessä tekstissä kirjainten E , T , (yleensä yleisin) ja Q , Z (yleensä harvinaisempien) taajuudet ovat erityisen erilaisia [17] . Tämä prosessi voidaan automatisoida antamalla tietokoneohjelman arvioida, kuinka hyvin todellinen taajuusjakauma vastaa odotettua jakaumaa. Esimerkiksi khin neliötestiä [18] voidaan käyttää .
Selkeälle luonnollisen kielen tekstille on todennäköisesti vain yksi dekoodausvaihtoehto. Mutta jos käytät erittäin lyhyitä viestejä, on tapauksia, joissa useita salauksenpurkuvaihtoehtoja eri siirroilla ovat mahdollisia. Esimerkiksi salateksti "MPQY" voidaan dekoodata joko "aden" tai "know" (olettaen, että selkeä teksti on kirjoitettu englanniksi). Vastaavasti "ALIIP" voidaan tulkita "nukeiksi" tai "pyöräksi"; "AFCCP" kuten "jolly" tai "cheer" (katso myös ainutlaatuisuusetäisyys ).
Toistuva salaus ei paranna turvallisuutta millään tavalla, koska siirtosalausten a ja b käyttö vastaa siirtosalauksen a + b käyttöä. Matemaattisesti eri avaimilla salaus muodostaa ryhmän [19] .
![]() |
---|