Onkohan tässä jotakin oikeaa ideaa vai tuottaako järjestelmään uuden turvallisuusongelman. Vai onko vaan turha ominaisuus? Ratkaiseeko enemmän ongelmia kuin synnyttää, vaiko päinvastoin?
Salasanasta on kannassa kryptogaafinen hash-arvo, joten salasanaa ei näe kannasta. Sisääkirjautumisessa tarkistetaan täsmääkö käyttäjän antaman salasanan hash-arvo kantaan tallennetun hash-arvon kanssa.
Administraattori voi muuttaa käyttäjän salasanan jos tämä on sen unohtanut. Tämän jälkeen käyttäjä pääsee sisään administraattorilta saamallaan salasanalla ja voi sitten samantien itse vaihtaa salasanansa haluamakseen.
Oletetaanpa että pulmatilanteessa ei kuitenkaan näin jostakin syystä haluta menetellä. Esimerkiksi administraattori on itse unohtanut oman salasanansa ja kukaan muu ei voi muuttaa hänen salasanaansa. SQL-editorilla ongelma olisi ratkaistavissa mutta jospa sellaista ei haluta. Halutaankin että järjestelmässä on jonkinlainen kertakäyttöinen yhteinen _varasalasana_ (kokeilkaapa kirjoittaa 10 kertaa nopeasti peräkkäin "varasalasana" :-) jolla kuka tahansa voi kirjautua yhden kerran sisään niin että voi muuttaa oman varsinaisen salasanansa haluamakseen.
Varasalasanaa on todellakin tarkoitus käyttää vain yhden kerran, eli sama varasalasana ei saa toimia enää toista kertaa, vaan tarvitaan uusi varasalasana. Varasalasanaa ei sellaisenaan tallenneta vaan myös siitä tallennetaan vain kryptograafinen hash-arvo.
No okei, eräs ongelma on se että varasalasanan tunteva voi "impersonoida" kenet tahansa, eli hän voi esiintyä kenenä tahansa käyttäjänä, kirjoitella järjestelmässä niitä-näitä jonkun toisen nimissä (koska käyttäjätunnukset eivät ole salaisia). Mutta jos nyt sallitaan se poikkeustilanteessa. Varasalasanan käyttäjän täytyy olla yhteydessä administraattoriin ja tämä voi huolehtia siitä että kaikki menee protokollan mukaan kunnes varasalasana on vaihdettu. Administraattoriin taas joka tapauksessa täytyy aika pitkälti luottaa (vaikka hänenkään ei yleenä sallita impersonoida muita).
Ongelmaksi näen vielä sen että miten varasalasanan hash-arvoon voi luottaa ja miten uusi varasalasana (voi että rakastan tuon sanan kirjoittamista:-) otetaan käyttöön. Ohjelmakoodiin kovakoodattu arvo ei tunnu hyvältä ratkaisulta koska koko ohjelmaa ei haluta vaihtaa. Voisi ajatella digitaalisesti allekirjoitettua tietoa, mutta miten estetään vanhojen, jo paljastuneiden varasalasanojen käyttö? Vanhoissahan on edelleen ihan validi allekirjoitus mutta niitä ei silti saisi hyväksyä koska periaatteessa kuka tahansa voi ne tietää. Tässä on siis vielä kehittelemistä, mutta kannattaako kehitellä, eli miltä tämä muuten kuulostaa ;-)
Salasanasta on kannassa kryptogaafinen hash-arvo, joten salasanaa ei näe kannasta. Sisääkirjautumisessa tarkistetaan täsmääkö käyttäjän antaman salasanan hash-arvo kantaan tallennetun hash-arvon kanssa.
Administraattori voi muuttaa käyttäjän salasanan jos tämä on sen unohtanut. Tämän jälkeen käyttäjä pääsee sisään administraattorilta saamallaan salasanalla ja voi sitten samantien itse vaihtaa salasanansa haluamakseen.
Oletetaanpa että pulmatilanteessa ei kuitenkaan näin jostakin syystä haluta menetellä. Esimerkiksi administraattori on itse unohtanut oman salasanansa ja kukaan muu ei voi muuttaa hänen salasanaansa. SQL-editorilla ongelma olisi ratkaistavissa mutta jospa sellaista ei haluta. Halutaankin että järjestelmässä on jonkinlainen kertakäyttöinen yhteinen _varasalasana_ (kokeilkaapa kirjoittaa 10 kertaa nopeasti peräkkäin "varasalasana" :-) jolla kuka tahansa voi kirjautua yhden kerran sisään niin että voi muuttaa oman varsinaisen salasanansa haluamakseen.
Varasalasanaa on todellakin tarkoitus käyttää vain yhden kerran, eli sama varasalasana ei saa toimia enää toista kertaa, vaan tarvitaan uusi varasalasana. Varasalasanaa ei sellaisenaan tallenneta vaan myös siitä tallennetaan vain kryptograafinen hash-arvo.
No okei, eräs ongelma on se että varasalasanan tunteva voi "impersonoida" kenet tahansa, eli hän voi esiintyä kenenä tahansa käyttäjänä, kirjoitella järjestelmässä niitä-näitä jonkun toisen nimissä (koska käyttäjätunnukset eivät ole salaisia). Mutta jos nyt sallitaan se poikkeustilanteessa. Varasalasanan käyttäjän täytyy olla yhteydessä administraattoriin ja tämä voi huolehtia siitä että kaikki menee protokollan mukaan kunnes varasalasana on vaihdettu. Administraattoriin taas joka tapauksessa täytyy aika pitkälti luottaa (vaikka hänenkään ei yleenä sallita impersonoida muita).
Ongelmaksi näen vielä sen että miten varasalasanan hash-arvoon voi luottaa ja miten uusi varasalasana (voi että rakastan tuon sanan kirjoittamista:-) otetaan käyttöön. Ohjelmakoodiin kovakoodattu arvo ei tunnu hyvältä ratkaisulta koska koko ohjelmaa ei haluta vaihtaa. Voisi ajatella digitaalisesti allekirjoitettua tietoa, mutta miten estetään vanhojen, jo paljastuneiden varasalasanojen käyttö? Vanhoissahan on edelleen ihan validi allekirjoitus mutta niitä ei silti saisi hyväksyä koska periaatteessa kuka tahansa voi ne tietää. Tässä on siis vielä kehittelemistä, mutta kannattaako kehitellä, eli miltä tämä muuten kuulostaa ;-)
Vastaukset 6
Vanhimmat
Admin voi aina tehdä sulle uuden passun jos vanha unohtuu.
Homman saa yleensä tehtyä myös jollain "Unohdin salananan" jutulla, joka lähettää uuden salasanan sulle rekisteröityyn sähköpostiin.
Sama toimii siis sille adminillekin, joka unohti salasananasa.
Jos ei toimi, niin sitten luodaan kahdelle muullekin jampalle admin tunnarit. Ei ne kolme unohda niitä yhtä aikaa.
Yhteinen salasanan kaikille käytäjille ei ole mikään hyvä idea. Uuden lähetys sähköpostiin hoitaa sen paremmin.
Sähköpostiin luotava uusi salasana on muuten ihan siisti ajatus, mutta sekään ei meidän systeemissä ole turvallinen koska normaalit oikeudet omaavat käyttäjät pystyvät muokkaamaan toistensa järjestelmään rekisteröityjä sähköpostiosoitteita.
Näin ollen käyttäjä X pystyisi muokkaamaan käyttäjälle Y oman sähköpostiosoitteensa, sitten X voisi yrittää kirjautua sisään järjestelmään käyttäjänä Y ja pyytää "unohtamansa" salasanan sähköpostiin. Tämän jälkeen hän voisi esiintyä järjestelmässä käyttäjänä Y ja hänellä olisi kaikki käyttäjän Y valtuudet. Hän voisi vaikkapa kirjoitella käyttäjänä Y esiintyen mitä tahansa ja tehdä sellaisia operaatioita järjestelmässä joihin hänellä ei käyttäjänä X olisi oikeuksia. Lopuksi hän voisi myös käydä palauttamassa Y:n sähköpostin ennalleen jolloin hänen tekosistaan ei luultavasti jäisi mitään kompromettoivia jälkiä.
tuollainen varasalasana voisi koskea korkeintaan administraattoritasoa, ei tavallisia käyttäjiä. Se voisi olla "varasisäänkäynti" josta voisi olla hyötyä myös uuden järjestelmän käynnistämisessä (kun käyttäjiä ei kannassa vielä ole). Alkuperäisessä muodossa en siihen enää usko.
Administraattorinkaan ei saisi pystyä "impersonoimaan" järjestelmän muita käyttäjiä. Tämän vuoksi jos uusi salasana lähetettäisiin sähköpostiin niin mielestäni administraattorikaan ei saisi muokata muiden käyttäjien sähköpostiosoitteita ja tuo on meidän systeemissä ajatuksena aivan mahdoton.
Emme myöskään voi vaatia että asiakkaalla olisi useampia administraattorin oikeudet omaavia.
ei jäisi jälkiä? Y:n salasanahan vaihtui!? ja kai tuollaisita operaatioista pitää muutenkin pitää lokia ja esim. sähköpostiosoitteen vaihtamisesta lähettää ilmoitus sekä vanhaan että uuteen sähköpostiin.
se sähköposti on ihan hyvä ratkaisu salasanan vaihtoon. eikö teillä pitäisi olla jokaisella käyttäjällä myös sellainen sähköpostiosoite, jota toiset käyttäjät eivät voi vaihtaa ja jota siksi voi käyttää uuden salasanan toimittamiseen. on se kuitenkin ziljoona kertaa toimivampi kuin mikään yhteisen salasanan viritelmä.
Administraattori voi tarvittaessa vaihtaa käyttäjän salasanan, joten minusta siihen tarpeeseen ei tarvita mitään muutoksia.
Varsinainen ongelma on kuitenkin uuden järjestelmän helppo käynnistäminen ja tähän liittyen administraattorin salasana. Tähän tarpeeseen "varasisäänkäynti" on mielestäni lupaava ratkaisumalli. Se voidaan myös toteuttaa ilman muutoksia tietokantaan.
Tavoite on siis jo muuttunut. Enää ei pyritä yhteiseen salasanaan vaan ainoastaan administraattorin erikoistilanteissa käyttämään varasisäänkäyntiin josta järjestelmän tavallisen käyttäjän ei tarvitse tietää yhtään mitään. Se on yhtä turvallinen kuin sisäänkirjautuminen yleensäkin koska tarvittavaa salasanaa ei järjestelmän sisältä löydy, ainoastaan sen kryptograafinen hash-arvo.