Meta Veri Şifreleme

Android 7.0 ve daha destekler dosya tabanlı şifreleme (FBE). FBE, farklı dosyaların bağımsız olarak açılabilen farklı anahtarlarla şifrelenmesine izin verir. Bu anahtarlar, hem dosya içeriğini hem de dosya adlarını şifrelemek için kullanılır. FBE kullanıldığında, dizin düzenleri, dosya boyutları, izinler ve oluşturma/değiştirme süreleri gibi diğer bilgiler şifrelenmez. Toplu olarak, bu diğer bilgiler dosya sistemi meta verileri olarak bilinir.

Android 9, meta veri şifreleme desteği sundu. Meta veri şifreleme ile, önyükleme sırasında mevcut olan tek bir anahtar, FBE tarafından şifrelenmeyen her türlü içeriği şifreler. Bu anahtar Keymaster tarafından korunur ve bu da doğrulanmış önyükleme tarafından korunur.

Meta veri şifreleme daima etkin olup uyarlanamıyor depolama FBE etkin olduğunda. Meta veri şifreleme, dahili depolamada da etkinleştirilebilir. Android 11 veya sonraki sürümlerle başlatılan cihazlarda dahili depolamada meta veri şifrelemesi etkin olmalıdır.

Dahili depolama üzerinde uygulama

Sen kurarak yeni cihazların dahili depolama meta veri şifrelemeyi ayarlayabilirsiniz metadata dosya sistemi, init dizisini değiştirmeden ve cihazın fstab dosyasında meta veri şifreleme sağlayan.

Önkoşullar

Meta veri şifrelemesi, yalnızca veri bölümü ilk formatlandığında kurulabilir. Sonuç olarak, bu özellik yalnızca yeni cihazlar içindir; bu bir OTA'nın değiştirmesi gereken bir şey değil.

Meta veri şifreleme gerektirir dm-default-key modülü çekirdekte yetkilendirilmiş olmalıdır. Android 11 ve daha yüksek, dm-default-key Android ortak çekirdekler, sürüm 4.14 ve üstü tarafından desteklenmektedir. Bu sürümü dm-default-key bir donanım ve satıcı bağımsız şifreleme çerçeve denilen blk-kripto kullanır.

Etkinleştirmek için dm-default-key kullanın:

CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_DM_DEFAULT_KEY=y

dm-default-key şifreleme donanım içi kullanım (Depolama cihazı üzerine / yolda iken şifreler / verilerin şifresini çözer bu donanım) mevcuttur. Satır içi şifreleme donanım kullanarak olmayacak, çekirdeğin şifreleme API bir dönüşü etkinleştirmek için de gereklidir:

CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y

İnline şifreleme donanım kullanarak değil zaman önerildiği gibi aynı zamanda herhangi bir kullanılabilir CPU tabanlı hızlandırma imkan vermelidir FBE belgelerinde .

Android 10 ve daha düşük, In dm-default-key Android ortak çekirdek tarafından desteklenen değildi. Bu uygulamaya satıcıları bu nedenle yukarı oldu dm-default-key .

Meta veri dosya sistemini kurun

Meta veri şifreleme anahtarı mevcut olana kadar kullanıcı verileri bölümündeki hiçbir şey okunamayacağından, bölüm tablosunun bu anahtarı koruyan anahtar yöneticisi bloblarını depolamak için "meta veri bölümü" adı verilen ayrı bir bölüm ayırması gerekir. Meta veri bölümü 16MB olmalıdır.

fstab.hardware bu bölümdeki hayatını adresinden montaj Meta veri dosya sistemi için bir girdi içermelidir /metadata de dahil olmak üzere, formattable açılışta biçimlendirilir sağlamak için bayrak. f2fs dosya sistemi daha küçük bölümlerde çalışmaz; Bunun yerine ext4 kullanmanızı öneririz. Örneğin:

/dev/block/bootdevice/by-name/metadata              /metadata          ext4        noatime,nosuid,nodev,discard                          wait,check,formattable

Sağlamak için /metadata aşağıdaki satırı ekleyin, nokta var monte BoardConfig-common.mk :

BOARD_USES_METADATA_PARTITION := true

Başlangıç ​​dizisindeki değişiklikler

Meta veri şifreleme kullanıldığında, vold önce çalışıyor olmalıdır /data monte edilir. Aşağıdaki dörtlük ekleyin, neden yeterince erken başladı emin olmak için init.hardware.rc :

# We need vold early for metadata encryption
on early-fs
    start vold

Anahtar Sorumlusu koşu ve monte etmek init girişimleri önce hazır olmalıdır /data .

init.hardware.rc zaten içermelidir mount_all hangi bağlar talimat /data kendisi on late-fs dörtlük. Bu hat önce exec yönergesini ekleyin wait_for_keymaster hizmeti:

on late-fs
   … 
    # Wait for keymaster
    exec_start wait_for_keymaster

    # Mount RW partitions which need run fsck
    mount_all /vendor/etc/fstab.${ro.boot.hardware.platform} --late

Meta veri şifrelemesini açma

Son olarak eklemek keydirectory=/metadata/vold/metadata_encryption ait fs_mgr_flags sütuna fstab için girdiği userdata . Örneğin, tam bir fstab satırı şöyle görünebilir:

/dev/block/bootdevice/by-name/userdata              /data              f2fs        noatime,nosuid,nodev,discard,inlinecrypt latemount,wait,check,fileencryption=aes-256-xts:aes-256-cts:inlinecrypt_optimized,keydirectory=/metadata/vold/metadata_encryption,quota,formattable

Varsayılan olarak, dahili depolamadaki meta veri şifreleme algoritması AES-256-XTS'dir. Bu ayarlayarak geçersiz kılınmış olabilir metadata_encryption fs_mgr_flags sütununda da, seçenek:

  • AES ivme eksikliği cihazlarda, Adiantum şifreleme ayarlayarak etkinleştirilebilir metadata_encryption=adiantum .
  • Destek olduğunu cihazlarda donanım sarılmış tuşlar , meta şifreleme anahtarı donanım sarılmış ayarlayarak yapılabilir metadata_encryption=aes-256-xts:wrappedkey_v0 (eşit biçimde veya metadata_encryption=:wrappedkey_v0 gibi aes-256-xts varsayılan algoritmasıdır).

İçin çekirdek arayüzü Çünkü dm-default-key Android 11'de değişti, ayrıca için doğru değeri belirledik sağlamak için gereken PRODUCT_SHIPPING_API_LEVEL içinde device.mk . Örneğin, Android 11 (API seviyesi 30) ile cihaz lansmanları, eğer device.mk içermelidir:

PRODUCT_SHIPPING_API_LEVEL := 30

Ayrıca yeni kullanılmasını zorlamak için aşağıdaki sistem özelliğini ayarlayabilirsiniz dm-default-key API düzeyi nakliye bakılmaksızın API:

PRODUCT_PROPERTY_OVERRIDES += \
    ro.crypto.dm_default_key.options_format.version=2

doğrulama

Meta veri şifrelemenin etkinleştirildiğini ve düzgün çalıştığını doğrulamak için aşağıda açıklanan testleri çalıştırın. Ayrıca dikkatli olun yaygın sorunların aşağıda tarif.

testler

Dahili depolamada meta veri şifrelemenin etkinleştirildiğini doğrulamak için aşağıdaki komutu çalıştırarak başlayın:

adb root
adb shell dmctl table userdata

Çıktı şuna benzer olmalıdır:

Targets in the device-mapper table for userdata:
0-4194304: default-key, aes-xts-plain64 - 0 252:2 0 3 allow_discards sector_size:4096 iv_large_sectors

Eğer ayarlayarak varsayılan şifreleme ayarlarını overrode Eğer metadata_encryption cihazın seçeneği fstab ardından çıkış yukarıdaki biraz farklı olacaktır. Etkin Örneğin, Adiantum şifreleme ardından üçüncü alan olacak xchacha12,aes-adiantum-plain64 yerine aes-xts-plain64 .

Daha sonra, çalıştırmak vts_kernel_encryption_test meta şifreleme ve FBE doğruluğunu kontrol etmek için:

atest vts_kernel_encryption_test

veya:

vts-tradefed run vts -m vts_kernel_encryption_test

Ortak sorunlar

Çağrı sırasında mount_all meta-şifreli takar /data bölümü, init VDC araç yürütür. Vdc aracı bağlandığı için vold üzerinde binder meta-şifreli cihazı kurmak ve bölüm monte etmek. Bu aramanın süresi için, init bloke edilir ve her iki okuma veya resim için girişimler init özellikleri kadar engeller mount_all bitirir. Bu aşamada, herhangi bir kısmı ise vold eserinin doğrudan veya dolaylı bir özellik okuma veya ayarlama konusunda engellenir, kilitlenme neden olacaktır. O sağlamak önemlidir vold ile daha da etkileşimde bulunmadan anahtarları okuma Keymaster ile etkileşim ve veri dizinini montaj çalışmalarını tamamlamak init .

Zaman Keymaster tamamen başlamış değilse mount_all çalışır, bu kadar tepki vermez vold ondan belirli özellikleri okumak kadar init aynen anlatıldığı çıkmaz sonuçlanan. Yerleştirme exec_start wait_for_keymaster ilgili yukarıdaki mount_all Keymaster tamamen böylece önceden çalışmakta olduğundan ve belirtilen teminat altın olarak çağırma bu kilitlenme önler.

Kabul edilebilir depolamada yapılandırma

Android 9 beri meta şifreleme formu her zaman etkin durumda uyarlanamıyor depolama meta şifreleme dahili depolama etkin olmadığında bile, FBE etkin olduğunda.

AOSP yılında uyarlanamıyor depolama meta şifreleme iki uygulama vardır: dayalı bir kullanımdan kaldırılmış bir dm-crypt ve daha yeni bir dayalı dm-default-key . Eğer için doğru değeri belirledik emin olun doğru uygulama cihazınız için seçilen emin olmak için PRODUCT_SHIPPING_API_LEVEL içinde device.mk . Örneğin, Android 11 (API seviyesi 30) ile cihaz lansmanları, eğer device.mk içermelidir:

PRODUCT_SHIPPING_API_LEVEL := 30

Gönderim API seviyesinden bağımsız olarak yeni birim meta veri şifreleme yönteminin (ve yeni varsayılan FBE ilke sürümünün) kullanımını zorlamak için aşağıdaki sistem özelliklerini de ayarlayabilirsiniz:

PRODUCT_PROPERTY_OVERRIDES += \
    ro.crypto.volume.metadata.method=dm-default-key \
    ro.crypto.dm_default_key.options_format.version=2 \
    ro.crypto.volume.options=::v2

Geçerli yöntem

Android 11 veya daha yüksek olan başlatılması cihazlarda, uyarlanamıyor depolama meta şifreleme kullanan dm-default-key sadece dahili depolama gibi çekirdek modülü. Bkz önkoşulları çekirdek yapılandırma seçenekleri etkinleştirmek için hangi yukarıda. Not cihazın dahili depolama çalışmaları uyarlanamıyor depolama kullanılamaz ve bu nedenle olabilir içi şifreleme donanım bu CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y gerekebilir.

Varsayılan olarak, dm-default-key hacim meta şifreleme yöntemi 4096 bayt kripto sektörleri ile AES-256-XTS şifreleme algoritması kullanır. Algoritma ayarlayarak geçersiz kılınmış olabilir ro.crypto.volume.metadata.encryption sistem özelliği. Bu özelliğin değeri ile aynı sözdizimi vardır metadata_encryption yukarıda açıklanan fstab seçeneği. Örneğin, AES ivme eksikliği cihazlarda, Adiantum şifreleme ayarlayarak etkinleştirilebilir ro.crypto.volume.metadata.encryption=adiantum .

eski yöntem

Android 10 veya daha düşük durumda lanse cihazlarda, uyarlanamıyor depolama meta şifreleme kullanan dm-crypt yerine çekirdek modülü dm-default-key :

CONFIG_DM_CRYPT=y

Aksine dm-default-key yöntemle, dm-crypt yöntem dosya içeriği iki kez şifreli neden olur: meta şifreleme anahtarına sahip bir FBE anahtarla bir kez ve bir kez. Bu çift şifreleme, performansı düşürür ve Android, FBE anahtarlarının en az meta veri şifreleme anahtarı kadar taviz verilmesinin zor olmasını sağladığından, meta veri şifrelemesinin güvenlik hedeflerine ulaşmak için gerekli değildir. Satıcılar hayata geçirerek özellikle çift şifreleme önlemek için çekirdek özelleştirmeleri yapabilirsiniz allow_encrypt_override Android geçecek seçeneği dm-crypt sistem özelliği zaman ro.crypto.allow_encrypt_override olarak ayarlanır true . Bu özelleştirmeler, Android ortak çekirdeği tarafından desteklenmez.

Varsayılan olarak, dm-crypt hacim meta şifreleme yöntemi ESSIV ve 512 bayt kripto sektörleri ile AES-128-CBC şifreleme algoritması kullanır. Bu, aşağıdaki sistem özellikleri (FDE için de kullanılır) ayarlanarak geçersiz kılınabilir:

  • ro.crypto.fde_algorithm meta şifreleme algoritmasını seçer. Seçeneklerdir aes-128-cbc ve adiantum . Adiantum cihaz AES ivme yoksun yalnızca kullanılabilir.
  • ro.crypto.fde_sector_size seçer kripto sektör boyutu. Seçenekler 512, 1024, 2048 ve 4096'dır. Adiantum şifrelemesi için 4096'yı kullanın.