Tam Disk Şifreleme

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
  • parola
  • 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 tuzla 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'u ç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'yı şifrelemek, şifresini çözmek veya silmek için /data /data 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 data'nın ş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 bir SVC_DISABLED bayrağı ekler. Durdurulan hizmetler class_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).
  • Ş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.

  1. forceencrypt bayrağıyla şifrelenmemiş dosya sistemini algıla

    /data şifrelenmez ama zorunlu forceencrypt için şifrelenmesi gerekir. /data bağlantısını kesin.

  2. /data şifrelemeye başla

    vold.decrypt = "trigger_encryption" init.rc tetikler, bu da vold /data şifresiz olarak şifrelemesine neden olur. (Bu yeni bir cihaz olması gerektiği için hiçbiri ayarlanmadı.)

  3. tmpfs'yi bağla

    vold bir tmpfs /data bağlar ( ro.crypto.tmpfs_options tmpfs seçeneklerini kullanarak) ve vold.encrypt_progress özelliğini 0 olarak ayarlar. vold , tmpfs /data data'yı şifreli bir sistemi başlatmak için hazırlar ve vold.decrypt özelliğini şu şekilde ayarlar: trigger_restart_min_framework

  4. İ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.

  5. /data şifrelendiğinde, çerçeveyi kaldırın

    vold , vold.decrypt defaultcrypto hizmetini başlatan trigger_default_encryption olarak ayarlar. (Bu, varsayılan bir şifrelenmiş kullanıcı /data bağlamak için aşağıdaki akışı başlatır.) trigger_default_encryption , /data'nın 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.

  6. Montaj /data

    init daha sonra init.rc'de ayarlanan ro.crypto.tmpfs_options aldığı parametreleri kullanarak /data data'yı bir tmpfs RAMDisk'e init.rc .

  7. Başlangıç ​​çerçevesi

    vold , vold.decrypt normal önyükleme işlemine devam eden trigger_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.

  1. şifreyi kontrol et

    Kullanıcı arabirimi, passwd'nin kullanıcının kilit ekranı passwd olduğu yerde cryptfs enablecrypto inplace vold

  2. Ç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ğini trigger_shutdown_framework olarak ayarlar. Bu, late_start init.rc ve main sınıflarındaki hizmetleri durdurmasına neden olur.

  3. Bir kripto altbilgisi oluşturun
  4. Bir kırıntı dosyası oluşturun
  5. yeniden başlat
  6. Kırıntı dosyasını algıla
  7. /data şifrelemeye başla

    vold 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.

  8. Şifreleme yaparken, mount tmpfs

    vold bir tmpfs /data bağlar ( ro.crypto.tmpfs_options tmpfs seçeneklerini kullanarak) ve vold.encrypt_progress özelliğini 0 olarak ayarlar. vold , tmpfs /data data'yı şifreli bir sistemi başlatmak için hazırlar ve vold.decrypt özelliğini şu şekilde ayarlar: trigger_restart_min_framework

  9. İ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ğinde vold.encrypt_progress günceller.

  10. /data şifrelendiğinde, kripto altbilgisini güncelleyin

    /data başarılı bir şekilde şifrelendiğinde, vold meta verilerdeki ENCRYPTION_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 özelliğini error_reboot_failed olarak ayarlar ve UI, kullanıcıdan yeniden başlatmak için bir düğmeye vold.encrypt_progress 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.

  1. Şifreli /data algıla

    /data bağlanamadığı ve encryptable veya forceencrypt işaretlerinden biri ayarlandığı için Android aygıtının şifrelenmiş olduğunu saptayın.

    vold , vold.decrypt defaultcrypto hizmetini başlatan trigger_default_encryption olarak ayarlar. trigger_default_encryption , /data data'nın parola ile mi yoksa parola olmadan mı şifrelendiğini görmek için şifreleme türünü kontrol eder.

  2. /verinin şifresini çöz

    Cihazın kullanıma hazır olması için blok cihaz üzerinden dm-crypt cihazını oluşturur.

  3. 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ından vold.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ından vold.post_fs_data_done 1 olarak ayarlayacaklar.

    Vold bu özellikte 1'i gördüğünde, vold özelliğini vold.decrypt şekilde ayarlar: trigger_restart_framework. Bu, init.rc servisleri yeniden main sınıfında başlatmasına ve ayrıca açılıştan bu yana ilk kez late_start sınıfında servisleri başlatmasına neden olur.

  4. 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.

  1. Bir şifre ile şifrelenmiş cihazı algıla

    ro.crypto.state = "encrypted" bayrağı nedeniyle Android cihazının şifrelenmiş olduğunu tespit edin

    vold , vold.decrypt trigger_restart_min_framework olarak ayarlar çünkü /data bir parola ile şifrelenir.

  2. 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:

    1. ro.crypto.fs_type
    2. ro.crypto.fs_real_blkdev
    3. ro.crypto.fs_mnt_point
    4. ro.crypto.fs_options
    5. ro.crypto.fs_flags (ASCII 8 basamaklı onaltılık sayı, önünde 0x vardır)
  3. Parola istemek için çerçeveyi başlatın

    Çerçeve başlar ve vold.decrypt öğesinin 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 komutunu vold 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 bunu CRYPTO_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.

  4. Ş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 vold komutunu cryptfs checkpw göndererek parolayı kontrol eder. Parola doğruysa (bu, şifresi çözülmüş /data data'yı 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.

  5. Çerçeveyi durdur

    Kullanıcı arabirimi bir kripto önyükleme grafiği koyar ve ardından cryptfs restart vold . vold vold.decrypt trigger_reset_main olarak ayarlar, bu da init.rc class_reset main yapmasına neden olur. Bu, ana sınıftaki tüm hizmetleri durdurur ve bu da tmpfs /data data'nın bağlantısının kesilmesine olanak tanır.

  6. 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ından vold.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ından vold.post_fs_data_done 1'e ayarlayacaklar. Vold, bu özellikte vold gördüğünde, vold.decrypt özelliğini trigger_restart_framework olarak ayarlar. Bu, init.rc servisleri yeniden main sınıfında başlatmasına ve ayrıca açılıştan bu yana ilk kez late_start sınıfında servisleri başlatmasına neden olur.

  7. 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. Cihaz, önyüklemek için normal bir dizi adımla başlar:

  1. Bir şifre ile şifrelenmiş cihazı algıla
  2. tmpfs'yi bağla
  3. 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 error_shutting_down vold.encrypt_progress 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, error_partially_encrypted vold.encrypt_progress 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:

  1. Rastgele 16 baytlık disk şifreleme anahtarı (DEK) ve 16 baytlık tuz oluşturun.
  2. 32 baytlık ara anahtar 1'i (IK1) üretmek için kullanıcı parolasına scrypt ve salt uygulayın.
  3. 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.
  4. 256 baytlık IK2 üretmek için dolgulu IK1'i HBK ile imzalayın.
  5. 32 bayt IK3 üretmek için IK2'ye scrypt ve tuz (adım 2 ile aynı tuz) uygulayın.
  6. IK3'ün ilk 16 baytını KEK olarak ve son 16 baytı IV olarak kullanın.
  7. 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 Açıklama
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 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 ro.crypto.state 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 Açıklama
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.

ro.crypto.fs_type
ro.crypto.fs_real_blkdev
ro.crypto.fs_mnt_point
ro.crypto.fs_options
ro.crypto.fs_flags

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