Szyfrowanie całego dysku

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

Szyfrowanie całego dysku zostało wprowadzone w systemie Android w wersji 4.4, ale w systemie Android 5.0 wprowadzono następujące nowe funkcje:

  • Utworzono szybkie szyfrowanie, które szyfruje tylko używane bloki na partycji danych, aby pierwsze uruchomienie nie trwało długo. Obecnie szybkie szyfrowanie obsługują tylko systemy plików ext4 i f2fs.
  • Dodano flagę forceencrypt fstab do szyfrowania przy pierwszym uruchomieniu.
  • Dodano obsługę wzorców i szyfrowania bez hasła.
  • Dodano sprzętowe przechowywanie klucza szyfrowania przy użyciu możliwości podpisywania Trusted Execution Environment (TEE) (np. w TrustZone). Aby uzyskać więcej informacji, zobacz Przechowywanie zaszyfrowanego klucza .

Uwaga: urządzenia zaktualizowane do systemu Android 5.0, a następnie zaszyfrowane, mogą zostać przywrócone do stanu niezaszyfrowanego poprzez przywrócenie danych fabrycznych. Nowych urządzeń z Androidem 5.0 zaszyfrowanych przy pierwszym uruchomieniu nie można przywrócić do stanu niezaszyfrowanego.

Jak działa szyfrowanie całego dysku w systemie Android

Szyfrowanie całego dysku w systemie Android opiera się na dm-crypt , czyli funkcji jądra działającej w warstwie urządzeń blokowych. Z tego powodu szyfrowanie działa z wbudowanymi kartami MultiMediaCard ( eMMC) i podobnymi urządzeniami flash, które jadą dla jądra jako urządzenia blokowe. Szyfrowanie nie jest możliwe w przypadku YAFFS, który komunikuje się bezpośrednio z surowym układem flash NAND.

Algorytm szyfrowania to 128 Advanced Encryption Standard (AES) z łączeniem bloków szyfru (CBC) i ESSIV:SHA256. Klucz główny jest szyfrowany 128-bitowym AES poprzez wywołania biblioteki OpenSSL. Musisz użyć klucza o długości 128 lub więcej (przy czym 256 jest opcjonalne).

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

W wersji Androida 5.0 dostępne są cztery rodzaje stanów szyfrowania:

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

Przy pierwszym uruchomieniu urządzenie tworzy losowo wygenerowany 128-bitowy klucz główny, a następnie miesza go z domyślnym hasłem i przechowywaną solą. Domyślne hasło to: „hasło_domyślne”. Jednakże wynikowy skrót jest również podpisywany przez TEE (taki jak TrustZone), który wykorzystuje skrót podpisu do szyfrowania klucza głównego.

Domyślne hasło zdefiniowane w pliku cryptfs.cpp projektu Android Open Source.

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

Szyfrowaniem zarządzają init i vold . init wywołuje vold , a vold ustawia właściwości wyzwalające zdarzenia w init. Inne części systemu również sprawdzają właściwości w celu wykonywania zadań, takich jak raportowanie stanu, żądanie hasła 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 cryptfs vdc : checkpw , restart , enablecrypto , changepw , cryptocomplete , verifypw , setfield , getfield , mountdefaultencrypted , getpwtype , getpw i clearpw .

Aby zaszyfrować, odszyfrować lub wyczyścić /data , /data nie może być zamontowany. Aby jednak wyświetlić dowolny interfejs użytkownika (UI), platforma musi zostać uruchomiona, a do uruchomienia wymaga /data . Aby rozwiązać tę zagadkę, tymczasowy system plików jest montowany w /data . Dzięki temu system Android może pytać o hasła, pokazywać postęp lub sugerować czyszczenie danych, jeśli to konieczne. Narzuca jednak ograniczenie polegające na tym, że aby przełączyć się z tymczasowego systemu plików na prawdziwy system /data , system musi zatrzymać każdy proces z otwartymi plikami w tymczasowym systemie plików i zrestartować te procesy w prawdziwym systemie plików /data . Aby to zrobić, wszystkie usługi muszą należeć do jednej z trzech grup: core , main i late_start .

  • core : Nigdy nie wyłączaj po uruchomieniu.
  • main : Zamknij, a następnie uruchom ponownie po wprowadzeniu hasła dysku.
  • late_start : Uruchamia się dopiero po odszyfrowaniu i zamontowaniu /data .

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

  • class_reset : Zatrzymuje usługę, ale pozwala na jej ponowne uruchomienie za pomocą 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 .

Przepływy

Istnieją cztery przepływy dla zaszyfrowanego urządzenia. Urządzenie jest szyfrowane tylko raz, a następnie następuje normalny proces rozruchu.

  • Zaszyfruj wcześniej niezaszyfrowane urządzenie:
    • Zaszyfruj nowe urządzenie za pomocą forceencrypt : obowiązkowe szyfrowanie przy pierwszym uruchomieniu (począwszy od Androida L).
    • Zaszyfruj istniejące urządzenie: szyfrowanie inicjowane przez użytkownika (Android K i starsze wersje).
  • Uruchom zaszyfrowane urządzenie:
    • 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 z ustawionym hasłem.

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

Zaszyfruj nowe urządzenie za pomocą Forceencrypt

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

  1. Wykryj niezaszyfrowany system plików za pomocą flagi forceencrypt

    /data nie jest szyfrowany, ale musi tak być, ponieważ forceencrypt to nakazanie. Odmontuj /data .

  2. Rozpocznij szyfrowanie /data

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

  3. Zamontuj tmpfs

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

  4. Przywołaj ramy, aby pokazać postęp

    Ponieważ na urządzeniu praktycznie nie ma danych do zaszyfrowania, pasek postępu często nie jest wyświetlany, ponieważ szyfrowanie odbywa się zbyt szybko. Aby uzyskać więcej informacji na temat interfejsu postępu, zobacz Szyfrowanie istniejącego urządzenia .

  5. Kiedy /data jest zaszyfrowany, zdejmij framework

    vold ustawia vold.decrypt na trigger_default_encryption , który uruchamia domyślną usługę defaultcrypto . (To rozpoczyna poniższy proces montażu domyślnych zaszyfrowanych danych użytkownika.) trigger_default_encryption sprawdza typ szyfrowania, aby zobaczyć, czy /data jest szyfrowany z hasłem czy bez. Ponieważ urządzenia z Androidem 5.0 są szyfrowane przy pierwszym uruchomieniu, nie należy ustawiać hasła; dlatego odszyfrowujemy i montujemy /data .

  6. Zamontuj /data

    init następnie montuje /data na dysku RAM tmpfs przy użyciu parametrów, które pobiera z ro.crypto.tmpfs_options , które jest ustawione w init.rc

  7. Uruchom framework

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

Zaszyfruj istniejące urządzenie

Tak się dzieje, gdy szyfrujesz niezaszyfrowane urządzenie z Androidem K lub starszym, które zostało zmigrowane do L.

Proces ten jest inicjowany przez użytkownika i jest określany w kodzie jako „szyfrowanie w miejscu”. Gdy użytkownik zdecyduje się zaszyfrować urządzenie, interfejs użytkownika sprawdza, czy bateria jest w pełni naładowana, a zasilacz sieciowy jest podłączony, aby zapewnić wystarczającą moc do zakończenia procesu szyfrowania.

Ostrzeżenie: Jeśli w urządzeniu rozładuje się zasilanie i wyłączy się przed zakończeniem szyfrowania, dane pliku pozostaną w stanie częściowo zaszyfrowanym. Urządzenie musi zostać zresetowane do ustawień fabrycznych, a wszystkie dane zostaną utracone.

Aby włączyć szyfrowanie w miejscu, vold uruchamia pętlę, aby odczytać każdy sektor prawdziwego urządzenia blokowego, a następnie zapisać go na urządzeniu blokowym krypto. vold sprawdza, czy sektor jest używany przed jego odczytaniem i zapisaniem, co sprawia, że ​​szyfrowanie jest znacznie szybsze na nowym urządzeniu, które ma niewiele danych lub nie ma ich wcale.

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

  1. Sprawdź hasło

    Interfejs użytkownika wywołuje vold za pomocą polecenia cryptfs enablecrypto inplace , gdzie passwd to hasło użytkownika do ekranu blokady.

  2. Zdejmij ramę

    vold sprawdza błędy, zwraca -1, jeśli nie może zaszyfrować, i wypisuje przyczynę w dzienniku. Jeśli może szyfrować, ustawia właściwość vold.decrypt na trigger_shutdown_framework . To powoduje, że init.rc zatrzymuje usługi w klasach late_start i main .

  3. Utwórz stopkę kryptowalutową
  4. Utwórz plik nawigacyjny
  5. Ponowne uruchomienie
  6. Wykryj plik nawigacyjny
  7. Rozpocznij szyfrowanie /data

    następnie vold konfiguruje mapowanie kryptograficzne, które tworzy wirtualne urządzenie blokowe kryptograficzne, które odwzorowuje rzeczywiste urządzenie blokowe, ale szyfruje każdy sektor podczas jego zapisywania i deszyfruje każdy sektor podczas odczytu. vold następnie tworzy i zapisuje metadane kryptograficzne.

  8. Podczas szyfrowania zamontuj tmpfs

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

  9. Przywołaj ramy, aby pokazać postęp

    trigger_restart_min_framework powoduje, że init.rc uruchamia main klasę usług. Gdy struktura zauważy, że vold.encrypt_progress jest ustawiona na 0, wyświetla interfejs paska postępu, który co pięć sekund wysyła zapytania dotyczące tej właściwości i aktualizuje pasek postępu. Pętla szyfrowania aktualizuje plik vold.encrypt_progress za każdym razem, gdy szyfruje kolejny procent partycji.

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

    Po pomyślnym zaszyfrowaniu /data vold czyści flagę ENCRYPTION_IN_PROGRESS w metadanych.

    Kiedy urządzenie zostanie pomyślnie odblokowane, hasło zostanie użyte do zaszyfrowania klucza głównego, a stopka kryptowaluty zostanie zaktualizowana.

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

Uruchamianie zaszyfrowanego urządzenia z domyślnym szyfrowaniem

Tak się dzieje, gdy uruchamiasz zaszyfrowane urządzenie bez hasła. Ponieważ urządzenia z systemem Android 5.0 są szyfrowane przy pierwszym uruchomieniu, nie należy ustawiać 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ż nie można zamontować /data i ustawiono jedną z flag encryptable lub forceencrypt .

    vold ustawia vold.decrypt na trigger_default_encryption , co uruchamia domyślną usługę defaultcrypto . trigger_default_encryption sprawdza typ szyfrowania, aby zobaczyć, czy /data jest szyfrowany z hasłem czy bez.

  2. Odszyfruj /dane

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

  3. Zamontuj /dane

    vold następnie montuje odszyfrowaną partycję real /data i 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 . To powoduje, że init.rc uruchamia swoje polecenia post-fs-data . Utworzą wszelkie niezbędne katalogi lub linki, a następnie ustawią 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. To powoduje, że init.rc ponownie uruchamia usługi w klasie main , a także uruchamia usługi w klasie late_start po raz pierwszy od startu systemu.

  4. Uruchom framework

    Teraz framework uruchamia wszystkie swoje usługi przy użyciu odszyfrowanego pliku /data i system jest gotowy do użycia.

Uruchamianie zaszyfrowanego urządzenia bez domyślnego szyfrowania

Tak się dzieje, gdy uruchamiasz zaszyfrowane urządzenie, które ma ustawione hasło. Hasłem urządzenia może być kod PIN, wzór lub hasło.

  1. Wykryj zaszyfrowane urządzenie za pomocą hasła

    Wykryj, że urządzenie z Androidem jest zaszyfrowane, ponieważ flaga ro.crypto.state = "encrypted"

    vold ustawia vold.decrypt na trigger_restart_min_framework , ponieważ /data jest szyfrowane hasłem.

  2. Zamontuj 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 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-cyfrowa liczba szesnastkowa ASCII poprzedzona 0x)
  3. Uruchom platformę, aby wyświetlić monit o hasło

    Struktura uruchamia się i widzi, że vold.decrypt jest ustawiony na trigger_restart_min_framework . Mówi to platformie, że ładuje się z dysku tmpfs /data i musi uzyskać hasło użytkownika.

    Najpierw jednak musi upewnić się, że dysk został odpowiednio zaszyfrowany. Wysyła polecenie cryptfs cryptocomplete do vold . vold zwraca 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, szukając w metadanych kryptograficznych flagi CRYPTO_ENCRYPTION_IN_PROGRESS . Jeśli jest ustawione, proces szyfrowania został przerwany i na urządzeniu nie ma żadnych użytecznych danych. Jeśli vold zwróci błąd, interfejs użytkownika powinien wyświetlić użytkownikowi komunikat o ponownym uruchomieniu i przywróceniu ustawień fabrycznych urządzenia oraz dać użytkownikowi przycisk do naciśnięcia, aby to zrobić.

  4. Odszyfruj dane za pomocą hasła

    Gdy cryptfs cryptocomplete zakończy się pomyślnie, platforma wyświetla interfejs użytkownika z prośbą o podanie hasła dysku. Interfejs użytkownika sprawdza hasło, wysyłając polecenie cryptfs checkpw do vold . Jeśli hasło jest poprawne (co zostało ustalone poprzez pomyślne zamontowanie odszyfrowanego pliku /data w lokalizacji tymczasowej, a następnie jego odmontowanie), vold zapisuje nazwę odszyfrowanego urządzenia blokowego we właściwości ro.crypto.fs_crypto_blkdev i zwraca status 0 do interfejsu użytkownika . Jeśli hasło jest nieprawidłowe, zwraca -1 do interfejsu użytkownika.

  5. Zatrzymaj framework

    Interfejs użytkownika wyświetla grafikę rozruchową kryptografii, a następnie wywołuje vold za pomocą polecenia cryptfs restart . vold ustawia właściwość vold.decrypt na trigger_reset_main , co powoduje, że init.rc wykonuje polecenie class_reset main . Zatrzymuje to wszystkie usługi w klasie głównej, co pozwala na odmontowanie pliku tmpfs /data .

  6. Zamontuj /data

    vold następnie montuje odszyfrowaną partycję real /data i przygotowuje nową partycję (która mogła nigdy nie zostać przygotowana, jeśli została zaszyfrowana z opcją czyszczenia, która nie jest obsługiwana w pierwszej wersji). Ustawia właściwość vold.post_fs_data_done na 0, a następnie ustawia vold.decrypt na trigger_post_fs_data . To powoduje, że init.rc uruchamia swoje polecenia post-fs-data . Utworzą wszelkie niezbędne katalogi lub łącza, a następnie ustawią 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 . To powoduje, że init.rc ponownie uruchamia usługi w klasie main , a także uruchamia usługi w klasie late_start po raz pierwszy od startu systemu.

  7. Uruchom pełny framework

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

Awaria

Urządzenie, którego nie można odszyfrować, może działać nieprawidłowo z kilku powodów. Uruchomienie urządzenia rozpoczyna się od normalnej serii kroków:

  1. Wykryj zaszyfrowane urządzenie za pomocą hasła
  2. Zamontuj tmpfs
  3. Uruchom platformę, aby wyświetlić monit o hasło

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

  • Hasło jest zgodne, ale nie może odszyfrować danych
  • Użytkownik wprowadził błędne hasło 30 razy

Jeśli te błędy nie zostaną rozwiązane, poproś użytkownika o wyczyszczenie ustawień fabrycznych :

Jeśli vold wykryje błąd podczas procesu szyfrowania i jeśli żadne dane nie zostały jeszcze zniszczone, a środowisko działa, vold ustawia właściwość vold.encrypt_progress na error_not_encrypted . Interfejs użytkownika monituje użytkownika o ponowne uruchomienie komputera i ostrzega, że ​​proces szyfrowania nigdy się nie rozpoczął. Jeśli błąd wystąpi po usunięciu frameworka, ale zanim pojawi się pasek postępu, vold zrestartuje system. Jeśli ponowne uruchomienie się nie powiedzie, ustawia vold.encrypt_progress na error_shutting_down i zwraca -1; ale nie będzie nic, co mogłoby wyłapać błąd. Nie oczekuje się, że tak się stanie.

Jeśli vold wykryje błąd podczas procesu szyfrowania, ustawia vold.encrypt_progress na error_partially_encrypted i zwraca -1. Interfejs użytkownika powinien następnie wyświetlić komunikat informujący, że szyfrowanie nie powiodło się, i udostępnić użytkownikowi przycisk umożliwiający przywrócenie ustawień fabrycznych urządzenia.

Przechowywanie zaszyfrowanego klucza

Zaszyfrowany klucz jest przechowywany w metadanych kryptograficznych. Kopia zapasowa sprzętu jest realizowana przy użyciu funkcji podpisywania Trusted Execution Environment (TEE). Wcześniej szyfrowaliśmy klucz główny kluczem wygenerowanym poprzez zastosowanie skryptu do hasła użytkownika i przechowywanej soli. Aby uczynić klucz odpornym na ataki typu off-box, rozszerzamy ten algorytm, podpisując wynikowy klucz przechowywanym kluczem TEE. Powstały podpis jest następnie przekształcany w klucz o odpowiedniej długości przez jeszcze jedno zastosowanie skryptu. Klucz ten jest następnie używany do szyfrowania i deszyfrowania klucza głównego. Aby zapisać ten klucz:

  1. Wygeneruj losowy 16-bajtowy klucz szyfrowania dysku (DEK) i 16-bajtową sól.
  2. Zastosuj skrypt do hasła użytkownika i sól, aby utworzyć 32-bajtowy klucz pośredni 1 (IK1).
  3. Pad IK1 z zerowymi bajtami odpowiadającymi rozmiarowi sprzętowego klucza prywatnego (HBK). W szczególności dopełniamy jako: 00 || IK1 || 00..00; jeden bajt zerowy, 32 bajty IK1, 223 bajty zerowe.
  4. Podpisz dopełniony IK1 za pomocą HBK, aby utworzyć 256-bajtowy IK2.
  5. Zastosuj skrypt do IK2 i soli (ta sama sól co w kroku 2), aby utworzyć 32-bajtowy IK3.
  6. Użyj pierwszych 16 bajtów IK3 jako KEK, a ostatnich 16 bajtów jako IV.
  7. Zaszyfruj DEK za pomocą AES_CBC, kluczem KEK i wektorem inicjującym 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 , a vold ponownie szyfruje klucz główny dysku nowym hasłem.

Właściwości szyfrowania

vold i init komunikują się ze sobą poprzez ustawienie właściwości. Oto lista dostępnych właściwości szyfrowania.

Właściwości Volda

Nieruchomość Opis
vold.decrypt trigger_encryption Zaszyfruj dysk bez hasła.
vold.decrypt trigger_default_encryption Sprawdź dysk, aby sprawdzić, czy jest zaszyfrowany bez hasła. Jeśli tak, odszyfruj i zamontuj, w przeciwnym razie ustaw vold.decrypt na wyzwalacz_restart_min_framework.
vold.decrypt trigger_reset_main Ustaw przez vold, aby zamknąć interfejs użytkownika z prośbą o hasło dysku.
vold.decrypt trigger_post_fs_data Ustaw przez vold na prep /data z niezbędnymi katalogami i in.
vold.decrypt trigger_restart_framework Ustaw przez vold, aby uruchomić prawdziwy framework i wszystkie usługi.
vold.decrypt trigger_shutdown_framework Ustaw przez vold, aby zamknąć pełną platformę i rozpocząć szyfrowanie.
vold.decrypt trigger_restart_min_framework Ustaw przez vold, aby uruchomić interfejs paska postępu w celu szyfrowania lub monit o podanie hasła, w zależności od wartości ro.crypto.state .
vold.encrypt_progress Po uruchomieniu platformy, jeśli ta właściwość jest ustawiona, przejdź do trybu interfejsu użytkownika 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 Interfejs użytkownika na pasku postępu powinien wyświetlić komunikat o niepowodzeniu szyfrowania i dać użytkownikowi możliwość przywrócenia ustawień fabrycznych urządzenia.
vold.encrypt_progress error_reboot_failed Interfejs użytkownika na pasku postępu powinien wyświetlić komunikat informujący o zakończeniu szyfrowania i dać użytkownikowi przycisk umożliwiający ponowne uruchomienie urządzenia. Nie oczekuje się wystąpienia tego błędu.
vold.encrypt_progress error_not_encrypted Interfejs użytkownika na pasku postępu powinien wyświetlić komunikat informujący, że wystąpił błąd, żadne dane nie zostały zaszyfrowane ani utracone, a także dać użytkownikowi przycisk pozwalający na ponowne uruchomienie systemu.
vold.encrypt_progress error_shutting_down Interfejs paska postępu nie działa, więc nie jest jasne, kto zareaguje na ten błąd. A to i tak nigdy nie powinno mieć miejsca.
vold.post_fs_data_done 0 Ustawiane przez vold tuż przed ustawieniem vold.decrypt na trigger_post_fs_data .
vold.post_fs_data_done 1 Ustawiane przez init.rc lub init.rc zaraz po zakończeniu zadania post-fs-data .

właściwości początkowe

Nieruchomość Opis
ro.crypto.fs_crypto_blkdev Ustawiane za pomocą polecenia vold checkpw do późniejszego wykorzystania za pomocą polecenia vold restart .
ro.crypto.state unencrypted Ustawiane przez init , aby powiedzieć, że ten system działa z niezaszyfrowanym plikiem /data ro.crypto.state encrypted . Ustawiane przez init , aby powiedzieć, że ten system działa z zaszyfrowanym plikiem /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 jest ustawianych przez init podczas próby zamontowania /data z parametrami przekazanymi z init.rc vold używa ich do konfiguracji mapowania kryptowalut.
ro.crypto.tmpfs_options Ustawiane przez init.rc z opcjami, których init powinien używać podczas montowania systemu plików tmpfs /data .

Zainicjuj działania

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