Kimlik doğrulama

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.

Kimlik doğrulama akışı
Şekil 1. Kimlik doğrulama akışı
  1. 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 cihazlarda BiometricPrompt , FingerprintManager veya FaceManager gibi uygun Biometric Manager sınıfını kullanarak uygun biyometrik arka plan programına (örneğin, parmak izleri için fingerprintd veya yüz için faced ) 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.
  2. 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.
  3. 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.)
  4. 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
  • 0x00 Kapı Bekçisidir.
  • 0x01 Parmak İzidir.
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.