Dosya Tabanlı Şifreleme

Android 7.0 ve sonraki sürümler, dosya tabanlı şifrelemeyi (FBE) destekler. Dosya tabanlı şifreleme, farklı dosyaların şifrelenmesine olanak tanır kullanılabilen farklı tuşlara sahiptir.

Bu makalede, yeni cihazlarda dosya tabanlı şifrelemenin nasıl etkinleştirileceği açıklanmaktadır. ve sistem uygulamalarının, kullanıcılara bir çözüm sunmak üzere Direct Boot API'lerini en iyi ve en güvenli deneyimi sağlar.

Android 10 ve sonraki sürümlerle kullanıma sunulan tüm cihazlar ve dosya tabanlı şifrelemeyi kullanmak için gereklidir.

Doğrudan Başlatma

Dosya tabanlı şifreleme, Android 7.0'da kullanıma sunulan Doğrudan Satış adlı yeni bir özelliğe olanak tanıyor. Başlatma. Doğrudan Başlatma, şifrelenmiş cihazların doğrudan kilit açarak önyüklemesini sağlar tıklayın. Önceden, tam disk kullanan şifrelenmiş cihazlarda şifreleme (FDE) gibi bir veri paylaşımına izin verilmeden önce kullanıcıların kimlik bilgilerini ve telefonun bazı temel cihazlar dışında tüm işlevlerini yerine getirmesini anlamına gelir. Örneğin, alarmlar çalıştırılamadı, erişilebilirlik hizmetleri mevcut değil, telefonlar arama alamıyor ancak yalnızca temel cihazlar ile sınırlıydı. acil durum numara çevirici işlemleridir.

Dosya tabanlı şifreleme (FBE) ve yeni API'lerin kullanıma sunulmasıyla birlikte, şifrelemenin farkında olduğu için bu uygulamalar bir bağlamda sunmaktır. Bu durum, kullanıcılar bilgilerini sağlamadan önce kimlik bilgileriyle birlikte çalışır.

FBE özellikli bir cihazda, cihazın her bir kullanıcısının iki depolama konumu olur şu uygulamalarda kullanılabilir:

  • Varsayılan depolama konumu olan Kimlik Bilgisi Şifrelenmiş (CE) depolama alanı ve yalnızca kullanıcı cihazın kilidini açtıktan sonra kullanılabilir.
  • Hem Şifrelenmiş Cihaz (DE) depolama alanı hem de doğrudan Başlatma modu sırasında ve kullanıcı cihazın kilidini açtıktan sonra.
ziyaret edin.

Bu ayırma, birden fazla izine izin verdiği için iş profillerini daha güvenli hale getirir şifrelemenin tek başına sağlanan şifrelemeye dayalı olmaması nedeniyle, şifrelemenin başlatma zamanı şifresi.

Direct Boot API, şifrelemeye duyarlı uygulamaların bu alanlar. Uygulama yaşam döngüsünde, Bir kullanıcının CE depolama alanının kilidi açıldığında uygulamalara bildirim gönderilir kimlik bilgilerini girdikten sonra veya iş profili kullanıyorsanız sağlamak için iş isteyebilirsiniz. Android 7.0 çalıştıran cihazlar bu yeni API'leri desteklemelidir ve yaşam döngüsünü devam ettirir. Ancak, FBE, DE ve CE depolama alanı her zaman kilitli durumda olur.

Ext4 ve F2FS dosyasında dosya tabanlı şifrelemenin eksiksiz bir şekilde uygulanması sistemleri Android Açık Kaynak Projesi (AOSP) içinde sunulmaktadır ve bu özellikler gereksinimleri karşılayan cihazlarda etkinleştirilir. FBE'yi kullanmayı seçen üreticiler çip tabanlı sisteme göre özelliği optimize etmenin yollarını keşfetmek isteyebilir (SoC) kullanılıyor.

AOSP'deki tüm gerekli paketler, doğrudan başlatmaya duyarlı olacak şekilde güncellendi. Ancak cihaz üreticileri bu uygulamaların özelleştirilmiş sürümlerini kullandıklarında, en azından doğrudan başlatmaya duyarlı paketlerin bulunduğundan emin olmak şu hizmetleri sunar:

  • Telefon Hizmetleri ve Çevirici
  • Kilit ekranına şifre girmek için giriş yöntemi

Örnekler ve kaynak

Android, dosya tabanlı şifrelemeye ilişkin bir referans uygulaması sağlar. Bu uygulamada vold (sistem/vold) depolama cihazlarını yönetmeyle ilgili işlevler sunar ve çok daha fazla ilgi görüyor. FBE'nin eklenmesiyle vold'a birkaç yeni komut verilir. birden fazla kullanıcının CE ve DE anahtarları için anahtar yönetimini desteklemek amacıyla kullanılır. Ayrıca dosya tabanlı kullanımı şifreleme özelliklerini destekler. Ayrıca, kilit ekranı ve SystemUI FBE ve Direct'i destekleyecek şekilde değiştirilmiştir Başlatma özellikleri. Bunlardan bazıları:

  • AOSP Çevirici (paketler/uygulamalar/Çevirici)
  • Masa Saati (paketler/uygulamalar/DeskClock)
  • LatinIME (paketler/giriş yöntemleri/LatinIME)*
  • Ayarlar Uygulaması (paketler/uygulamalar/Ayarlar)*
  • SystemUI (çerçeveler/temel/paketler/SystemUI)*

* defaultToDeviceProtectedStorage kullanan sistem uygulamaları manifest özelliği

Şifreleme konusunda bilgi sahibi olan daha fazla uygulama ve hizmet örneği komut dosyasında mangrep directBootAware komutunun çalıştırıldığı AOSP çerçeveleri veya paketler dizini kaynak ağacıdır.

Bağımlılıklar

FBE'nin AOSP uygulamasını güvenli bir şekilde kullanmak için cihazın bağımlılıkları olan üçlü kısıtları içerir:

  • Ext4 şifreleme veya F2FS şifrelemesi için çekirdek desteği.
  • Anahtar Yöneticisi Destek - HAL 1.0 veya üzeri sürümler. için Keymaster 0.3 sürümü gerekli özellikleri sağlamaz. şifreleme anahtarları için yeterli koruma sağlar.
  • Keymaster/Keystore ve Kapı görevlisi Güvenilir Yürütme'de uygulanmalıdır Ortamı (TEE) kullanır. yetkisiz işletim sistemi (cihaza yüklenen özel işletim sistemi) için DE tuşları.
  • Güven Kökü Donanımı ve Doğrulanmış Başlatma DE anahtarlarının yapılandırılmadığından emin olmak için Keymaster başlatmaya bağlı yetkisiz bir işletim sistemi tarafından erişilebilir.

Uygulama

Çalar saatler, telefon ve erişilebilirlik özellikleri gibi uygulamalar, Doğrudan BootAware"e uygun olarak android:directBootAware yapılmalıdır Başlatma geliştirici belgeleri.

Kernel desteği

Ext4 ve F2FS şifrelemesi için çekirdek desteği, Android ortak 3.18 ve sonraki sürümler için geçerlidir. 5.1 sürümüne sahip bir çekirdekte etkinleştirmek için veya üzerinde çalışıyorsa şunu kullanın:

CONFIG_FS_ENCRYPTION=y

Daha eski çekirdekler için cihazınızCONFIG_EXT4_ENCRYPTION=y userdata dosya sistemi Ext4 veya Cihazınız userdata ise CONFIG_F2FS_FS_ENCRYPTION=y dosya sistemi F2FS'dir.

Cihazınız, kabul edilebilir depolama alanı kullanıyorsanız veya meta veri dahili depolamada şifreleme, çekirdek yapılandırma seçeneklerini meta veri şifreleme dokümanlarında açıklandığı şekilde meta veri şifreleme için gereklidir.

Cihazlarınız, Ext4 veya F2FS şifrelemesi işlevsel desteğinin yanı sıra üreticiler, şifre tamamlama sürecini hızlandırmak için kriptografik hızlandırmayı da ve kullanıcı deneyimini iyileştirmeye yardımcı olan özelliklerimiz var. Örneğin, ARM64 tabanlı cihazlar, ARMv8 CE (Kriptografi Uzantıları) hızlandırması aşağıdaki çekirdek yapılandırma seçenekleri ayarlanarak etkinleştirilir:

CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
CONFIG_CRYPTO_SHA2_ARM64_CE=y

Cihaz üreticileri, performansı daha da artırmak ve güç kullanımını azaltmak için satır içi şifreleme donanımı kullanmayı da düşünebilirsiniz. veriler depolama cihazına giderken veya depolama cihazından çıkarken verileri şifreler/şifrelerini çözer. Android'in ortak çekirdekleri (sürüm 4.14 ve sonraki sürümler) donanım ve tedarikçi firma sürücü desteği olduğunda satır içi şifrelemenin kullanılmasına izin verir. kullanılabilir. Satır içi şifreleme çerçevesi, aşağıdaki çekirdek yapılandırma seçenekleri sunulur:

CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_FS_ENCRYPTION=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y

Cihazınız UFS tabanlı depolama alanı kullanıyorsa şunları da etkinleştirin:

CONFIG_SCSI_UFS_CRYPTO=y

Cihazınızda eMMC tabanlı depolama alanı kullanılıyorsa şunları da etkinleştirin:

CONFIG_MMC_CRYPTO=y

Dosya tabanlı şifrelemeyi etkinleştirme

Bir cihazda FBE'yi etkinleştirebilmek için cihazın dahili depolama alanında etkinleştirilmesi gerekir (userdata). Bu, benimsenebilir içeriklerde FBE'yi de otomatik olarak etkinleştirir. depolama alanı; ancak benimsenebilir depolama alanındaki şifreleme biçimi geçersiz kılınabilir. bakın.

Dahili depolama

FBE'yi etkinleştirmek için fileencryption=contents_encryption_mode[:filenames_encryption_mode[:flags]]. için fstab satırının fs_mgr_flags sütununa userdata. Bu seçenek, dahili şifrelemede şifreleme biçimini depolama alanına sahip olursunuz. İki nokta ile ayrılmış en fazla üç parametre içerir:

  • contents_encryption_mode parametresi, şifreleme algoritması dosya içeriklerini şifrelemek için kullanılır. Kendisine aes-256-xts veya adiantum. Android'den beri 11 aes-256-xts olan varsayılan algoritmayı seçin.
  • filenames_encryption_mode parametresi, dosya adlarını şifrelemek için şifreleme algoritması kullanılır. Kendisine aes-256-cts, aes-256-heh, adiantum veya aes-256-hctr2. Belirtilmezse varsayılan olarak contents_encryption_mode ise aes-256-cts aes-256-xts veya şu durumlarda adiantum adlı kişiye contents_encryption_mode adiantum.
  • Android'deki yeni flags parametresi 11, + karakter. Aşağıdaki işaretler desteklenir:
    • v1 işareti, sürüm 1 şifreleme politikalarını seçer; "the" v2 işareti, sürüm 2 şifreleme politikalarını seçer. Sürüm 2 şifreleme politikası, daha güvenli ve esnek bir anahtar türetme işlevi kullanır. Aşağıdaki durumlarda varsayılan değer v2'dir: Cihaz, Android 11 veya sonraki sürümlerde başlatılmıştır. (ro.product.first_api_level tarafından belirlendiği şekilde) veya aşağıdaki durumlarda v1 Android 10 veya sonraki bir sürümün yüklü olduğu daha düşük.
    • inlinecrypt_optimized işareti bir şifreleme seçer satır içi şifreleme donanımı için optimize edilmiş biçim. verimli bir şekilde işleyebilir. Bunu, daha sonra yerine her CE veya DE anahtarı için tek bir dosya içeriği şifreleme anahtarı kullanabilirsiniz. IV'lerin (başlatma vektörleri) oluşturulması buna göre ayarlanır.
    • emmc_optimized işareti şuna benzer: inlinecrypt_optimized ancak bir IV seçer IV'leri 32 bit ile sınırlayan bir oluşturma yöntemidir. Bu işaret yalnızca JEDEC eMMC v5.2 spesifikasyonu ve bu nedenle yalnızca 32 biti destekliyor IV'ler. Diğer satır içi şifreleme donanımlarında Bunun yerine inlinecrypt_optimized. Bu işaret, UFS tabanlı depolamada kullanılmamalıdır; UFS spesifikasyonu, kullanılmasını sağlar.
    • Donanımla sarmalanmış uygulamaları destekleyen cihazlarda tuşları ile birlikte kullanıldığında, wrappedkey_v0 işareti donanımla sarmalanmış anahtarlar. Bu yalnızca birlikte kullanılabilir inlinecrypt ekleme seçeneği ve inlinecrypt_optimized veya emmc_optimized tıklayın.
    • dusize_4k işareti, şifreleme veri birimi boyutunu zorunlu kılar dosya sistemi blok boyutu 4.096 olmadığında bile 4.096 bayt olmalıdır bayt olarak kabul edilir. Şifreleme veri biriminin boyutu, dosyanın ayrıntı düzeyidir içerik şifreleme. Bu işaret, Android sürümünden itibaren kullanılabilir 15 (AOSP deneysel). Bu işaret yalnızca verileri desteklemeyen satır içi şifreleme donanımının kullanımı sayfa boyutu kullanan bir cihazda 4.096 bayttan büyük birimler büyük olan ve f2fs dosya sistemini kullanan bir boyuttur.

Satır içi şifreleme donanımı kullanmıyorsanız cihaz fileencryption=aes-256-xts. Satır içi kullanıyorsanız birçok cihaz için önerilen ayar şudur: fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized. (veya eşdeğeri fileencryption=::inlinecrypt_optimized). Şu tarihte: herhangi bir AES hızlandırması olmayan cihazlarda AES yerine Adiantum kullanılabilir. fileencryption=adiantum ayarlanıyor.

Android 14'ten bu yana, dosya adı şifrelemesi için tercih edilen mod AES-HCTR2'dir. adımları uygulayın. Ancak yalnızca yeni Android çekirdekleri desteklenir AES-HCTR2. Gelecekteki bir Android sürümünde, dosya adları için varsayılan mod olması planlanmaktadır bahsedeceğim. Çekirdeğiniz AES-HCTR2 desteği içeriyorsa filenames_encryption_mode, aes-256-hctr2 olarak ayarlanıyor. En basit şekilde bu işlem fileencryption=aes-256-xts:aes-256-hctr2 ile yapılır.

Android 10 veya önceki sürümlerin yüklü olduğu cihazlarda fileencryption=ice, FSCRYPT_MODE_PRIVATE dosya içeriği şifreleme modu. Bu mod henüz Android'in yaygın çekirdekleri tarafından uygulanmamıştır, ancak yamaları kullanan tedarikçi firmalar için geçerlidir. Bu mod tarafından oluşturulan disk üzerinde biçim tedarikçiye özgüydü. Android ile başlatılan cihazlarda 11 veya üzeri bir sürüme geçerse bu moda artık izin verilmez ve standart şifreleme biçimi kullanılmalıdır.

Dosya içeriği şifrelemesi, varsayılan olarak Linux çekirdeğinin kriptografi API'si. Bunun yerine satır içi şifreleme donanımı kullanmak isterseniz inlinecrypt ekleme seçeneğini ekleyin. Örneğin, fstab satır aşağıdaki gibi görünebilir:

/dev/block/by-name/userdata /data f2fs nodev,noatime,nosuid,errors=panic,inlinecrypt wait,fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized

Kabul edilebilir depolama alanı

Android 9, FBE ve kabul edilebilir depolama alanı birlikte kullanılabilir.

Şunun için fileencryption fstab seçeneğini belirtme: userdata ayrıca, benimsenebilir içeriklerde hem FBE hem de meta veri şifrelemesini otomatik olarak etkinleştirir. depolama alanına sahip olursunuz. Ancak FBE ve/veya meta veri şifreleme biçimlerini uyarlayarak uyarlanabilir depolama alanını PRODUCT_PROPERTY_OVERRIDES

Android 11 veya sonraki sürümlerin yüklü olduğu cihazlarda aşağıdaki özellikleri kullanın:

  • ro.crypto.volume.options (Android'de yeni) 11) şurada FBE şifreleme biçimini seçtiğinde: dahili hale getirebilirsiniz. Bağımsız değişkenle aynı söz dizimine sahiptir. fileencryption fstab seçeneğinde bulunuyor ve aynı varsayılanları kullanıyor. Ne yapmanız gerektiği için yukarıdaki fileencryption ile ilgili önerilere bakın. burada kullanabilirsiniz.
  • ro.crypto.volume.metadata.encryption meta verileri seçer şifreleme formatını kullanabilirsiniz. Meta verileri inceleyin şifreleme belgelerine bakın.

Android 10 veya önceki sürümlerin yüklü olduğu cihazlarda aşağıdaki özellikleri kullanın:

  • ro.crypto.volume.contents_mode içerikleri seçer şifreleme modunu kullanın. Bu, ro.crypto.volume.options
  • ro.crypto.volume.filenames_mode, dosya adlarını seçer şifreleme modunu kullanın. Bu, iki nokta işaretiyle ayrılmış ikinci alana eşdeğerdir Cihazlardaki varsayılan ayar hariç ro.crypto.volume.options Android 10 veya önceki sürümlerle başlatılan aes-256-heh. Çoğu cihazda bunun açık bir şekilde yapılması gerekir aes-256-cts olarak geçersiz kılındı.
  • ro.crypto.fde_algorithm ve ro.crypto.fde_sector_size meta veri şifrelemesini seç biçimi olacaktır. Meta verileri inceleyin şifreleme belgelerine bakın.

Keymaster ile Entegrasyon

Keymaster HAL, early_hal sınıfının bir parçası olarak başlatılmalıdır. Bunun nedeni, FBE'nin, Keymaster'ın vold ürününün kurulduğu post-fs-data başlatma aşaması ilk tuşlara basın.

Dizinler hariç tutuluyor

init, sistem DE anahtarını şuna uygular: şu dizinler hariç, /data sayfasının tüm üst düzey dizinleri gibi, sistem DE anahtarını içeren dizin gibi şifrelenmemiş olmalıdır kendisi ve kullanıcı CE veya DE dizinlerini içeren dizinler. Şifreleme anahtarları yinelemeli olarak uygulanır ve alt dizinler tarafından geçersiz kılınamaz.

Android 11 ve sonraki sürümlerde Dizinler için geçerli olan init, mkdir için encryption=<action> bağımsız değişken komutuna dahil etmeniz gerekir. Olası <action> değerleri: bu belgede Android init dili için BENİOKU.

Android 10'da init şifreleme işlemleri şu konuma sabit kodlandı:

/system/extras/libfscrypt/fscrypt_init_extensions.cpp

Android 9 ve önceki sürümlerde konum şu şekildeydi:

/system/extras/ext4_utils/ext4_crypt_init_extensions.cpp

Belirli dizinlerin şifrelenmemiş olabilir. Bu tür değişiklikler yapılırsa cihaz, üretici SELinux politikaları gibi yalnızca şifrelenmemiş dizini kullanması gereken uygulamalar için geçerlidir. Bu, güvenilir olmayan uygulamalar.

Bunun bilinen tek kullanım alanı eski OTA'yı desteklemektir özellikler.

Sistem uygulamalarında Doğrudan Başlatma'yı destekleme

Uygulamaları Doğrudan Başlatma'ya duyarlı hale getirme

Sistem uygulamalarının hızlı bir şekilde taşınmasını kolaylaştırmak için iki yeni özellik vardır: uygulama düzeyinde ayarlanabilir. İlgili içeriği oluşturmak için kullanılan defaultToDeviceProtectedStorage özelliği yalnızca sistem uygulamaları. directBootAware özelliğini herkesin kullanabilir.

<application
    android:directBootAware="true"
    android:defaultToDeviceProtectedStorage="true">

Uygulama düzeyindeki directBootAware özelliği, işaretlemenin kısaltmasıdır şifrelemeye duyarlı olduğundan emin olun.

defaultToDeviceProtectedStorage özelliği, varsayılan değeri yönlendiriyor uygulama depolama konumunu CE depolama yerine DE depolama alanına işaret edecek şekilde ayarlayın. Bu işareti kullanan sistem uygulamaları, varsayılan olarak depolanan tüm verileri dikkatli bir şekilde denetlemelidir. ve hassas verilerin yollarını CE depolama kullanacak şekilde değiştirin. Cihaz Bu seçeneği kullanan üreticiler, sağladıkları verileri dikkatli bir şekilde incelemelidir. saklayarak, bu bilgilerin kişisel bilgi içermemesini sağlayın.

Bu modda çalışırken aşağıdaki System API'leri şunlardır: gerektiğinde CE depolama tarafından desteklenen bir Bağlamı açıkça yönetmek için kullanılabilir. Cihaz Korumalı muadilleriyle eşdeğerdir.

  • Context.createCredentialProtectedStorageContext()
  • Context.isCredentialProtectedStorage()

Birden fazla kullanıcıyı destekleme

Çok kullanıcılı ortamdaki her kullanıcı ayrı bir şifreleme anahtarı alır. Her kullanıcı bir DE ve CE anahtarı olmak üzere iki anahtar alır. 0. Kullanıcı cihaza şu şekilde giriş yapmalıdır: bir kullanıcı olabilir. Bu konu, Cihaz kullanır.

Kriptoya duyarlı uygulamalar kullanıcılar arasında şu şekilde etkileşim kurar: INTERACT_ACROSS_USERS INTERACT_ACROSS_USERS_FULL bir uygulamanın cihazdaki tüm kullanıcılar arasında işlem yapmasına olanak tanır. Ancak bu uygulamalar yalnızca CE ile şifrelenmiş dizinlere erişebilecektir. kilidi açılmış durumda.

Bir uygulama Almanya bölgelerinde serbestçe etkileşimde bulunabilir ancak bir kullanıcı cihazdaki tüm kullanıcıların kilidinin açık olduğu anlamına gelmez. İlgili içeriği oluşturmak için kullanılan bu alanlara erişmeye çalışmadan önce uygulamanın bu durumu kontrol etmesi gerekir.

Her iş profili kullanıcı kimliği iki anahtara da sahip olur: DE ve CE. İşle ilgili meydan okuma karşılandığında, profil kullanıcısının kilidi açılır ve Keymaster (TEE'de) profilinin TEE anahtarı.

Güncellemeleri işleme

Kurtarma bölümü, kullanıcı verisi bölümüdür. FBE kullanan cihazların A/B sistem güncellemelerini kullanarak OTA. Farklı OTA normal çalışma esnasında kullanılabilir. Bunun için kurtarmaya şifrelenmiş sürücüdeki verilere erişebilir.

OTA dosyasına erişmek için kurtarma gerektiren eski bir OTA çözümünü kullanırken userdata bölümünde:

  1. Şurada üst düzey dizin oluşturun: (örneğin, misc_ne) userdata bölüm.
  2. Bu üst düzey dizini şifrelenmemiş olacak şekilde yapılandırın (Dizinleri hariç tutma bölümüne bakın).
  3. OTA paketlerini tutmak için üst düzey dizin içinde bir dizin oluşturun.
  4. Bu dizine erişimi denetlemek için bir SELinux kuralı ve dosya bağlamları ekleyin ve inceleyeceğiz. Yalnızca OTA güncellemelerini alan işlem veya uygulamalar bu dizinde okuma ve yazma işlemi gerçekleştirebilir. Başka uygulama veya işlem yok bu dizine erişimi olmalıdır.

Doğrulama

Özelliğin uygulanan sürümünün beklendiği gibi çalıştığından emin olmak için ilk olarak CTS şifreleme testlerinin DoğrudanBootHostTest ve EncryptionTest.

Cihazda Android 11 veya sonraki bir sürüm yüklüyse vts_kernel_encryption_test:

atest vts_kernel_encryption_test

veya:

vts-tradefed run vts -m vts_kernel_encryption_test

Ek olarak, cihaz üreticileri aşağıdaki manuel testleri yapabilir. Bir FBE'nin etkin olduğu cihaz:

  • ro.crypto.state öğesinin mevcut olup olmadığını kontrol edin
    • ro.crypto.state cihazının şifrelendiğinden emin olun
  • ro.crypto.type öğesinin mevcut olup olmadığını kontrol edin
    • ro.crypto.type değerinin file olarak ayarlandığından emin olun

Ek olarak, test kullanıcıları CE depolama alanının kilitli olduğunu, cihaz cihaz açıldığından bu yana ilk kez açıldı. Bunu yapmak için bir userdebug veya eng derlemesi, PIN, desen ayarlayın ya da şifresini girin ve cihazı yeniden başlatın. Cihazın kilidini açmadan önce ana kullanıcının CE depolama alanını kontrol etmek için aşağıdaki komutu çalıştırın. Öğe cihaz gözetimsiz sistem kullanıyor Kullanıcı Modu'nda (çoğu Otomotiv cihazı) ana kullanıcı 10 kullanıcıdır. Bu nedenle şunu çalıştırın:

adb root; adb shell ls /data/user/10

Diğer cihazlarda (Otomotiv harici cihazların çoğu) ana kullanıcı 0'dır. çalıştır:

adb root; adb shell ls /data/user/0

Listelenen dosya adlarının Base64 olarak kodlandığını, dolayısıyla dosya adları şifrelenmiştir ve bunların şifresini çözecek anahtar henüz kullanıma sunulmamıştır. Dosya adları şifrelenmemiş metin olarak listeleniyorsa bir sorun vardır.

Cihaz üreticilerinin, cihazlarında fscrypt için yukarı akış Linux testlerini çalıştırmayı veya çekirdekleri hakkında daha fazla bilgi edinin. Bu testler, xfstests dosya sistemi test paketinin bir parçasıdır. Ancak, bu yukarı akış testleri Android tarafından resmi olarak desteklenmez.

AOSP uygulama ayrıntıları

Bu bölümde, AOSP uygulaması hakkında ayrıntılı bilgi sağlanmakta ve nasıl çalıştığını anlatacağım. Cihaz üreticileri için gerekli olmamalı kullanmaları için burada herhangi bir değişiklik yapması gerekiyor.

fscrypt şifrelemesi

AOSP uygulaması "fscrypt" kullanır şifreleme (ext4 ve f2fs tarafından desteklenir) eklenir ve normal olarak şu şekilde yapılandırılır:

  • XTS modunda dosya içeriğini AES-256 ile şifreleme
  • CBC-CTS modunda dosya adlarını AES-256 ile şifreleme

Adiantum şifrelemesi de desteklenir. Adiantum şifrelemesi etkinleştirildiğinde hem dosya içerikleri hem de dosya adları Adiantum ile şifrelenir.

fscrypt, şifreleme politikalarının iki sürümünü destekler: sürüm 1 ve sürüm 2. Sürüm 1 kullanımdan kaldırıldı ve Android 11 ve sonraki sürümler yalnızca şu sürümle uyumludur: 2. Sürüm 2 şifreleme politikalarında HKDF-SHA512 kullanılır kullanın.

fscrypt hakkında daha fazla bilgi için upstream çekirdek dokümanlarına bakın.

Depolama sınıfları

Aşağıdaki tabloda FBE anahtarları ve daha iyi korundıkları dizinler listelenmiştir. ayrıntı:

Depolama sınıfı Açıklama Dizinler
Şifrelenmemiş /data konumunda olamayacak veya olması gerekmeyen dizinler FBE tarafından korunuyor. Meta veri kullanan cihazlarda şifreleme kullanıyorsanız, bu dizinler gerçek anlamda şifrelenmemiş eşdeğer meta veri şifreleme anahtarıyla korunur. Sistem DE.
  • /data/apex hariç /data/apex/decompressed ve /data/apex/ota_reserved (de sistem DE)
  • /data/lost+found
  • /data/preloads
  • /data/unencrypted
  • Alt dizinleri farklı FBE anahtarları kullanan tüm dizinler. Örneğin, her /data/user/${user_id} dizininden kullanıcı başına anahtar kullanır, /data/user anahtar kullanmaz kendisi.
Sistem DE Belirli bir kullanıcıya bağlı olmayan, cihaz tarafından şifrelenmiş veriler
  • /data/apex/decompressed
  • /data/apex/ota_reserved
  • /data/app
  • /data/misc
  • /data/system
  • /data/vendor
  • Bu tabloda yer alan /data diğer tüm alt dizinleri farklı bir sınıfa sahip olduğundan bahsetmiyor
Başlatma Başına Yeniden başlatmadan sonra kalması gerekmeyen geçici sistem dosyaları /data/per_boot
Kullanıcı CE (dahili) Dahili depolamada kullanıcı başına kimlik bilgisi ile şifrelenmiş veriler
  • /data/data (/data/user/0 takma adı)
  • /data/media/${user_id}
  • /data/misc_ce/${user_id}
  • /data/system_ce/${user_id}
  • /data/user/${user_id}
  • /data/vendor_ce/${user_id}
Kullanıcı DE (dahili) Dahili depolamada kullanıcı başına cihaz tarafından şifrelenmiş veriler
  • /data/misc_de/${user_id}
  • /data/system_de/${user_id}
  • /data/user_de/${user_id}
  • /data/vendor_de/${user_id}
Kullanıcı CE (kabul edilebilir) Kabul edilebilir depolama alanında kullanıcı başına kimlik bilgisi ile şifrelenmiş veriler
  • /mnt/expand/${volume_uuid}/media/${user_id}
  • /mnt/expand/${volume_uuid}/misc_ce/${user_id}
  • /mnt/expand/${volume_uuid}/user/${user_id}
Kullanıcı DE (kabul edilebilir) Kabul edilebilir depolama alanında kullanıcı başına cihaz şifrelemeli veriler
  • /mnt/expand/${volume_uuid}/misc_de/${user_id}
  • /mnt/expand/${volume_uuid}/user_de/${user_id}

Anahtar depolama ve koruma

Tüm FBE anahtarları vold tarafından yönetilir ve diskte şifrelenmiş olarak saklanır. dışında, hiç depolanmayan önyükleme başına anahtar bulunur. Aşağıdaki tablo Çeşitli FBE anahtarlarının depolandığı konumları listeler:

Anahtar türü Anahtar konumu Anahtar konumunun depolama sınıfı
Sistem DE anahtarı /data/unencrypted Şifrelenmemiş
Kullanıcı CE (dahili) anahtarları /data/misc/vold/user_keys/ce/${user_id} Sistem DE
Kullanıcı DE (dahili) anahtarları /data/misc/vold/user_keys/de/${user_id} Sistem DE
Kullanıcı CE (kabul edilebilir) anahtarları /data/misc_ce/${user_id}/vold/volume_keys/${volume_uuid} Kullanıcı CE (dahili)
Kullanıcı DE (kabul edilebilir) anahtarları /data/misc_de/${user_id}/vold/volume_keys/${volume_uuid} Kullanıcı DE (dahili)

Önceki tabloda gösterildiği gibi çoğu FBE anahtarı, taşıma işlemi sırasında başka bir FBE anahtarı tarafından şifrelenir. Depolama alanına kadar anahtarların kilidi açılamaz içeren sınıfın kilidi açıldı.

vold ayrıca tüm FBE anahtarlarına bir şifreleme katmanı uygular. Her anahtar Ayrıca dahili depolama için CE anahtarları, kendi Keystore anahtarı tespit edebilirsiniz. Bu, bir kullanıcı tarafından sağlanmadığı sürece FBE anahtarlarının güvenilir işletim sisteminin, Doğrulanmış Başlatma tarafından zorunlu kılındığı şekilde başlatılmış olması gerekir. Geri alma Anahtar deposu anahtarında da direnç istenir. Bu, FBE anahtarlarının Keymaster'ın geri alma direncini desteklediği cihazlarda güvenli bir şekilde silin. Farklı Geri alma direnci kullanılamadığında en iyi çaba yedeği, SHA-512 depolanan secdiscardable dosyasında depolanan 16.384 rastgele baytın karması birlikte kullanıldığında uygulama kimliği etiketi arasında geçiş yapın. Bir öğeyi kurtarmak için bu baytların FBE tuşu.

Dahili depolama için CE anahtarları daha güçlü bir koruma düzeyine sahiptir. Böylece kilit ekranı, kullanıcının Kilit Ekranı'nı bilmeden Bilgi Faktörü (LSKF) (PIN, desen veya şifre), güvenli şifre sıfırlama jetonunu ya da bir kod için hem istemci taraflı Yeniden Başlatma Sırasında Devam Ettir işlemi. Şifre kodu sıfırlama jetonları yalnızca iş profilleri ve tamamen yönetilen cihazlarla ilgili daha fazla bilgi edinin.

vold bunu sağlamak için her CE anahtarını dahili depolama için şifreler kullanıcının sentetik şifresinden türetilen bir AES-256-GCM anahtarı kullanılarak. Sentetik şifre, sabit bir yüksek entropili kriptografik oluşturulur. LockSettingsService inç system_server, yapay şifreyi ve bunların korunuyor.

Sentetik şifreyi LSKF ile korumak için LockSettingsService, önce LSKF'yi ileri geri katarak uzatır scrypt, hedefleme süresi yaklaşık 25 ms ve yaklaşık 2 MiB'lık bellek kullanımı söz konusudur. LSKF'ler genellikle kısa olduğundan bu adım genellikle çok güvenlik sağlamaz. Güvenliğin ana katmanı Güvenli Öğe (SE) veya TEE tarafından zorunlu kılınan hız sınırlaması aşağıda açıklanmıştır.

Cihazda Güvenlik Unsuru (SE) varsa LockSettingsService uzatılmış LSKF'yi, SE'de depolanan yüksek entropili rastgele bir gizli anahtarla eşler. Weaver HAL'i kabul edersiniz. LockSettingsService, ardından şifreler olmak üzere iki kez yapay bir şifre anahtarı içerir: Birincisi, uzatılmış LSKF ve Weaver sırrı, ikinci olarak da kimlik doğrulamaya bağlı olmayan bir Anahtar Deposu bulunur. tuşuna basın. Bu, LSKF tahminleri için SE'nin zorunlu kıldığı hız sınırlamasını sağlar.

Cihazın SE'si yoksa bunun yerine LockSettingsService uzatılmış LSKF'yi bir kapı görevlisi olarak kullanır. şifre. LockSettingsService, ardından yapay şifreyi şifreler İki kez yapalım: ilk olarak genişletilmiş LSKF'den türetilen bir yazılım anahtarı ve ikincisi ise Kapı görevlisi kaydı. Bu, LSKF tahminleri için TEE tarafından zorunlu kılınan hız sınırlamasını sağlar.

LSKF değiştirildiğinde LockSettingsService tüm öğeleri siler yapay şifrenin eski şifreye bağlanmasıyla ilgili bilgiler LSKF'den daha fazla bilgi edinin. Weaver veya geri almaya dayanıklı Anahtar Deposu anahtarlarını destekleyen cihazlarda bu eski bağlamanın güvenli şekilde silinmesini garanti eder. Bu nedenle, koruma özellikleri Kullanıcı bir LSKF'ye sahip olmasa bile uygulanır.