Minun pitäisi tehdä functio joka tekee n pituisesta salasanasta x bittisen salausavaimen.
http://en.wikipedia.org/wiki/
Olen nähnyt toteutuksia jolla tämä tehdään hashaamalla salasana esimerkiksi md5:lla tai sha1:llä, hashi on sitten rajattu niin että tulee halutun kokoinen avain.
Mieleeni tulee kuitenkin kysymys, eikö tälläisellä menetelmällä tuotettu avain ole turvaton, kun siinä on merkkejä ainoastaan a-f ja 0-9?
Onko huoleni aiheeton? Jos ei niin mikä olisi turvallinen tapa toteuttaa operaatio?
Merkit 0-9 ja a-f muodostavat heksadesimaalijärjestelmän. Avain on siis kokonaisluku, josta voi näppärästi katkaista sopivan pätkän. On vain helpompaa kirjoittaa jokainen merkki 0-255 kahtena merkkinä 0-f, niin ei tule ongelmia merkistöjen kanssa.
Merkistön valinta ei vaikuta avaimen turvallisuuteen. Voihan jokaisen avaimen esittää myös binäärilukuna, jolloin käytössä on vain merkit 0 ja 1.
Onkos muuten tuon rajallisen määrän (eli hashi on aina samanpitunen) ideana se että hashista ei voi nähä hashatun salasanan pituutta?
Ajatuksena on, että hajautusfunktio (hash function) laskee mille tahansa tiedolle rajatulle lukuvälille sijoittuvan tunnusluvun. Yleensä siinä sivussa menetetään tieto alkuperäisen tiedon pituudesta. Kuitenkaan salasanan pituuden tietäminen ei juuri auta murtamista, sillä jos ehditään tutkia kaikki tietynpituiset salasanat, ehditään myös käytännössä tutkia saman tien kaikki sitä lyhyemmät salasanat.
Antti Laaksonen kirjoitti:
Merkistön valinta ei vaikuta avaimen turvallisuuteen. Voihan jokaisen avaimen esittää myös binäärilukuna, jolloin käytössä on vain merkit 0 ja 1.
Merkistön valinta voi vaikuttaa avaimen turvallisuuteen jos tiivistefunktioon on sisällytetty esimerkiksi poikkeuksia aakkosille. En tiedä, miten aakkosten käyttäminen md5:sta tai sha1:stä käytettäessä vaikuttaa lopputulokseen, mutta jossain hasheissa sillä on merkitystä.
Valmiin tiivisteen esittämiseen käytetty merkistö ei vaikuta mihinkään. Tietokoneen muistissa oleva avain on aina tietynpituinen binääriluku, esimerkiksi:
101001010100110001001011001110100111001010010010
Saman kokonaisluvun voi esittää myös kymmenkantaisena:
11910977828890518677
tai heksadesimaalimuodossa:
A54C4B3A7292A495
Sillä, missä muodossa avain tulostetaan tai syötetään, on aivan yhtä vähän merkitystä kuin sillä, minkä värisenä tämä merkkijono tulostetaan näytölle.
Darwen kirjoitti:
Merkistön valinta voi vaikuttaa avaimen turvallisuuteen jos tiivistefunktioon on sisällytetty esimerkiksi poikkeuksia aakkosille. En tiedä, miten aakkosten käyttäminen md5:sta tai sha1:stä käytettäessä vaikuttaa lopputulokseen, mutta jossain hasheissa sillä on merkitystä.
Käytännössä hashattavat merkkijonot, kuten käyttäjänimet ja salasanat, koostuvat usein ainoastaan ns. alfanumeerisista merkeistä (a-z,A-Z,0-9) ja tietyistä välimerkeistä ('.',' ','_'), mikä helpottaa alkuperäisen merkkijonon arvaamista tiivisteen perusteella.
os kirjoitti:
Käytännössä hashattavat merkkijonot, kuten käyttäjänimet ja salasanat, koostuvat usein ainoastaan ns. alfanumeerisista merkeistä (a-z,A-Z,0-9) ja tietyistä välimerkeistä ('.',' ','_'), mikä helpottaa alkuperäisen merkkijonon arvaamista tiivisteen perusteella.
Omia salasanoja voikin parantaa käyttämällä erikoismerkkejä kuten !@#$%^&*(){}[] salasanoissaan. Näin valmiilla sanalistalla arvaaminen ei ole mahdollista, vaan salasana on pakko murtaa - ja siihen menee aikaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.