Dosya Tabanlı Şifreleme

Android 7.0 ve üstü, dosya tabanlı şifrelemeyi (FBE) destekler. Dosya tabanlı şifreleme, farklı dosyaların bağımsız olarak açılabilen farklı anahtarlarla şifrelenmesine olanak tanır.

Bu makalede, yeni cihazlarda dosya tabanlı şifrelemenin nasıl etkinleştirileceği ve sistem uygulamalarının kullanıcılara mümkün olan en iyi ve en güvenli deneyimi sunmak için Doğrudan Önyükleme API'lerini nasıl kullanabileceği açıklanmaktadır.

Doğrudan Önyükleme

Dosya tabanlı şifreleme olarak adlandırılan Android 7.0 tanıtılan yeni bir özellik sağlayan Direct Önyükleme . Doğrudan Önyükleme, şifrelenmiş aygıtların doğrudan kilit ekranına önyüklenmesini sağlar. Daha önce, kullanılarak şifrelenmiş cihazlarda tam disk şifreleme (FDE), herhangi bir veri önce kimlik bilgilerini sağlamak için gereken kullanıcılar tüm ama operasyonların en temel performans telefonun önlenmesi, erişilebilir. Örneğin, alarmlar çalışamıyordu, erişilebilirlik hizmetleri kullanılamıyor ve telefonlar arama alamıyor, ancak yalnızca temel acil durum çevirici işlemleriyle sınırlıydı.

Dosya tabanlı şifrelemenin (FBE) ve uygulamaları şifrelemeden haberdar etmek için yeni API'lerin tanıtılmasıyla, bu uygulamaların sınırlı bir bağlamda çalışması mümkündür. Bu, kullanıcılar kimlik bilgilerini sağlamadan ve özel kullanıcı bilgilerini korumaya devam etmeden önce gerçekleşebilir.

FBE özellikli bir cihazda, cihazın her kullanıcısı, uygulamalar için kullanılabilen iki depolama konumuna sahiptir:

  • Varsayılan depolama konumu olan ve yalnızca kullanıcı cihazın kilidini açtıktan sonra kullanılabilen Kimlik Bilgileri Şifreli (CE) depolama.
  • Hem Doğrudan Önyükleme modu sırasında hem de kullanıcı cihazın kilidini açtıktan sonra kullanılabilen bir depolama konumu olan Cihaz Şifreli (DE) depolama.

Bu ayrım, şifreleme artık yalnızca bir önyükleme zamanı parolasına dayalı olmadığından, aynı anda birden fazla kullanıcının korunmasına izin verdiği için iş profillerini daha güvenli hale getirir.

Direct Boot API, şifrelemeye duyarlı uygulamaların bu alanların her birine erişmesine izin verir. Bir kullanıcının CE depolama kilit ekranında ilk kez girerken kimlik cevaben kilidi veya sağlama iş profilinde durumunda olduğunda uygulamaları bildirmek için ihtiyacı karşılamak uygulama yaşam döngüsü için değişiklikler var iş meydan . Android 7.0 çalıştıran cihazlar, FBE uygulayıp uygulamadıklarına bakılmaksızın bu yeni API'leri ve yaşam döngülerini desteklemelidir. FBE olmadan DE ve CE depolaması her zaman kilitsiz durumda olacaktır.

Ext4 ve F2FS dosya sistemlerinde dosya tabanlı şifrelemenin eksiksiz bir uygulaması Android Açık Kaynak Projesi'nde (AOSP) sağlanır ve yalnızca gereksinimleri karşılayan cihazlarda etkinleştirilmesi gerekir. FBE'yi kullanmayı seçen üreticiler, kullanılan çip üzerindeki sisteme (SoC) dayalı olarak özelliği optimize etmenin yollarını araştırmak isteyebilirler.

AOSP'deki tüm gerekli paketler, doğrudan önyüklemenin farkında olacak şekilde güncellendi. Ancak, cihaz üreticilerinin bu uygulamaların özelleştirilmiş sürümlerini kullandığı durumlarda, asgari olarak aşağıdaki hizmetleri sağlayan doğrudan önyüklemeye duyarlı paketlerin olmasını sağlamak isteyeceklerdir:

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

Örnekler ve kaynak

Android vold (ki dosya tabanlı şifreleme referans uygulamasını sağlar sistemi / vold ) Android'de depolama aygıtlarını ve hacimleri yönetmek için işlevsellik sağlar. FBE'nin eklenmesi, birden çok kullanıcının CE ve DE anahtarları için anahtar yönetimini desteklemek için vold'a birkaç yeni komut sağlar. Çekirdeğe ek olarak kullanmayı değiştiren dosya tabanlı şifreleme , lockscreen ve SystemUI dahil olmak üzere birçok sistem paketleri FBE desteklemek için modifiye edilmiş çekirdekte yetenekleri ve Doğrudan Önyükleme sahiptir. Bunlar şunları içerir:

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

Kullanmak * Sistem uygulamaları defaultToDeviceProtectedStorage apaçık niteliği

Uygulamalar ve farkında şifreleme hizmetlerin fazla örnek komut çalıştırarak bulunabilir mangrep directBootAware AOSP kaynak ağacının çerçeveler veya paketler dizinde.

bağımlılıklar

FBE'nin AOSP uygulamasını güvenli bir şekilde kullanmak için bir cihazın aşağıdaki bağımlılıkları karşılaması gerekir:

  • Ext4 şifreleme veya F2FS şifreleme için Çekirdek Desteği.
  • Anahtar Sorumlusu Destek HAL sürümü 1.0 veya 2.0 ile. Gerekli yetenekleri sağlamadığı veya şifreleme anahtarları için yeterli koruma sağlamadığı için Keymaster 0.3 desteği yoktur.
  • Anahtar Sorumlusu / Keystore ve Gatekeeper bir uygulanması gereken Güvenilir Yürütme Ortamı böylece yetkisiz OS (özel işletim sistemi cihaz üzerine çaktı) o basitçe DE anahtarlarını isteğinde bulunamaz DE tuşlar için koruma sağlamak üzere (TEE).
  • Keymaster başlatma bağlı Güven ve Doğrulanmış Boot Donanım Kök o Cihaz Şifreleme kimlik yetkisiz bir işletim sistemi tarafından erişilebilir değildir sağlamak için gereklidir.

Not: Depolama politikaları bir klasöre uygulanan ve tüm alt klasörlerini edilir. Üreticiler, şifrelenmemiş içeriği OTA klasörüyle ve sistemin şifresini çözen anahtarın bulunduğu klasörle sınırlandırmalıdır. Çoğu içerik, cihazla şifrelenmiş depolama yerine kimlik bilgileriyle şifrelenmiş depolamada bulunmalıdır.

uygulama

Göre directBootAware: Birincisi ve en önemlisi, çalar saat, telefon gibi uygulamalar, erişilebilirlik özellikleri android yapılmalıdır Doğrudan Boot geliştirici belgelerini.

Çekirdek Desteği

Ext4 ve F2FS şifrelemesi için çekirdek desteği, Android ortak çekirdeklerinde, sürüm 3.18 ve üzeri sürümlerde mevcuttur. Sürüm 5.1 veya üzeri olan bir çekirdekte etkinleştirmek için şunu kullanın:

CONFIG_FS_ENCRYPTION=y

Eski çekirdekler, kullanım için CONFIG_EXT4_ENCRYPTION=y cihazınızın eğer userdata dosya sistemi Ext4 veya kullanımıdır CONFIG_F2FS_FS_ENCRYPTION=y cihazınızın eğer userdata dosya sistemi F2FS olduğunu.

Cihazınız destekleyecek olursa uyarlanamıyor depolama veya kullanacağı meta şifreleme dahili depolama açıklandığı gibi, aynı zamanda meta şifreleme için gerekli çekirdek yapılandırma seçeneklerini etkinleştirmek meta şifreleme belgelerinde .

Cihaz üreticileri, Ext4 veya F2FS şifrelemesi için işlevsel desteğe ek olarak, dosya tabanlı şifrelemeyi hızlandırmak ve kullanıcı deneyimini geliştirmek için kriptografik hızlandırmayı da etkinleştirmelidir. Örneğin, ARM64 tabanlı cihazlarda, aşağıdaki çekirdek yapılandırma seçenekleri ayarlanarak ARMv8 CE (Kriptografi Uzantıları) hızlandırması etkinleştirilebilir:

CONFIG_CRYPTO_AES_ARM64_CE_BLK=y
CONFIG_CRYPTO_SHA2_ARM64_CE=y

Ayrıca To cihaz üreticileri de depolama cihazından / konumuna yolda ise şifreler / verilerin şifresini çözen inline şifreleme donanım, uygulanması düşünün edebilir, performansını artırmak ve güç kullanımını azaltmak. Android ortak çekirdekleri (sürüm 4.14 ve üstü), donanım ve satıcı sürücüsü desteği mevcut olduğunda satır içi şifrelemenin kullanılmasına izin veren bir çerçeve içerir. Satır içi şifreleme çerçevesi, aşağıdaki çekirdek yapılandırma seçenekleri ayarlanarak etkinleştirilebilir:

CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_FS_ENCRYPTION=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y

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

CONFIG_SCSI_UFS_CRYPTO=y

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

CONFIG_MMC_CRYPTO=y

Dosya tabanlı şifrelemeyi etkinleştirme

Bir aygıtta FBE etkinleştirme dahili depolama (üzerinde etkinleştirme gerektirir userdata ). Bu aynı zamanda FBE'yi kabul edilebilir depolamada otomatik olarak etkinleştirir; ancak, uyarlanabilir depolamadaki şifreleme biçimi gerekirse geçersiz kılınabilir.

Dahili depolama

FBE seçeneği ekleyerek etkindir fileencryption=contents_encryption_mode[:filenames_encryption_mode[:flags]] arasında fs_mgr_flags sütuna fstab için hat userdata . Bu seçenek, dahili depolamadaki şifreleme biçimini tanımlar. Üç adede kadar iki nokta üst üste ayrılmış parametre içerir:

  • contents_encryption_mode şifreleme algoritması şifrelemek içeriği için kullanılan parametre tanımlar. Bu da olabilir aes-256-xts veya adiantum . Android 11 beri de varsayılan algoritmasını belirtmek için boş bırakılabilir aes-256-xts .
  • filenames_encryption_mode şifreleme algoritması şifrelemek adları için kullanılan parametre tanımlar. Bu da olabilir aes-256-cts , aes-256-heh veya adiantum . , Varsayılan belirtilmemiş ise aes-256-cts eğer contents_encryption_mode olduğunu aes-256-xts , veya adiantum eğer contents_encryption_mode olduğunu adiantum .
  • flags Android 11'de yeni parametre, ayrılmış bayrakların listesidir + karakteri. Aşağıdaki bayraklar desteklenir:
    • v1 bayrak seçtiği sürüm 1 şifreleme politikaları; v2 bayrak seçtiği sürüm 2 şifreleme politikaları. Sürüm 2 şifreleme politikaları daha güvenli ve esnek kullanmak anahtar türetme işlevi . Cihaz Android 11 başlatılan ya da daha yüksek (belirlendiği gibi, varsayılan v2 ro.product.first_api_level cihazı Android 10 başlatılan ya da daha düşük ise), veya V1.
    • inlinecrypt_optimized bayrağı verimli tuşları çok sayıda işlemez satır içi şifreleme donanım için optimize edilmiş bir şifreleme biçimi seçer. Bunu, dosya başına bir tane yerine CE veya DE anahtarı başına yalnızca bir dosya içeriği şifreleme anahtarı türeterek yapar. IV'lerin üretimi (başlatma vektörleri) buna göre ayarlanır.
    • emmc_optimized bayrak benzer inlinecrypt_optimized , ama aynı zamanda bir IV üretim yöntemini seçer 32 bit sınırları IVs olduğu. Bu bayrak yalnızca JEDEC eMMC v5.2 spesifikasyonuyla uyumlu ve bu nedenle yalnızca 32 bit IV'leri destekleyen satır içi şifreleme donanımında kullanılmalıdır. Diğer satır içi şifreleme donanım üzerinde kullanın inlinecrypt_optimized yerine. Bu bayrak asla UFS tabanlı depolamada kullanılmamalıdır; UFS spesifikasyonu 64-bit IV'lerin kullanımına izin verir.
    • Destek olduğunu cihazlarda donanım sarılmış tuşları , wrappedkey_v0 bayrağı FBE için donanım sarılı tuşların kullanımını sağlar. Bu yalnızca birlikte kullanılabilir inlinecrypt seçeneği monte ve ya inlinecrypt_optimized veya emmc_optimized bayrağı.

Satır içi şifreleme donanım kullanarak değilseniz Birçok cihaz için önerilen ayardır fileencryption=aes-256-xts . Satır içi şifreleme donanımı kullanıyorsanız Birçok cihaz için önerilen ayardır fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized (veya eşdeğer fileencryption=::inlinecrypt_optimized ). AES hızlanma herhangi bir biçimde cihazlarda, Adiantum ayarlayarak yerine AES kullanılabilir fileencryption=adiantum .

Android 10 veya daha düşük olan başlattı cihazlarda fileencryption=ice da kullanıldığını belirtmek için kabul edilen FSCRYPT_MODE_PRIVATE dosya içeriğini şifreleme modu. Bu mod, Android ortak çekirdekleri tarafından uygulanmaz, ancak özel çekirdek yamaları kullanan satıcılar tarafından uygulanabilir. Bu mod tarafından üretilen disk formatı satıcıya özeldi. Android 11 veya sonraki sürümlerle başlatılan cihazlarda bu moda artık izin verilmez ve bunun yerine standart bir şifreleme biçimi kullanılmalıdır.

Varsayılan olarak, dosya içeriği şifrelemesi, Linux çekirdeğinin şifreleme API'si kullanılarak yapılır. Bunun yerine satır içi şifreleme donanımı kullanmak istiyorsanız, ayrıca eklemek inlinecrypt monte seçeneği. Örneğin, bir tam 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

Android 9 beri FBE ve uyarlanamıyor depolama birlikte kullanılabilir.

Belirtme fileencryption için fstab seçeneği userdata da otomatik FBE ve her iki sağlayan meta şifreleme uyarlanamıyor depolama. Ancak, özelliklerini ayarlayarak uyarlanamıyor depolama FBE ve / veya meta şifreleme biçimleri geçersiz kılabilir PRODUCT_PROPERTY_OVERRIDES .

Android 11 veya sonraki sürümlerle başlatılan cihazlarda aşağıdaki özellikleri kullanın:

  • ro.crypto.volume.options (Android 11'de yeni) uyarlanamıyor depolama FBE şifreleme biçimi seçer. Bu argüman olarak aynı sözdizimi vardır fileencryption fstab seçeneği ve aynı varsayılan kullanır. İçin önerilere bakın fileencryption yukarıdaki burada kullanmak için ne.
  • ro.crypto.volume.metadata.encryption uyarlanamıyor depolama meta şifreleme biçimi seçer. Bkz meta şifreleme belgelerine .

Android 10 veya önceki sürümlerle başlatılan cihazlarda aşağıdaki özellikleri kullanın:

  • ro.crypto.volume.contents_mode içerikleri şifreleme modunu seçer. Bu birinci kolon ayrılmış alan eşdeğerdir ro.crypto.volume.options .
  • ro.crypto.volume.filenames_mode dosya adları şifreleme modunu seçer. Bu ikinci kolon ayrılmış alan eşdeğerdir ro.crypto.volume.options , Android 10 veya daha düşük olan başlattı cihazlarda varsayılan olduğunu hariç aes-256-heh . Çoğu cihazda, bu açıkça şekilde geçersiz gereken aes-256-cts .
  • ro.crypto.fde_algorithm ve ro.crypto.fde_sector_size uyarlanamıyor depolama meta şifreleme biçimini seçin. Bkz meta şifreleme belgelerine .

Keymaster ile entegrasyon

Tuşları ve çekirdek keyring'leri yönetiminin nesil tarafından gerçekleştirilmektedir vold . FBE'nin AOSP uygulaması, cihazın Keymaster HAL 1.0 veya sonraki sürümünü desteklemesini gerektirir. Keymaster HAL'ın önceki sürümleri için destek yoktur.

İlk önyüklemede, kullanıcı 0'ın anahtarları, önyükleme işleminin başlarında oluşturulur ve kurulur. Zamanla on-post-fs faz init tamamlanıncaya, Keymaster isteklerini işlemek için hazır olmalıdır. Piksel cihazlarda, bundan önce bir komut dosyası bloğu Keymaster başlatılır sağlamak suretiyle işlenir /data monte edilir.

Şifreleme politikası

Dosya tabanlı şifreleme, şifreleme ilkesini dizin düzeyinde uygular. Bir cihazın ne zaman userdata bölümü ilk oluşturulduğunda, temel yapıları ve politikaları tarafından uygulanan init komut. Bu komut dosyaları, ilk kullanıcının (kullanıcı 0'ların) CE ve DE anahtarlarının oluşturulmasını tetikleyecek ve ayrıca bu anahtarlarla hangi dizinlerin şifreleneceğini tanımlayacaktır. Ek kullanıcılar ve profiller oluşturulduğunda, gerekli ek anahtarlar oluşturulur ve anahtar deposunda saklanır; kimlik bilgileri ve cihaz depolama konumları oluşturulur ve şifreleme ilkesi bu anahtarları bu dizinlere bağlar.

Android 11 ve üstü olarak, şifreleme politikası artık bağımsız değişken tarafından tanımlanır ziyade merkezi bir konumda içine kodlanmış, ancak mkdir init komut komutlar. DE anahtar kullanımı sistem ile şifrelenmiş dizinleri encryption=Require olurken, şifrelenmemiş dizinleri (veya olan alt dizinleri kullanıcı başına anahtarları ile şifrelenir dizinleri) kullanımı encryption=None .

Android 10'da şifreleme ilkesi şu konuma sabit kodlanmıştır:

/system/extras/libfscrypt/fscrypt_init_extensions.cpp

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

/system/extras/ext4_utils/ext4_crypt_init_extensions.cpp

Belirli dizinlerin hiç şifrelenmesini önlemek için istisnalar eklemek mümkündür. Bunun modifikasyonlar tür yapılırsa o zaman cihaz üreticisi içermelidir SELinux'un politikaları sadece ihtiyaç şifresiz dizini kullanmak için o uygulamalara erişim izni. Bu, tüm güvenilmeyen uygulamaları hariç tutmalıdır.

Bunun için bilinen tek kabul edilebilir kullanım durumu, eski OTA yeteneklerinin desteklenmesidir.

Sistem uygulamalarında Doğrudan Önyüklemeyi Destekleme

Uygulamaların Direct Boot'u bilinçli hale getirme

Sistem uygulamalarının hızlı geçişini kolaylaştırmak için uygulama düzeyinde ayarlanabilen iki yeni özellik vardır. defaultToDeviceProtectedStorage özelliği sadece sistem uygulamaları için kullanılabilir. directBootAware özniteliği tüm kullanılabilir.

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

directBootAware uygulama düzeyinde nitelik şifreleme farkında olarak uygulamada tüm bileşenleri işaretleme için kısaltmadır.

defaultToDeviceProtectedStorage nitelik DE depolama yerine CE depolama işaret noktaya varsayılan uygulama depolama konumunu yönlendirir. Bu bayrağı kullanan sistem uygulamaları, varsayılan konumda depolanan tüm verileri dikkatli bir şekilde denetlemeli ve CE depolamasını kullanmak için hassas verilerin yollarını değiştirmelidir. Bu seçeneği kullanan cihaz üreticileri, hiçbir kişisel bilgi içermediğinden emin olmak için sakladıkları verileri dikkatlice incelemelidir.

Bu modda çalışırken, gerektiğinde CE depolaması tarafından desteklenen bir İçeriği açıkça yönetmek için aşağıdaki Sistem API'leri kullanılabilir ve bunlar Cihaz Korumalı muadillerine eşdeğerdir.

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

Birden fazla kullanıcıyı destekleme

Çok kullanıcılı bir ortamda her kullanıcı ayrı bir şifreleme anahtarı alır. Her kullanıcı iki anahtar alır: DE ve CE anahtarı. Kullanıcı 0, özel bir kullanıcı olduğu için önce cihaza giriş yapmalıdır. Bu için uygun olan cihaz İdaresi kullanımları.

Bu şekilde etkileşim kullanıcı arasında Kripto-farkında uygulamalar: INTERACT_ACROSS_USERS ve INTERACT_ACROSS_USERS_FULL bir uygulama cihazındaki tüm kullanıcılarda etki göstermesini bekleyiniz. Bununla birlikte, bu uygulamalar, zaten kilidi açılmış olan kullanıcılar için yalnızca CE ile şifrelenmiş dizinlere erişebilecektir.

Bir uygulama, DE alanları arasında serbestçe etkileşime girebilir, ancak bir kullanıcının kilidinin açılması, cihazdaki tüm kullanıcıların kilidinin açık olduğu anlamına gelmez. Uygulama, bu alanlara erişmeye çalışmadan önce bu durumu kontrol etmelidir.

Her iş profili kullanıcı kimliği ayrıca iki anahtar alır: DE ve CE. İş zorluğu karşılandığında, profil kullanıcısının kilidi açılır ve Keymaster (TEE'de) profilin TEE anahtarını sağlayabilir.

Güncellemeleri işleme

Kurtarma bölümü, kullanıcı verileri bölümündeki DE korumalı depolamaya erişemiyor. FBE uygulayan cihazlar şiddetle kullanarak destek OTA tavsiye edilir A / B sistemi güncellemelerini . OTA, normal çalışma sırasında uygulanabileceğinden, şifrelenmiş sürücüdeki verilere erişmek için kurtarma işlemine gerek yoktur.

Erişmek için üzerine OTA dosyasını kurtarma gerektiren eski OTA çözüm kullanırken userdata bölümü:

  1. (Örnek için bir üst düzey dizin oluşturun misc_ne olarak) userdata bölümü.
  2. Şifreleme politikası istisna (görmek için bu üst düzey dizin ekle Şifreleme politikasını üstünde).
  3. OTA paketlerini tutmak için üst düzey dizin içinde bir dizin oluşturun.
  4. Bu klasöre ve içeriğine erişimi kontrol etmek için bir SELinux kuralı ve dosya bağlamları ekleyin. Yalnızca OTA güncellemelerini alan işlem veya uygulamalar bu klasörü okuyabilmeli ve bu klasöre yazabilmelidir. Başka hiçbir uygulama veya işlemin bu klasöre erişimi olmamalıdır.

doğrulama

Amaçlandığı gibi özellik eserlerin uygulanan sürümünü sağlamak için, öncelikle gibi birçok CTS şifreleme testleri çalıştırmak DirectBootHostTest ve EncryptionTest .

Cihazınız Android 11 veya daha çalışıyorsa, ayrıca çalıştırmak vts_kernel_encryption_test :

atest vts_kernel_encryption_test

veya:

vts-tradefed run vts -m vts_kernel_encryption_test

Ayrıca cihaz üreticileri aşağıdaki manuel testleri gerçekleştirebilir. FBE'nin etkin olduğu bir cihazda:

  • Olmadığını kontrol ro.crypto.state var
    • Emin ro.crypto.state şifrelenir
  • Olmadığını kontrol ro.crypto.type var
    • Emin olun ro.crypto.type ayarlandığında file

Ayrıca, test bir önyükleme yapabilir userdebug birincil kullanıcı bir kilit ekranı seti ile örneğini. Sonra adb cihaz ve kullanım içine kabuk su kök olmak. Emin olun /data/data şifrelenmiş dosya adlarını içerir; değilse, bir şeyler yanlıştır.

Cihaz üreticileri de çalışan incelemeleri önerilir fscrypt için yukarı Linux testlerini kendi cihazları veya tanelerinde. Bu testler, xfstests dosya sistemi test takımının bir parçasıdır. Ancak, bu yukarı akış testleri Android tarafından resmi olarak desteklenmemektedir.

AOSP uygulama ayrıntıları

Bu bölüm, AOSP uygulaması hakkında ayrıntılar sağlar ve dosya tabanlı şifrelemenin nasıl çalıştığını açıklar. Cihaz üreticilerinin cihazlarında FBE ve Direct Boot kullanabilmeleri için burada herhangi bir değişiklik yapmalarına gerek kalmamalıdır.

fscrypt şifreleme

AOSP uygulaması, çekirdekte "fscrypt" şifrelemesini (ext4 ve f2fs tarafından desteklenir) kullanır ve normalde şu şekilde yapılandırılır:

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

Adiantum şifreleme de desteklenmektedir. Adiantum şifrelemesi etkinleştirildiğinde, hem dosya içeriği hem de dosya adları Adiantum ile şifrelenir.

Fscrypt hakkında daha fazla bilgi için bkz memba çekirdek belgelerine .

Anahtar türetme

512 bitlik anahtarlar olan dosya tabanlı şifreleme anahtarları, TEE'de tutulan başka bir anahtar (256 bit AES-GCM anahtarı) tarafından şifrelenmiş olarak depolanır. Bu TEE anahtarını kullanmak için üç gereksinimin karşılanması gerekir:

  • Yetkilendirme belirteci
  • uzatılmış kimlik
  • "Secdiscardable hash"

Yetkilendirme jetonu isimli bir kriptografik kimliği doğrulanmış simge tarafından oluşturulan Gatekeeper bir kullanıcı başarıyla TEE doğru doğrulama anahtarı sağlanan sürece tuşunu kullanmanız reddeder. Açtığında. Kullanıcının kimlik bilgisi yoksa, kimlik doğrulama belirteci kullanılmaz veya gerekli değildir.

Gergin kimlik tuzlama ve ile germeden sonra kullanıcı kimlik bilgisi olan scrypt algoritması. Kimlik aslında geçirilmeden önce kilidi ayarları hizmetinde kez karılır vold için geçme scrypt . Bu kriptografik için geçerli olan tüm garantiler ile TEE anahtarın bağlı olduğu KM_TAG_APPLICATION_ID . Kullanıcının kimlik bilgisi yoksa, uzatılmış kimlik bilgisi kullanılmaz veya gerekli değildir.

secdiscardable hash tohum gibi, anahtar yeniden oluşturmak için kullanılan diğer bilgilerle birlikte saklı rastlantısal bir 16 KB dosyasının bir 512 bit bozulmasıdır. Bu dosya, anahtar silindiğinde güvenli bir şekilde silinir veya yeni bir şekilde şifrelenir; bu ek koruma, bir saldırganın anahtarı kurtarmak için bu güvenli bir şekilde silinen dosyanın her bir parçasını kurtarmasını sağlar. Bu kriptografik için geçerli olan tüm garantiler ile TEE anahtarın bağlı olduğu KM_TAG_APPLICATION_ID .

Çoğu durumda, FBE anahtarları, örneğin dosya başına veya mod başına anahtarlar gibi, şifrelemeyi yapmak için gerçekten kullanılan alt anahtarları oluşturmak için çekirdekte ek bir anahtar türetme adımından da geçer. Sürüm 2 şifreleme ilkeleri için bunun için HKDF-SHA512 kullanılır.