Szyfrowanie całego dysku to proces kodowania wszystkich danych użytkownika na urządzeniu z Androidem za pomocą klucza szyfrowania. Po zaszyfrowaniu urządzenia wszystkie dane utworzone przez użytkownika są automatycznie szyfrowane przed zapisaniem na dysku, a wszystkie odczyty automatycznie odszyfrowywane przed przekazaniem do procesu wywołania.
Szyfrowanie całego dysku zostało wprowadzone w Androidzie 4.4, ale w Androidzie 5.0 pojawiły się nowe funkcje:
- Szybkie szyfrowanie, które szyfruje tylko używane bloki na partycji danych, aby uniknąć długiego czasu uruchamiania. Szybkie szyfrowanie jest obecnie obsługiwane tylko w systemach plików ext4 i f2fs.
- Dodano flagę
forceencrypt
fstab, aby szyfrować podczas pierwszego rozruchu. - Dodano obsługę wzorów i szyfrowania bez hasła.
- Dodano sprzętowe przechowywanie klucza szyfrowania przy użyciu funkcji podpisywania zaufanego środowiska wykonawczego (TEE) (np. w TrustZone). Więcej informacji znajdziesz w artykule Przechowywanie zaszyfrowanego klucza.
Uwaga: urządzenia z Androidem 5.0, które zostały zaszyfrowane, można odszyfrować, wykonując przywracanie danych fabrycznych. Nowe urządzenia z Androidem 5.0, które zostały zaszyfrowane przy pierwszym uruchomieniu, nie mogą zostać przywrócone do stanu niezaszyfrowanego.
Jak działa pełne szyfrowanie dysku na Androidzie
Szyfrowanie całego dysku w Androidzie opiera się na dm-crypt
, czyli funkcji jądra, która działa na poziomie urządzenia blokowego. W związku z tym szyfrowanie działa z kartami Embedded MultiMediaCard (eMMC) i podobnymi urządzeniami flash, które są rozpoznawane przez jądro jako urządzenia blokowe. Szyfrowanie nie jest możliwe w przypadku YAFFS, który komunikuje się bezpośrednio z nieprzetworzonym układem NAND Flash.
Algorytm szyfrowania to 128-bitowy Advanced Encryption Standard (AES) z łańcuchem szyfrowania blokowego (CBC) i ESSIV:SHA256. Klucz główny jest szyfrowany za pomocą 128-bitowego algorytmu AES za pomocą wywołań biblioteki OpenSSL. Klucz musi mieć co najmniej 128 bitów (256 bitów jest opcjonalne).
Uwaga: producenci sprzętu mogą używać 128-bitowego lub wyższego klucza szyfrującego.
W wersji 5.0 Androida występują 4 stany szyfrowania:
- domyślnie
- Kod PIN
- hasło
- wzór
Podczas pierwszego uruchamiania urządzenie tworzy losowo wygenerowany 128-bitowy klucz główny, a następnie szyfruje go za pomocą domyślnego hasła i zapisanego elementu soli. Hasło domyślne to „default_password”. Jednak uzyskany wynik jest również podpisywany za pomocą TEE (np. TrustZone), który używa hasha podpisu do zaszyfrowania klucza głównego.
Domyślne hasło można znaleźć w pliku cryptfs.cpp projektu Android Open Source.
Gdy użytkownik ustawia na urządzeniu kod PIN lub hasło, tylko 128-bitowy klucz jest ponownie szyfrowany i przechowywany. (np. zmiany kodu PIN, hasła lub wzorca użytkownika NIE powodują ponownego zaszyfrowania danych użytkownika). Pamiętaj, że urządzenie zarządzane może podlegać ograniczeniom związanym z kodem PIN, wzorem lub hasłem.
Szyfrowaniem zarządzają init
i vold
.
init
wywołuje vold
, a vold ustawia właściwości, aby wywoływać zdarzenia w init. Inne części systemu również korzystają z 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 krytycznego błędu. Aby wywołać funkcje szyfrowania w vold
, system używa poleceń cryptfs
narzędzia wiersza poleceń vdc
: checkpw
, restart
, enablecrypto
, changepw
, cryptocomplete
, verifypw
, setfield
, getfield
, mountdefaultencrypted
, getpwtype
, getpw
i clearpw
.
Aby szyfrować, odszyfrowywać lub kasować /data
, /data
nie może być zamontowany. Jednak aby wyświetlić interfejs użytkownika, framework musi się uruchomić, a do tego potrzebna jest biblioteka /data
. Aby rozwiązać ten problem, system plików tymczasowy jest montowany na /data
.
Dzięki temu Android może wyświetlać prośby o hasła, pokazywać postęp lub sugerować wyczyszczenie danych w razie potrzeby. Wymusza ono jednak ograniczenie, że aby przejść z tymczasowego systemu plików do prawdziwego systemu plików /data
, system musi zatrzymać wszystkie procesy z otwartymi plikami w tymczasowym systemie plików i ponownie uruchomić te procesy w rzeczywistym systemie plików /data
. Aby to zrobić, wszystkie usługi muszą należeć do jednej z 3 grup: core
, main
i late_start
.
core
: nigdy nie wyłączaj po uruchomieniu.main
: wyłącz komputer, a następnie uruchom go 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 pozwala na jej ponowne uruchomienie za pomocą klasy class_start.class_start
: uruchamia ponownie usługę.class_stop
: zatrzymuje usługę i dodaje flagęSVC_DISABLED
. Zatrzymane usługi nie odpowiadają naclass_start
.
Przepływy
W przypadku zaszyfrowanego urządzenia dostępne są 4 przepływy danych. Urządzenie jest szyfrowane tylko raz, a potem przechodzi przez normalny proces uruchamiania.
- Zaszyfruj wcześniej niezaszyfrowane urządzenie:
- Szyfrowanie nowego urządzenia za pomocą
forceencrypt
: obowiązkowe szyfrowanie podczas pierwszego uruchamiania (od Androida L). - Szyfrowanie istniejącego urządzenia: szyfrowanie inicjowane przez użytkownika (Android K i starsze wersje).
- Szyfrowanie nowego urządzenia za pomocą
- Uruchamianie zaszyfrowanego urządzenia:
- Uruchamianie zaszyfrowanego urządzenia bez hasła: uruchamianie zaszyfrowanego urządzenia, na którym nie zostało ustawione hasło (dotyczy urządzeń z Androidem 5.0 lub nowszym).
- Uruchamianie zaszyfrowanego urządzenia przy użyciu hasła: uruchamianie zaszyfrowanego urządzenia, na którym zostało ustawione hasło.
Oprócz tych procesów urządzenie może też nie szyfrować /data
.
Poniżej znajdziesz szczegółowe omówienie każdego z tych procesów.
Szyfrowanie nowego urządzenia za pomocą funkcji forceencrypt
Jest to normalne pierwsze uruchomienie urządzenia z Androidem 5.0.
- Wykrywanie niezaszyfrowanego systemu plików za pomocą flagi
forceencrypt
Plik
/data
nie jest zaszyfrowany, ale musi być, ponieważ wymaga tegoforceencrypt
. Odmontuj/data
. - Rozpocznij szyfrowanie
/data
vold.decrypt = "trigger_encryption"
powodujeinit.rc
, co powoduje, żevold
szyfruje/data
bez hasła. (brak ustawienia, ponieważ powinno to być nowe urządzenie). - Montowanie tmpfs
vold
montuje tmpfs/data
(korzystając z opcji tmpfs zro.crypto.tmpfs_options
) i ustawia wartość właściwościvold.encrypt_progress
na 0.vold
przygotowuje tmpfs/data
do uruchamiania zaszyfrowanego systemu i ustawia właściwośćvold.decrypt
na:trigger_restart_min_framework
- Wyświetlanie ramy w celu pokazania postępów
Ponieważ urządzenie nie ma praktycznie żadnych danych do zaszyfrowania, pasek postępu nie będzie się często pojawiać, ponieważ szyfrowanie odbywa się bardzo szybko. Więcej informacji o interfejsie postępu znajdziesz w artykule Szyfrowanie istniejącego urządzenia.
- Gdy
/data
jest zaszyfrowany, usuń frameworkvold
ustawiavold.decrypt
natrigger_default_encryption
, co uruchamia usługędefaultcrypto
. (spowoduje to rozpoczęcie ścieżki poniżej, która umożliwia zamontowanie domyślnie zaszyfrowanych danych użytkownika)trigger_default_encryption
sprawdza typ szyfrowania, aby sprawdzić, czy/data
jest zaszyfrowany z hasłem czy bez. Ponieważ urządzenia z Androidem 5.0 są szyfrowane przy pierwszym uruchomieniu, nie powinno być ustawionego hasła. Dlatego odszyfrowujemy i montujemy/data
. - Montowanie
/data
Następnie
init
montuje/data
na dysku RAMFS za pomocą parametrów pobranych zro.crypto.tmpfs_options
, który jest ustawiony winit.rc
. - Rozpocznij framework
vold
ustawiavold.decrypt
natrigger_restart_framework
, co powoduje kontynuowanie normalnego procesu uruchamiania.
Szyfrowanie istniejącego urządzenia
Dzieje się tak, gdy szyfrujesz niezaszyfrowane urządzenie z Androidem K lub starszym, które zostało przeniesione na Androida L.
Ten proces jest inicjowany przez użytkownika i jest określany w kodzie jako „szyfrowanie na miejscu”. Gdy użytkownik zdecyduje się na zaszyfrowanie urządzenia, interfejs upewni się, że bateria jest w pełni naładowana, a zasilacz jest podłączony, aby zapewnić wystarczającą moc do zakończenia procesu szyfrowania.
Ostrzeżenie: jeśli urządzenie rozładuje się i wyłącza przed zakończeniem szyfrowania, dane pliku pozostaną częściowo zaszyfrowane. Urządzenie musi zostać zresetowane do ustawień fabrycznych, a wszystkie dane zostaną usunięte.
Aby włączyć szyfrowanie na miejscu, vold
uruchamia pętlę, która odczytuje każdy sektor rzeczywistego urządzenia blokowego, a następnie zapisze go na urządzeniu blokowym szyfrującym. vold
sprawdza, czy sektor jest używany, zanim odczyta lub zapisze dane, co znacznie przyspiesza szyfrowanie na nowym urządzeniu, które ma niewiele danych lub wcale ich nie ma.
Stan urządzenia: ustaw ro.crypto.state = "unencrypted"
i wykonaj wyzwalacz on nonencrypted
init
, aby kontynuować rozruch.
- Sprawdzanie hasła
Interfejs wywołuje
vold
z poleceniemcryptfs enablecrypto inplace
, gdziepasswd
to hasło do ekranu blokady. - Usuwanie ramowego projektu
vold
sprawdza błędy, zwraca -1, jeśli nie może zaszyfrować, i drukuje przyczynę w dzienniku. Jeśli może szyfrować, ustawia właściwośćvold.decrypt
natrigger_shutdown_framework
. Spowoduje to, że usługainit.rc
przestanie działać w klasachlate_start
imain
. - Tworzenie stopki kryptograficznej
- Tworzenie pliku ścieżki nawigacyjnej
- Uruchom ponownie
- Wykrywanie pliku ścieżki
- Rozpocznij szyfrowanie
/data
vold
konfiguruje mapowanie szyfrowania, które tworzy wirtualne urządzenie blokowe szyfrowania, które jest mapowane na rzeczywiste urządzenie blokowe, ale szyfruje każdy sektor podczas zapisu i odszyfrowuje każdy sektor podczas odczytu.vold
następnie tworzy i zapisuje metadane szyfrowania. - Podczas szyfrowania zamontuj tmpfs
vold
montuje tmpfs/data
(korzystając z opcji tmpfs zro.crypto.tmpfs_options
) i ustawia wartość właściwościvold.encrypt_progress
na 0.vold
przygotowuje tmpfs/data
do uruchamiania zaszyfrowanego systemu i ustawia właściwośćvold.decrypt
na:trigger_restart_min_framework
- Wyświetlanie ramy w celu pokazania postępów
trigger_restart_min_framework
powoduje, żeinit.rc
uruchamia klasę usługmain
. Gdy framework wykryje, że parametrvold.encrypt_progress
ma wartość 0, wyświetla pasek postępu interfejsu użytkownika, który co 5 sekund wysyła zapytanie do tej usługi i aktualizuje pasek postępu. Pętla szyfrowania aktualizuje wartośćvold.encrypt_progress
za każdym razem, gdy szyfruje kolejny procent partycji. - Jeśli
/data
jest zaszyfrowany, zaktualizuj stopkę dotyczącą szyfrowaniaGdy
/data
zostanie zaszyfrowany,vold
usuwa 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 z jakiegoś powodu nie uda się uruchomić ponownie urządzenia,
vold
ustawia właściwośćvold.encrypt_progress
naerror_reboot_failed
, a interfejs wyświetla komunikat z prośbą o naciśnięcie przycisku ponownego uruchamiania. Nie powinno do tego dojść.
Uruchamianie zaszyfrowanego urządzenia z domyślnym szyfrowaniem
Tak się dzieje, gdy uruchamiasz zaszyfrowane urządzenie bez hasła. Ponieważ urządzenia z Androidem 5.0 są szyfrowane przy pierwszym uruchomieniu, nie powinno być ustawionego hasła, więc jest to stan domyślnego szyfrowania.
- Wykrywanie zaszyfrowanych
/data
bez hasławykryć, że urządzenie z Androidem jest zaszyfrowane, ponieważ
/data
nie może być zamontowany i jeden z flagencryptable
lubforceencrypt
jest ustawiony.vold
ustawia wartośćvold.decrypt
natrigger_default_encryption
, co powoduje uruchomienie usługidefaultcrypto
.trigger_default_encryption
sprawdza typ szyfrowania, aby sprawdzić, czy/data
jest zaszyfrowany z hasłem czy bez. - Odszyfruj /data
Tworzy urządzenie
dm-crypt
na urządzeniu blokowym, aby było gotowe do użycia. - Mount /data
vold
najpierw montuje odszyfrowaną partycję/data
, a potem przygotowuje nową partycję. Ustawia ona właściwośćvold.post_fs_data_done
na 0, a potem właściwośćvold.decrypt
natrigger_post_fs_data
. Powoduje to, żeinit.rc
będzie wykonywać poleceniapost-fs-data
. Tworzą one niezbędne katalogi lub linki, a potem ustawiają wartość parametruvold.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.
. Spowoduje to, żeinit.rc
ponownie uruchomi usługi w klasiemain
, a także uruchomi usługi w klasielate_start
po raz pierwszy od momentu uruchomienia. - Rozpocznij framework
Teraz framework uruchamia wszystkie swoje usługi za pomocą odszyfrowanego klucza
/data
, a system jest gotowy do użycia.
Uruchamianie zaszyfrowanego urządzenia bez domyślnego szyfrowania
Tak się dzieje, gdy uruchamiasz zaszyfrowane urządzenie z ustawionym hasłem. Hasło urządzenia może być kodem PIN, wzorem lub hasłem.
- Wykrywanie zaszyfrowanego urządzenia za pomocą hasła
wykryć, że urządzenie z Androidem jest zaszyfrowane, ponieważ ma flagę
ro.crypto.state = "encrypted"
vold
ustawia wartośćvold.decrypt
natrigger_restart_min_framework
, ponieważ/data
jest zaszyfrowany za pomocą hasła. - Montowanie tmpfs
init
ustawia 5 właściwości, aby zapisać początkowe opcje montażu podane dla/data
z parametrami przekazanymi zinit.rc
.vold
używa tych właściwości do konfigurowania mapowania kryptowalut:ro.crypto.fs_type
ro.crypto.fs_real_blkdev
ro.crypto.fs_mnt_point
ro.crypto.fs_options
ro.crypto.fs_flags
(8-cyfrowy numer szesnastkowy w standardzie ASCII poprzedzony przez 0x)
- Uruchomienie frameworku, aby wyświetlić prośbę o hasło
Framework uruchamia się i widzi, że
vold.decrypt
ma wartośćtrigger_restart_min_framework
. Informuje ono framework, że uruchamia się na dysku tmpfs/data
i musi pobrać hasło użytkownika.Najpierw jednak musi się upewnić, że dysk został prawidłowo zaszyfrowany. Wysyła ono polecenie
cryptfs cryptocomplete
dovold
.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, sprawdzając flagęCRYPTO_ENCRYPTION_IN_PROGRESS
w metadanych szyfrowania. Jeśli jest ustawiona, oznacza, że proces szyfrowania został przerwany i na urządzeniu nie ma żadnych przydatnych danych. Jeśli funkcjavold
zwróci błąd, interfejs powinien wyświetlić użytkownikowi komunikat z prośbą o ponowne uruchomienie urządzenia i przywrócenie ustawień fabrycznych oraz przycisk, który należy nacisnąć, aby to zrobić. - Odszyfrowywanie danych za pomocą hasła
Gdy
cryptfs cryptocomplete
zakończy się powodzeniem, framework wyświetli interfejs użytkownika z prośbą o hasło dysku. Interfejs użytkownika sprawdza hasło, wysyłając poleceniecryptfs checkpw
dovold
. Jeśli hasło jest prawidłowe (co jest określane przez zamontowanie odszyfrowanego/data
w tymczasowym miejscu, a następnie odmontowanie),vold
zapisuje nazwę odszyfrowanego urządzenia blokującego w właściwościro.crypto.fs_crypto_blkdev
i zwraca stan 0 do interfejsu użytkownika. Jeśli hasło jest nieprawidłowe, zwraca -1 do interfejsu. - Zatrzymanie frameworka
W interfejsie wyświetla się grafika przedstawiająca uruchamianie szyfrowania, a następnie wywołuje się
vold
z poleceniemcryptfs restart
.vold
ustawia właściwośćvold.decrypt
natrigger_reset_main
, co powoduje, żeinit.rc
wykonuje działanieclass_reset main
. Spowoduje to zatrzymanie wszystkich usług w klasie głównej, co pozwoli na odmontowanie tmpfs/data
. - Montowanie
/data
vold
następnie montuje odszyfrowaną partycję/data
i przygotowuje nową partycję (która może nigdy nie zostać przygotowana, jeśli została zaszyfrowana za pomocą opcji wymazywania, która nie jest obsługiwana w pierwszej wersji). Ustawia właściwośćvold.post_fs_data_done
na 0, a następnievold.decrypt
natrigger_post_fs_data
. W efekcieinit.rc
będzie wykonywać poleceniapost-fs-data
. Tworzą one niezbędne katalogi lub linki, a potem ustawiają wartość parametruvold.post_fs_data_done
na 1. Gdy funkcjavold
zobaczy wartość 1 w tej właściwości, ustawi właściwośćvold.decrypt
natrigger_restart_framework
. W efekcieinit.rc
ponownie uruchamia usługi w klasiemain
, a także uruchamia usługi w klasielate_start
po raz pierwszy od momentu uruchomienia. - Rozpocznij pełny proces
Teraz framework uruchamia wszystkie swoje usługi przy użyciu odszyfrowanego systemu plików
/data
. System jest gotowy do użycia.
Błąd
Urządzenie, które nie może odszyfrować danych, może być uszkodzone z kilku powodów. Urządzenie rozpoczyna normalną procedurę uruchamiania:
- Wykrywanie zaszyfrowanego urządzenia za pomocą hasła
- Punkt podłączenia tmpfs
- Uruchomić framework, aby wyświetlić prompt z prośbą o hasło
Po otwarciu frameworku na urządzeniu mogą wystąpić błędy:
- Hasło pasuje, ale nie można odszyfrować danych
- Użytkownik 30 razy podaje nieprawidłowe hasło
Jeśli te błędy nie zostaną usunięte, poproś użytkownika o przywrócenie ustawień fabrycznych:
Jeśli vold
wykryje błąd podczas procesu szyfrowania, a żadne dane nie zostały jeszcze zniszczone i ramka jest aktywna, vold
ustawia właściwość vold.encrypt_progress
na error_not_encrypted
.
Interfejs prosi użytkownika o ponowne uruchomienie urządzenia i ostrzega, że proces szyfrowania nigdy nie został uruchomiony. Jeśli błąd wystąpi po usunięciu frameworka, ale przed wyświetleniem paska postępu w interfejsie użytkownika, vold
ponownie uruchomi system. Jeśli ponowne uruchomienie się nie powiedzie, funkcja ustawi vold.encrypt_progress
na
error_shutting_down
i zwróci -1; ale nie będzie nic, co pozwoliłoby złapać błąd. Nie powinno tak się zdarzyć.
Jeśli vold
wykryje błąd podczas procesu szyfrowania, ustawi vold.encrypt_progress
na error_partially_encrypted
i zwróci -1. W interfejsie powinien się wtedy wyświetlić komunikat o nieudanym szyfrowaniu i przycisk umożliwiający zresetowanie urządzenia do ustawień fabrycznych.
Przechowywanie zaszyfrowanego klucza
Zaszyfrowany klucz jest przechowywany w metadanych szyfrowania. Obsługa sprzętowa jest implementowana za pomocą funkcji podpisywania w zaufanym środowisku wykonawczym (TEE). Wcześniej klucz główny był szyfrowany za pomocą klucza wygenerowanego przez scrypt na podstawie hasła użytkownika i zmagazynowanego parametru soli. Aby klucz był odporny na ataki zewnętrzne, rozszerzyliśmy ten algorytm, podpisując uzyskany klucz za pomocą przechowywanego klucza TEE. Uzyskany podpis jest następnie przekształcany w klucz o odpowiedniej długości przez zastosowanie jeszcze raz scrypt. Następnie klucz ten służy do szyfrowania i odszyfrowywania klucza głównego. Aby zapisać ten klucz:
- Wygeneruj losowy 16-bajtowy klucz szyfrowania dysku (DEK) i 16-bajtową sól.
- Zastosuj scrypt do hasła użytkownika i soli, aby wygenerować 32-bajtowy klucz pośredni 1 (IK1).
- Wypełnij IK1 zerami, aby uzyskać rozmiar klucza prywatnego powiązanego z sprzętem (HBK). W szczególności dodajemy 00 || IK1 || 00..00; 1 bajt z zerami, 32 bajty IK1, 223 zery.
- Podpisz wypełniony IK1 za pomocą HBK, aby uzyskać IK2 o długości 256 bajtów.
- Zastosuj scrypt do IK2 i soli (ta sama sól co w kroku 2), aby uzyskać 32-bajtowy IK3.
- Jako KEK użyj pierwszych 16 bajtów IK3, a jako IV – ostatnich 16 bajtów.
- Szyfruj DEK za pomocą AES_CBC, klucza KEK i wektora inicjującego IV.
Zmień hasło
Gdy użytkownik zdecyduje się zmienić lub usunąć hasło w ustawieniach, interfejs wyśle polecenie cryptfs changepw
do vold
, a vold
ponownie zaszyfruje klucz główny dysku za pomocą nowego hasła.
Właściwości szyfrowania
vold
i init
komunikują się ze sobą, ustawiając właściwości. Oto lista dostępnych właściwości do szyfrowania.
Właściwości Vold
Właściwość | Opis |
---|---|
vold.decrypt trigger_encryption |
Szyfrowanie dysku bez hasła. |
vold.decrypt trigger_default_encryption |
Sprawdź, czy dysk jest zaszyfrowany bez hasła.
Jeśli tak, odszyfruj i zamontuj plik. W przeciwnym razie ustaw vold.decrypt na trigger_restart_min_framework. |
vold.decrypt trigger_reset_main |
Ustaw przez vold, aby wyłączyć interfejs proszący o hasło do dysku. |
vold.decrypt trigger_post_fs_data |
Ustaw przez vold do przygotowania /data z wymaganymi katalogami itp. |
vold.decrypt trigger_restart_framework |
Ustaw przez vold, aby uruchomić prawdziwy framework i wszystkie usługi. |
vold.decrypt trigger_shutdown_framework |
Ustaw przez vold, aby wyłączyć cały framework i rozpocząć szyfrowanie. |
vold.decrypt trigger_restart_min_framework |
Ustaw przez vold, aby uruchomić interfejs paska postępu szyfrowania lub wyświetlić prośbę o hasło, w zależności od wartości ro.crypto.state . |
vold.encrypt_progress |
Gdy framework się uruchamia, jeśli ta właściwość jest ustawiona, przechodzi w tryb interfejsu paska postępu. |
vold.encrypt_progress 0 to 100 |
Pasek postępu w interfejsie powinien wyświetlać ustawioną wartość procentową. |
vold.encrypt_progress error_partially_encrypted |
W interfejsie paska postępu powinien wyświetlać się komunikat o nieudanym szyfrowaniu i opcja zresetowania urządzenia do ustawień fabrycznych. |
vold.encrypt_progress error_reboot_failed |
W interfejsie paska postępu powinno wyświetlać się komunikat o ukończeniu szyfrowania i przycisk umożliwiający ponowne uruchomienie urządzenia. Ten błąd nie powinien wystąpić. |
vold.encrypt_progress error_not_encrypted |
Interfejs paska postępu powinien wyświetlać komunikat o wystąpieniu błędu, informować, że żadne dane nie zostały zaszyfrowane ani utracone, oraz zawierać przycisk umożliwiający ponowne uruchomienie systemu. |
vold.encrypt_progress error_shutting_down |
Interfejs paska postępu nie działa, więc nie wiadomo, kto reaguje na ten błąd. I nie powinno do tego dojść. |
vold.post_fs_data_done 0 |
Ustawiono przez vold tuż przed ustawieniem vold.decrypt na trigger_post_fs_data . |
vold.post_fs_data_done 1 |
Ustaw przez init.rc lub
init.rc zaraz po zakończeniu zadania post-fs-data . |
Właściwości init
Właściwość | Opis |
---|---|
ro.crypto.fs_crypto_blkdev |
Ustawione przez polecenie vold checkpw do późniejszego użycia przez polecenie vold restart . |
ro.crypto.state unencrypted |
Ustawione przez init , aby wskazać, że system działa z niezaszyfrowanym
/data ro.crypto.state encrypted . Ustawione przez init , aby wskazać, że ten system działa z zaszyfrowanym /data . |
|
Te 5 właściwości są ustawiane przez init , gdy próbuje zamontować /data z parametrami przekazanymi przez init.rc . vold używa ich do konfigurowania mapowania kryptowalut. |
ro.crypto.tmpfs_options |
Ustawione przez init.rc z opcjami, których init powinien użyć podczas montowania systemu plików tmpfs /data . |
init actions
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