Adiantum היא שיטת הצפנה שמיועדת למכשירים עם Android מגרסה 9 ואילך, שמעבדי ה-CPU שלהם לא כוללים הוראות AES. אם אתם שולחים מכשיר מבוסס-ARM עם תוספי הצפנה ARMv8 או מכשיר מבוסס-x86 עם AES-NI, אל תשתמשו ב-Adiantum. הצפנת AES מהירה יותר בפלטפורמות האלה.
במכשירים שחסרות בהם הוראות AES CPU, Adiantum מספק הצפנה במכשיר עם תקורה נמוכה מאוד של ביצועים. למספרי השוואה, אפשר לעיין במאמר בנושא Adiantum. כדי להריץ את מקור ההשוואה על החומרה שלכם, אפשר לעיין במקור Adiantum ב-GitHub.
כדי להפעיל את Adiantum במכשיר עם Android מגרסה 9 ואילך, צריך לבצע שינויים בליבה ובמרחב המשתמש.
שינויים בליבה
Adiantum נתמך בליבות הנפוצות של Android, מגרסה 4.9 ואילך.
אם ליבת המכשיר שלכם לא תומכת כבר ב-Adiantum, צריך לבחור את השינויים שמפורטים בהמשך. אם נתקלתם בבעיות בבחירת תיקונים, במכשירים שבהם נעשה שימוש בהצפנה מלאה של הדיסק (FDE) אפשר להחריג את תיקון fscrypt:
.
גרסת ליבה | תיקונים של הצפנה ו-fscrypt | dm-crypt patch |
---|---|---|
4.19 | 4.19 kernel | dm-crypt patch
|
4.14 | 4.14 kernel | dm-crypt patch
|
4.9 | 4.9 kernel | dm-crypt patch
|
הפעלת 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: Add Adiantum support
- cryptfs: Allow setting dm-crypt sector size
- cryptfs: round down dm-crypt device size to crypto sector boundary
- cryptfs: שיפור הרישום ביומן של יצירת מכשיר dm-crypt
- libfscrypt: Add Adiantum support
- fs_mgr_fstab: Add Adiantum support
הפעלת 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 יפעל. כדי להשתמש בהגדרה הזו, מחיצת נתוני המשתמש צריכה להתחיל בהיסטור שמתיישר עם 4096 בייטים בדיסק.
ב-fstab
, לגבי userdata set:
forceencrypt=footer
כדי לוודא שההטמעה פעלה, יוצרים דוח על באג או מריצים את הפקודה:
adb root
adb shell dmesg
אם Adiantum מופעל בצורה נכונה, אמור להופיע ביומן הליבה:
device-mapper: crypt: adiantum(xchacha12,aes) using implementation "adiantum(xchacha12-neon,aes-arm,nhpoly1305-neon)"