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.
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ı tercih eden ü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 satın alabilirsiniz:
- 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. Kendisineaes-256-xts
veyaadiantum
. Android'den beri 11aes-256-xts
olan varsayılan algoritmayı seçin.filenames_encryption_mode
parametresi, dosya adlarını şifrelemek için şifreleme algoritması kullanılır. Kendisineaes-256-cts
,aes-256-heh
,adiantum
veyaaes-256-hctr2
. Belirtilmezse varsayılan olarakcontents_encryption_mode
iseaes-256-cts
aes-256-xts
veya şu durumlardaadiantum
adlı kişiyecontents_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 yerineinlinecrypt_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ılabilirinlinecrypt
ekleme seçeneği veinlinecrypt_optimized
veyaemmc_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. 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ıdakifileencryption
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ılanaes-256-heh
. Çoğu cihazda bunun açık bir şekilde yapılması gerekiraes-256-cts
olarak geçersiz kılındı.ro.crypto.fde_algorithm
vero.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şebilir.
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:
- Şurada üst düzey dizin oluşturun: (örneğin,
misc_ne
)userdata
bölüm. - Bu üst düzey dizini şifrelenmemiş olacak şekilde yapılandırın (Dizinleri hariç tutma bölümüne bakın).
- OTA paketlerini tutmak için üst düzey dizin içinde bir dizin oluşturun.
- 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 edinro.crypto.state
cihazının şifrelendiğinden emin olun
ro.crypto.type
öğesinin mevcut olup olmadığını kontrol edinro.crypto.type
öğesininfile
olarak ayarlandığından emin olun
Ek olarak, test kullanıcıları CE depolama alanının kilitli olduğunu, cihaz henüz
cihaz, açılıştan 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. |
|
Sistem DE | Belirli bir kullanıcıya bağlı olmayan, cihaz tarafından şifrelenmiş veriler |
|
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 |
|
Kullanıcı DE (dahili) | Dahili depolamada kullanıcı başına cihaz tarafından şifrelenmiş veriler |
|
Kullanıcı CE (kabul edilebilir) | Kabul edilebilir depolama alanında kullanıcı başına kimlik bilgisi ile şifrelenmiş veriler |
|
Kullanıcı DE (kabul edilebilir) | Kabul edilebilir depolama alanında kullanıcı başına cihaz şifrelemeli veriler |
|
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) |
Yukarıdaki tabloda gösterildiği gibi çoğu FBE anahtarı, 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 anahtar, 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 tarafı hem de 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.