Adiantum היא שיטת הצפנה שמיועדת למכשירים עם Android מגרסה 9 ואילך, שאין בהם הוראות AES במעבדים. אם אתם שולחים מכשיר מבוסס-ARM עם ARMv8 Cryptography Extensions או מכשיר מבוסס-x86 עם AES-NI, אל תשתמשו ב-Adiantum. פרוטוקול AES מהיר יותר בפלטפורמות האלה.
במכשירים חסרים הוראות ה-AES האלה למעבד, Adiantum מספקת הצפנה במכשיר עם עלות ריבית נמוכה מאוד בביצועים. למספרים של מדדי השוואה, ראו המאמר של Adiantum. כדי להריץ את המקור של בדיקת הביצועים בחומרה, אפשר לעיין במקור של Adiantum ב-GitHub.
כדי להפעיל את Adiantum במכשיר עם Android מגרסה 9 ואילך, צריך לבצע שינויים בליבה ובמרחב המשתמש.
שינויים בליבה
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
אם במכשיר פועל ליבה של 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
- cryptfs: round down dm-crypt device size to crypto sector boundary
- 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 תפעל. כדי להשתמש בהגדרה הזו, מחיצה של userdata חייבת להתחיל בסטייה מותאמת של 4096 בייטים בדיסק.
ב-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)"