Szyfrowanie całego dysku

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Szyfrowanie całego dysku to proces kodowania 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 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 do systemu Android w wersji 4.4, ale system Android 5.0 wprowadził te nowe funkcje:

  • Utworzono szybkie szyfrowanie, które szyfruje tylko używane bloki na partycji danych, aby uniknąć długiego czasu pierwszego uruchomienia. Tylko systemy plików ext4 i f2fs obsługują obecnie szybkie szyfrowanie.
  • 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 funkcji podpisywania Trusted Execution Environment (TEE) (takiej jak TrustZone). Zobacz Przechowywanie zaszyfrowanego klucza, aby uzyskać więcej informacji.

Uwaga: urządzenia uaktualnione do Androida 5.0, a następnie zaszyfrowane, mogą zostać przywrócone do stanu nieszyfrowanego przez przywrócenie danych fabrycznych. Nowe urządzenia z Androidem 5.0 zaszyfrowane przy pierwszym uruchomieniu nie mogą zostać przywrócone 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 , który jest funkcją jądra, która działa w warstwie urządzenia blokowego. Z tego powodu szyfrowanie działa z Embedded MultiMediaCard ( eMMC) i podobnymi urządzeniami flash, które prezentują 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 flash NAND.

Algorytm szyfrowania to 128 Advanced Encryption Standard (AES) z cipher-block chaining (CBC) i ESSIV:SHA256. Klucz główny jest szyfrowany 128-bitowym algorytmem AES za pośrednictwem połączeń z biblioteką OpenSSL. Musisz użyć 128 bitów lub więcej dla klucza (przy czym 256 jest opcjonalnym).

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

W wersji Android 5.0 istnieją cztery rodzaje stanów szyfrowania:

  • domyślna
  • SZPILKA
  • hasło
  • wzorzec

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: „default_password” Jednak wynikowy skrót jest również podpisany przez TEE (np. TrustZone), który używa skrótu podpisu do zaszyfrowania klucza głównego.

Możesz znaleźć domyślne hasło zdefiniowane w pliku cryptfs.cpp projektu Android Open Source.

Gdy użytkownik ustawia kod PIN/hasło lub hasło na urządzeniu, tylko klucz 128-bitowy jest ponownie szyfrowany i przechowywany. (tj. 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 w zakresie 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, aby wykonywać zadania, takie jak raportowanie stanu, prośba 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ń checkpw narzędzia wiersza poleceń vdc : cryptfs , restart , enablecrypto , changepw , cryptocomplete , verifypw , setfield , getfield , mountdefaultencrypted , getpwtype , getpw i clearpw .

Aby zaszyfrować, odszyfrować lub wyczyścić /data , /data nie może być zamontowane. Jednak, aby wyświetlić dowolny interfejs użytkownika (UI), framework musi się uruchomić, a framework wymaga /data do uruchomienia. Aby rozwiązać tę zagadkę, tymczasowy system plików jest montowany w /data . Dzięki temu system Android może monitować o hasła, pokazywać postęp lub sugerować czyszczenie danych w razie potrzeby. Narzuca ograniczenie polegające na tym, że aby przełączyć się z tymczasowego systemu plików na prawdziwy system plików /data , system musi zatrzymać każdy proces z otwartymi plikami w tymczasowym systemie plików i zrestartować te procesy w rzeczywistym 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 i uruchom ponownie po wprowadzeniu hasła dysku.
  • late_start : nie uruchamia się, dopóki /data nie zostanie odszyfrowana i zamontowana.

Aby wywołać te akcje, właściwość vold.decrypt jest ustawiona na różne strings . Aby zabić i ponownie uruchomić usługi, polecenia init to:

  • class_reset : Zatrzymuje usługę, ale umożliwia 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ą class_start .

Przepływy

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

  • Zaszyfruj wcześniej niezaszyfrowane urządzenie:
    • Zaszyfruj nowe urządzenie za pomocą forceencrypt : szyfrowanie obowiązkowe przy pierwszym uruchomieniu (od Androida L).
    • Zaszyfruj istniejące urządzenie: szyfrowanie inicjowane przez użytkownika (Android K i wcześniejsze).
  • Uruchom zaszyfrowane urządzenie:
    • Uruchamianie zaszyfrowanego urządzenia bez hasła: uruchamianie zaszyfrowanego urządzenia bez ustawionego hasła (dotyczy urządzeń z systemem Android 5.0 lub 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 zaszyfrować /data . Każdy z przepływów został szczegółowo wyjaśniony poniżej.

Zaszyfruj nowe urządzenie za pomocą forceencrypt

To jest normalne pierwsze uruchomienie urządzenia z systemem Android 5.0.

  1. Wykryj niezaszyfrowany system plików z flagą forceencrypt

    /data nie jest zaszyfrowany, ale musi być, ponieważ nakazuje to forceencrypt . Odmontuj /data .

  2. Rozpocznij szyfrowanie /data

    vold.decrypt = "trigger_encryption" wyzwala init.rc , który spowoduje, że vold zaszyfruje /data bez hasła. (Żadna nie jest ustawiona, ponieważ powinno to być nowe urządzenie).

  3. 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

  4. Stwórz ramy, aby pokazać postęp

    Ponieważ urządzenie nie ma praktycznie żadnych danych do zaszyfrowania, pasek postępu często się nie pojawia, ponieważ szyfrowanie odbywa się tak szybko. Zobacz Szyfrowanie istniejącego urządzenia, aby uzyskać więcej informacji o interfejsie postępu.

  5. Gdy /data jest zaszyfrowana, wyłącz platformę

    vold ustawia vold.decrypt na trigger_default_encryption , który uruchamia usługę defaultcrypto . (Rozpoczyna to poniższy przepływ w celu zamontowania domyślnych zaszyfrowanych danych użytkownika.) trigger_default_encryption sprawdza typ szyfrowania, aby zobaczyć, czy /data jest zaszyfrowana z hasłem, czy bez. Ponieważ urządzenia z systemem Android 5.0 są szyfrowane przy pierwszym uruchomieniu, nie powinno być ustawionego hasła; dlatego deszyfrujemy i montujemy /data .

  6. Zamontuj /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. Uruchom framework

    Ustaw vold na trigger_restart_framework , który kontynuuje zwykły proces uruchamiania.

Zaszyfruj istniejące urządzenie

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

Ten proces jest inicjowany przez użytkownika i jest określany jako „szyfrowanie w miejscu” w kodzie. Gdy użytkownik zdecyduje się zaszyfrować urządzenie, interfejs użytkownika upewni się, że 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 urządzenie wyczerpie się 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 rzeczywistego urządzenia blokowego, a następnie zapisać go na urządzeniu bloku kryptograficznego. vold sprawdza, czy sektor jest w użyciu, zanim go odczyta i zapisze, co znacznie przyspiesza szyfrowanie na nowym urządzeniu, które ma niewiele danych lub nie ma ich wcale.

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

  1. Sprawdź hasło

    Interfejs użytkownika wywołuje vold poleceniem cryptfs enablecrypto inplace gdzie passwd jest hasłem blokady ekranu użytkownika.

  2. Zdejmij ramy

    vold sprawdza, czy nie ma błędów, zwraca -1, jeśli nie może zaszyfrować, i wyświetla przyczynę w dzienniku. 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ę krypto
  4. Utwórz plik breadcrumb
  5. Restart
  6. Wykryj plik nawigacyjny
  7. Rozpocznij szyfrowanie /data

    vold następnie konfiguruje mapowanie kryptograficzne, które tworzy wirtualne urządzenie blokowe kryptograficzne, które mapuje na rzeczywiste urządzenie blokowe, ale szyfruje każdy sektor podczas zapisywania i odszyfrowuje każdy sektor podczas odczytu. vold następnie 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. Stwórz ramy, aby pokazać postęp

    trigger_restart_min_framework powoduje, że init.rc uruchamia main klasę usług. Gdy framework widzi, że vold.encrypt_progress jest ustawiony na 0, wyświetla interfejs użytkownika paska postępu, który wysyła zapytanie do tej właściwości co pięć sekund i aktualizuje pasek postępu. Pętla szyfrowania aktualizuje vold.encrypt_progress każdym razem, gdy szyfruje kolejny procent partycji.

  10. Gdy /data jest zaszyfrowana, zaktualizuj stopkę krypto

    Gdy /data zostanie pomyślnie zaszyfrowana, vold czyści flagę ENCRYPTION_IN_PROGRESS w metadanych.

    Po pomyślnym odblokowaniu urządzenia hasło jest następnie używane do szyfrowania klucza głównego, a stopka krypto jest aktualizowana.

    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 z prośbą o naciśnięcie przycisku w celu ponownego uruchomienia. Oczekuje się, że to się nigdy nie wydarzy.

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 powinno być ustawionego hasła, dlatego jest to domyślny stan szyfrowania .

  1. Wykryj zaszyfrowane /data bez hasła

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

    vold ustawia vold.decrypt na trigger_default_encryption , który uruchamia usługę defaultcrypto . trigger_default_encryption sprawdza typ szyfrowania, aby zobaczyć, czy /data jest zaszyfrowany 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ą rzeczywistą partycję /data , 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 swoje polecenia post-fs-data . Utworzą wszystkie niezbędne katalogi lub linki, a następnie 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. Powoduje to, ż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.

  4. Uruchom framework

    Teraz framework uruchamia wszystkie swoje usługi za pomocą odszyfrowanego /data , a 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ło urządzenia może być kodem PIN, wzorem lub hasłem.

  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 zaszyfrowany 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 krypto:

    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 ASCII poprzedzony 0x)
  3. Uruchom platformę, aby poprosić o hasło

    Framework uruchamia się i widzi, że vold.decrypt jest ustawiony na trigger_restart_min_framework . Mówi to frameworkowi, że uruchamia się z 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 zakończyło się pomyślnie, -1 w przypadku błędu wewnętrznego lub -2, jeśli szyfrowanie nie zostało pomyślnie zakończone. vold określa to, szukając w metadanych kryptograficznych flagi CRYPTO_ENCRYPTION_IN_PROGRESS . Jeśli jest ustawiona, proces szyfrowania został przerwany i na urządzeniu nie ma użytecznych danych. Jeśli vold zwróci błąd, interfejs użytkownika powinien wyświetlić użytkownikowi komunikat o konieczności ponownego uruchomienia i przywrócenia ustawień fabrycznych urządzenia oraz dać użytkownikowi przycisk, który należy nacisnąć, aby to zrobić.

  4. Odszyfruj dane hasłem

    Po pomyślnym zakończeniu cryptfs cryptocomplete framework 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 jest określane przez pomyślne zamontowanie odszyfrowanego /data w tymczasowej lokalizacji, 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 ramy

    Interfejs użytkownika wyświetla grafikę rozruchową kryptograficzną, a następnie wywołuje vold poleceniem cryptfs restart . vold ustawia właściwość vold.decrypt na trigger_reset_main , co powoduje , że init.rc wykonuje class_reset main . Powoduje to zatrzymanie wszystkich usług w klasie main, co pozwala na odmontowanie tmpfs /data .

  6. Zamontuj /data

    vold następnie montuje odszyfrowaną rzeczywistą partycję /data i przygotowuje nową partycję (która mogła nigdy nie zostać przygotowana, gdyby była zaszyfrowana za pomocą opcji czyszczenia, 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, że init.rc uruchamia swoje polecenia post-fs-data . Utworzą wszystkie niezbędne katalogi lub linki, a następnie 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 . Powoduje to, ż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.

  7. Uruchom pełny framework

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

Awaria

Urządzenie, które nie odszyfruje, może być niepoprawne z kilku powodów. Urządzenie rozpoczyna się od normalnej serii kroków do uruchomienia:

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

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

  • Hasło pasuje, ale nie można odszyfrować danych
  • Użytkownik 30 razy wprowadza błędne hasło

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

Jeśli vold wykryje błąd podczas procesu szyfrowania, a żadne dane nie zostały jeszcze zniszczone, a platforma działa, vold ustawia właściwość vold.encrypt_progress na error_not_encrypted . Interfejs użytkownika monituje użytkownika o ponowne uruchomienie i ostrzega go, że proces szyfrowania nigdy się nie rozpoczął. Jeśli błąd wystąpi po zerwaniu frameworka, ale przed uruchomieniem interfejsu paska 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 co wyłapać błędu. 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 przywracania ustawień fabrycznych urządzenia.

Przechowywanie zaszyfrowanego klucza

Zaszyfrowany klucz jest przechowywany w metadanych krypto. Tworzenie kopii zapasowych sprzętu jest realizowane przy użyciu funkcji podpisywania Trusted Execution Environment (TEE). Wcześniej szyfrowaliśmy klucz główny za pomocą klucza wygenerowanego przez zastosowanie scrypt do hasła użytkownika i przechowywanej soli. Aby klucz był odporny na ataki off-box, rozszerzamy ten algorytm, podpisując wynikowy klucz przechowywanym kluczem TEE. Powstała sygnatura jest następnie przekształcana w klucz o odpowiedniej długości przez jeszcze jedną aplikację scrypt. Ten klucz jest następnie używany do szyfrowania i odszyfrowywania klucza głównego. Aby zapisać ten klucz:

  1. Generuj losowy 16-bajtowy klucz szyfrowania dysku (DEK) i 16-bajtową sól.
  2. Zastosuj scrypt do hasła użytkownika i soli, aby wygenerować 32-bajtowy klucz pośredni 1 (IK1).
  3. Nakładka IK1 z zerową liczbą bajtów do rozmiaru klucza prywatnego związanego ze sprzętem (HBK). Konkretnie, dopasowujemy jako: 00 || IK1 || 00.00; jeden bajt zerowy, 32 bajty IK1, 223 bajty zerowe.
  4. Znak wypełniony IK1 z HBK, aby utworzyć 256-bajtowy IK2.
  5. Zastosuj scrypt do IK2 i sól (taka sama sól jak w kroku 2), aby utworzyć 32-bajtowy IK3.
  6. Użyj pierwszych 16 bajtów IK3 jako KEK i 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 przy użyciu nowego hasła.

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 trigger_restart_min_framework.
vold.decrypt trigger_reset_main Ustaw przez vold, aby zamknąć interfejs użytkownika, prosząc o hasło dysku.
vold.decrypt trigger_post_fs_data Ustaw przez vold prep /data z niezbędnymi katalogami, et al.
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 dla szyfrowania lub monitu 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, przejdź do trybu interfejsu użytkownika paska postępu.
vold.encrypt_progress 0 to 100 Interfejs użytkownika paska postępu powinien wyświetlać ustawioną wartość procentową.
vold.encrypt_progress error_partially_encrypted Interfejs użytkownika paska postępu powinien wyświetlać komunikat, że szyfrowanie nie powiodło się, i dać użytkownikowi możliwość przywrócenia urządzenia do ustawień fabrycznych.
vold.encrypt_progress error_reboot_failed Interfejs użytkownika paska postępu powinien wyświetlać komunikat informujący o zakończeniu szyfrowania i dać użytkownikowi przycisk ponownego uruchomienia urządzenia. Ten błąd nie powinien wystąpić.
vold.encrypt_progress error_not_encrypted Interfejs użytkownika paska postępu powinien wyświetlać komunikat informujący o wystąpieniu błędu, żadne dane nie zostały zaszyfrowane ani utracone, a także dać użytkownikowi przycisk ponownego uruchomienia 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. I tak nigdy nie powinno się zdarzyć.
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 Ustawiony przez komendę vold checkpw do późniejszego użycia przez komendę vold restart .
ro.crypto.state unencrypted Ustawione przez init , aby powiedzieć, że ten system działa z niezaszyfrowanym /data ro.crypto.state encrypted . Ustaw przez init , aby powiedzieć, ż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 pięć właściwości jest ustawianych przez init , gdy próbuje zamontować /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 .

Rozpocznij 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