Android 7.0 ve sonraki sürümler dosya tabanlı şifreleme (FBE) olabilir. FBE Farklı dosyaların, kilidi açılabilen farklı anahtarlarla şifrelenmesine olanak tanır bağımsız olarak değiştirebilirsiniz. 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ı ve erişim izinleri ve oluşturma/değiştirme zamanları şifrelenmez. Bu durumda dosya sistemi meta verileri olarak bilinir.
Android 9, meta veri şifreleme desteğini kullanıma sundu. Meta veri şifreleme sayesinde, başlatma sırasında mevcut olan tek bir anahtar, verilerinizi İçerik FBE tarafından şifrelenmez. Bu anahtar, dönüş, doğrulanmış başlatma tarafından korunuyor.
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 depolamaya uygulama
Yeni cihazların dahili depolama alanında meta veri şifrelemeyi ayarlamak için
metadata
dosya sistemini ayarlama, başlatma sırasını değiştirme ve
cihazın fstab dosyasında meta veri şifrelemeyi etkinleştirme.
Ön koşullar
Meta veri şifreleme, yalnızca veri bölümü ilk önce olduğunda ayarlanabilir biçimlendirmeniz gerekir. Dolayısıyla bu özellik yalnızca yeni cihazlarda kullanılabilir; bu değil OTA’nın değişmesi gereken bir şey var mı?
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ı kullanmayacaksanı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 belgelerinde önerildiği şekilde CPU tabanlı hızlandırma.
Android 10 ve önceki sürümlerde dm-default-key
, Android ortak çekirdeği tarafından desteklenmiyordu. 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
, meta veri dosya sistemi için bir giriş içermelidir
o bölümde bulunan ve /metadata
noktasına ekli olan;
formattable
işaretini kullanın. İlgili içeriği oluşturmak için kullanılan
f2fs dosya sistemi daha küçük bölümlerde çalışmaz; ext4 veya daha fazla
. Örnek:
/dev/block/bootdevice/by-name/metadata /metadata ext4 noatime,nosuid,nodev,discard wait,check,formattable
/metadata
ekleme noktasının mevcut olduğundan emin olmak için aşağıdaki satırı ekleyin
- BoardConfig-common.mk
:
BOARD_USES_METADATA_PARTITION := true
Başlatma dizisindeki değişiklikler
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
zaten bir mount_all
içermelidir
/data
komutunu on
late-fs
dizey içine ekleyen talimat. 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ştirme
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,
metadata_encryption
seçeneği,
fs_mgr_flags sütunu:
- 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
(veya eşdeğer olarakmetadata_encryption=:wrappedkey_v0
,aes-256-xts
varsayılan algoritmadır).
Android'de dm-default-key
çekirdek arayüzü değiştiği için
11. Ayrıca, dönüşüm hunisinin üst kısmındaki
PRODUCT_SHIPPING_API_LEVEL
için doğru değer
device.mk
. Örneğin, cihazınızda Android yüklüyse
11 (API düzeyi 30) ise device.mk
,
içerir:
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 şunlara da dikkat edin: yaygın sorunları hakkında bilgi edinin.
Testler
Aşağıdaki komutu çalıştırarak meta veri şifrelemenin dahili depolamada etkin:
adb root
adb shell dmctl table userdata
Çıkış ş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
Cihazın fstab
bölümünde metadata_encryption
seçeneğine, ardından
çıktı yukarıdakinden biraz farklı olur. Örneğin Adiantum şifrelemesini etkinleştirdiyseniz üçüncü
alanı, xchacha12,aes-adiantum-plain64
yerine
aes-xts-plain64
.
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
Şifrelenmiş meta verileri ekleyen mount_all
çağrısı sırasında
/data
bölümü, 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
tesis, mount_all
işlemi tamamlayana kadar engellenecek.
Bu aşamada vold
adlı iş ortağının çalışmasının herhangi bir kısmı doğrudan veya
bir özelliği okuma veya ayarlama sırasında dolaylı olarak engellendiğinde kilitlenme ortaya çıkar. Evet
vold
adlı kullanıcının
Keymaster ile etkileşimde bulunma ve veri dizinini
init
ile daha fazla etkileşim kuruyorsunuz.
mount_all
çalıştığında Keymaster tam olarak başlatılmazsa başlamaz
vold
adlı kullanıcıdan belirli özellikleri okuyana kadar
init
ile tam olarak açıklanan kilitlenmeyi sağlar. Yerleştirme
Alakalı olanın exec_start wait_for_keymaster
üzerinde
Ayarlanan mount_all
çağrısı, Keymaster'ın tam olarak çalışmasını sağlar
Böylece, bu kilitlenmeden kaçınmış olursunuz.
Kabul edilebilir depolama alanında yapılandırma
Android 9'dan itibaren, bir meta veri şifreleme biçimi kabul edilebilir depolama alanında her zaman etkin web'de meta veri şifreleme etkin olmasa bile, dahili depolama.
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. Doğru uygulamanın
için doğru değeri ayarladığınızdan emin olun.
device.mk
içinde PRODUCT_SHIPPING_API_LEVEL
. Ö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, yeni birim meta veri şifreleme yöntemi (ve yeni varsayılan FBE politikası sürümü) kargo API'si düzeyinden bağımsız olarak:
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 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. Çekirdek yapılandırması için yukarıdaki ön koşullara bakın.
etkinleştirebilirsiniz. Satır içi şifreleme donanımının
dahili depolama alanı, benimsenebilir depolama alanında kullanılamayabilir ve bu nedenle,
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
gerekebilir.
Varsayılan olarak, dm-default-key
birim meta verisi şifreleme yöntemidir.
, 4.096 bayt kripto sektörlerinde 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
özelliğinin değeri, metadata_encryption
ile aynı söz dizimine sahiptir
fstab seçeneğini kullanabilirsiniz. Örneğin, AES'si olmayan cihazlarda
hızlandırma, Adiantum şifrelemesi
ayarlanarak etkinleştirilebilir.
ro.crypto.volume.metadata.encryption=adiantum
.
Eski yöntem
Android 10 veya önceki sürümlerin yüklü olduğu cihazlarda meta veriler
benimsenebilir depolama alanında şifreleme, dm-crypt
çekirdek modülünü kullanır
dm-default-key
yerine:
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çi firmalar iki ya da daha fazla çakışmayı önlemek için çekirdekte özelleştirmeler yapabilir.
şifreleme yöntemini kullanarak, özellikle de
Android'in aktaracağı allow_encrypt_override
seçenek
dm-crypt
sistem özelliği
ro.crypto.allow_encrypt_override
, true
olarak ayarlandı.
Bu özelleştirmeler, Android ortak çekirdeği tarafından desteklenmez.
Varsayılan olarak, dm-crypt
birim meta veri şifreleme yöntemi
ESSIV ve 512 bayt kripto sektörleriyle AES-128-CBC şifreleme algoritması. Bu
geçersiz kılınabilir. Bunun için aşağıdaki sistem özelliklerinin (ayrıca
FDE için kullanılır):
ro.crypto.fde_algorithm
, meta veri şifrelemesini seçer algoritmasından faydalanırsınız. Seçenekleraes-128-cbc
veadiantum
. Adiantum yalnızca cihazda AES hızlandırma yoktur.ro.crypto.fde_sector_size
, kripto sektörünün boyutunu seçer. 512, 1024, 2048 ve 4096 seçenekleri mevcuttur. Adiantum şifrelemesi için 4096.