Full-Disk Encryption

Szyfrowanie całego dysku to proces szyfrowania wszystkich danych użytkownika na urządzeniu z systemem Android przy użyciu zaszyfrowanego klucza. Po zaszyfrowaniu urządzenia wszystkie dane utworzone przez użytkownika są automatycznie szyfrowane przed zapisaniem ich na dysku, a wszystkie odczyty automatycznie odszyfrowują dane przed zwróceniem ich do procesu wywołującego.

Szyfrowanie całego dysku zostało wprowadzone do Androida w wersji 4.4, ale Android 5.0 wprowadził te nowe funkcje:

  • Szybkie szyfrowanie, które szyfruje tylko używane bloki na partycji danych, aby uniknąć długiego pierwszego rozruchu. Obecnie tylko systemy plików ext4 i f2fs obsługują szybkie szyfrowanie.
  • Dodano flagę forceencrypt fstab, aby szyfrować przy pierwszym uruchomieniu.
  • Dodano obsługę wzorców i szyfrowania bez hasła.
  • Dodano wspierane sprzętowo przechowywanie klucza szyfrowania przy użyciu funkcji podpisywania Trusted Execution Environment (TEE) (np. w strefie TrustZone). Zobacz Przechowywanie zaszyfrowanego klucza, aby uzyskać więcej szczegółów.

Uwaga: Urządzenia uaktualnione do systemu Android 5.0 i następnie zaszyfrowane mogą zostać przywrócone do stanu niezaszyfrowanego przez przywrócenie danych fabrycznych. Nowe urządzenia z systemem Android 5.0 zaszyfrowane przy pierwszym uruchomieniu nie mogą zostać przywrócone do stanu niezaszyfrowanego.

Jak działa pełne szyfrowanie dysku w systemie Android

Szyfrowanie pełnego dysku w systemie Android jest oparte na dm-crypt, która jest funkcją jądra działającą w warstwie urządzeń blokowych. Z tego powodu, szyfrowanie działa z Embedded MultiMediaCard (eMMC) i podobnymi urządzeniami flash, które przedstawiają się jądru jako urządzenia blokowe. Szyfrowanie nie jest możliwe w przypadku YAFFS, który komunikuje się bezpośrednio z surowym układem NAND flash.

Algorytm szyfrowania to 128 Advanced Encryption Standard (AES) z łańcuchowaniem szyfrów (CBC) i ESSIV:SHA256. Klucz główny jest szyfrowany 128-bitowym AES za pomocą wywołań do biblioteki OpenSSL. Musisz użyć 128 bitów lub więcej dla klucza (256 jest opcjonalne).

Uwaga: Producenci OEM mogą użyć 128 bitów lub więcej do zaszyfrowania klucza głównego.

W wydaniu Androida 5.0, są cztery rodzaje stanów szyfrowania:

  • domyślny
  • PIN
  • hasło
  • wzór

Przy pierwszym uruchomieniu urządzenie tworzy losowo wygenerowany 128-bitowy klucz główny, a następnie haszuje go za pomocą domyślnego hasła i przechowywanej soli. Domyślne hasło to: „default_password „Jednak wynikowy skrót jest również podpisywany przez TEE (np. TrustZone), który używa skrótu podpisu do zaszyfrowania klucza głównego.

Domyślne hasło można znaleźć w pliku cryptfs.cpp projektu Android Open Source.

Gdy użytkownik ustawi PIN/pass lub hasło na urządzeniu, tylko 128-bitowy klucz jest ponownie szyfrowany i przechowywany. (tzn. zmiany PIN-u/passu/wzoru użytkownika NIE powodują ponownego zaszyfrowania danych użytkownika). Należy pamiętać, że zarządzane urządzenia mogą podlegać ograniczeniom dotyczącym PIN-u, wzoru lub hasła.

Szyfrowaniem zarządzają init i vold.init wywołuje vold, a vold ustawia właściwości, aby wywołać zdarzenia w init. Inne części systemu również patrzą na te właściwości, aby wykonywać takie zadania, jak raportowanie stanu, pytanie o hasło lub monit o przywrócenie 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, oraz clearpw.

Aby zaszyfrować, odszyfrować lub wymazać /data, /data nie może być zamontowany. Jednakże, aby wyświetlić jakikolwiek interfejs użytkownika (UI), framework musi się uruchomić, a framework wymaga, aby /data był uruchomiony. Aby rozwiązać ten problem, tymczasowy system plików jest montowany na /data.To pozwala Androidowi pytać o hasła, pokazywać postęp, lub sugerować wyczyszczenie danych w razie potrzeby. Nie nakłada ograniczenia, że w celu przełączenia się z tymczasowego systemu plików do prawdziwego systemu plików /data, system musi zatrzymać każdy proces z otwartymi plikami na tymczasowym systemie plików i ponownie uruchomić teprocesy na prawdziwym systemie plików /data. Aby to zrobić, wszystkie usługi muszą należeć do jednej z trzech grup: core, main, ilate_start.

  • core: Nigdy nie są zamykane po uruchomieniu.
  • main: Wyłączenie, a następnie ponowne uruchomienie po wprowadzeniu hasła dysku.
  • late_start: Uruchamia się dopiero po odszyfrowaniu i zamontowaniu /data.

Aby wywołać te działania, właściwość vold.decrypt jest ustawiana na różne ciągi znaków.Aby zabijać i ponownie uruchamiać usługi, polecenia init to:

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

Przepływy

Dla zaszyfrowanego urządzenia istnieją cztery przepływy. Urządzenie jest szyfrowane tylko raz, a następnie przechodzi normalny przepływ rozruchowy.

  • Zaszyfruj poprzednio niezaszyfrowane urządzenie:
    • Szyfruj nowe urządzenie za pomocą forceencrypt: Obowiązkowe szyfrowanie przy pierwszym uruchomieniu (począwszy od Androida L).
    • Szyfruj istniejące urządzenie: Szyfrowanie inicjowane przez użytkownika (Android K i wcześniejsze).
  • Rozruch 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 systemem Android 5.0 i nowszym).
    • Uruchamianie zaszyfrowanego urządzenia z hasłem: Uruchamianie zaszyfrowanego urządzenia, które ma ustawione hasło.

Oprócz tych przepływów, urządzenie może również nie zaszyfrować /data.Każdy z przepływów jest szczegółowo wyjaśniony poniżej.

Szyfrowanie nowego urządzenia za pomocą forceencrypt

Jest to normalne pierwsze uruchomienie dla urządzenia z systemem Android 5.0.

  1. Wykrywanie niezaszyfrowanego systemu plików z flagą forceencrypt

    /data nie jest zaszyfrowany, ale musi być, ponieważ forceencrypt tego wymaga.Odmontuj /data.

  2. Rozpocznij szyfrowanie /data

    vold.decrypt = "trigger_encryption" wyzwala init.rc,co spowoduje, że vold zaszyfruje /data bez hasła.(None jest ustawione, ponieważ powinno to być nowe urządzenie.)

  3. Mount tmpfs

    vold montuje tmpfs /data (używając opcji tmpfs zro.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. Bring up framework to show progress

    Because the device has virtually no data to encrypt, the progress bar willoften not actually appear because encryption happens so quickly. ZobaczEncrypt an existing device for moreredetails about the progress UI.

  5. Kiedy /data jest zaszyfrowane, zdejmij framework

    vold ustawia vold.decrypt natrigger_default_encryption, co uruchamia usługędefaultcrypto. (To uruchamia poniższy przepływ dla montowania domyślnie zaszyfrowanych danych użytkownika). trigger_default_encryption sprawdza typencryption, aby zobaczyć, czy /data jest zaszyfrowany z lub bez 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. Mount /data

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

  7. Start framework

    Ustawia vold na trigger_restart_framework, co kontynuuje zwykły proces rozruchu.

Szyfrowanie istniejącego urządzenia

Tak dzieje się w przypadku szyfrowania niezaszyfrowanego urządzenia z systemem Android K lub wcześniejszym, które zostało zmigrowane do systemu L.

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

Ostrzeżenie: Jeśli w urządzeniu zabraknie energii i wyłączy się ono przed zakończeniem szyfrowania, dane pliku pozostaną w stanie częściowo zaszyfrowanym. The device mustbe factory reset and all data is lost.

Aby włączyć szyfrowanie inplace, vold uruchamia pętlę w celu odczytania każdego sektora urządzenia real block, a następnie zapisania go do urządzenia crypto block. vold sprawdza, czy sektor jest w użyciu przed odczytaniem i zapisaniem go, co znacznie przyspiesza szyfrowanie na nowym urządzeniu, które ma niewiele lub żadnych danych.

Stan urządzenia: Set ro.crypto.state = "unencrypted"and execute the on nonencrypted init trigger to continue booting.

  1. Check password

    The UI calls vold with the command cryptfs enablecrypto inplacewhere passwd is the user’s lock screen password.

  2. Take down the framework

    vold checks for errors, returns -1 if it can’t encrypt, andprints a reason in the log. Jeśli może szyfrować, ustawia właściwość vold.decrypt na trigger_shutdown_framework. Powoduje to, że init.rc zatrzymuje usługi w klasach late_start i main.

  3. Utwórz stopkę kryptograficzną
  4. Utwórz plik breadcrumb
  5. Reboot
  6. Detect breadcrumb file
  7. Rozpocznij szyfrowanie /data

    vold następnie ustawia mapowanie krypt, co powoduje utworzenie wirtualnego urządzenia kryptograficznego, które odwzorowuje rzeczywiste urządzenie blokowe, ale szyfruje każdy sektor podczas zapisu i odszyfrowuje każdy sektor podczas odczytu. vold następnie tworzy i wypisuje metadane crypto.

  8. Podczas szyfrowania, mount 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. Bring up framework to show progress

    trigger_restart_min_framework causes init.rc tostart the main class of services. Gdy framework widzi, że wartośćvold.encrypt_progress jest ustawiona na 0, przywołuje progress barUI, który odpytywał tę właściwość co pięć sekund i aktualizował pasek postępu.Pętla szyfrowania aktualizuje vold.encrypt_progress za każdym razem, gdy szyfruje kolejny procent partycji.

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

    Gdy /data jest pomyślnie zaszyfrowany, vold wyczyści flagę ENCRYPTION_IN_PROGRESS w metadanych.

    Gdy urządzenie zostanie pomyślnie odblokowane, hasło jest następnie używane do zaszyfrowania klucza głównego, a stopka kryptograficzna jest aktualizowana.

    Jeśli ponowne uruchomienie z jakiegoś powodu nie powiedzie się, vold ustawia właściwośćvold.encrypt_progress na error_reboot_failed, a interfejs użytkownika powinien wyświetlić komunikat z prośbą o naciśnięcie przycisku w celu ponownego uruchomienia. Nie oczekuje się, że taka sytuacja kiedykolwiek wystąpi.

Uruchamianie zaszyfrowanego urządzenia z domyślnym szyfrowaniem

To jest to, co się dzieje, gdy uruchamiasz zaszyfrowane urządzenie bez hasła.Ponieważ urządzenia z systemem Android 5.0 są szyfrowane przy pierwszym uruchomieniu, nie powinno być ustawionego hasła i dlatego jest to domyślny stan szyfrowania.

  1. Wykryj zaszyfrowane /data bez hasła

    Wykryj, że urządzenie z systemem Android jest zaszyfrowane, ponieważ /datanie można zamontować i ustawiona jest jedna z flag encryptable lubforceencrypt.

    vold ustawia vold.decrypt natrigger_default_encryption, co uruchamia usługędefaultcrypto. trigger_default_encryption sprawdza typ szyfrowania, aby sprawdzić, czy /data jest szyfrowane z hasłem czy bez niego.

  2. Odszyfruj /dane

    Tworzy urządzenie dm-crypt nad urządzeniem blokowym, dzięki czemu jest ono gotowe do użycia.

  3. Zamontuj /dane

    vold następnie montuje odszyfrowaną prawdziwą /data partycję, a następnie 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, że init.rc uruchamia polecenia post-fs-data. Utworzą one wszelkie niezbędne katalogi lub łącza, a następnie ustawią vold.post_fs_data_done na 1.

    Kiedy vold zobaczy 1 w tej właściwości, ustawi właściwośćvold.decrypt na: trigger_restart_framework. Thiscauses init.rc to start services in class mainagain and also start services in class late_start for the firsttime since boot.

  4. Start framework

    Now the framework boots all its services using the decrypted /data,and the system is ready for use.

Uruchamianie zaszyfrowanego urządzenia bez domyślnego szyfrowania

Tak dzieje się, gdy uruchamiasz zaszyfrowane urządzenie z ustawionym hasłem. Hasłem urządzenia może być pin, wzór lub hasło.

  1. Wykryj zaszyfrowane urządzenie z hasłem

    Wykrywa, że urządzenie z systemem Android jest zaszyfrowane, ponieważ flagaro.crypto.state = "encrypted"

    vold ustawia vold.decrypt natrigger_restart_min_framework, ponieważ /data jest zaszyfrowane hasłem.

  2. Mount tmpfs

    init ustawia pięć 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 ustawienia mapowania crypto:

    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-cyfrowa liczba heksadecymalna poprzedzona 0x)
  3. Start framework to prompt for password

    Ramework uruchamia się i widzi, że vold.decrypt jest ustawione natrigger_restart_min_framework. To mówi frameworkowi, że jest uruchamiany na dysku tmpfs /data i musi uzyskać hasło użytkownika.

    Najpierw jednak musi się upewnić, że dysk został prawidłowo zaszyfrowany. Wysyła polecenie cryptfs cryptocomplete do vold.vold zwraca 0, jeśli szyfrowanie zostało zakończone pomyślnie, -1 przy błędzie wewnętrznym, lub-2, jeśli szyfrowanie nie zostało zakończone pomyślnie. vold określa to, szukając w metadanych crypto flagi CRYPTO_ENCRYPTION_IN_PROGRESS. Jeśli jest ona ustawiona, proces szyfrowania został przerwany, a na urządzeniu znajdują się dane nousable. Jeśli vold zwróci błąd, interfejs użytkownika powinien wyświetlić komunikat dla użytkownika o ponownym uruchomieniu i przywróceniu ustawień fabrycznych urządzenia oraz podać mu przycisk, który należy nacisnąć, aby to zrobić.

  4. Decrypt data with password

    Po pomyślnym zakończeniu operacji cryptfs cryptocomplete framework wyświetla interfejs użytkownika z prośbą o podanie hasła dysku. UI sprawdza hasło wysyłając komendę cryptfs checkpw do vold. Jeśli hasło jest poprawne (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ściro.crypto.fs_crypto_blkdev i zwraca stan 0 do UI. Jeśli hasło jest nieprawidłowe, zwraca -1 do interfejsu użytkownika.

  5. Stop framework

    UI umieszcza grafikę rozruchu kryptowaluty, a następnie wywołuje vold za pomocą polecenia cryptfs restart. vold ustawia właściwośćvold.decrypt na trigger_reset_main, co powoduje, żeinit.rc wykonuje class_reset main. Zatrzymuje to wszystkie usługi w klasie main, co pozwala na odmontowanie tmpf /data.

  6. Mount /data

    vold następnie montuje zdeszyfrowaną prawdziwą partycję /data i przygotowuje nową partycję (która mogła nigdy nie zostać przygotowana, jeśli została zaszyfrowana z opcją wipe, która nie jest obsługiwana w pierwszym wydaniu). Ustawia właściwość vold.post_fs_data_done na 0, a następnie ustawia vold.decrypt na trigger_post_fs_data. Powoduje to, żeinit.rc uruchamia swoje polecenia post-fs-data. Utworzą one wszelkie niezbędne katalogi lub łącza, a następnie ustawią właściwość vold.post_fs_data_done na 1. Gdy vold zobaczy 1 w tej właściwości, ustawi właściwość vold.decrypt natrigger_restart_framework. Powoduje to, że init.rc ponownie uruchamia usługi w klasie main, a także uruchamia usługi w klasielate_start po raz pierwszy od uruchomienia systemu.

  7. Uruchom pełny framework

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

Powodzenie

Urządzenie, które nie udaje się odszyfrować, może być uszkodzone z kilku powodów. Urządzenie rozpoczyna się od normalnej serii kroków do rozruchu:

  1. Detect encrypted device with a password
  2. Mount tmpfs
  3. Start framework to prompt for password

Ale po otwarciu frameworka, urządzenie może napotkać pewne błędy:

  • Password matches but cannot decrypt data
  • User enters wrong password 30 times

If these errors are not resolved, prompt user to factory wipe:

If vold detects an error during the encryption process, and if no data has been destroyed yet and the framework is up, vold setsthe property vold.encrypt_progress to error_not_encrypted.Interfejs użytkownika monituje o ponowne uruchomienie komputera i ostrzega, że proces szyfrowania nigdy się nie rozpoczął. Jeśli błąd wystąpi po zdemontowaniu frameworka, ale przed pojawieniem się interfejsu użytkownika z paskiem postępu, vold zrestartuje system. Jeśli restart się nie powiedzie, ustawi vold.encrypt_progress naerror_shutting_down i zwróci -1; ale nie będzie niczego, co mogłoby wychwycić błąd. Nie oczekuje się, że tak się stanie.

Jeśli vold wykryje błąd podczas procesu szyfrowania, ustawi vold.encrypt_progress na error_partially_encrypted i zwróci -1. UI powinien wtedy wyświetlić komunikat mówiący, że szyfrowanie nie powiodło się i zapewnić użytkownikowi przycisk do przywrócenia ustawień fabrycznych urządzenia.

Przechowywanie zaszyfrowanego klucza

Zaszyfrowany klucz jest przechowywany w metadanych crypto. Podkład sprzętowy jest implementowany poprzez wykorzystanie możliwości podpisywania Trusted Execution Environment (TEE).Poprzednio szyfrowaliśmy klucz główny kluczem wygenerowanym przez zastosowanie scrypta do hasła użytkownika i przechowywanej soli. Aby uodpornić klucz na ataki off-box, rozszerzamy ten algorytm o podpisywanie klucza wynikowego przechowywanym kluczem TEE. Wynikowy podpis jest następnie przekształcany w klucz o odpowiedniej długości przez kolejne zastosowanie scrypta. Klucz ten jest następnie używany do szyfrowania i deszyfrowania klucza głównego. Aby przechowywać ten klucz:

  1. Generowanie losowego 16-bajtowego klucza szyfrowania dysku (DEK) i 16-bajtowej soli.
  2. Zastosuj scrypt do hasła użytkownika i soli, aby utworzyć 32-bajtowy klucz pośredni 1 (IK1).
  3. Pad IK1 z zerowymi bajtami do rozmiaru klucza prywatnego związanego sprzętowo (HBK).W szczególności, padamy jako: 00 || IK1 || 00..00; jeden bajt zerowy, 32 bajty IK1, 223 bajty zerowe.
  4. Sign wyściełał IK1 z HBK, aby otrzymać 256-bajtowe IK2.
  5. Zastosuj scrypt do IK2 i soli (ta sama sól co w kroku 2), aby otrzymać 32-bajtowe IK3.
  6. Użyj pierwszych 16 bajtów IK3 jako KEK, a ostatnich 16 bajtów jako IV.
  7. Szyfruj DEK przy użyciu AES_CBC, z kluczem KEK i wektorem inicjalizacyjnym IV.

Zmiana hasła

Gdy użytkownik zdecyduje się zmienić lub usunąć swoje hasło w ustawieniach, interfejs użytkownika wysyła polecenie cryptfs changepw do vold, avold ponownie szyfruje klucz główny dysku z nowym hasłem.

Właściwości szyfrowania

vold i init komunikują się ze sobą poprzez ustawianie właściwości. Oto lista dostępnych właściwości dla 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ź dysk, czy jest zaszyfrowany bez hasła.Jeśli tak, odszyfruj go i zamontuj,w przeciwnym razie ustaw vold.decrypt na trigger_restart_min_framework.
vold.decrypt trigger_reset_main Ustawione przez volda aby wyłączyć UI pytające o hasło do dysku.
vold.decrypt trigger_post_fs_data Ustawione przez volda aby przygotować /data z potrzebnymi katalogami, et al.
vold.decrypt trigger_restart_framework Ustawione przez vold, aby uruchomić prawdziwy framework i wszystkie usługi.
vold.decrypt trigger_shutdown_framework Ustawione przez vold, aby wyłączyć pełny framework, aby rozpocząć szyfrowanie.
vold.decrypt trigger_restart_min_framework Ustawione przez vold, aby uruchomić pasek postępu UI dla szyfrowania lub monit o hasło, w zależności od wartości ro.crypto.state.
vold.encrypt_progress Gdy framework się uruchamia, jeśli ta właściwość jest ustawiona, włącza tryb UI paska postępu.
vold.encrypt_progress 0 to 100 UI paska postępu powinien wyświetlać ustawioną wartość procentową.
vold.encrypt_progress error_partially_encrypted W interfejsie użytkownika paska postępu powinien zostać wyświetlony komunikat o niepowodzeniu szyfrowania i dać użytkownikowi możliwość fabrycznego zresetowania urządzenia.
vold.encrypt_progress error_reboot_failed W interfejsie użytkownika paska postępu powinien zostać wyświetlony komunikat o zakończeniu szyfrowania i dać użytkownikowi przycisk do ponownego uruchomienia urządzenia. Ten błąd nie powinien wystąpić.
vold.encrypt_progress error_not_encrypted Instrukcja obsługi paska postępu powinna wyświetlić komunikat o wystąpieniu błędu, braku zaszyfrowania lub utraty danych oraz udostępnić użytkownikowi przycisk umożliwiający ponowne uruchomienie systemu.
vold.encrypt_progress error_shutting_down Instrukcja obsługi paska postępu nie jest uruchomiona, więc nie wiadomo, kto zareaguje na ten błąd. I tak nie powinno się to nigdy zdarzyć.
vold.post_fs_data_done 0 Ustawiony przez vold tuż przed ustawieniem vold.decrypt na trigger_post_fs_data.
vold.post_fs_data_done 1 Ustawiony przez init.rc lub init.rc tuż po zakończeniu zadania post-fs-data.

init properties

Property Description
ro.crypto.fs_crypto_blkdev Ustawiane przez polecenie vold checkpw w celu późniejszego wykorzystania przez polecenie vold restart.
ro.crypto.state unencrypted Ustawiane przez init, aby powiedzieć, że ten system działa z niezaszyfrowanym /data ro.crypto.state encrypted. Ustawione przez init, aby powiedzieć, że ten system jest uruchomiony 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 pięć właściwości są ustawiane przez init, gdy próbuje zamontować /data z parametrami przekazanymi z init.rc. vold używa ich do skonfigurowania mapowania kryptograficznego.
ro.crypto.tmpfs_options Ustawiane przez init.rc z opcjami, których init powinien użyć podczas montowania systemu plików tmpfs /data.

Akcje init

.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.