מערכות בריבוי ליבות – איתור שגיאות וביצועים

David Flowers, Microchip Technologymicrochip

הפופולריות של USB – אפיק טורי אוניברסלי –   כמימשק רב-תכליתי הולכת וגוברת בקרב המתכננים של מערכות משובצות, במיוחד במערכות שחייבות לתקשר עם מחשבים אישיים או מחשבים אחרים. בין היתר, הסיבה היא ההצלחה של USB לקיים את הבטחת האוניברסליות שלו: הוא הוכנס לשימוש באמצע שנות התשעים מתוך כוונה לפשט את מגוון המימשקים, כל אחד עם המחבר שלו, שהתפשטו בכל מחשב אישי. לדוגמה, היציאה הטורית RS-232, והיציאות המקבילות. מדד אחד להתפתחות של USB הוא שהמחברים האלה נעלמו מכל המחשבים הניידים וממחשבים שולחניים רבים. ל-USB יש גם מאפיינים אחרים של תקן מצליח. משדרגים אותו שוב ושוב כדי שיוכל לטפל במהירויות העולות בהרבה על ההגדרה המקורית שלו, ונמצאו לו שימושים ביישומים הרבה מעבר למשימתו המקורית שהייתה חיבור התקנים היקפיים למחשב אישי.
רבים מהמאפיינים שתרמו להתפתחות של USB בתחום מוצרי הצריכה הם אטרקטיביים גם עבור מתכנן המערכות המשובצות. לדוגמה, הוא מאפשר חיבור וניתוק “חם” של התקנים היקפיים, עם תמיכה מלאה של המערכת, ומספק (בגבולות מוגדרים) חשמל להתקנים המחוברים. ייתכן שהיישום המשובץ יהיה חייב להתחבר אל מארח או התקן שיש לו כבר USB, כך שלמתכנן שלו לא תהיה ברירה אלא להשתמש בתקן זה. גם אם זה לא המצב,  הזמינות הרבה של חומרה – ממעגלים משולבים ועד למחברים וכבלים – ותוכנה ליישום USB מגדילה את האטרקטיביות שלו. מיקרו בקרים רבים, כגון PIC18F4550 מתוצרת Microchip, מכלילים USB כאחד מהמימשקים הטוריים הראשיים. לחוסן ולגמישות של USB יש מחיר שהוא מורכבות מסוימת, ועל המתכנן לבחור מגוון של בחירות.

היסודות של USB
USB הוא אפיק עם ארבעה מוליכים – שני קווי אותות ושני חיבורי חשמל. חיבור חמישי, שנוסף בהרחבה המאוחרת יותר OTG (On-The-Go) של USB 2.0, הוא חלק מהתמיכה בהתקנים בעלי תפקיד כפול שיכולים לתפקד גם כמארח עם יכולת מוגבלת וגם כהתקן USB היקפי. בגירסה 1.1 של המיפרט, קצבי הנתונים הוגדרו כמהירות מלאה (12 מס”ש) או מהירות נמוכה (1.5 מס”ש). USB 2.0 הוסיף מהירות גבוהה (480 מס”ש). USB מיישם תאימות לאחור נרחבת, עם נסיגה לקצב המהיר ביותר שכל ההתקנים בחיבור יכולים לתמוך בו. לדוגמה, התקן יכול להיות תואם USB 2.0 – הוא יתקשר עם התקני USB 2.0 אחרים ויפעל יחד איתם – מבלי שלו עצמו תהיה יכולת מהירות גבוהה. כאפיק מבוסס מנות, ובהתאם לאופן הפעולה שנבחר, ל-USB יש תקורה משמעותית ומשתנה בהעברה שלו, כך שקצב ההעברה הוא תמיד פחות מקצב הסיביות הגולמי. USB 3.0, שאפשר יהיה לראות אותו בהתקנים שיתחילו להופיע בשוק בקרוב (נכון לתחילת 2010), מגדיל את קצב הנתונים ל-4.8 גס”ש.
USB פועל בתוך ארכיטקטורת כוכב- שכבות. התקנים מתחברים למארח, שמנהל את האפיק ומספק חשמל. התקן יכול להיות רכזת, המספקת חיבורים יורדים (downstream) מרובים (ואם יש לה אספקת חשמל עצמית, היא יכולה לספק חשמל לאותם התקנים שמתחתיה) להרחבת האפיק עד למספר מירבי תיאורטי של 127 התקנים בסך הכל. פרוטוקול USB יוצר “צינורות” וירטואליים בין המארח ונקודות הקצה בכל התקן. המארח מזהה ומגלה אוטומטית כל התקן חדש שמוכנס לחיבור USB, ולומד את התכונות שלו באמצעות תהליך של ספירה: ההתקן מחויב להעביר למארח סדרה של מְתָארים.

המתארים של ההתקנים ההיקפיים
ההתקנים היקפיים נושאים סידרה של מתארים שמספקים למארח בהדרגה יותר ויותר מידע על ההתקן ההיקפי או על המתארים הבאים, בהיררכיה של מידע, עד שלבסוף המארח משיג את כל הפרמטרים הנחוצים לו כדי לתקשר ביעילות עם ההתקן. יש ארבעה מתארים כלליים שמיושמים בכל התקן USB.
מתאר ההתקן (Device descriptor) מתאר את המידע הכללי ביותר על התקן USB. לדוגמה, הוא מעביר למארח את המוצר והיצרן, אומר לו כמה תצורות יש להתקן, וכמה מתארי תצורות על המארח לבקש. מתאר התצורה (Configuration descriptor) מספק מידע על תצורה ספציפית של התקן, ולהתקן אחד יכולות להיות תצורות רבות. מתאר המימשק (Interface descriptor) אומר למארח בכמה נקודות קצה משתמשת פונקציה של ההתקן וגם מצהיר על מזהה המחלקה של ההתקן. מתאר נקודת הקצה (Endpoint descriptor) (אחד לכל נקודת קצה) אומר למארח האם נקודת קצה היא נקודת כניסה או יציאה, ומהו המספר שלה. הַתֶקֶן של USB מגדיר ומאשר מספר מחלקות של התקנים, שלכל אחת מהן דרוש מנהל הֶתְקֶן בתוכנה של המארח. כמה מהמחלקות הנפוצות ביותר הן מימשק אנוש, אחסון בנפח גדול ותקשורת. הַתֶקֶן של USB מתיר מחלקת הֶתְקֶן מותאמת ספציפית או ספציפית ליצרן, מה שבדרך כלל יחייב את המתכנן להתעמק יותר בפרטים של USB.

סוגים של העברות נתונים
USB מגדיר ארבעה סוגים של העברות (ראו טבלה 1). הבקרה שולחת פקודות ושאילתות קצרות אל ההתקן או מקבלת תשובות סטטוס מההתקן, וכל התקן חייב לתמוך במנגנון ההעברה של הבקרה כאמצעי לתת למארח גישה למתארים שלו. זהו גם המנגנון היחידי שלגביו פורמט הנתונים מוגדר מראש לגמרי. העברות פסיקה של נתונים נועדו להתקנים ששולחים או מקבלים נתונים בפרקי זמן קבועים. המצב הזה מבטיח זמן המתנה ומאפשר ניסיונות חוזרים במקרה של כשל בגלל שגיאות באפיק. למרות שהשם מרמז אחרת, מצב פסיקה לא מופעל על ידי אירועים. מצב העברה זה נועד להתקנים שבהם הנתונים מועברים בקצב קבוע שנקבע מראש. מצב העברת נפח גדול מתאים להתקנים כגון מדפסות והתקני החסנה שצריכים להעביר כמויות גדולות של נתונים שלגביהם השלמות חשובה יותר מהזמן. משום שהזמן אינו קריטי, למצב ההעברה הזה אין רוחב פס ייעודי והוא מעביר נתונים כשרוחב פס נעשה זמין. מצב איזוכרוני מאפשר העברת נתונים זורמת בזמן אמת ללא איתור שגיאות, לסוגי נתונים כגון אודיו זורם.
USB מפצל את רוחב הפס הזמין למסגרות, שהבקר של המארח מפקח עליהן. כל מסגרת של מהירות נמוכה או מלאה מכילה 1.5 קס”ש ומתחילה כל אלפית שנייה. בכל מסגרת, כל ההתקנים המשתמשים בסוגי העברת הנתונים איזוכרונית ופסיקה מקבלים משבצת, כך שמובטחים להם רוחב הפס והזמן שהם צריכים. כל מקום נוסף מוקצה להעברות נפח גדול ולבקרה. למרות שקצב הסיביות המירבי יכול להיות 1.5, 12 או 480 מס”ש, כל התקן ספציפי יראה רק חלק מרוחב הפס. למעשה, אפשר שייגמר לאפיק רוחב הפס, תלוי במספר התקני USB המחוברים לבקר של המארח.

הוספת אבטחה
למרות שברעיון המקרי של USB הייתה מידה רבה של צפייה מראש, והוא כלל פונקציות רבות ששימשו מאוחר יותר לתמיכה בפונקציות מתקדמות, אין תמיכה מקורית באבטחה. כמובן, ביישומים שחיברו התקנים היקפיים פשוטים למחשב אישי לא היה צורך לכלול הגנה, משום שהנתונים הנשלחים ממקלדת או אל מדפסת ידועים. אולם, ההרחבה של תחום ההגעה של היישום של USB מביאה אותו לתחומים בהם תוכן מנת הנתונים (data payload) אינו קבוע מראש, והיעדר אבטחה או מנגנון הצפנה מובנים עשוי להוות בעיה. זה נכון במיוחד משום שמנתחי USB – חומרה ותוכנה – זמינים בקלות, אפילו בחינם. הבדיקה של התעבורה באפיק והזיהוי והחילוץ של תוכן מנת הנתונים הם טריוויאליים.
הצעד הראשון ביצירה של יישום USB מותאם ספציפית מאובטח יותר הוא לבחור אלגוריתם הצפנה שמתאים לצורכי היישום. כמו תמיד, המהנדס צריך לזכור שאבטחה אינה מוחלטת. לכל רמה של אבטחה שמוסיפים יש עלות, הן כספית והן בתקורה של המערכת. נאמר פעמים רבות שהמטרה צריכה להיות ליישם אבטחה בדיוק במידה כזאת שהעלות לפרוץ אותה תהיה גדולה מהערך של הנתונים שעשויים להיות מיורטים.
יש מספר אלגוריתמים לבחירה, והם שונים באבטחה שהם מספקים, בגודל שלהם, בזמן שלוקח להצפין או לפענח בלוק של מידע, ובתמיכה מקורית שלהם בקומפיילרים השונים. יש לציין שמדינות מסוימות, ביניהן ארצות הברית, מפעילות בקרה על היצוא של אלגוריתמים עם גודל מפתח מסוים, וברמות אבטחה מוגדרות הסטטוס שלהם הוא כמו זה של תחמושת. אפשר שיהיה צורך באישור כדי לייצא את היישום, תלוי בסוג האלגוריתמים ובגודל המפתח שבו הוא משתמש

האפשרויות של
אלגוריתמי הצפנה
תקן ההצפנה המתקדם (AES) הוא בחירה טובה, משום שהוא בטוח למדי וניתן ליישום ברמות משתנות עם גודל מפתח שונה. אפשר ליישם AES עם קוד בגודל קטן עד בינוני (בסביבות 8 ק”ב). ברמת האבטחה שהוא מספק, AES הוא אחד מהאלגוריתמים היותר טובים. לבסוף, AES נתמך כברירת מחדל במסגרת של .NET
תקן הצפנת הנתונים (DES) ותקן הצפנת הנתונים המשולש (TDES) הם שני אלגוריתמים חלופיים שגם הם נתמכים כברירת מחדל במסגרת .NET הם יותר איטיים, פחות בטוחים והקוד שלהם גדול יותר בהשוואה ל-AES, אבל עדיין משתמשים בהם ביישומים רבים.
גם אלגוריתם ההצפנה הקטן (XTEA) בגירסה השנייה שלו הוא מועמד פוטנציאלי. הוא לא נתמך כברירת מחדל בכלי הקומפילציה, אבל הוא מאוד פשוט וקל מאוד ליישם אותו. XTEA הוא אחד מהאלגוריתמים הכי קטנים שיש (ראו טבלה 2) ומתאים מאוד ליישומים שצריכים להיכנס בשטחי זיכרון קטנים. הוא לא נבדק עדיין באופן ממצה ולכן רמת האבטחה הסופית שלו לא ברורה, אבל האינדיקציות הן שהוא בטוח יחסית.
אחרי שבוחרים אלגוריתם, השלב הבא הוא לחשוב על ההשפעות שיהיו לגודל הבלוק שלו על היישום. נבדוק, לדוגמה, הצפנת AES עם גודל בלוק של 16 בתים. זה אומר שהנתונים שהיישום שולח על גבי האפיק חייבים להיות מכפלה של 16 בתים. אם צריך לשלוח תוכן מנת נתונים של פחות מ-16 בתים, אז יהיה צורך לרפד את הנתונים כדי לעמוד בגודל הבלוק הנדרש. אם משתמשים בריפוד כדי למלא את שאר בלוק הנתונים, עדיין צריך להעביר את הבתים האלה להתקן הפענוח, ולסלק אותם בצורה נכונה מהנתונים המפוענחים. אלגוריתמי פענוח מתוכננים כך שסיבית אחת שגויה או חסרה תמנע את הפענוח של בלוק הנתונים.

החלפת מפתחות.
נקודה אחרונה שצריך לחשוב עליה היא היצירה והתחזוקה של מפתחות ההצפנה. AES, TDES ו-XTEA, למרות שהם מהירים, קטנים ובטוחים, הם אלגוריתמים סימטריים, כלומר, משתמשים באותו המפתח בשני הקצוות של החלפת הנתונים. אם מפצחים את המערכת פעם אחת, היא תהיה תמיד מפוצחת ולא יהיה עוד צורך אף פעם במאמץ נוסף לפצח העברות עתידיות. כדי ליישם אלגוריתמים אסימטריים צריך שטח קושחה גדול והם מאוד איטיים בהשוואה לאלגוריתמי הצפנה סימטריים, אבל מאפשרים החלפת נתונים ללא מפתח משותף. הם משמשים בדרך כלל כדי להחליף מפתח סימטרי ייחודי חדש שנוצר עבור כל חיבור. Microchip Technology מספקת מחסנית USB חינם הכוללת מספר תרחישים בסגנון יישומים מותאמים ספציפית, וגם יישומים של AES, DES, XTEA ואלגוריתמי הצפנה אחרים. אפשר לשלב את המחסנית והספריות עם קומפיילר Microsoft Visual Studio C++ Express Edition והתמיכה המקורית שלו לאלגוריתם AES כדי ליצור דוגמה של יישום USB מוצפן בהתאמה ספציפית.
השלב הראשון ביישום הצפנה בסיסית הוא להוסיף את קוד הצפנת המקור של AES ליישום ה-USB, לדאוג לריפוד הנתונים לגודל הבלוק המתאים, ליצור מפתח מתאים, ולנתב את הנתונים המיועדים אל האפיק או המתקבלים מהאפיק דרך אלגוריתם ההצפנה.
הנתונים שבאפיק, למרות שהם מוצפנים, עדיין פגיעים למספר אסטרטגיות התקפה. התקפות העברה חוזרת (replay) מתרחשות כשמישהו לוכד את התעבורה המועברת ואז, בנקודת זמן מאוחרת יותר, מעביר שוב את אותם הנתונים כדי לשכנע את המערכת המקבלת שהייתה חזרה על הגירוי או נתוני הקלט המקוריים. אסטרטגיות נגד כוללות הוספת מספרים אקראיים לתוכן מנת הנתונים כדי ליצור התנהגות של תעבורת התקשורת שנראית יותר אקראית.
צריך גם לשים לב לאבטחה של המחשב האישי או המערכת האחרת שבה שוכן מארח ה-USB. אם הנתונים הנשלחים על גבי USB מפוענחים במחשב אישי, אז בשלב מסוים גם המפתח וגם הנתונים הגולמיים המפוענחים יהיו בזיכרון הראשי (RAM), כדי שהיישום הזה יוכל לקרוא אותם. תוקף מתוחכם עשוי לכתוב יישום שסורק את הזיכרון של המחשב ומחפש מפתחות או נתונים מפוענחים פוטנציאליים.

*חברת מייקרוצי’פ מיוצגת בישראל ע”י חברת סוטאל.

תגובות סגורות