Szyfrowanie całego dysku

Szyfrowanie całego dysku to proces kodowania wszystkich danych użytkownika na urządzeniu z Androidem za pomocą zaszyfrowanego klucza. Gdy urządzenie zostanie zaszyfrowane, wszystkie dane utworzone przez użytkownika będą automatycznie szyfrowane przed zapisaniem na dysku, a wszystkie odczyty będą automatycznie odszyfrowywać dane przed zwróceniem ich do procesu wywołującego.

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

  • Szybkie szyfrowanie, które szyfruje tylko używane bloki na partycji danych, aby uniknąć długiego czasu pierwszego uruchomienia. Obecnie szybkie szyfrowanie jest obsługiwane tylko w przypadku systemów plików ext4 i f2fs.
  • Dodano forceencryptflagę fstab, aby szyfrować przy pierwszym uruchomieniu.
  • Dodano obsługę wzorów i szyfrowania bez hasła.
  • Dodano oparte na sprzęcie przechowywanie klucza szyfrowania przy użyciu funkcji podpisywania zaufanego środowiska wykonawczego (TEE) (np. w TrustZone). Więcej informacji znajdziesz w sekcji Przechowywanie zaszyfrowanego klucza.

Ostrzeżenie: urządzenia, na których przeprowadzono aktualizację do Androida 5.0, a następnie zaszyfrowano dane, można przywrócić do stanu bez szyfrowania, przywracając dane fabryczne. Nowych urządzeń z Androidem 5.0, które zostały zaszyfrowane podczas pierwszego uruchomienia, nie można przywrócić do stanu bez szyfrowania.

Jak działa pełne szyfrowanie dysku na Androidzie

Szyfrowanie całego dysku na Androidzie jest oparte na dm-crypt, czyli funkcji jądra, która działa na poziomie urządzenia blokowego. Dlatego szyfrowanie działa z wbudowanymi kartami MultiMediaCard (eMMC) i podobnymi urządzeniami flash, które są widoczne dla jądra jako urządzenia blokowe. Szyfrowanie nie jest możliwe w przypadku systemu YAFFS, który komunikuje się bezpośrednio z nieprzetworzonym układem pamięci flash NAND.

Algorytm szyfrowania to 128-bitowy standard AES z szyfrowaniem blokowym (CBC) i ESSIV:SHA256. Klucz główny jest szyfrowany za pomocą 128-bitowego algorytmu AES przez wywołania biblioteki OpenSSL. Klucz musi mieć co najmniej 128 bitów (256 bitów jest opcjonalne).

Uwaga: producenci OEM mogą używać 128-bitowego lub dłuższego klucza do szyfrowania klucza głównego.

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

  • domyślnie
  • kodu PIN,
  • hasło
  • wzór

Podczas pierwszego uruchomienia urządzenie tworzy losowo wygenerowany 128-bitowy klucz główny, a następnie haszuje go za pomocą domyślnego hasła i zapisanego saltu. Domyślne hasło to „default_password”. Wynikowy skrót jest jednak również podpisywany za pomocą zaufanego środowiska wykonawczego (TEE), np. TrustZone, które używa skrótu podpisu do zaszyfrowania klucza głównego.

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

Gdy użytkownik ustawi kod PIN lub hasło na urządzeniu, tylko 128-bitowy klucz zostanie ponownie zaszyfrowany i zapisany. (np. zmiany kodu PIN, hasła lub wzoru użytkownika NIE powodują ponownego zaszyfrowania danych użytkownika). Pamiętaj, że urządzenie zarządzane może podlegać ograniczeniom dotyczącym kodu PIN, wzoru lub hasła.

Szyfrowaniem zarządzają initvold. init wywołuje vold, a vold ustawia właściwości, aby wywoływać zdarzenia w init. Inne części systemu również sprawdzają te właściwości, aby wykonywać zadania takie jak raportowanie stanu, proszenie o hasło czy wyświetlanie prośby o przywrócenie ustawień fabrycznych w przypadku poważnego błędu. Aby wywołać funkcje szyfrowania w vold, system używa narzędzia wiersza poleceń vdc z tymi poleceniami: cryptfs, checkpw, restart, enablecrypto, changepw, cryptocomplete, verifypw, setfield, getfield, mountdefaultencrypted, getpwtype, getpwclearpw.

Aby zaszyfrować, odszyfrować lub wyczyścić /data, /data nie może być zamontowany. Aby jednak wyświetlić interfejs, platforma musi się uruchomić, a do jej działania wymagany jest /data. Aby rozwiązać ten problem, tymczasowy system plików jest montowany w /data. Dzięki temu Android może w razie potrzeby wyświetlać prośby o podanie haseł, pokazywać postępy lub sugerować wymazanie danych. Wymaga to jednak, aby w celu przejścia z tymczasowego systemu plików na prawdziwy system plików /data system zatrzymał wszystkie procesy z otwartymi plikami w tymczasowym systemie plików i ponownie uruchomił te procesy w prawdziwym 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 po uruchomieniu.
  • main: wyłącz, a następnie uruchom ponownie po wpisaniu hasła do dysku.
  • late_start: nie rozpoczyna się, dopóki /data nie zostanie odszyfrowany i zamontowany.

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

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

Flows

W przypadku zaszyfrowanego urządzenia dostępne są 4 ścieżki. Urządzenie jest szyfrowane tylko raz, a potem uruchamia się normalnie.

  • Szyfrowanie wcześniej niezaszyfrowanego urządzenia:
    • Szyfrowanie nowego urządzenia za pomocą forceencrypt: obowiązkowe szyfrowanie przy pierwszym uruchomieniu (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, na którym nie ustawiono hasła (dotyczy urządzeń z Androidem 5.0 lub nowszym).
    • Uruchamianie zaszyfrowanego urządzenia za pomocą hasła: uruchamianie zaszyfrowanego urządzenia, które ma ustawione hasło.

Oprócz tych procesów urządzenie może też nie zaszyfrować /data. Każdy z tych procesów został szczegółowo opisany poniżej.

Szyfrowanie nowego urządzenia za pomocą polecenia 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 powinien być, ponieważ wymaga tego forceencrypt. Odłącz /data.

  2. Rozpocznij szyfrowanie/data

    vold.decrypt = "trigger_encryption" wywołuje init.rc, co powoduje, że vold szyfruje /data bez hasła. (Nie ustawiono żadnego, ponieważ powinno to być nowe urządzenie).

  3. Montowanie tmpfs

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

  4. Wyświetlanie platformy, aby pokazać postęp

    Urządzenie nie ma praktycznie żadnych danych do zaszyfrowania, więc pasek postępu nie będzie się często pojawiać, ponieważ szyfrowanie przebiega bardzo szybko. Więcej informacji o interfejsie postępu znajdziesz w artykule Szyfrowanie aktualnie używanego urządzenia.

  5. Gdy /data jest zaszyfrowany, usuń platformę

    vold ustawia vold.decrypt na trigger_default_encryption, co uruchamia usługę defaultcrypto. (Spowoduje to rozpoczęcie procesu montowania domyślnych zaszyfrowanych danych użytkownika). trigger_default_encryption sprawdza typ szyfrowania, aby ustalić, czy /data jest zaszyfrowany z użyciem hasła czy bez niego. Urządzenia z Androidem 5.0 są szyfrowane przy pierwszym uruchomieniu, więc nie powinno być ustawione hasło. Dlatego odszyfrowujemy i montujemy /data.

  6. Zamontuj /data

    init następnie montuje /data na dysku RAMDisk tmpfs, używając parametrów pobranych z ro.crypto.tmpfs_options, który jest ustawiony w init.rc.

  7. Platforma Start

    vold ustawia vold.decrypt na trigger_restart_framework, co kontynuuje zwykły proces uruchamiania.

Szyfrowanie aktualnie używanego urządzenia

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

Ten proces jest inicjowany przez użytkownika i w kodzie jest określany jako „szyfrowanie w miejscu”. Gdy użytkownik wybierze opcję szyfrowania urządzenia, interfejs sprawdzi, czy bateria jest w pełni naładowana i czy zasilacz jest podłączony, aby zapewnić wystarczającą ilość energii do zakończenia procesu szyfrowania.

Ostrzeżenie: jeśli urządzenie wyłączy się z powodu wyczerpania baterii, zanim zakończy szyfrowanie, dane w plikach pozostaną częściowo zaszyfrowane. Urządzenie musi zostać przywrócone do ustawień fabrycznych, a wszystkie dane zostaną utracone.

Aby włączyć szyfrowanie w miejscu, vold rozpoczyna pętlę odczytującą każdy sektor rzeczywistego urządzenia blokowego, a następnie zapisującą go na urządzeniu blokowym kryptograficznym. vold sprawdza, czy sektor jest używany, zanim go odczyta lub zapisze, co znacznie przyspiesza szyfrowanie na nowym urządzeniu, które zawiera niewiele danych lub nie zawiera ich wcale.

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

  1. Sprawdź hasło

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

  2. Usuń platformę

    vold sprawdza błędy, zwraca wartość -1, jeśli nie może zaszyfrować, i wyświetla w dzienniku przyczynę. Jeśli może szyfrować, ustawia właściwość vold.decrypt na trigger_shutdown_framework. Spowoduje to zatrzymanie usług init.rc w klasach late_startmain.

  3. Tworzenie kryptograficznego stopki
  4. Tworzenie pliku ścieżki
  5. Uruchom ponownie
  6. Wykrywanie pliku menu nawigacyjnego
  7. Rozpocznij szyfrowanie/data

    vold konfiguruje mapowanie kryptograficzne, które tworzy wirtualne urządzenie blokowe kryptograficzne mapowane na rzeczywiste urządzenie blokowe, ale szyfruje każdy sektor podczas zapisu i odszyfrowuje każdy sektor podczas odczytu. vold tworzy i zapisuje metadane kryptograficzne.

  8. Podczas szyfrowania zamontuj tmpfs

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

  9. Wyświetlanie platformy, aby pokazać postęp

    trigger_restart_min_framework powoduje, że init.rc rozpoczyna main klasę usług. Gdy platforma wykryje, że wartość parametru vold.encrypt_progress wynosi 0, wyświetli interfejs paska postępu, który co 5 sekund wysyła zapytanie o tę właściwość i aktualizuje pasek postępu. Pętla szyfrowania aktualizuje wartość vold.encrypt_progress za każdym razem, gdy zaszyfruje kolejny procent partycji.

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

    Gdy /data zostanie zaszyfrowany, vold wyczyści 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 ponowne uruchomienie z jakiegoś powodu się nie powiedzie, vold ustawi wartość właściwości vold.encrypt_progress na error_reboot_failed, a interfejs powinien wyświetlić komunikat z prośbą o naciśnięcie przycisku w celu ponownego uruchomienia. Nie powinno się to nigdy zdarzyć.

Uruchamianie zaszyfrowanego urządzenia z domyślnym szyfrowaniem

Tak wygląda uruchamianie zaszyfrowanego urządzenia bez hasła. Urządzenia z Androidem 5.0 są szyfrowane przy pierwszym uruchomieniu, więc nie powinno być ustawionego hasła. Jest to więc domyślny stan szyfrowania.

  1. Wykrywanie zaszyfrowanych /data bez hasła

    Wykrywanie, że urządzenie z Androidem jest zaszyfrowane, ponieważ /data nie można zamontować i ustawiona jest jedna z flag encryptable lub forceencrypt.

    vold ustawia vold.decrypt na trigger_default_encryption, co uruchamia usługę defaultcrypto. trigger_default_encryptionsprawdza typ szyfrowania, aby określić, czy /data jest zaszyfrowany z hasłem czy bez niego.

  2. Odszyfruj /data

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

  3. Montowanie /data

    vold następnie montuje odszyfrowaną prawdziwą /data partycję, a potem przygotowuje nową partycję. Ustawia właściwość vold.post_fs_data_done na 0, a następnie ustawia vold.decrypt na trigger_post_fs_data. Powoduje to uruchomienie poleceń post-fs-datainit.rc. Tworzą one wszystkie niezbędne katalogi lub linki, a następnie ustawiają wartość vold.post_fs_data_done na 1.

    Gdy usługa vold zobaczy w tej właściwości wartość 1, ustawi właściwość vold.decrypt na: trigger_restart_framework.. Spowoduje to ponowne uruchomienie usług w klasie main przez usługę init.rc, a także pierwsze uruchomienie usług w klasie late_start od czasu uruchomienia urządzenia.

  4. Platforma Start

    Platforma uruchamia teraz wszystkie swoje usługi za pomocą odszyfrowanego /data, a system jest gotowy do użycia.

Uruchamianie zaszyfrowanego urządzenia bez domyślnego szyfrowania

Gdy uruchomisz zaszyfrowane urządzenie z ustawionym hasłem, stanie się to, co opisujemy poniżej. 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 szyfrowany za pomocą hasła.

  2. Montowanie tmpfs

    init ustawia 5 właściwości, aby zapisać początkowe opcje montowania podane dla /data z parametrami przekazanymi z init.rc. vold używa tych właściwości do skonfigurowania 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-cyfrowa liczba szesnastkowa ASCII poprzedzona ciągiem znaków 0x)
  3. Uruchamianie platformy w celu wyświetlenia prośby o podanie hasła

    Framework uruchamia się i widzi, że vold.decrypt ma wartość trigger_restart_min_framework. Informuje to platformę, że uruchamia się ona na dysku tmpfs /data i musi pobrać hasło użytkownika.

    Najpierw jednak musi się upewnić, że dysk został prawidłowo zaszyfrowany. 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 to na podstawie metadanych kryptowaluty, w których szuka flagi CRYPTO_ENCRYPTION_IN_PROGRESS. Jeśli jest ustawiony, oznacza to, że proces szyfrowania został przerwany i na urządzeniu nie ma użytecznych danych. Jeśli funkcja vold zwróci błąd, interfejs powinien wyświetlić użytkownikowi komunikat z prośbą o ponowne uruchomienie urządzenia i przywrócenie go do ustawień fabrycznych oraz przycisk, który użytkownik może nacisnąć, aby to zrobić.

  4. Odszyfrowywanie danych za pomocą hasła

    Gdy cryptfs cryptocomplete zakończy się pomyślnie, framework wyświetli interfejs z prośbą o podanie hasła do dysku. Interfejs sprawdza hasło, wysyłając polecenie cryptfs checkpw do vold. Jeśli hasło jest prawidłowe (co jest określane przez pomyślne zamontowanie odszyfrowanego /data w tymczasowej lokalizacji, a następnie odmontowanie go), vold zapisuje nazwę odszyfrowanego urządzenia blokowego we właściwości ro.crypto.fs_crypto_blkdev i zwraca do interfejsu stan 0. Jeśli hasło jest nieprawidłowe, zwraca do interfejsu wartość -1.

  5. Zasady dotyczące zatrzymania

    Interfejs wyświetla grafikę rozruchu kryptograficznego, a następnie wywołuje vold z poleceniem cryptfs restart. vold ustawia właściwość vold.decrypt na trigger_reset_main, co powoduje, że init.rc wykonuje class_reset main. Spowoduje to zatrzymanie wszystkich usług w klasie głównej, co umożliwi odmontowanie tmpfs/data.

  6. Zamontuj /data

    vold montuje odszyfrowaną prawdziwą /data partycję i przygotowuje nową partycję (która mogła nigdy nie zostać przygotowana, jeśli została zaszyfrowana za pomocą opcji czyszczenia, która nie jest obsługiwana w pierwszej wersji). Ustawia właściwość vold.post_fs_data_done na 0, a następnie vold.decrypt na trigger_post_fs_data. Spowoduje to uruchomienie poleceń post-fs-datainit.rc. Tworzy on wszystkie niezbędne katalogi lub linki, a następnie ustawia wartość zmiennej vold.post_fs_data_done na 1. Gdy vold zobaczy w tej właściwości wartość 1, ustawi właściwość vold.decrypt na trigger_restart_framework. Spowoduje to ponowne uruchomienie usług init.rc w klasie main, a także uruchomienie usług w klasie late_start po raz pierwszy od uruchomienia urządzenia.

  7. Rozpocznij pełne zasady

    Teraz platforma uruchamia wszystkie swoje 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 działać nieprawidłowo z kilku powodów. Urządzenie rozpoczyna normalną serię czynności związanych z uruchamianiem:

  1. Wykrywanie zaszyfrowanego urządzenia za pomocą hasła
  2. Podłączanie tmpfs
  3. Uruchomienie platformy, która wyświetla prośbę o podanie hasła

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

  • Hasło pasuje, ale nie można odszyfrować danych
  • Użytkownik 30 razy wpisuje nieprawidłowe hasło

Jeśli te błędy nie zostaną rozwiązane, 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 platforma działa, vold ustawia wartość właściwości vold.encrypt_progress na error_not_encrypted. Interfejs wyświetla prośbę o ponowne uruchomienie urządzenia i informuje, że proces szyfrowania nigdy się nie rozpoczął. Jeśli błąd wystąpi po zamknięciu struktury, ale przed wyświetleniem interfejsu paska postępu, vold ponownie uruchomi system. Jeśli ponowne uruchomienie się nie powiedzie, ustawia wartość vold.encrypt_progress na error_shutting_down i zwraca –1, ale nie będzie można przechwycić błędu. Nie powinno się to zdarzyć.

Jeśli podczas procesu szyfrowania funkcja vold wykryje błąd, ustawi wartość vold.encrypt_progress na error_partially_encrypted i zwróci wartość -1. Interfejs powinien wtedy wyświetlić komunikat o niepowodzeniu szyfrowania i przycisk umożliwiający przywrócenie urządzenia do ustawień fabrycznych.

Przechowywanie zaszyfrowanego klucza

Zaszyfrowany klucz jest przechowywany w metadanych kryptograficznych. Ochrona sprzętowa jest realizowana za pomocą funkcji podpisywania zaufanego środowiska wykonawczego (TEE). Wcześniej klucz główny był szyfrowany za pomocą klucza wygenerowanego przez zastosowanie algorytmu scrypt do hasła użytkownika i przechowywanego saltu. Aby klucz był odporny na ataki zewnętrzne, rozszerzamy ten algorytm, podpisując wynikowy klucz za pomocą przechowywanego klucza TEE. Wynikowy podpis jest następnie przekształcany w klucz o odpowiedniej długości przez kolejne zastosowanie funkcji scrypt. Ten klucz jest następnie używany do szyfrowania i odszyfrowywania klucza głównego. Aby zapisać ten klucz:

  1. Wygeneruj losowy 16-bajtowy klucz szyfrowania dysku (DEK) i 16-bajtowy sól.
  2. Zastosuj algorytm scrypt do hasła użytkownika i soli, aby uzyskać 32-bajtowy klucz pośredni 1 (IK1).
  3. Dopełnij IK1 zerami do rozmiaru klucza prywatnego powiązanego ze sprzętem (HBK). W szczególności dodajemy dopełnienie w postaci: 00 || IK1 || 00..00; jeden bajt zerowy, 32 bajty IK1, 223 bajty zerowe.
  4. Podpisz uzupełniony klucz IK1 za pomocą klucza HBK, aby uzyskać 256-bajtowy klucz IK2.
  5. Zastosuj funkcję scrypt do IK2 i ciągu zaburzającego (tego samego co w kroku 2), aby uzyskać 32-bajtowy ciąg IK3.
  6. Użyj pierwszych 16 bajtów IK3 jako KEK, a ostatnich 16 bajtów jako IV.
  7. Zaszyfruj klucz DEK za pomocą algorytmu AES_CBC z użyciem klucza KEK i wektora inicjującego IV.

Zmiana hasła

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

Właściwości szyfrowania

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

Właściwości Vold

Właściwość Opis
vold.decrypt trigger_encryption zaszyfrować dysk bez hasła.
vold.decrypt trigger_default_encryption Sprawdź, czy dysk jest zaszyfrowany bez hasła. Jeśli tak, odszyfruj i zamontuj go, w przeciwnym razie ustaw vold.decrypt na trigger_restart_min_framework.
vold.decrypt trigger_reset_main Ustawiane przez vold w celu zamknięcia interfejsu proszącego o hasło do dysku.
vold.decrypt trigger_post_fs_data Ustawione przez vold w celu przygotowania /data z niezbędnymi katalogami itp.
vold.decrypt trigger_restart_framework Ustawione przez vold, aby uruchomić prawdziwą strukturę i wszystkie usługi.
vold.decrypt trigger_shutdown_framework Ustawione przez vold, aby wyłączyć całą strukturę i rozpocząć szyfrowanie.
vold.decrypt trigger_restart_min_framework Ustawione przez vold, aby uruchomić interfejs paska postępu szyfrowania lub wyświetlić prośbę o podanie hasła w zależności od wartości ro.crypto.state.
vold.encrypt_progress Gdy platforma się uruchomi, a ta właściwość jest ustawiona, przejdź do trybu interfejsu paska postępu.
vold.encrypt_progress 0 to 100 Interfejs paska postępu powinien wyświetlać ustawioną wartość procentową.
vold.encrypt_progress error_partially_encrypted W interfejsie paska postępu powinna się wyświetlać informacja o niepowodzeniu szyfrowania. Użytkownik powinien mieć możliwość przywrócenia urządzenia do ustawień fabrycznych.
vold.encrypt_progress error_reboot_failed W interfejsie paska postępu powinien wyświetlać się komunikat o zakończeniu szyfrowania oraz przycisk ponownego uruchomienia urządzenia. Ten błąd nie powinien wystąpić.
vold.encrypt_progress error_not_encrypted W interfejsie paska postępu powinien wyświetlać się komunikat o wystąpieniu błędu, braku zaszyfrowanych lub utraconych danych oraz przycisk ponownego uruchomienia systemu.
vold.encrypt_progress error_shutting_down Interfejs paska postępu nie jest uruchomiony, więc nie wiadomo, kto odpowie na ten błąd. I tak nie powinno się to zdarzyć.
vold.post_fs_data_done 0 Ustawione przez użytkownika vold tuż przed ustawieniem wartości vold.decrypt na trigger_post_fs_data.
vold.post_fs_data_done 1 Ustawione przez init.rc lub init.rc zaraz po zakończeniu zadaniapost-fs-data.

właściwości inicjowania,

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 ten system działa z niezaszyfrowanym /data ro.crypto.state encrypted. Ustawione przez init, aby wskazywać, ż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 on zamontować /data z parametrami przekazanymi z init.rc. vold używa tych informacji do skonfigurowania mapowania kryptowalut.
ro.crypto.tmpfs_options Ustawione przez init.rc z opcjami, których init powinien używać podczas montowania systemu plików tmpfs /data.

działania inicjowania,

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