전체 디스크 암호화는 암호화된 키를 사용하여 Android 기기에서 사용자 데이터를 인코딩하는 프로세스입니다. 기기가 암호화되면 사용자가 생성한 모든 데이터는 디스크에 커밋되기 전에 자동으로 암호화되며 모든 읽기 작업은 데이터를 호출 프로세스로 반환하기 전에 자동으로 복호화합니다.
전체 디스크 암호화는 Android 4.4에서 도입되었지만 Android 5.0에는 아래와 같은 새로운 기능이 도입되었습니다.
- 첫 번째 부팅이 오래 걸리는 것을 방지하기 위해 데이터 파티션에서 사용된 블록만 암호화하는 빠른 암호화를 구축했습니다. 현재는 ext4 및 f2fs 파일 시스템에서만 빠른 암호화를 지원합니다.
- 첫 번째 부팅에서 암호화되도록
forceencrypt
fstab 플래그를 추가했습니다. - 비밀번호가 없는 패턴 및 암호화 지원을 추가했습니다.
- TEE(신뢰할 수 있는 실행 환경) 서명 기능(예: TrustZone)을 사용하는 암호화 키와 관련된 하드웨어 지원 저장소를 추가했습니다. 자세한 내용은 암호화된 키 저장을 참조하세요.
주의: Android 5.0으로 업그레이드된 후 암호화된 기기는 초기화 후 암호화되지 않은 상태로 되돌릴 수 있습니다. 최초 부팅 시에 암호화된 새 Android 5.0 기기는 암호화되지 않은 상태로 되돌릴 수 없습니다.
Android 전체 디스크 암호화의 원리
Android 전체 디스크 암호화는 블록 기기 레이어에서 작동하는 커널 기능인 dm-crypt
에 기반합니다. 따라서 암호화는 삽입된 MultiMediaCard(eMMC) 및 커널에 블록 기기로 제시되는 유사한 플래시 기기와 호환됩니다. 원시 NAND 플래시 칩과 직접적으로 통신하는 YAFFS의 경우에는 암호화가 불가능합니다.
암호화 알고리즘은 암호 블록 체인(CBC) 및 ESSIV:SHA256이 있는 128 고급 암호화 표준(AES)입니다. 마스터 키는 OpenSSL 라이브러리 호출을 통해 128비트 AES로 암호화됩니다. 키에 128비트 이상을 사용해야 하며 256은 선택사항입니다.
참고: OEM은 마스터 키 암호화에 128비트 이상을 사용할 수 있습니다.
Android 5.0 버전에는 다음 4개의 암호화 상태가 있습니다.
- 기본값
- PIN
- 비밀번호
- 패턴
처음 부팅하면 기기는 임의로 생성된 128비트 마스터 키를 생성하여 기본 비밀번호와 저장된 솔트로 해시합니다. 기본 비밀번호는 'default_password'입니다. 그러나 결과로 반환되는 해시는 서명 해시를 사용하여 마스터 키를 암호화하는 TEE(예: TrustZone)를 통해서도 서명됩니다.
Android 오픈소스 프로젝트 cryptfs.cpp 파일에서 정의된 기본 비밀번호를 확인할 수 있습니다.
사용자가 기기에서 PIN/패스 또는 비밀번호를 설정하면 128비트 키만 다시 암호화되어 저장됩니다 즉, 사용자 PIN/패스/패턴이 변경되더라도 사용자 데이터가 다시 암호화되지 않습니다. 관리 기기에는 PIN, 패턴 또는 비밀번호 제한이 적용될 수 있습니다.
암호화는 init
및 vold
에서 관리합니다.
init
는 vold
를 호출하며 vold는 init에서 이벤트를 트리거하는 속성을 설정합니다. 시스템의 다른 부분에서도 속성을 확인하여 보고서 상태와 같은 작업을 실행하거나 비밀번호를 요구하거나 치명적인 오류 발생 시에는 초기화하라는 메시지를 표시합니다. vold
에서 암호화 기능을 호출하기 위해 시스템은 명령줄 도구 vdc
의 cryptfs
명령어인 checkpw
, restart
, enablecrypto
, changepw
, cryptocomplete
, verifypw
, setfield
, getfield
, mountdefaultencrypted
, getpwtype
, getpw
, clearpw
를 사용합니다.
/data
를 암호화, 복호화 또는 완전 삭제하려면 /data
를 마운트하면 안 됩니다. 그러나 모든 사용자 인터페이스(UI)를 표시하려면 프레임워크가 시작되어야 하며 프레임워크는 /data
를 실행해야 합니다. 이 문제를 해결하기 위해 임시 파일 시스템이 /data
에 마운트됩니다.
그러면 Android에서 필요에 따라 비밀번호를 요구하거나 진행률을 표시하거나 데이터 완전 삭제를 제안할 수 있습니다. 임시 파일 시스템에서 실제 /data
파일 시스템으로 전환하려면 시스템이 임시 파일 시스템에서 파일이 열려 있는 모든 프로세스를 중지하고 실제 /data
파일 시스템에서 그러한 프로세스를 다시 시작해야 하는 제한이 있습니다. 이렇게 하려면 모든 서비스가 core
, main
, late_start
라는 세 가지 그룹 중 하나에 있어야 합니다.
core
: 시작되면 종료되지 않습니다.main
: 디스크 비밀번호가 입력되면 종료된 다음 다시 시작됩니다.late_start
:/data
가 복호화 및 마운트될 때까지 시작되지 않습니다.
이러한 작업을 트리거하기 위해 vold.decrypt
속성이 다양한 문자열로 설정됩니다.
서비스를 종료하고 다시 시작하려면 다음과 같은 init
명령어를 사용합니다.
class_reset
: 서비스를 중지하지만 class_start로 다시 시작할 수 있습니다.class_start
: 서비스를 다시 시작합니다.class_stop
: 서비스를 중지하고SVC_DISABLED
플래그를 추가합니다. 중지된 서비스는class_start
에 응답하지 않습니다.
흐름
암호화된 기기에는 네 가지 흐름이 있습니다. 기기는 한 번만 암호화되고 일반적인 부팅 흐름을 따릅니다.
- 이전에 암호화되지 않은 기기를 암호화
forceencrypt
로 새 기기를 암호화: 최초 부팅 시의 필수 암호화(Android L부터)- 기존 기기 암호화: 사용자가 시작한 암호화(Android K 이하)
- 암호화된 기기 부팅
- 비밀번호가 없는 암호화된 기기를 시작: 설정된 비밀번호가 없는 암호화된 기기를 부팅(Android 5.0 이상을 실행하는 기기와 관련 있음)
- 비밀번호가 있는 암호화된 기기 시작: 설정된 비밀번호가 있는 암호화된 기기를 부팅
이러한 흐름 외에 기기에서는 /data
암호화에도 실패할 수 있습니다.
각 흐름은 아래에 자세히 설명되어 있습니다.
forceencrypt로 새 기기 암호화
Android 5.0 기기를 위한 일반적인 최초 부팅입니다.
forceencrypt
플래그로 암호화되지 않은 파일 시스템 감지/data
는 암호화되어 있지 않지만 암호화되어야 합니다.forceencrypt
에서 명령하기 때문입니다./data
를 마운트 해제합니다./data
암호화 시작vold.decrypt = "trigger_encryption"
은init.rc
를 트리거하므로vold
가 비밀번호 없이/data
를 암호화하게 됩니다. 새 기기이므로 설정되는 내용은 없습니다.- tmpfs 마운트
vold
가ro.crypto.tmpfs_options
에서 tmpfs 옵션을 사용하여 tmpfs/data
를 마운트하고 속성vold.encrypt_progress
를 0으로 설정합니다.vold
가 암호화된 시스템을 부팅하기 위해 tmpfs/data
를 준비하고 속성vold.decrypt
를trigger_restart_min_framework
로 설정합니다. - 진행률 표시를 위한 프레임워크 불러오기
이 기기에는 암호화할 데이터가 거의 없으며 암호화가 매우 빠르게 발생하므로 진행률 표시줄이 실제로 표시되지 않을 때가 많습니다. 진행률 UI에 관한 자세한 내용은 기존 기기 암호화를 참조하세요.
/data
가 암호화되면 프레임워크 중단vold
는defaultcrypto
서비스를 시작하는trigger_default_encryption
으로vold.decrypt
를 설정합니다. 이 경우 암호화된 기본 사용자 데이터를 마운트하기 위한 아래 흐름이 시작됩니다.trigger_default_encryption
은 암호화 유형을 검사하여/data
가 비밀번호로 또는 비밀번호 없이 암호화되었는지 확인합니다. Android 5.0 기기는 최초 부팅 시에 암호화되므로 설정된 비밀번호가 없어야 합니다. 따라서/data
를 복호화 및 마운트합니다./data
마운트그러면
init
는init.rc
에서 설정된ro.crypto.tmpfs_options
에서 선택하는 매개변수를 사용하여 tmpfs RAMDisk에/data
를 마운트합니다.- 프레임워크 시작
vold
를trigger_restart_framework
로 설정하여 일반적인 부팅 프로세스를 계속합니다.
기존 기기 암호화
L로 이전된 암호화되지 않은 Android K 또는 이전 버전의 기기를 암호화할 때 발생하는 상황입니다.
이 프로세스는 사용자에 의해 시작되며 코드에서는 '인플레이스 암호화'라고 합니다. 사용자가 기기를 암호화하기로 하면 UI에서는 암호화 프로세스 완료를 위한 전력이 충분한지 보기 위해 배터리가 완전히 충전되었고 AC 어댑터가 연결되어 있는지 확인합니다.
경고: 암호화가 끝나기 전에 기기가 방전 및 종료되면 파일 데이터가 일부만 암호화된 상태로 남습니다. 이 경우 기기를 초기화해야 하며 모든 데이터가 사라집니다.
인플레이스 암호화를 사용 설정하기 위해 vold
는 루프를 시작하여 실제 블록 기기의 각 섹터를 읽고 암호화 블록 기기에 씁니다. vold
는 섹터를 읽고 쓰기 전에 섹터가 사용되고 있는지 확인하므로 데이터가 거의 없거나 전혀 없는 새 기기에서 암호화가 훨씬 빠르게 이루어집니다.
기기 상태: ro.crypto.state = "unencrypted"
를 설정하고 on nonencrypted
init
트리거를 실행하여 부팅을 계속합니다.
- 비밀번호 확인
UI는
passwd
가 사용자의 잠금 화면 비밀번호인cryptfs enablecrypto inplace
명령어를 사용하여vold
를 호출합니다. - 프레임워크 중단
vold
가 오류를 확인하고 암호화할 수 없는 경우 -1을 반환하며 로그에 이유를 출력합니다. 암호화할 수 있는 경우 속성vold.decrypt
를trigger_shutdown_framework
로 설정합니다. 이로 인해init.rc
가 클래스late_start
및main
에서 서비스를 중지합니다. - 암호화 바닥글 생성
- 현재 위치 파일 생성
- 재부팅
- 현재 위치 파일 감지
/data
암호화 시작그러면
vold
가 암호화 매핑을 설정하여 실제 블록 기기에 매핑되지만 각 섹터를 작성된 대로 암호화하고 읽은 대로 복호화하는 가상 암호화 블록 기기를 생성합니다. 그런 다음vold
는 암호화 메타데이터를 생성 및 작성합니다.- 암호화 도중 tmpfs 마운트
vold
가ro.crypto.tmpfs_options
에서 tmpfs 옵션을 사용하여 tmpfs/data
를 마운트하고 속성vold.encrypt_progress
를 0으로 설정합니다.vold
가 암호화된 시스템을 부팅하기 위해 tmpfs/data
를 준비하고 속성vold.decrypt
를trigger_restart_min_framework
로 설정합니다. - 진행률 표시를 위한 프레임워크 불러오기
trigger_restart_min_framework
로 인해init.rc
에서 서비스의main
클래스가 시작됩니다.vold.encrypt_progress
가 0으로 설정된 것을 확인한 프레임워크는 진행률 표시줄 UI를 불러오며 UI에서는 속성을 5초마다 쿼리하여 진행률 표시줄을 업데이트합니다. 암호화 루프는 다른 백분율의 파티션을 암호화할 때마다vold.encrypt_progress
를 업데이트합니다. /data
가 암호화되면 암호화 바닥글 업데이트/data
가 성공적으로 암호화되면vold
는 메타데이터에서ENCRYPTION_IN_PROGRESS
플래그를 삭제합니다.기기가 성공적으로 잠금 해제되면 비밀번호를 사용하여 마스터 키를 암호화하고 암호화 바닥글이 업데이트됩니다.
어떤 이유로 재부팅에 실패하면
vold
는 속성vold.encrypt_progress
를error_reboot_failed
로 설정하며 UI에는 사용자에게 버튼을 눌러 재부팅하라는 메시지가 표시됩니다. 이는 발생할 것으로 예상되지 않습니다.
기본 암호화로 암호화된 기기를 시작
비밀번호가 없는 암호화된 기기를 부팅하는 경우에 발생하는 상황입니다. Android 5.0 기기는 최초 부팅 시에 암호화되므로 설정된 비밀번호가 없으며 따라서 이는 기본 암호화 상태입니다.
- 비밀번호 없이 암호화된
/data
감지/data
를 마운트할 수 없고 플래그encryptable
또는forceencrypt
중 하나가 설정되어 있으므로 Android 기기가 암호화되었다고 감지합니다.vold
는defaultcrypto
서비스를 시작하는trigger_default_encryption
으로vold.decrypt
를 설정합니다.trigger_default_encryption
은 암호화 유형을 검사하여/data
가 비밀번호로 또는 비밀번호 없이 암호화되었는지 확인합니다. - /data 복호화
기기를 사용할 수 있도록 블록 기기를 통해
dm-crypt
기기를 생성합니다. - /data 마운트
그러면
vold
는 복호화된 실제/data
파티션을 마운트한 다음 새 파티션을 준비합니다. 속성vold.post_fs_data_done
을 0으로 설정하고vold.decrypt
를trigger_post_fs_data
로 설정합니다. 이로 인해init.rc
가post-fs-data
명령어를 실행하게 됩니다. 명령어는 필요한 모든 디렉터리 또는 링크를 생성한 다음vold.post_fs_data_done
을 1로 설정합니다.vold
가 이 속성에서 1을 확인하면 속성vold.decrypt
를trigger_restart_framework.
로 설정합니다. 이로 인해init.rc
가 클래스main
에서 서비스를 다시 시작하고 부팅 이후 처음으로 클래스late_start
에서도 서비스를 시작하게 됩니다. - 프레임워크 시작
이제 프레임워크에서 복호화된
/data
를 사용하여 모든 서비스를 부팅하고 시스템을 사용할 수 있습니다.
기본 암호화 없이 암호화된 기기를 시작
비밀번호가 설정된 암호화된 기기를 부팅하면 발생하는 상황입니다. 기기의 비밀번호는 PIN, 패턴이나 비밀번호일 수 있습니다.
- 비밀번호로 암호화된 기기 감지
플래그
ro.crypto.state = "encrypted"
때문에 Android 기기가 암호화되었다고 감지합니다.vold
는vold.decrypt
를trigger_restart_min_framework
로 설정합니다./data
가 비밀번호로 암호화되었기 때문입니다. - tmpfs 마운트
init
는 다섯 개의 속성을 설정하여init.rc
에서 전달된 매개변수로/data
에 주어진 초기 마운트 옵션을 저장합니다.vold
는 이러한 속성을 사용하여 암호화 매핑을 설정합니다.ro.crypto.fs_type
ro.crypto.fs_real_blkdev
ro.crypto.fs_mnt_point
ro.crypto.fs_options
ro.crypto.fs_flags
(0x 뒤에 붙는 ASCII 8자리 16진수)
- 비밀번호를 요구하도록 프레임워크 시작
프레임워크가 시작되고
vold.decrypt
가trigger_restart_min_framework
로 설정되어 있음을 확인합니다. 이를 통해 프레임워크가 tmpfs/data
디스크에서 부팅되고 사용자 비밀번호를 가져와야 한다고 인지합니다.그러나 먼저 디스크가 제대로 암호화되었는지 확인해야 합니다. 명령어
cryptfs cryptocomplete
를vold
로 전송합니다.vold
는 암호화가 성공적으로 완료된 경우 0을 반환하며 내부 오류 발생 시에는 -1을, 암호화가 성공적으로 완료되지 않은 경우에는 -2를 반환합니다.vold
는CRYPTO_ENCRYPTION_IN_PROGRESS
플래그의 암호화 메타데이터를 확인하여 이를 파악합니다. 설정된 경우에는 암호화 프로세스가 중단된 것이므로 기기에서 사용할 수 있는 데이터가 없습니다.vold
가 오류를 반환하는 경우에는 UI에서는 기기를 재부팅하고 초기화하라는 메시지를 사용자에게 표시하고 사용자가 이를 실행할 수 있도록 버튼을 제공해야 합니다. - 비밀번호로 데이터 복호화
cryptfs cryptocomplete
가 성공하면 프레임워크에 디스크 비밀번호를 요구하는 UI가 표시됩니다. UI는 명령어cryptfs checkpw
를vold
로 전송하여 비밀번호를 확인합니다. 비밀번호가 올바르면(복호화된/data
를 임시 위치에 성공적으로 마운트한 다음 마운트 해제하여 판단됨)vold
는 복호화된 블록 기기의 이름을 속성ro.crypto.fs_crypto_blkdev
에 저장하고 UI에 상태 0을 반환합니다. 비밀번호가 올바르지 않으면 UI에 -1을 반환합니다. - 프레임워크 중지
UI는 암호화 부팅 그래픽을 배치한 다음 명령어
cryptfs restart
로vold
를 호출합니다.vold
는 속성vold.decrypt
를trigger_reset_main
으로 설정하므로init.rc
가class_reset main
을 실행하게 됩니다. 이렇게 하면 기본 클래스의 모든 서비스가 중지되어 tmpfs/data
를 마운트 해제할 수 있습니다. /data
마운트그러면
vold
는 복호화된 실제/data
파티션을 마운트하고 새 파티션을 준비합니다(최초 버전에서 지원되지 않는 완전 삭제 옵션으로 암호화된 경우에는 준비될 수 없었음). 속성vold.post_fs_data_done
을 0으로 설정하고vold.decrypt
를trigger_post_fs_data
로 설정합니다. 이로 인해init.rc
가post-fs-data
명령어를 실행하게 됩니다. 명령어는 필요한 모든 디렉터리 또는 링크를 생성한 다음vold.post_fs_data_done
을 1로 설정합니다.vold
가 이 속성에서 1을 확인하면 속성vold.decrypt
를trigger_restart_framework
로 설정합니다. 이로 인해init.rc
가 클래스main
에서 서비스를 다시 시작하고 부팅 이후 처음으로 클래스late_start
에서도 서비스를 시작합니다.- 전체 프레임워크 시작
이제 프레임워크에서 복호화된
/data
파일 시스템을 사용하여 모든 서비스를 부팅하고 시스템을 사용할 수 있습니다.
실패
복호화에 실패한 기기에는 다음과 같은 이유로 오류가 발생할 수 있습니다. 기기는 부팅을 위한 정상적인 일련의 단계에 걸쳐 시작됩니다.
- 비밀번호로 암호화된 기기 감지
- tmpfs 마운트
- 비밀번호를 요구하도록 프레임워크 시작
하지만 프레임워크가 열리면 기기에 다음과 같은 오류가 발생할 수 있습니다.
- 비밀번호가 일치하지만 데이터를 복호화할 수 없음
- 사용자가 잘못된 비밀번호를 30회 입력함
이러한 오류가 해결되지 않을 경우 사용자에게 초기화 관련 메시지가 표시됩니다.
vold
가 암호화 프로세스 중에 오류를 감지하고 아직 어떤 데이터도 제거되지 않고 프레임워크가 실행되는 경우 vold
는 속성 vold.encrypt_progress
를 error_not_encrypted
로 설정합니다.
UI는 사용자에게 재부팅하라는 메시지를 표시하고 암호화 프로세스가 시작되지 않았음을 알립니다. 프레임워크가 해제되었지만 아직 진행률 표시줄 UI는 실행되지 않은 상태에서 오류가 발생하면 vold
는 시스템을 재부팅합니다. 재부팅이 실패하면 vold.encrypt_progress
를 error_shutting_down
으로 설정하고 -1을 반환하지만 오류를 포착할 수 있는 요소는 없습니다. 이러한 상황은 발생하지 않을 것으로 예상됩니다.
vold
는 암호화 프로세스 중에 오류를 감지하면 vold.encrypt_progress
를 error_partially_encrypted
로 설정하고 -1을 반환합니다. 그러면 UI는 암호화에 실패했다는 메시지를 표시하고 사용자가 기기를 초기화할 수 있도록 버튼을 제공합니다.
암호화된 키 저장
암호화된 키는 암호화 메타데이터에 저장됩니다. 하드웨어 지원은 TEE(신뢰할 수 있는 실행 환경) 서명 기능을 사용하여 구현됩니다. 이전에는 scrypt를 사용자의 비밀번호와 저장된 솔트에 적용하여 생성된 키로 마스터 키를 암호화했습니다. Google은 키를 오프박스 공격으로부터 보호하기 위해 결과로 반환된 키를 저장된 TEE 키로 서명하여 알고리즘을 확장했습니다. 그러면 결과로 반환된 서명이 scrypt의 추가 적용으로 인해 적절한 길이의 키로 변환됩니다. 그리고 이 키는 마스터 키를 암호화하고 복호화하는 데 사용됩니다. 이 키를 저장하는 방법은 다음과 같습니다.
- 임의의 16바이트 디스크 암호화 키(DEK)와 16바이트 솔트를 생성합니다.
- scrypt를 사용자 비밀번호와 솔트에 적용하여 32비트 중간 키 1(IK1)을 생성합니다.
- 제로바이트의 IK1을 하드웨어에 결합된 비공개 키(HBK)의 크기에 패딩합니다. 구체적인 패딩 방식: 00 || IK1 || 00..00, 1제로바이트, 32 IK1바이트, 223제로바이트
- 패딩된 IK1을 HBK로 서명하여 256바이트 IK2를 생성합니다.
- scrypt를 IK2 및 솔트(2단계와 동일한 솔트)에 적용하여 32바이트 IK3을 생성합니다.
- IK3의 최초 16바이트를 KEK로, 마지막 16바이트를 IV로 사용합니다.
- AES_CBC, 키 KEK, 초기화 벡터 IV로 DEK를 암호화합니다.
비밀번호 변경
사용자가 설정에서 비밀번호를 변경하거나 제거하기로 하면 UI는 명령어 cryptfs changepw
를 vold
로 전송하며 vold
는 새 비밀번호로 디스크 마스터 키를 다시 암호화합니다.
암호화 속성
vold
와 init
는 속성을 설정하여 서로 통신합니다. 다음은 암호화에 사용 가능한 속성 목록입니다.
Vold 속성
속성 | 설명 |
---|---|
vold.decrypt trigger_encryption |
비밀번호 없이 드라이브를 암호화합니다. |
vold.decrypt trigger_default_encryption |
드라이브가 비밀번호 없이 암호화되었는지 확인합니다.
비밀번호 없이 암호화된 경우 드라이브를 복호화하여 마운트하고 그렇지 않은 경우에는 vold.decrypt 를 trigger_restart_min_framework로 설정합니다. |
vold.decrypt trigger_reset_main |
vold에 의해 설정되며 디스크 비밀번호를 요구하는 UI를 종료합니다. |
vold.decrypt trigger_post_fs_data |
vold에 의해 설정되며 필요한 디렉터리 등으로 /data 를 준비합니다. |
vold.decrypt trigger_restart_framework |
vold에 의해 설정되며 실제 프레임워크와 모든 서비스를 시작합니다. |
vold.decrypt trigger_shutdown_framework |
vold에 의해 설정되며 전체 프레임워크를 종료하여 암호화를 시작합니다. |
vold.decrypt trigger_restart_min_framework |
vold에 의해 설정되며 ro.crypto.state 의 값에 따라 암호화를 위한 진행률 표시줄 UI를 시작하거나 비밀번호를 요구합니다. |
vold.encrypt_progress |
프레임워크가 시작되면 이 속성이 설정된 경우 진행률 표시줄 UI 모드로 전환됩니다. |
vold.encrypt_progress 0 to 100 |
진행률 표시줄 UI에 설정된 백분율 값이 표시되어야 합니다. |
vold.encrypt_progress error_partially_encrypted |
진행률 표시줄 UI에 암호화 실패 메시지가 표시되어야 하며 사용자에게 기기 초기화를 위한 옵션을 제공해야 합니다. |
vold.encrypt_progress error_reboot_failed |
진행률 표시줄 UI에 암호화 완료 메시지가 표시되어야 하며 사용자에게 기기 재부팅을 위한 버튼을 제공해야 합니다. 이 오류는 발생하지 않을 것으로 예상됩니다. |
vold.encrypt_progress error_not_encrypted |
진행률 표시줄 UI에 오류가 발생했으며 암호화되었거나 손실된 데이터가 없다는 메시지가 표시되어야 하며 사용자에게 시스템 재부팅을 위한 버튼을 제공해야 합니다. |
vold.encrypt_progress error_shutting_down |
진행률 표시줄 UI가 실행되지 않고 있으므로 이 오류에 누가 응답할지 알 수 없습니다. 어차피 발생하면 안 되는 상황입니다. |
vold.post_fs_data_done 0 |
vold.decrypt 를 trigger_post_fs_data 로 설정하기 직전에 vold 에 의해 설정됩니다. |
vold.post_fs_data_done 1 |
init.rc 에 의해 설정되거나 작업 post-fs-data 를 끝낸 직후에 init.rc 에 의해 설정됩니다. |
init 속성
속성 | 설명 |
---|---|
ro.crypto.fs_crypto_blkdev |
나중에 vold 명령어 restart 에 의해 사용될 수 있도록 vold 명령어 checkpw 에 의해 설정됩니다. |
ro.crypto.state unencrypted |
이 시스템이 암호화되지 않은 /data ro.crypto.state encrypted 로 실행되는 것을 나타내기 위해 init 에 의해 설정됩니다. 이 시스템이 암호화된 /data 로 실행되는 것을 나타내기 위해 init 에 의해 설정됩니다. |
|
이러한 다섯 가지 속성은 init.rc 에서 전달된 매개변수로 /data 를 마운트하려고 할 때 init 에 의해 설정됩니다. vold 는 이러한 속성을 사용하여 암호화 매핑을 설정합니다. |
ro.crypto.tmpfs_options |
tmpfs /data 파일 시스템을 마운트할 때 init에서 사용해야 하는 옵션과 함께 init.rc 에 의해 설정됩니다. |
Init 작업
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