Technologie
KeyMeld: Obecný klíč pro iPhone a Android a architektura Zero Vault pro projekt
KeyMeld sám o sobě není Zero Vault. Je to samostatná SaaS služba, která pomáhá vývojáři oddělit univerzální klíč od backendu produktu, propojit klienty iOS a Android a vybudovat architekturu podle modelu Zero Vault.
U multiplatformních aplikací existuje problém, který uživatel obvykle nezaznamená. Na obrazovce vidí jeden účet a očekává stejnou funkčnost na jakémkoliv zařízení. Ale uvnitř iPhone a Android používají odlišné mechanismy ochrany a pracují odlišně s místními klíči.
Na iPhonu může aplikace chránit místní klíč zařízení prostřednictvím Apple Keychain. Na Androidu se pro to používá Android Keystore. Tyto technologie jsou určeny k tomu, aby citlivé klíče zůstávaly v zabezpečeném prostředí zařízení, ale nejsou vzájemně zaměnitelné.
Pro uživatele to není důležité. Chce jen spustit aplikaci na iPhonu, pak ji nainstalovat na Androidu a pokračovat v práci se stejnými zabezpečenými daty.
Pro vývojáře vyvstává architektonická otázka: jak organizovat sdílený přístup na obou platformách, aniž by bylo nutné přenášet místní klíče zařízení nebo kopírovat jejich kopie do vlastního backendu?
Při zkoumání KeyMeld jsem zjistil, že služba nabízí pro tento účel samostatný univerzální klíč, aniž by zasahovala do interní ochrany iOS a Androidu.
Obecný klíč pro různé platformy
Místní klíč zařízení patří konkrétnímu telefonu a je chráněn prostředky příslušného operačního systému. Zůstává v zabezpečeném prostředí daného zařízení a není určen pro volný přenos mezi zařízeními.
Univerzální klíč KeyMeld je jiná entita. Je vytvořen pro konkrétní projekt, účet a zabezpečený prostor a stává se sdíleným pro autorizované klienty na různých platformách.
Služba nebere klíč od iPhonu, nepřenáší ho na Android a nepokouší se spojit dva různé klíče do jednoho. Platformová ochrana zůstává samostatná, zatímco aplikace získává společnou úroveň přístupu pro svůj projekt.
To přesně definuje architektonickou roli KeyMeld. Nespůsobuje, že iOS a Android jsou stejné, a nenahrazuje jejich vnitřní mechanismy. Přidává pouze společnou úroveň práce s univerzálním klíčem, díky níž projekt nemá potřebu sám řešit jeho interplatformní distribuci.
Pro různé produkty a účty jsou vytvářeny nezávislé kontejnery klíčů, takže každý projekt uchovává vlastní oblast přístupu, a více účtů na jednom zařízení zůstávají oddělené.
Zero Vault patří projektu
Je třeba ihned upřesnit: Zero Vault není název samotného KeyMeld. Je to architektonický model, který může postavit připojený produkt.
KeyMeld funguje jako samostatná SaaS služba. Není instalován přímo do backendu aplikace a není umístěn vedle databáze projektu jako další modul. Univerzální klíč je obsluhován v samostatném SaaS kontejneru KeyMeld, mimo backend samotného produktu.
Pro zachování tohoto modelu musí být mezi projektem a KeyMeld zachovány nezávislé důvěryhodné hranice. Přístupové údaje, práva a administrační mechanismy backendu a externí služby jsou oddělené.
Právě takové řešení v architektuře projektu můžeme označit jako model Zero Vault: jeho serverová databáze neukládá klíč od klientského zabezpečeného úložiště.
Zero Vault neznamená, že backend produktu vůbec nic neukládá. U něj zůstávají účty, nastavení, obchodní data a vše potřebné pro chod aplikace. Ovšem univerzální klíč není uložen vedle nich.
Kompromitace serverové databáze produktu sama o sobě nevede k odhalení univerzálního klíče: není uložen společně s účty a dalšími serverovými daty. Také však tento model nezaručuje, že jakákoli porucha v infrastruktuře je automaticky bezriziková. Řeší konkrétní úkol – odstranit univerzální klíč od klientského úložiště z databáze samotného produktu.
Živý scénář: jeden účet na iPhone a Android
Představme si aplikaci s místními zabezpečenými daty. Může jít o autentifikátor, firemního klienta nebo jakýkoliv servis, který potřebuje pracovat s zašifrovanými informacemi přímo na zařízení.
Na iPhonu aplikace chrání místní klíč prostředky iOS. Na Androidu používá vlastní mechanismus ochrany Android. Interní klíče zařízení jsou odlišné, a to je běžné.
Bez samostatné společné vrstvy by vývojář musel řešit, jak zajistit přístup ke stejným chráněným datům na obou platformách. Uložené platformovými prostředky by zůstávaly rozdílné, a vývojář by musel sám tyto dvě implementace propojit.
Lze by vytvářet oddělené schémata pro iOS a Android, pokoušet se přenášet místní klíče ručně nebo ukládat jejich kopie na serveru.
KeyMeld umožňuje odmítnout přenos místních klíčů a jejich ukládání na serveru, a přidává společný univerzální klíč.
Klienti na iPhonu a Androidu mají přístup ke stejnému univerzálnímu klíči v rámci autorizovaného projektu a účtu. Přitom každý telefon zachovává vlastní mechanismus ochrany.
Pro uživatele to znamená jeden účet na více zařízeních. Není třeba vědět, jaký mechanismus běží uvnitř iPhonu nebo Androidu.
Při změně telefonu není nutné exportovat místní klíč ze starého zařízení ani vytvářet samostatnou verzi zabezpečeného úložiště pro novou platformu. Nový klient se připojí ke stejnému projektu a získá přístup ke stejnému univerzálnímu klíči.
Backend se účastní autorizace požadavku, ale univerzální klíč je určen autorizovanému klientovi a není ukládán do serverové databáze produktu.
Sám KeyMeld nepřenáší databázi aplikace ani nenahrazuje synchronizační systém uživatelských záznamů. Jeho úkolem je konkrétně poskytnout klientovi klíč, který je nezbytný pro práci s chráněnými daty. Obsah úložiště a jeho aktualizace jsou odpovědností samotného produktu.
Tři různé typy klíčů a tajemství
Aby nedocházelo k záměně různých částí architektury, stačí rozlišovat tři pojmy.
Místní klíč zařízení patří konkrétnímu telefonu a je obsluhován prostředky iOS nebo Android.
Univerzální klíč je určen autorizovaným klientům jednoho projektu a účtu. Ten spojuje různé platformy na úrovni samotného produktu.
Služební tajemství je potřeba backendu pro zabezpečenou komunikaci s KeyMeld. Není předáváno mobilní aplikaci nebo prohlížeči.
Služební tajemství a univerzální klíč mají odlišné úkoly. V architektuře Zero Vault se univerzální klíč neukládá do databáze produktu v rámci backendových dat.
Pro práci s KeyMeldem není třeba znát jméno uživatele, jeho heslo, obsah TOTP úložiště nebo obchodní význam záznamů. Služba zajímá pouze spojení projektu, účtu a práva klienta získat univerzální klíč.
Přístup ke klíči je řízen
Získání univerzálního klíče není bezpodmínečným právem jakéhokoliv klienta.
Pokud již zařízení nelze považovat za důvěryhodné, změnil se stav účtu nebo tým odvolal přístup k projektu, KeyMeld může přestat s vydáváním univerzálního klíče tomuto klientovi.
Zde je důležité nebrat příliš vážně automatické odstranění již existující místní kopie klíče. Mluvíme o kontrole dalšího získávání klíče a připojení nových klientů.
Pro uživatele to znamená, že připojení nových zařízení a řízení jejich dalšího přístupu k vydávání klíče patří do jedné systému.
Pro vývojáře – takovou logiku nemusí sám stavět zvlášť pro iOS a Android. Přitom finální model Zero Vault závisí na tom, jestli projekt uchovává univerzální klíč, a zda si ponechává oddělení své infrastruktury od externího SaaS kontejneru KeyMeld.
Co KeyMeld nedělá
KeyMeld není správce hesel a neukládá uživatelské TOTP záznamy. Nenahradí cloudovou databázi aplikace a nenahrazuje její synchronizaci obsahu.
Nejedná se o náhradu Apple Keychain nebo Android Keystore. Služba ponechává místní mechanismy platformy na místě a přidává pouze společnou vrstvu pro produkt.
Není to také povinná služba pro identifikaci uživatele. Identifikaci a autorizaci může zajišťovat samostatná služba, například MeldID, zatímco KeyMeld řeší jiný úkol – poskytnout autorizovanému klientovi jednotný univerzální klíč, aniž by jej uložil do backendu samotného produktu.
A nakonec, KeyMeld neprovádí automaticky Zero Vault. Poskytuje projektu externí kontejner univerzálního klíče. Aby byla zachována tato architektura, vývojář by neměl uložit univerzální klíč do vlastní serverové databáze. Nezávislé důvěryhodné zóny by měly zůstat oddělené.
Kdo to může potřebovat
Takový přístup je vhodný pro aplikace, které fungují na více platformách současně a používají místní zabezpečená data.
Mohou to být autentifikátory, firemní aplikace, SaaS produkty, služby s více zařízeními a jakékoli projekty, kde jeden účet musí fungovat stejně na iPhone a Androidu.
Pro vývojáře je hodnotou nejen snížení platformové logiky. Důležitější je možnost oddělit odpovědnost. Produktový backend uchovává svá data, zatímco KeyMeld jako externí SaaS služba poskytuje univerzální klíč a řídí jeho další vydávání.
Po prostudování projektu bych KeyMeld popsal ne jako hotové Zero Vault, ale jako nástroj, který umožňuje vývojáři takový model vybudovat pro vlastní produkt.
iOS a Android stále používají své vlastní ochranné mechanismy. Klienti získávají společný univerzální klíč. A backend aplikace, pokud neuchovává tento klíč a zachovává rozdělení své infrastruktury od KeyMeld, se nestává trezorem s klíčem od klientského úložiště.
Pro uživatele to znamená jednotný přístup na různých platformách. Pro vývojáře – možnost oddělit univerzální klíč od vlastního backendu. A pro projekt celkově – architekturu Zero Vault, kde server aplikace neukládá klíč od chráněných dat klienta.
Více informací o projektu: KeyMeld