Dokumacı

Android 8.1'de kullanıma sunulan Weaver Donanım Soyutlama Katmanı (HAL) (IWeaver.aidl), PIN, desen ve şifre gibi kilit ekranı bilgi faktörü (LSKF) ile kullanıcı kimlik doğrulaması için güvenli bir arayüz sağlar.

Weaver, Gatekeeper'ın LSKF doğrulama işlevinin yerini alır. Ancak Gatekeeper, donanım kimlik doğrulama jetonları oluşturmak için hâlâ kullanılmaktadır.

Android 9 ve sonraki sürümlerde, CDD 9.11.2 StrongBox'ı destekleyen cihazların, güvenli kullanıcı kimlik doğrulamasını destekleyen özel güvenli donanım sağlamasını zorunlu kılar. Weaver HAL'i bu güvenli donanım kullanarak uygulamak, "güvenli kullanıcı kimlik doğrulaması" şartını karşılar.

Özel bir güvenli öğe (SE) bulunmayan cihazlarda Weaver, Trusty gibi bir güvenilir yürütme ortamında (TEE) uygulanabilir.

Bileşenler

Weaver üç bileşenden oluşur:

  • Weaver AIDL arayüzü (IWeaver): HAL'nin resmi spesifikasyonu. Android 13 ve önceki sürümlerde AIDL yerine HIDL kullanılıyordu.
  • Weaver Donanım Soyutlama Katmanı (HAL) hizmeti: IWeaver arayüzünü uygulayan, satıcıya özel bir Android süreci.
  • Weaver Güvenilir Uygulama (TA): Güvenli bir ortamda çalışan temel mantık. LSKF doğrulaması yapar ve sıklık sınırlaması uygular. HAL hizmeti, TA ile uygulamaya özel güvenli bir kanal kullanarak iletişim kurar.

Arayüz

Weaver'ın arayüzünde, her biri sabit boyutlu bir anahtar ve sabit boyutlu bir değer içeren sabit boyutlu bir kalıcı yuva dizisi bulunur. Her yuva, kimliğiyle tanımlanır. Kimlik, [0, numSlots - 1] aralığında bir tam sayıdır. Bir yuvanın değeri yalnızca depolanan anahtarla eşleşen bir anahtar sağlandığında erişilebilir.

Weaver'ın arayüzü şunlardan oluşur:

  • getConfig(): Uygulama tarafından desteklenen alan sayısını, anahtar boyutunu ve değer boyutunu alır.
  • write(): Belirtilen alanı yeni bir anahtar/değer çiftiyle üzerine yazar. Bu işlem atomik olduğundan önceki veriler kalıcı olarak kurtarılamaz (güvenli silme).
  • read(): Belirtilen yuvanın değerini almaya çalışır. Bu işlem yalnızca hız sınırlama zaman aşımı (TA tarafından uygulanır) etkin olmadığında ve sağlanan anahtar, depolanan anahtarla tam olarak eşleştiğinde başarılı olur.

Arayüz spesifikasyonunun tamamı için IWeaver.aidl bölümüne bakın.

Android tarafından kullanım

Weaver uygulaması kullanıma sunulduğunda Android sistem sunucusundaki LockSettingsService, kullanıcı verilerini korumak için bu uygulamayı kullanır. Cihazdaki her kullanıcı için LockSettingsService, bir Weaver yuvasını yönetir:

  • Alan anahtarı (weaverKey): Kullanıcının LSKF'sinin karma değeri. Kullanıcının ekran kilidi yoksa varsayılan bir dize kullanılır.
  • Yuva değeri (weaverSecret): Yüksek entropili, rastgele oluşturulmuş kriptografik bir gizli anahtar.

weaverSecret yalnızca aşağıdakilerden biri tarafından alınacak şekilde tasarlanmıştır:

  • Weaver TA'ya, sıklık sınırlama politikası kapsamında doğru weaverKey sağlamak.
  • Weaver TA'nın çalıştığı güvenli ortamın güvenliğini ihlal etme Bu, çok zor olması için tasarlanmıştır.

LockSettingsService, kullanıcının yapay şifresini şifrelemek için hem weaverKey hem de weaverSecret kullanır. Çünkü Sentetik Şifre, kullanıcının dosya tabanlı şifreleme (FBE) için kimlik bilgileriyle şifrelenmiş (CE) depolama alanını ve kullanıcının Android anahtar deposundaki kimlik doğrulama ile ilişkili anahtarlarını korur. Weaver, sırrı yayınlayana kadar verilere erişilemez.

Weaver ve Gatekeeper

Geçmişte Gatekeeper HAL, tek bir verify() çağrısında iki farklı rol oynuyordu:

  1. Doğrulama: TEE ile zorunlu kılınan sıklık sınırlamasıyla LSKF'nin kontrol edilmesi.
  2. Onay: LSKF kimlik doğrulamasının başarılı olduğunu KeyMint'e (eski adıyla Keymaster) bildirmek için HardwareAuthToken yayınlama.

Neden Weaver'a geçiliyor?

Android 8.1'de güvenli geçiş kodu sıfırlama tokenlerinin kullanıma sunulmasıyla birlikte "Sentezlenmiş Şifre" birincil şifreleme sırrı haline geldi. Yukarıda açıklanan iki rol artık ayrı Gatekeeper kayıtlarıyla yönetiliyor. Bunlardan biri userId + 100000 kapsamındaki LSKF, diğeri ise userId kapsamındaki yapay şifre için geçerli.

Weaver, Secure Element (SE) tabanlı uygulamaları destekleyen daha basit bir HAL arayüzü kullanarak ilk rolü devralmak için tanıtıldı.

Özellik Dokumacı Sistemik rolü olan büyük online platform
Güvenli Silme Güvenli silme işlemi gereklidir ve arayüzde sabit sayıda ve sabit boyutlu yuvalar kullanıldığından bu işlem kolayca uygulanabilir. Güvenli silme işlemi gerekli değildir ve arayüz sınırsız sayıda kaydı desteklediğinden uygulanması zordur.
Donanım SE'ler için optimize edilmiştir ancak TEE'lerde de çalışır. Etkili bir şekilde yalnızca TEE. Mevcut tasarımda, SE'de uygulanması güvenlik avantajı sağlamaz.
Hata İşleme Daha net hata kodları Belirsiz hata kodları. Sonuç olarak, kilit ekranı yanlış LSKF'ler ile alakasız hatalar arasında ayrım yapmaz.
Atomicity Weaver'ı kullanan LockSettingsService içindeki kod, LSKF değişikliklerini atomik olarak gerçekleştirir. Yeni veriler yeni bir Weaver yuvasına yazılır ve eski yuva yalnızca güvenli olduğunda silinir. Gatekeeper'ı kullanan LockSettingsService içindeki kod, LSKF değişikliklerini atomik olarak gerçekleştirmiyor. LSKF değiştirilirken bir sorun yaşanırsa tüm kullanıcı verileri kaybolabilir.

Referans kodu

ISO/IEC7816-4 uyumlu güvenli öğelerde Weaver uygulamaları için referans kodu AOSP'de mevcuttur: external/libese/.

Test

Bir Weaver uygulamasını doğrulamak için VtsHalWeaverTargetTest kullanın:

atest VtsHalWeaverTargetTest

veya:

vts-tradefed run vts -m VtsHalWeaverTargetTest