Kapı görevlisi

Gatekeeper alt sistemi, cihaz desen/şifre kimlik doğrulamasını Güvenilir Yürütme Ortamı'nda (TEE) gerçekleştirir. Gatekeeper, donanım destekli gizli anahtar içeren bir HMAC aracılığıyla şifreleri kaydeder ve doğrular. Ayrıca Gatekeeper, art arda yapılan başarısız doğrulama denemelerini sınırlandırır ve belirli bir zaman aşımı ve art arda yapılan belirli sayıda başarısız deneme sayısına göre istekleri reddetmelidir.

Kullanıcılar şifrelerini doğruladığında Gatekeeper, donanım destekli anahtar deposuna gönderilecek bir kimlik doğrulama tasdikini imzalamak için TEE'den türetilen paylaşılan gizliyi kullanır. Yani Gatekeeper tasdiki, Anahtar Deposu'nu kimlik doğrulamasına bağlı anahtarların (ör. uygulamaların oluşturduğu anahtarlar) uygulamalar tarafından kullanılması için serbest bırakılabileceği konusunda bilgilendirir.

Mimari

Gatekeeper üç ana bileşenden oluşur:

  • gatekeeperd (Kapı görevlisi arka plan programı). Platformdan bağımsız mantık içeren ve GateKeeperService Java arayüzüne karşılık gelen bir C++ bağlayıcı hizmeti.
  • Gatekeeper Donanım Soyutlama Katmanı (HAL). hardware/libhardware/include/hardware/gatekeeper.h'teki HAL arayüzü ve uygulama modülü.
  • Gatekeeper (TEE). gatekeeperd için TEE eşdeğeri. Gatekeeper'ın TEE tabanlı bir uygulaması.

Gatekeeper, Gatekeeper HAL'in (özellikle hardware/libhardware/include/hardware/gatekeeper.h içindeki işlevler) ve TEE'ye özgü Gatekeeper bileşeninin (kısmen anahtar oluşturma/erişim ve imzalar hesaplama için saf sanal işlevler içeren system/gatekeeper/include/gatekeeper/gatekeeper.h başlık dosyasına dayalı) uygulanmasını gerektirir.

LockSettingsService, Android OS'teki gatekeeperd daemon'una ulaşan bir istek (Binder aracılığıyla) gönderir. gatekeeperd daemon'u daha sonra TEE'deki karşılığına (Gatekeeper) ulaşan bir istek gönderir:

Kapı görevlisi akışı
Şekil 1. GateKeeper tarafından kimlik doğrulama için yüksek düzey veri akışı

gatekeeperd daemon'u, Android çerçeve API'lerine HAL'e erişim izni verir ve cihaz kimlik doğrulamalarının Anahtar Deposu'na raporlanmasında yer alır. gatekeeperd daemon'ı kendi işleminde çalışır ve sistem sunucusundan ayrıdır.

HAL uygulaması

gatekeeperd daemon'u, şifre kimlik doğrulaması için gatekeeperd daemon'unun TEE karşılığıyla etkileşimde bulunmak üzere HAL'i kullanır. HAL uygulaması, blob'ları imzalayabilmeli (kaydedebilmelidir) ve doğrulayabilmelidir. Tüm uygulamaların, her başarılı şifre doğrulamasında oluşturulan kimlik doğrulama jetonu (AuthToken) için standart biçime uyması beklenir. AuthToken'ın içeriği ve semantiği hakkında ayrıntılı bilgi için AuthToken biçimi başlıklı makaleyi inceleyin.

hardware/libhardware/include/hardware/gatekeeper.h başlık dosyasının uygulamalarında enroll ve verify işlevleri uygulanmalıdır:

  • enroll işlevi, bir şifre blob'unu alır, imzalar ve imzayı bir herkese açık kimlik olarak döndürür. Döndürülen blob (enroll çağrısından), system/gatekeeper/include/gatekeeper/password_handle.h'te gösterilen yapıya sahip olmalıdır.
  • verify işlevi, sağlanan şifre tarafından oluşturulan imzayı karşılaştırmalı ve kayıtlı şifre herkese açık kimliğiyle eşleştiğinden emin olmalıdır.

Kaydetme ve doğrulama için kullanılan anahtar hiçbir zaman değişmemeli ve her cihazın başlatılışında yeniden türetilmeye uygun olmalıdır.

Trusty 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ıdayken tikleyen güvenli, tekdüze bir saate erişimi olduğu sürece Gatekeeper'ı uygulamak için herhangi bir TEE OS kullanabilirsiniz.

Trusty, paylaşılan bir gizli anahtarı doğrudan Keymaster ile Gatekeeper'ın Trusty uygulaması (Trusty Gatekeeper) arasında iletmek için dahili bir IPC sistemi kullanır. Bu paylaşılan gizli anahtar, şifre doğrulamasıyla ilgili kanıtlar sağlamak için Keystore'a gönderilen AuthToken'ları imzalamak için kullanılır. Güvenilir Kapı Bekçisi, her kullanım için anahtarı Anahtar Üstadı'ndan ister ve değeri kalıcı olarak saklamaz veya önbelleğe almaz. Uygulamaların bu gizli bilgiyi güvenliği ihlal etmeyecek herhangi bir şekilde paylaşması serbesttir.

Şifreleri kaydettirmek ve doğrulamak için kullanılan HMAC anahtarı, yalnızca GateKeeper'da türetilir ve saklanır.

Android, GateKeeper'ın genel bir C++ uygulamasını sağlar. Bu uygulamanın tamamlanması için yalnızca cihaza özel rutinlerin eklenmesi gerekir. TEE'niz için cihaza özel kod içeren bir TEE Gatekeeper uygulamak istiyorsanız system/gatekeeper/include/gatekeeper/gatekeeper.h içindeki işlevlere ve yorumlara bakın. TEE GateKeeper için uyumlu bir uygulamanın birincil sorumlulukları şunlardır:

  • Gatekeeper HAL'e uygunluk.
  • Döndürülen AuthToken'lar, AuthToken spesifikasyonuna (Kimlik doğrulama bölümünde açıklanmıştır) göre biçimlendirilmelidir.
  • TEE Gatekeeper, anahtarı istek üzerine bir TEE IPC aracılığıyla isteyerek veya değerin geçerli bir önbelleğini her zaman koruyarak Keymaster ile HMAC anahtarı paylaşabilmelidir.

Kullanıcı Güvenli Kimlikleri (SID'ler)

Kullanıcı SID'si, bir kullanıcının TEE temsilidir (Android kullanıcı kimliğiyle güçlü bir bağlantısı yoktur). SID, kullanıcı önceki şifresini sağlamadan yeni bir şifre kaydettiğinde kriptografik bir sözde rastgele sayı üreteci (PRNG) ile oluşturulur. Bu, güvenilmeyen yeniden kayıt olarak bilinir ve normal durumlarda Android çerçevesi tarafından izin verilmez. Kullanıcı geçerli bir önceki şifre sağladığında güvenilir yeniden kayıt gerçekleşir. Bu durumda, kullanıcı SID'si yeni şifre işleyicisine taşınır ve kendisine bağlı anahtarlar korunur.

Şifre kaydedilirken kullanıcı SID'si, şifre işleyicisindeki şifreyle birlikte HMAC'ye tabi tutulur.

Kullanıcı SID'leri, verify işlevi tarafından döndürülen AuthToken'e yazılır ve kimlik doğrulamasına bağlı tüm Keystore anahtarlarıyla ilişkilendirilir (AuthToken biçimi ve Keystore hakkında ayrıntılı bilgi için Kimlik doğrulama bölümüne bakın). enroll işlevine yapılan güvenilmeyen bir çağrı, kullanıcı SID'sini değiştireceğinden bu çağrı, söz konusu şifreye bağlı anahtarları işe yaramaz hale getirir. Saldırganlar, Android OS'i kontrol ediyorlarsa cihazın şifresini değiştirebilir ancak bu süreçte root korumalı hassas anahtarları yok ederler.

İstek sınırlama

GateKeeper, kullanıcı kimlik bilgilerine yönelik kaba kuvvet denemelerini güvenli bir şekilde kısıtlayabilmelidir. hardware/libhardware/include/hardware/gatekeeper.h'te gösterildiği gibi, HAL milisaniye cinsinden bir zaman aşımı döndürme olanağı sunar. Zaman aşımı, istemciye zaman aşımı dolana kadar GateKeeper'ı tekrar çağırmamasını bildirir. Beklemedeki bir zaman aşımı varsa GateKeeper isteklere hizmet vermemelidir.

GateKeeper, kullanıcı şifresini doğrulamadan önce bir hata sayacı yazmalıdır. Şifre doğrulaması başarılı olursa hata sayacı sıfırlanır. Bu, verify çağrısı yapıldıktan sonra yerleşik MMC'yi (eMMC) devre dışı bırakarak tıkanmayı önleyen saldırıları engeller. enroll işlevi, kullanıcı şifresini de (sağlandıysa) doğrular ve aynı şekilde sınırlandırılmalıdır.

Cihaz tarafından destekleniyorsa hata sayıcısının güvenli depolama alanına yazılması önemle tavsiye edilir. Cihaz dosya tabanlı şifrelemeyi desteklemiyorsa veya güvenli depolama alanı çok yavaşsa uygulamalar doğrudan Tekrar Oynatma Korumalı Bellek Bloğu'nu (RPMB) kullanabilir.