Tehnoloogiad
KeyMeld: Ühisvõti iPhone'ile ja Android'ile ning Zero Vault arhitektuur projektile
KeyMeld ise ei ole Zero Vault. See on eraldiseisev SaaS-teenus, mis aitab arendajal viia universaalse võtme väljaspoole taustarakenduse ning luua oma rakenduse jaoks Zero Vault arhitektuuri, ühendades iOS ja Android kliendid.
Ristplatvormirakendustel on üks probleem, mida kasutaja tavaliselt ei märka. Ekraanil näeb ta ühte kontot ning ootab samu toiminguid iga seadmel. Kuid sisemiselt kasutavad iPhone ja Android erinevaid kaitsemehhanisme ning töötavad erinevalt lokaalsüsteemide võtmetega.
iPhone'il võib rakendus kaitsta lokaalset võtit Apple Keychain'iga. Androidil kasutatakse selleks Android Keystore'i. Need tehnoloogiad on mõeldud selleks, et tundlikud võtmed jääksid kaitstud seadme keskkonda, kuid need ei ole omavahel vahetatavad.
Kasutajale ei ole see oluline. Ta tahab lihtsalt avada rakenduse iPhone'il, seejärel installida selle Android'ile ja jätkata sama kaitstud andmetega töötamist.
Arendaja jaoks tekib siin arhitektuuriline küsimus: kuidas organiseerida ühine ligipääs kahe platvormi vahel, mitte viia üle lokaalsed seadmevõtmed ega hoida nende koopiaid enda taustarakenduse andmebaasis?
KeyMeld'i kohta uurides nägin, et teenus pakub selleks eraldi universaalset võtit, ilma et ta tungiks iOS ja Androidi sisemisse kaitsesüsteemi.
Ühine võti erinevatele platvormidele
Lokaalne seadme võti kuulub konkreetsele telefonile ja kaitstakse vastava operatsioonisüsteemi vahenditega. See jääb kaitstud keskkonda ning ei ole mõeldud vabalt edastamiseks või kopeerimiseks teistele seadmetele.
Ühine KeyMeld'i võti on hoopis teine element. See luuakse konkreetsele projekti, kontole ja kaitstud piirkonnale ning muutub ühiseks kõigi autoriseeritud klientide vahel erinevatel platvormidel.
Teenuse ei võta iPhone'ilt võtmeid, ei too neid üle Android'ile ega ürita teha kahest erinevast võtmest ühte. Platvormi kaitse säilib omavahel sõltumatuna ning rakendus saab ühise juurdepääsetaseme oma projektile.
Just see määratleb KeyMeld'i arhitektuurilise rolli. Ta ei tee iOS-i ja Androidi ühetaoliseks ega asenda nende sisemisi mehhanisme. Ta lisab ühise taseme universaalse võtme kasutamiseks ning loob projekti jaoks ühelt poolt võimaluse hallata selle platvormidevahelist jaotust ise.
Erinevatele toodetele ja kontodele luuakse iseseisvad võtmekontuurid. Iga projekt hoiab oma ligipääsu piirkonda ning mitu kontot ühel seadmel jäävad eraldatuks.
Zero Vault kuulub projekti
Oluline on kohe selgitada: Zero Vault ei ole KeyMeld'i nimi. See on arhitektuuriline mudel, mille kasutusele võtab ühendatud toode.
KeyMeld tegutseb kui eraldiseisev SaaS-teenus. Seda ei paigaldata rakenduse taustasüsteemi ega asetata projekti andmebaasi kõrval kui eraldi moodulit. Ühise võtme haldab eraldiseisev SaaS-kontuur KeyMeld'is, väljaspool rakenduse enda taustat.
Selle mudeli säilitamiseks peab usaldustsooni piir projekti ja KeyMeld'i vahel jääma sõltumatuks. Taustasüsteemil ja välisel teenusel on eraldi kasutajatunnused, juurdepääsuõigused ja haldusmehhanismid.
Seda arhitektuuri nimetatakse Zero Vault mudeliks: selle serveripõhine baaskomponent ei salvesta kliendi kaitstud salvestusvõtit.
Zero Vault ei tähenda, et rakenduse taustahaldus midagi ei salvesta. Sõlmne kontodel, seadistustel, äriandmetel ja kõigil rakenduse funktsionaalsust toetavatel andmetel on jätkuvalt asukoht ning nad jäävad kehtima, kuid universaalset võtit nende kõrval ei hoita.
Nende serveripõhise baasi kompromiteerimine ei laida automaatselt välja universaalset võtit, kuna see ei asu koos kasutajakontode ega teiste serveriandmetega. Samas ei garanteeri see mudel, et iga võimalik veakord mis tahes infrastruktuuri osas on tingimata kahjutu. See lahendab konkreetse probleemi – eemaldab universaalse võti kliendi hoidlast enda rakenduse andmebaasist.
Elus stsenaarium: üks konto iPhone'ile ja Android'ile
Kujutame ette rakendust, mis töötab lokaalsete kaitstud andmetega. See võib olla autentija, ettevõtte kliendirakendus või mõni teenus, mis nõuab krüptitud teabe otsest töötlemist seadmes.
iPhone'is kaitseb rakendus lokaalset võtit iOS-mehhanismidega. Androidis kasutusel on enda kaitsemekanism. Seadme sisemised võtmed on erinevad ning see on normaalne.
Ilma eraldiseisva ühise kihita oleks arendajal keeruline organiseerida ligipääsu sama kaitstud andmetele mõlemal platvormil. Platvormikeskne salvestus oleks ikka erinev ning rakendus peab ise lahendama kahe erineva süsteemi ühendamise.
Võib olla loodud eraldi skeeme iOS-ile ja Androidile, proovitud kohalikke võtmeid käsitsi üle võtta või nende koopiaid serveris hoida.
KeyMeld võimaldab loobuda lokaalsete võtmete edastamisest ja nende serverile salvestamisest, lisades ühisvõtme.
iPhone klient ja Android klient saavad ligipääsu samale universaalsele võtmele tegelikus projekti ja konto kontekstis. Samal ajal kasutavad mõlemad oma kaitsemekaanismeid.
Kasutajale näib see kui üks konto erinevate seadmete vahel. Ta ei pea teadma, millised mehhanismid töötavad iPhone'il ja Android'il.
Telefonivahetusel ei ole vaja eksportida lokaalset võtit vanalt seadmetelt ega luua uut kaitstud salvestusruumi uuele platvormile. Uus klient liitub samaga projektiga ning saab ligipääsu samale universaalsele võtmepagasile.
Taustaroboti osa on autoriseerimistaotluse kontrollimisel, kuid universaalne võti on mõeldud ainult autoriseeritud kliendile ning ei säili rakenduse serveripõhises andmebaasis.
KeyMeld ise ei too üle rakenduse andmebaasi ega asenda kasutusteabe sünkroonimissüsteemi. Selle ülesandeks on juhendada klienti vajaliku kaitstud võtme saamisel. Andmehoidla sisu ning selle uuendamine jääb rakenduse enda hoolde.
Kolm erinevat võtit ja saladust
Selleks, et arhitektuuri erinevaid osi mitte segi ajada, piisab kolmest mõistest:
Lokaalne seadme võti kuulub konkreetsele telefonile ning seda teenindavad iOS või Android vahendid.
Universaalne võti on kasutusel ühe projekti ja konto autoriseeritud klientide poolt. Just see sidustab erinevaid platvorme projekti tasandil.
Teenussaladus on vajalik taustasüsteemile, et turvaliselt suhelda KeyMeld'iga. Seda ei edilir mobiili- ega veebirakendusele.
Salajased võtted ja universaalne võti täidavad erinevaid ülesandeid. Zero Vault arhitektuuris ei hoita universaalse võtit projekti andmebaasis koos taustasüsteemi saladustega.
KeyMeld'i töötamiseks ei ole vaja isikut, parooli, TOTP-hoidlat ega salvestamise sisu. Teenus on huvitatud vaid projekti, kontose ja kliendi õigustest universaalse võtme saamiseks.
Juurdepääs võtmele jääb kontrolli alla
Universaalse võtme saamine ei ole tingimusteta iga kliendi õigus.
Kui seade ei ole enam usaldusväärne, kontoseis on muutunud või lugupeetud on keeldunud ligipääsust projekti, võib KeyMeld lõpetada selle kliendi universaalse võtme väljastamise.
Selles ei ole vaja teha liiga üldist järeldust. See ei tähenda automaatset kohaliku võtmepaki kustutamist. Räägitakse edasise võtme saamise kontrollist ning uute klientide lisamisest.
Kasutajale tähendab see, et uute seadmete ühendamine ning nende edasise ligipääsu kontroll on üks süsteem.
Arendajale tähendab see seda, et ta ei pea sellist loogikat ise eraldi iOS-ile ja Android'ile üles ehitama. Samas sõltub Zero Vault'i lõpplahendus sellest, kas projekt hoiab endal universaalse võtmepagasi või mitte ning kas eraldab enda ja välise SaaS-i vahelised piirid.
Mida KeyMeld ei tee
KeyMeld ei ole paroolihaldur ega salvesta kasutaja TOTP-kirjeid. See ei ole rakenduse pilvepõhine andmebaas ega asenda kasutajate sünkroniseerimissüsteemi.
See ei asenda Apple Keychain'i ega Android Keystore'i. Teenus jätab plattformi lokaalsed mehhanismid oma kohtadesse ning lisab sellele ühise taseme rakenduse jaoks.
See ei ole ka obligatorne kasutajate identifitseerimisteenus. Identifikatsiooni ja autoriseerimise eest võib vastutada eraldi teenus, näiteks MeldID, samal ajal kui KeyMeld täidab teist ülesannet – pakkuda autoriseeritud kliendile ühtset universaalset võtit, mida ei hoita rakenduse taustasüsteemis.
Lõpuks ei muuda KeyMeld Zero Vault'i automaatselt. Ta pakub välja projekti välimise kontuuri universaalse võtme jaoks. Selle arhitektuuri säilitamiseks ei pea arendaja hoidma universaalset võtit enda serverites. Sõltumatud usalduspiirkonnad peavad jääma eraldatuks.
Kes võiks sellest huvituda
See lähenemine on huvitav rakendustele, mis töötavad kiiresti mitmel platvormil ning kasutavad lokaalseid kaitstud andmeid.
Seda võivad olla autentija, ettevõtte kliendirahendus, SaaS-tooted, mitme seadmega teenused ning kõik projektid, kus üks konto peab töötama ühtselt iPhone'il ja Androidil.
Arendajale on väärtus mitte ainult platvormipõhise loogika vähendamine, vaid ka vastutuse jagamine. Rakenduse taustasüsteem hoiustab enda andmeid ning KeyMeld kui välis-SaaS-teenus pakub universaalset võtit ning kontrollib selle edasist väljastamist.
Pärast projekti tutvustamist kirjeldaksin KeyMeld'i pigem kui tööriista, mille abil arendaja saab luua sellise mudeli oma tootele.
iOS ja Android jätkavad oma kaitsemehhanismide kasutamist. Kliendid saavad ühise universaalse võtme. Kui rakenduse taust säilitab selle võti ning hoiab eraldatuna enda infrastruktuuriaust ning KeyMeld'i vahel, ei muutu ta kellekski salajaseks lukustatuks kirstuks.
Kasutajale tähendab see ühise juurdepääsu võimalust erinevatel platvormidel. Arendajale – võimalust viia universaalse võtme väljapoole enda taustaroboti. Projektile tervikuna – Zero Vault arhitektuuri, kus server ei hoia klientide kaitstud andmete võtit.
Rohkem projektist: KeyMeld