Android, aşağıdaki bileşenleri gerektiren, kullanıcı kimlik doğrulaması geçişli şifreleme anahtarları kavramını kullanır:
- Kriptografik anahtar depolama ve servis sağlayıcı. Şifreleme anahtarlarını saklar ve bu anahtarların üzerinde standart şifreleme rutinleri sağlar. Android, Güvenilir Yürütme Ortamı (TEE) veya Strongbox gibi Güvenli Öğe (SE) içerebilecek anahtar depolamaya yönelik donanım destekli şifreleme de dahil olmak üzere, şifreleme hizmetleri için donanım destekli Anahtar Deposu ve Anahtar Yöneticisini destekler.
- Kullanıcı kimlik doğrulayıcıları. Kullanıcının varlığını ve/veya başarılı kimlik doğrulamasını doğrulayın. Android, PIN/desen/şifre kimlik doğrulaması için Gatekeeper'ı ve parmak izi kimlik doğrulaması için Parmak İzi'ni destekler. Android 9 ve sonraki sürümlerle birlikte gelen cihazlar
BiometricPrompt
parmak izi ve ek biyometri için tek bir entegrasyon noktası olarak kullanabilir. Bu bileşenler, kimlik doğrulama durumlarını, kimliği doğrulanmış bir kanal aracılığıyla anahtar deposu hizmetine iletir. (Çerçeve düzeyindeki Android Anahtar Deposu sistemi de anahtar deposu hizmeti tarafından desteklenir.)
Gatekeeper, Fingerprint ve Biometric bileşenleri, donanım destekli kimlik doğrulama belirteçlerinin (AuthTokens) kullanımını desteklemek için Keystore ve diğer bileşenlerle birlikte çalışır.
Kayıt
Fabrika ayarlarına sıfırlamanın ardından cihazın ilk açılışında, tüm kimlik doğrulayıcılar kullanıcıdan kimlik bilgisi kayıtları almaya hazırlanır. Kullanıcının başlangıçta Gatekeeper'a bir PIN/desen/şifre kaydetmesi gerekir. Bu ilk kayıt, kullanıcı için bir tanımlayıcı ve kullanıcının kriptografik materyali için bir bağlama belirteci olarak hizmet veren, rastgele oluşturulmuş, 64 bitlik bir kullanıcı güvenli tanımlayıcı (SID) oluşturur. Bu kullanıcı SID'si kriptografik olarak kullanıcının parolasına bağlıdır; Gatekeeper'a yapılan başarılı kimlik doğrulamaları, söz konusu parola için kullanıcı SID'sini içeren AuthToken'larla sonuçlanır.
Kimlik bilgisini değiştirmek isteyen kullanıcının mevcut bir 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 ve böylece kullanıcının kimlik bilgisini değiştirdikten sonra anahtarlara erişmeye devam etmesi sağlanır. Bir kullanıcı mevcut bir kimlik bilgisini sunmazsa, yeni kimlik bilgisi tamamen rastgele bir Kullanıcı SID'sine kaydedilir. Kullanıcı cihaza erişebilir ancak eski kullanıcı SID'si altında oluşturulan anahtarlar kalıcı olarak kaybolur. Bu, güvenilmeyen kayıt olarak bilinir.
Normal koşullar altında, Android çerçevesi güvenilmeyen kayıt işlemine izin vermez, dolayısıyla çoğu kullanıcı bu işlevi hiçbir zaman görmez. Ancak, bir aygıt yöneticisi veya bir saldırgan tarafından parolanın zorla sıfırlanması bunun oluşmasına neden olabilir.
Kimlik doğrulama
Kullanıcı bir kimlik bilgisi ayarladıktan ve kullanıcı SID'sini aldıktan sonra, kullanıcının PIN, desen, şifre veya parmak izi sağlamasıyla başlayan kimlik doğrulamayı başlatabilir. Tüm TEE bileşenleri, birbirlerinin mesajlarının kimliğini doğrulamak için kullandıkları gizli bir anahtarı paylaşır.
- Kullanıcı bir kimlik doğrulama yöntemi sağlar ve ilgili hizmet, ilgili arka plan programına bir istekte bulunur.
- PIN, desen veya şifre için
LockSettingsService
,gatekeeperd
bir istekte bulunur. - Biyometri tabanlı 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
için bir istekte bulunur). Android 9 ve üstünü çalıştıran cihazlardaBiometricPrompt
,FingerprintManager
veyaFaceManager
gibi uygunBiometric Manager
sınıfını kullanarak uygun biyometrik arka plan programına (örneğin, parmak izleri içinfingerprintd
veya yüz içinfaced
) bir istekte bulunur. Sürümden bağımsız olarak biyometrik kimlik doğrulama, istek gönderildikten sonra eşzamansız olarak gerçekleşir.
- PIN, desen veya şifre için
- Arka plan programı, bir AuthToken oluşturan muadiline veri gönderir:
- PIN/desen/şifre kimlik doğrulaması için,
gatekeeperd
PIN'i, modeli veya şifre karmasını TEE'deki Gatekeeper'a gönderir. TEE'de kimlik doğrulama başarılı olursa, TEE'deki Gatekeeper, Android işletim sistemindeki karşılığına karşılık gelen kullanıcı SID'sini (AuthToken HMAC anahtarıyla imzalanmış) içeren bir AuthToken gönderir. - Parmak izi kimlik doğrulaması için
fingerprintd
, parmak izi olaylarını dinler ve verileri TEE'deki Parmak İzine gönderir. TEE'de kimlik doğrulama başarılı olursa, TEE'deki Parmak İzi, Android işletim sistemindeki karşılığına bir AuthToken (AuthToken HMAC anahtarıyla imzalanmış) gönderir. - Diğer biyometrik kimlik doğrulama için, uygun biyometrik arka plan programı biyometrik olayı dinler ve bunu uygun biyometrik TEE bileşenine gönderir.
- PIN/desen/şifre kimlik doğrulaması için,
- Arka plan programı, imzalanmış bir AuthToken alır ve bunu, anahtar deposu hizmetinin Binder arayüzünün bir uzantısı aracılığıyla anahtar deposu hizmetine iletir. (
gatekeeperd
ayrıca cihaz tekrar kilitlendiğinde ve cihaz şifresi değiştiğinde anahtar deposu servisine bilgi verir.) - Anahtar deposu hizmeti, AuthToken'ları Keymaster'a iletir ve bunları Gatekeeper ve desteklenen biyometrik TEE bileşeniyle paylaşılan anahtarı kullanarak doğrular. Keymaster, son kimlik doğrulama zamanı olarak belirteçteki zaman damgasına güvenir ve anahtar bırakma kararını (bir uygulamanın anahtarı kullanmasına izin vermek için) zaman damgasına dayandırır.
AuthToken biçimi
Diller ve bileşenler arasında belirteç paylaşımını ve uyumluluğu sağlamak için AuthToken biçimi hw_auth_token.h
adresinde açıklanmıştır. Format, sabit boyutlu alanlara sahip basit bir serileştirme protokolüdür.
Alan | Tip | Gerekli | Tanım |
---|---|---|---|
AuthToken Sürümü | 1 bayt | Evet | Aşağıdaki tüm alanlar için grup etiketi. |
Meydan okumak | 64 bit işaretsiz tamsayı | HAYIR | Tekrar saldırılarını önlemek için rastgele bir tam sayı. Genellikle istenen bir kripto işleminin kimliği. Şu anda işlemsel parmak izi yetkilendirmeleri tarafından kullanılmaktadır. AuthToken mevcutsa yalnızca aynı zorluğu içeren kripto işlemleri için geçerlidir. |
Kullanıcı SID'si | 64 bit işaretsiz tamsayı | Evet | Tekrarlanmayan kullanıcı tanımlayıcısı, cihaz kimlik doğrulamasıyla ilişkili tüm anahtarlara kriptografik olarak bağlanır. Ayrıntılar için bkz. Gatekeeper . |
Kimlik Doğrulayıcı Kimliği (ASID) | Ağ sırasına göre 64 bit işaretsiz tamsayı | HAYIR | Belirli bir kimlik doğrulayıcı ilkesine bağlanmak için kullanılan tanımlayıcı. Tüm kimlik doğrulayıcıların kendi gereksinimlerine göre değiştirebilecekleri kendi ASID değerleri vardır. |
Kimlik doğrulayıcı türü | Ağ sırasına göre 32 bit işaretsiz tamsayı | Evet |
|
Zaman damgası | Ağ sırasına göre 64 bit işaretsiz tamsayı | Evet | En son sistem önyüklemesinden bu yana geçen süre (milisaniye cinsinden). |
AuthToken HMAC (SHA-256) | 256 bitlik damla | Evet | HMAC alanı dışındaki tüm alanların anahtarlı SHA-256 MAC'i. |
Cihaz önyükleme akışı
Bir cihazın her önyüklemesinde AuthToken HMAC anahtarı oluşturulmalı ve tüm TEE bileşenleriyle (Gatekeeper, Keymaster ve desteklenen biyometrik güven uygulamaları) paylaşılmalıdır. Bu nedenle, tekrar saldırılarına karşı ek koruma sağlamak için HMAC anahtarının, cihaz her yeniden başlatıldığında rastgele oluşturulması gerekir.
Bu HMAC anahtarını tüm bileşenlerle paylaşma protokolü, platforma bağlı bir uygulama özelliğidir. Anahtar hiçbir zaman TEE dışında bulundurulmamalıdır. Bir TEE işletim sisteminin dahili işlemler arası iletişim (IPC) mekanizması yoksa ve verileri güvenilmeyen işletim sistemi üzerinden aktarması gerekiyorsa, aktarımın güvenli bir anahtar değişim protokolü aracılığıyla yapılması gerekir.
Android'in yanında çalışan Trusty işletim sistemi bir TEE örneğidir ancak bunun yerine diğer TEE'ler de kullanılabilir. Trusty, Keymaster ile Gatekeeper veya uygun biyometrik Trustlet arasında doğrudan iletişim kurmak için dahili bir IPC sistemi kullanır. HMAC anahtarı yalnızca Keymaster'da tutulur; Fingerprint ve Gatekeeper, her kullanım için Keymaster'dan anahtarı ister ve değeri sürdürmez veya önbelleğe almaz.
Bazı TEE'ler IPC altyapısına sahip olmadığından TEE'deki uygulamalar arasında iletişim gerçekleşmez. Bu aynı zamanda anahtar deposu hizmetinin sistemdeki kimlik doğrulama tablosu bilgisine sahip olması nedeniyle başarısız olması muhtemel istekleri hızlı bir şekilde reddetmesine olanak tanır ve potansiyel olarak maliyetli bir IPC'yi TEE'ye kaydeder.