16. joulukuuta 2023

Passkey on *askaa

Eri toimijat, etenkin Google ja Apple, ovat viime aikoina ajaneet voimakkaasti ns. “Passkey” systeemiä sisään etenkin puhelimiin, mainostaen sitä turvallisena ja kätevänä tapana korvata salasanat. Valitettavasti totuus on täysin toinen. Kun lisäksi Passkey implementointi eri palveluissa on tehty täysin väärin, pitää vain sanoa suoraan ja yksinkertaisesti, että Passkey on *askaa. Kirjoitinkin tästä aihepiiristä hieman jo aiemmin blogissani (joka ei näy Googlen hakutuloksissa, koska siinä on kirosana).

  1. Passkey pysyy puhelimessasi tai tietokoneessasi, sitä ei periaatteessa voi varmuuskopioida ja jos puhelimesi tai tietokoneesi hajoaa, et pääse enää kirjautumaan palveluihisi sisälle.

  2. Surkuhupaisa tilanne tulee siitä, kun edellä mainittu kohta 1 törmää reaaliteetteihin, eli että et voi kuitenkaan ottaa (ainakaan vielä) käyttöön palveluita pelkästään passkeytä käyttäen: Toisin sanoen, sinun pitää silti luoda palveluun salasana. Näin ollen sinulla on nyt yhden salassa pidettävän asian (salasana) lisänä toinenkin salassa pidettävä asia (passkey)…miten tämän tulisi helpottaa, parantaa ja yksinkertaistaa tietoturvaa käyttäjälle jää minulle ainakin aikalailla epäselväksi.

  3. Passkeyn voisi ehkä varmuuskopioida (Google on luvannut että tämän pitäisi onnistua piakkoin Androidilla ja Apple tekee tätä jo iPhonella) - mutta tulee taas uusi tietoturvariski, koska joku voi hakkeroida varmuuskopioin pilvipalvelusta ja saada siten pääsyn kaikkialle Passkeysi avulla.

  4. Passkey on lähes hyödytön puhelimessa, jonne sitä erityisesti markkinoidaan: Puhelimessa käytetään eri palveluihin nimenomaan erillisiä sovelluksia (Facebook, X, jne.), jotka eivät edes säilytä salasanaasi, vaan ainoastaan kirjautumistunnisteen jonka ne saavat kirjauduttuaan palveluun salasanallasi. Ja kun olet kerran kirjautunut puhelimesi sovelluksiin sisälle, sinun ei tarvitse yleensä koskaan enää kirjautua niihin siinä puhelimessasi uudelleen, joten tavallaan säilyttelet tämän yhden kirjautumisen jälkeen puhelimessasi lukuisia passkeytä maailmanloppuun asti täysin turhaan, ilman että koskaan käytät niitä siellä uudelleen! Puhelimessa olevaa Passkeytä ei voi myöskään käyttää mitenkään esimerkiksi tietokoneella tapahtuvaan kirjautumiseen, mikä on täysin mielipuolista, koska kyseessä on kuitenkin PKI-systeemi, jossa tämä olisi lapsellisen helppo toteuttaa (ks. esim. tämä esimerkki). On myös syytä toki muistaa, että puhelimen ja sen erillisten sovellusten hakkerointi on erittäin vaikeaa ja ei silti antaisi hakkerille haltuunsa näiden eri palveluidesi salasanaa (sen sijaan puhelimen täysi hakkerointi voisi kyllä yhtä hyvin antaa Passkeyn hakkerille, joka antaa rajoituksettoman pääsyn ko. palveluihin hänelle).

  5. Toinen surkuhupaisa tilanne tulee, kun yhdistyy kohdat 3 ja 4: Olet ottanut passkey käyttöön Googlen palveluihisi ja se on puhelimesi rikkoutumisen varalta varmuuskopioitu Googlen pilveen…kun puhelimesi hajoaa, sinun pitää hankkia uusi ja kirjautua sillä Google tilille…joka ei onnistu ilman passkeytä…jota et saa, koska et saa varmuuskopiota ladattua puhelimeesi kirjautumatta Googleen…joka ei onnistu ilman passkeytä…jota et saa, koska et saa varmuuskopiota ladattua puhelimeesi kirjautumatta Googleen…jne. (Jos tämä kuulostaa ristiriitaiselta kohdan 2 kanssa, niin lue eteenpäin kohtaan 12A.)

  6. Passkey voisi olla hyödyllinen tietokoneessa, jossa kirjaudutaan selaimen kautta eri palveluihin sisälle useita kertoja – mutta tietokoneessa oleva Passkey on erittäin altis hakkeroinnille! Ja entäpä, jos sinulla onkin pari eri tietokonetta, vaikka pöytäkone ja läppäri, etkä voi kopioida passkeytä yhdestä niistä toiseen? Menee monimutkaiseksi ja aivan syyttä suotta.

  7. Passkey perustellaan myös sillä, että se on käytännössä mahdoton murtaa palvelimilta (sen julkinen avain tai tarkemmin siitä murtaa sen yksityinen avain) tai arvaamalla se, toisin kuin salasana. Kuitenkin tällöin “unohdetaan” “sopivasti”; että riittävän monimutkainen ja pitkä salasanakin on mahdotonta murtaa palvelimilta (eli salasanan suolattu kryptografinen tiiviste) tai arvaamalla se.

  8. Passkey perustellaan myöskin sillä, että “tällöin sinun ei tarvitse luoda ja muistaa eri salasanoja eri sivustoille”, mikä tavallaan pitääkin paikkaansa. Kuitenkin tällöin “unohdetaan” “sopivasti”, että voit helposti käyttää luotettavaa salasanan hallintasovellusta, joka luo ja muistaa vahvat eri salasanat eri sivustoille.

  9. Passkey perustellaan silläkin, että sitä ei voi varastaa (puhelimesta), toisin kuin salasanat. On totta, että passkey varastaminen puhelimesta (tai tietokoneestakin) on vaikeampaa kuin salasanojen, mutta passkey väärinkäyttö ei ole sen vaikeampaa, jos puhelimeen päästään yhtälailla totaalisesti käsiksi ja passkeyn väärinkäytöllä hyökkääjä voi kirjautua palveluun ja luoda sinne oman salasanansa tai rekisteröidä sinne joka tapauksessa vaikka oman passkeynsä. Ylipäätään lähtökohtana on kuitenkin, että jos joku hakkeroi puhelimesi tai tietokoneesi, hän voi tehdä sillä mitä tahansa, vaikka varastaa myös passkeyt sen sisältä, joten siltäkin osin tämä perustelu toki ontuu.

  10. Passkey vaihtaminen ja vaarantuneen passkeyn kumoaminen voi olla vaikeaa. Sen sijaan salasanan voit vaihtaa helposti ja luotettavasti, jos vanha salasanasi vaarantuu tai edes epäilet sen vaarantuneen.

  11. Passkey hallinta on vaikeaa ja monimutkaista, sekä edellyttää vähintään pilvipalveluiden käyttöä ja niihin luottamista. Salasanojen hallinta on helppoa ja onnistuu ilman mitään teknistä osaamista vaikka paperilappua käyttäen – mieluiten toki turvallista salasanan hallintasovellusta käyttäen.

  12. Passkey implementointi on yleensä tehty päin seiniä ja näin se poistaa monia turvatekijöitä, joita sen nimenomaan pitäisi vahvistaa. En tiedä johtuuko tämä vain ihmisten yleisestä tyhmyydestä vai onko Passkey todella tarkoituskin oikeasti käyttää näin typerällä tavalla fiksumman tavan sijasta?

    A) Passkey käytetään miltei poikkeuksetta kaikkialla salasanan korvaamisen sijasta korvaamaan salasana JA kaksivaiheinen kirjautuminen (2FA) molemmat yhdellä kertaa! Salasanan korvaaminen ja kaksivaiheinen kirjautuminen ovat kaksi täysin eri asiaa, jotka eivät liity mitenkään toisiinsa! Mikäli kirjautuminen tehdään salasanattomasti passkeyllä, tulisi tämän lisäksi käyttää esim. TOTP, tai erillistä Yubikeytä (U2F), tai tekstiviestivarmistusta kaksivaiheisen kirjautumisena. Mikäli taas kirjaudutaan sisään käyttäjätunnuksella ja salasanalla, silloin toki Passkey käy kaksivaiheisesta kirjautumisesta (Fido2). Kaksivaiheisen kirjautumisen idea on – yllätysyllätys – nimenomaan se KAKSIvaiheisuus (two-factor), eli että yhden kirjautumistekijän haltuun saaminen ei vielä avaa tietä hakkerille tilillesi…jos Passkeyn haltuun saaminen mahdollistaa täyden pääsyn mukamas kaksivaiheisen kirjautumisen suojaamalle tilillesi, niin yllätysyllätys, sinulla ei sitten ole oikeasti kaksivaiheista kirjautumista suojaamassa tiliäsi vaan yksivaiheinen kirjautuminen.

    B) Passkey yksi ajatus olisi, että se olisi kiinteästi liitetty fyysiseen laitteeseen ja laite omistajaansa biometrisellä tunnistamisella, täten parantaen turvallisuutta. Joskus tämä toteutuu liiankin hyvin sikäli, että avainta ei saa toiseen laitteeseen sitten millään turvallisella tavalla siirrettyä…pääongelma on kuitenkin siinä, että mitään turvallista biometristä tunnistautumista ei yleensä ole käytössä tai jos onkin, se on aina ohitettavissa jollain pinkoodilla tms. Esimerkiksi Windows Hello ei ole turvallinen biometriseen tunnistautumiseen (ei edes sormenjälkien lukijalla varustetussa tietokoneessa), aivan kuten Androidin kasvojentunnistuskaan ei ole, nämä molemmat on lapsellisen helppo ohittaa tai huiputtaa. Applen tuotteissa oleva FaceID sen sijaan on hyvin luotettava, mutta sekin on valitettavasti ohitettavissa pin-koodilla, pilaten tämänkin tunnistautumisvaihtoehdon tietoturvaidean.

    C) Passkey kryptografia ei ole kovin vahvaa. Se käyttää yleensä SHA2-256 ja P-256 ECDSA:ta. Miksi ihmeessä? Mikä järki tässä on? Näiden kryptografinen vahvuus on symmetrisesti vain 128 bittiä ja ECDSA on haavoittuvainen kvanttitietokoneille. Miksei käytetä kvanttikestävää XMSS, Dilithium5-AES tai Falcon-1024 allekirjoitussysteemiä ja SHA2-512 tai SHA3-512 tiivistefunktiota? Typerää. Lapsellista.

    D) Passkey perustuu lukuisiin avaimiin, jokaiseen uuteen jokaista eri palvelua kohden. Miksi ihmeessä? Miksi ei luoda yhtä pääavainta, joka talletetaan tai mieluiten luodaan ja pidetään laitteessa josta se ei koskaan saa tulla ulos – ja josta luotaisiin lennosta aina uusia avaimia tyyliin SHA3(google.com@markusjansson)(1)(pääavain) sitä mukaan ja vain siksi aikaa, kun niitä tarvitaan? Koska SHA3(google.com@markusjansson)(1)(pääavain) luo joka kerta saman lopputuloksen, ei sitä tarvitse tallettaa mihinkään: Mentäessä google.com osoitteeseen laite tekisi laskutoimituksen uudelleen ja loisi siitä uudelleen tuon ala-avaimen, josta antaisi julkisen puolen google.com ja salaisella avaimella tekisi aina tarvittavat todennukset. Jos henkilö haluaa kumota tuon avaimen, hän vaan loisi uuden mallia SHA3(google.com@markusjansson)(2)(pääavain). Eri nettipalvelut pitäisivät sitten kirjaa mitä avaimia on jo käytetty säilömällä näiden uudet ja vanhat tiivistefunktiot asiakkaan tilitietoihin. Näin ei tarvitsisi KOSKAAN tallentaa/varmuuskopioida kuin YKSI AVAIN ja tämä takaisi pääsyn kaikkiin palveluihin. Varmuuskopioinnin voisi tehdä luomisvaiheessa vaikkapa QR-koodilla, jonka jälkeen avain sinetöitäisiin turvasirulle siinä laitteessa – toiseen laitteeseen sen saisi luetuttamalla sille tuon varmuuskopioidun QR-koodin. Vaihtoehtoisesti QR-koodin sijasta voisi käyttää vaikka Bitcoinin tyyppistä 24 seed words tms.


Miten sitten Passkey pitäisi tehdä ja toteuttaa ja nimenomaan siis PAKOTTAA toteutettavaksi ilman mitään poikkeuksia ja ulinoita ja valituksia? Summataanpa vähän yhteen ja perustellaan:

  • Passkey käytön pitäisi aina edellyttää fyysistä napin painamista laitteessa, ei, kosketusnäytön painike ei kelpaa, puheohjaus ei kelpaa, automatiikkaa ei saa olla. Fyysinen nappi, jota pitää käyttäjän fyysisesti painaa on turvallisin ja varmin.

  • Yksinkertainen ratkaisu olisi ulkoinen yksinkertainen ja halpa turvalaite, jonka voi liittää puhelimeen, tietokoneeseen, mihin vain ja jonka varmuuskopiointi perustuu yksinkertaisesti siihen, että laitteita hommataan vähintään 2 kpl ja jokainen niistä rekisteröidään jokaiseen palveluun, missä niitä halutaan käyttää. Näin toimii Yubikey tänä päivänäkin ja hyvä niin, Yubikey BIO löytyy biometriseen tunnistautumiseenkin.

  • Monimutkaisempi ja turvallisempi olisi puhelimen tai tietokoneen turvasirulle tallentuva avain, jonka voisi varmuuskopioida luontivaiheessa ja jonka käyttö edellyttäisi AINA sekä luotettavaa biometristä tunnistautumista ETTÄ pin-koodia. Vähän tänne päin toimii Applen tuotteet FaceID:llä, mutta ei ihan kuitenkaan.

  • Tehokkain, turvallisin ja luotettavin olisi ulkoinen, omalla näytöllä oleva turvalaite mallia Trezor, jossa näkisi aina itse, mitä on hyväksymässä riippumatta siitä, millä laitteella hyväksymispyyntö on tullut ja mistä. Sama laite voisi toimia myös salasanojen luontiin ja tallentamiseen ja käyttöön niitä sivuja varten, joissa Passkeytä ei (vielä) käytetä, jolloin tämäkin ongelma tulisi ratkaistua kerralla. Pin-koodin lisäksi pakotettuna biometrinen tunnistautuminen vaikkapa vähintään sormenjäljen muodossa olisi oltava.

  • Passkey voisi aina joko korvata salasanan TAI toimia 2-vaiheisen tunnistautumisen välineenä, ei koskaan molempina! 2FA:na sitten vaikkapa Signalin kautta tuleva "tekstiviesti", TOTP tai vaikkapa juurikin U2F tikku mallia Yubikey.

  • Kryptografian pitäisi käyttää suurinta mahdollista avainkokoa kvanttiturvallista salausta.

  • Yhden pääavaimen varmuuskopioinnin pitäisi riittää, korkeintaan kahden (mallia Yubikey), jokaista aliavainta ei pitäisi joutua erikseen varmuuskopioimaan.

  • Passkeyt ja vaihtoehtoisesti vain niiden kirjautumiset pitäisi voida kumota kaikki yhdeltä verkkosivustolta tai jaetulta palvelimelta tai lohkoketjusta helposti, jos ne vaarantuvat.

  • Passkey pitäisi voida ehdottomasti käyttää puhelimesta tai tietokoneesta käsin esim. QR-koodien välityksellä siten, että ilmoitat vaikkapa nettisivulle, jolle olet kirjautumassa, että haluat käyttää Passkeytä ja tällöin sivusto tyrkyttää sinulle skannattavan haasteen QR-koodin muodossa: Luet QR-koodin puhelimellasi ja hyväksyt ja allekirjoitat sen Passkeyllä ja puhelin lähettää vastauksen eteenpäin ja voit kirjautua sisään. Vähän samaan tapaan kuin tämä esimerkkini tai vaikka miten esim. Googlen 2-vaiheinen sisäänkirjautuminen "laitetta käyttäen" toimii. Tällöin sillä, missä fyysinen passkey on, ei olisi niin suurta merkitystä, kun "kaikki kävisivät kaikkeen kaikkialla".

  • Integrointi auton ja kodin avaimiin, web3, lohkoketjut, kryptovaluutat, ulkoiset turvalaitteet (rautalompsat), 2-väyläinen varmistus (TOR jne.) voisi luoda mielettömiä mahdollisuuksia tulevaisuudessa?

Koska yllä olevia ongelmia ei ole korjattu, ei olla korjaamassa, eikä varsinkaan ehdottamillani tavoilla, pitää edelleen jatkaa toteamistani, että Passkey on *askaa.