Android, kullanıcı kimlik doğrulamasıyla denetimli şifreleme anahtarı konseptini kullanır. Bu konsept için aşağıdaki bileşenler gereklidir:
- Şifreleme anahtarı depolama ve servis sağlayıcı. Şifreleme anahtarlarını depolar ve bu anahtarların üzerine standart şifre rutinleri sağlar. Android, anahtar depolama için donanım destekli şifreleme (Strongbox gibi Güvenilir Yürütme Ortamı (TEE) veya Güvenli Öğe (SE) içerebilir) dahil olmak üzere kriptografik hizmetler için donanım destekli Keystore ve Keymaster'ı destekler.
- Kullanıcı kimlik doğrulayıcıları. Kullanıcının varlığını ve/veya başarılı kimlik doğrulamasını doğrulama Android, PIN/desen/şifre kimlik doğrulaması için Gatekeeper'ı ve parmak izi kimlik doğrulaması için Fingerprint'i destekler. Android 9 ve sonraki sürümleri çalıştıran cihazlar, parmak izi ve ek biyometriler için tek bir entegrasyon noktası olarak
BiometricPrompt
'i kullanabilir. Bu bileşenler, kimlik doğrulama durumlarını kimliği doğrulanmış bir kanal aracılığıyla anahtar mağazası hizmetine iletir. (Çerçeve düzeyindeki Android Anahtar Deposu sistemi da anahtar deposu hizmeti tarafından desteklenir.)
Gatekeeper, Parmak İzi ve Biyometrik bileşenleri, donanım destekli kimlik doğrulama jetonlarının (AuthTokens) kullanımını desteklemek için Keystore ve diğer bileşenlerle birlikte çalışır.
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 bir PIN/desen/ş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.
Kimlik bilgisi değiştirmek isteyen kullanıcıların mevcut bir kimlik bilgisi 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. Kullanıcı mevcut bir kimlik bilgisi sunmazsa yeni kimlik bilgisi tamamen rastgele bir kullanıcı SID'si ile kaydedilir. Kullanıcı cihaza erişebilir ancak eski kullanıcı SID'si altında oluşturulan anahtarlar kalıcı olarak kaybedilir. Buna güvenilir olmayan kayıt denir.
Normal şartlarda Android çerçevesi, güvenilmeyen kayıtlara izin vermez. Bu nedenle çoğu kullanıcı bu işlevi hiç görmez. Ancak cihaz yöneticisi veya saldırgan tarafından yapılan zorunlu şifre sıfırlamaları bu durumun yaşanmasına neden olabilir.
Kimlik doğrulama
Kullanıcı kimlik bilgisi oluşturduktan ve kullanıcı kimliği aldıktan sonra kimlik doğrulamasına başlayabilir. Kimlik doğrulama, kullanıcı PIN, desen, şifre veya parmak izi sağladığında başlar. Tüm TEE bileşenleri, birbirlerinin mesajlarının kimliğini doğrulamak için kullandıkları bir gizli anahtarı paylaşır.

- Kullanıcı bir kimlik doğrulama yöntemi sağlar ve ilişkili hizmet, ilişkili daemon'a istek gönderir.
LockSettingsService
, PIN, desen veya şifre içingatekeeperd
'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.
- Arka plan programı, eşdeğerine veri gönderir ve bu eşdeğer bir AuthToken oluşturur:
- PIN/desen/şifre kimlik doğrulaması için
gatekeeperd
, PIN, desen veya şifre karmasını TEE'deki Gatekeeper'a gönderir. TEE'de kimlik doğrulama başarılı olursa TEE'deki Gatekeeper, ilgili kullanıcı SID'sini (AuthToken HMAC anahtarıyla imzalanmış) Android OS'deki karşılığına gönderir. - Parmak izi kimlik doğrulaması için
fingerprintd
, parmak izi etkinliklerini dinler ve verileri TEE'deki Parmak İzi'ne gönderir. TEE'deki kimlik doğrulama başarılı olursa TEE'deki Parmak İzi, Android OS'deki muadiline bir AuthToken (AuthToken HMAC anahtarıyla imzalanır) gönderir. - Diğer biyometrik kimlik doğrulama işlemleri için uygun biyometrik daemon, biyometrik etkinliği dinler ve uygun biyometrik TEE bileşenine gönderir.
- PIN/desen/şifre kimlik doğrulaması için
- Daemon, imzalanmış bir AuthToken alır ve bunu anahtar hizmetinin Binder arayüzündeki bir uzantı aracılığıyla anahtar hizmetine iletir.
(
gatekeeperd
, cihaz yeniden kilitlendiğinde ve cihaz şifresi değiştiğinde de anahtar mağazası hizmetini bilgilendirir.) - Anahtar mağazası hizmeti, AuthTokens'i Keymaster'a iletir ve Gatekeeper ile paylaşılan anahtarı ve desteklenen biyometrik TEE bileşenini kullanarak doğrular. Anahtar yöneticisi, jetondaki zaman damgasını son kimlik doğrulama zamanı olarak kabul eder ve anahtar yayınlama kararını (bir uygulamanın anahtarı kullanmasına izin vermek için) zaman damgasına dayandırır.
AuthToken biçimi
Dil ve bileşenler arasında jeton paylaşımı ve uyumluluk sağlamak için AuthToken biçimi hw_auth_token.h
bölümünde açıklanmıştır.
Biçim, sabit boyutlu alanlara sahip basit bir serileştirme protokolüdür.
Alan | Tür | Zorunlu | Açıklama |
---|---|---|---|
AuthToken Sürümü | 1 bayt | Evet | Aşağıdaki tüm alanlar için grup etiketi. |
Zorluk | 64 bit işaretsiz tam sayı | Hayır | Tekrar oynatma saldırılarını önlemek için rastgele bir tam sayı. Genellikle istenen bir kripto işleminin kimliğidir. Şu anda işleme dayalı parmak izi yetkilendirmeleri tarafından kullanılıyor. Varsa AuthToken yalnızca aynı istem içeren kriptografik işlemler için geçerlidir. |
Kullanıcı SID'si | 64 bit işaretsiz tam sayı | Evet | Cihaz kimlik doğrulamasıyla ilişkili tüm anahtarlara kriptografik olarak bağlı, tekrarlanmayan kullanıcı tanımlayıcısı. Ayrıntılar için Gatekeeper başlıklı makaleyi inceleyin. |
Doğrulayıcı kimliği (ASID) | Ağ düzeninde 64 bit işaretsiz tam sayı | Hayır | Belirli bir kimlik doğrulayıcı politikasına bağlamak 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ğ düzeninde 32 bitlik işaretsiz tam sayı | Evet |
|
Zaman damgası | Ağ düzeninde 64 bit işaretsiz tam sayı | Evet | En son sistem önyüklemesinden bu yana geçen süre (milisaniye). |
AuthToken HMAC (SHA-256) | 256 bit blob | Evet | HMAC alanı hariç tüm alanların anahtarlanmış SHA-256 MAC'si. |
Cihaz başlatma akışı
Bir cihaz her açıldığında AuthToken HMAC anahtarı oluşturulmalı ve tüm TEE bileşenleriyle (Gatekeeper, Keymaster ve desteklenen biyometri güvenceleri) paylaşılmalıdır. Bu nedenle, yeniden oynatma saldırılarına karşı ek koruma sağlamak için HMAC anahtarı, cihaz her yeniden başlatıldığında rastgele oluşturulmalıdır.
Bu HMAC anahtarının tüm bileşenlerle paylaşılmasıyla ilgili protokol, platforma bağlı bir uygulama özelliğidir. Anahtar asla TEE dışında kullanılamaz. Bir TEE OS'de dahili bir işlemler arası iletişim (IPC) mekanizması yoksa ve verilerin güvenilmeyen OS üzerinden aktarılması gerekiyorsa aktarım, güvenli bir anahtar değişim protokolü üzerinden yapılmalıdır.
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, Keymaster ile Gatekeeper veya uygun biyometrik güven aygıtı arasında doğrudan iletişim kurmak için dahili bir IPC sistemi kullanır. HMAC anahtarı yalnızca Keymaster'da saklanır. Parmak izi ve Gatekeeper, her kullanım için anahtarı Keymaster'dan ister ve değeri kalıcı olarak saklamaz veya önbelleğe almaz.
Bazı TEE'lerde IPC altyapısı olmadığından TEE'deki applet'ler arasında iletişim gerçekleşmez. Bu, anahtar deposu hizmetinin sistemdeki kimlik doğrulama tablosuyla ilgili bilgi sahibi olduğu için başarısız olacak istekleri hızlı bir şekilde reddetmesine de olanak tanır. Böylece, TEE'de maliyetli olabilecek bir IPC'den tasarruf edilir.