Tam disk şifreleme, bir Android cihazdaki tüm kullanıcı verilerini şifrelenmiş bir anahtar kullanarak kodlama işlemidir. Bir cihaz şifrelendikten sonra, kullanıcı tarafından oluşturulan tüm veriler diske aktarılmadan önce otomatik olarak şifrelenir ve tüm okumalar, arama işlemine geri dönmeden önce otomatik olarak verilerin şifresini çözer.
Tam disk şifreleme, Android'e 4.4'te sunuldu, ancak Android 5.0 şu yeni özellikleri getirdi:
- İlk önyüklemenin uzun sürmesini önlemek için yalnızca veri bölümündeki kullanılan blokları şifreleyen hızlı şifreleme oluşturuldu. Şu anda yalnızca ext4 ve f2fs dosya sistemleri hızlı şifrelemeyi desteklemektedir.
- İlk açılışta şifrelemek için
forceencrypt
fstab bayrağı eklendi. - Kalıplar ve şifresiz şifreleme için destek eklendi.
- Trusted Execution Environment'ın (TEE) imzalama yeteneği (TrustZone'da olduğu gibi) kullanılarak şifreleme anahtarının donanım destekli depolaması eklendi. Daha fazla ayrıntı için bkz . Şifrelenmiş anahtarı saklama .
Dikkat: Android 5.0'a yükseltilen ve daha sonra şifrelenen cihazlar, fabrika verilerine sıfırlama ile şifrelenmemiş bir duruma döndürülebilir. İlk açılışta şifrelenen yeni Android 5.0 cihazları şifrelenmemiş bir duruma döndürülemez.
Android tam disk şifrelemesi nasıl çalışır?
Android tam disk şifrelemesi, blok cihaz katmanında çalışan bir çekirdek özelliği olan dm-crypt
dayalıdır. Bu nedenle şifreleme, Embedded MultiMediaCard ( eMMC) ve kendilerini çekirdeğe blok aygıtları olarak sunan benzer flash aygıtlarla çalışır. Doğrudan bir ham NAND flash yongasıyla konuşan YAFFS ile şifreleme mümkün değildir.
Şifreleme algoritması, şifre bloğu zincirleme (CBC) ve ESSIV:SHA256 ile 128 Gelişmiş Şifreleme Standardı'dır (AES). Ana anahtar, OpenSSL kitaplığına yapılan çağrılar aracılığıyla 128 bit AES ile şifrelenir. Anahtar için 128 bit veya daha fazlasını kullanmalısınız (256 isteğe bağlıdır).
Not: OEM'ler, ana anahtarı şifrelemek için 128 bit veya üzerini kullanabilir.
Android 5.0 sürümünde dört tür şifreleme durumu vardır:
- varsayılan
- TOPLU İĞNE
- şifre
- model
İlk açılışta, cihaz rasgele oluşturulmuş 128 bitlik bir ana anahtar oluşturur ve ardından bunu varsayılan bir parola ve depolanan salt ile hashler. Varsayılan parola şöyledir: "default_password" Ancak, ortaya çıkan karma aynı zamanda, ana anahtarı şifrelemek için imzanın bir sağlamasını kullanan bir TEE (TrustZone gibi) aracılığıyla da imzalanır.
Android Açık Kaynak Projesi cryptfs.cpp dosyasında tanımlanan varsayılan şifreyi bulabilirsiniz.
Kullanıcı, cihazda PIN/şifre veya parola belirlediğinde, yalnızca 128 bitlik anahtar yeniden şifrelenir ve saklanır. (örn. kullanıcı PIN'i/parolası/desen değişiklikleri, kullanıcı verilerinin yeniden şifrelenmesine NEDEN OLMAZ.) Yönetilen cihazın PIN, model veya parola kısıtlamalarına tabi olabileceğini unutmayın.
Şifreleme init
ve vold
tarafından yönetilir. init
, vold
çağırır ve vold, init'te olayları tetiklemek için özellikleri ayarlar. Sistemin diğer bölümleri, durumu bildirme, parola isteme veya önemli bir hata durumunda fabrika ayarlarına sıfırlama istemi gibi görevleri yürütmek için özelliklere de bakar. vold
şifreleme özelliklerini çağırmak için sistem komut satırı aracı vdc
cryptfs
komutlarını kullanır: checkpw
, restart
, enablecrypto
, changepw
, cryptocomplete
, verifypw
, setfield
, getfield
, mountdefaultencrypted
, getpwtype
, getpw
ve clearpw
.
/data
şifrelemek, şifresini çözmek veya silmek için /data
mount edilmemelidir. Ancak, herhangi bir kullanıcı arabirimini (UI) göstermek için, çerçevenin başlaması ve /data
çalışmasını gerektirmesi gerekir. Bu muammayı çözmek için /data
üzerine geçici bir dosya sistemi bağlanır. Bu, Android'in parola istemesine, ilerlemeyi göstermesine veya gerektiğinde bir veri silme önermesine olanak tanır. Geçici dosya sisteminden gerçek /data
dosya sistemine geçmek için, sistemin geçici dosya sistemindeki açık dosyalarla her işlemi durdurması ve bu işlemleri gerçek /data
dosya sisteminde yeniden başlatması gerektiği sınırlamasını getirir. Bunu yapmak için tüm hizmetler şu üç gruptan birinde olmalıdır: core
, main
ve late_start
.
-
core
: Başladıktan sonra asla kapatmayın. -
main
: Kapatın ve disk şifresi girildikten sonra yeniden başlatın. -
late_start
:/data
şifresi çözülüp bağlanıncaya kadar başlamaz.
Bu eylemleri tetiklemek için vold.decrypt
özelliği çeşitli dizilere ayarlanmıştır. Hizmetleri sonlandırmak ve yeniden başlatmak için init
komutları şunlardır:
-
class_reset
: Bir hizmeti durdurur ancak class_start ile yeniden başlatılmasına izin verir. -
class_start
: Bir hizmeti yeniden başlatır. -
class_stop
: Bir hizmeti durdurur ve birSVC_DISABLED
bayrağı ekler. Durdurulan hizmetlerclass_start
yanıt vermiyor.
Akışlar
Şifreli bir cihaz için dört akış vardır. Bir cihaz yalnızca bir kez şifrelenir ve ardından normal bir önyükleme akışını izler.
- Önceden şifrelenmemiş bir cihazı şifreleyin:
- Yeni bir cihazı
forceencrypt
ile şifreleyin: İlk açılışta zorunlu şifreleme (Android L'den başlayarak). - Mevcut bir cihazı şifreleyin: Kullanıcı tarafından başlatılan şifreleme (Android K ve öncesi).
- Yeni bir cihazı
- Şifreli bir cihazı önyükleyin:
- Şifreli bir cihazı şifresiz başlatma: Ayarlanmış şifresi olmayan şifreli bir cihazı başlatmak (Android 5.0 ve sonraki sürümleri çalıştıran cihazlar için geçerlidir).
- Şifrelenmiş bir cihazı bir şifre ile başlatmak: Ayarlanmış bir şifreye sahip şifreli bir cihazı başlatmak.
Bu akışlara ek olarak, cihaz ayrıca /data
şifrelemede başarısız olabilir. Akışların her biri aşağıda ayrıntılı olarak açıklanmaktadır.
Yeni bir cihazı forceencrypt ile şifreleyin
Bu, bir Android 5.0 aygıtı için normal ilk önyüklemedir.
-
forceencrypt
bayrağıyla şifrelenmemiş dosya sistemini algıla/data
şifrelenmez ama zorunlu kılındığı içinforceencrypt
gerekir./data
bağlantısını kesin. -
/data
şifrelemeye başlavold.decrypt = "trigger_encryption"
init.rc
tetikler, bu davold
/data
şifresiz olarak şifrelemesine neden olur. (Bu yeni bir cihaz olması gerektiği için hiçbiri ayarlanmadı.) - tmpfs'yi bağla
vold
bir tmpfs/data
bağlar (ro.crypto.tmpfs_options
tmpfs seçeneklerini kullanarak) vevold.encrypt_progress
özelliğini 0 olarak ayarlar.vold
, tmpfs/data
şifreli bir sistemi başlatmak için hazırlar vevold.decrypt
özelliğini şu şekilde ayarlar:trigger_restart_min_framework
- İlerlemeyi göstermek için çerçeveyi getirin
Cihazda neredeyse hiç şifrelenecek veri bulunmadığından, şifreleme çok hızlı gerçekleştiği için ilerleme çubuğu genellikle görünmez. İlerleme kullanıcı arabirimi hakkında daha fazla ayrıntı için Mevcut bir cihazı şifreleme bölümüne bakın.
-
/data
şifrelendiğinde, çerçeveyi kaldırınvold
vold.decrypt
defaultcrypto
hizmetini başlatantrigger_default_encryption
olarak ayarlar. (Bu, varsayılan bir şifrelenmiş kullanıcı verisi bağlamak için aşağıdaki akışı başlatır.)trigger_default_encryption
/data
parola ile mi yoksa parola olmadan mı şifrelendiğini görmek için şifreleme türünü kontrol eder. Android 5.0 cihazları ilk açılışta şifrelendiğinden, herhangi bir şifre ayarlanmamalıdır; bu nedenle/data
şifresini çözer ve bağlarız. - Montaj
/data
init
daha sonrainit.rc
ayarlananro.crypto.tmpfs_options
aldığı parametreleri kullanarak/data
bir tmpfs RAMDisk'e bağlar. - Başlangıç çerçevesi
vold
vold.decrypt
normal önyükleme işlemine devam edentrigger_restart_framework
olarak ayarlar.
Mevcut bir cihazı şifreleyin
L'ye geçirilmiş, şifrelenmemiş bir Android K veya daha eski bir cihazı şifrelediğinizde olan budur.
Bu işlem kullanıcı tarafından başlatılır ve kodda "yerinde şifreleme" olarak adlandırılır. Bir kullanıcı bir cihazı şifrelemeyi seçtiğinde, UI, şifreleme işlemini tamamlamak için yeterli güç olması için pilin tamamen şarj edildiğinden ve AC adaptörünün takılı olduğundan emin olur.
Uyarı: Cihazın gücü biterse ve şifrelemeyi bitirmeden kapanırsa, dosya verileri kısmen şifrelenmiş durumda kalır. Cihaz fabrika ayarlarına sıfırlanmalıdır ve tüm veriler kaybolur.
Yerinde şifrelemeyi etkinleştirmek için vold
, gerçek blok cihazının her bir sektörünü okumak ve ardından bunu kripto blok cihazına yazmak için bir döngü başlatır. vold
, okumadan ve yazmadan önce bir sektörün kullanımda olup olmadığını kontrol eder, bu da çok az veri içeren veya hiç veri içermeyen yeni bir cihazda şifrelemeyi çok daha hızlı hale getirir.
State of device : ro.crypto.state = "unencrypted"
olarak ayarlayın ve önyüklemeye devam etmek için on nonencrypted
init
tetikleyicisini çalıştırın.
- şifreyi kontrol et
Kullanıcı arabirimi,
passwd
kullanıcının kilit ekranı parolası olduğu yerdecryptfs enablecrypto inplace
komutuylavold
çağırır. - Çerçeveyi indir
vold
hataları kontrol eder, şifreleyemezse -1 döndürür ve günlükte bir neden yazdırır. Şifreleyebiliyorsa,vold.decrypt
özelliğinitrigger_shutdown_framework
olarak ayarlar. Bu,init.rc
late_start
vemain
sınıflarındaki hizmetleri durdurmasına neden olur. - Bir kripto altbilgisi oluşturun
- Bir kırıntı dosyası oluşturun
- yeniden başlat
- Kırıntı dosyasını algıla
-
/data
şifrelemeye başlavold
daha sonra, gerçek blok cihazıyla eşleşen ancak her sektörü yazıldığı gibi şifreleyen ve her sektörün okunduğu gibi şifresini çözen sanal bir kripto blok cihazı oluşturan kripto eşlemesini kurar.vold
daha sonra kripto meta verilerini oluşturur ve yazar. - Şifreleme yaparken, mount tmpfs
vold
bir tmpfs/data
bağlar (ro.crypto.tmpfs_options
tmpfs seçeneklerini kullanarak) vevold.encrypt_progress
özelliğini 0 olarak ayarlar.vold
, tmpfs/data
şifreli bir sistemi başlatmak için hazırlar vevold.decrypt
özelliğini şu şekilde ayarlar:trigger_restart_min_framework
- İlerlemeyi göstermek için çerçeveyi getirin
trigger_restart_min_framework
init.rc
main
hizmet sınıfını başlatmasına neden olur. Çerçeve,vold.encrypt_progress
0 olarak ayarlandığını gördüğünde, bu özelliği her beş saniyede bir sorgulayan ve bir ilerleme çubuğunu güncelleyen ilerleme çubuğu kullanıcı arabirimini getirir. Şifreleme döngüsü, bölümün başka bir yüzdesini her şifrelediğindevold.encrypt_progress
günceller. -
/data
şifrelendiğinde, kripto altbilgisini güncelleyin/data
başarılı bir şekilde şifrelendiğinde,vold
meta verilerdekiENCRYPTION_IN_PROGRESS
bayrağını temizler.Cihazın kilidi başarıyla açıldığında, ana anahtarı şifrelemek için parola kullanılır ve kripto altbilgisi güncellenir.
Yeniden başlatma herhangi bir nedenle başarısız olursa
vold
,vold.encrypt_progress
özelliğinierror_reboot_failed
olarak ayarlar ve UI, kullanıcıdan yeniden başlatmak için bir düğmeye basmasını isteyen bir mesaj görüntüler. Bunun gerçekleşmesi hiç beklenmiyor.
Varsayılan şifreleme ile şifrelenmiş bir cihazı başlatma
Şifreli bir cihazı parola olmadan başlattığınızda olan budur. Android 5.0 cihazları ilk açılışta şifrelendiğinden, ayarlanmış bir parola olmamalıdır ve bu nedenle varsayılan şifreleme durumu budur.
- Şifreli
/data
algıla/data
bağlanamadığı veencryptable
veyaforceencrypt
işaretlerinden biri ayarlandığı için Android aygıtının şifrelenmiş olduğunu saptayın.vold
vold.decrypt
defaultcrypto
hizmetini başlatantrigger_default_encryption
olarak ayarlar.trigger_default_encryption
,/data
parola ile mi yoksa parola olmadan mı şifrelendiğini görmek için şifreleme türünü kontrol eder. - /verinin şifresini çöz
Cihazın kullanıma hazır olması için blok cihaz üzerinden
dm-crypt
cihazını oluşturur. - Montaj / veri
vold
daha sonra şifresi çözülmüş gerçek/data
bölümünü bağlar ve ardından yeni bölümü hazırlar.vold.post_fs_data_done
özelliğini 0 olarak ayarlar ve ardındanvold.decrypt
trigger_post_fs_data
olarak ayarlar. Bu,init.rc
post-fs-data
komutlarını çalıştırmasına neden olur. Gerekli tüm dizinleri veya bağlantıları oluşturacaklar ve ardındanvold.post_fs_data_done
1 olarak ayarlayacaklar.vold
bu özellikte 1'i gördüğünde,vold.decrypt
özelliğini şu şekilde ayarlar:trigger_restart_framework.
Bu,init.rc
servisleri yenidenmain
sınıfında başlatmasına ve ayrıca açılıştan bu yana ilk kezlate_start
sınıfında servisleri başlatmasına neden olur. - Başlangıç çerçevesi
Artık çerçeve, şifresi çözülmüş
/data
kullanarak tüm hizmetlerini önyükler ve sistem kullanıma hazırdır.
Varsayılan şifreleme olmadan şifrelenmiş bir cihazı başlatma
Belirlenmiş bir parolası olan şifreli bir aygıtı başlattığınızda olan budur. Cihazın parolası bir pin, desen veya parola olabilir.
- Bir şifre ile şifrelenmiş cihazı algıla
ro.crypto.state = "encrypted"
bayrağı nedeniyle Android cihazının şifrelenmiş olduğunu tespit edinvold
vold.decrypt
trigger_restart_min_framework
olarak ayarlar çünkü/data
bir parola ile şifrelenir. - tmpfs'yi bağla
init
init.rc
iletilen parametrelerle/data
için verilen ilk bağlama seçeneklerini kaydetmek için beş özellik ayarlar.vold
kripto eşlemesini ayarlamak için şu özellikleri kullanır:-
ro.crypto.fs_type
-
ro.crypto.fs_real_blkdev
-
ro.crypto.fs_mnt_point
-
ro.crypto.fs_options
-
ro.crypto.fs_flags
(ASCII 8 basamaklı onaltılık sayı, önünde 0x vardır)
-
- Parola istemek için çerçeveyi başlatın
Çerçeve başlar ve
vold.decrypt
trigger_restart_min_framework
olarak ayarlandığını görür. Bu, çerçeveye bir tmpfs/data
diskinde önyükleme yaptığını ve kullanıcı parolasını alması gerektiğini söyler.Ancak öncelikle, diskin düzgün bir şekilde şifrelendiğinden emin olması gerekir.
cryptfs cryptocomplete
komutunuvold
gönderir.vold
, şifreleme başarıyla tamamlandıysa 0, dahili hata durumunda -1 veya şifreleme başarıyla tamamlanmadıysa -2 döndürür.vold
bunuCRYPTO_ENCRYPTION_IN_PROGRESS
bayrağı için kripto meta verilerine bakarak belirler. Ayarlanmışsa, şifreleme işlemi kesintiye uğramıştır ve cihazda kullanılabilir veri yoktur.vold
bir hata döndürürse, kullanıcı arabirimi kullanıcıya cihazı yeniden başlatması ve fabrika ayarlarına sıfırlaması için bir mesaj görüntülemeli ve kullanıcıya bunu yapması için basması gereken bir düğme vermelidir. - Şifre ile verilerin şifresini çözün
cryptfs cryptocomplete
başarılı olduğunda, çerçeve, disk parolasını soran bir kullanıcı arabirimi görüntüler. Kullanıcı arabirimi,cryptfs checkpw
komutunuvold
göndererek parolayı kontrol eder. Parola doğruysa (bu, şifresi çözülmüş/data
geçici bir konuma başarıyla bağlayıp ardından bağlantısını kaldırarak belirlenir),vold
, şifresi çözülmüş blok aygıtının adınıro.crypto.fs_crypto_blkdev
özelliğine kaydeder ve kullanıcı arabirimine 0 durumunu döndürür . Parola yanlışsa, kullanıcı arayüzüne -1 döndürür. - Çerçeveyi durdur
Kullanıcı arabirimi bir kripto önyükleme grafiği koyar ve ardından
cryptfs restart
komutuylavold
çağırır.vold
vold.decrypt
özelliğinitrigger_reset_main
olarak ayarlar, bu dainit.rc
class_reset main
yapmasına neden olur. Bu, ana sınıftaki tüm hizmetleri durdurur ve bu da tmpfs/data
bağlantısının kesilmesine olanak tanır. - Montaj
/data
vold
daha sonra şifresi çözülmüş gerçek/data
bölümünü bağlar ve yeni bölümü hazırlar (ilk sürümde desteklenmeyen silme seçeneğiyle şifrelenmişse bu bölüm hiç hazırlanmayabilir).vold.post_fs_data_done
özelliğini 0 olarak ayarlar ve ardındanvold.decrypt
trigger_post_fs_data
olarak ayarlar. Bu,init.rc
post-fs-data
komutlarını çalıştırmasına neden olur. Gerekli tüm dizinleri veya bağlantıları oluşturacaklar ve ardındanvold.post_fs_data_done
1'e ayarlayacaklar.vold
, bu özellikte 1'i gördüğünde,vold.decrypt
özelliğinitrigger_restart_framework
olarak ayarlar. Bu,init.rc
servisleri yenidenmain
sınıfında başlatmasına ve ayrıca açılıştan bu yana ilk kezlate_start
sınıfında servisleri başlatmasına neden olur. - Tam çerçeveyi başlat
Artık çerçeve, şifresi çözülmüş
/data
dosya sistemini kullanarak tüm hizmetlerini önyükler ve sistem kullanıma hazırdır.
Arıza
Şifresini çözemeyen bir cihaz birkaç nedenden dolayı hatalı olabilir. Aygıt, önyükleme için normal bir dizi adımla başlar:
- Bir şifre ile şifrelenmiş cihazı algıla
- tmpfs'yi bağla
- Parola istemek için çerçeveyi başlatın
Ancak çerçeve açıldıktan sonra cihaz bazı hatalarla karşılaşabilir:
- Parola eşleşir ancak verilerin şifresini çözemez
- Kullanıcı 30 kez yanlış şifre giriyor
Bu hatalar çözülmezse, kullanıcıdan fabrikada silme işlemini gerçekleştirmesini isteyin :
vold
şifreleme işlemi sırasında bir hata algılarsa ve henüz hiçbir veri yok edilmemişse ve çerçeve çalışıyorsa, vold
vold.encrypt_progress
özelliğini error_not_encrypted
olarak ayarlar. Kullanıcı arabirimi, kullanıcıdan yeniden başlatmasını ister ve onları şifreleme işleminin hiç başlamadığı konusunda uyarır. Hata, çerçeve parçalandıktan sonra, ancak ilerleme çubuğu kullanıcı arayüzü yukarı çıkmadan önce ortaya çıkarsa, vold
sistemi yeniden başlatır. Yeniden başlatma başarısız olursa vold.encrypt_progress
error_shutting_down
olarak ayarlar ve -1 döndürür; ama hatayı yakalayacak bir şey olmayacak. Bunun olması beklenmiyor.
vold
şifreleme işlemi sırasında bir hata tespit ederse, vold.encrypt_progress
error_partially_encrypted
olarak ayarlar ve -1 döndürür. Kullanıcı arabirimi daha sonra şifrelemenin başarısız olduğunu belirten bir mesaj görüntülemeli ve kullanıcının cihazı fabrika ayarlarına sıfırlaması için bir düğme sağlamalıdır.
Şifrelenmiş anahtarın saklanması
Şifrelenmiş anahtar, kripto meta verilerinde saklanır. Donanım desteği, Güvenilir Yürütme Ortamı'nın (TEE) imzalama yeteneği kullanılarak uygulanır. Önceden, ana anahtarı, kullanıcının parolasına ve saklanan salt'a scrypt uygulayarak oluşturulan bir anahtarla şifreliyorduk. Anahtarı kutu dışı saldırılara karşı dayanıklı hale getirmek için, elde edilen anahtarı depolanmış bir TEE anahtarıyla imzalayarak bu algoritmayı genişletiyoruz. Ortaya çıkan imza daha sonra bir scrypt uygulamasıyla uygun uzunlukta bir anahtara dönüştürülür. Bu anahtar daha sonra ana anahtarı şifrelemek ve şifresini çözmek için kullanılır. Bu anahtarı saklamak için:
- Rastgele 16 baytlık disk şifreleme anahtarı (DEK) ve 16 baytlık tuz oluşturun.
- 32 baytlık ara anahtar 1'i (IK1) üretmek için kullanıcı parolasına scrypt ve salt uygulayın.
- Donanıma bağlı özel anahtarın (HBK) boyutuna sıfır bayt ile Pad IK1. Özellikle, şu şekilde doldururuz: 00 || IK1 || 00..00; bir sıfır bayt, 32 IK1 bayt, 223 sıfır bayt.
- 256 baytlık IK2 üretmek için dolgulu IK1'i HBK ile imzalayın.
- 32 bayt IK3 üretmek için IK2'ye scrypt ve tuz (adım 2 ile aynı tuz) uygulayın.
- IK3'ün ilk 16 baytını KEK olarak ve son 16 baytı IV olarak kullanın.
- DEK'i AES_CBC ile, KEK anahtarıyla ve başlatma vektörü IV ile şifreleyin.
şifreyi değiştirme
Bir kullanıcı ayarlarda parolasını değiştirmeyi veya kaldırmayı seçtiğinde, kullanıcı arabirimi cryptfs changepw
to vold
komutunu gönderir ve vold
, disk ana anahtarını yeni parolayla yeniden şifreler.
Şifreleme özellikleri
vold
ve init
özellikleri ayarlayarak birbirleriyle iletişim kurar. Şifreleme için kullanılabilir özelliklerin bir listesi aşağıdadır.
cilt özellikleri
Mülk | Tanım |
---|---|
vold.decrypt trigger_encryption | Sürücüyü parola olmadan şifreleyin. |
vold.decrypt trigger_default_encryption | Parola olmadan şifrelenip şifrelenmediğini görmek için sürücüyü kontrol edin. Öyleyse, şifresini çözün ve bağlayın, aksi takdirde vold.decrypt öğesini trigger_restart_min_framework olarak ayarlayın. |
vold.decrypt trigger_reset_main | Disk şifresini soran kullanıcı arayüzünü kapatmak için vold ile ayarlayın. |
vold.decrypt trigger_post_fs_data | Vold tarafından gerekli dizinlerle /data hazırlamak için ayarlayın, et al. |
vold.decrypt trigger_restart_framework | Gerçek çerçeveyi ve tüm hizmetleri başlatmak için vol tarafından ayarlayın. |
vold.decrypt trigger_shutdown_framework | Şifrelemeyi başlatmak için tüm çerçeveyi kapatmak üzere vol ile ayarlayın. |
vold.decrypt trigger_restart_min_framework | ro.crypto.state değerine bağlı olarak şifreleme veya parola istemi için ilerleme çubuğu kullanıcı arabirimini başlatmak üzere vold ile ayarlayın. |
vold.encrypt_progress | Çerçeve başladığında, bu özellik ayarlanmışsa, ilerleme çubuğu UI moduna girin. |
vold.encrypt_progress 0 to 100 | İlerleme çubuğu kullanıcı arayüzü ayarlanan yüzde değerini göstermelidir. |
vold.encrypt_progress error_partially_encrypted | İlerleme çubuğu kullanıcı arabirimi, şifrelemenin başarısız olduğunu belirten bir mesaj görüntülemeli ve kullanıcıya cihazı fabrika ayarlarına sıfırlama seçeneği vermelidir. |
vold.encrypt_progress error_reboot_failed | İlerleme çubuğu kullanıcı arayüzü, şifrelemenin tamamlandığını belirten bir mesaj görüntülemeli ve kullanıcıya cihazı yeniden başlatması için bir düğme vermelidir. Bu hatanın gerçekleşmesi beklenmiyor. |
vold.encrypt_progress error_not_encrypted | İlerleme çubuğu kullanıcı arabirimi, bir hata oluştuğunu, hiçbir verinin şifrelenmediğini veya kaybolmadığını belirten bir mesaj görüntülemeli ve kullanıcıya sistemi yeniden başlatması için bir düğme vermelidir. |
vold.encrypt_progress error_shutting_down | İlerleme çubuğu kullanıcı arayüzü çalışmıyor, bu nedenle bu hataya kimin yanıt vereceği belli değil. Ve zaten asla olmamalı. |
vold.post_fs_data_done 0 | vold.decrypt trigger_post_fs_data olarak ayarlamadan hemen önce vold tarafından ayarlayın. |
vold.post_fs_data_done 1 | post-fs-data görevini tamamladıktan hemen sonra init.rc veya init.rc tarafından ayarlayın. |
başlangıç özellikleri
Mülk | Tanım |
---|---|
ro.crypto.fs_crypto_blkdev | vold komutu checkpw ile daha sonra vold komutu restart tarafından kullanılmak üzere ayarlanır. |
ro.crypto.state unencrypted | init tarafından bu sistemin şifrelenmemiş bir /data ro.crypto.state encrypted olarak çalıştığını söyleyecek şekilde ayarlanır. Bu sistemin şifreli bir /data ile çalıştığını söylemek için init tarafından ayarlanır. |
| Bu beş özellik, init tarafından init.rc iletilen parametrelerle /data bağlamaya çalıştığında ayarlanır. vold bunları kripto eşlemesini ayarlamak için kullanır. |
ro.crypto.tmpfs_options | init.rc tarafından init'in tmpfs /data dosya sistemini bağlarken kullanması gereken seçeneklerle ayarlayın. |
eylemleri başlat
on post-fs-data on nonencrypted on property:vold.decrypt=trigger_reset_main on property:vold.decrypt=trigger_post_fs_data on property:vold.decrypt=trigger_restart_min_framework on property:vold.decrypt=trigger_restart_framework on property:vold.decrypt=trigger_shutdown_framework on property:vold.decrypt=trigger_encryption on property:vold.decrypt=trigger_default_encryption,
Tam disk şifreleme, bir Android cihazdaki tüm kullanıcı verilerini şifrelenmiş bir anahtar kullanarak kodlama işlemidir. Bir cihaz şifrelendikten sonra, kullanıcı tarafından oluşturulan tüm veriler diske aktarılmadan önce otomatik olarak şifrelenir ve tüm okumalar, arama işlemine geri dönmeden önce otomatik olarak verilerin şifresini çözer.
Tam disk şifreleme, Android'e 4.4'te sunuldu, ancak Android 5.0 şu yeni özellikleri getirdi:
- İlk önyüklemenin uzun sürmesini önlemek için yalnızca veri bölümündeki kullanılan blokları şifreleyen hızlı şifreleme oluşturuldu. Şu anda yalnızca ext4 ve f2fs dosya sistemleri hızlı şifrelemeyi desteklemektedir.
- İlk açılışta şifrelemek için
forceencrypt
fstab bayrağı eklendi. - Kalıplar ve şifresiz şifreleme için destek eklendi.
- Trusted Execution Environment'ın (TEE) imzalama yeteneği (TrustZone'da olduğu gibi) kullanılarak şifreleme anahtarının donanım destekli depolaması eklendi. Daha fazla ayrıntı için bkz . Şifrelenmiş anahtarı saklama .
Dikkat: Android 5.0'a yükseltilen ve daha sonra şifrelenen cihazlar, fabrika verilerine sıfırlama ile şifrelenmemiş bir duruma döndürülebilir. İlk açılışta şifrelenen yeni Android 5.0 cihazları şifrelenmemiş bir duruma döndürülemez.
Android tam disk şifrelemesi nasıl çalışır?
Android tam disk şifrelemesi, blok cihaz katmanında çalışan bir çekirdek özelliği olan dm-crypt
dayalıdır. Bu nedenle şifreleme, Embedded MultiMediaCard ( eMMC) ve kendilerini çekirdeğe blok aygıtları olarak sunan benzer flash aygıtlarla çalışır. Doğrudan bir ham NAND flash yongasıyla konuşan YAFFS ile şifreleme mümkün değildir.
Şifreleme algoritması, şifre bloğu zincirleme (CBC) ve ESSIV:SHA256 ile 128 Gelişmiş Şifreleme Standardı'dır (AES). Ana anahtar, OpenSSL kitaplığına yapılan çağrılar aracılığıyla 128 bit AES ile şifrelenir. Anahtar için 128 bit veya daha fazlasını kullanmalısınız (256 isteğe bağlıdır).
Not: OEM'ler, ana anahtarı şifrelemek için 128 bit veya üzerini kullanabilir.
Android 5.0 sürümünde dört tür şifreleme durumu vardır:
- varsayılan
- TOPLU İĞNE
- şifre
- model
İlk açılışta, cihaz rasgele oluşturulmuş 128 bitlik bir ana anahtar oluşturur ve ardından bunu varsayılan bir parola ve depolanan salt ile hashler. Varsayılan parola şöyledir: "default_password" Ancak, ortaya çıkan karma aynı zamanda, ana anahtarı şifrelemek için imzanın bir sağlamasını kullanan bir TEE (TrustZone gibi) aracılığıyla da imzalanır.
Android Açık Kaynak Projesi cryptfs.cpp dosyasında tanımlanan varsayılan şifreyi bulabilirsiniz.
Kullanıcı, cihazda PIN/şifre veya parola belirlediğinde, yalnızca 128 bitlik anahtar yeniden şifrelenir ve saklanır. (örn. kullanıcı PIN'i/parolası/desen değişiklikleri, kullanıcı verilerinin yeniden şifrelenmesine NEDEN OLMAZ.) Yönetilen cihazın PIN, model veya parola kısıtlamalarına tabi olabileceğini unutmayın.
Şifreleme init
ve vold
tarafından yönetilir. init
, vold
çağırır ve vold, init'te olayları tetiklemek için özellikleri ayarlar. Sistemin diğer bölümleri, durumu bildirme, parola isteme veya önemli bir hata durumunda fabrika ayarlarına sıfırlama istemi gibi görevleri yürütmek için özelliklere de bakar. vold
şifreleme özelliklerini çağırmak için sistem komut satırı aracı vdc
cryptfs
komutlarını kullanır: checkpw
, restart
, enablecrypto
, changepw
, cryptocomplete
, verifypw
, setfield
, getfield
, mountdefaultencrypted
, getpwtype
, getpw
ve clearpw
.
/data
şifrelemek, şifresini çözmek veya silmek için /data
mount edilmemelidir. Ancak, herhangi bir kullanıcı arabirimini (UI) göstermek için, çerçevenin başlaması ve /data
çalışmasını gerektirmesi gerekir. Bu muammayı çözmek için /data
üzerine geçici bir dosya sistemi bağlanır. Bu, Android'in parola istemesine, ilerlemeyi göstermesine veya gerektiğinde bir veri silme önermesine olanak tanır. Geçici dosya sisteminden gerçek /data
dosya sistemine geçmek için, sistemin geçici dosya sistemindeki açık dosyalarla her işlemi durdurması ve bu işlemleri gerçek /data
dosya sisteminde yeniden başlatması gerektiği sınırlamasını getirir. Bunu yapmak için tüm hizmetler şu üç gruptan birinde olmalıdır: core
, main
ve late_start
.
-
core
: Başladıktan sonra asla kapatmayın. -
main
: Kapatın ve disk şifresi girildikten sonra yeniden başlatın. -
late_start
:/data
şifresi çözülüp bağlanıncaya kadar başlamaz.
Bu eylemleri tetiklemek için vold.decrypt
özelliği çeşitli dizilere ayarlanmıştır. Hizmetleri sonlandırmak ve yeniden başlatmak için init
komutları şunlardır:
-
class_reset
: Bir hizmeti durdurur ancak class_start ile yeniden başlatılmasına izin verir. -
class_start
: Bir hizmeti yeniden başlatır. -
class_stop
: Bir hizmeti durdurur ve birSVC_DISABLED
bayrağı ekler. Durdurulan hizmetlerclass_start
yanıt vermiyor.
Akışlar
Şifreli bir cihaz için dört akış vardır. Bir cihaz yalnızca bir kez şifrelenir ve ardından normal bir önyükleme akışını izler.
- Önceden şifrelenmemiş bir cihazı şifreleyin:
- Yeni bir cihazı
forceencrypt
ile şifreleyin: İlk açılışta zorunlu şifreleme (Android L'den başlayarak). - Mevcut bir cihazı şifreleyin: Kullanıcı tarafından başlatılan şifreleme (Android K ve öncesi).
- Yeni bir cihazı
- Şifreli bir cihazı önyükleyin:
- Şifreli bir cihazı şifresiz başlatma: Ayarlanmış şifresi olmayan şifreli bir cihazı başlatmak (Android 5.0 ve sonraki sürümleri çalıştıran cihazlar için geçerlidir).
- Şifrelenmiş bir cihazı bir şifre ile başlatmak: Ayarlanmış bir şifreye sahip şifreli bir cihazı başlatmak.
Bu akışlara ek olarak, cihaz ayrıca /data
şifrelemede başarısız olabilir. Akışların her biri aşağıda ayrıntılı olarak açıklanmaktadır.
Yeni bir cihazı forceencrypt ile şifreleyin
Bu, bir Android 5.0 aygıtı için normal ilk önyüklemedir.
-
forceencrypt
bayrağıyla şifrelenmemiş dosya sistemini algıla/data
şifrelenmez ama zorunlu kılındığı içinforceencrypt
gerekir./data
bağlantısını kesin. -
/data
şifrelemeye başlavold.decrypt = "trigger_encryption"
init.rc
tetikler, bu davold
/data
şifresiz olarak şifrelemesine neden olur. (Bu yeni bir cihaz olması gerektiği için hiçbiri ayarlanmadı.) - tmpfs'yi bağla
vold
bir tmpfs/data
bağlar (ro.crypto.tmpfs_options
tmpfs seçeneklerini kullanarak) vevold.encrypt_progress
özelliğini 0 olarak ayarlar.vold
, tmpfs/data
şifreli bir sistemi başlatmak için hazırlar vevold.decrypt
özelliğini şu şekilde ayarlar:trigger_restart_min_framework
- İlerlemeyi göstermek için çerçeveyi getirin
Cihazda neredeyse hiç şifrelenecek veri bulunmadığından, şifreleme çok hızlı gerçekleştiği için ilerleme çubuğu genellikle görünmez. İlerleme kullanıcı arabirimi hakkında daha fazla ayrıntı için Mevcut bir cihazı şifreleme bölümüne bakın.
-
/data
şifrelendiğinde, çerçeveyi kaldırınvold
vold.decrypt
defaultcrypto
hizmetini başlatantrigger_default_encryption
olarak ayarlar. (Bu, varsayılan bir şifrelenmiş kullanıcı verisi bağlamak için aşağıdaki akışı başlatır.)trigger_default_encryption
/data
parola ile mi yoksa parola olmadan mı şifrelendiğini görmek için şifreleme türünü kontrol eder. Android 5.0 cihazları ilk açılışta şifrelendiğinden, herhangi bir şifre ayarlanmamalıdır; bu nedenle/data
şifresini çözer ve bağlarız. - Montaj
/data
init
daha sonrainit.rc
ayarlananro.crypto.tmpfs_options
aldığı parametreleri kullanarak/data
bir tmpfs RAMDisk'e bağlar. - Başlangıç çerçevesi
vold
vold.decrypt
normal önyükleme işlemine devam edentrigger_restart_framework
olarak ayarlar.
Mevcut bir cihazı şifreleyin
L'ye geçirilmiş, şifrelenmemiş bir Android K veya daha eski bir cihazı şifrelediğinizde olan budur.
Bu işlem kullanıcı tarafından başlatılır ve kodda "yerinde şifreleme" olarak adlandırılır. Bir kullanıcı bir cihazı şifrelemeyi seçtiğinde, UI, şifreleme işlemini tamamlamak için yeterli güç olması için pilin tamamen şarj edildiğinden ve AC adaptörünün takılı olduğundan emin olur.
Uyarı: Cihazın gücü biterse ve şifrelemeyi bitirmeden kapanırsa, dosya verileri kısmen şifrelenmiş durumda kalır. Cihaz fabrika ayarlarına sıfırlanmalıdır ve tüm veriler kaybolur.
Yerinde şifrelemeyi etkinleştirmek için vold
, gerçek blok cihazının her bir sektörünü okumak ve ardından bunu kripto blok cihazına yazmak için bir döngü başlatır. vold
, okumadan ve yazmadan önce bir sektörün kullanımda olup olmadığını kontrol eder, bu da çok az veri içeren veya hiç veri içermeyen yeni bir cihazda şifrelemeyi çok daha hızlı hale getirir.
State of device : ro.crypto.state = "unencrypted"
olarak ayarlayın ve önyüklemeye devam etmek için on nonencrypted
init
tetikleyicisini çalıştırın.
- şifreyi kontrol et
Kullanıcı arabirimi,
passwd
kullanıcının kilit ekranı parolası olduğu yerdecryptfs enablecrypto inplace
komutuylavold
çağırır. - Çerçeveyi indir
vold
hataları kontrol eder, şifreleyemezse -1 döndürür ve günlükte bir neden yazdırır. Şifreleyebiliyorsa,vold.decrypt
özelliğinitrigger_shutdown_framework
olarak ayarlar. Bu,init.rc
late_start
vemain
sınıflarındaki hizmetleri durdurmasına neden olur. - Bir kripto altbilgisi oluşturun
- Bir kırıntı dosyası oluşturun
- yeniden başlat
- Kırıntı dosyasını algıla
-
/data
şifrelemeye başlavold
daha sonra, gerçek blok cihazıyla eşleşen ancak her sektörü yazıldığı gibi şifreleyen ve her sektörün okunduğu gibi şifresini çözen sanal bir kripto blok cihazı oluşturan kripto eşlemesini kurar.vold
daha sonra kripto meta verilerini oluşturur ve yazar. - Şifreleme yaparken, mount tmpfs
vold
bir tmpfs/data
bağlar (ro.crypto.tmpfs_options
tmpfs seçeneklerini kullanarak) vevold.encrypt_progress
özelliğini 0 olarak ayarlar.vold
, tmpfs/data
şifreli bir sistemi başlatmak için hazırlar vevold.decrypt
özelliğini şu şekilde ayarlar:trigger_restart_min_framework
- İlerlemeyi göstermek için çerçeveyi getirin
trigger_restart_min_framework
init.rc
main
hizmet sınıfını başlatmasına neden olur. Çerçeve,vold.encrypt_progress
0 olarak ayarlandığını gördüğünde, bu özelliği her beş saniyede bir sorgulayan ve bir ilerleme çubuğunu güncelleyen ilerleme çubuğu kullanıcı arabirimini getirir. Şifreleme döngüsü, bölümün başka bir yüzdesini her şifrelediğindevold.encrypt_progress
günceller. -
/data
şifrelendiğinde, kripto altbilgisini güncelleyin/data
başarılı bir şekilde şifrelendiğinde,vold
meta verilerdekiENCRYPTION_IN_PROGRESS
bayrağını temizler.Cihazın kilidi başarıyla açıldığında, ana anahtarı şifrelemek için parola kullanılır ve kripto altbilgisi güncellenir.
Yeniden başlatma herhangi bir nedenle başarısız olursa
vold
,vold.encrypt_progress
özelliğinierror_reboot_failed
olarak ayarlar ve UI, kullanıcıdan yeniden başlatmak için bir düğmeye basmasını isteyen bir mesaj görüntüler. Bunun gerçekleşmesi hiç beklenmiyor.
Varsayılan şifreleme ile şifrelenmiş bir cihazı başlatma
Şifreli bir cihazı parola olmadan başlattığınızda olan budur. Android 5.0 cihazları ilk açılışta şifrelendiğinden, ayarlanmış bir parola olmamalıdır ve bu nedenle varsayılan şifreleme durumu budur.
- Şifreli
/data
algıla/data
bağlanamadığı veencryptable
veyaforceencrypt
işaretlerinden biri ayarlandığı için Android aygıtının şifrelenmiş olduğunu saptayın.vold
vold.decrypt
defaultcrypto
hizmetini başlatantrigger_default_encryption
olarak ayarlar.trigger_default_encryption
,/data
parola ile mi yoksa parola olmadan mı şifrelendiğini görmek için şifreleme türünü kontrol eder. - /verinin şifresini çöz
Cihazın kullanıma hazır olması için blok cihaz üzerinden
dm-crypt
cihazını oluşturur. - Montaj / veri
vold
daha sonra şifresi çözülmüş gerçek/data
bölümünü bağlar ve ardından yeni bölümü hazırlar.vold.post_fs_data_done
özelliğini 0 olarak ayarlar ve ardındanvold.decrypt
trigger_post_fs_data
olarak ayarlar. Bu,init.rc
post-fs-data
komutlarını çalıştırmasına neden olur. Gerekli tüm dizinleri veya bağlantıları oluşturacaklar ve ardındanvold.post_fs_data_done
1 olarak ayarlayacaklar.vold
bu özellikte 1'i gördüğündevold.decrypt
özelliğini şu şekilde ayarlar:trigger_restart_framework.
Bu,init.rc
servisleri yenidenmain
sınıfında başlatmasına ve ayrıca açılıştan bu yana ilk kezlate_start
sınıfında servisleri başlatmasına neden olur. - Başlangıç çerçevesi
Artık çerçeve, şifresi çözülmüş
/data
kullanarak tüm hizmetlerini önyükler ve sistem kullanıma hazırdır.
Starting an encrypted device without default encryption
This is what happens when you boot up an encrypted device that has a set password. The device's password can be a pin, pattern, or password.
- Detect encrypted device with a password
Detect that the Android device is encrypted because the flag
ro.crypto.state = "encrypted"
vold
setsvold.decrypt
totrigger_restart_min_framework
because/data
is encrypted with a password. - Mount tmpfs
init
sets five properties to save the initial mount options given for/data
with parameters passed frominit.rc
.vold
uses these properties to set up the crypto mapping:-
ro.crypto.fs_type
-
ro.crypto.fs_real_blkdev
-
ro.crypto.fs_mnt_point
-
ro.crypto.fs_options
-
ro.crypto.fs_flags
(ASCII 8-digit hex number preceded by 0x)
-
- Start framework to prompt for password
The framework starts up and sees that
vold.decrypt
is set totrigger_restart_min_framework
. This tells the framework that it is booting on a tmpfs/data
disk and it needs to get the user password.First, however, it needs to make sure that the disk was properly encrypted. It sends the command
cryptfs cryptocomplete
tovold
.vold
returns 0 if encryption was completed successfully, -1 on internal error, or -2 if encryption was not completed successfully.vold
determines this by looking in the crypto metadata for theCRYPTO_ENCRYPTION_IN_PROGRESS
flag. If it's set, the encryption process was interrupted, and there is no usable data on the device. Ifvold
returns an error, the UI should display a message to the user to reboot and factory reset the device, and give the user a button to press to do so. - Decrypt data with password
Once
cryptfs cryptocomplete
is successful, the framework displays a UI asking for the disk password. The UI checks the password by sending the commandcryptfs checkpw
tovold
. If the password is correct (which is determined by successfully mounting the decrypted/data
at a temporary location, then unmounting it),vold
saves the name of the decrypted block device in the propertyro.crypto.fs_crypto_blkdev
and returns status 0 to the UI. If the password is incorrect, it returns -1 to the UI. - Stop framework
The UI puts up a crypto boot graphic and then calls
vold
with the commandcryptfs restart
.vold
sets the propertyvold.decrypt
totrigger_reset_main
, which causesinit.rc
to doclass_reset main
. This stops all services in the main class, which allows the tmpfs/data
to be unmounted. - Mount
/data
vold
then mounts the decrypted real/data
partition and prepares the new partition (which may never have been prepared if it was encrypted with the wipe option, which is not supported on first release). It sets the propertyvold.post_fs_data_done
to 0 and then setsvold.decrypt
totrigger_post_fs_data
. This causesinit.rc
to run itspost-fs-data
commands. They will create any necessary directories or links and then setvold.post_fs_data_done
to 1. Oncevold
sees the 1 in that property, it sets the propertyvold.decrypt
totrigger_restart_framework
. This causesinit.rc
to start services in classmain
again and also start services in classlate_start
for the first time since boot. - Start full framework
Now the framework boots all its services using the decrypted
/data
filesystem, and the system is ready for use.
Failure
A device that fails to decrypt might be awry for a few reasons. The device starts with the normal series of steps to boot:
- Detect encrypted device with a password
- Mount tmpfs
- Start framework to prompt for password
But after the framework opens, the device can encounter some errors:
- Password matches but cannot decrypt data
- User enters wrong password 30 times
If these errors are not resolved, prompt user to factory wipe :
If vold
detects an error during the encryption process, and if no data has been destroyed yet and the framework is up, vold
sets the property vold.encrypt_progress
to error_not_encrypted
. The UI prompts the user to reboot and alerts them the encryption process never started. If the error occurs after the framework has been torn down, but before the progress bar UI is up, vold
will reboot the system. If the reboot fails, it sets vold.encrypt_progress
to error_shutting_down
and returns -1; but there will not be anything to catch the error. This is not expected to happen.
If vold
detects an error during the encryption process, it sets vold.encrypt_progress
to error_partially_encrypted
and returns -1. The UI should then display a message saying the encryption failed and provide a button for the user to factory reset the device.
Storing the encrypted key
The encrypted key is stored in the crypto metadata. Hardware backing is implemented by using Trusted Execution Environment's (TEE) signing capability. Previously, we encrypted the master key with a key generated by applying scrypt to the user's password and the stored salt. In order to make the key resilient against off-box attacks, we extend this algorithm by signing the resultant key with a stored TEE key. The resultant signature is then turned into an appropriate length key by one more application of scrypt. This key is then used to encrypt and decrypt the master key. To store this key:
- Generate random 16-byte disk encryption key (DEK) and 16-byte salt.
- Apply scrypt to the user password and the salt to produce 32-byte intermediate key 1 (IK1).
- Pad IK1 with zero bytes to the size of the hardware-bound private key (HBK). Specifically, we pad as: 00 || IK1 || 00..00; one zero byte, 32 IK1 bytes, 223 zero bytes.
- Sign padded IK1 with HBK to produce 256-byte IK2.
- Apply scrypt to IK2 and salt (same salt as step 2) to produce 32-byte IK3.
- Use the first 16 bytes of IK3 as KEK and the last 16 bytes as IV.
- Encrypt DEK with AES_CBC, with key KEK, and initialization vector IV.
Changing the password
When a user elects to change or remove their password in settings, the UI sends the command cryptfs changepw
to vold
, and vold
re-encrypts the disk master key with the new password.
Encryption properties
vold
and init
communicate with each other by setting properties. Here is a list of available properties for encryption.
Vold properties
Property | Tanım |
---|---|
vold.decrypt trigger_encryption | Encrypt the drive with no password. |
vold.decrypt trigger_default_encryption | Check the drive to see if it is encrypted with no password. If it is, decrypt and mount it, else set vold.decrypt to trigger_restart_min_framework. |
vold.decrypt trigger_reset_main | Set by vold to shutdown the UI asking for the disk password. |
vold.decrypt trigger_post_fs_data | Set by vold to prep /data with necessary directories, et al. |
vold.decrypt trigger_restart_framework | Set by vold to start the real framework and all services. |
vold.decrypt trigger_shutdown_framework | Set by vold to shutdown the full framework to start encryption. |
vold.decrypt trigger_restart_min_framework | Set by vold to start the progress bar UI for encryption or prompt for password, depending on the value of ro.crypto.state . |
vold.encrypt_progress | When the framework starts up, if this property is set, enter the progress bar UI mode. |
vold.encrypt_progress 0 to 100 | The progress bar UI should display the percentage value set. |
vold.encrypt_progress error_partially_encrypted | The progress bar UI should display a message that the encryption failed, and give the user an option to factory reset the device. |
vold.encrypt_progress error_reboot_failed | The progress bar UI should display a message saying encryption completed, and give the user a button to reboot the device. This error is not expected to happen. |
vold.encrypt_progress error_not_encrypted | The progress bar UI should display a message saying an error occurred, no data was encrypted or lost, and give the user a button to reboot the system. |
vold.encrypt_progress error_shutting_down | The progress bar UI is not running, so it is unclear who will respond to this error. And it should never happen anyway. |
vold.post_fs_data_done 0 | Set by vold just before setting vold.decrypt to trigger_post_fs_data . |
vold.post_fs_data_done 1 | Set by init.rc or init.rc just after finishing the task post-fs-data . |
init properties
Property | Tanım |
---|---|
ro.crypto.fs_crypto_blkdev | Set by the vold command checkpw for later use by the vold command restart . |
ro.crypto.state unencrypted | Set by init to say this system is running with an unencrypted /data ro.crypto.state encrypted . Set by init to say this system is running with an encrypted /data . |
| These five properties are set by init when it tries to mount /data with parameters passed in from init.rc . vold uses these to setup the crypto mapping. |
ro.crypto.tmpfs_options | Set by init.rc with the options init should use when mounting the tmpfs /data filesystem. |
Init actions
on post-fs-data on nonencrypted on property:vold.decrypt=trigger_reset_main on property:vold.decrypt=trigger_post_fs_data on property:vold.decrypt=trigger_restart_min_framework on property:vold.decrypt=trigger_restart_framework on property:vold.decrypt=trigger_shutdown_framework on property:vold.decrypt=trigger_encryption on property:vold.decrypt=trigger_default_encryption