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, אפשר לבחור את השינויים הבאים:
- cryptfs: הוספת תמיכה של Adiantum
- cryptfs: Allow setting dm-crypt sector size
- קריפטו: עיגול כלפי מטה של גודל מכשיר ה-Dm-crypt לגבול של מגזר הקריפטו
- cryptfs: שיפור הרישום ביומן של יצירת מכשירים מסוג dm-crypt
- libfscrypt: הוספת תמיכה ב-Adiantum
- fs_mgr_fstab: הוספת תמיכה ב-Adiantum
הפעלת 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)"