הפעלת adiantum

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

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