Pełne szyfrowanie dysku

Szyfrowanie całego dysku to proces kodowania wszystkich danych użytkownika na urządzeniu z Androidem za pomocą klucza szyfrowania. Po zaszyfrowaniu urządzenia wszystkie dane utworzone przez użytkowników są automatycznie zaszyfrowane przed zapisaniem go na dysku i wszystkich odczytów automatycznie odszyfrować dane przed zwróceniem ich do procesu dzwonienia.

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. Szybkie szyfrowanie jest obecnie obsługiwane tylko w systemach plików ext4 i f2fs.
  • Dodano: forceencrypt fstab do zaszyfrowania przy pierwszym uruchomieniu.
  • Dodano obsługę wzorców i szyfrowania bez hasła.
  • Dodano wspieraną sprzętowo pamięć klucza szyfrowania przy użyciu opcji Zaufany Zdolność podpisywania w środowisku wykonawczym (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. Nowy Android 5.0 urządzenia 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 na Androidzie opiera się na jądrze dm-crypt, która działa w warstwie urządzeń blokowych. Z tego powodu 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 formatu YAFFS, który komunikuje się bezpośrednio z Układ Flash NAND.

Algorytm szyfrowania to 128-bitowy Advanced Encryption Standard (AES) z łańcuchem szyfrowania blokowego (CBC) i ESSIV:SHA256. Klucz główny jest zaszyfrowany za pomocą: 128-bitowego AES przez wywołania biblioteki OpenSSL. Do (gdzie 256 to opcjonalna).

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

Przy pierwszym uruchomieniu urządzenie tworzy losowo generowany 128-bitowy klucz główny a następnie zaszyfruje je domyślnym hasłem i zapisaną sólą. Hasło domyślne to „default_password”. Jednak uzyskany wynik jest również podpisywany przez TEE (np. TrustZone), który używa hasha podpisu do zaszyfrowania klucza głównego.

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

Gdy użytkownik ustawia kod PIN, hasło lub hasło na urządzeniu, tylko 128-bitowy klucz są ponownie szyfrowane i przechowywane. (np. zmiany kodu PIN, hasła lub wzorca użytkownika NIE powodują ponownego zaszyfrowania danych użytkownika). Pamiętaj, że urządzenie zarządzane może podlegać ograniczeniom w zakresie kodu PIN, wzoru lub hasła.

Szyfrowaniem zarządza init i vold. Funkcja init wywołuje vold i ustawia regułę jako wyzwalacz zdarzeń. 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. Aby wywołać funkcje szyfrowania w vold, system używa poleceń cryptfs narzędzia wiersza poleceń vdc: checkpw, restart, enablecrypto, changepw, cryptocomplete, verifypw, setfield, getfield, mountdefaultencrypted, getpwtype, getpw i clearpw.

Aby zaszyfrować, odszyfrować lub wyczyścić pamięć urządzenia /data, /data nie mogą być montowane. Aby jednak wyświetlić dowolny interfejs użytkownika, platforma musi się uruchomić, a do uruchomienia musi być /data. Aby rozwiązać ten problem, tymczasowy system plików jest montowany na /data. Dzięki temu Android może prosić o hasło, pokazywać postęp i sugerować dane wymazać go w razie potrzeby. Nakłada on jednak ograniczenie, zgodnie z którym w celu przełączenia się do rzeczywistego systemu plików /data, system musi Zatrzymaj wszystkie procesy z otwartymi plikami w systemie plików tymczasowych i uruchom je ponownie. w rzeczywistym systemie plików /data. Aby to zrobić, wszystkie usługi muszą należeć do jednej z 3 grup: core, mainlate_start.

  • core: nigdy nie wyłączaj się 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 można było wywołać te działania, właściwość vold.decrypt jest ustawiona na różnych ciągów znaków. Aby zatrzymać i ponownie uruchomić usługi, użyj tych poleceń init:

  • class_reset: zatrzymuje usługę, ale zezwala na jej ponowne uruchomienie za pomocą 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).
    • Szyfrowanie istniejącego urządzenia: szyfrowanie inicjowane przez użytkownika (Android K i starsze wersje).
  • 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 za pomocą 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 znajdziesz szczegółowe omówienie każdego z tych procesów.

Szyfrowanie nowego urządzenia za pomocą funkcji forceencrypt

Jest 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" wyzwala init.rc, co powoduje, że vold szyfruje plik /data bez hasła. (brak ustawienia, ponieważ powinno to być nowe urządzenie).

  3. Montaż 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 uruchomienia zaszyfrowanego systemu i ustawia usługę vold.decrypt na: trigger_restart_min_framework

  4. Wyświetlanie ramy w celu pokazania postępów

    Na urządzeniu nie ma praktycznie danych do zaszyfrowania, więc pasek postępu pojawiają się często, ponieważ szyfrowanie odbywa się bardzo szybko. Zobacz Zaszyfruj istniejące urządzenie, aby uzyskać więcej szczegóły interfejsu.

  5. Gdy /data jest zaszyfrowany, usuń framework

    vold ustawia vold.decrypt na trigger_default_encryption, co uruchamia usługę defaultcrypto. (spowoduje to rozpoczęcie ścieżki poniżej, która umożliwia zamontowanie domyślnie zaszyfrowanych danych użytkownika) trigger_default_encryption sprawdza typu szyfrowania, aby sprawdzić, czy domena /data jest szyfrowana z użyciem hasła. Urządzenia z Androidem 5.0 są szyfrowane przy pierwszym uruchomieniu, więc nie ustawiono hasła; w związku z tym odszyfrowujemy i podłączasz algorytm /data.

  6. Montowanie /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 zwykłego procesu uruchamiania.

Szyfrowanie istniejącego urządzenia

Tak się dzieje, gdy zaszyfrujesz niezaszyfrowany plik z Androidem K lub starszym urządzenie przeniesione do wersji 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 zostanie przywrócony do ustawień fabrycznych, a wszystkie dane zostaną utracone.

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. vold sprawdza, czy sektor jest używany, zanim odczyta lub zapisze dane, co znacznie przyspiesza szyfrowanie na nowym urządzeniu, na którym jest niewiele danych lub wcale.

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

  1. Sprawdzanie hasła

    Interfejs wywołuje vold przy użyciu polecenia cryptfs enablecrypto inplace gdzie passwd to hasło do ekranu blokady użytkownika.

  2. Usuwanie ramowego projektu

    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 działać w klasach late_start i main.

  3. Tworzenie stopki krypto
  4. Tworzenie pliku menu nawigacyjnego
  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 metadane szyfrowania.

  8. Podczas szyfrowania zamontuj tmpfs

    vold podłącza tmpfs /data (przy użyciu opcji tmpfs) od ro.crypto.tmpfs_options) i ustawia właściwość vold.encrypt_progress na 0. vold przygotowuje tmpfs /data za uruchomienie zaszyfrowanego systemu i ustawianie właściwości vold.decrypt na: trigger_restart_min_framework

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

    trigger_restart_min_framework powoduje, że init.rc uruchamia klasę usług main. Gdy platforma wykryje, że vold.encrypt_progress ma wartość 0. Powoduje wyświetlenie paska postępu. Interfejs, który wysyła zapytania do tej właściwości co 5 sekund i aktualizuje pasek postępu. Pętla szyfrowania aktualizuje wartość vold.encrypt_progress za każdym razem, gdy szyfruje kolejny procent partycji.

  10. Jeśli /data jest zaszyfrowany, zaktualizuj stopkę dotyczącą szyfrowania

    Po zaszyfrowaniu pliku /data vold usuwa flagę ENCRYPTION_IN_PROGRESS w metadanych.

    Gdy urządzenie zostanie odblokowane, hasło zostanie użyte do: zaszyfrować klucz główny, 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ć 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, co powoduje uruchomienie usługi defaultcrypto. trigger_default_encryption sprawdza typ szyfrowania, aby zobaczyć, czy /data jest zaszyfrowany za pomocą lub bez hasła.

  2. Odszyfrowywanie /data

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

  3. Mount /data

    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. Tworzy wszelkie niezbędne katalogi, lub linków, a następnie ustaw vold.post_fs_data_done na 1.

    Gdy vold zobaczy wartość 1 w tej właściwości, ustawi właściwość vold.decrypt na: trigger_restart_framework. w sprawia, że init.rc uruchamia usługi w klasie main oraz ponownie uruchomić usługi w klasie late_start przez pierwszą czasu od uruchomienia.

  4. Rozpocznij framework

    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

    Wykrywa, że urządzenie z Androidem jest zaszyfrowane, ponieważ flaga 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 skonfigurowania mapowania kryptograficznego:

    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 przez 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 ustawione, szyfrowanie zostało przerwane i nie można uzyskać dane, których można użyć. 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 sprawdza hasło przez wysyła polecenie cryptfs checkpw do: vold. Jeśli jest prawidłowe (co jest określane po podłączeniu odszyfrował(a) plik /data w tymczasowej lokalizacji, a następnie go odłączył) vold zapisuje nazwę odszyfrowanego urządzenia blokującego we właściwości ro.crypto.fs_crypto_blkdev i zwraca stan 0 do interfejsu użytkownika. Jeśli Hasło jest niepoprawne, zwraca wartość -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 na trigger_reset_main, co powoduje, że init.rc wykonuje działanie class_reset main. Spowoduje to zatrzymanie wszystkich usług w klasie głównej, co pozwala na odłączenie /data tmpfs.

  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 zmienia wartość właściwości vold.decrypt na trigger_post_fs_data. W efekcie 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 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 usługi za pomocą 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. Uruchomić 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 podaje 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 użytkownika prosi o ponowne uruchomienie i informuje go o procesie szyfrowania nigdy się nie zaczęło. Jeśli błąd pojawia się po usunięciu struktury, ale przed wyświetleniem interfejsu paska postępu vold uruchomi ponownie 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. Nie powinno tak się zdarzyć.

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

Przechowywanie zaszyfrowanego klucza

Zaszyfrowany klucz jest przechowywany w metadanych szyfrowania. Kopia zapasowa sprzętu to wdrożenie przy użyciu funkcji podpisywania TEE (Trusted Execution Environment). 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 na ataki zewnętrzne, rozszerzyliśmy ten algorytm, podpisując uzyskany klucz za pomocą przechowywanego klucza TEE. Uzyskany podpis jest następnie przekształcany w klucz o odpowiedniej długości przez zastosowanie jeszcze raz scrypt. Następnie klucz ten służy do szyfrowania i odszyfrowywania klucza głównego. Aby zapisać ten klucz:

  1. Wygeneruj losowy 16-bajtowy klucz szyfrowania dysku (DEK) i 16-bajtową sól.
  2. Zastosuj szyfrowanie przy użyciu hasła użytkownika i sól, aby utworzyć 32-bajtowy kod pośredni klucz 1 (IK1).
  3. Uzupełnij kod IK1 o 0 bajtów w zakresie rozmiaru powiązanego sprzętowo klucza prywatnego (HBK). Hasło ma postać: 00 || IK1 || 00..00; jeden bajt zero, 32 bajty IK1, 223 zero bajtów.
  4. Podpisz dopełnienie IK1 za pomocą HBK, aby wygenerować 256-bajtowy kod IK2.
  5. Zastosuj scrypt do IK2 i soli (ta sama sól co w kroku 2), aby uzyskać 32-bajtowy IK3.
  6. Użyj pierwszych 16 bajtów IK3 jako klucza KEK, a ostatnich 16 bajtów jako IV.
  7. Szyfruj DEK za pomocą AES_CBC, klucza KEK i wektora inicjującego IV.

Zmiana hasła

Gdy użytkownik zdecyduje się zmienić lub usunąć hasło w ustawieniach, interfejs wyśle polecenie cryptfs changepw do vold, a vold ponownie zaszyfruje klucz główny dysku za pomocą nowego hasła.

Właściwości szyfrowania

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

Właściwości Vold

Właściwość Opis
vold.decrypt trigger_encryption Szyfrowanie dysku bez hasła.
vold.decrypt trigger_default_encryption Sprawdź, czy dysk jest zaszyfrowany bez hasła. Jeśli tak, odszyfruj i zamontuj plik. W przeciwnym razie ustaw vold.decrypt na trigger_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ć prawdziwą platformę i wszystkie usługi.
vold.decrypt trigger_shutdown_framework Ustaw przez vold, aby wyłączyć cały framework i rozpocząć szyfrowanie.
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 w interfejsie powinien wyświetlać ustawioną wartość procentową.
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 W interfejsie paska postępu powinno wyświetlać się komunikat o ukończeniu szyfrowania i przycisk umożliwiający ponowne uruchomienie urządzenia. Ten błąd nie jest spodziewana.
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 Ustawione przez: init.rc lub init.rc zaraz po ukoń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, aby wskazać, że system działa z niezaszyfrowanym /data ro.crypto.state encrypted. Ustawione przez init ten system działa z zaszyfrowanym kodem /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 są ustawiane przez init, gdy próbuje zamontować /data z parametrami przekazanymi przez 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.

inicjowanie działań

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