פריימריז וקוד פתוח (או: דובי מדבר על דברים שהוא לא מבין בהם)

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

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

אשמח להסברים.

17 Replies to “פריימריז וקוד פתוח (או: דובי מדבר על דברים שהוא לא מבין בהם)”

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

  2. לא, לא – נניח שהם משחררים את הקוד. איך אני יודע שמה שהם שיחררו זה מה שהם הריצו על המחשבים שלהם? אנחנו הרי יוצאים מנקודת הנחה שאנחנו לא סומכים עליהם. למה עצם זה שהם שיחררו קוד כלשהו שאין לנו שום יכולת להוכיח שהוא הקוד שהורץ על מחשבי ההצבעה, אמור להניח את דעתנו?

  3. לדעת בוודאות מוחלטת – אין לך שום דרך. מה שאפשר לעשות זה לגבות את זה בהסכם עם הספק, ושמי שמאשר את הפרויקט, ייבדוק את זה בפועל.
    תכל'ס – לא נראה לי ריאלי בכל מקרה.

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

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

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

  5. זה יותר גרוע. אתה סומך על הקומפיילר? אתה יכול לבדוק את קוד המקור שלו, אבל בשביל להריץ קומפיילר צריך לקמפל אותו קודם, וכאמור, האם אתה סומך על הקומפיילר?

    http://it.toolbox.com/blogs/puramu/ken-thompson-and-the-selfreferencing-c-compiler-16142

    הקוד הפתוח הוא באמת לא הפתרון הנכון לעניין. מה שצריך שספירת הקולות לא תתבסס על רישומי מחשב, אלא על… פתקים!

    ספירה ממוחשבת ומהירה אפשרית גם עם פתקים. ראה:

    http://www.openvotingconsortium.org/faq

  6. קוד פתוח נועד כדי למנוע מניפולציות וכדי להמנע ממצב בו מזייפים את המערכת לגמרי וקולות לא נספרים.

    היתרון הוא לא רק בכשלי האבטחה, אלא שהתהליך כולו שקוף בעיני הציבור.

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

  7. דובי, אתה בהחלט צודק. להפך, הקוד הפתוח יכול לעשות את העבודה "יותר קלה" לחברה המפיצה, לדחוף לשם עוד שורה כזו לפני הקימפול:
    If vote=="fuad" goto next

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

  8. האמת שישנה שיטה מצויינת לדעת שהקוד קומפל, ושהקוד שקומפל הוא זה שאמור להיות.
    לאחר שקובעים חומרה סטנדרטית (מעבד 32 ביט של אינטל, למשל. אם יש חומרה פתוחה יותר ומתועדת יותר, אפילו יותר טוב) יבוצע קימפול (ע"י מהדר בקוד פתוח, כמו gcc), ואריזה של התוכנה בחבילה סטנדרטית כמו rpm. בחבילות תוכנה סטנדרטיות, מוחזק קידוד חד כיווני של כל קובץ במערכת, ובאמצעות הוראה פשוטה, ניתן לסקור את כלל הקבצים במערכת, ולראות מי מהם השתנה מאז שהמערכת הותקנה. כיוון שהחומרה סטנדרטית, גם רשימת הhash תהיה סטנדרטית.
    התוצאה הצפויה של כל הסיפור, היא שאם אתה חושד שהקוד שהיה על המכונה הוא לא תקין, תוכל לקמפל את התוכנה על החומרה הסטנדרטית, להשוות את תוצאת הhash של הקימפול במערכת ההצבעה לתוצאה שלך. מי שיהיה מספיק מוכשר כדי לזייף את זה, מגיע לו לזכות בפריימריז.

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

  10. גורו יאיא, הואיל ומי שזוכה בפריימריס אמור לייצג אותי אחר כך בכנסת, לא מעניין אותי שיבחר "מי שמגיע לו" אלא "מי שמגיע לי".

  11. יש מאמר קלאסי של קן תומפסון שמראה שאתה לא יכול לסמוך על שום דבר: http://cm.bell-labs.com/who/ken/trust.html

    אם לוקחים את הרעיון הזה, אז אפשר לעקוף את כל השיטות שהוצעו כאן – החל משפה מפורשת (המפרש פשוט יגרום לך לחשוב שהוא מפרש את הקוד שנתת לו, אבל בעצם יפרש קוד אחר), כלה ב-hashים שונים (שהרי אם יש לך שליטה על הקומפיילר, אתה יכול לדחוף איזה קטע קוד שאתה רוצה, שיחזיר איזה ערך שבא לך.

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

  12. מדובר באשליה שיש לנו שליטה על התהליך. כמו בשיטה הדמוקרטית.

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

    עם זאת, ומסיבות רבות ושונות אחרות, כנראה שפתקי נייר זו עדיין הדרך הטובה ביותר.

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

  15. טוב, לא הגבתי אצל יהונתן ולא הגבתי בעבודה שחורה, אבל נמאס לי לשמוע את זה אז אני אגיב פה.

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

    דוגמא נהדרת לקוד פתוח שנפרץ כל פעם מחדש היא ה-iPhone. ואם מישהו יתקן אותי ויגיד לי שמה שפרצו זה לא את XNU אלא רכיבי תוכנה אחרים שדווקא "תפוח" לא שחררה, אז שידע שאני אבדוק כל מילה.

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

    ובלי שום קשר, למרות שלכאורה אמרתי את הדבר ההפוך, ה"אל תסמוך על מכונה" נשמע לי יותר מדי כמו The Terminator.

  16. אגב, לגבי הקומפילציה, ניתן לבדוק את הגודל הפיסי של הקבצים וניתן להשוות את ה-assembly.

  17. ואחרי שכולם אמרו את מה שאמרו, אני רוצה להגיד משהו על המטא-דיון שהתפתח כאן. דיונים מהסוג הזה מעודדים אותנו לעשות בינאריזציה של הבעיה: להכריע בין אפשרות א' לאפשרות ב'. בפועל, אנחנו קצת משווים כאן תפוחים לתפוזים – לכל שיטה יש את המגרעות שלה ואת היתרונות שלה: החל מקוד סגור שלך-תדע–מה-הולך-בתוכו, אבל נותן סוג של security through obscurity, דרך קוד פתוח שנותן שקיפות לכאורה, אבל אין לנו דרך (או שקשה לנו מאוד) לוודא איזה קוד הותקן בפועל על המכונה, כלה בהצבעה בפתקי נייר, שבה כל אחד יודע מה הוא שם בקלפי, אבל ועדת הקלפי יכולה "לסגור"את התוצאות כרצונה, ומישהו אחר בדרך יכול להביא את הארגזים שלו. איזה פתרון עדיף על השאר? לא יודע. אולי שילוב של כמה פתרונות יביא לתוצאה מדויקת יותר. אבל הבעיה היא בעיה אנושית, לא טכנולוגית – אנשים רוצים לזכות בבחירות, והם מוכנים גם לשקר ולרמות כדי לעשות את זה. כמו שחבר משותף של דובי ושלי פעם אמר: אין פתרונות טכנולוגיים לבעיות אנושיות.

סגור לתגובות.