Tam disk şifreleme

Tüm diskin şifrelenmesi, şifrelenmiş bir anahtar kullanarak 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 okuma işlemleri, verileri çağıran işleme döndürmeden önce verilerin şifresini otomatik olarak çözer.

Tam disk şifrelemesi Android 4.4'te kullanıma sunulmuştur ancak Android 5.0'te aşağıdaki yeni özellikler kullanıma sunulmuştur:

  • İ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. Hızlı şifrelemeyi şu anda yalnızca ext4 ve f2fs dosya sistemleri desteklemektedir.
  • İlk önyüklemede şifreleme yapmak için forceencrypt fstab işareti eklendi.
  • Şifre olmadan desen ve şifreleme desteği eklendi.
  • Güvenilir Yürütme Ortamı'nın (TEE) imzalama özelliği (ör. TrustZone) kullanılarak şifreleme anahtarının donanım destekli depolaması eklendi. Daha fazla bilgi için Şifrelenmiş anahtarı depolama bölümüne bakın.

Dikkat: Android 5.0'e yükseltilen ve ardından şifrelenen cihazlar, fabrika verilerine sıfırlanarak ş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 şifrelemenin işleyiş şekli

Android tam disk şifrelemesi, blok cihaz katmanında çalışan bir çekirdek özelliği olan dm-crypt'e dayanır. Bu nedenle şifreleme, Embedded MultiMediaCard (eMMC) ve kendilerini çekirdeğe blok cihaz olarak gösteren benzer flash cihazlarla çalışır. Doğrudan ham NAND flaş çipiyle iletişim kuran YAFFS ile şifreleme yapılamaz.

Şifreleme algoritması, şifre blok zinciri (CBC) ve ESSIV:SHA256 ile 128 bit 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 bit isteğe bağlıdır).

Not: OEM'ler, ana anahtarı şifrelemek için 128 bit veya daha yüksek bir şifreleme kullanabilir.

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

  • varsayılan
  • PIN
  • şifre
  • desen

Cihaz ilk kez açıldığında rastgele oluşturulan 128 bitlik bir ana anahtar oluşturur ve ardından bu anahtarı varsayılan bir şifreyle ve saklanan tuz ile karma oluşturma işlemine tabi tutar. Varsayılan şifre: "default_password". Bununla birlikte, elde edilen karma oluşturma işlemi de bir TEE (TrustZone gibi) aracılığıyla imzalanır. Bu TEE, ana anahtarı şifrelemek için imzanın karma oluşturma işlemini kullanır.

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

Kullanıcı cihazda PIN/geçiş anahtarı veya şifre ayarlarken yalnızca 128 bitlik anahtar yeniden şifrelenir ve saklanır. (ör. kullanıcı PIN'i/şifresi/deseni değişiklikleri, kullanıcı verilerinin yeniden şifrelenmesine NEDEN OLMAZ.) Yönetilen cihazların PIN, desen veya şifre kısıtlamalarına tabi olabileceğini unutmayın.

Şifreleme, init ve vold tarafından yönetilir. init, vold'yi çağırır ve vold, init'te etkinlikleri tetikleyecek şekilde özellikleri ayarlar. Sistemin diğer bölümleri de durumu bildirme, şifre isteme veya önemli bir hata durumunda fabrika ayarlarına sıfırlama istemi gibi görevleri gerçekleştirmek için özelliklere bakar. Sistem, vold'teki şifreleme özelliklerini çağırmak için 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 edilmemelidir. Ancak herhangi bir kullanıcı arayüzünü (UI) göstermek için çerçevenin başlatılması gerekir ve çerçevenin çalışması için /data'ün çalıştırılması gerekir. Bu sorunu çözmek için /data üzerine geçici bir dosya sistemi monte edilir. Bu sayede Android, parola isteyebilir, ilerleme durumunu gösterebilir veya gerektiğinde veri silme işlemini önerebilir. Geçici dosya sisteminden gerçek /data dosya sistemine geçiş yapmak için sistemin, geçici dosya sisteminde açık dosyaları olan her işlemi durdurması ve bu işlemleri gerçek /data dosya sisteminde yeniden başlatması gerektiği sınırlamasını getirir. Bunun için tüm hizmetlerin core, main ve late_start gruplarından birinde olması gerekir.

  • core: Başladıktan sonra hiçbir zaman kapatmayın.
  • main: Disk şifresi girildikten sonra kapatıp yeniden başlatın.
  • late_start: /data'un şifresi çözülüp monte edilene kadar başlamaz.

Bu işlemleri tetiklemek için vold.decrypt mülkü çeşitli dizelerle ayarlanır. Hizmetleri kapatmak 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 SVC_DISABLED işareti ekler. Durdurulan hizmetler class_start'e yanıt vermez.

Akışlar

Şifrelenmiş bir cihaz için dört akış vardır. Cihaz yalnızca bir kez şifrelenir ve ardından normal bir önyükleme akışı izlenir.

  • Daha önce şifrelenmemiş bir cihazı şifreleme:
    • Yeni bir cihazı forceencrypt ile şifreleme: İlk başlatmada zorunlu şifreleme (Android L'den itibaren).
    • Mevcut bir cihazı şifreleme: Kullanıcı tarafından başlatılan şifreleme (Android K ve önceki sürümler).
  • Şifrelenmiş bir cihazı önyükleme:
    • Şifre olmadan şifrelenmiş bir cihazı başlatma: Şifre ayarlanmamış şifrelenmiş bir cihazı başlatma (Android 5.0 ve sonraki sürümleri çalıştıran cihazlar için geçerlidir).
    • Şifrelenmiş bir cihazı şifreyle başlatma: Ayarlanmış bir şifreye sahip şifrelenmiş bir cihazı başlatma.

Cihaz, bu akışlara ek olarak /data'ü de şifreleyemeyebilir. Akışların her biri aşağıda ayrıntılı olarak açıklanmıştır.

forceencrypt ile yeni bir cihazı şifreleme

Bu, Android 5.0 cihazların normal ilk açılışıdır.

  1. forceencrypt işaretiyle şifrelenmemiş dosya sistemini algılama

    /data şifrelenmiş değil ancak forceencrypt bunu zorunlu kıldığı için şifrelenmesi gerekiyor. /data'ü çıkarın.

  2. /data dosyasını şifrelemeye başlama

    vold.decrypt = "trigger_encryption", init.rc'ü tetikler. Bu da vold'nin /data'ı şifre olmadan şifrelemesine neden olur. (Bu yeni bir cihaz olduğu için "Hiçbiri" ayarlanır.)

  3. tmpfs'yi bağlama

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

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

    Cihazın şifrelenecek neredeyse hiç verisi olmadığından, şifreleme işlemi çok hızlı gerçekleştiği için ilerleme çubuğu sık sık görünmez. İlerleme kullanıcı arayüzü hakkında daha fazla bilgi için Mevcut bir cihazı şifreleme başlıklı makaleyi inceleyin.

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

    vold, vold.decrypt değerini defaultcrypto hizmetini başlatan trigger_default_encryption olarak ayarlar. (Bu işlem, varsayılan olarak şifrelenmiş bir kullanıcı verisi bağlamak için aşağıdaki akışı başlatır.) trigger_default_encryption, /data'un şifrelenmiş olup olmadığını görmek için şifreleme türünü kontrol eder. Android 5.0 cihazlar ilk başlatılırken şifrelenir. Bu nedenle, şifre ayarlanmamış olmalıdır. Bu nedenle, /data dosyasının şifresini çözer ve bağlarız.

  6. /data'i monte edin

    Ardından init, init.rc içinde ayarlanan ro.crypto.tmpfs_options'den aldığı parametreleri kullanarak /data'yi bir tmpfs RAMDisk'e bağlar.

  7. Başlangıç çerçevesi

    vold, vold.decrypt değerini trigger_restart_framework olarak ayarlar. Bu durumda normal önyükleme işlemi devam eder.

Mevcut bir cihazı şifreleme

Bu durum, L sürümüne taşınmış, şifrelenmemiş bir Android K veya önceki sürüm cihazı şifrelendiğinde ortaya çıkar.

Bu işlem kullanıcı tarafından başlatılır ve kodda "yerinde şifreleme" olarak adlandırılır. Kullanıcı bir cihazı şifrelemeyi seçtiğinde kullanıcı arayüzü, şifreleme işleminin tamamlanması için yeterli güç olması amacıyla pilin tamamen şarj edildiğinden ve AC adaptörünün takıldığından emin olur.

Uyarı: Cihazın pili biterse ve şifreleme işlemi tamamlanmadan 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 her bir sektörünü okuyup kripto blok cihazına yazmak üzere bir döngü başlatır. vold, bir sektörü okumadan ve yazmadan önce sektörün kullanılıp kullanılmadığını kontrol eder. Bu sayede, veri miktarı az veya hiç olmayan yeni bir cihazda şifreleme işlemi çok daha hızlı gerçekleşir.

Cihazın durumu: Açılışa devam etmek için ro.crypto.state = "unencrypted" değerini ayarlayın ve on nonencrypted init tetikleyicisini çalıştırın.

  1. Şifreyi kontrol etme

    Kullanıcı arayüzü, passwd kullanıcının kilit ekranı şifresi olmak üzere cryptfs enablecrypto inplace komutuyla vold'ü çağırır.

  2. Çerçeveyi kaldırma

    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 durum, init.rc'ün late_start ve main sınıflarındaki hizmetleri durdurmasına neden olur.

  3. Şifreleme altbilgisi oluşturma
  4. Görsel içerik haritası dosyası oluşturma
  5. Yeniden başlat
  6. İçerik haritası dosyasını algılama
  7. /data dosyasını şifrelemeye başlama

    vold daha sonra kripto eşlemeyi ayarlar. Bu işlem, gerçek blok cihazla eşlenen ancak her sektör yazılırken şifreleyen ve okunurken şifresini çözen sanal bir kripto blok cihazı oluşturur. vold daha sonra şifreleme meta verilerini oluşturur ve yazar.

  8. Şifreleme sırasında tmpfs'yi bağlama

    vold, tmpfs /data'i (ro.crypto.tmpfs_options'deki tmpfs seçeneklerini kullanarak) bağlar ve vold.encrypt_progress mülkünü 0 olarak ayarlar. vold, şifrelenmiş bir sistemi başlatmak için tmpfs'yi /data hazırlar ve vold.decrypt mülkünü şu şekilde ayarlar: trigger_restart_min_framework

  9. İlerlemeyi göstermek için çerçeveyi getirme

    trigger_restart_min_framework , init.rc'un main sınıfı hizmetleri başlatmasına neden olur. Çerçeve, vold.encrypt_progress değerinin 0 olarak ayarlandığını gördüğünde, beş saniyede bir bu mülkü sorgulayan ve ilerleme çubuğunu güncelleyen ilerleme çubuğu kullanıcı arayüzünü gösterir. Şifreleme döngüsü, bölümün başka bir yüzdesini şifreleyip her seferinde vold.encrypt_progress değerini 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 şifre, ana anahtarı şifrelemek için kullanılır ve şifreleme altbilgisi güncellenir.

    Yeniden başlatma işlemi bir nedenle başarısız olursa vold, vold.encrypt_progress mülkünü error_reboot_failed olarak ayarlar ve kullanıcı arayüzünde, kullanıcıdan yeniden başlatmak için bir düğmeye basmasını isteyen bir mesaj gösterilir. Bunun hiç gerçekleşmemesi beklenir.

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

Şifre olmadan şifrelenmiş bir cihazı başlattığınızda bu durumla karşılaşırsınız. Android 5.0 cihazlar ilk açılışta şifrelenir. Bu nedenle, ayarlanmış bir şifre yoktur ve bu durum varsayılan şifreleme durumudur.

  1. Şifre içermeyen şifrelenmiş /data dosyalarını algılama

    /data monte edilemediği ve encryptable veya forceencrypt işaretlerinden biri ayarlandığı için Android cihazın şifrelenmiş olduğunu algılama.

    vold, vold.decrypt değerini trigger_default_encryption olarak ayarlayarak defaultcrypto hizmetini başlatır. trigger_default_encryption, /data değerinin şifrelenmiş olup olmadığını görmek için şifreleme türünü kontrol eder.

  2. /data şifresini çözme

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

  3. /data'yı bağlama

    vold, ş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, ardından vold.decrypt özelliğini trigger_post_fs_data olarak ayarlar. Bu, init.rc'ün post-fs-data komutlarını çalıştırmasına neden olur. Gerekli dizinleri veya bağlantıları oluşturup vold.post_fs_data_done değerini 1 olarak ayarlayın.

    vold, bu mülkte 1'i gördükten sonra vold.decrypt mülkünü şu şekilde ayarlar: trigger_restart_framework. Bu, init.rc'ın main sınıfındaki hizmetleri tekrar başlatmasına ve ayrıca önyüklemeden sonra ilk kez late_start sınıfındaki hizmetleri başlatmasına neden olur.

  4. Başlangıç çerçevesi

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

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

Şifre ayarlanmış şifrelenmiş bir cihazı başlattığınızda bu işlem gerçekleşir. Cihazın şifresi PIN, desen veya şifre olabilir.

  1. Şifrelenmiş cihazı şifreyle algılama

    Android cihazın şifrelenmiş olduğunu algılama (ro.crypto.state = "encrypted" işareti nedeniyle)

    /data şifreyle şifrelendiği için vold, vold.decrypt değerini trigger_restart_min_framework olarak ayarlar.

  2. tmpfs'yi bağlama

    init, init.rc kaynağından iletilen parametrelerle /data için verilen ilk montaj seçeneklerini kaydetmek üzere beş mülk ayarlar. vold, kripto eşlemeyi ayarlamak için aşağıdaki ö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 haneli onaltılık sayı, önünde 0x)
  3. Şifre isteğinde bulunacak çerçeveyi başlatma

    Çerçeve başlar ve vold.decrypt değerinin trigger_restart_min_framework olarak ayarlandığını görür. Bu, çerçeveye bir tmpfs /data diskinde başlatıldığını ve kullanıcı şifresini alması gerektiğini bildirir.

    Ancak önce diskin düzgün bir şekilde şifrelendiğinden emin olmalıdır. cryptfs cryptocomplete komutunu vold'a gönderir. vold, şifreleme başarıyla tamamlandıysa 0, dahili hata oluştuysa -1 veya şifreleme başarıyla tamamlanamadıysa -2 döndürür. vold, CRYPTO_ENCRYPTION_IN_PROGRESS işaretinin kripto meta verilerine bakarak bunu belirler. Bu ayar ayarlanmışsa şifreleme işlemi kesintiye uğramıştır ve cihazda kullanılabilir veri yoktur. vold hata döndürüyorsa kullanıcı arayüzünde, kullanıcıya cihazı yeniden başlatıp fabrika ayarlarına sıfırlaması gerektiğini belirten bir mesaj gösterilmeli ve kullanıcıya bunu yapması için bir düğme sunulmalıdır.

  4. Şifre kullanarak verilerin şifresini çözme

    cryptfs cryptocomplete başarılı olduğunda çerçeve, disk şifresini isteyen bir kullanıcı arayüzü gösterir. Kullanıcı arayüzü, cryptfs checkpw komutunu vold'e göndererek şifreyi kontrol eder. Şifre doğruysa (şifresi çözülmüş /data geçici bir konuma başarıyla bağlanıp ardından bağlantısı kaldırılarak belirlenir) vold, şifresi çözülmüş blok cihazın adını ro.crypto.fs_crypto_blkdev mülküne kaydeder ve kullanıcı arayüzüne 0 durumunu döndürür. Şifre yanlışsa kullanıcı arayüzüne -1 döndürülür.

  5. Çerçeveyi durdurma

    Kullanıcı arayüzü, bir kripto önyükleme grafiği gösterir ve ardından cryptfs restart komutuyla vold'ü çağırır. vold, vold.decrypt özelliğini trigger_reset_main olarak ayarlar. Bu da init.rc'ın class_reset main işlemini yapmasına neden olur. Bu işlem, ana sınıftaki tüm hizmetleri durdurur ve tmpfs /data'nin kaldırılmasına olanak tanır.

  6. /data'i monte edin

    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 özelliğini trigger_post_fs_data olarak ayarlar. Bu, init.rc'ün post-fs-data komutlarını çalıştırmasına neden olur. Gerekli dizinleri veya bağlantıları oluşturup vold.post_fs_data_done değerini 1 olarak ayarlayın. vold, söz konusu mülkte 1 değerini gördüğünde vold.decrypt mülkünü trigger_restart_framework olarak ayarlar. Bu, init.rc'ün main sınıfındaki hizmetleri tekrar başlatmasına ve ayrıca late_start sınıfındaki hizmetleri de önyüklemeden sonra ilk kez başlatmasına neden olur.

  7. Tam çerçeveyi başlatma

    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ız

Şifre çözme işleminin başarısız olduğu cihazlarda birkaç sorun olabilir. Cihaz, normal önyükleme adımlarıyla başlar:

  1. Şifrelenmiş cihazı algılama
  2. tmpfs'yi bağlama
  3. Şifre isteğinde bulunmak için çerçeveyi başlatma

Ancak çerçeve açıldıktan sonra cihaz bazı hatalarla karşılaşabilir:

  • Şifre eşleşiyor ancak verilerin şifresi çözülemiyor
  • Kullanıcı 30 kez yanlış şifre girer

Bu hatalar çözülmezse kullanıcıdan fabrika ayarlarına sıfırlamasını isteyin:

vold, şifreleme işlemi sırasında bir hata algılarsa ve henüz hiçbir veri yok edilmediyse ve çerçeve etkinse vold, vold.encrypt_progress mülkünü error_not_encrypted olarak ayarlar. Kullanıcı arayüzü, kullanıcıdan cihazı yeniden başlatmasını ister ve şifreleme işleminin hiç başlatılmadığını bildirir. Hata, çerçeve kaldırıldıktan sonra ancak ilerleme çubuğu kullanıcı arayüzü açılmadan önce oluşursa vold sistemi yeniden başlatır. Yeniden başlatma başarısız olursa vold.encrypt_progress, error_shutting_down olarak ayarlanır ve -1 döndürülür ancak hatayı yakalayacak bir şey olmaz. Bu durumun yaşanması beklenmez.

vold, şifreleme işlemi sırasında bir hata algılarsa vold.encrypt_progress değerini error_partially_encrypted olarak ayarlar ve -1 döndürür. Ardından kullanıcı arayüzünde, şifrelemenin başarısız olduğunu belirten bir mesaj gösterilir ve kullanıcının cihazı fabrika ayarlarına sıfırlayabileceği bir düğme sunulur.

Şifrelenmiş anahtarı depolama

Şifrelenmiş anahtar, kripto meta verilerinde depolanır. Donanım desteği, Güvenilir Yürütme Ortamı'nın (TEE) imzalama özelliği kullanılarak uygulanır. Daha önce, ana anahtarı kullanıcının şifresine ve depolanan tuz değerine scrypt uygulanarak 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şletiriz. Elde edilen imza daha sonra scrypt'in bir kez daha uygulanmasıyla uygun uzunlukta bir anahtara dönüştürülür. Bu anahtar daha sonra ana anahtarı şifrelemek ve ana anahtarın şifresini çözmek için kullanılır. Bu anahtarı depolamak 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ı şifresine ve tuz değerine scrypt uygulayın.
  3. IK1'i, donanıma bağlı özel anahtar (HBK) boyutuna kadar sıfır baytla doldurun. Daha açık belirtmek gerekirse, aşağıdaki şekilde doldururuz: 00 || IK1 || 00..00; bir sıfır bayt, 32 IK1 bayt, 223 sıfır bayt.
  4. 256 baytlık IK2 oluşturmak için dolgulu IK1'i HBK ile imzalayın.
  5. 32 baytlık IK3 oluşturmak için IK2'ye ve tuz (2. adımdakiyle aynı tuz) değerine scrypt uygulayın.
  6. IK3'ün ilk 16 baytını KEK, son 16 baytını ise IV olarak kullanın.
  7. DEK'yi AES_CBC, KEK anahtarı ve başlatma vektörü IV ile şifreleyin.

Şifreyi değiştirme

Kullanıcı ayarlardan şifresini değiştirmeyi veya kaldırmayı seçtiğinde kullanıcı arayüzü, cryptfs changepw komutunu vold'e gönderir ve vold, disk ana anahtarını yeni şifreyle yeniden şifreler.

Şifreleme özellikleri

vold ve init, mülkleri ayarlayarak birbirleriyle iletişim kurar. Şifreleme için kullanılabilen özelliklerin listesini aşağıda bulabilirsiniz.

Vold mülkleri

Özellik Açıklama
vold.decrypt trigger_encryption Sürücüyü şifre olmadan şifreleyin.
vold.decrypt trigger_default_encryption Şifre olmadan şifrelenmiş olup olmadığını kontrol edin. Şifrelenmişse şifresini çözüp bağlayın, aksi takdirde vold.decrypt değerini trigger_restart_min_framework olarak ayarlayın.
vold.decrypt trigger_reset_main Kullanıcı arayüzünü disk şifresini sorarak kapatmak için vold tarafından ayarlanır.
vold.decrypt trigger_post_fs_data /data için gerekli dizinleri ve diğer öğeleri hazırlamak üzere vold tarafından ayarlanır.
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çevenin kapatılması amacıyla vold tarafından ayarlanır.
vold.decrypt trigger_restart_min_framework ro.crypto.state değerine bağlı olarak, şifreleme için ilerleme çubuğu kullanıcı arayüzünü başlatmak veya şifre isteğinde bulunmak üzere vold tarafından ayarlanır.
vold.encrypt_progress Çerçeve başladığı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ünde, ayarlanan yüzde değeri gösterilmelidir.
vold.encrypt_progress error_partially_encrypted İlerleme çubuğu kullanıcı arayüzünde, şifrelemenin başarısız olduğuyla ilgili bir mesaj gösterilir ve kullanıcıya cihazı fabrika ayarlarına sıfırlama seçeneği sunulur.
vold.encrypt_progress error_reboot_failed İlerleme çubuğu kullanıcı arayüzünde, şifrelemenin tamamlandığını belirten bir mesaj gösterilir ve kullanıcıya cihazı yeniden başlatması için bir düğme sunulur. Bu hatanın oluşması beklenmez.
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österilir ve kullanıcıya sistemi yeniden başlatması için bir düğme sunulur.
vold.encrypt_progress error_shutting_down İlerleme çubuğu kullanıcı arayüzü çalışmıyor olduğundan bu hataya kimin yanıt verdiği anlaşılmıyor. Zaten böyle bir şey olmamalı.
vold.post_fs_data_done 0 vold.decrypt değerini trigger_post_fs_data olarak ayarlamadan hemen önce vold tarafından ayarlanır.
vold.post_fs_data_done 1 init.rc tarafından ayarlanır veya post-fs-data görevini tamamladıktan hemen sonra init.rc tarafından ayarlanır.

init özellikleri

Özellik Açıklama
ro.crypto.fs_crypto_blkdev vold komutu checkpw tarafından ayarlanır ve daha sonra vold komutu restart tarafından kullanılır.
ro.crypto.state unencrypted Bu sistemin şifrelenmemiş bir /data ro.crypto.state encrypted ile çalıştığını belirtmek için init tarafından ayarlanır. Bu sistem şifrelenmiş bir /data ile çalışıyorinit

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'den iletilen parametrelerle /data'yi bağlamaya çalıştığında init tarafından ayarlanır. vold, kripto eşlemeyi ayarlamak için bunları kullanır.
ro.crypto.tmpfs_options tmpfs /data dosya sistemini bağlarken init'in kullanacağı seçeneklerle init.rc tarafından ayarlanır.

init işlemleri

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