Gatekeeper alt sistemi, bir Güvenilir Yürütme Ortamında (TEE) cihaz modeli/parola kimlik doğrulaması gerçekleştirir. Gatekeeper, donanım destekli bir gizli anahtarla bir HMAC aracılığıyla parolaları kaydeder ve doğrular. Ek olarak, Gatekeeper ardışık başarısız doğrulama girişimlerini kısıtlar ve belirli bir zaman aşımına ve belirli sayıda ardışık başarısız denemeye dayalı olarak hizmet isteklerini reddetmelidir.
Kullanıcılar parolalarını doğruladığında, Gatekeeper, donanım destekli Anahtar Deposuna göndermek üzere bir kimlik doğrulama onayı imzalamak için TEE'den türetilen paylaşılan sırrı kullanır. Diğer bir deyişle, bir Gatekeeper onayı, Keystore'a, kimlik doğrulamaya bağlı anahtarların (örneğin, uygulamaların oluşturduğu anahtarların) uygulamalar tarafından kullanılmak üzere serbest bırakılabileceğini bildirir.
Mimari
Gatekeeper üç ana bileşen içerir:
-
gatekeeperd
(Gatekeeper arka plan programı). Platformdan bağımsız mantık içeren veGateKeeperService
Java arabirimine karşılık gelen bir C++ bağlayıcı hizmeti. - Gatekeeper Donanım Soyutlama Katmanı (HAL) .
hardware/libhardware/include/hardware/gatekeeper.h
içindeki HAL arabirimi ve uygulama modülü. - Kapı bekçisi (TEE) .
gatekeeperd
TEE karşılığı. Gatekeeper'ın TEE tabanlı bir uygulaması.
Gatekeeper, Gatekeeper HAL (özellikle hardware/libhardware/include/hardware/gatekeeper.h
içindeki işlevler) ve TEE'ye özgü Gatekeeper bileşeninin (kısmen system/gatekeeper/include/gatekeeper/gatekeeper.h
başlık dosyasına dayalı olarak) uygulanmasını gerektirir. anahtarlar ve bilgi işlem imzaları oluşturmak/erişmek için saf sanal işlevleri içerir).
LockSettingsService
, Android işletim sisteminde gatekeeperd
bekçili arka plan programına ulaşan bir istek (Binder aracılığıyla) yapar. Kapı bekçili arka plan programı daha sonra gatekeeperd
karşılığına (Gatekeeper) ulaşan bir istekte bulunur:

gatekeeperd
arka plan programı, Android çerçeve API'lerinin HAL'e erişmesini sağlar ve cihaz kimlik doğrulamalarının Anahtar Deposu'na bildirilmesine katılır. gatekeeperd
arka plan programı kendi sürecinde çalışır ve sistem sunucusundan ayrıdır.
HAL uygulaması
Kapı bekçili arka plan programı, parola doğrulaması için gatekeeperd
gatekeeperd
arka plan programının TEE karşılığı ile etkileşim kurmak için HAL'ı kullanır. HAL uygulamasının blobları imzalayabilmesi (kaydolabilmesi) ve doğrulayabilmesi gerekir. Tüm uygulamaların, her başarılı parola doğrulamasında oluşturulan kimlik doğrulama belirtecinin (AuthToken) standart biçimine uyması beklenir. AuthToken'ın içeriği ve anlamı hakkında ayrıntılar için, bkz. AuthToken formatı .
hardware/libhardware/include/hardware/gatekeeper.h
başlık dosyasının uygulamaları, enroll
ve verify
işlevlerini uygulamalıdır:
-
enroll
işlevi bir parola bloğunu alır, imzalar ve imzayı bir tanıtıcı olarak döndürür. Döndürülen blob (enroll
çağrısından),system/gatekeeper/include/gatekeeper/password_handle.h
içinde gösterilen yapıya sahip olmalıdır. -
verify
işlevi, sağlanan parola tarafından üretilen imzayı karşılaştırmalı ve kayıtlı parola tanıtıcısıyla eşleştiğinden emin olmalıdır.
Kaydolmak ve doğrulamak için kullanılan anahtar hiçbir zaman değişmemeli ve her aygıt önyüklemesinde yeniden türetilebilir olmalıdır.
Güvenilir ve diğer uygulamalar
Trusty işletim sistemi, Google'ın TEE ortamları için açık kaynaklı güvenilir işletim sistemidir ve GateKeeper'ın onaylanmış bir uygulamasını içerir. Ancak, TEE'nin donanım destekli bir anahtara ve askıya alınan güvenli, monotonik bir saate erişimi olduğu sürece Gatekeeper'ı uygulamak için herhangi bir TEE İşletim Sistemini kullanabilirsiniz.
Trusty, paylaşılan bir sırrı doğrudan Keymaster ile Gatekeeper'ın Trusty uygulaması ( Trusty Gatekeeper ) arasında iletmek için dahili bir IPC sistemi kullanır. Bu paylaşılan sır, parola doğrulamasının onaylarını sağlamak için Keystore'a gönderilen AuthToken'ları imzalamak için kullanılır. Trusty Gatekeeper, her kullanım için Keymaster'dan anahtarı ister ve değeri sürdürmez veya önbelleğe almaz. Uygulamalar, güvenliği tehlikeye atmayacak şekilde bu sırrı paylaşmakta serbesttir.
Parolaları kaydetmek ve doğrulamak için kullanılan HMAC anahtarı türetilir ve yalnızca GateKeeper'da tutulur.
Android, tamamlanması için yalnızca cihaza özgü rutinlerin eklenmesini gerektiren genel bir GateKeeper C++ uygulaması sağlar. TEE'niz için cihaza özel kodlu bir TEE Gatekeeper uygulamak için system/gatekeeper/include/gatekeeper/gatekeeper.h
içindeki işlevlere ve yorumlara bakın. TEE GateKeeper için uyumlu bir uygulamanın birincil sorumlulukları şunları içerir:
- Gatekeeper HAL'a bağlılık.
- Döndürülen AuthTokens, AuthToken belirtimine göre biçimlendirilmelidir ( Authentication içinde açıklanmıştır).
- TEE Gatekeeper, anahtarı talep üzerine bir TEE IPC aracılığıyla talep ederek veya her zaman değerin geçerli bir önbelleğini koruyarak bir HMAC anahtarını Keymaster ile paylaşabilmelidir.
Kullanıcı Güvenli Kimlikleri (SID'ler)
Kullanıcı SID'si, bir kullanıcının TEE temsilidir (bir Android kullanıcı kimliğine güçlü bir bağlantısı yoktur). SID, bir kullanıcı önceki bir parola sağlamadan yeni bir parola kaydettiğinde, bir kriptografik rasgele rasgele sayı üreteci (PRNG) ile oluşturulur. Bu, güvenilmeyen yeniden kayıt olarak bilinir ve normal koşullarda Android çerçevesi tarafından izin verilmez. Bir kullanıcı geçerli, önceki bir parola sağladığında güvenilir bir yeniden kayıt gerçekleşir; bu durumda, Kullanıcı SID'si, kendisine bağlı olan anahtarlar korunarak yeni parola tanıtıcısına geçirilir.
Parola kaydedildiğinde, Kullanıcı SID'si parola tanıtıcısındaki parolayla birlikte HMAC'lenir.
Kullanıcı SID'leri, verify
işlevi tarafından döndürülen AuthToken'a yazılır ve tüm kimlik doğrulamaya bağlı Anahtar Deposu anahtarlarıyla ilişkilendirilir (AuthToken biçimi ve Anahtar Deposu ile ilgili ayrıntılar için, bkz. Kimlik Doğrulama ). enroll
işlevine yapılan güvenilmeyen bir çağrı Kullanıcı SID'sini değiştireceğinden, çağrı bu parolaya bağlı anahtarları işe yaramaz hale getirecektir. Saldırganlar, Android işletim sistemini kontrol ederlerse cihazın şifresini değiştirebilirler ancak bu süreçte kök korumalı, hassas anahtarları yok edeceklerdir.
Kısma iste
GateKeeper, bir kullanıcı kimlik bilgisine yönelik kaba kuvvet girişimlerini güvenli bir şekilde kısabilmelidir. hardware/libhardware/include/hardware/gatekeeper.h
içinde gösterildiği gibi, HAL milisaniye cinsinden bir zaman aşımı döndürmeyi sağlar. Zaman aşımı, istemciye, zaman aşımı sona erene kadar GateKeeper'ı tekrar aramaması konusunda bilgi verir; Bekleyen bir zaman aşımı varsa GateKeeper isteklere hizmet vermemelidir.
GateKeeper, bir kullanıcı parolasını doğrulamadan önce bir hata sayacı yazmalıdır. Parola doğrulama başarılı olursa, hata sayacı temizlenmelidir. Bu, bir verify
çağrısı yaptıktan sonra katıştırılmış MMC'yi (eMMC) devre dışı bırakarak kısıtlamayı önleyen saldırıları önler. enroll
işlevi ayrıca (varsa) kullanıcı parolasını da doğrular ve aynı şekilde kısılmalıdır.
Cihaz tarafından destekleniyorsa, güvenli depolama için arıza sayacının yazılması önemle tavsiye edilir. Cihaz dosya tabanlı şifrelemeyi desteklemiyorsa veya güvenli depolama çok yavaşsa, uygulamalar doğrudan Tekrar Korumalı Bellek Bloğu'nu (RPMB) kullanabilir.