Android 7.0 ve sonraki sürümler dosya tabanlı şifrelemeyi (FBE) destekler. FBE, farklı dosyaların bağımsız olarak kilidi açılabilen farklı anahtarlarla şifrelenmesine olanak tanır. Bu anahtarlar hem dosya içeriklerini 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şiklik yapma zamanları gibi diğer bilgiler şifrelenmez. Bu diğer bilgiler toplu olarak dosya sistemi meta verileri olarak bilinir.
Android 9, meta veri şifrelemesi desteğini kullanıma sundu. Meta veri şifrelemede, önyükleme sırasında mevcut olan tek bir anahtar, FBE tarafından şifrelenmeyen tüm içerikleri şifreler. Bu anahtar, Keymaster tarafından korunur. Keymaster da doğrulanmış önyükleme tarafından korunur.
FBE her etkinleştirildiğinde, kabul edilebilir depolama alanında meta veri şifreleme her zaman etkindir. Meta veri şifreleme, dahili depolama alanında da etkinleştirilebilir. Başlatılan cihazlar Android 11 veya sonraki sürümlerde meta veri şifreleme bulunmalıdır etkin olduğundan emin olun.
Dahili depolama alanında uygulama
metadata
dosya sistemini ayarlayarak, init sırasını değiştirerek ve cihazın fstab dosyasında meta veri şifrelemeyi etkinleştirerek yeni cihazların dahili depolama alanında meta veri şifrelemeyi ayarlayabilirsiniz.
Ön koşullar
Meta veri şifreleme, yalnızca veri bölümü ilk önce olduğunda ayarlanabilir biçimlendirmeniz gerekir. Bu nedenle, bu özellik yalnızca yeni cihazlar içindir ve OTA'da değiştirilemez.
Meta veri şifreleme, dm-default-key
modülünün
etkin olduğundan emin olun. Android 11 ve sonraki sürümlerde
dm-default-key
, Android'in ortak çekirdekleri sürümü tarafından desteklenir
4,14 ve sonraki sürümler. Bu dm-default-key
sürümü bir donanım ve
blk-crypto adı verilen tedarikçiden bağımsız şifreleme çerçevesidir.
dm-default-key
özelliğini etkinleştirmek için şunu kullanın:
CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y CONFIG_DM_DEFAULT_KEY=y
dm-default-key
, satır içi şifreleme donanımı (
veriler depolama cihazına giderken veya depolama cihazından giderken verileri şifreler/şifrelerini çözer)
kullanılabilir. Satır içi şifreleme donanımı kullanmıyorsanız
çekirdeğin kriptografi API'sine bir yedeğin etkinleştirilmesi için de gereklidir:
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
Satır içi şifreleme donanımı kullanmıyorsanız FBE dokümanlarında önerildiği gibi mevcut tüm CPU tabanlı hızlandırmaları da etkinleştirmeniz gerekir.
Android 10 ve önceki sürümlerde dm-default-key
, Android ortak çekirdeği tarafından desteklenmez. Bu nedenle, programı
dm-default-key
uygulayın.
Meta veri dosya sistemini ayarlama
Çünkü kullanıcı verisi bölümündeki hiçbir şey meta veriler şifreleme anahtarı varsa bölüm tablosu, bilgisayarınızda ayrı bir şifreleme anahtarı "meta veri bölümü" adı verilen bölüm kullanılabilmesini sağlayan anahtar denetleyicisi blob'larının koruyabilirsiniz. Meta veri bölümü 16 MB olmalıdır.
fstab.hardware
, /metadata
'te monte edilen ve önyükleme sırasında biçimlendirildiğinden emin olmak için formattable
işareti de dahil olmak üzere, söz konusu bölümde bulunan meta veri dosya sistemi için bir giriş içermelidir. f2fs dosya sistemi daha küçük bölümlerde çalışmaz. Bunun yerine ext4 kullanmanızı öneririz. Örnek:
/dev/block/bootdevice/by-name/metadata /metadata ext4 noatime,nosuid,nodev,discard wait,check,formattable
/metadata
bağlama noktasının bulunduğundan emin olmak için BoardConfig-common.mk
dosyasına aşağıdaki satırı ekleyin:
BOARD_USES_METADATA_PARTITION := true
İlk başlatma sırası değişiklikleri
Meta veri şifreleme kullanıldığında vold
, çalıştırılmadan önce çalıştırılmalıdır.
/data
eklendi. Yeterince erken başladığından emin olmak için
init.hardware.rc
cümlesi:
# We need vold early for metadata encryption on early-fs start vold
Başlatma işlemi bağlanmaya çalışmadan önce keymaster çalışıyor ve hazır olmalıdır
/data
init.hardware.rc
, /data
öğesini on
late-fs
kıtasına monte eden bir mount_all
talimatı içermelidir. Bu satırdan önce exec için yönergeyi ekleyin.
wait_for_keymaster
hizmet:
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 şifrelemeyi etkinleştir
Son olarak, keydirectory=/metadata/vold/metadata_encryption
öğesini şuraya ekleyin:
fstab
girişinin fs_mgr_flags sütununda
userdata
. Örneğin, tam bir fstab satırı aşağıdaki gibi 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 depolama alanındaki meta veri şifreleme algoritması
AES-256-XTS. Bu, fs_mgr_flags sütununda metadata_encryption
seçeneği ayarlanarak geçersiz kılınabilir:
- AES hızlandırması olmayan cihazlarda Adiantum şifrelemesi
metadata_encryption=adiantum
ayarlanarak etkinleştirilir. - Donanımla sarmalanmış anahtarları destekleyen cihazlarda, meta veri şifreleme anahtarı
metadata_encryption=aes-256-xts:wrappedkey_v0
(veyaaes-256-xts
varsayılan algoritma olduğundan eşdeğer olarakmetadata_encryption=:wrappedkey_v0
) ayarlanarak donanımla sarmalanmış hale getirilebilir.
Android 11'de dm-default-key
için çekirdek arayüzü değiştiğinden device.mk
'de PRODUCT_SHIPPING_API_LEVEL
için doğru değeri ayarladığınızdan emin olmanız gerekir. Örneğin, cihazınız Android 11 (API düzeyi 30) ile kullanıma sunuluyorsa device.mk
şu bilgileri içermelidir:
PRODUCT_SHIPPING_API_LEVEL := 30
Ayrıca, yeni
Kargo API'si düzeyinden bağımsız olarak dm-default-key
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 testlere dahil edilir. Ayrıca aşağıda açıklanan yaygın sorunlara da dikkat edin.
Testler
Dahili depolama alanında 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
Çıkış şuna benzer şekilde görünecektir:
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
Cihazın fstab
bölümünde metadata_encryption
seçeneğine, ardından
çıktı yukarıdakinden biraz farklıdır. Örneğin, Adiantum şifrelemesini etkinleştirdiyseniz üçüncü alan aes-xts-plain64
yerine xchacha12,aes-adiantum-plain64
olur.
Ardından vts_kernel_encryption_test komutunu çalıştırın. meta veri şifreleme ve FBE'nin doğruluğunu onaylamak için:
atest vts_kernel_encryption_test
veya:
vts-tradefed run vts -m vts_kernel_encryption_test
Genel sorunlar
Meta veri şifrelenmiş /data
bölümünü bağlayan mount_all
çağrısı sırasında init
, vdc aracını yürütür. vdc
araç vold
ile binder
arasında bağlantı kurar
meta veriyle şifrelenmiş cihazı ekleyebilirsiniz. Bu süre boyunca
çağrısı, init
engellenir ve okumayı veya ayarlamayı dener
init
mülk, mount_all
bitene kadar engeller.
Bu aşamada, vold
'nin çalışmasının herhangi bir kısmı bir mülkü okuma veya ayarlama konusunda doğrudan veya dolaylı olarak engellenirse kilitlenme meydana gelir. vold
'ün, init
ile başka bir etkileşimde bulunmadan anahtarları okuma, Keymaster ile etkileşim kurma ve veri dizini bağlama işlemlerini tamamlayabilmesi önemlidir.
mount_all
çalıştığında Keymaster tam olarak başlamazsa başlamaz
vold
adlı kullanıcıdan belirli özellikleri okuyana kadar
init
ile tam olarak açıklanan kilitlenmeyi sağlar. exec_start wait_for_keymaster
'ü, yukarıda belirtildiği gibi ilgili mount_all
çağrısının üzerine yerleştirmek, Keymaster'ın önceden tam olarak çalışmasını sağlar ve bu kilitlenmeyi önler.
Kabul edilebilir depolama alanında yapılandırma
Android 9'dan beri, dahili depolama alanında meta veri şifrelemesi etkinleştirilmemiş olsa bile FBE etkinleştirildiğinde uyarlanabilir depolama alanında her zaman bir meta veri şifreleme biçimi etkinleştirilir.
AOSP'de, kabul edilebilir verilerde meta veri şifrelemenin
depolama alanı: dm-crypt
temelinde kullanımdan kaldırılan bir alan ve temel alan yeni bir depolama alanı
dm-default-key
tarihinde. Cihazınız için doğru uygulamanın seçildiğinden emin olmak üzere device.mk
içinde PRODUCT_SHIPPING_API_LEVEL
için doğru değeri ayarladığınızdan emin olun. Örneğin,
Cihazınız Android 11 (API düzeyi 30) ile başlıyorsa
device.mk
şunları içermelidir:
PRODUCT_SHIPPING_API_LEVEL := 30
Ayrıca, gönderim API'si seviyesinden bağımsız olarak yeni birim meta veri şifreleme yönteminin (ve yeni varsayılan FBE politika sürümünün) kullanılmasını zorunlu kılmak 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
Mevcut yöntem
Android 11 veya sonraki sürümlerin yüklü olduğu cihazlarda
benimsenebilir depolama alanında meta veri şifreleme için dm-default-key
kullanılır
çekirdeği modülünde çalışır. Hangi çekirdek yapılandırma seçeneklerinin etkinleştirileceği hakkında bilgi edinmek için yukarıdaki ön koşullara bakın. Cihazın dahili depolama alanında çalışan satır içi şifreleme donanımının, benimsenebilir depolama alanında kullanılamayabileceğini ve bu nedenle CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
'ün gerekli olabileceğini unutmayın.
Varsayılan olarak dm-default-key
birim meta veri şifreleme yöntemi, 4096 baytlık kripto sektörleriyle AES-256-XTS şifreleme algoritmasını kullanır. İlgili içeriği oluşturmak için kullanılan
geçersiz kılınabilir. Bunun için
ro.crypto.volume.metadata.encryption
sistem özelliğini etkinleştirin. Bu mülkün değeri, yukarıda açıklanan metadata_encryption
fstab seçeneğiyle aynı söz dizimi içerir. Örneğin, AES hızlandırması bulunmayan cihazlarda ro.crypto.volume.metadata.encryption=adiantum
ayarlanarak Adiantum şifrelemesi etkinleştirilebilir.
Eski yöntem
Android 10 veya önceki bir sürümle kullanıma sunulan cihazlarda, uyarlanabilir depolama alanındaki meta veri şifrelemesi için dm-default-key
yerine dm-crypt
çekirdek modülü kullanılır:
CONFIG_DM_CRYPT=y
dm-default-key
yönteminden farklı olarak dm-crypt
yöntemi
dosya içeriğinin bir kez FBE anahtarıyla ve ikincisi FBE anahtarı ile olmak üzere iki kez şifrelenmesine neden olur
şifreleme anahtarını kullanın. Bu çift şifreleme performansı düşürür ve
meta veri şifrelemenin güvenlik hedeflerine ulaşmak için gerekli değildir.
FBE anahtarlarının güvenliğinin ihlal edilmesi en az meta veriler kadar zor olur
şifreleme anahtarı kullanın. Tedarikçiler, özellikle ro.crypto.allow_encrypt_override
sistem özelliği true
olarak ayarlandığında Android'in dm-crypt
'e ilettiği allow_encrypt_override
seçeneğini uygulayarak çift şifrelemeyi önlemek için çekirdek özelleştirmeleri yapabilir.
Bu özelleştirmeler, Android ortak çekirdeği tarafından desteklenmez.
Varsayılan olarak dm-crypt
birim meta veri şifreleme yöntemi, ESSIV ve 512 baytlık kripto sektörleriyle AES-128-CBC şifreleme algoritmasını kullanır. Bu, aşağıdaki sistem özellikleri ayarlanarak (FDE için de kullanılır) geçersiz kılınabilir:
ro.crypto.fde_algorithm
, meta veri şifreleme algoritmasını seçer. Seçenekleraes-128-cbc
veadiantum
'dır. Adiantum yalnızca cihazda AES hızlandırma yoktur.ro.crypto.fde_sector_size
, kripto sektörünün boyutunu seçer. Seçenekler 512, 1024, 2048 ve 4096'tır. Adiantum şifrelemesi için 4096.