Adiantum 사용 설정

Adiantum은 CPU에 AES 지침이 없는 Android 9 이상을 실행하는 기기를 위해 디자인된 암호화 메서드입니다. ARMv8 암호화 확장 프로그램을 포함하는 ARM 기반 기기나 AES-NI를 포함하는 x86 기반 기기를 제공하는 경우에는 Adiantum을 사용하면 안 됩니다. 이러한 플랫폼에서는 AES가 더 빠르게 작동합니다.

이러한 AES CPU 지침이 없는 기기의 경우 Adiantum은 기기에 성능 오버헤드가 매우 적은 암호화를 제공합니다. 벤치마킹 수치는 Adiantum 문서를 참조하세요. 하드웨어에서 벤치마킹 소스를 실행하려면 GitHub의 Adiantum 소스를 참조하세요.

Android 9 이상을 실행하는 기기에 Adiantum을 사용 설정하려면 커널과 사용자 공간을 변경해야 합니다.

커널 변경사항

Adiantum은 Android 공통 커널 버전 4.9 이상에서 지원됩니다.

기기 커널에서 아직 Adiantum을 지원하지 않는다면 아래 나열된 변경사항 중에서 선택하세요. 선택에 문제가 있는 경우 전체 디스크 암호화(FDE)를 사용하는 기기는 fscrypt: 패치를 제외할 수 있습니다.

커널 버전 암호화 및 fscrypt 패치 dm-crypt 패치
4.19 4.19 커널 dm-crypt 패치
4.14 4.14 커널 dm-crypt 패치
4.9 4.9 커널 dm-crypt 패치

커널에 Adiantum 사용 설정

Android 11 이상

기기가 Android 11 이상으로 출시되는 경우 기기의 커널 구성에서 다음 설정을 사용 설정합니다.

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_FS_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION=y
CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y
CONFIG_DM_DEFAULT_KEY=y

기기에서 32비트 ARM 커널을 실행 중인 경우 NEON 안내를 사용 설정하여 성능도 개선합니다.

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

Android 9 및 10

기기가 Android 9 또는 10으로 출시되는 경우 약간 다른 커널 구성 설정이 필요합니다. 다음 설정을 사용 설정합니다.

CONFIG_CRYPTO_ADIANTUM=y
CONFIG_DM_CRYPT=y

기기에서 파일 기반 암호화를 사용하는 경우 다음 항목도 사용 설정합니다.

CONFIG_F2FS_FS_ENCRYPTION=y

마지막으로, 기기에서 32비트 ARM 커널을 실행하는 경우 NEON 안내를 사용 설정하여 성능을 개선합니다.

CONFIG_KERNEL_MODE_NEON=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_CHACHA20_NEON=y
CONFIG_CRYPTO_NHPOLY1305_NEON=y

사용자 공간 변경사항

Android 10 이상을 실행하는 기기의 경우 이미 Adiantum 사용자 공간 변경사항이 있습니다.

Android 9을 실행하는 기기의 경우 다음 변경사항을 선별합니다.

기기에 Adiantum 사용 설정

먼저 기기의 PRODUCT_SHIPPING_API_LEVEL이 기기에 설치된 Android 버전과 일치하도록 올바르게 설정되었는지 확인합니다. 예를 들어 Android 11로 출시되는 기기에는 PRODUCT_SHIPPING_API_LEVEL := 30이 있어야 합니다. 이는 암호화 설정의 몇 가지 기본값이 출시 버전마다 다르기 때문에 중요합니다.

파일 기반 암호화가 적용된 기기

기기의 내부 저장소에서 Adiantum 파일 기반 암호화를 사용 설정하려면 기기 fstab 파일의 userdata 파티션 행의 마지막 열(fs_mgr_flags 열)에 다음 옵션을 추가합니다.

fileencryption=adiantum

기기가 Android 11 이상으로 출시되는 경우 메타데이터 암호화도 사용 설정해야 합니다. 내부 저장소의 메타데이터 암호화에 Adiantum을 사용하려면 userdatafs_mgr_flags에도 다음 옵션이 포함되어야 합니다.

metadata_encryption=adiantum,keydirectory=/metadata/vold/metadata_encryption

다음으로 어답터블 스토리지에서 Adiantum 암호화를 사용 설정합니다. Adiantum 암호화를 사용 설정하려면 PRODUCT_PROPERTY_OVERRIDES에 다음 속성을 설정합니다.

Android 11 이상:

ro.crypto.volume.options=adiantum
ro.crypto.volume.metadata.encryption=adiantum

Android 9 및 10:

ro.crypto.volume.contents_mode=adiantum
ro.crypto.volume.filenames_mode=adiantum
ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

마지막으로 커널 명령줄에 blk-crypto-fallback.num_keyslots=1을 추가합니다(선택사항). 그러면 Adiantum 메타데이터 암호화를 사용할 때 메모리 사용량이 약간 줄어듭니다. 이렇게 하기 전에 fstabinlinecrypt 마운트 옵션이 지정되어 있지 않은지 확인합니다. 이 옵션이 지정되어 있다면 Adiantum 암호화에 필요하지 않으므로 삭제합니다. 이 옵션을 blk-crypto-fallback.num_keyslots=1과 함께 사용할 경우 성능 문제가 발생합니다.

구현이 제대로 되었는지 확인하려면 버그 신고를 가져오거나 다음을 실행합니다.

adb root
adb shell dmesg

Adiantum이 올바르게 사용 설정되었다면 커널 로그에 다음과 같은 내용이 표시됩니다.

fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
<ph type="x-smartling-placeholder">

메타데이터 암호화를 사용 설정한 경우 다음 명령어도 실행하여 Adiantum 메타데이터 암호화가 올바르게 사용 설정되었는지 확인합니다.

adb root
adb shell dmctl table userdata

출력의 세 번째 필드는 xchacha12,aes-adiantum-plain64여야 합니다.

전체 디스크 암호화가 적용된 기기

Adiantum을 사용 설정하고 성능을 개선하려면 다음과 같은 속성을 PRODUCT_PROPERTY_OVERRIDES에 설정합니다.

ro.crypto.fde_algorithm=adiantum
ro.crypto.fde_sector_size=4096

fde_sector_size를 4,096으로 설정하면 성능이 개선되지만 Adiantum이 작동하는 데 필요하지는 않습니다. 이 설정을 사용하려면 사용자 데이터 파티션이 디스크에서 4,096바이트로 정렬된 오프셋에서 시작해야 합니다.

fstab에서 사용자 데이터의 경우 다음을 설정합니다.

forceencrypt=footer

구현이 제대로 되었는지 확인하려면 버그 신고를 가져오거나 다음을 실행합니다.

adb root
adb shell dmesg

Adiantum이 올바르게 사용 설정되었다면 커널 로그에 다음과 같은 내용이 표시됩니다.

device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"
<ph type="x-smartling-placeholder">