Tam Disk Şifreleme

Tam disk şifreleme, şifreli bir anahtar kullanarak bir Android cihazdaki tüm kullanıcı verilerini kodlama işlemidir. Bir cihaz şifrelendikten sonra, kullanıcı tarafından oluşturulan tüm veriler, diske kaydedilmeden önce otomatik olarak şifrelenir ve tüm okumalar, arama işlemine geri dönmeden önce verilerin şifresini otomatik olarak çözer.

Tam disk şifreleme, 4.4'te Android'e sunuldu, ancak Android 5.0 şu yeni özellikleri tanıttı:

  • İlk önyüklemenin uzun sürmesini önlemek için yalnızca veri bölümünde 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.
  • Parola olmadan desenler ve şifreleme için destek eklendi.
  • Güvenilir Yürütme Ortamı'nın (TEE) imzalama yeteneği (örneğin bir TrustZone'da) kullanılarak şifreleme anahtarının donanım destekli depolaması eklendi. Daha fazla ayrıntı için Şifreli anahtarı saklama bölümüne bakın.

Dikkat: Android 5.0'a yükseltilen ve ardından şifrelenen cihazlar, fabrika verilerine sıfırlanarak şifrelenmemiş bir duruma döndürülebilir. İlk açılışta şifrelenen yeni Android 5.0 cihazları şifrelenmemiş duruma döndürülemez.

Android tam disk şifreleme nasıl çalışır?

Android tam disk şifrelemesi, blok cihaz katmanında çalışan bir çekirdek özelliği olan dm-crypt dayanır. Bu nedenle şifreleme, Gömülü MultiMediaCard ( eMMC) ve kendilerini çekirdeğe blok cihazları olarak sunan benzeri flash cihazlarla çalışır. Doğrudan ham bir NAND flash yongasıyla konuşan YAFS ile şifreleme mümkün değildir.

Şifreleme algoritması, şifreleme 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 yoluyla 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
  • Desen

İlk önyüklemede, aygıt rastgele oluşturulmuş bir 128 bitlik ana anahtar oluşturur ve ardından bunu varsayılan bir parola ve depolanmış tuzla hash eder. Varsayılan parola: "default_password" Ancak, elde edilen karma, ana anahtarı şifrelemek için imzanın bir karma değerini kullanan bir TEE (örneğin TrustZone) aracılığıyla da imzalanır.

Android Açık Kaynak Projesi cryptfs.cpp dosyasında tanımlanan varsayılan parolayı bulabilirsiniz.

Kullanıcı cihazda PIN/parola veya parola belirlediğinde, yalnızca 128 bitlik anahtar yeniden şifrelenir ve saklanır. (örn. kullanıcı PIN/parola/kalıp 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 öğesini çağırır ve vold , init içindeki olayları tetikleyecek özellikleri ayarlar. Sistemin diğer bölümleri ayrıca, durumu rapor etme, parola sorma veya önemli bir hata durumunda fabrika ayarlarına sıfırlama istemi gibi görevleri gerçekleştirmek 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 .

Şifrelemek, şifresini çözmek veya silmek için /data , /data takılı olmamalıdır. Ancak, herhangi bir kullanıcı arabirimini (UI) göstermek için çerçevenin başlaması gerekir ve çerçevenin çalışması için /data gerekir. Bu bilmeceyi çözmek için, /data üzerine geçici bir dosya sistemi monte edilmiştir. Bu, Android'in parola istemesine, ilerleme durumunu göstermesine veya gerektiğinde bir veri temizleme önermesine olanak tanır. Geçici dosya sisteminden gerçek /data dosya sistemine geçmek için, sistemin geçici dosya sisteminde açık dosyalara sahip 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 üç gruptan birinde olmalıdır: core , main ve late_start .

  • core : Başlattıktan sonra asla kapatmayın.
  • main : Kapatın ve disk parolası girildikten sonra yeniden başlatın.
  • late_start : /data şifresi çözülüp monte edilene kadar başlamaz.

Bu eylemleri tetiklemek için vold.decrypt özelliği çeşitli dizelere ayarlanır. Hizmetleri öldürmek 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 aygıt yalnızca bir kez şifrelenir ve ardından normal bir önyükleme akışını takip eder.

  • Daha önce şifrelenmemiş bir cihazı şifreleyin:
    • forceencrypt ile yeni bir cihazı ş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 önceki sürümler).
  • Şifreli bir cihazı önyükleyin:
    • Şifresiz bir cihazı şifresiz başlatma: Belirlenmiş şifresi olmayan şifreli bir cihazı başlatma (Android 5.0 ve sonraki sürümleri çalıştıran cihazlar için geçerlidir).
    • Şifreli bir cihazı bir şifre ile başlatma: Belirlenmiş bir şifreye sahip şifreli bir cihazı başlatma.

Bu akışlara ek olarak, cihaz /data şifrelemede de başarısız olabilir. Akışların her biri aşağıda ayrıntılı olarak açıklanmıştır.

Forceencrypt ile yeni bir cihazı şifreleyin

Bu, bir Android 5.0 cihazı için normal ilk önyüklemedir.

  1. forceencrypt bayrağıyla şifrelenmemiş dosya sistemini tespit edin

    /data şifreli değildir, ancak zorunlu forceencrypt gerektirdiği için olması gerekir. /data bağlantısını kesin.

  2. /data şifrelemeye başla

    vold.decrypt = "trigger_encryption" , init.rc tetikler, bu da vold /data data'yı parola olmadan şifrelemesine neden olur. (Bunun yeni bir cihaz olması gerektiği için hiçbiri ayarlanmamıştır.)

  3. tmpfs'yi bağla

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

  4. İlerlemeyi göstermek için çerçeveyi getirin

    Cihazda neredeyse şifrelenecek veri bulunmadığından, şifreleme çok hızlı gerçekleştiği için ilerleme çubuğu genellikle görünmez. İlerleme kullanıcı arayüzü hakkında daha fazla ayrıntı için Mevcut bir cihazı şifreleme konusuna bakın.

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

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

    init daha sonra ro.crypto.tmpfs_options içinde ayarlanan init.rc öğesinden aldığı parametreleri kullanarak /data data'yı bir tmpfs RAMDisk'e bağlar.

  7. Çerçeveyi başlat

    vold öğesini, normal önyükleme işlemini sürdüren trigger_restart_framework olarak ayarlayın.

Mevcut bir cihazı şifreleyin

L'ye taşınan ş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 anılır. Bir kullanıcı bir cihazı şifrelemeyi seçtiğinde, kullanıcı arayüzü pilin tamamen şarj olduğundan ve AC adaptörünün prize takılı olduğundan, böylece şifreleme işlemini tamamlamak için yeterli gücün bulunduğundan emin olur.

Uyarı: Aygıtın gücü biterse ve şifrelemeyi tamamlamadan 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 aygıtının her bir sektörünü okumak için bir döngü başlatır ve ardından bunu kripto blok aygıtına yazar. vold , okuma ve yazmadan önce bir sektörün kullanımda olup olmadığını kontrol eder, bu da çok az verisi olan veya hiç veri içermeyen yeni bir cihazda şifrelemeyi çok daha hızlı hale getirir.

Aygıt durumu : 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 kaldır

    vold hataları kontrol eder, şifreleyemezse -1 döndürür ve günlüğe 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. Breadcrumb dosyasını algıla
  7. /data şifrelemeye başla

    vold daha sonra, gerçek blok cihazla eşleşen ancak her sektörü yazıldığı gibi şifreleyen ve okunduğu gibi her sektörün şifresini çözen sanal bir kripto blok cihazı oluşturan kripto eşlemesini kurar. vold daha sonra kripto meta verilerini oluşturur ve yazar.

  8. Şifrelenirken, tmpfs'yi bağlayın

    vold bir tmpfs /data bağlar ( ro.crypto.tmpfs_options tmpfs seçeneklerini kullanarak) ve vold.encrypt_progress özelliğini 0'a ayarlar. vold , tmpfs /data data'yı şifreli bir sistemi başlatmak için hazırlar ve vold.decrypt özelliğini şuna 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 öğesinin 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 UI'sini 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 alt bilgisini güncelleyin

    /data başarıyla şifrelendiğinde, vold meta verilerdeki ENCRYPTION_IN_PROGRESS işaretini 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ğini error_reboot_failed olarak ayarlar ve UI, kullanıcıdan yeniden başlatmak için bir düğmeye basmasını isteyen bir mesaj göstermelidir. Bunun gerçekleşmesi hiç beklenmiyor.

Varsayılan şifreleme ile şifrelenmiş bir cihazı başlatma

Parola olmadan şifrelenmiş bir cihazı başlattığınızda olan budur. Android 5.0 cihazları ilk açılışta şifrelendiğinden, belirlenmiş bir şifre olmamalıdır ve bu nedenle bu varsayılan şifreleme durumudur.

  1. Şifresiz /data algıla

    /data bağlanamadığından ve encryptable veya forceencrypt şifrelenebilir işaretlerinden biri ayarlandığından Android cihazının şifreli olduğunu tespit edin.

    vold , vold.decrypt öğesini, varsayılan defaultcrypto hizmetini başlatan trigger_default_encryption olarak ayarlar. trigger_default_encryption , /data data'nın parolayla mı yoksa parolasız 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 üzerinde dm-crypt cihazını oluşturur.

  3. /veri bağla

    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 dizinleri veya bağlantıları oluşturacaklar ve ardından vold.post_fs_data_done 1 olarak ayarlayacaklar.

    vold , o özellikte 1'i gördüğünde, vold.decrypt özelliğini şu şekilde ayarlar: trigger_restart_framework. Bu, init.rc main sınıfındaki hizmetleri yeniden başlatmasına ve ayrıca önyüklemeden bu yana ilk kez late_start ​​sınıfındaki hizmetleri başlatmasına neden olur.

  4. Çerçeveyi başlat

    Artık çerçeve, şifresi çözülmüş /data kullanarak tüm hizmetlerini başlatır ve sistem kullanıma hazırdır.

Varsayılan şifreleme olmadan şifreli bir cihazı başlatma

Belirlenmiş bir parolaya sahip şifreli bir cihazı başlattığınızda olan budur. Cihazın şifresi bir pin, desen veya şifre olabilir.

  1. Şifreli cihazı bir şifre ile tespit edin

    ro.crypto.state = "encrypted" işareti nedeniyle Android cihazının şifreli olduğunu tespit edin

    vold , /data bir parola ile şifrelendiğinden, vold.decrypt trigger_restart_min_framework olarak ayarlar.

  2. tmpfs'yi bağla

    init , init.rc geçirilen parametrelerle /data için verilen ilk bağlama seçeneklerini kaydetmek için beş özellik ayarlar. vold , kripto eşlemesini ayarlamak için bu ö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 (0x ile başlayan ASCII 8 basamaklı onaltılık sayı)
  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 önce, diskin düzgün bir şekilde şifrelendiğinden emin olması gerekir. cryptfs cryptocomplete komutunu vold öğesine gönderir. vold , şifreleme başarıyla tamamlandıysa 0, dahili hatada -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ğradı ve cihazda kullanılabilir veri yok. vold bir hata döndürürse, kullanıcı arayüzü kullanıcıya cihazı yeniden başlatması ve fabrika ayarlarına sıfırlaması için bir mesaj göstermeli ve kullanıcıya bunu yapması için basması için bir düğme vermelidir.

  4. Verilerin şifresini şifre ile çözün

    cryptfs cryptocomplete başarılı olduğunda, çerçeve disk parolasını soran bir UI görüntüler. Kullanıcı arabirimi, cryptfs vold komutunu cryptfs checkpw göndererek parolayı kontrol eder. Parola doğruysa (şifresi çözülen /data geçici bir konuma başarıyla monte edilmesi ve ardından bağlantısının kaldırılmasıyla belirlenir), vold şifresi çözülen blok aygıtının adını ro.crypto.fs_crypto_blkdev özelliğine kaydeder ve kullanıcı arayüzüne 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ı arayüzü bir kripto önyükleme grafiği koyar ve ardından cryptfs restart vold . vold , vold.decrypt özelliğini 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 tmpfs /data data'nın bağlantısının kesilmesine izin verir.

  6. /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 hiç hazırlanmamış olabilir). 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 dizinleri veya bağlantıları oluşturacaklar ve ardından vold.post_fs_data_done 1'e ayarlayacaklar. vold, o özellikte vold gördüğünde, vold.decrypt özelliğini trigger_restart_framework olarak ayarlar. Bu, init.rc main sınıfındaki hizmetleri yeniden başlatmasına ve ayrıca önyüklemeden bu yana ilk kez late_start ​​sınıfındaki hizmetleri başlatmasına neden olur.

  7. Tam çerçeveyi başlat

    Artık çerçeve, şifresi çözülen /data dosya sistemini kullanarak tüm hizmetlerini başlatır 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 adımlar dizisiyle başlar:

  1. Şifreli cihazı bir şifre ile tespit edin
  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şiyor ancak verilerin şifresini çözemiyor
  • Kullanıcı 30 kez yanlış şifre giriyor

Bu hatalar çözülmezse, kullanıcıdan fabrikada silme işlemini yapmasını 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.encrypt_progress , vold özelliğini error_not_encrypted olarak ayarlar. UI, kullanıcıdan yeniden başlatmasını ister ve şifreleme işleminin hiç başlamadığı konusunda onları uyarır. Hata, çerçeve parçalandıktan sonra, ancak ilerleme çubuğu kullanıcı arayüzü açılmadan önce ortaya çıkarsa, vold sistemi yeniden başlatır. Yeniden başlatma başarısız olursa, vold.encrypt_progress olarak ayarlar ve -1 error_shutting_down döndürür; ancak hatayı yakalayacak hiçbir şey olmayacak. Bunun olması beklenmiyor.

vold , şifreleme işlemi sırasında bir hata algılarsa, vold.encrypt_progress olarak ayarlar ve -1 error_partially_encrypted döndürür. Kullanıcı arayüzü daha sonra şifrelemenin başarısız olduğunu söyleyen bir mesaj göstermeli ve kullanıcının cihazı fabrika ayarlarına sıfırlaması için bir düğme sağlamalıdır.

Şifreli 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 depolanan tuza scrypt uygulayarak oluşturulan bir anahtarla şifreledik. Anahtarı kutu dışı saldırılara karşı dayanıklı kılmak için, elde edilen anahtarı depolanmış bir TEE anahtarıyla imzalayarak bu algoritmayı genişletiriz. Elde edilen imza daha sonra bir scrypt uygulaması ile 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) oluşturmak için kullanıcı parolasına ve tuza scrypt uygulayın.
  3. Donanıma bağlı özel anahtarın (HBK) boyutuna sıfır bayt içeren 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 bayt IK2 üretmek için yastıklı IK1'i HBK ile imzalayın.
  5. 32 bayt IK3 üretmek için IK2'ye scrypt ve tuz (2. adımla aynı tuz) uygulayın.
  6. IK3'ün ilk 16 baytını KEK ve son 16 baytını IV olarak kullanın.
  7. DEK'i AES_CBC, KEK anahtarı 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ı arayüzü cryptfs changepw komutunu cryptfs changepw gönderir ve vold disk ana anahtarını yeni vold yeniden şifreler.

Şifreleme özellikleri

vold ve init , özellikleri ayarlayarak birbirleriyle iletişim kurar. Şifreleme için kullanılabilen özelliklerin listesi burada.

vold ö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. Eğer öyleyse, şifresini çözün ve monte edin, aksi takdirde vold.decrypt trigger_restart_min_framework olarak ayarlayın.
vold.decrypt trigger_reset_main Disk parolasını soran kullanıcı arabirimini kapatmak için vold ile ayarlayın.
vold.decrypt trigger_post_fs_data vold ile gerekli dizinler ile prep /data için ayarlayın, et al.
vold.decrypt trigger_restart_framework Gerçek çerçeveyi ve tüm hizmetleri başlatmak için vold ile ayarlayın.
vold.decrypt trigger_shutdown_framework Şifrelemeyi başlatmak için tüm çerçeveyi kapatmak için vold ile ayarlayın.
vold.decrypt trigger_restart_min_framework ro.crypto.state değerine bağlı olarak, şifreleme için ilerleme çubuğu kullanıcı arabirimini başlatmak veya parola istemek için 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ı arayüzü, şifrelemenin başarısız olduğunu belirten bir mesaj göstermeli ve kullanıcıya cihazı fabrika ayarlarına sıfırlama seçeneği sunmalıdır.
vold.encrypt_progress error_reboot_failed İlerleme çubuğu kullanıcı arayüzü, şifrelemenin tamamlandığını söyleyen bir mesaj görüntülemeli ve kullanıcıya cihazı yeniden başlatması için bir düğme vermelidir. Bu hatanın olması beklenmiyor.
vold.encrypt_progress error_not_encrypted İlerleme çubuğu kullanıcı arayüzü 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 yine de asla olmamalı.
vold.post_fs_data_done 0 vold.decrypt ile, vold öğesini trigger_post_fs_data olarak ayarlamadan hemen önce ayarlayın.
vold.post_fs_data_done 1 post-fs-data görevini tamamladıktan hemen sonra init.rc veya init.rc tarafından ayarlanır.

init özellikleri

Mülk Tanım
ro.crypto.fs_crypto_blkdev vold komutu restart tarafından daha sonra kullanılmak üzere vold komutu checkpw tarafından ayarlanır.
ro.crypto.state unencrypted Bu sistemin şifrelenmemiş /data ro.crypto.state encrypted olarak çalıştığını söylemek için init tarafından ayarlayın. Bu sistemin bir şifreli /data ile çalıştığını söylemek için init tarafından ayarlayın.

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 /data init.rc geçirilen parametrelerle bağlamaya çalıştığında ayarlanır. vold , kripto eşlemesini ayarlamak için bunları kullanır.
ro.crypto.tmpfs_options init.rc tarafından, init'in tmpfs /data dosya sistemini kurarken 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