CyanogenMod 12.1을 실행하는 장치를 어떻게 암호화합니까?


9

CyanogenMod 12 및 12.1 '전화기 암호화'설정이 손상 되어 꽤 오랫동안 사용되었습니다. 다른 방식으로 전화를 암호화하는 방법이 있습니까? 암호화 된 / data 디렉토리를 사용하여 CM을 전화기에 사이드로드 할 수 있습니까? 데이터를 안전하게 유지하는 다른 방법이 있습니까? 내가 작업하고있는 기기는 Verizon LG G3입니다.

답변:


6

쉘에서 사용자 데이터 파티션을 암호화하는 데 사용할 수있는 하위 레벨 명령이 있습니다. 고지 사항 / 경고 : 다음 지침에 따라 데이터가 지워지고 필요한 경우 백업해야합니다.

다음 단계를 수행, 당신은 해야 데이터 파티션을 초기화 할 수 있습니다 그것은 나중에 (공장 초기화 유사) 암호화가 :

  1. 휴대 전화를 정상적으로 부팅합니다 (복구가 더 이상 작동하지 않거나 다른 문제가 발생했습니다).
  2. 그 확인 USB 디버깅 모드 (ADB)과 루트 액세스를 ADB에 대한이 활성화됩니다.
  3. adb root다음으로 루트 쉘을 입력하십시오 adb shell.
  4. 선택 사항 : adb logcat다른 쉘 을 호출 하여 로그를 감시하십시오 .
  5. 이 명령을 입력하고 비밀번호를 입력 한 후 Enter를 누르십시오. 실제로 비밀번호가 설정됩니다. 이 명령은 한 줄의 입력 ( head -1)을 읽고 Enter ( tr -d '\n') 에서 후행 줄 바꿈을 제거하고 16 진 표현 ( hexdump ...)으로 변환합니다 . 그것이 무섭게 보이거나이 명령이 무엇을하는지 확실하지 않으면 아래를 참조하십시오.

    vdc cryptfs enablecrypto wipe password $(head -1 | tr -d '\n' | hexdump -ve '1/1 "%.2x"')
    
  6. 모든 것이 정상이면 장치가 키를 설정하고 재부팅하여 암호화를 완료합니다.

(볼륨 데몬) vdc과 통신 하는 위의 명령 ( "볼륨 데몬 클라이언트" vold)에는 cryptfs암호화 와 같은 일부 하위 명령이 있습니다. enablecrypto: 부속 명령은 두 가지 모드가 있습니다 wipe(취소 /data완전히) 및 inplace(원본을 복사하는 동안 가정 암호화를 적용 /data컨테이너 내부를).

그런 다음 Android 5.0부터 네 가지 옵션을 사용할 수 있습니다. 그 중 하나는 password16 진수 단일 키를 키로 허용하는 옵션입니다. 비밀번호는 따라서 경우 foo, 다음 16 진수 표현이다 666f6f( f이다 66, 진수에 o있다 6f, 참조 http://www.asciitable.com/ ). 이에 대한 명령은 다음과 같습니다.

vdc cryptfs enablecrypto wipe password 666f6f

메타 데이터 저장을위한 별도의 파티션이있는 Nexus 5 (코드 이름 망치 머리, cm-12.1-20150814로 실행)에서 테스트되었습니다. 이다 중요한 유저 데이터 파티션이 가지고 encryptable파티션의 경로 또는 특수한 캐릭터 중 하나를 다음 플래그가 설정 footer. 내 /fstab.hammerhead파일 의 (약어) 줄 :

/dev/block/platform/msm_sdcc.1/by-name/userdata / data ext4 ..., 확인, 암호화 가능 = /dev/block/platform/msm_sdcc.1/by-name/metadata

특수 문자열 footer( encryptable=footer)이 있으면 데이터 파티션 끝에 16 KiB가 암호화 메타 데이터를 저장하는 데 사용됩니다.

자세한 내용은 다음을 참조하십시오.


부록 : logcat은 암호화 명령이 완료되고 재부팅 될 때까지 암호화 명령을 발췌 한 것입니다 (끝에 관련없는 그래픽 메시지는 생략). 이 Nexus 5에는 하드웨어 가속 암호화 (QSEECom)가 있습니다.

--------- beginning of main
08-16 12:57:15.459 W/DrmManagerClientImpl(Native)( 2108): DrmManager server died!
08-16 12:57:15.459 I/ServiceManager(  184): service 'drm.drmManager' died
08-16 12:57:15.467 D/Cryptfs (  186): Just asked init to shut down class main
08-16 12:57:15.470 D/Cryptfs (  186): unmounting /mnt/shell/emulated succeeded
08-16 12:57:15.599 I/ServiceManager(  184): service 'media.audio_flinger' died
08-16 12:57:15.599 I/ServiceManager(  184): service 'media.player' died
08-16 12:57:15.599 I/ServiceManager(  184): service 'media.camera' died
...
08-16 12:57:16.695 D/Cryptfs (  186): unmounting /data succeeded
08-16 12:57:16.695 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:16.696 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:16.697 I/Cryptfs (  186): keymaster version is 3
08-16 12:57:16.697 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:16.697 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:16.697 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:16.697 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:18.058 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:18.058 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:18.058 I/Cryptfs (  186): Using scrypt with keymaster for cryptfs KDF
08-16 12:57:18.208 D/BootAnimation( 2683): Use save memory method, maybe small fps in actual.
08-16 12:57:18.208 E/QCOM PowerHAL( 2683): Failed to acquire lock.
08-16 12:57:18.691 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:18.691 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:18.692 I/Cryptfs (  186): Signing safely-padded object
08-16 12:57:18.797 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:18.797 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:20.056 I/Cryptfs (  186): Using scrypt with keymaster for cryptfs KDF
08-16 12:57:20.690 D/QSEECOMAPI: (  186): QSEECom_get_handle sb_length = 0x2000
08-16 12:57:20.691 D/QSEECOMAPI: (  186): App is already loaded QSEE and app id = 2
08-16 12:57:20.691 I/Cryptfs (  186): Signing safely-padded object
08-16 12:57:20.796 D/QSEECOMAPI: (  186): QSEECom_dealloc_memory 
08-16 12:57:20.796 D/QSEECOMAPI: (  186): QSEECom_shutdown_app, app_id = 2
08-16 12:57:21.429 I/Cryptfs (  186): Enabling support for allow_discards in dmcrypt.
08-16 12:57:21.429 I/Cryptfs (  186): load_crypto_mapping_table: target_type = crypt
08-16 12:57:21.429 I/Cryptfs (  186): load_crypto_mapping_table: real_blk_name = /dev/block/platform/msm_sdcc.1/by-name/userdata, extra_params = 1 allow_discards
08-16 12:57:21.431 I/Cryptfs (  186): Making empty filesystem with command /system/bin/make_ext4fs -a /data -l 13725837312 /dev/block/dm-0
08-16 12:57:21.447 I/make_ext4fs(  186): SELinux: Loaded file_contexts from /file_contexts
08-16 12:57:21.447 I/make_ext4fs(  186): Creating filesystem with parameters:
08-16 12:57:21.447 I/make_ext4fs(  186):     Size: 13725835264
08-16 12:57:21.448 I/make_ext4fs(  186):     Block size: 4096
08-16 12:57:21.448 I/make_ext4fs(  186):     Blocks per group: 32768
08-16 12:57:21.448 I/make_ext4fs(  186):     Inodes per group: 8144
08-16 12:57:21.448 I/make_ext4fs(  186):     Inode size: 256
08-16 12:57:21.448 I/make_ext4fs(  186):     Journal blocks: 32768
08-16 12:57:21.449 I/make_ext4fs(  186):     Label: 
08-16 12:57:21.449 I/make_ext4fs(  186):     Transparent compression: none
08-16 12:57:21.449 I/make_ext4fs(  186):     Blocks: 3351034
08-16 12:57:21.449 I/make_ext4fs(  186):     Block groups: 103
08-16 12:57:21.459 I/make_ext4fs(  186):     Reserved block group size: 823
08-16 12:57:21.465 I/make_ext4fs(  186): Created filesystem with 11/838832 inodes and 93654/3351034 blocks
08-16 12:57:21.465 I/make_ext4fs(  186):     Total files: 0
08-16 12:57:21.465 I/make_ext4fs(  186):     Total bytes: 0
08-16 12:57:42.926 D/Cryptfs (  186): Successfully created filesystem on /dev/block/dm-0

와우 @Lekensteyn이 글을 작성해 주셔서 감사합니다. 이번 주말에 이것을 설정하려고 시간을 보내야 할 것입니다. 내가 효과가 발생하면 TWRP에서 모든 것을 지우고 다시 시도 할 수 있습니까?
Zlatty

1
예, 데이터 파티션 일뿐입니다. 실험 할 때 의도적으로 여러 번 닦았습니다.
Lekensteyn

2
LPT : 6.0 (Marshmallow)부터 vdc는 매개 변수 (= cleartext)로 ASCII가 아닌 암호를 사용합니다. 암호 옴 부팅을 입력하라는 요청을받은 후 몇 분 후에 ASCII 테이블로 연습하는 것이 꽤 좋았습니다. 내 잘못으로 인해 비밀번호를 ASCII로 입력해야했다. lol
Denys Vitali

4

나에게는 원래의 대답 이 예상대로 작동하지 않았습니다. 성공적으로 암호화 된 것처럼 보였지만 UI가 매우 빠르게 돌아 왔으며 "암호화"설정에 장치가 암호화 된 것으로 표시되지 않았습니다. 그런 다음 update에 제공된 명령을 적용 했지만 여전히 작동하지 않습니다. 그런 다음 데이터 파티션의 크기줄이고 성공적으로 암호화했습니다. 즉

mount | grep data데이터 파티션의 실제 블록 장치를 찾습니다. 그것이 있다고 가정 해 봅시다 /dev/block/mmcblk0p26.

umount /data 확장 도구가 작동합니다.

e2fsck -f -p /dev/block/mmcblk0p26 다가오는 크기 조정에 문제가 발생하지 않습니다.

tune2fs -l /dev/block/mmcblk0p26 블록 카운트를 얻습니다. 그것이 있다고 가정 해 봅시다 3057395.

resize2fs /dev/block/mmcblk0p26 3057375즉, 원래 블록 카운트에서 20과 같은 충분한 양을 빼십시오.

e2fsck -f -p /dev/block/mmcblk0p26 나를 위해 잘못 배치 된 inode를 발견했습니다.

또한를 /system확보하기 위해 파티션 을 마운트해야했습니다 resize2fs. 내 시스템에서 해당 바이너리는 64 비트 버전의 libc와 연결되었지만 사용 된 TWRP는 그것을 제공하지 않는 것 같습니다. 그래서 명령 앞에 접두사를 붙여야했습니다 env LD_LIBRARY_PATH=/system/lib64.


F2FS 파일 시스템의 경우 : android.stackexchange.com/questions/146081/…
Marc.2377

2

현재 CM12.1 2015년 10월 15일 대답 Lekensteyn에 의해 더 이상 작동하지 않습니다.

분명히 mkfs.f2fs 파일 시스템을 만드는 데 필요한에서 이동되었습니다 /system/bin//sbin/

또한 SELINUX와 경쟁해야합니다. 즉, 몇 가지 추가 단계를 수행해야합니다.

  1. adb 루트
  2. adb 쉘
  3. setenforce 0
  4. 마운트 -oremount, rw / 시스템
  5. ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs
  6. vdc cryptfs enablecrypto 와이프 암호 666f6f

2

Nubia Z7 Max, NX505J 전화를 사용한 다른 업데이트 CM13 2016 년 1 월 9 일 빌드

ln -s /sbin/mkfs.f2fs /system/bin/mkfs.f2fs파일이 다시 여기에 있으므로이 명령 ( )은 더 이상 필요하지 않습니다. 심볼릭 링크를 만들 필요가 없습니다.

이 명령은 더 이상 HEX에있을 필요가 없으며 16 진수를 입력하면 PW가 16 진수가됩니다.
cryptfs enablecrypto wipe password 666f6f-이것은 문자 그대로 나를 위해 암호를 만들지 666f6f않았습니다.foo

메타 데이터에 필요한 추가 블록을 통과했기 때문에 여전히이 문제를 연구하고 있습니다. 이제 GUI와 수동 명령을 통해 암호화를 수행하여 한 번의 부팅주기만으로도 암호화가 가능하다는 사실을 극복해야합니다. 암호화에 성공하면 다시보고하겠습니다.

지금은 암호화하고 제대로 작동하며 처음 부팅하면 전화가 암호화되어 있습니다. TWRP를 사용하면 / data가 암호화되어 있음을 확인할 수 있지만 TWRP에서 시도하는 HEX 및 ASCI 비밀번호가 모두 작동하지 않습니다. 다음에 재부팅 할 때 Android OS는 CM13을 완전히 부팅 할 수 없습니다. 올바른 암호화 암호가 있음을 확인한 다음 암호화 된 부팅이 1 개만 나타납니다. 암호화가 처음으로 성공적으로 시작된 후에는 부팅주기의 애니메이션 단계에서 잠 깁니다. 보안 모범 사례에서는 이제 AES256 전화 암호화를 권장합니다.


CM13에서 AES256 전화 암호화를 사용하여 시스템을 얼마나 안정적으로 유지 했습니까? 여기에 스레드를 열었습니다. android.stackexchange.com/q/134981/9897
Léo Léopold Hertz 준영

2

Cyanogenmod 12.1을 실행하는 Moto X 2013을 사용하면 암호화 할 수 없었습니다. 마지막으로 다음 단계를 수행했습니다.

  1. 전화기의 개발자 설정에서 루트를 활성화하고 셸을 엽니 다 (터미널 앱, 개발자 설정에서도 활성화 할 수 있음)
  2. 를 입력 su하고 루트 액세스를 확인 하십시오 .
  3. 시작하다 setenforce 0
  4. 이제 설정을 열고 보안으로 이동하여 전화 암호화를 선택하십시오 . 그런 다음 Android가 재부팅되고 전화 암호화가 시작됩니다.

나는 결합하여이 솔루션에 온 예술의 대답이 포럼 스레드를 .


나를 위해 작동하지 않았다. Btw,이 후에 SELinux 상태를 1로 다시 설정할 수 있습니까?
Marc.2377

1

6 시간 동안 정신적 고통과 땀을 흘린 후에 나는 나를 위해 일한 해결책을 발견했을 수도 있습니다. 그리고 그것은 사고이기도했다. CyanogenMod 13.0 및 Android 6.0.1이 설치된 Samsung S4 Mini 에서이 작업을 수행했습니다. 여기서 중요한 핵심 요소는 전화가 이전에 루팅되었을 때 전화가 전혀 작동하지 않기 때문에 깨끗한 전화 (새 펌웨어 및 루팅되지 않은)에서 시작한 것입니다.

나는 Firelord와 Lekensteyn의 솔루션을 문제에 사용했지만 명령에서 한 줄을 잊어 버렸습니다.

내가 한 방법은 다음과 같습니다.

  1. 나는 켜져 안드로이드 디버깅루트 액세스만 ADB 에서 개발자 옵션 .

  2. ADB 명령 프롬프트에서 adb rootand adb shell명령을 사용했습니다 . 그 후 다른 ADB 명령 프롬프트를 열고 명령을 사용했습니다 adb logcat.

  3. 첫 번째 ADB 셸에서 나는 setenforce 0그 이후로 갔다 vdc cryptfs enablecrypto wipe password YOUR-PASSWORD.

중요 공지 : password 명령은 사용중인 Android 버전과 다를 수 있습니다. 당신이 사용하는 경우 안드로이드 5.X를 , 당신은 해야한다 사용 진수 시스템을합니다 (대하 라인에서 16 진수 값의 Hx 라인에 암호의 상징이다). Android 6.X를 사용하는 경우 YOUR-PASSWORD는 입력 한 비밀번호입니다.

알다시피 mount -oremount,rw /system명령 을 사용하는 것을 잊었습니다 . 그 후 화면이 검게 변합니다. 내가 보았을 때, 로그가있는 ADB 쉘이 중지되고 완료 된 후 전화를 재부팅했습니다. 그러나 모든 사람에게 문제는 CyanogenMod 가로 드되지 않는다는 것입니다. 그리고 나는 그것을 매우 쉽게 고칠 수있었습니다.

  1. 보류 권까지 및 홈 및 전원을 TWRP 부팅까지 아래로. 암호화 비밀번호를 묻습니다.
  2. 할 일 사이 애 노젠 모드 설치 추가 Google 애플리케이션 (가이드의 두 번째 부분)와 부분.
  3. 완료되면 장치를 재부팅하십시오. 부팅되면 시간이 걸립니다. 먼저 전화를 시작한 다음 암호화 암호를 묻고 부팅 될 때까지 시간이 걸립니다.

거기 당신은 간다, 그것은 작동합니다. 처음에는 전화가 설정되면 잠시 기다리십시오. 너무 빨리 돌진하면 설치 마법사가 약간 충돌 할 수 있지만 충돌이 발생하면 자동으로 다시 시작됩니다.

CyanogenMod와 Android Encryption이 작동하는 방식에 대한 아주 작은 지식으로 포맷 중에 중요한 Cyanogen 또는 Android 파일을 삭제하여 부팅을 중지시키는 것으로 생각합니다.


1

휴대 전화에서 암호화가 작동하지 않습니다 (SGS5; CM13, TWRP 3.0.2-2). 나는 항상 검은 색 화면을 받았습니다.

쉘 명령을 사용하고 싶지 않았으므로 다른 방법을 찾았습니다.

SuperSU를 설치하고 앱에서 제거한 다음 SU-Remover 를 플래시했습니다 .

그 후 메뉴에서 암호화를 사용할 수있었습니다.

경고:

  • 암호화가 내 데이터 및 앱 (내부 SD의 파일 포함)을 모두 삭제 했으므로 먼저 백업하십시오 !
  • 암호화 후, 2GB의 내부 공간 만 남았습니다 (일반적으로 11GB). Cyanogenmod 자체를 제거하고 전체 지우기를 수행하고 Cyanogenmod를 다시 설치하고 내 공간을 다시 확보하기위한 다른 암호화 시도가 필요했습니다.
  • 또한 루트를 다시 활성화해야합니다 .BETA-SuperSU-v2.68-20160228150503 을 사용했습니다 ( twrp 로 플래시).
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.