Technologijos
KeyMeld: bendras raktas iPhone ir Android ir Zero Vault architektūra projektui
KeyMeld nėra Zero Vault. Tai atskira SaaS paslauga, padedanti kūrėjams išvesti universalų raktą už backend produkto ribų, sujungti iOS ir Android klientus ir sukurti savo programėlės architektūrą pagal Zero Vault modelį.
„Kryžminės platformos“ programėlėse yra problema, kurios vartotojas dažnai nepastebi. Ekrane jis mato vieną paskyrą ir tikisi vienodos funkcionalumo tiek iPhone, tiek Android įrenginiuose. Tačiau viduje iPhone ir Android naudoja skirtingus saugumo mechanizmus ir skirtingai apdoroja lokalinius raktus.
iPhone programėlė gali naudoti Apple Keychain norint apsaugoti vietinius įrenginio raktus. Android tam naudojamas Android Keystore. Šios technologijos skirtos užtikrinti, kad jautrūs raktai liktų saugomoje įrenginio aplinkoje, tačiau jos nėra tarpusavyje keičiamų.
Vartotojui tai nesvarbu. Jis tiesiog nori atidaryti programėlę iPhone, tada įsidiegti ją Android ir tęsti darbą su tais pačiais saugoma duomenimis.
Kūrėjui kyla architektūrinis klausimas: kaip suderinti bendrą prieigą abiejose platformose, neperkeliant vietinių įrenginių raktų ir nepaliekant jų kopijų savo backend bazėje?
Išnagrinėjęs KeyMeld, aš pamačiau, kad paslauga siūlo atskirą bendrą raktą, nesikišant į Apple iOS ir Android vidinę apsaugą.
Bendras raktas skirtingoms platformoms
Vietinis įrenginio raktas priklauso konkrečiam telefonui ir yra saugomas atitinkamos operacinės sistemos priemonėmis. Jis lieka saugomoje aplinkoje konkrečiame įrenginyje ir nėra skirtas laisvai perkelti tarp įrenginių.
Universalusis KeyMeld raktas – kita esybė. Jis sukurtas konkrečiam projektui, paskyrai ir saugiai erdvei ir tampa bendras autorizuotiems klientams skirtingose platformose.
Paslauga nepaima rakto iš iPhone, neperkelia jo į Android ir nebanina bandyti suvienodinti dviejų skirtingų raktų. Platformos sauga lieka savarankiška, o programa gauna bendrą prieigos lygį savo projektui.
Štai tai lemia KeyMeld architektūrinį vaidmenį. Jis nesudaro iOS ir Android vienodų ir nepakeičia jų vidinių mechanizmų. Jis prideda bendrą darbo lygį su universalų raktu, dėl kurio projektui nereikia pats spręsti jo tarpplatforminio išdavimo.
Skirtingiems produktams ir paskyroms kuriasi nepriklausomi raktų konturai. Todėl kiekvienas projektas išlaiko savo prieigos sritį, o keli paskyros viename įrenginyje lieka atskirtos.
Zero Vault priklauso projektui
Svarbu iš karto paaiškinti: Zero Vault nėra pats KeyMeld pavadinimas. Tai yra architektūrinis modelis, kurį gali sukurti prijungtas produktas.
KeyMeld veikia kaip atskira SaaS paslauga. Jos nenustato programėlės backend dalyje ir netgi neįdiegia kaip papildomą programinį modulį tarp projekto duomenų bazės ir veikiančio produkto. Universalusis raktas aptarnaujamas atskiroje KeyMeld SaaS aplinkoje, už produkto backend ribų.
Kad ši schema būtų išsaugota, pasitikėjimo ribos tarp projekto ir KeyMeld turi būti nepriklausomos. Backend ir išorinis paslaugų irgi turi būti atskiri nuo paskyrų, teisių ir administravimo mechanizmų.
Toks architektūros rezultatas galėtų būti vadinamas Zero Vault modeliu: jo serverinė bazeje nėra saugomas rakto nuo vartotojo saugomo repository.
Zero Vault nereiškia, kad produkto backend nieko nesaugo. Jame išlieka paskyros, nustatymai, verslo duomenys ir visa kita, būtina programėlės veikimui. Tačiau kartu su jais nėra bendro rakto.
Kazutinas serverio baze gali būti pažeistas ir neatskleidžia bendro rakto, nes jis nėra saugomas kartu su paskyromis ar kitais serverio duomenimis. Tačiau ši schema nenumato, kad bet koks sutrikimas infrastruktūroje automatiškai pasidaro pavojingas. Ji veiksminga sprendžiant konkrečią užduotį – pašalinti universalų raktą iš klientų saugojimo duomenų bazės.
Gyvas scenarijus: viena paskyra iPhone ir Android
Įsivaizduokime programėlę su vietiniais saugomais duomenimis. Tai gali būti autentifikatorius, įmonės klientas ar bet kuri paslauga, kuri veikia su užšifruotais duomenimis tiesiog įrenginyje.
iPhone programėlė naudoja iOS priemones vietiniams raktams apsaugoti. Android naudoja Android saugumo mechanizmus. Vidiniai įrenginio raktai yra skirtingi – ir tai normalu.
Be atskiro bendro sluoksnio kūrėjas turėtų spręsti, kaip organizuoti prieigą prie tų pačių saugomų duomenų dviejose platformose. Platformos sauga galėtų likti skirtinga, o produktas turėtų pačiam sujungti šiuos du sprendimus.
Galima būtų kurti atskiras schemas iOS ir Android, bandyti rankiniu būdu perkelti vietinius raktus arba saugoti jų kopijas serveryje.
KeyMeld leidžia atsisakyti vietinių rakto perkėlimo ir jo saugojimo serverio kopijose, papildydamas bendru universalų raktu.
Klientas iPhone ir Android gauna prieigą prie vieno ir to paties universalaus rakto pagal projekto ir paskyros autorizaciją. Tuo pačiu kiekvienas telefonas išlaiko savo saugumo mechanizmus.
Vartotojui tai atrodo kaip vienas paskyros prieigos raktas skirtinguose įrenginiuose. Jam nereikia žinoti, kuris mechanizmas veikia iPhone ir kuris Android.
Keičiant telefoną, nereikia eksportuoti vietinio rakto iš seno įrenginio ar kurti atskiros saugomo duomenų rinkinio naujai platformai. Naujasis klientas prisijungia prie to paties projekto ir gali naudotis tuo pačiu universalų raktu.
Backend dalyvauja autorizuojant užklausą, tačiau universalus raktas skirtas tik autorizuotam klientui ir niekada nėra saugomas produkto serverio bazėje.
Patys KeyMeld nesaugo programėlės bazės ir nesikeičia naudotojų įrašų sinchronizavimo sistemos. Jis yra skirtas konkrečiai funkcijai – pateikti klientui raktą darbui su saugomu duomenimis. Jo turinys ir atnaujinimai lieka pačio produkto atsakomybe.
Trijų tipų raktais ir slaptažodžiais
Norint aiškiai atskirti skirtingus architektūros elementus, pakanka žinoti tris sąvokas:
Vietinis įrenginio raktas priklauso konkrečiam telefonui ir yra saugomas iOS arba Android priemonėmis.
Universalus raktas naudojamas autorizuotiems vieno projekto ir paskyros klientams. Jis sujungia skirtingas platformas programos lygyje.
Paslaugos slaptažodis reikalingas backend saugiam bendravimui su KeyMeld. Jis nėra perduodamas mobiliai programėlei ar naršyklei.
Sveikatos slaptasis kodas ir universalus raktas atlieka skirtingas funkcijas. Zero Vault architektūroje universalus raktas nėra saugomas programos duomenų bazėje kartu su backend duomenimis.
Norint naudoti KeyMeld, nereikia naudotojo vardo, slaptažodžio, TOTP saugyklos ar verslo įrašų. Svarbu tik projekto, paskyros ir naudotojo teisės gauti universalų raktą ryšys.
Prieiga prie rakto vis dar kontroliuojama
Gauti universalų raktą nėra automatinis bet kurio kliento teisės dalykas.
Jei įrenginys nebėra patikimas, pakeitėsi paskyros statusas ar komanda atšaukė prieigą prie projekto, KeyMeld gali nutraukti jo prieigos prie universalio rakto teikimą.
Svarbu nesudaryti per plačių išvadų. Tai nereiškia, kad automatiškai sunaikinama jau turima vietinė raktas kopija. Kalbama apie kontrolę dėl tolesnio rakto gavimo ir naujų klientų prijungimo.
Vartotojui tai reiškia, kad naujų įrenginių prijungimas ir jų prieigos prie rakto valdymas yra viena sistema.
Kūrėjui tai reiškia, kad tokią logiką nereikia kurti atskirai iOS ir Android. Tačiau galutinė Zero Vault schema vis dar priklauso nuo projekto sprendimo – ar jis saugo universalų raktą savo bazėje ir ar palaiko atskirtį tarp savo infrastruktūros ir išorinio SaaS aplinkos KeyMeld.
Ką KeyMeld nedaro
KeyMeld nėra slaptažodžių valdytojas ir nesaugo naudotojų TOTP įrašų. Jis nėra debesijos programėlės duomenų bazė ir nepakeičia jos sinchronizavimo.
Jis nėra Apple Keychain ar Android Keystore pakaitalas. Paslauga palieka platformos vietinius mechanizmus ir papildomai sukuria bendrą sluoksnį produktui.
Taip pat tai nėra naudotojo identifikavimo paslauga. Vartotojo identifikaciją ir autorizaciją gali atlikti atskira sistema, pvz., MeldID, o KeyMeld sprendžia kitą užduotį – suteikti autorizuotam klientui vieningą universalų raktą, kuris nėra saugomas produkto backend.
Galiausiai, KeyMeld automatiškai nesukuria Zero Vault. Jis siūlo projektui išorinį universalio rakto kontūrą. Norint išlaikyti šią architektūrą, kūrėjui nereikia dėti universalų raktą į savo serverio bazę. Atskirtos patikimos zonos ir toliau turi būti atskiros.
Kam tai naudinga
Toks požiūris aktualus programėlėms, veikiančioms kelioms platformoms ir naudojančioms vietinius saugomas duomenis.
Tai gali būti autentifikatoriai, įmonių programėlės, SaaS produktai, kelių įrenginių paslaugos arba bet kurie projektai, kur vienas paskyros raktas turi veikti vienodai iPhone ir Android.
Kūrėjui svarbi ne tik platformų logika – svarbu ir atskaitomybė. Programėlės backend saugo savo duomenis, o KeyMeld kaip išorinis SaaS tarnyba siūlo universalų raktą ir valdo jo išdavimo tvarką.
Po projekto apžiūros galiu apibūdinti KeyMeld ne kaip iš anksto paruoštą Zero Vault, o kaip įrankį, kurį programuotojas gali naudoti kuriant tokią schemą savo produktui.
iOS ir Android vis dar naudoja savo saugumo mechanizmus. Klientai gauna bendrą universalų raktą. O programėlės backend, jei jis neaprašo rakto savarankiškai ir palaiko atskaitą tarp savo infrastruktūros ir KeyMeld, nėra šventojo šifro saugykla.
Vartotojui tai reiškia vieno paskyros prieigą skirtinguose įrenginiuose. Kūrėjui – galimybę iškelti universalų raktą už savo backend ribų. O projektui apskritai – Zero Vault architektūrą, kurioje programėlės serveris neįgalus saugoti rakto nuo kliento duomenų.
Іšsamiau apie projektą: KeyMeld