בדף הזה נסביר איך מפעילים תכונות של מקור קישור להצפנה שמבוססות על רכב.
סקירה כללית
המטרה העיקרית של תכונת המקור לקישור לרכב היא להגן עוד יותר על הפרטיות של המשתמש על ידי שמירה על הנתונים במערכת המידע והבידור ברכב (IVI) מפני הסרה מהרכב. כדי לעשות זאת, מקשרים מפתחות הצפנת אחסון ליחידת בקרה אלקטרונית (ECU) אחרת, כך שאם מסירים את ה-IVI ומעבירים אותו לרכב אחר (או מפעילים אותו במבחן), לא ניתן לפענח את נתוני המשתמשים המוצפנים ב-IVI.
כדי לקשר מפתחות להצפנת קבצים, Vold משלב זרע ספציפי לרכב עם הפקת מפתח להצפנת מפתחות, כך שהמפתחות ייחודיים ומקושרים פיזית לרכב. הזרע הוא מערך בייטים, שחשוף כמאפיין חדש של שיטת הפשטת חומרה (HAL) לרכב (VHAL) על ידי יצרן הציוד המקורי, STORAGE_ENCRYPTION_BINDING_SEED
. ההרשאות של הנכס הזה מוגבלות, כך שרק דמונים של מערכת עם הרשאות יכולים לשלוח שאילתות אליו.
תרשים הארכיטקטורה
באיור הזה מוצגת הארכיטקטורה של שילוב המותאם לרכב:
איור 1. ארכיטקטורה שמקושרת לרכב.
הפעלת קישור מבוסס-רכב
צריך להפעיל במפורש את קישור הצפנת האחסון לרכב, ואי אפשר להפעיל או להשבית אותו בלי לבצע איפוס להגדרות המקוריות. כלומר, אי אפשר להפעיל את התכונה באמצעות עדכון אוויר (OTA) בלי למחוק את המכשיר. יצרן ציוד מקורי יכול לבחור להפעיל את התכונה במהלך השדרוג, אם הוא מבצע גם איפוס להגדרות המקוריות של המכשיר. לדוגמה, בביקור שירות.
כדי להפעיל את התכונה הזו, צריך לתמוך במאפיין STORAGE_ENCRYPTION_BINDING_SEED
ב-HAL של הרכב שסופקו על ידי הספק. המאפיין הזה מכיל מחרוזת בייט באורך 16 בייטים, וצפוי להישמר ב-ECU נפרד מה-IVI. הנכס מוגדר בהתחלה על ידי Android Automotive OS (AAOS), שמייצר אותו באמצעות מחולל מספרים אקראיים מאובטח מבחינה קריפטוגרפית (CSRNG). לאחר מכן, מערכת AAOS קוראת את המאפיין בהפעלות הבאות.
האופן שבו VHAL שומר את הערך של STORAGE_ENCRYPTION_BINDING_SEED
הוא ספציפי לספק.
יש לנו המלצות כלליות להגנה על קוד המקור:
- (מומלץ) המפתח ליצירת זרעים מאוחסן ב-ECU ברכב שמוגן פיזית היטב. אם לא, קל מאוד לחלץ את ה-IVI ואת ה-ECU מהרכב.
- (מומלץ) ה-IVI וה-ECU צריכים לבצע אימות הדדי כדי להחליף את המפתח ליצירת זרעים, כדי למנוע זיוף בקשות ליצירת זרעים מה-ECU.
- (מומלץ) יש להעביר את המקור באמצעות ערוץ מאובטח כדי למנוע ניטור של CAN bus.
בנוסף, מוסיפים את הפרטים הבאים כדי לוודא שהספק init.target.rc
ב-late-fs
לפני mount_all --late
:
# feed vehicle binding seed to vold
exec_start vold_seed_binding
צריך להפעיל את HAL הרכב ב-early_hal
במקום ב-hal now
.
אי אפשר לגשת לנכסי מערכת של persist.*
ב-early-hal
כי המחיצה /data
עדיין לא מורכבת.
הגדרת קישור מבוסס-רכב
אם קוד המקור של ה-ECU לא תואם, המכשיר יופעל מחדש במצב שחזור והמשתמש יתבקש למחוק את המחיצה /data
או לנסות שוב.
אפשר לשנות את ההתנהגות של ההודעה והמחיקה של הנתונים בקובץ builtins.cpp:
- משנים את
prompt_and_wipe_data
ל-wipe_data
. המכשיר יימחק ויופעל מחדש ללא הנחיה. - הודעת ההנחיה נמצאת בקובץ recovery.cpp.
איור 2. הודעת הנחיה.
בדיקת קישור מבוסס-רכב
בדיקות דמה
ב-packages/services/Car/cpp/security/vehicle_binding_util/tests
יש מבחן לדוגמה.
כדי להריץ את הבדיקה המדומה הזו:
attest libvehicle_binding_util_test
בדיקת אינטגרציה
בדיקת atest זמינה בקובץ packages/services/Car/cpp/security/vehicle_binding_util/tests
.
כדי להריץ את בדיקת השילוב הזו:
atest vehicle_binding_integration_test