הפעלת adiantum

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, אפשר לבחור את השינויים הבאים:

הפעלת 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)"