Täydellinen salausmenetelmä?
Sisällysluettelo
Johdanto⌗
Salauksen ensisijainen tavoite on tehdä selkokielisestä informaatiosta käsittämätöntä, niin että sen luottamuksellisuus (engl. confidentiality) voidaan säilyttää. Informaatio voidaan välittää tai tallettaa luottamuksellisesti oikealle henkilölle ilman, että joku muu voi ymmärtää sen tarkoituksen. Toissijaisina tavoitteina on osoittaa informaation alkuperä (engl. authenticity) ja sen eheys (engl. integrity). Alkuperän ja eheyden osoittamisesta käytetään yleensä termiä varmentaminen.
Salauksessa keskeisiä termejä ovat salausalgoritmi (engl. cipher), selkoteksti (engl. plaintext), salateksti (engl. ciphertext) ja salausavain (engl. cipher key tai vain key). Tietokonemaailmassa englanti on keskeinen kieli, ja sen takia termeistä on esitetty myös käännös.
Salaus perustuu salausalgoritmiin, mikä muuttaa yleensä selkotekstin salatekstiksi salausavaimen avulla. Tämä on onnistuttava myös päinvastaiseen suuntaan; muuten salaus menettää tarkoituksensa. On oltava olemassa avain joka voi myös purkaa salauksen. Monesti se on sama kuin salaamiseen käytetty, mutta ei aina.
One-time pad⌗
Kerta-avainjärjestelmä eli one-time pad (OTP) on yksi yksinkertaisimmista ja samalla vahvimmista salausmenetelmistä. Menetelmä kykenee takaamaan täydellisen luottamuksellisuuden, jos tietyt ehdot täyttyvät. Se ei kuitenkaan kykene takaamaan tiedon alkuperää tai eheyttä. Täydellinen luottamus tarkoittaa, että mahdollinen vastustaja ei voi oppia salatekstistä yhtään mitään, vaikka hänellä olisi rajoittamattomat resurssit.
OTP perustuu modulaariseen lisäykseen, jossa satunnaista ja vähintään samanpituista salausavainta kuin selkoteksti, käytetään tietyn vakion modulon laskentaan yhdessä selkotekstin kanssa. Selkoteksti ja avain yleensä koostuvat arvoista, jotka ovat pienempiä kuin modulus. Selkoteksti ja avain saavat siis lopulta aina numeerisen muodon.
$$ \begin{align} C = (K + P) \bmod M\\ P = (C - K) \bmod M\\\\ & \text{...kun } \begin{cases} \text{K : avain}\\ \text{P : selkoteksti}\\ \text{C : salateksti}\\ \text{M : modulus} \end{cases} \end{align}\\ $$
OTP on murtumaton, jos seuraavat ehdot täyttyvät 1:
- Avaimen täytyy olla vähintään yhtä pitkä kuin selkoteksti
- Avaimen täytyy olla satunnainen
- Avainta ei saa uudelleenkäyttää
- Avain täytyy pitää salassa
Näillä ehdoilla on nurja puolensa; avainten hallinta on monimutkaista, sillä avain pitää aina toimittaa informaation vastaanottajalle salassa, ja avaimen on oltava vähintään yhtä pitkä kuin salattava informaatio. Lisäksi uusi avain tarvitaan aina uutta viestiä varten. Jatkuvaan informaation välittämiseen tämä voi olla mahdoton ratkaisu.
Yksinkertaisin tapaus OTP:stä käyttää modulus arvoa 2, ja se tunnetaan paremmin XOR (bitwsise exclusive or) salauksena tietotekniikassa. Tästä voi saada paremman idean salauksen toimintatavasta.
XOR salauksen periaatteet⌗
XOR salauksessa selkotekstin ja avaimen merkit voivat saada joko arvot 1 tai 0. Tässä yksinkertaisimmassa tapauksessa ei modulolaskentaan tarvitse kiinnittää huomiota, kun on olemassa vain kaksi mahdollista arvoa. Seuraavat laskusäännöt pätevät XOR operaatioissa:
$$ \begin{align} & A ⊕ 0 = A,\\ & A ⊕ A = 0,\\ & A ⊕ B = B ⊕ A,\\ & (A ⊕ B) ⊕ C = A ⊕ (B ⊕ C),\\ & (B ⊕ A) ⊕ A = B ⊕ 0 = B\\ \end{align} $$
Missä $⊕$
määrittää eksklusiivisen disjunktion (XOR) 2
Seuraava esimerkki sisältää XOR salauksen sanalle Wow
.
Koska arvot voivat vaihdella vain nollasta ykköseen, on keksittävä esitystapa, miten kirjamia ja siten ymmärrettävää informaatiota voidaan esittää vain näillä kahdella arvolla.
Tietokonemaailmassa ratkaisu on ns. merkistö, ja yksi yleisimmistä on ASCII.
Voit lukea ASCII merkistöstä täältä lisää.
Allaolevassa esimerkissä ylimmän rivin yksi lohko kuvastaa yhtä kirjainta, jonka binäärinen esitysmuoto on poimittu ASCII taulusta. Toisen rivin arvot ovat satunnaisia, ja viimeinen rivi esittää salateksiä, joka on XOR laskennalla saavutettu. Tekemällä XOR laskennan uudestaan samalla salausavaimella, voidaan saada selkoteksti takaisin salatekstistä.
Testaa itse!⌗
Monet operaatioista voi laskea ihan käsin paperilla, mutta on olemassa työkaluja jotka voivat huomattavasti helpottaa asiaa.
Allaolevalla laatikolla voit hieman kokeilla XOR laskentaa ja binäärimuunnoksia JavaScript ohjelmointikielellä.
Saatko saman salatekstin jos käytät XOR operaatiota jokaiseen Wow
sanan vastaavaan kirjaimeen ja salausavaimen osaan, niin että käytät binäärilukuja?
Laatikko sisältää esimerkin ensimmäisen kirjaimen W
operaatiosta.
Tehtävä⌗
OTP salauksessa oli ehtoja, ennen kuin täydellinen salaus saavutetaan. Lisäksi salaus ei pystynyt varmentamaan tiedon eheyttä tai alkuperää. Salauksella on myös muita ongelmia eräissä tilanteissa, joista seuraava viistoaa myös eheyden ja alkuperän todentamista.
Salauksen yhdestä rajoitteesta otetaan esimerkkitapaus. Tässä tilanteessa käytämme kryptoanalyysissa niin kutsuttua “tunnetun selkotekstin hyökkäystä” (engl. known-plaintext attack (KPA)3), mille OTP on haavoittuvainen. Käytännössä osoitamme, että voimme saada avaimen tietoomme, jos tiedämme selkotekstin ja salatekstin. Osittain tästä syystä, samaa avainta ei saa käyttää uudestaan. Lisäksi voimme tehdä haluamiamme salatekstejä pelkästään tietämällä nämä kaksi asiaa, kunhan ne purkautuvat yhtä pitkään selkotekstiin kuin alkuperäinen. Muuten jää kiinni muokkauksesta!
Tiedät, että erään viestin selkoteksti on Hei, Alice!
.
Viestin XOR salattu (huom. ei ASCII!) muoto näkyy seuraavasta taulukosta:
Merkki | XOR salattu (binääri) | XOR salattu (heksa) |
---|---|---|
H | 10111011 | bb |
e | 00000010 | 02 |
i | 10010011 | 93 |
, | 10110000 | b0 |
11100001 | e1 | |
A | 01011010 | 5a |
l | 10100000 | a0 |
i | 01111101 | 7d |
c | 01111000 | 78 |
e | 00011101 | 1d |
! | 10111011 | bb |
Jos tiivistetään tämä heksadesimaalinen esitysmuoto, Hei, Alice!
on salattuna bb0293b0e15aa07d781dbb
Yritämme osoittaa, että tietämällä selkotekstin ja sen salatekstin, voimme muodostaa salatekstejä, jotka päätyvät haluttuun selkotekstiin, kun salaus puretaan. Ainoana rajoitteena on se, että pituus ei voi olla pidempi kuin alkuperäinen selkoteksti. Se, että miksi tämä on mahdollista, voidaan päätellä XOR salauksen periaatteiden mukaan.
Jos käytetään samaa salausavainta, mikä on selkotekstin Hei, Eve...
salateksti?
Entä mikä on salausavain?
Tämän tehtävän voi tehdä joko ylläolevalla JavaScript laatikolla, tai ns. CyberChef ohjelmalla, mistä voi lukea lisää täältä.
Tehtävän voi tehdä myös kynällä ja paperilla, käyttäen annettua ASCII taulukkoa hyväksi.
Ratkaisuja
Ohessa on esimerkkiratkaisu salatekstin ja salausavaimen saamiseksi CyberChef työkalulla.
Huomioitavaa on, että UTF-8 merkistö jakaa 128:lle ensimmäiselle merkille samat lukuarvot kuin ASCII, ja sen takia tekstiä on voitu suoraan syöttää XOR operaation.
Englanninkielinen Wikipedia kuvaa keskeiset asiat kryptografiasta hyvin, vaikka suorana viittauksena sitä ei olisikaan suositeltavaa käyttää.