Tam Disk Şifreleme

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

Tam disk şifreleme, 4.4'te Android'e tanıtıldı, 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.
  • Trusted Execution Environment'ın (TEE) imzalama özelliğini (TrustZone gibi) kullanarak şifreleme anahtarının donanım destekli depolama alanı 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ırlama ile şifrelenmemiş bir duruma döndürülebilir. İlk önyüklemede ş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 cihaz katmanında çalışan bir çekirdek özelliği olan dm-crypt dayanmaktadır. Bu nedenle şifreleme, Gömülü MultiMediaCard ( eMMC) ve kendilerini çekirdeğe blok aygıtlar olarak sunan benzer flash aygıtlarla çalışır. Doğrudan ham bir NAND flash yongasıyla konuşan YAFFS 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 aracılığıyla 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 yüksek bir sürümü kullanabilir.

Android 5.0 sürümünde dört tür şifreleme durumu vardır:

  • varsayılan
  • TOPLU İĞNE
  • parola
  • Desen

İlk önyüklemede, cihaz rastgele oluşturulmuş 128 bitlik bir ana anahtar oluşturur ve ardından bunu varsayılan bir parola ve depolanan tuzla hash hale getirir. Varsayılan parola şu şekildedir: "default_password" Bununla birlikte, ortaya çıkan karma, ana anahtarı şifrelemek için imzanın karması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 şifre belirlediğinde, yalnızca 128-bit anahtar yeniden şifrelenir ve saklanır. (yani, kullanıcı PIN / parolası / desen değişiklikleri, kullanıcı verilerinin yeniden şifrelenmesine neden OLMAZ.) 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 de, durum bildirme, parola isteme veya önemli bir hata durumunda fabrika ayarlarına sıfırlama isteme gibi görevleri yürütmek için özelliklere bakar. Şifreleme özellikleri çağırmak için vold , sistem komut satırı aracı kullanan vdc 'ler cryptfs : komutlar checkpw , restart , enablecrypto , changepw , cryptocomplete , verifypw , setfield , getfield , mountdefaultencrypted , getpwtype , getpw ve clearpw .

Şifrelemek, şifresini veya ıslak mendil için /data , /data monte edilmemelidir. Bununla birlikte, herhangi bir kullanıcı arayüzünü (UI) göstermek için, çerçevenin başlaması ve çerçevenin /data çalıştırılması gerekir. Bu bilmeceyi çözmek için /data üzerine geçici bir dosya sistemi bağlanmıştır. Bu, Android'in şifreleri istemesine, ilerlemeyi göstermesine veya gerektiğinde veri silme önerisinde bulunmasına 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ı gibi bir sınırlama getirir. Bunu yapmak için, tüm hizmetler üç gruptan birinde olmalıdır: 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ülene ve bağlanana kadar başlamaz.

Bu eylemleri tetiklemek için vold.decrypt özelliği çeşitli dizelere ayarlanır. Hizmetleri init 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 class_start .

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.

  • 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ı şifreleme: Kullanıcı tarafından başlatılan şifreleme (Android K ve önceki sürümler).
  • Şifrelenmiş bir cihazı önyükleyin:
    • Şifreli bir cihazı parola olmadan başlatma: Belirlenmiş parolası olmayan şifreli bir cihazı önyükleme (Android 5.0 ve sonraki sürümleri çalıştıran cihazlar için geçerlidir).
    • Şifreli bir aygıtı bir parolayla başlatma: Belirlenmiş bir parolası olan şifreli bir aygıtı önyükleme.

Bu akışlara ek olarak, cihaz ayrıca /data şifrelemekte 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 şifrelenmez, ancak zorunlu forceencrypt için olması gerekir. Unmount /data .

  2. /data şifrelemeye başlayın

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

  3. Tmpf'leri 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 vold vold, şifreli bir sistemi başlatmak için tmpfs /data vold önceden hazırlar ve vold.decrypt özelliğini vold.decrypt şekilde ayarlar: trigger_restart_min_framework

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

    Aygıtta şifrelenecek neredeyse hiç 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 bkz. Mevcut bir cihazı şifreleme .

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

    vold setleri vold.decrypt için trigger_default_encryption başladığı defaultcrypto hizmeti. (Bu, varsayılan şifrelenmiş bir kullanıcı /data bağlamak için aşağıdaki akışı başlatır.) trigger_default_encryption , /data bir parola ile veya parola olmadan şifrelenip şifrelenmediğini görmek için şifreleme türünü kontrol eder. Android 5.0 cihazları ilk önyüklemede şifrelenmiş olduğundan, herhangi bir şifre ayarlanmamalıdır; bu nedenle şifresini çözer ve /data bağlarız.

  6. Bağla /data

    init daha sonra ro.crypto.tmpfs_options ayarlanan init.rc aldığı parametreleri kullanarak bir tmpfs ro.crypto.tmpfs_options /data bağlar.

  7. Çerçeveyi başlat

    vold , olağan önyükleme sürecini devam vold trigger_restart_framework ayarlayın.

Mevcut bir cihazı şifreleyin

Bu, şifrelenmemiş bir Android K veya L'ye taşınan önceki bir cihazı şifrelediğinizde olan şeydir.

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, pilin tamamen dolu olduğundan ve AC adaptörünün takılı olduğundan, böylece şifreleme işlemini bitirmek için yeterli güç olduğundan emin olur.

Uyarı: Aygıtı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.

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

Cihaz durumu : ro.crypto.state = "unencrypted" ayarlayın ve önyüklemeye devam etmek on nonencrypted init tetikleyicisini çalıştırın.

  1. Şifreyi kontrol et

    UI çağırır vold komutu ile cryptfs enablecrypto inplace passwd kullanıcının kilit ekranı şifredir.

  2. Çerçeveyi kaldırın

    vold hataları kontrol eder, şifreleyemiyorsa -1 değerini döndürür ve günlükte bir neden yazdırır. Şifreleyebiliyorsa, vold.decrypt özelliğini trigger_shutdown_framework ayarlar. Bu nedenler init.rc sınıflarında hizmet durdurmak late_start ve main .

  3. Bir kripto altbilgisi oluşturun
  4. Bir içerik haritası dosyası oluşturun
  5. Yeniden başlat
  6. Hesapta görüntülenen yeri gösteren yeri gösteren dosyayı algıla
  7. /data şifrelemeye başlayın

    vold daha sonra, gerçek blok cihazıyla eşleştiren 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 tmpf'leri bağlayın

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

  9. İlerlemeyi göstermek için çerçeve getirin

    trigger_restart_min_framework init.rc main 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 vold.encrypt_progress . Ş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 /data güncelleyin

    /data başarıyla şifrelendiğinde, vold meta verilerdeki ENCRYPTION_IN_PROGRESS bayrağını temizler.

    Cihazın kilidi başarıyla açıldığında, şifre daha sonra 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 özelliğini error_reboot_failed ayarlar ve UI, kullanıcıdan yeniden başlatmak için bir düğmeye vold.encrypt_progress isteyen bir mesaj görüntülemelidir. Bunun olması beklenmiyor.

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

Şifreli bir cihazı parola olmadan başlattığınızda olan şey budur. Android 5.0 cihazları ilk önyüklemede şifrelendiğinden, ayarlanmış bir şifre olmamalıdır ve bu nedenle bu, varsayılan şifreleme durumudur.

  1. Şifrelenmiş /data şifre olmadan tespit edin

    /data forceencrypt ve encryptable veya forceencrypt bayraklarından biri ayarlandığı için Android cihazının şifreli olduğunu tespit edin.

    vold setleri vold.decrypt için trigger_default_encryption başlar defaultcrypto hizmeti. trigger_default_encryption eğer kontrol şifreleme türünü görmek /data veya bir şifre olmadan şifrelenir.

  2. Şifre çözme / veri

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

  3. Bağla / 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 vold.post_fs_data_done ayarlar ve ardından vold.decrypt trigger_post_fs_data 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 bu özellikte vold gördüğünde, vold.decrypt özelliğini vold.decrypt şekilde ayarlar: trigger_restart_framework. Bu nedenler init.rc sınıf içinde hizmetlerini başlatmak için main tekrar ve aynı zamanda sınıftaki hizmetlerini başlatmak late_start çizme beri ilk defa.

  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 şifrelenmiş bir cihazı başlatma

Ayarlanmış bir parolası olan şifreli bir aygıtı başlattığınızda olan budur. Cihazın şifresi bir pin, desen veya şifre olabilir.

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

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

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

  2. Tmpf'leri bağlayın

    init , /data için verilen ilk bağlama seçeneklerini init.rc geçirilen parametrelerle 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ı ve önünde 0x)
  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 şifrelenmiş olduğundan emin olması gerekir. Bu komut gönderir cryptfs cryptocomplete için vold . vold , şifreleme başarıyla tamamlandıysa 0, iç hatada -1 veya şifreleme başarıyla tamamlanmadıysa -2 vold döndürür. vold , CRYPTO_ENCRYPTION_IN_PROGRESS bayrağı için kripto meta verilerine bakarak vold belirler. Ayarlanmışsa, şifreleme işlemi kesintiye uğramıştır ve cihazda kullanılabilir veri yoktur. vold bir hata vold , kullanıcı arabirimi, cihazı yeniden başlatması ve fabrika ayarlarına sıfırlaması için kullanıcıya bir mesaj görüntülemeli ve kullanıcıya bunu yapmak için basması için bir düğme vermelidir.

  4. Verilerin şifresini şifre ile çözme

    cryptfs cryptocomplete başarılı olduğunda, çerçeve disk parolasını soran bir UI görüntüler. UI kontrolleri komut göndererek şifre cryptfs checkpw için vold . Parola doğruysa (bu, şifresi çözülen /data geçici bir konuma başarıyla vold ardından vold ), vold , şifresi çözülen blok aygıtının adını ro.crypto.fs_crypto_blkdev özelliğine ro.crypto.fs_crypto_blkdev ve 0 durumunu kullanıcı arayüzüne döndürür. . Şifre yanlışsa, kullanıcı arayüzüne -1 değerini döndürür.

  5. Çerçeveyi durdur

    Daha sonra UI bir kripto çizme grafik yukarı koyar ve çağrıları vold komutuyla cryptfs restart . vold , vold.decrypt özelliğini trigger_reset_main 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 çıkarılmasına izin verir.

  6. Bağla /data

    vold daha sonra şifresi çözülmüş gerçek /data bölümünü bağlar ve yeni bölümü hazırlar (bu, ilk sürümde desteklenmeyen silme seçeneğiyle şifrelenmişse asla hazırlanamayabilir). vold.post_fs_data_done özelliğini vold.post_fs_data_done ayarlar ve ardından vold.decrypt trigger_post_fs_data 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.post_fs_data_done , bu özellikteki vold gördüğünde, vold.decrypt özelliğini trigger_restart_framework ayarlar. Bu nedenler init.rc sınıf içinde hizmetlerini başlatmak için main tekrar ve aynı zamanda sınıftaki hizmetlerini başlatmak late_start çizme beri ilk defa.

  7. Tam çerçeveyi başlat

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

Başarısızlık

Şifresini çözemeyen bir cihaz birkaç nedenden dolayı yanlış olabilir. Cihaz, normal bir önyükleme adımlarıyla başlar:

  1. Şifrelenmiş cihazı bir şifre ile tespit edin
  2. Tmpf'leri 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 şifresini çözemiyor
  • Kullanıcı 30 kez yanlış şifre giriyor

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

Eğer vold Şifreleme işlemi sırasında bir hata tespit eder ve hiçbir veri henüz tahrip edilmiş ve çerçeve yukarı ise, vold özelliği ayarlar vold.encrypt_progress için error_not_encrypted . Kullanıcı arabirimi, kullanıcıyı yeniden başlatmasını ister ve şifreleme işleminin hiç başlamadığı konusunda onları uyarır. Hata, çerçeve vold sonra, ancak ilerleme çubuğu vold yukarı vold gelirse, vold sistemi yeniden vold . Yeniden başlatma başarısız olursa, vold.encrypt_progress olarak error_shutting_down ve -1 döndürür; ancak hatayı yakalayacak hiçbir şey olmayacak. Bunun olması beklenmiyor.

vold , şifreleme işlemi sırasında bir hata tespit ederse, vold.encrypt_progress olarak error_partially_encrypted ve -1 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.

Şifreli anahtarı saklama

Şifrelenmiş anahtar, kripto meta verilerinde saklanır. Donanım desteği, Trusted Execution Environment'ın (TEE) imzalama özelliği kullanılarak gerçekleştirilir. Daha önce, ana anahtarı, kullanıcının parolasına ve depolanan tuza scrypt uygulayarak oluşturulan bir anahtarla şifreliyorduk. Anahtarı kullanıma hazır olmayan saldırılara karşı dirençli hale getirmek için, elde edilen anahtarı depolanan bir TEE anahtarı ile imzalayarak bu algoritmayı genişletiyoruz. Ortaya çıkan imza daha sonra bir daha 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. Rasgele 16 baytlık disk şifreleme anahtarı (DEK) ve 16 bayt tuz oluşturun.
  2. 32 baytlık ara anahtar 1 (IK1) üretmek için kullanıcı parolasına ve tuzu şifreleyin.
  3. IK1'i donanıma bağlı özel anahtar (HBK) boyutuna kadar sıfır bayt ile doldurun. Ö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 IK1'i HBK ile doldurun.
  5. 32 baytlık IK3 üretmek için IK2'ye şifreleme ve tuz (2. adımdaki tuzun aynısı) uygulayın.
  6. IK3'ün ilk 16 baytını KEK olarak ve son 16 baytı IV olarak kullanın.
  7. DEK'yi AES_CBC, KEK anahtarı ve başlatma vektörü IV ile şifreleyin.

Şifreyi değiştirme

Bir kullanıcı değişikliğine Seçti veya ayarlar şifrelerini kaldırdığınızda, UI komut gönderir cryptfs changepw için vold ve vold yeni şifre ile Disk ana anahtarı yeniden şifreler.

Şifreleme özellikleri

vold ve init özellikleri ayarlayarak birbirleriyle iletişim vold . İşte şifreleme için mevcut özelliklerin bir listesi.

Vold özellikleri

Emlak 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. Eğer öyleyse, şifresini vold.decrypt ve vold.decrypt , aksi takdirde vold.decrypt trigger_restart_min_framework olarak ayarlayın.
vold.decrypt trigger_reset_main Disk parolasını isteyen kullanıcı arabirimini kapatmak için vold tarafından ayarlanır.
vold.decrypt trigger_post_fs_data Vold ile gerekli dizinleri hazırlamak için /data ayarlayın, vd.
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 için vold tarafından ayarlayın.
vold.decrypt trigger_restart_min_framework Ro.crypto.state değerine bağlı olarak, şifreleme için ilerleme çubuğu UI'sini başlatmak veya parola istemek için ro.crypto.state ile ro.crypto.state .
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 UI, 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 sunmalıdır.
vold.encrypt_progress error_reboot_failed İlerleme çubuğu kullanıcı arabirimi, şifrelemenin tamamlandığını belirten bir mesaj görüntülemeli ve kullanıcıya cihazı yeniden başlatması için bir düğme sağlamalıdır. Bu hatanın olması 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ı arabirimi çalışmıyor, bu nedenle bu hataya kimin yanıt vereceği belli değil. Ve bu asla olmamalı.
vold.post_fs_data_done 0 vold vold.decrypt trigger_post_fs_data ayarlamadan hemen önce vold ayarlayın.
vold.post_fs_data_done 1 post-fs-data görevi bitirdikten hemen sonra init.rc veya init.rc tarafından init.rc .

init özellikleri

Emlak Açıklama
ro.crypto.fs_crypto_blkdev Daha sonra kullanmak için vold komutu checkpw tarafından restart komutu checkpw tarafından vold .
ro.crypto.state unencrypted Tarafından belirlenen init bu sistem, şifrelenmemiş ile çalışan söylemek /data ro.crypto.state encrypted . Bu sistemin şifrelenmiş bir /data ile çalıştığını söylemek için init tarafından init .

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.rc iletilen parametrelerle /data bağlanmaya çalıştığında init tarafından ayarlanır. vold , kripto eşlemesini vold için bunları kullanır.
ro.crypto.tmpfs_options init.rc tarafından, tmpfs /data dosya sistemini monte ederken init'in kullanması gereken seçeneklerle ayarlayın.

Başlatma eylemleri

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