Tehnologije

KeyMeld: zajednički ključ za iPhone i Android te arhitektura Zero Vault za projekt

KeyMeld nije sam po sebi Zero Vault. To je poseban SaaS servis koji pomaže developerima da vanjskim putem odvoje univerzalni ključ od backend-a projekta, povežu klijente iOS i Android te izgrade arhitekturu prema modelu Zero Vault.

Multiplatformske aplikacije imaju problem koji korisnici obično ne primjećuju. Na zaslonu vide jedan račun i očekuju istu funkcionalnost na svim uređajima. No, unutar iPhone i Android koriste različite mehanizme zaštite i različite načine rada s lokalnim ključevima.

Na iPhoneu, aplikacija može zaštititi lokalni ključ uređaja pomoću Apple Keychain-a. Na Androidu za to se koristi Android Keystore. Te tehnologije su dizajnirane tako da osjetljivi ključevi ostaju unutar zaštićenog okruženja uređaja, ali nisu međusobno zamjenjive.

Za korisnika to nije važno. On jednostavno želi otvoriti aplikaciju na iPhoneu, zatim na Androidu i nastaviti rad s istim zaštićenim podacima.

Za developere, ovdje se javlja arhitektonsko pitanje: kako organizirati zajednički pristup na dvije platforme bez prijenosa lokalnih ključeva uređaja i bez kopiranja istih u bazu vlastitog backend sustava?

Istražujući KeyMeld, shvatio sam da servis nudi poseban univerzalni ključ za to, ne dirajući unutar zaštite iOS i Android sustava.

Zajednički ključ za različite platforme

Lokalni ključ uređaja pripada određenom telefonu i štiti ga mehanizmi odgovarajućeg operacijskog sustava. Ostaje u zaštićenom okruženju tog uređaja i nije namijenjen slobodnom prijenosu između uređaja.

Univerzalni ključ KeyMeld-a je drugačije bitno. On se generira za konkretni projekt, račun i zaštićeni prostor, i postaje zajednički za ovlaštene klijente na različitim platformama.

Servis ne uzima ključ s iPhonea, ne prenosi ga na Android i ne pokušava spojiti dva različita ključa u jedan. Zaštita na platformama ostaje zasebna, a aplikacija dobiva zajednički razinu pristupa za vlastiti projekt.

Ovo određuje arhitektonsku ulogu KeyMeld-a. On ne čini iOS i Android identičnim i ne zamjenjuje njihove unutarnje mehanizme. On dodaje razinu zajedničkog rada s univerzalnim ključem, zbog čega projekt ne mora sami rješavati njegovo međuplaformno pružanje.

Za različite proizvode i račune kreiraju se nezavisni konture ključeva. Svaki projekt tako zadržava vlastiti domen pristupa, a više računa na istom uređaju ostaju razdvojeni.

Zero Vault pripada projektu

Izravno je važno napomenuti: Zero Vault nije naziv samog KeyMeld-a. To je arhitektonski model koji može biti izrađen od strane povezane aplikacije.

KeyMeld djeluje kao poseban SaaS servis. Ne instalira se unutar backend-a aplikacije i ne smješta pored baze podataka projekta kao dodatni softverski modul. Univerzalni ključ se servisira unutar zasebnog SaaS okruženja KeyMeld, izvan samog backend-a proizvoda.

Da bi takav model bio održiv, granice povjerenja između projekta i KeyMeld-a moraju ostati neovisne. Za backend aplikacije i vanjski servis koriste se odvojeni podaci za prijavu, prava pristupa i mehanizmi upravljanja.

Takav koncept u arhitekturi projekta može se označiti kao model Zero Vault: njegova serverska baza ne pohranjuje ključ iz klijentovog zaštićenog spremišta.

Zero Vault ne znači da backend proizvoda ništa ne čuva. Ostavlja račune, postavke, poslovne podatke i sve što je potrebno za rad aplikacije. No, univerzalni ključ nije smješten uz njih.

Kompromitacija serverske baze ne otkriva univerzalni ključ: on se ne pohranjuje s računima i drugim server-side podacima. Ipak, takav model ne jamči da će sve moguće smetnje ili kvarovi u infrastrukturi biti automatski neškodljivi. Riješava specifičan zadatak – uklanja univerzalni ključ iz klijentovog spremišta i baze samog proizvoda.

Živi scenarij: jedan račun na iPhoneu i Androidu

Zamislimo aplikaciju s lokalnim zaštićenim podacima. To može biti autentifikator, poslovni klijent ili bilo koja usluga koja zahtijeva rad s šifriranim informacijama na uređaju.

Na iPhoneu, aplikacija štiti lokalni ključ pomoću iOS mehanizma. Na Androidu, koristi vlastiti mehanizam zaštite Androida. Interni ključevi uređaja se razlikuju, i to je normalno.

Bez zajedničkog sloja bilo bi potrebno riješiti kako organizirati pristup istim zaštićenim podacima na dvjema platformama. Interno pohranjivanje ostalo bi odvojeno, a proizvod bi se morao sam nositi s povezivanjem dviju rješenja.

Moglo bi se stvarati zasebne sheme za iOS i Android, pokušavati ručno prenositi lokalne ključeve ili ih kopirati na serveru.

KeyMeld omogućava odbacivanje prijenosa lokalnih ključeva i kopiranja na server, dodajući zajednički univerzalni ključ.

Klijenti na iPhoneu i Androidu pristupaju istom univerzalnom ključu u okviru odobrenog projekta i računa. Svaki telefon zadržava vlastite mehanizme zaštite.

Za korisnika to izgleda kao jedan račun na različitim uređajima. Ne mora znati koji mehanizam radi unutar iPhonea i koji na Androidu.

Pri promjeni uređaja, nije potrebno izvoziti lokalni ključ sa starog uređaja niti stvarati zasebnu zaštićenu verziju za novu platformu. Novi klijent se spaja na isti projekt i pristupa istom univerzalnom ključu.

Backend sudjeluje u autorizaciji zahtjeva, ali univerzalni ključ je namijenjen odobrenom klijentu i ne pohranjuje se u proizvodnoj bazi.

Sam KeyMeld ne prebacuje bazu aplikacije i ne zamjenjuje sustav sinkronizacije podataka korisnika. Njegova je svrha isključivo pružiti klijentu ključ potreban za rad s zaštićenim podacima. Sadržaj spremišta i njegovo ažuriranje ostaju odgovornost samog proizvoda.

Tri različite vrste ključeva i tajni

Da se ne bi miješale dijelovi arhitekture, dovoljno je razlikovati tri pojma.

  • Lokalni ključ uređaja pripada određenom telefonu i štiti ga mehanizmi iOS ili Android.

  • Univerzalni ključ koristi ovlašteni klijent jednog projekta i računa. On povezuje različite platforme na razini samog proizvoda.

  • Službena tajna potrebna je za siguran rad backend-a s KeyMeld-om. Ne prenosi se na mobilne aplikacije ili preglednike.

Službena tajna i univerzalni ključ imaju različite zadatke. U arhitekturi Zero Vault, univerzalni ključ nije pohranjен u bazi proizvoda kraj podataka backend-a.

Za rad KeyMeld-a, nije potrebno imati ime osobe, lozinku, sadržaj TOTP spremišta ili poslovni sadržaj zapisa. Za servis je ključno povezivanje projekta, računa i prava klijenta za dobivanje univerzalnog ključa.

Pristup ključu ostaje pod kontrolom

Dobivanje univerzalnog ključa nije pravo svakog klijenta bez iznimke.

Ako uređaj više nije pouzdan, status računa se promijenio ili je pristup projektu opozvan, KeyMeld može prekinuti daljnju isporuku univerzalnog ključa tom klijentu.

Ovdje je važno ne donositi preširoke zaključke. To ne znači automatsko brisanje postojeće lokalne kopije ključa. Radi se o nadzoru daljnjeg dobivanja ključa i dodavanju novih klijenata.

Za korisnika, to znači da je dodavanje novih uređaja i upravljanje njihovim pristupom ključu pod jednim sustavom.

Za developere, to olakšava logiku – ne moraju zasebno graditi isti sustav za iOS i Android. No, konačna Zero Vault struktura ovisi o tome da li projekt zadržava univerzalni ključ ili ne i drži li razdvajanje interne infrastrukture od vanjskog SaaS okruženja KeyMeld-a.

Što KeyMeld ne radi

KeyMeld nije upravitelj lozinki i ne čuva TOTP zapise korisnika. Ne postaje oblak baza podataka aplikacije i ne zamjenjuje sinkronizaciju njenog sadržaja.

To nije zamjena za Apple Keychain ili Android Keystore. Servis ostavlja lokalne mehanizme platformi netaknutima i dodaje zajednički sloj za proizvod.

Nije ni obavezni servis za identifikaciju korisnika ili autentifikaciju. Samu identifikaciju i autorizaciju može obavljati zasebni servis, npr. MeldID, dok KeyMeld rješava drugu zadatak – osigurati odobrenom klijentu jedinicni univerzalni ključ, bez njega pohranjivanjem u backend proizvoda.

Konačno, KeyMeld ne čini automatski Zero Vault. On pruža projektu vanjski profil univerzalnog ključa. Da bi se očuvala ova arhitektura, developeri ne bi trebali pohranjivati univerzalni ključ u vlastitoj serverskoj bazi. Neovisne povjerljive zone također moraju ostati odvojene.

Za koga je ovo važno

Takav pristup je pogodan za aplikacije koje rade na više platformi istovremeno i koriste lokalne zaštićene podatke.

To mogu biti autentifikatori, korporativne aplikacije, SaaS proizvodi, usluge s više uređaja i bilo koji projekt gdje jedan račun mora raditi jednako na iPhoneu i Androidu.

Za developere, vrijednost nije samo u smanjenju platformske logike. Važnije je dijeljenje odgovornosti. Backend proizvoda čuva svoje podatke, a KeyMeld kao vanjski SaaS pruža univerzalni ključ i upravlja njegovim izdavanjem.

Nakon što sam upoznao projekt, smatram da KeyMeld nije gotov Zero Vault, već alat pomoću kojeg programer može izgraditi takav model za vlastiti proizvod.

iOS i Android i dalje koriste vlastite mehanizme zaštite. Klijenti dobivaju zajednički univerzalni ključ, a backend, ako ne čuva taj ključ i drži razdvajanje infrastrukture od SaaS okruženja KeyMeld, ne postaje sef s ključem za klijentovo spremište.

Za korisnika to znači jedinstveni pristup na različitim platformama. Za programere – mogućnost odvajanja univerzalnog ključa od vlastitog backend-a. A za projekt – arhitekturu Zero Vault, u kojoj server aplikacije ne pohranjuje ključ od klijentovog zašticenog spremišta.

Više o projektu: KeyMeld