Technológie
KeyMeld: spoločný kľúč pre iPhone a Android a architektúra Zero Vault pre projekt
KeyMeld sám o sebe nie je Zero Vault. Ide o samostatný SaaS službu, ktorá pomáha vývojárovi vystúpiť s univerzálneho kľúča mimo backend produktu, spojiť klientov iOS a Android a vytvoriť pre vlastnú aplikáciu architektúru na modeli Zero Vault.
Cross-platformové aplikácie čelia problému, ktorý si používateľ zvyčajne nevšimne. Na obrazovke vidí jeden účet a očakáva rovnakú funkcionalitu na každom zariadení. No vo vnútri iPhone a Android používajú odlišné mechanizmy ochrany a inak spracovávajú lokálne kľúče.
Na iPhone môže aplikácia chrániť lokálny kľúč zariadenia prostredníctvom Apple Keychain. Na Android sa využíva Android Keystore. Tieto technológie sú určené na to, aby citlivé kľúče zostali v bezpečnom prostredí zariadenia, avšak nie sú navzájom zamenné.
Pre používateľa na tom nezáleží. Jednoducho chce otvoriť aplikáciu na iPhone, následne ju nainštalovať na Android a pokračovať v práci s tými istými zabezpečenými dátami.
Pre vývojára sa vynára architektonická otázka: ako organizovať spoločný prístup na dvoch platformách, neprepisovaním lokálnych kľúčov zariadení a neukladaním ich kópií do databázy vlastného backendu?
Rozoberajúc KeyMeld som si všimol, že služba ponúka pre tento účel samostatný univerzálny kľúč, ktorý nezasahuje do vnútorného zabezpečenia iOS a Android.
Spoločný kľúč pre rôzne platformy
Lokálny kľúč zariadenia patrí konkrétnemu telefónu a je chránený mechanizmami príslušného operačného systému. Zostáva v chránenom prostredí daného zariadenia a nie je určený na voľný prenos medzi zariadeniami.
Univerzálny kľúč KeyMeld je iná entita. Je vytvorený pre konkrétny projekt, účet a zabezpečený priestor a stáva sa spoločným pre autorizovaných klientov na rôznych platformách.
Služba neberie kľúč z iPhone, neprenáša ho na Android a nesnaží sa spojiť dva odlišné kľúče do jedného. Ochrana na platformách zostáva samostatná, pričom aplikácia získa spoločnú úroveň prístupu ku svojmu projektu.
Práve to určuje architektonickú úlohu KeyMeld. Neoriginuje iOS a Android a nenahrádza ich vnútorné mechanizmy. Pridáva spoločnú úroveň práce s univerzálnym kľúčom, vďaka čomu projekt nemusí sám riešiť jeho medzi-platformové rozdelenie.
Pre rôzne produkty a účty sú vytvárané nezávislé kontúry kľúčov. Preto každý projekt si uchováva vlastnú oblasť prístupu, a viacero účtov na jednom zariadení zostáva oddelených.
Zero Vault patrí projektu
Hneď je potrebné upozorniť, že Zero Vault nie je názov samotného KeyMeld. Ide o architektonický model, ktorý môže postaviť pripojený produkt.
KeyMeld funguje ako samostatná SaaS služba. Nie je inštalovaný do backendu aplikácie a neumiestňuje sa vedľa databázy projektu ako ďalší softvér. Univerzálny kľúč je obsluhovaný v samostatnom SaaS kontúre KeyMeld, mimo backend samotného produktu.
Aby sa takýto model udržiaval, hranice dôvery medzi projektom a KeyMeld musia zostať nezávislé. Backend aplikácie aj externá služba používajú oddelené prihlasovacie údaje, práva a mechanizmy administrácie.
Práve takýto výsledok v architektúre projektu môžeme označiť ako model Zero Vault: jeho serverová základňa neukladá kľúč od klientského zabezpečeného úložiska.
Zero Vault neznamená, že backend produktu vôbec nič neukladá. Na jeho strane zostávajú účty, nastavenia, biznisové dáta a všetko potrebné na chod aplikácie. No univerzálny kľúč s nimi nie je spojený.
Kompromitácia serverovej databázy produktu sama osebe nezverejňuje univerzálny kľúč: neukladá sa spolu s účtami a inými serverovými dátami. Súčasne tento model neponúka automatickú odolnosť voči akýmkoľvek incidentom v infraštruktúre. Rieši konkrétnu úlohu – odstrániť univerzálny kľúč od klientského úložiska zo samotnej databázy produktu.
Živý scenár: jeden účet na iPhone a Android
Predstavme si aplikáciu s lokálnymi zabezpečenými dátami. Môže to byť autentifikátor, korporátny klient alebo akýkoľvek servis, ktorému ide o prácu s zašifrovanou informáciou priamo na zariadení.
Na iPhone chrání aplikácia lokálny kľúč mechanizmami iOS. Na Android sa využíva vlastný ochranný mechanizmus Android. Interné kľúče zariadení sú odlišné, a to je v poriadku.
Bez samostatného spoločného vrstvy by musel vývojár riešiť, ako sprístupniť rovnaké zabezpečené údaje na oboch platformách. Uloženie na platformách by zostalo odlišné a produkt by musel sám synchronizovať tieto dve realizácie.
Mohli by sa vytvárať špeciálne schémy pre iOS a Android, pokúšať sa manuálne prenášať lokálne kľúče alebo ukladať ich kópie na serveri.
KeyMeld umožňuje odmietnuť prenášanie lokálnych kľúčov a ich ukladanie na serveri, pridávaním spoločného univerzálneho kľúča.
Klient na iPhone a klient na Android získavajú prístup k rovnakému univerzálnemu kľúču v rámci autorizovaného projektu a účtu. Pri tom každý telefón stále využíva vlastné ochranné mechanizmy.
Pre používateľa to vyzerá ako jednotný účet na rôznych zariadeniach. Nemusí vedieť, aký mechanizmus je vo vnútri iPhone a aký na Androide.
Pri zmene telefónu nie je potrebné exportovať lokálny kľúč zo starého zariadenia alebo vytvárať zvláštne zabezpečené úložisko pre novú platformu. Nový klient sa pripojí k rovnakému projektu a získa prístup k rovnakému univerzálnemu kľúču.
Backend sa podieľa na autorizácii požiadavky, no univerzálny kľúč je určený autorizovanému klientovi a neukladá sa do databázy produktu.
Samotný KeyMeld neprenáša databázu aplikácie a nenahrádza synchronizačný systém používateľských záznamov. Jeho úlohou je výhradne poskytnúť klientovi kľúč potrebný na prácu s chránenými dátami. Obsah úložiska a jeho aktualizácie ostávajú zodpovednosťou samotného produktu.
Tri rôzne typy kľúčov a tajomstiev
Aby sa predišlo zmätkom, postačuje rozlišovať tri pojmy.
Lokálny kľúč zariadenia patrí konkrétnemu telefónu a je obsluhovaný mechanizmami iOS alebo Android.
Univerzálny kľúč je určený autorizovaným klientom jedného projektu a účtu. Práve on spája platformy na úrovni samotného produktu.
Služobný tajomstvo je určené backendu na zabezpečené komunikácie s KeyMeld. Nezdieľa sa s mobilnou aplikáciou alebo prehliadačom.
Služobný tajomstvo a univerzálny kľúč plnia odlišné úlohy. V architektúre Zero Vault sa univerzálny kľúč neukladá v databáze produktu vedľa backendových údajov.
Na fungovanie KeyMeld nie je potrebné meno osoby, jej heslo, obsah TOTP úložiska alebo obchodný význam záznamov. Služba je závislá od prepojenia projektu, účtu a práva klienta získať univerzálny kľúč.
Prístup ku kľúču zostáva riadený
Získanie univerzálneho kľúča nie je automatickým právom každého klienta.
Ak sa zariadenie viac nedá považovať za dôveryhodné, ak sa zmení stav účtu alebo ak tím stiahne prístup k projektu, KeyMeld môže prestať vydávať tento kľúč danému klientovi.
V tejto súvislosti je dôležité nepreháňať závery. To neznamená automatické zničenie existujúcej lokálnej kópie kľúča. Ide o kontrolu ďalšieho získavania kľúča a pripojenia nových klientov.
Pre používateľa to znamená, že pripojenie nových zariadení a riadenie ich ďalšieho prístupu ku kľúču sú súčasťou jednej systému.
Pre vývojára to znamená, že takúto logiku nemusí sám konštruovať oddelene pre iOS a Android. Napriek tomu je konečná architektúra Zero Vault stále závislá od toho, či projekt uchováva univerzálny kľúč u seba a či udržiava oddelenie medzi vlastnou infraštruktúrou a externým SaaS kontúrom KeyMeld.
Čo KeyMeld nerobí
KeyMeld nie je správca hesiel a neukladá používateľské TOTP záznamy. Nežije ako cloudová databáza aplikácie a nenahrádza synchronizáciu jeho obsahu.
Nie je to náhrada Apple Keychain alebo Android Keystore. Služba necháva platformové mechanizmy na ich mieste a pridáva spoločnú vrstvu pre produkt.
Taktiež nie je povinnou službou identifikácie používateľa. Na identifikáciu a autorizáciu môže slúžiť iná služba, napríklad MeldID, zatiaľ čo KeyMeld plní iný účel – poskytnúť autorizovanému klientovi jednotný univerzálny kľúč, ktorý nie je uložený v backendu samotného produktu.
A nakoniec, KeyMeld automaticamente nevytvorí Zero Vault. Poskytuje projektu externý kontúr univerzálneho kľúča. Aby bola táto architektúra zachovaná, vývojár nemá povinnosť ukladať univerzálny kľúč do svojej vlastnej serverovej databázy. Nezávislé dôveryhodné zóny musia zostať oddelené.
Kto to môže potrebovať
Takýto prístup môže byť zaujímavý pre aplikácie, ktoré fungujú na viacerých platformách a používajú lokálne zabezpečené dáta.
Môžu to byť autentifikátory, podnikovú aplikácie, SaaS produkty, služby s viacerými zariadeniami a akékoľvek projekty, kde jeden účet musí fungovať rovnako na iPhone aj Androide.
Pre vývojára je hodnota nielen v znížení platformovej logiky. Oveľa dôležitejšie je rozdelenie zodpovedností. Backend produktu uchováva svoje dáta, a KeyMeld ako externý SaaS servis poskytuje univerzálny kľúč a spravuje jeho ďalšie vydanie.
Po zoznámení sa s projektom by som KeyMeld nepomenoval ako hotové Zero Vault, ale ako nástroj, ktorým môže vývojár postaviť takýto model pre vlastný produkt.
iOS a Android stále používajú vlastné mechanizmy ochrany. Klienti získavajú spoločný univerzálny kľúč. A backend aplikácie, ak neukladá tento kľúč vo svojej databáze a udržiava oddelenie medzi vlastnou infraštruktúrou a KeyMeld, sa nestáva trezorom s kľúčom od klientského úložiska.
Pre používateľa to znamená jednotný prístup na rôznych platformách. Pre vývojára – možnosť vystúpiť s univerzálnym kľúčom mimo vlastný backend. A pre celý projekt – architektúra Zero Vault, v ktorej server aplikácie neukladá kľúč od chránených dát klienta.
Viac o projekte: KeyMeld