Technológia

KeyMeld: általános kulcs iPhone és Android számára, Zero Vault architektúrával a projektben

A KeyMeld önmagában nem a Zero Vault. Ez egy különálló SaaS-szolgáltatás, amely segít a fejlesztőnek a univerzális kulcsot a backend-etől kivonni, összekapcsolni az iOS és Android ügyfeleket, és saját alkalmazására a Zero Vault modell szerint építeni az architektúrát.

Az olyan keresztplatformos alkalmazásoknak van egy problémájuk, amit általában a felhasználó nem észlel. A képernyőn egyszersmind egy fiókot lát, és azt várja, hogy bármilyen eszközön ugyanúgy működjön. Ám belül az iPhone és Android különböző védelmi mechanizmusokat használnak, és különböző módon kezelik a helyi kulcsokat.

Az iPhone-on az alkalmazás az Apple Keychain segítségével védheti a helyi eszközkulcsot. Az Android esetében az Android Keystore-ra támaszkodnak. Ezek a technológiák arra szolgálnak, hogy az érzékeny kulcsokat a készülék védett környezetében tartsák, de egymás helyettesítésére nem valók.

Ez a felhasználónak mindegy. Egyszerűen csak meg akarja nyitni az alkalmazást az iPhone-on, majd telepíteni Android-ra, és folytatni akarja a munkát azonos védett adatokkal.

A fejlesztő számára ez egy architekturális kérdés: hogyan lehet megosztott hozzáférést szervezni két platformon anélkül, hogy a helyi eszközkulcsokat áthoznák, és azok másolatát tárolnánk a saját backend adatbázisában?

A KeyMeld megvizsgálásakor észrevettem, hogy a szolgáltatás erre egy külön általános kulcsot kínál, anélkül, hogy beavatkozna az iOS vagy Android belső védelmébe.

Általános kulcs különböző platformokhoz

A helyi eszközkulcs egy adott telefonhoz tartozik, és az adott operációs rendszer védelmi eszközei által védett. Megmarad a konkrét eszköz védett környezetében, és nem szánják arra, hogy szabadon átvihessék más eszközre.

A KeyMeld általános kulcsa viszont más entitás. Kifejlesztik egy adott projekthez, fiókhoz és védett térhez, és közös lesz azonosított ügyfelek között több platformon.

A szolgáltatás nem veszi el a kulcsot az iPhone-ból, nem hozza át Android-ra, és nem próbálja összevonni a két kulcsot egyetlen egésszé. A platformvédelmek külön maradnak, míg az alkalmazás azonos szintű hozzáférést kap a saját projektje számára.

Ez határozza meg a KeyMeld architekturális szerepét. Nem teszi ugyanazonossá az iOS-t és az Android-ot, és nem helyettesíti belső mechanizmusaikat. Egy közös szintet ad hozzá a univerzális kulccsal való munkához, így a projektnek nem kell saját maga megszerveznie a platformok közötti jogosultságokat.

Külön kontúrok jönnek létre a különböző termékek és fiókok számára. Így minden projekt saját hozzáférési területet őriz meg, és több fiók ugyanazon az eszközön elkülönül egymástól.

A Zero Vault a projekté

Fontos megjegyezni: a Zero Vault nem a KeyMeld neve. Ez egy architekturális modell, amit egy csatlakoztatott termék építeni tud.

A KeyMeld külön SaaS-szolgáltatásként működik. Nem az alkalmazás backend-jébe telepítik, és nem helyezik el a projekt adatbázisa mellett, mint egy további szoftvermodult. Az általános kulcs a KeyMeld külön SaaS-kontúrjában szolgál, a projekt saját backendje fejlesztésén kívül.

Ahhoz, hogy ez a modell megmaradjon, a bizalmi határoknak a projekt és a KeyMeld között függetlenek maradniuk kell. Az alkalmazás backendje és a külső szolgáltatás külön tartós hitelesítő adatokat, jogosultságokat és adminisztrációs mechanizmusokat használ.

Ezt a végső eredményt nevezhetjük Zero Vault modellnek: szerveroldali adatbázisa nem tárolja a kliens védett adattárának kulcsát.

A Zero Vault nem jelenti, hogy az alkalmazás backendje semmilyen adatot nem tárol. Maradnak fiókok, beállítások, üzleti adatok és minden, ami a működéshez szükséges. Azonban a közös univerzális kulcs nincs ott, mint központi eleme a backendnek.

Az, hogy a szerveroldali adatbázis kompromittálódik, önmagában nem fed fel univerzális kulcsot: nem tárolják a fiókokkal vagy más szerveroldali adatokkal együtt. Ugyanakkor ez a modell nem garantálja, hogy bármilyen lehetséges hiba az infrastruktúrában automatikusan veszélytelen lesz. Egy konkrét célt old meg: elválasztja a univerzális kulcsot a kliens tárolásától a saját rendszerben.

Élő forgatókönyv: egy fiók iPhone-on és Androidon

Képzelj el egy alkalmazást helyi védett adatokkal. Ez lehet autentikátor, vállalati kliens vagy bármilyen szolgáltatás, amely szorosan a titkosított adatokkal dolgozik közvetlenül az eszközön.

Az iPhone-on az alkalmazás az iOS védelmi mechanizmusaival védi a helyi kulcsot. Az Android saját védelmi mechanizmust alkalmaz. Ezek a belső eszközkulcsok különböznek, és ez normális.

Anélkül, hogy egy külön közös réteget alkalmaznának, a fejlesztőnek meg kellene oldania, hogyan férjen hozzá ugyanazokhoz a védett adatokhoz mindkét platformon. A platformfüggetlen tárolás továbbra is különbözne, és a terméknek saját maga kéne összekapcsolnia ezeket a megvalósításokat.

Lehetne különböző sémákat kialakítani iOS-re és Androidra, manuálisan átvinni a helyi kulcsokat, vagy menteni másolatokat szerveren.

A KeyMeld lehetővé teszi, hogy ezt elkerüljék, anélkül, hogy a helyi kulcsokat áthelyeznék vagy szerveroldali példányokat tárolnának, miközben hozzáad egy közös univerzális kulcsot.

A kliens iPhone-on és a kliens Androidon ugyanazt a univerzális kulcsot kapják meg azonosított projekt és fiók keretében. Mindezt az eszközök saját védelmi mechanizmusa megőrzi.

Ez felhasználóként egyetlen fióknak tűnik több eszközön. Nem kell tudniuk, hogy pontosan milyen mechanizmus működik az iPhone-ban vagy az Androidon.

Telefoncsere esetén nem kell exportálni a helyi kulcsot a régi eszközről, vagy külön védett tárolóverziót készíteni az új platform számára. Az új kliens ugyanahhoz a projekthez csatlakozik, és ugyanazt az univerzális kulcsot kapja meg.

A backend részt vesz a kérés hitelesítésében, de az univerzális kulcsot az arra jogosult kliens kapja meg, és nem kerül szerveroldali adatbázisba.

A KeyMeld nem hordozza az alkalmazás adatbázisát és nem helyettesíti a felhasználói rekordok szinkronizálási rendszerét. Feladata, hogy a kliens számára hozzáférést adjon a munkához szükséges kulcshoz. A tárolás és frissítés a saját alkalmazás felelőssége.

Három különböző típusú kulcs és titok

Az architektúra részeinek elkülönítéséhez elég különböző fogalmakat megkülönböztetni.

  • Helyi eszközkulcs konkrét telefonhoz tartozik, és az iOS vagy Android védelmi eszközeivel védett.

  • Általános kulcs egy adott projekt és fiók jogosult ügyfeleinek használatában van. Ez köti össze a különböző platformokat az alkalmazás szintjén.

  • Személyes titok a backend számára szükséges a biztonságos kapcsolathoz a KeyMeld-del. Nem kerül át a mobilalkalmazásba vagy böngészőbe.

A személyes titok és az általános kulcs külön feladatokat látnak el. A Zero Vault architektúrában az általános kulcs nem kerül szerveroldali adatbázisba az alkalmazás saját adatai mellett.

A KeyMeld működtetéséhez nem szükséges személy neve, jelszava, TOTP-tároló tartalma vagy üzleti rekordok értelme. A szolgáltatásnak a projekt, a fiók, valamint a kliens jogosultsága a kulcs megszerzéséhez fontos.

A hozzáférés továbbra is kezelhetően marad

Az általános kulcs elérése nem automatikus jog minden kliens számára.

Ha az eszköz nem tekinthető többé megbízhatónak, vagy a fiók státusza változott, vagy a csapat visszavonta a hozzáférést a projekthez, a KeyMeld leállíthatja az ilyen kliens további kulcskiszolgálását.

Fontos, hogy ne vonjunk le túl általános következtetéseket. Ez nem jelenti a már létező helyi kulcs automatikus törlését. Csupán a további kérési jogosultságok ellenőrzéséről és az új kliensek csatlakozásáról szól.

Felhasználói szinten ez azt jelenti, hogy az új eszközökhöz való csatlakozás és a továbbpontozás kezelése egy rendszer része.

Fejlesztőként ez azt is jelenti, hogy nem kell külön logikát építeni iOS-re és Androidra. Azonban a végső Zero Vault modell attól függ, hogy a projekt tartja-e a univerzális kulcsot, és fenntartja-e a saját infrastruktúrája és a külső KeyMeld kontúr között a szétválasztást.

Mit nem csinál a KeyMeld

A KeyMeld nem jelszókezelő, és nem tárol felhasználói TOTP-bejegyzéseket. Nem lesz felhő alapú alkalmazásadatbázis, és nem helyettesíti az adatok szinkronizálását.

Ez nem az Apple Keychain vagy Android Keystore alternatívája. A szolgáltatás megőrzi az eredeti platform helyi mechanizmusait, és csak egy közös szintet ad hozzá a termékhez.

Ez nem kötelező azonosítási szolgáltatás sem. Az azonosításért és jogosultságkezelésért külön szolgáltatás, például MeldID lehet felelős, a KeyMeld pedig más feladatot lát el: egységes univerzális kulcsot biztosítana az arra jogosult kliens számára, anélkül, hogy a saját alkalmazás backendjébe helyezné.

Végül, a KeyMeld nem automatikusan alakít ki Zero Vault-ot. Egy külső univerzális kulcs-kontúr mellett teszi le a projektet. Ahhoz, hogy ez az architektúra működjön, a fejlesztőnek nem szabad a univerzális kulcsot saját szerveroldali adatbázisába mentenie. Független megbízható zónáknak is el kell maradniuk egymástól.

Akiknek ez hasznos lehet

Ez a megközelítés érdekes alkalmazásoknak, amelyek egyidejűleg több platformon működnek, és helyi védett adatokat használnak.

Ilyenek lehetnek autentikátorok, vállalati alkalmazások, SaaS-termékek, több eszközt használó szolgáltatások, vagy bármilyen projekt, ahol egy fiók ugyanúgy működik iPhone-on és Androidon.

A fejlesztő számára az érték nemcsak a platformspecifikus logika csökkentésében rejlik. Sokkal fontosabb a felelősség megosztása: a termék backendje tárolja adatait, míg a külső SaaS-szolgáltatás, a KeyMeld, biztosítja az univerzális kulcsot, és kezeli annak későbbi kiadását.

Miután megismertem a projektet, úgy írhatnám le a KeyMeld-et, mint egy olyasfajta eszközt, amellyel a fejlesztő saját termékéhez meg tud építeni egy ilyen modellt.

Az iOS és Android továbbra is saját védelmi mechanizmusát használja. A kliens közös univerzális kulcsot kap, míg az alkalmazás backendje, ha nem tárolja ezt a kulcsot, és fenntartja a saját infrastruktúrája és a KeyMeld közötti elkülönítést, nem válik olyan széfté, ahol a kliens adattároló kulcsa van elrejtve.

Felhasználóként ez egy egységes hozzáférést jelent különböző platformokon. Fejlesztőként pedig a lehetőséget, hogy a univerzális kulcsot kivord a saját backendjéből. A projekt szintjén pedig a Zero Vault architektúrát, ahol a szerver nem tárolja az ügyféltartalom kulcsát.

További információ a projektről: KeyMeld