חתימות


פורסם ב 07/06/2010 ע"י CWR

לא אחת, ראיתי עדכונים לאנדרואיד עם המילה "signed" כחלק משם הקובץ. מאחר ואני חובב קריפטוגרפיה, ובעל נסיון בתחום, ניסיתי לעמוד על פשר הדבר.
אזהיר מראש כי דברי לא אומתו לפרטים ולכן אשמח לקבל תיקונים.

למי שמעונין במסקנות שהן מעט יותר מענינות מהפרטים הטכניים – מומלץ לקפוץ לפסקאות האחרונות.

רקע טכני:
ברמה הכי בסיסית, ניתן לאמת כי הקובץ שקיבלתם אכן לא נפגם.
בדרך כלל עם ההפצה נמסרת סדרה של אותיות ומספרים, המבטאים אלגוריתם המסכם את "תמצית" הקובץ (האלגוריתם הפופולרי הינו SHA1). מקבל הקובץ יכול לבצע בדיקה כי אכן הקובץ שקיבל נאמן למקור.

מה שהרבה אנשים לא יודעים הוא שבעצם, הפצות update נמסרות כקובץ ZIP (שהוא בעצם קובץ JAR), המכיל כבר בעצמו מידע לגבי תמציות הקבצים שבתוכו. בזמן שהמכשיר מריץ את ה update הוא מבצע בדיקה כי הקבצים לא נפגמו.
על מנת לבדוק קבצי JAR ניתן להתקין JAVA SDK ולהריץ את הפקודה הבאה על הקובץ:
jarsigner -verify -verbose -certs update.jar

אציין כי, בדיקה שהקובץ לא נפגם אינה ממצה את המנגנון החתימה דיגיטלית, ובכללה וידוא מקור ההפצה.

בעיקרון, המכשיר יסרב להריץ עדכונים שאינם כוללים חתימה דיגיטלית המציינת כי מקור הקובץ "מהימן" (של היצרן). באופן ספציפי, מי שמסרב להריץ עדכונים שאינם חתומים הוא ה bootloader (שעולה שני) ומכיר את המפתחות הציבוריים של היצרן.

בכדי להכריח את המכשיר להריץ עדכונים שהופצו על ידי קהילת הקוד הפתוח יש להחליף את מנגנון ה boot loader. אבל אם עשיתם זאת, המערכת תזהה שהוא אינו מקורי (trusted) ותציג אייקון של מנעול פתוח.

ניסיתי לברר האם מישהו אי פעם הצליח להחזיר את המכשיר למצב "מדף" כלומר הגדרות מקוריות ללא מנעול, וטרם קיבלתי תשובה חד משמעית לכך.

בכדי להשלים את ענין החתימה הדיגיטלית – רציתי לציין את הפקודה מה JAVA SDK שמתייחסת למפתחות הציבוריים שלפיהם חתום הקובץ. לא אעמיק בסוגיה מאחר ונראה לי שזה לא מענין את רוב קהל הקוראים. ובכל זאת, אם אתם מעונינים, אנא פנו ל JAVA SDK ותנסו להריץ את הפקודה (לאחר פריסת הקובץ):
keytool -printcert -file updateMETA-INFCERT.RSA

מסקנות:
ראיתי לנכון בכל זאת לציין מה הבעיתיות שבשבירת מנגנון ה secure bootloader והרצת עדכונים לא מקוריים כמו למשל CyanogenMod.
די ברור לי, שאני הולך להסתבך כאן עם מי מכם שמאמין בכל ליבו בקהילת הקוד הפתוח והטבחים למינהם (עיסוק בעניני דת הוא תמיד בעייתי). ובכל זאת, שווה מדי פעם לשמוע דעה נוספת:
ובכן, כשאתם מריצים קוד מערכת שונה (עם או בלי root) אתם מריצים קוד של מישהו שאתם לא ממש מכירים. יכול להיות שהוא הכניס לכם הרבה מאד אפליקציות ו goodies שחבל על הזמן. אבל יחד עם זאת, חשוב להבין שלהכניס קוד למאות אלפי מכונות יכול להיות תמריץ לא קטן להרבה מאד ארגונים שונים ומשונים (לעולם לא תדעו מיהם אותם טבחים ומפיצים ותחת איזה מסווה הם עובדים).
מבחינת בטחון מידע, יתכן ומנהלי מערכת קשוחים, לא יאשרו שמכשירים כאלה יהיו משולבים במערכת הארגונית (עד לא מזמן היתה לנו בעיה דומה בארגון עם גרסאות מבושלות של WindowsMobile). בכל מה שקשור לבטחון מידע, קל יותר לבטוח בגוגל (למרות שגם בעבר היו תקדימים ל rootkit שהותקן על ידי חברות מכובדות – ראה תקדים Sony).

באופן אישי, היתי בהחלט מסתפק במכשיר עם גרסת בסיס (ואני עד היום חי עם HD2 בגרסה מקורית).
אבל מה לעשות, קשה, קשה מאד לחיות בארצנו החריגה ללא מכשיר עם עברית. ההמתנה ל Froyo מייגעת ולפעמים נדמה שאינה מייחלת להגיע.

רק בגלל בעית העברית, אני כל כך מתפתה להריץ הפצות אחרות אבל מה שהורג אותי היא ההשערה שלא אוכל לשחזר הגדרות יצרן ובכללם אותו מנעול ארור…

Share

1 Comment

  1. יניב
    10/06/2010 בשעה 15:31

    אהלן,
    באמת שאין לך ולא יהיה לך צורך לנעול מחדש bootlocker, אין ישור לימין בפרויו ולא יהיה כנראה בזמן הקרוב בצורה רשמית. אני לא רואה סיבה למה לא לעשות רוט למערכת (ולהישאר עם גירסת הסטוק הרשמית), על מנת להכניס עברית. אתה יודע שאתה צריך לאשר כל תוכנה שרוצה לגשת לרוט ע"י חיבור ב-USB של המכשיר במצב DEBUG?
    כך שאיני רואה גם סיבה בטחונית לכך… פשוט אל תאשר אף תוכנה כזאת ותהנה מעברית תקינה במכשיר ואם תרצה לאשר פעולת רוט מתוכנה יש מספיק מעברי ביטחון לכך. גם אם בכ"ז תדפק המערכת יש לך תוכנות גיבוי מצויינות שדורשות רוט המגבות הכל מהכל.
    לסיכום חבל על ההמתנה לפרויו.

השאר תגובה