Salasanojen vahvuus

(require (planet mbenkard/mulkrypt:1:2/cubehash))

(cubehash-128 #"lyhyt")
(cubehash-128 #"salasana")
(cubehash-128 #"pitkäsalasana")

Muista

planet-funktio hakee paketin Racketin käyttäjien tekemien kirjastojen joukosta.

Tavut

On erilaisia lukujärjestelmiä. Racketissä voidaan kirjoittaa numeroita binäärinä, eli kaksikantaisena, ja heksadesimaalina, eli 16-kantaisena laittamalla lukujen eteen liitteet #b ja #x. Heksadesimaalissa yhdeksää suuremmat numerot esitetään kirjaimilla a:sta f:n.

Tietokoneet tallentavat kaiken tietonsa sisäisesti binäärilukuina, jonka yksittäisiä osia sanotaan biteiksi. Yleensä muisti on jaoteltu yhden tai useamman tavun, eli kahdeksan bitin osiin.

Yksi tavu voi siis sisältää lukuja väliltä #b00000000-#b11111111, eli 0-255. Heksadesimaalina tavut vaativat vain kaksi merkkiä. Heksat sisältävät siis neljän bitin verran tietoa.

Merkistökoodaukset

Koska kaikki tietokoneen sisällä oleva tieto on tavuihin jaettuja bittejä, myös teksti täytyy esittää jollain lailla binäärinumeroina. Sopimusta mikä numero vastaa mitäkin kirjainta sanotaan merkistökoodaukseksi.

Vanhin tietokoneissa käytetty merkistökoodaus on ASCII. Siinä jokaista kirjainta, kuten myös erikoismerkkiä, vastasi seitsemän bittiä. Siihen mahtuu englanninkieliseen tekstiin riittävä määrä kirjaimia, mutta ei ääkkösiä. Muita kieliä varten käyttöön otettiin kahdeksas bitti, mutta yli 127:n menevät numerot tarkoittivat eri kielissä eri kirjaimia.

Hajautusalgoritmi

eli hash-funktio.

Muuttaa minkä tahansa määrän tavuja ennaltamäärätyksi määräksi tavuja.

Pieni muutos syötteessä muuttaa ulostuloa paljon.

Hyvin hankala laskea toiseen suuntaan, eli mikä on ollut syöte jos tiedetään ulostulo.

Käytetään salasanojen tallentamiseen, sillä jos salasanatiedosto varastetaan, varkaan on hyvin hankala selvittää käytettyjä salasanoja ja kokeilla samoja myös muihin paikkoihin.

Suurin mahdollinen 128-bittinen numero on binäärinä 128 ykköstä, eli heksadesimaalina \(128:4\) f:ä: #xffffffffffffffffffffffffffffffff. Desimaalijärjestelmässä luku on 340282366920938463463374607431768211455.

Brute force

Kokeillaan yksi kerrallaan kaikkia mahdollisia salasanoja.

Sanasto

Kokeillaan valmiissa sanastossa olevia, yleisesti käytettyjä sanoja.

Sanasto muutoksilla

Kokeillaan yhdistää sanoja, ja muuttaa niitä tietyillä yleisillä säännöillä, kuten vaihtamalla A-kirjaimet numeroksi 4, tai E 3:ksi.