Kimlik doğrulama

Android, aşağıdaki bileşenleri gerektiren kullanıcı kimlik doğrulaması kapılı şifreleme anahtarları kavramını kullanır:

  • Şifreleme anahtarı depolama ve servis sağlayıcı. Şifreleme anahtarlarını saklar ve bu anahtarların üzerinde standart şifreleme rutinleri sağlar. Android, Strongbox gibi bir Güvenilir Yürütme Ortamı (TEE) veya Güvenli Öğe (SE) içerebilen anahtar depolama için donanım destekli şifreleme dahil olmak üzere şifreleme hizmetleri için donanım destekli bir Anahtar Deposu ve Anahtar Yöneticisi'ni destekler.
  • Kullanıcı doğrulayıcıları. Kullanıcının varlığını ve/veya başarılı kimlik doğrulamasını onaylayı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, parmak izi ve ek biyometri için tek bir entegrasyon noktası olarak BiometricPrompt kullanabilir. Bu bileşenler, kimlik doğrulama durumlarını, kimliği doğrulanmış bir kanal aracılığıyla anahtar deposu hizmetiyle iletir. (Çerçeve düzeyindeki Android Anahtar Deposu sistemi , anahtar deposu hizmeti tarafından da 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 aygıtın ilk açılışında, tüm kimlik doğrulayıcılar kullanıcıdan kimlik bilgisi kayıtları almaya hazırlanır. Bir kullanıcının ilk olarak 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ısı (SID) oluşturur. Bu kullanıcı SID'si, kullanıcının parolasına kriptografik olarak bağlıdır; Gatekeeper'a yapılan başarılı kimlik doğrulamaları, bu parola için kullanıcı SID'sini içeren AuthTokens ile sonuçlanır.

Bir kimlik bilgisini değiştirmek isteyen bir kullanıcı, mevcut bir kimlik bilgisini sunmalıdır. Mevcut bir kimlik bilgisi başarıyla doğrulanırsa, mevcut kimlik bilgisi ile ilişkili kullanıcı SID'si yeni kimlik bilgisine aktarılır ve kullanıcının bir kimlik bilgisini değiştirdikten sonra anahtarlara erişmeye devam etmesini sağlar. Bir 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 kaybolur. Bu, güvenilmeyen bir kayıt olarak bilinir.

Normal koşullar altında, Android çerçevesi güvenilmeyen bir kayda izin vermez, bu nedenle çoğu kullanıcı bu işlevi görmez. Ancak, bir cihaz yöneticisi veya bir saldırgan tarafından yapılan zorla parola sıfırlamaları bunun olmasına neden olabilir.

kimlik doğrulama

Bir kullanıcı bir kimlik bilgisi ayarladıktan ve bir kullanıcı SID'si aldıktan sonra, bir kullanıcı bir PIN, desen, parola veya parmak izi sağladığında 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. Bir kullanıcı, bir kimlik doğrulama yöntemi sağlar ve ilişkili hizmet, ilişkili arka plan programına bir istekte bulunur.
    • PIN, desen veya parola 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 sonraki sürümleri ç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, fingerprintd için parmak izi alma veya faced için yüz yüze) istekte bulunur. Sürümden bağımsız olarak, istek gönderildikten sonra biyometrik kimlik doğrulama eşzamansız olarak gerçekleşir.
  2. Arka plan programı, bir AuthToken oluşturan karşılığına veri gönderir:
    • PIN/desen/parola kimlik doğrulaması için gatekeeperd , TEE'deki Gatekeeper'a PIN, desen veya parola karmasını 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 parmak izi, fingerprintd izi olaylarını dinler ve verileri TEE'deki Parmak İzi'ne 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. Daemon imzalı bir AuthToken alır ve bunu, anahtar deposu hizmetinin Binder arabiriminin bir uzantısı aracılığıyla anahtar deposu hizmetine iletir. ( gatekeeperd ayrıca cihaz yeniden kilitlendiğinde ve cihaz şifresi değiştiğinde anahtar deposu hizmetini de bilgilendirir.)
  4. Anahtar deposu hizmeti, AuthTokens'i Keymaster'a iletir ve Gatekeeper ve desteklenen biyometrik TEE bileşeni ile paylaşılan anahtarı kullanarak bunları doğrular. Keymaster, son kimlik doğrulama zamanı olarak belirteçteki zaman damgasına güvenir ve bir anahtar yayınlama kararını (bir uygulamanın anahtarı kullanmasına izin vermek için) zaman damgasına dayandırır.

Yetkilendirme Simgesi biçimi

Diller ve bileşenler arasında belirteç paylaşımı ve uyumluluğu sağlamak için AuthToken biçimi hw_auth_token.h içinde açıklanmıştır. Biçim, 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 tam sayı Numara Tekrar saldırılarını önlemek için rastgele bir tam sayı. Genellikle istenen bir şifreleme işleminin kimliği. Şu anda işlemsel parmak izi yetkilendirmeleri tarafından kullanılmaktadır. Varsa, AuthToken yalnızca aynı sorgulamayı içeren kripto işlemleri için geçerlidir.
kullanıcı SID'si 64 bit işaretsiz tam sayı 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 .
Kimlik Doğrulayıcı Kimliği (ASID) ağ sırasına göre 64 bit işaretsiz tamsayı Numara Belirli bir kimlik doğrulayıcı ilkesine bağlanmak için kullanılan tanımlayıcı. Tüm doğrulayıcılar, kendi gereksinimlerine göre değiştirebilecekleri kendi ASID değerine sahiptir.
Doğrulayıcı türü ağ sırasına göre 32 bit işaretsiz tamsayı Evet
  • 0x00, Kapı Bekçisidir.
  • 0x01 Parmak İzi'dir.
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 bit blob Evet HMAC alanı dışındaki tüm alanların anahtarlı SHA-256 MAC'si.

Cihaz önyükleme akışı

Bir cihazın her açılışında, AuthToken HMAC anahtarı oluşturulmalı ve tüm TEE bileşenleriyle (Gatekeeper, Keymaster ve desteklenen biyometrik güvenirlikler) paylaşılmalıdır. Bu nedenle, yeniden oynatma saldırılarına karşı ek koruma için, cihaz her yeniden başlatıldığında HMAC anahtarının 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 kullanıma sunulmamalıdır. Bir TEE OS'de dahili bir süreçler arası iletişim (IPC) mekanizması yoksa ve verileri güvenilmeyen işletim sistemi üzerinden aktarması gerekiyorsa, aktarım güvenli bir anahtar değişim protokolü aracılığıyla yapılmalıdır.

Android'in yanında çalışan Trusty işletim sistemi bir TEE örneğidir, ancak bunun yerine başka TEE'ler kullanılabilir. Trusty, Keymaster ve Gatekeeper veya uygun biyometrik güvenilir 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 kalıcı hale getirmez veya önbelleğe almaz.

Bazı TEE'lerde IPC altyapısı bulunmadığından, TEE'deki uygulamalar arasında iletişim kurulmaz. Bu ayrıca, sistemdeki kimlik doğrulama tablosu hakkında bilgi sahibi olduğu için, anahtar deposu hizmetinin başarısız olması gereken istekleri hızlı bir şekilde reddetmesine izin vererek, TEE'ye potansiyel olarak maliyetli bir IPC tasarrufu sağlar.