Pełne szyfrowanie dysku

Szyfrowanie całego dysku to proces kodowania wszystkich danych użytkownika na urządzeniu z Androidem za pomocą zaszyfrowany klucz. Po zaszyfrowaniu urządzenia wszystkie dane utworzone przez użytkownika są automatycznie szyfrowane przed zapisaniem na dysku, a wszystkie odczyty automatycznie odszyfrowywane przed przekazaniem do procesu wywołania.

Szyfrowanie całego dysku zostało wprowadzone w Androidzie 4.4, ale w Androidzie 5.0 pojawiły się nowe funkcje:

  • Utworzono szybkie szyfrowanie, które szyfruje tylko używane bloki na partycji danych by pierwsze uruchomienie nie zajmowało zbyt dużo czasu. Tylko systemy plików ext4 i f2fs obecnie obsługują szybkie szyfrowanie.
  • Dodano: forceencrypt fstab do zaszyfrowania przy pierwszym uruchomieniu.
  • Dodano obsługę wzorów i szyfrowania bez hasła.
  • Dodano sprzętowe przechowywanie klucza szyfrowania przy użyciu funkcji podpisywania zaufanego środowiska wykonawczego (TEE) (np. w TrustZone). Więcej informacji znajdziesz w sekcji Przechowywanie zaszyfrowanego klucza. .

Uwaga: urządzenia z Androidem 5.0 lub nowszym Zaszyfrowane dane mogą zostać przywrócone do stanu niezaszyfrowanego przez przywrócenie danych fabrycznych. Nowe urządzenia z Androidem 5.0, które zostały zaszyfrowane przy pierwszym uruchomieniu, nie mogą zostać przywrócone do stanu niezaszyfrowanego.

Jak działa pełne szyfrowanie dysku na Androidzie

Szyfrowanie całego dysku w Androidzie opiera się na dm-crypt, czyli funkcji jądra, która działa na poziomie urządzenia blokowego. W związku z tym szyfrowanie działa z kartami Embedded MultiMediaCard (eMMC) i podobnymi urządzeniami flash, które są rozpoznawane przez jądro jako urządzenia blokowe. Szyfrowanie nie jest możliwe w przypadku YAFFS, który komunikuje się bezpośrednio z nieprzetworzonym układem flash NAND.

Algorytm szyfrowania to 128-bitowy Advanced Encryption Standard (AES) z łańcuchem szyfrowania blokowego (CBC) i ESSIV:SHA256. Klucz główny jest szyfrowany za pomocą 128-bitowego AES za pomocą wywołań biblioteki OpenSSL. Klucz musi mieć co najmniej 128 bitów (256 bitów jest opcjonalne).

Uwaga: producenci OEM mogą używać wersji 128-bitowej lub nowszej do szyfrowania klucza głównego.

W Androidzie 5.0 dostępne są 4 rodzaje stanów szyfrowania:

  • domyślnie
  • Kod PIN
  • hasło
  • wzór

Podczas pierwszego uruchomienia urządzenie tworzy losowo wygenerowany 128-bitowy klucz główny, a następnie szyfruje go za pomocą domyślnego hasła i zapisanego elementu soli. Domyślne hasło to „default_password”. Jednak wynikowy hasz jest również podpisany przez TEE (np. TrustZone), który do szyfrowania klucza głównego wykorzystuje skrót podpisu.

Domyślne hasło znajdziesz w projekcie Android Open Source cryptfs.cpp .

Gdy użytkownik ustawia kod PIN lub hasło na urządzeniu, tylko 128-bitowy klucz jest ponownie szyfrowany i przechowywany. (np. zmiany kodu PIN/karty/wzoru użytkownika NIE powodują przez ponowne szyfrowanie danych użytkownika). Pamiętaj, że urządzenie zarządzane może podlegać ograniczeniom związanym z kodem PIN, wzorem lub hasłem.

Szyfrowaniem zarządza init i vold. init wywołuje vold, a vold ustawia właściwości, aby wywoływać zdarzenia w init. Inne części systemu przejść do usług, np. zgłaszać stan, prosić o hasła lub komunikatu o przywróceniu ustawień fabrycznych w przypadku błędu krytycznego. Do wywołania funkcji szyfrowania w vold, system używa narzędzia wiersza poleceń Polecenia cryptfs na urządzeniu vdc: checkpw, restart, enablecrypto, changepw, cryptocomplete, verifypw, setfield, getfield, mountdefaultencrypted, getpwtype getpw i clearpw.

Aby szyfrować, odszyfrowywać lub kasować /data, /datanie może być zamontowany. Aby jednak wyświetlić dowolny interfejs użytkownika, platforma musi się uruchomić, a do uruchomienia musi być /data. Do jeśli nie uda się rozwiązać tej zagadki, na dysku /data zostanie podłączony tymczasowy system plików. Dzięki temu Android może wyświetlać prośby o hasła, pokazywać postęp lub sugerować wyczyszczenie danych w razie potrzeby. Wymusza ono jednak ograniczenie, że aby przejść z tymczasowego systemu plików do prawdziwego systemu plików /data, system musi zatrzymać wszystkie procesy z otwartymi plikami w tymczasowym systemie plików i ponownie uruchomić te procesy w rzeczywistym systemie plików /data. W tym celu wszystkie usługi musi należeć do jednej z 3 grup: core, main i late_start

  • core: nigdy nie wyłączaj po uruchomieniu.
  • main: wyłącz komputer, a następnie uruchom go ponownie po wpisaniu hasła do dysku.
  • late_start: rozpoczyna się dopiero po odszyfrowaniu i podłączeniu urządzenia /data.

Aby wywołać te działania, właściwość vold.decrypt jest ustawiona na różne ciągi znaków. Aby wyłączyć i ponownie uruchomić usługi, użyj poleceń init:

  • class_reset: zatrzymuje usługę, ale pozwala na jej ponowne uruchomienie za pomocą klasy class_start.
  • class_start: uruchamia ponownie usługę.
  • class_stop: zatrzymuje usługę i dodaje flagę SVC_DISABLED. Zatrzymane usługi nie odpowiadają na class_start.

Przepływy

W przypadku zaszyfrowanego urządzenia są 4 przepływy. Urządzenie jest szyfrowane tylko raz, a potem przechodzi przez normalny proces uruchamiania.

  • Zaszyfruj wcześniej niezaszyfrowane urządzenie:
    • Szyfrowanie nowego urządzenia za pomocą forceencrypt: obowiązkowe szyfrowanie podczas pierwszego uruchamiania (od Androida L).
    • Zaszyfruj istniejące urządzenie: szyfrowanie inicjowane przez użytkownika (Android K i starsze).
  • Uruchamianie zaszyfrowanego urządzenia:
    • Uruchamianie zaszyfrowanego urządzenia bez hasła: uruchamianie zaszyfrowanego urządzenia, które nie ma ustawionego hasła (dotyczy urządzeń z Androidem 5.0 i nowszym).
    • Uruchamianie zaszyfrowanego urządzenia przy użyciu hasła: uruchamianie zaszyfrowanego urządzenia, na którym zostało ustawione hasło.

Oprócz tych procesów urządzenie może również nie zaszyfrować /data. Poniżej szczegółowo opisujemy każdy z tych procesów.

Szyfrowanie nowego urządzenia przy użyciu wymuszania szyfrowania

To normalne pierwsze uruchomienie urządzenia z Androidem 5.0.

  1. Wykrywanie niezaszyfrowanego systemu plików za pomocą flagi forceencrypt

    Plik /data nie jest zaszyfrowany, ale wymaga tego ustawienia przez system forceencrypt. Odłącz urządzenie /data.

  2. Rozpocznij szyfrowanie /data

    vold.decrypt = "trigger_encryption" powoduje init.rc, co powoduje, że vold szyfruje /data bez hasła. (brak ustawienia, ponieważ to nowe urządzenie).

  3. Montowanie tmpfs

    vold montuje tmpfs /data (korzystając z opcji tmpfs z ro.crypto.tmpfs_options) i ustawia wartość właściwości vold.encrypt_progress na 0. vold przygotowuje tmpfs /data do uruchamiania zaszyfrowanego systemu i ustawia właściwość vold.decrypt na: trigger_restart_min_framework

  4. Otwórz schemat, aby wyświetlić postępy.

    Na urządzeniu nie ma praktycznie danych do zaszyfrowania, więc pasek postępu pojawiają się często, ponieważ szyfrowanie odbywa się bardzo szybko. Więcej informacji o interfejsie postępu znajdziesz w artykule Szyfrowanie istniejącego urządzenia.

  5. Kiedy /data jest zaszyfrowany, usuń tę platformę

    vold ustawia vold.decrypt na trigger_default_encryption, co uruchamia usługę defaultcrypto. (spowoduje to rozpoczęcie poniższych czynności dotyczących zamontowania domyślnie zaszyfrowanych danych użytkownika) trigger_default_encryption sprawdza typ szyfrowania, aby sprawdzić, czy /data jest zaszyfrowany z użyciem protokołu hasła. Ponieważ urządzenia z Androidem 5.0 są szyfrowane przy pierwszym uruchomieniu, nie powinno być ustawionego hasła. Dlatego odszyfrowujemy i montujemy /data.

  6. Montaż /data

    init podłącza następnie /data na dysku RAM Disk tmpfs za pomocą pobieranych przez niego parametrów z parametru ro.crypto.tmpfs_options, który jest ustawiony w aplikacji init.rc.

  7. Uruchom platformę

    vold ustawia vold.decrypt na trigger_restart_framework, co powoduje kontynuowanie normalnego procesu uruchamiania.

Szyfrowanie istniejącego urządzenia

Dzieje się tak, gdy szyfrujesz niezaszyfrowane urządzenie z Androidem K lub starszym, które zostało przeniesione na Androida L.

Ten proces jest inicjowany przez użytkownika i jest nazywany „szyfrowaniem lokalnym”. kod. Gdy użytkownik zaszyfruje urządzenie, interfejs zapewnia bateria jest w pełni naładowana, a ładowarka jest podłączona, by zapewnić wystarczającą aby zakończyć proces szyfrowania.

Ostrzeżenie: jeśli w urządzeniu zostanie wyczerpane zasilanie i wyłączy się, zanim się zakończy danych plików pozostają w stanie częściowo zaszyfrowanego. Urządzenie musi zostać zresetowane do ustawień fabrycznych, a wszystkie dane zostaną usunięte.

Aby włączyć szyfrowanie na miejscu, vold uruchamia pętlę, która odczytuje każdy sektor rzeczywistego urządzenia blokowego, a następnie zapisze go na urządzeniu blokowym szyfrującym. Funkcja vold sprawdza, czy określony sektor przed przeczytaniem i pisaniem. Dzięki temu na nowych urządzeniach, które mają niewiele danych lub nie mają ich wcale.

Stan urządzenia: ustaw ro.crypto.state = "unencrypted". i wykonaj aktywator on nonencrypted init, aby kontynuować uruchamianie.

  1. Sprawdź hasło

    Interfejs wywołuje vold z poleceniem cryptfs enablecrypto inplace, gdzie passwd to hasło do ekranu blokady.

  2. Wyłączenie zasad

    vold sprawdza błędy, zwraca -1, jeśli nie może zaszyfrować, i drukuje przyczynę w dzienniku. Jeśli może zaszyfrować, ustawia właściwość vold.decrypt na trigger_shutdown_framework. Spowoduje to, że usługa init.rc przestanie obsługiwać klasy late_start i main.

  3. Tworzenie stopki krypto
  4. Tworzenie pliku ścieżki nawigacyjnej
  5. Uruchom ponownie
  6. Wykryj plik menu nawigacyjnego
  7. Rozpocznij szyfrowanie /data

    vold konfiguruje mapowanie szyfrowania, które tworzy wirtualne urządzenie blokowe szyfrowania, które jest mapowane na rzeczywiste urządzenie blokowe, ale szyfruje każdy sektor podczas zapisu i odszyfrowuje każdy sektor podczas odczytu. vold następnie tworzy i zapisuje nie ma metadanych kryptograficznych.

  8. Podczas szyfrowania podłącz tmpfs

    vold montuje tmpfs /data (korzystając z opcji tmpfs z ro.crypto.tmpfs_options) i ustawia wartość właściwości vold.encrypt_progress na 0. vold przygotowuje tmpfs /data do uruchamiania zaszyfrowanego systemu i ustawia właściwość vold.decrypt na: trigger_restart_min_framework

  9. Otwórz schemat, aby wyświetlić postępy.

    trigger_restart_min_framework powoduje, że init.rc do uruchomić klasę usług main. Gdy framework wykryje, że wartość parametru vold.encrypt_progress wynosi 0, wyświetla pasek postępu interfejsu użytkownika, który co 5 sekund wysyła zapytanie do tej właściwości i aktualizuje pasek postępu. Pętla szyfrowania aktualizuje się vold.encrypt_progress za każdym razem szyfruje kolejny procent partycji.

  10. Gdy kod /data jest zaszyfrowany, zaktualizuj stopkę kryptograficzną

    Gdy /data zostanie zaszyfrowany, vold usuwa flagę ENCRYPTION_IN_PROGRESS w metadanych.

    Gdy urządzenie zostanie odblokowane, hasło zostanie użyte do zaszyfrowania klucza głównego, a stopka kryptograficzna zostanie zaktualizowana.

    Jeśli z jakiegoś powodu restart się nie powiedzie, vold ustawia właściwość vold.encrypt_progress do error_reboot_failed i interfejs powinien wyświetlać komunikat z prośbą o naciśnięcie przycisku i uruchomić go ponownie. Nie powinno do tego dojść.

Uruchamianie zaszyfrowanego urządzenia z domyślnym szyfrowaniem

Dzieje się tak, gdy uruchamiasz zaszyfrowane urządzenie bez hasła. Ponieważ urządzenia z Androidem 5.0 są szyfrowane przy pierwszym uruchomieniu, nie powinno być ustawionego hasła, więc jest to stan domyślnego szyfrowania.

  1. Wykrywanie zaszyfrowanych /data bez hasła

    Wykrywa, że urządzenie z Androidem jest zaszyfrowane, ponieważ /data nie można podłączyć, a jedna z flag encryptable lub Ustawienie forceencrypt jest ustawione.

    vold ustawia wartość vold.decrypt na trigger_default_encryption, która rozpoczyna się defaultcrypto. trigger_default_encryptionsprawdza typ szyfrowania, aby sprawdzić, czy /data jest zaszyfrowany z hasłem czy bez.

  2. Odszyfruj /data

    Tworzy urządzenie dm-crypt na urządzeniu blokowym, aby było ono gotowe do użycia.

  3. Podłączanie /dane

    vold najpierw montuje odszyfrowaną partycję /data, a potem przygotowuje nową partycję. Ustawia właściwość vold.post_fs_data_done na 0, a następnie ustawia vold.decrypt do: trigger_post_fs_data. Powoduje to, że init.rc będzie wykonywać polecenia post-fs-data. Tworzą one niezbędne katalogi lub linki, a potem ustawiają wartość parametru vold.post_fs_data_done na 1.

    Gdy vold zobaczy 1 w tej właściwości, ustawia właściwość vold.decrypt na: trigger_restart_framework.. Spowoduje to ponowne uruchomienie usług w klasie main przez init.rc oraz uruchomienie usług w klasie late_start po raz pierwszy od momentu uruchomienia.

  4. Uruchom platformę

    Teraz platforma uruchamia wszystkie usługi przy użyciu odszyfrowanego pliku /data, a system jest gotowy do użycia.

Uruchamianie zaszyfrowanego urządzenia bez domyślnego szyfrowania

Tak się dzieje, gdy uruchamiasz zaszyfrowane urządzenie z ustawionym hasłem. Hasło urządzenia może być kodem PIN, wzorem lub hasłem.

  1. Wykrywanie zaszyfrowanego urządzenia za pomocą hasła

    wykryć, że urządzenie z Androidem jest zaszyfrowane, ponieważ ma flagę ro.crypto.state = "encrypted"

    vold ustawia wartość vold.decrypt na trigger_restart_min_framework, ponieważ /data jest zaszyfrowany za pomocą hasła.

  2. Montaż tmpfs

    init ustawia 5 właściwości, aby zapisać początkowe opcje podłączenia podana dla parametru /data z parametrami przekazywanymi z init.rc. vold używa tych właściwości do konfigurowania mapowania kryptowalut:

    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 (8-cyfrowy numer szesnastkowy w standardzie ASCII poprzedzony cyfrą 0x)
  3. Uruchomienie frameworku, aby wyświetlić prośbę o hasło

    Platforma uruchamia się i widzi, że ustawiona jest vold.decrypt trigger_restart_min_framework Informuje ono framework, że uruchamia się na dysku tmpfs /data i musi pobrać hasło użytkownika.

    Najpierw jednak musi się upewnić, że dysk został prawidłowo zaszyfrowany. it wysyła polecenie cryptfs cryptocomplete do: vold. vold zwraca wartość 0, jeśli szyfrowanie zostało zakończone pomyślnie, -1 w przypadku błędu wewnętrznego lub -2, jeśli szyfrowanie nie zostało zakończone pomyślnie. vold określa sprawdzając metadane kryptograficzne dotyczące CRYPTO_ENCRYPTION_IN_PROGRESS flaga. Jeśli jest ustawiony, oznacza, że proces szyfrowania został przerwany i na urządzeniu nie ma żadnych przydatnych danych. Jeśli vold zwraca błąd, interfejs powinien Wyświetlać komunikat z prośbą o zrestartowanie urządzenia i przywrócenie go do ustawień fabrycznych, a także użytkownik może kliknąć przycisk, który to umożliwia.

  4. Odszyfrowywanie danych za pomocą hasła

    Po pomyślnym rozwiązaniu cryptfs cryptocomplete platforma wyświetli interfejs użytkownika z prośbą o podanie hasła do dysku. Interfejs użytkownika sprawdza hasło, wysyłając polecenie cryptfs checkpw do vold. Jeśli hasło jest prawidłowe (co jest określane przez zamontowanie odszyfrowanego /data w tymczasowym miejscu, a następnie odmontowanie), vold zapisuje nazwę odszyfrowanego urządzenia blokującego w właściwości ro.crypto.fs_crypto_blkdev i zwraca stan 0 do interfejsu użytkownika. Jeśli hasło jest nieprawidłowe, zwraca ona -1 do interfejsu użytkownika.

  5. Zatrzymaj platformę

    Interfejs wyświetla grafikę rozruchową kryptografii, a następnie wywołuje vold z użyciem tego kodu. polecenie cryptfs restart. vold ustawia właściwość vold.decrypt do trigger_reset_main, co powoduje init.rc, aby wykonać class_reset main. Spowoduje to zatrzymanie wszystkich usług w klasie głównej, co pozwoli na odmontowanie tmpfs /data.

  6. Pod górę /data

    vold następnie podłącza odszyfrowaną prawdziwą partycję /data i przygotowuje nową partycję (która mogła nigdy nie być przygotowana, został zaszyfrowany przy użyciu opcji czyszczenia, która na początku nie jest obsługiwana. wersji produkcyjnych). Ustawia właściwość vold.post_fs_data_done na 0, a następnie ustawia wartość vold.decrypt na trigger_post_fs_data. To powoduje init.rc, aby uruchomić polecenia post-fs-data. Ta utwórz potrzebne katalogi lub linki, a następnie vold.post_fs_data_done do 1. Gdy funkcja vold zobaczy wartość 1 w tej właściwości, ustawi właściwość vold.decrypt na trigger_restart_framework. Powoduje to, że uruchamiana jest usługa init.rc usługi w klasie main i rozpocznij usługi w klasie late_start po raz pierwszy od uruchomienia.

  7. Rozpocznij pełny framework

    Teraz framework uruchamia wszystkie swoje usługi przy użyciu odszyfrowanego systemu plików /data, a system jest gotowy do użycia.

Błąd

Urządzenie, które nie może odszyfrować danych, może być uszkodzone z kilku powodów. Urządzenie rozpoczyna normalną procedurę uruchamiania:

  1. Wykrywaj zaszyfrowane urządzenie za pomocą hasła
  2. Góra tmpfs
  3. Uruchom framework, aby wyświetlić prompt z prośbą o hasło

Po otwarciu frameworku na urządzeniu mogą wystąpić błędy:

  • Hasło jest zgodne, ale nie można odszyfrować danych
  • użytkownik 30 razy wpisał nieprawidłowe hasło;

Jeśli te błędy nie zostaną usunięte, poproś użytkownika o przywrócenie ustawień fabrycznych:

Jeśli vold wykryje błąd podczas procesu szyfrowania, a żadne dane nie zostały jeszcze zniszczone i ramka jest aktywna, vold ustawia właściwość vold.encrypt_progress na error_not_encrypted. Interfejs prosi użytkownika o uruchomienie ponownie i ostrzega, że proces szyfrowania nigdy nie został uruchomiony. Jeśli błąd wystąpi po usunięciu frameworka, ale przed wyświetleniem paska postępu w interfejsie użytkownika, vold ponownie uruchomi system. Jeśli nie udało się uruchomić ponownie, ustaw vold.encrypt_progress na error_shutting_down i zwraca -1; ale nie będzie niczego wychwytywania błędu. To nie powinno się zdarzyć.

Jeśli vold wykryje błąd podczas procesu szyfrowania, ustawi vold.encrypt_progress na error_partially_encrypted i zwróci -1. Interfejs użytkownika powinien następnie wyświetlać komunikat informujący o szyfrowaniu nie udało się wykonać testu i udostępnić użytkownikowi przycisk przywracania urządzenia do ustawień fabrycznych.

Przechowywanie zaszyfrowanego klucza

Zaszyfrowany klucz jest przechowywany w metadanych szyfrowania. Obsługa sprzętowa jest implementowana za pomocą funkcji podpisywania zaufanego środowiska wykonawczego (TEE). Wcześniej klucz główny był szyfrowany za pomocą klucza wygenerowanego przez scrypt na podstawie hasła użytkownika i zmagazynowanego parametru soli. Aby klucz był odporny przed takimi atakami, rozszerzamy ten algorytm, podpisując powstały klucz zapisanym kluczem TEE. Uzyskany podpis jest następnie przekształcany w klucz o odpowiedniej długości przez zastosowanie jeszcze raz scrypt. Następnie klucz ten jest używany do szyfrowania i odszyfrowania klucza głównego. Aby zapisać ten klucz:

  1. Wygeneruj losowy 16-bajtowy klucz szyfrowania dysku (DEK) i 16-bajtową sól.
  2. Zastosuj scrypt do hasła użytkownika i soli, aby uzyskać 32-bajtowy klucz pośredni 1 (IK1).
  3. Uzupełnij kod IK1 o 0 bajtów w zakresie rozmiaru powiązanego sprzętowo klucza prywatnego (HBK). W szczególności wypełniamy: 00 || IK1 || 00..00; 1 bajt równy 0, 32 bajty IK1, 223 bajty równe 0.
  4. Podpisz wypełniony IK1 za pomocą HBK, aby uzyskać IK2 o długości 256 bajtów.
  5. Zastosuj szyfrowanie IK2 i sól (taką samą jak w kroku 2), aby uzyskać 32-bajtowy kod IK3.
  6. Użyj pierwszych 16 bajtów IK3 jako klucza KEK, a ostatnich 16 bajtów jako IV.
  7. Szyfrowanie DEK przy użyciu AES_CBC z kluczem KEK i wektorem inicjującym IV.

Zmień hasło

Gdy użytkownik zmieni lub usunie hasło w ustawieniach, interfejs wyśle do polecenie cryptfs changepw do vold, vold ponownie szyfruje główny klucz dysku nowym hasłem.

Właściwości szyfrowania

voldinit komunikują się ze sobą, ustawiając właściwości. Oto lista dostępnych właściwości do szyfrowania.

Właściwości Vold

Właściwość Opis
vold.decrypt trigger_encryption Szyfruj dysk bez hasła.
vold.decrypt trigger_default_encryption Sprawdź, czy dysk jest zaszyfrowany bez hasła. Jeśli tak, odszyfruj i podłącz go. W przeciwnym razie ustaw wartość vold.decrypt na aktywator_restart_min_framework.
vold.decrypt trigger_reset_main Ustaw przez vold, aby wyłączyć interfejs proszący o hasło do dysku.
vold.decrypt trigger_post_fs_data Ustaw przez vold do przygotowania /data z wymaganymi katalogami itp.
vold.decrypt trigger_restart_framework Ustaw przez vold, aby uruchomić prawdziwy framework i wszystkie usługi.
vold.decrypt trigger_shutdown_framework Ustaw przez vold wyłączenie pełnej platformy w celu rozpoczęcia szyfrowania.
vold.decrypt trigger_restart_min_framework Ustaw przez vold, aby uruchomić interfejs paska postępu szyfrowania lub wyświetlić prośbę o hasło, w zależności od wartości ro.crypto.state.
vold.encrypt_progress Po uruchomieniu platformy Jeśli ta właściwość jest ustawiona, wpisz w trybie paska postępu.
vold.encrypt_progress 0 to 100 Pasek postępu powinien wyświetlanie ustawionej wartości procentowej.
vold.encrypt_progress error_partially_encrypted W interfejsie paska postępu powinien wyświetlać się komunikat o nieudanym szyfrowaniu i opcja zresetowania urządzenia do ustawień fabrycznych.
vold.encrypt_progress error_reboot_failed Interfejs paska postępu powinien wyświetlać komunikat informujący o szyfrowaniu i umożliwić użytkownikowi zrestartowanie urządzenia. Ten błąd nie powinien wystąpić.
vold.encrypt_progress error_not_encrypted Pasek postępu powinien wyświetli komunikat o błędzie wystąpiło, żadne dane nie zostały zaszyfrowane lub i podać użytkownikowi przycisk ponownego uruchomienia systemu.
vold.encrypt_progress error_shutting_down Interfejs paska postępu nie działa, więc nie wiadomo, kto odpowiada do tego błędu. A to nigdy nie powinno się wydarzyć.
vold.post_fs_data_done 0 Ustawiono przez vold tuż przed ustawieniem vold.decrypt na trigger_post_fs_data.
vold.post_fs_data_done 1 Ustaw przez init.rc lub init.rc zaraz po zakończeniu zadania post-fs-data.

Właściwości init

Właściwość Opis
ro.crypto.fs_crypto_blkdev Ustawione przez polecenie vold checkpw do późniejszego użycia przez polecenie vold restart.
ro.crypto.state unencrypted Ustawione przez init oznacza, że ten system działa z nieszyfrowaniem /data ro.crypto.state encrypted Ustawione przez init, aby wskazać, że ten system działa z zaszyfrowanym /data.

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

Te 5 właściwości jest ustawianych przez init, gdy próbuje podłączyć /data z parametrami przekazywanymi z init.rc vold używa ich do konfigurowania mapowania kryptowalut.
ro.crypto.tmpfs_options Ustawione przez funkcję init.rc z opcjami, które mają być używane podczas inicjowania podłączenie systemu plików /data tmpfs.

init actions

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