Adiantum היא שיטת הצפנה למכשירים עם Android מגרסה 9 ואילך שבמעבדים שלהם אין הוראות ל-AES. אם אתם שולחים מוצר שמבוסס על ARM מכשיר עם תוספי קריפטוגרפיה ARMv8 או מכשיר מבוסס x86 עם AES-NI, לא כדאי להשתמש ב-Adiantum. פרוטוקול AES מהיר יותר בפלטפורמות האלה.
במכשירים חסרים הוראות ה-AES האלה למעבד, Adiantum מספקת הצפנה במכשיר עם עלות ריבית נמוכה מאוד בביצועים. במספרי השוואה לשוק, תוכלו לקרוא את המאמר של Adiantum. לגבי מקור ההשוואה לשוק שמריצים על החומרה, מקור Adiantum ב-GitHub.
כדי להפעיל את Adiantum במכשיר עם Android מגרסה 9 ואילך, צריך: לבצע שינויים בליבה (kernel) ושינויים במרחב המשתמשים.
שינויים בליבה
Adiantum נתמך על ידי הליבות הנפוצות של Android, גרסה 4.9 ואילך.
אם בליבה של המכשיר עדיין אין תמיכה ב-Adiantum,
המפורטים בהמשך. אם אתם מתקשים לבחור את התיקונים הרלוונטיים, במכשירים עם הצפנת דיסק מלאה (FDE) אפשר להחריג את התיקון fscrypt:
.
גרסת ליבה | תיקוני קריפטוגרפיה ו-fscrypt | תיקון dm-crypt |
---|---|---|
4.19 | ליבת 4.19 | תיקון dm-crypt
|
4.14 | ליבת 4.14 | תיקון אחד (dm-crypt )
|
4.9 | ליבה (kernel) 4.9 | תיקון אחד (dm-crypt )
|
הפעלת Adiantum בליבה (kernel)
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, ולאחר מכן הגדרת הליבה (kernel) מעט שונה נדרשות הגדרות. מפעילים את ההגדרות הבאות:
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. כדי להשתמש בהגדרה הזו, מחיצה של 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)"