Android'de, cihazın kilidini açmak ve şifreleme anahtarlarına erişimi kontrol etmek için kullanılan kullanıcı kimlik doğrulayıcılar bulunur. Bu işlem aşağıdaki bileşenleri içerir:
- Şifreleme anahtarı depolama ve servis sağlayıcı. Android Anahtar Deposu, uygulamalar için donanım destekli kriptografi hizmetleri sağlar. Çerçeve düzeyindeki Android Keystore sistemi,
keystore2
sistem hizmeti tarafından desteklenir. Bu da, anahtar materyaline yalnızca donanım destekli güvenli bir ortamda (ör. Güvenilir Yürütme Ortamı (TEE) veya Güvenli Öğe (SE)) erişilebilmesini sağlayan, tedarikçiye özgü bir KeyMint (eski adıyla Keymaster) uygulamasına dayanır. - Kullanıcı kimlik doğrulayıcıları. Kullanıcının kimliğinin başarıyla doğrulandığını onaylayın.
Android aşağıdaki kimlik doğrulama bileşenlerini destekler:
- TEE'de PIN, desen veya şifre kimlik doğrulaması için Güvenlik görevlisi.
- (İsteğe bağlı) Güvenli bir öğede PIN, desen veya şifre kimlik doğrulaması için Weaver.
- Parmak izi kimlik doğrulaması için Fingerprint (Parmak izi).
- Diğer biyometrik kimlik doğrulama yöntemleri. Android 9 veya sonraki sürümlerin yüklü olduğu cihazlar, parmak izi ve ek biyometriler için tek bir entegrasyon noktası olarak
BiometricPrompt
kullanabilir.
keystore2
hizmetiyle paylaşır .
Bu bileşenlerin her biri tedarikçiye özeldir ancak tedarikçi uygulamasının bir Donanım Soyutlama Katmanı (HAL) arayüzü spesifikasyonunu karşılaması ve ilgili tedarikçi test paketi (VTS) testlerini geçmesi gerekir.
Tedarikçi firma uygulamaları da genellikle tedarikçiye özgü bir iletişim mekanizmasıyla birbirine bağlı iki bölüme ayrılır :
- HAL hizmeti, Android sistem işlemi olarak çalışır ve Android sisteminden Binder istekleri alır.
- Güvenilir uygulama (TA), güvenli ortamda çalışır ve gerçek güvenli işlemleri gerçekleştirir.
Kayıt
Fabrika ayarlarına sıfırlandıktan sonra cihaz ilk kez açıldığında tüm kimlik doğrulayıcılar, kullanıcıdan kimlik bilgisi kaydı almaya hazır olur. Kullanıcının başlangıçta Gatekeeper'a (veya varsa Weaver'a) bir PIN, desen veya şifre kaydetmesi gerekir. Bu ilk kayıt işlemi, kullanıcı için tanımlayıcı ve kullanıcının kriptografik materyali için bağlayıcı jeton görevi gören, rastgele oluşturulmuş 64 bitlik bir kullanıcı güvenli tanımlayıcısı (SID) oluşturur. Bu kullanıcı SID'si, kullanıcının şifresine kriptografik olarak bağlıdır. Gatekeeper'da başarılı kimlik doğrulamaları, söz konusu şifrenin kullanıcı SID'sini içeren AuthToken'ler ile sonuçlanır.
Mevcut bir kimlik bilgisini değiştirmek isteyen kullanıcının bu kimlik bilgisini sunması gerekir. Mevcut bir kimlik bilgisi başarıyla doğrulanırsa mevcut kimlik bilgisiyle ilişkili kullanıcı SID'si yeni kimlik bilgisine aktarılır. Bu sayede kullanıcı, kimlik bilgisini değiştirdikten sonra anahtarlara erişmeye devam edebilir.
Bazı durumlarda cihaz yöneticileri, mevcut bir kimlik bilgisi sunmadan yeni bir kimlik bilgisi kaydettirmek için güvenilir olmayan kayıt işlemi gerçekleştirebilir. Bu işlem, kullanıcının cihaza erişmesine olanak tanır ancak eski kullanıcı SID'si altında oluşturulan anahtarlar kalıcı olarak kaybedilir.
Kimlik doğrulama
Bu bölümde, hem Android'deki hem de güvenli ortamdaki birden fazla bileşen arasındaki etkileşimleri içeren tipik bir kimlik doğrulama akışı açıklanmaktadır. Tüm güvenli bileşenlerin, birbirlerinin mesajlarının kimliğini doğrulamak için kullandıkları gizli bir HMAC anahtarını (açılış başına) paylaştığını unutmayın.
Kullanıcı bir kimlik bilgisi oluşturduktan ve kendisine bir kullanıcı SID'si atandıktan sonra kimlik doğrulamayı başlatabilir. Kimlik doğrulama, kullanıcı bir PIN, desen, şifre, parmak izi veya başka bir güçlü biyometri sağladığında başlar.
Şekil 1. Kimlik doğrulama akışı
- Kullanıcı bir kimlik doğrulama yöntemi sağlar ve ilişkili hizmet HAL hizmetine istek gönderir.
- PIN, desen veya şifre için
LockSettingsService
,gatekeeperd
'a istek gönderir. - Biyometrik kimlik doğrulama akışları Android sürümüne bağlıdır.
Android 8.x ve önceki sürümleri çalıştıran cihazlarda
FingerprintService
,fingerprintd
'e istek gönderir. Android 9 ve sonraki sürümleri çalıştıran cihazlardaBiometricPrompt
,FingerprintManager
veyaFaceManager
gibi uygunBiometricManager
sınıfını kullanarak uygun biyometri hizmetine (ör. parmak izi içinfingerprintd
veya yüz içinfaced
) istek gönderir. Sürümden bağımsız olarak, biyometrik kimlik doğrulama, istek gönderildikten sonra asenkron olarak gerçekleşir.
- PIN, desen veya şifre için
- HAL hizmeti, eşdeğer TA'ya veri gönderir. TA, bir AuthToken oluşturur:
- PIN/desen/şifre kimlik doğrulaması için
gatekeeperd
, PIN, desen veya şifre karmasını Gatekeeper HAL hizmeti aracılığıyla TEE'deki Gatekeeper TA'ya gönderir. TEE'de kimlik doğrulama başarılı olursa Gatekeeper TA, ilgili kullanıcı SID'sini (paylaşılan HMAC anahtarıyla imzalanmış) içeren bir AuthToken yayınlar. - Parmak izi kimlik doğrulaması için
fingerprintd
, parmak izi etkinliklerini dinler ve verileri Fingerprint HAL aracılığıyla TEE'deki Fingerprint TA'ya gönderir. TEE'de kimlik doğrulama başarılı olursa Parmak İzi TA'sı bir AuthToken (AuthToken HMAC anahtarıyla imzalanır) yayınlar. - Diğer biyometrik kimlik doğrulama işlemleri için uygun biyometrik daemon, biyometrik etkinliği dinler ve uygun biyometrik HAL hizmetine ve TA'ya gönderir.
- PIN/desen/şifre kimlik doğrulaması için
- Elde edilen imzalı AuthToken, Binder arayüzü üzerinden
keystore2
sistem hizmetine iletilir. keystore2
hizmeti, KeyMint'in (eski adıyla Keymaster) kriptografik işlemler gerçekleştirmesini istemek için AuthTokens'i ekler. KeyMint HAL hizmeti, bu verileri KeyMint TA'ya iletir. TA, verileri Gatekeeper ile paylaşılan HMAC anahtarını ve desteklenen biyometrik TEE bileşenlerini kullanarak doğrular. KeyMint, jetondaki zaman damgasını son kimlik doğrulama zamanı olarak kabul eder ve anahtarın kullanımına izin verilip verilmeyeceğine zaman damgasına göre karar verir.
Kimlik doğrulama akışı, güvenli ortamdaki TA'lar arasında doğrudan iletişim gerektirmez: AuthTokens, kimlik doğrulayıcı TA'dan Android'deki keystore2
hizmetine akar ve bu hizmet de bunları KeyMint TA'ya iletir.
Bu sayede keystore2
hizmeti, sistemdeki mevcut AuthToken'ler hakkında bilgi sahibi olduğundan başarısız olacak istekleri hızlıca reddedebilir ve TEE'de maliyetli olabilecek bir IPC'den tasarruf edebilir.
AuthToken biçimi
AuthToken'ın biçimi, HardwareAuthToken.aidl
adresindeki AIDL spesifikasyonunda verilmiştir.
Cihaz başlatma akışı
Bir cihaz her açıldığında AuthToken HMAC anahtarı oluşturulmalı ve tüm TEE bileşenleriyle (Gatekeeper, KeyMint/Keymaster ve desteklenen biyometri TA'ları) paylaşılmalıdır. Tekrar oynatma saldırılarını önlemek için HMAC anahtarı, cihaz her yeniden başlatıldığında rastgele oluşturulmalıdır.
TA'ların bu paylaşılan HMAC anahtarına erişmesinin iki yaygın yolu vardır:
- Paylaşılan gizli anlaşma:
keystore2
hizmeti, cihazın başlatılması sırasında çok yönlü bir anahtar sözleşmesi protokolü gerçekleştirir. Bu protokol, katılımcı TA'lar arasında HMAC anahtarının güvenli bir şekilde türetilmesine olanak tanır. Ancak, katılan TA'ların ortak bir önceden paylaşılmış gizeme erişimi olmalıdır. - Doğrudan erişim: Aynı güvenli ortamda bulunan TA'lar, HMAC anahtarını paylaşmak için dahili bir işlemler arası iletişim mekanizması (platforma bağlıdır) kullanabilir.
Her iki durumda da HMAC anahtarı asla TEE dışında kullanılamaz.
Android'in yanında çalışan Trusty işletim sistemi, TEE'ye örnek gösterilebilir ancak bunun yerine başka TEE'ler de kullanılabilir. Trusty, KeyMint ile Gatekeeper veya uygun biyometrik TA arasında doğrudan iletişim kurmak için dahili bir IPC sistemi kullanır. HMAC anahtarı yalnızca KeyMint'te saklanır. Parmak İzi ve Gatekeeper, her kullanım için anahtarı KeyMint'ten ister ve değeri kalıcı olarak saklamaz veya önbelleğe almaz.