הפעלת adiantum

Adiantum היא שיטת הצפנה שמיועדת למכשירים עם Android מגרסה 9 ואילך, שאין בהם הוראות AES במעבדים. אם שולחים מכשיר מבוסס ARM עם תוספי ARMv8 Cryptography או מכשיר מבוסס x86 עם AES-NI, לא משתמשים ב-Adiantum. האימות של AES מהיר יותר בפלטפורמות האלה.

במכשירים שבהם אין את ההוראות האלה לגבי ה-AES (מעבד AES), ב-Adiantum יש הצפנה במכשיר עם תקורת ביצועים נמוכה מאוד. לקבלת נתונים על השוואה לשוק, ראו במאמר של Adiantum. כדי שמקור ההשוואה לשוק פועל בחומרה שלכם, עיינו במקור של Adiantum ב-GitHub.

כדי להפעיל את Adiantum במכשיר עם Android מגרסה 9 ואילך, צריך לבצע שינויים בליבה ובמרחב המשתמש.

שינויים בליבה

Adiantum נתמכת בליבות הנפוצות של Android, מגרסה 4.9 ואילך.

אם עדיין אין תמיכה ב-Adiantum בליבה של המכשיר, אפשר לבחור את השינויים המפורטים בהמשך. אם אתם מתקשים לבחור פריטים ספציפיים, יכול להיות שהתיקון fscrypt: לא יופיע במכשירים עם הצפנת דיסק מלא (FDE).

גרסת ליבה תיקוני קריפטוגרפיה ו-fscrypt תיקון אחד (dm-crypt)
4.19 ליבה (kernel) 4.19 תיקון אחד (dm-crypt)
4.14 ליבה (kernel) 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

אם במכשיר פועל ליבה של ARM‏ 32 ביט, צריך להפעיל גם את ההוראות של 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

לבסוף, אם במכשיר שלכם פועל ליבה של ARM עם 32 ביט, צריך להפעיל את ההוראות של 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 באחסון הפנימי של המכשיר, מוסיפים את האפשרות הבאה לעמודה האחרונה (העמודה fs_mgr_flags) בשורה של המחיצה userdata בקובץ fstab של המכשיר:

fileencryption=adiantum

אם המכשיר מופעל עם Android מגרסה 11 ואילך, צריך גם להפעיל את הצפנת המטא-נתונים. כדי להשתמש ב-Adiantum להצפנת מטא-נתונים באחסון הפנימי, הפרמטר fs_mgr_flags של userdata צריך לכלול גם את האפשרויות הבאות:

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

בשלב הבא, מפעילים את ההצפנה של 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. לפני שמבצעים זאת, צריך לוודא שאפשרות הטעינה inlinecrypt לא צוינה ב-fstab. אם הוא צוין, מסירים אותו כי הוא לא נדרש להצפנת Adiantum, והוא גורם לבעיות בביצועים כשמשתמשים בו בשילוב עם blk-crypto-fallback.num_keyslots=1.

כדי לוודא שההטמעה פעלה, אפשר לשלוח דוח באג או להריץ את הפקודה:

adb root
adb shell dmesg

אם Adiantum מופעל בצורה נכונה, הוא אמור להופיע ביומן הליבה:

fscrypt: Adiantum using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"

אם הפעלתם הצפנת מטא-נתונים, עליכם גם להריץ את הפקודה הבאה כדי לוודא שההצפנה של המטא-נתונים ב-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 לערך 4096 משפרת את הביצועים, אבל לא חובה להשתמש ב-Adiantum. כדי להשתמש בהגדרה הזו, המחיצה של נתוני המשתמשים חייבת להתחיל בהיסט מתואם של 4,096 בייטים בדיסק.

ב-fstab, להגדיר את userdata:

forceencrypt=footer

כדי לוודא שההטמעה פעלה, אפשר לשלוח דוח באג או להריץ את הפקודה:

adb root
adb shell dmesg

אם Adiantum מופעל בצורה נכונה, ההודעה הבאה אמורה להופיע ביומן הליבה:

device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"