Tam Disk Şifreleme

Tam disk şifreleme, bir Android cihazdaki tüm kullanıcı verilerinin şifrelenmiş bir anahtar kullanılarak kodlanması işlemidir. Bir cihaz şifrelendiğinde, kullanıcı tarafından oluşturulan tüm veriler diske kaydedilmeden önce otomatik olarak şifrelenir ve tüm okumalar, verileri çağırma işlemine geri göndermeden önce otomatik olarak verilerin şifresini çözer.

Tam disk şifrelemesi Android'e 4.4'te 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ündeki kullanılmış 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 forceencrypt fstab bayrağı eklendi.
  • Parola olmadan kalıplar ve şifreleme için destek eklendi.
  • Güvenilir Yürütme Ortamı'nın (TEE) imzalama özelliğini (TrustZone'da olduğu gibi) kullanarak ş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 işlemiyle şifrelenmemiş duruma döndürülebilir. İlk açılışta şifrelenen yeni Android 5.0 cihazları şifrelenmemiş duruma döndürülemez.

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

Android tam disk şifrelemesi, blok aygıt katmanında çalışan bir çekirdek özelliği olan dm-crypt temel alır. Bu nedenle şifreleme, kendilerini çekirdeğe blok aygıtlar olarak sunan Embedded MultiMediaCard ( eMMC) ve benzeri flash aygıtlarla çalışır. Doğrudan ham NAND flash çipiyle 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 kütüphanesine yapılan çağrılar yoluyla 128 bit AES ile şifrelenir. Anahtar için 128 bit veya daha fazlasını kullanmanız gerekir (256 isteğe bağlıdır).

Not: OEM'ler ana anahtarı şifrelemek için 128 bit veya daha üstünü 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 rastgele oluşturulmuş 128 bitlik bir ana anahtar oluşturur ve ardından bunu varsayılan şifre ve depolanan tuzla karma hale getirir. Varsayılan şifre şu şekildedir: "default_password" Ancak, ortaya çıkan karma aynı zamanda ana anahtarı şifrelemek için imzanın karma değerini kullanan bir TEE (TrustZone gibi) aracılığıyla da imzalanır.

Tanımlanan varsayılan şifreyi Android Açık Kaynak Projesi cryptfs.cpp dosyasında bulabilirsiniz.

Kullanıcı cihazda PIN/şifre veya şifre belirlediğinde yalnızca 128 bitlik anahtar yeniden şifrelenir ve saklanır. (yani kullanıcı PIN'i/şifresi/desen değişiklikleri, kullanıcı verilerinin yeniden şifrelenmesine neden OLMAYACAKTIR.) Yönetilen cihazın PIN, desen 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'teki olayları tetikleyecek özellikleri ayarlar. Sistemin diğer bölümleri ayrıca rapor durumu, 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, vdc komut satırı aracının 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 monte edilmemesi gerekir. Ancak herhangi bir kullanıcı arayüzünü (UI) gösterebilmek için çerçevenin başlaması gerekir ve çerçevenin çalışması için /data gerekir. Bu bilmeceyi çözmek için /data geçici bir dosya sistemi bağlanır. Bu, Android'in gerektiğinde şifre istemesine, ilerleme durumunu göstermesine veya veri silme işlemi önermesine olanak tanır. Geçici dosya sisteminden gerçek /data dosya sistemine geçiş yapmak için sistemin, geçici dosya sistemindeki açık dosyalarla yapılan 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 hizmetlerin üç gruptan birinde olması gerekir: core , main ve late_start .

  • core : Başladıktan sonra asla kapatmayın.
  • main : Kapatın ve disk parolası 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 dizelere 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

Şifrelenmiş bir cihaz için dört akış vardır. Bir aygıt yalnızca bir kez şifrelenir ve ardından normal önyükleme akışını izler.

  • 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 öncesi).
  • Şifrelenmiş bir cihazı önyükleyin:
    • Şifrelenmiş bir cihazı şifresiz başlatmak: Ayarlanmış şifresi olmayan şifreli bir cihazı başlatmak (Android 5.0 ve sonraki sürümleri çalıştıran cihazlar için geçerlidir).
    • Şifreli bir cihazı parolayla başlatmak: Belirlenmiş parolaya sahip şifreli bir aygıtı başlatmak.

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

Forceencrypt ile yeni bir cihazı şifreleyin

Bu, Android 5.0 cihazının normal ilk önyüklemesidir.

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

    /data şifrelenmemiştir ancakforceencrypt bunu zorunlu kıldığı için forceencrypt gerekmektedir. /data bağlantısını kesin.

  2. /data şifrelemeye başla

    vold.decrypt = "trigger_encryption" init.rc dosyasını tetikler, bu da vold /data parola olmadan şifrelemesine neden olur. (Bu yeni bir cihaz olması gerektiğinden hiçbiri ayarlanmadı.)

  3. 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 , şifrelenmiş bir sistemi başlatmak için tmpfs /data 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 şifrelenecek veri bulunmadığından, şifreleme çok hızlı gerçekleştiğinden ilerleme çubuğu çoğu zaman görünmeyecektir. İ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 defaultcrypto hizmetini başlatan trigger_default_encryption ayarlar. (Bu, varsayılan şifrelenmiş kullanıcı verilerinin bağlanması için aşağıdaki akışı başlatır.) trigger_default_encryption , /data şifreyle mi yoksa şifresiz mi ş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 /data init.rc ayarlanan ro.crypto.tmpfs_options aldığı parametreleri kullanarak bir tmpfs RAMDisk'e bağlar.

  7. Çerçeveyi başlat

    vold vold.decrypt trigger_restart_framework olarak ayarlar, bu da olağan önyükleme işlemini sürdürür.

Mevcut bir cihazı şifreleyin

L'ye taşınmış şifrelenmemiş bir Android K veya daha önceki cihazı şifrelediğinizde olan şey budur.

Bu işlem kullanıcı tarafından başlatılır ve kodda "yerinde şifreleme" olarak anılır. Kullanıcı bir cihazı şifrelemeyi seçtiğinde, kullanıcı arayüzü pilin tam olarak şarj edildiğinden ve AC adaptörünün takılı olduğundan, şifreleme işlemini tamamlamak için yeterli gücün mevcut olduğundan emin olur.

Uyarı: Aygıtın gücü biterse ve şifrelemeyi tamamlamadan kapanırsa, dosya verileri kısmen şifrelenmiş durumda kalır. Cihazın fabrika ayarlarına sıfırlanması gerekir ve tüm veriler kaybolur.

Yerinde şifrelemeyi etkinleştirmek için vold , gerçek blok cihazının her sektörünü okumak ve ardından bunu kripto blok cihazına yazmak için bir döngü başlatır. vold , onu okumadan ve yazmadan önce bir sektörün kullanımda olup olmadığını kontrol eder; bu, çok az veriye sahip olan veya hiç verisi olmayan yeni bir cihazda şifrelemeyi çok daha hızlı hale getirir.

Cihazın 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ı arayüzü vold cryptfs enablecrypto inplace komutuyla çağırır; burada passwd kullanıcının kilit ekranı şifresidir.

  2. Çerçeveyi kaldır

    vold hataları kontrol eder, şifreleyemiyorsa -1 değerini döndürür ve günlüğe bir neden yazdırır. Şifreleyebiliyorsa vold.decrypt özelliğini trigger_shutdown_framework olarak ayarlar. Bu init.rc late_start ve main sınıflarındaki hizmetleri durdurmasına neden olur.

  3. Kripto altbilgisi oluşturun
  4. Bir kırıntı dosyası oluşturma
  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şlenen, ancak her sektörü yazıldığı gibi şifreleyen ve okundukça her sektörün şifresini çözen sanal bir kripto blok cihazı oluşturan kripto eşlemeyi kurar. vold daha sonra kripto meta verilerini oluşturur ve yazar.

  8. Şifrelerken 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 , şifrelenmiş bir sistemi başlatmak için tmpfs /data 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'a ayarlandığını gördüğünde, bu özelliği her beş saniyede bir sorgulayan ve ilerleme çubuğunu güncelleyen ilerleme çubuğu kullanıcı arayüzünü 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ıyla şifrelendiğinde vold , meta verilerdeki ENCRYPTION_IN_PROGRESS işaretini temizler.

    Cihazın kilidi başarıyla açıldığında, parola ana anahtarı şifrelemek için 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 kullanıcı arayüzü, kullanıcıdan yeniden başlatmak için bir düğmeye basmasını isteyen bir mesaj görüntülemelidir. Bunun hiçbir zaman gerçekleşmesi beklenmiyor.

Şifrelenmiş bir cihazı varsayılan şifrelemeyle başlatma

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

  1. Şifreli /data şifre olmadan tespit et

    /data bağlanamadığından ve encryptable forceencrypt işaretlerinden biri ayarlandığından Android cihazının şifrelendiğini tespit edin.

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

  2. /verilerin şifresini çöz

    Cihazın kullanıma hazır olması için blok cihaz üzerinde 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'a 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 bu özellikteki 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 tüm hizmetlerini şifresi çözülmüş /data kullanarak başlatıyor ve sistem kullanıma hazır.

Şifrelenmiş bir cihazı varsayılan şifreleme olmadan başlatma

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

  1. Şifreli cihazı şifreyle tespit et

    ro.crypto.state = "encrypted" bayrağı nedeniyle Android cihazının şifrelendiğini tespit edin

    vold vold.decrypt trigger_restart_min_framework olarak ayarlar çünkü /data bir parola ile şifrelenmiştir.

  2. Tmpfs'yi bağlayın

    init /data için verilen ilk bağlama seçeneklerini init.rc iletilen parametrelerle 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 (önünde 0x bulunan ASCII 8 basamaklı onaltılık sayı)
  3. 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 uygun şekilde şifrelendiğinden emin olması gerekir. vold cryptfs cryptocomplete komutunu gönderir. vold , şifreleme başarıyla tamamlandıysa 0, dahili hata durumunda -1 veya şifreleme başarıyla tamamlanmadıysa -2 değerini döndürür. vold bunu CRYPTO_ENCRYPTION_IN_PROGRESS bayrağının 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ı arayüzü 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ı için bir düğme vermelidir.

  4. Verilerin şifresini şifreyle çözme

    cryptfs cryptocomplete başarılı olduğunda, çerçeve disk parolasını soran bir kullanıcı arayüzü görüntüler. Kullanıcı arayüzü, cryptfs checkpw komutunu vold göndererek şifreyi kontrol eder. Şifre doğruysa (şifresi çözülmüş /data geçici bir konuma başarıyla monte edip ardından bağlantısını keserek belirlenir), vold şifresi çözülmüş blok cihazı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 değerini döndürür.

  5. Çerçeveyi durdur

    Kullanıcı arayüzü bir kripto önyükleme grafiği oluşturur ve ardından cryptfs restart komutuyla vold çağırır. vold vold.decrypt özelliğini trigger_reset_main olarak ayarlar, bu da init.rc class_reset main işlevini 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.

  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çbir zaman hazırlanmamış olabilir). vold.post_fs_data_done özelliğini 0'a 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 değerini 1 olarak ayarlayacaklar. vold bu özellikte 1'i 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ü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ükleme için normal bir dizi adımla başlar:

  1. Şifreli cihazı şifreyle tespit et
  2. Tmpfs'yi bağlayın
  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 şifresi çözülemiyor
  • Kullanıcı 30 kez yanlış şifre giriyor

Bu hatalar çözülmezse kullanıcıdan fabrikayı temizlemesini isteyin :

vold şifreleme işlemi sırasında bir hata tespit ederse ve henüz hiçbir veri yok edilmemişse ve çerçeve çalışır durumdaysa, vold , vold.encrypt_progress özelliğini error_not_encrypted olarak ayarlar. Kullanıcı arayüzü kullanıcıdan yeniden başlatmasını ister ve onları şifreleme işleminin hiç başlamadığı konusunda uyarır. Hata, çerçeve yıkıldıktan sonra ancak ilerleme çubuğu kullanıcı arayüzü açılmadan önce meydana gelirse, vold sistemi yeniden başlatacaktır. Yeniden başlatma başarısız olursa vold.encrypt_progress error_shutting_down olarak ayarlar ve -1 değerini döndürür; ancak hatayı yakalayacak hiçbir şey olmayacak. Bunun gerçekleşmesi beklenmiyor.

vold şifreleme işlemi sırasında bir hata tespit ederse vold.encrypt_progress error_partially_encrypted olarak ayarlar ve -1 değerini döndürür. Kullanıcı arayüzü daha sonra şifrelemenin başarısız olduğunu belirten bir mesaj görüntülemeli ve kullanıcıya 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. Daha önce ana anahtarı, kullanıcının şifresine ve saklanan tuza scrypt uygulayarak oluşturulan bir anahtarla şifreliyorduk. Anahtarı kutu dışı saldırılara karşı dayanıklı hale getirmek için, elde edilen anahtarı depolanan bir TEE anahtarıyla imzalayarak bu algoritmayı genişletiyoruz. Ortaya çıkan imza daha sonra bir kez daha şifre 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 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 baytlık IK2 üretmek için dolgulu IK1'i HBK ile imzalayın.
  5. 32 baytlık IK3 üretmek için IK2'ye ve tuza (adım 2 ile aynı tuz) scrypt uygulayın.
  6. IK3'ün ilk 16 baytını KEK, 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 vold gönderir ve vold , disk ana anahtarını yeni parolayla yeniden şifreler.

Şifreleme özellikleri

vold ve init özellikleri ayarlayarak birbirleriyle iletişim kurar. Burada şifreleme için mevcut özelliklerin bir listesi bulunmaktadır.

Vold'un ö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 tetikleyici_restart_min_framework olarak ayarlayın.
vold.decrypt trigger_reset_main Disk parolasını isteyen kullanıcı arayüzünü kapatmak için vold ile ayarlayın.
vold.decrypt trigger_post_fs_data Vold tarafından gerekli dizinlerle hazırlık /data ayarlandı, vb.
vold.decrypt trigger_restart_framework Gerçek çerçeveyi ve tüm hizmetleri başlatmak için vold tarafından ayarlanır.
vold.decrypt trigger_shutdown_framework Şifrelemeyi başlatmak için tüm çerçeveyi kapatmak üzere vold tarafından ayarlanır.
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ı arayüzünü başlatmak üzere vold tarafından ayarlanır.
vold.encrypt_progress Çerçeve başlatıldığında, bu özellik ayarlanmışsa ilerleme çubuğu kullanıcı arayüzü moduna girin.
vold.encrypt_progress 0 to 100 İlerleme çubuğu kullanıcı arayüzünün ayarlanan yüzde değeri görüntülemesi gerekir.
vold.encrypt_progress error_partially_encrypted İlerleme çubuğu kullanıcı arayüzü, ş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 sunmalıdır.
vold.encrypt_progress error_reboot_failed İlerleme çubuğu kullanıcı arayüzünde şifrelemenin tamamlandığını belirten bir mesaj görüntülemeli ve kullanıcıya cihazı yeniden başlatması için bir düğme verilmelidir. Bu hatanın gerçekleşmesi beklenmiyor.
vold.encrypt_progress error_not_encrypted İlerleme çubuğu kullanıcı arayüzünde 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 verilmelidir.
vold.encrypt_progress error_shutting_down İlerleme çubuğu kullanıcı arayüzü çalışmıyor, dolayısıyla bu hataya kimin yanıt vereceği belli değil. Ve ne olursa olsun bu 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 ayarlanır.

başlangıç ​​özellikleri

Mülk Tanım
ro.crypto.fs_crypto_blkdev Daha sonra vold command restart tarafından kullanılmak üzere vold checkpw komutuyla ayarlanır.
ro.crypto.state unencrypted init tarafından bu sistemin şifrelenmemiş /data ro.crypto.state encrypted ile çalıştığını belirtmek için ayarlanır. Bu sistemin şifrelenmiş 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 /data init.rc iletilen parametrelerle 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 birlikte ayarlanır.

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