Perheen oma kirjautuminen ilman salasanoja ja ilman Googlea. Avain, joka ei koskaan poistu puhelimestasi, hyväksyy jokaisen kirjautumisen sormenjäljelläsi.
Vaikkapa MyMusicissa. Kerrot kuka olet, ja selain näyttää varmistusnumeron ja jää odottamaan puhelintasi.
37MyID-appi näyttää mihin palveluun ollaan kirjautumassa ja kenen tunnuksella — sekä kolme numeroa, joista vain yksi täsmää selaimen numeroon.
Puhelimen suojaussiru allekirjoittaa hyväksynnän yksityisellä avaimella. Allekirjoitus syntyy vain sormenjäljelläsi tai laitteen PIN-koodilla — ja vain tälle nimenomaiselle pyynnölle.
MyID-palvelin tarkistaa allekirjoituksen laitteesi julkisella avaimella ja avaa palveluun 30 päivän istunnon. Selain jatkaa automaattisesti — mitään ei tarvitse kirjoittaa.
Yksityinen avain luodaan puhelimen StrongBox/TEE-sirulle merkinnällä "ei vietävissä". Sitä ei saa ulos edes puhelimen täysillä oikeuksilla — varastettu tai saastunut laite ei paljasta sitä.
Salasanaa ei ole olemassa. Huijaussivusto voi matkia palvelua, mutta se ei voi varastaa mitään, millä kirjauduttaisiin puolestasi muualle.
Puhelin ei koskaan kysy "hyväksytkö?" — se kysyy "mikä numero?". Väärä valinta hylkää pyynnön heti, joten vahinkohyväksyntä tai pyyntöpommitus ei toimi.
Jokainen pyyntö elää 2 minuuttia ja jokainen haaste, liittymiskoodi ja tokeninvaihto kelpaa täsmälleen kerran. Kaapattu viesti on arvoton.
Matiaksen, Helmin ja Ilonan kirjautumiset voi hyväksyä myös Tapion tai Leenan puhelimesta. Valtuutuksia hallitaan hallintasivulta.
Laite estetään hallintasivulta yhdellä napilla. Lukitun puhelimen avain on joka tapauksessa käyttökelvoton ilman sormenjälkeä tai PIN-koodia.
Jos joku saa puhelimesi auki ja tietää PIN-koodisi, hän voi hyväksyä kirjautumisia. Sama rajoitus koskee pankkitunnuksia ja passkeytä — pidä PIN omana.
Palvelin pyörii Tapion Cloudflare-tilillä. Sen kaappaaja voisi myöntää istuntoja — siksi tilillä on kaksivaiheinen tunnistus.
Jokaisella laitteella on oma EC P-256 -avainpari Android Keystoressa
(setUserAuthenticationRequired, StrongBox jos saatavilla). Palvelin
tuntee vain julkisen avaimen. Hyväksyntä on ECDSA-allekirjoitus kanonisesta
viestistä:
MyID-v1|approve|<pyyntö-id>|<haaste>|<numero>|<palvelu>
jossa haaste on palvelimen arpoma 32-tavuinen kertakäyttöarvo. Istunnot ovat
ES256-allekirjoitettuja JWT:itä; palvelut verifioivat ne itse julkisella avaimella
(JWKS) tai kutsulla POST /api/verify.
Cloudflare Worker + D1 (SQLite). Taulut: users (perhe + valtuutukset),
devices (julkiset avaimet + tila), auth_requests
(kertakäyttöiset pyynnöt), services (rekisteröidyt palvelut ja sallitut
originit), enroll_codes, events (append-only loki).
| Vaihe | Kutsu |
|---|---|
| Palvelu aloittaa kirjautumisen | POST /api/authorize |
| Selain odottaa | POST /api/poll (poll-token) |
| Puhelin hakee pyynnöt | GET /api/device/pending |
| Puhelin hyväksyy | POST /api/device/approve (allekirjoitus) |
| Selain saa istunnon | POST /api/token → JWT |
Liittäminen: hallintasivulta luodaan 8-merkkinen kertakäyttökoodi (15 min), joka syötetään puhelimen MyID-appiin. Appi luo avainparin suojaussiruun ja rekisteröi julkisen avaimen. Esto: hallintasivun yksi nappi. Sormenjälkien muuttaminen puhelimessa mitätöi avaimen automaattisesti (tahallinen turvaominaisuus) — laite liitetään silloin uudelleen.
Pudota sivulle <script src=".../myid-client.js"> ja kutsu
MyID.button(el, { service, onLogin }). Palvelu rekisteröidään
hallintasivulta (id, näyttönimi, sallitut originit). onLogin saa
ES256-JWT:n, jonka voi verifioida JWKS:llä ilman kutsua MyID-palvelimeen.