teknoloji
KeyMeld: iPhone ve Android için Ortak Anahtar ve Zero Vault Mimarisini Proje İçin Kullanma
KeyMeld kendisi Zero Vault değildir. Bu, geliştiricinin evrensel anahtarı backend'den çıkarmasına, iOS ve Android müşterilerini bir araya getirmesine ve kendi uygulaması için Zero Vault modeli üzerine bir mimari kurmasına yardımcı olan ayrı bir SaaS hizmetidir.
Çapraz platform uygulamaların genellikle kullanıcı fark etmediği bir sorunu vardır. Kullanıcı ekranda tek bir hesap görür ve herhangi bir cihazda aynı şekilde çalışmasını bekler. Ancak içerde iPhone ve Android farklı koruma mekanizmaları kullanır ve yerel anahtarlerle farklı şekilde çalışır.
iPhone'da uygulama, yerel anahtarı Apple Keychain ile koruyabilir. Android'de ise bu amaçla Android Keystore kullanılır. Bu teknolojiler, hassas anahtarların cihazın güvenli ortamında kalmasını sağlamak için tasarlanmış olsa da, birbirlerinin yerine geçemezler.
Kullanıcı için bu önemli değildir. Sadece iPhone'da uygulamayı açmak, sonra Android'e kurmak ve aynı korunmuş verilerle çalışmaya devam etmek isterler.
Geliştirici için burada mimari bir soru ortaya çıkar: iki platformda ortak erişimi nasıl düzenlemek, yerel cihaz anahtarlarını taşımadan ve kendi backend'inin veritabanına bunların kopyalarını eklemeden?
KeyMeld üzerinde araştırırken, servisin bu amaçla iOS ve Android'in iç korumasına müdahale etmeden kullanılabilecek ayrı bir evrensel anahtar önerdiğini gördüm.
Farklı platformlar için ortak anahtar
Yerel cihaz anahtarı, belirli bir telefona aittir ve ilgili işletim sisteminin araçlarıyla korunur. Bu anahtar, ilgili cihazın korunmuş ortamında kalır ve cihazlar arasında serbestçe taşınmak üzere tasarlanmamıştır.
KeyMeld'in evrensel anahtarı ise farklı bir varlıktır. Belirli bir proje, hesap ve güvenli alan için oluşturulur ve farklı platformlardaki yetkili müşteriler arasında ortak hale gelir.
Hizmet, iPhone'daki anahtarı alıp Android'e taşımıyor ve iki farklı anahtarı tek yapmaya çalışmıyor. Platform koruması bağımsız kalıyor ve uygulama, projesi için ortak erişim seviyesine sahip oluyor.
İşte bunun mimari rolü KeyMeld'i belirler. iOS ve Android'i aynı hale getirmez ve iç mekanizmalarını değiştirmez. Tek yaptığı, ortak anahtar seviyesinde bir erişim sağlar; bu sayede proje, platformlar arası anahtar dağıtımını kendisi çözmek zorunda kalmaz.
Farklı ürünler ve hesaplar için bağımsız anahtar ortamları kurulabilir. Bu, her projenin kendi erişim alanını korumasını sağlar ve aynı cihazda birden fazla hesap ayrı kalır.
Zero Vault projeye aittir
Öncelikle belirtmek gerekirse: Zero Vault, KeyMeld'in kendisi değil, bir mimari modeldir. Bağlı bir ürün tarafından kurulabilen bir yapıdir.
KeyMeld, bağımsız bir SaaS hizmeti olarak çalışır. Uygulama backend'inin içine entegre edilmez veya proje veritabanının yanına başka bir modül olarak kurulmaz. Evrensel anahtar, backend'in ötesinde, ayrı bir SaaS ortamında, KeyMeld tarafından yönetilir.
Bu modelin korunması için, proje ile KeyMeld arasındaki güven sınırlarının bağımsız kalması gerekir. Uygulamanın backend'i ve dış hizmetler, ayrı kimlik bilgileri, erişim izinleri ve yönetim mekanizmaları kullanmalıdır.
Bunun sonucunda, projenin mimarisinde, sunucu tarafında, anahtarın müşteri tarafından korunmuş depolama alanında saklanmadığı, Zero Vault modeli ortaya çıkar: sunucu tabanlı veritabanı, müşteri anahtarı veya güvenli deposunu tutmaz.
Zero Vault, uygulama backend'inin hiçbir şey saklamadığı anlamına gelmez. Hesaplar, ayarlar, iş verileri ve uygulamanın çalışması için gerekli diğer bilgiler orada kalır. Ama ortak anahtar, onların yanında bulunmaz.
Sunucu veritabanının ele geçirilmesi, evrensel anahtarı açığa çıkarmaz çünkü o, hesaplar veya diğer sunucu verileriyle birlikte saklanmaz. Ayrıca, böyle bir model, altyapıdaki herhangi bir sorunun otomatik olarak zararsız hale geleceği garantisi vermez. Ama belirli bir görevi çözer: müşteri depolama alanında evrensel anahtarın olmamasını sağlar.
Canlı senaryo: bir hesapla iPhone ve Android kullanımı
Yerel koruma verileri olan bir uygulamayı düşünelim. Bu, doğrulayıcı, kurumsal müşteri veya yerel şifrelenmiş bilgiyle doğrudan çalışması gereken herhangi bir hizmet olabilir.
iPhone'da uygulama, yerel anahtarı iOS araçlarıyla korur. Android'de ise Android'in kendi koruma mekanizması kullanılır. İçsel anahtarlar farklıdır ve bu normaldir.
İki platformda aynı korunmuş verilere erişim kurmak için ayrı bir katmana ihtiyaç duyulmasaydı, geliştirici, bu iki önlemi nasıl bağlayacaklarını düşünürdü. Platform bazlı depolama yine farklı olurdu ve uygulama bunları bağlamak zorunda kalırdı.
İçeriklerini manuel taşımak veya sunucuda kopyalarını tutmak gibi farklı çözümler de olabilirdi.
Ancak KeyMeld, yerel anahtarların taşınmasından ve sunucuda saklanmasından vazgeçiriyor, evrensel anahtar ekleyerek bu sorunu çözüyor.
iPhone ve Android istemcileri, yetkilendirilmiş proje ve hesap çerçevesinde aynı evrensel anahtara erişir. Her iki telefon da kendi koruma araçlarını kullanmaya devam eder.
Kullanıcı açısından, bu, farklı cihazlarda tek bir hesap gibi görünür. İçeride hangi mekanizma kullanıldığıyla ilgilenmesine gerek yoktur.
Telefon değiştirilse de, yerel anahtarı eski cihazdan dışa aktarmak veya yeni platform için ayrı bir koruma deposu oluşturmak gerekmez. Yeni istemci aynı projeye bağlanır ve aynı evrensel anahtara erişir.
Backend, isteğin doğrulanmasında rol oynar ama, evrensel anahtar sadece yetkili müşteriye yöneliktir ve sunucu veritabanında saklanmaz.
KeyMeld, uygulama veritabanını veya kullanıcı kayıtlarının senkronizasyonunu taşımıyor. Görevi, kullanıcının korunmuş verilerle çalışması için gereken anahtarı sağlamaktır. Depolama içeriği ve güncellemeleri, ürünün sorumluluğundadır.
Üç farklı anahtar ve gizli bilgi tipi
Farklı mimari bölümleri karıştırmamak için, üç kavramı ayırt etmek yeterlidir.
Yerel cihaz anahtarı belirli bir telefona ait olup, iOS veya Android araçlarıyla korunur.
Evrensel anahtar ise, aynı projedeki ve hesapta yetkili müşteriler tarafından kullanılır. Bu, platformlar arası bağlantıyı sağlar.
Servis gizli anahtar ise, backend'in KeyMeld ile güvenli iletişim kurması için kullanılır. Mobil veya tarayıcıya aktarılmaz.
Servis gizli anahtar ve evrensel anahtar farklı amaçlar taşır. Zero Vault mimarisinde, evrensel anahtar, ürün veritabanında, backend'in diğer verileriyle birlikte saklanmaz.
KeyMeld'in çalışması için, isim, parola, TOTP deposu veya kayıtların işlevsel anlamı gerekmez. Hizmet, proje, hesap ve müşteri yetkisiyle evrensel anahtar erişimini önemser.
Erişim kontrolü sürdürülebilir
Evrensel anahtar erişimi, herhangi bir müşterinin otomatik hakkı değildir.
Eğer cihaz artık güvenilir sayılmazsa, hesap durumu değişmişse veya erişim iptal edilmişse, KeyMeld bu müşteriye evrensel anahtarın verilmesine son verebilir.
Burada önemli olan, otomatik anahtar silme anlamına gelmez. Kontrol, anahtar alma sürecinin devamlılığını ve yeni müşterilerin erişimini sınırlar.
Kullanıcı açısından, yeni cihazların bağlanması ve erişim kontrolleri aynı sisteme bağlıdır.
Geliştirici açısından ise, bu mantığı kendi iOS ve Android uygulamaları için ayrı ayrı kurması gerekmez. Sonuç olarak Zero Vault modeli, projenin kendi altyapısında evrensel anahtarı tutup tutmama ve dış SaaS ortamıyla bölünmüşlüğüne bağlıdır.
KeyMeld'in yapmadıkları
KeyMeld parola yöneticisi değildir ve kullanıcıların TOTP kaydını saklamaz. Bir uygulama bulut veritabanı veya içerik senkronizasyonunun yerini almaz.
Apple Keychain veya Android Keystore'un yerine geçmez. Servis, platformların yerel mekanizmalarını korur ve ürün için ortak bir seviyeye ekler.
Bu aynı zamanda, kullanıcı tanımlama veya kimlik doğrulama hizmeti değildir. Kimlik ve erişim sağlamak için, örneğin MeldID gibi ayrı bir servis kullanılabilir; KeyMeld'in görevi ise, ona evrensel anahtar sağlayıp, ürün backend'ine yerleştirmemektir.
Ve nihayetinde, KeyMeld otomatik Zero Vault oluşturmaz. Bu, projeye evrensel anahtarın dış bir ortamını sağlar. Böyle bir mimarinin korunması için, geliştirici, evrensel anahtarı kendi sunucu veritabanına koymamalıdır. Güvenilir alanlar bağımsız kalmalıdır.
Kimler için faydalı olabilir
Bu yaklaşım, birkaç platformda birden çalışan ve yerel koruma verisi kullanan uygulamalar için uygundur.
Bunlar, doğrulayıcılar, kurumsal uygulamalar, SaaS ürünleri, çok cihazlı hizmetler veya tek hesabın iPhone ve Android üzerinde aynı şekilde çalışması gereken tüm projeler olabilir.
Geliştirici açısından, bu, sadece platform mantığını azaltmak değil, sorumluluğu bölüşmek açısından da önemlidir. Ürün backend'leri kendi verilerini tutar, KeyMeld ise evrensel anahtarı sağlar ve kullanımını yönetir.
Projeye aşina olduktan sonra, KeyMeld'i hazır bir Zero Vault olarak değil, geliştiricinin kendi ürünü için böyle bir model kurabileceği bir araç olarak tanımlardım.
iOS ve Android halen kendi koruma mekanizmalarını kullanmaya devam eder. Müşteriler evrensel anahtarı alır. Ve eğer uygulama backend'i bu anahtarı tutmuyor ve altyapı ile KeyMeld arasını ayırıyorsa, o zaman müşterinin anahtarına ulaşan bir kasa olmaktan çıkmıştır.
Kullanıcı açısından, bu farklı platformlarda tek erişim anlamına gelir. Geliştirici açısından, evrensel anahtarı kendi backend'inden çıkarmanın yolu açılır. Ve proje için ise, sunucu, müşteri verilerine erişim anahtarını tutmayan bir Zero Vault mimarisi sağlar.
Daha fazla bilgi için: KeyMeld