27 ביולי 2021

קורונה וירוס

אתר הקורונה הישראלי – עדכונים שותפים

מיליון הורדות ב-4 ימים: כך פותחה "אפליקציית הקורונה" של משרד הבריאות


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


צילום: גיקטיים

מאת: גיא ברנהרט-מגן

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

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

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

איך מנהלים מעקב בלי לפגוע בפרטיות?

מטרת העל של האפליקציה היא לאפשר למשתמשים לבדוק אם הם היו בקרבת נשאי קורונה. לצורך מטרה זאת רצינו לשמור על מספר יעדים: שקיפות – ע”י שימוש בקוד פתוח נוכל לעבוד ממודל סגור שבו אף אחד לא יודע בדיוק מה האפליקציה עושה, למודל בו אין צורך לסמוך על מומחים אלא ניתן לבדוק את הקוד באופן עצמאי בגרסה הנוכחית ובכל גרסה שתצא בעתיד; אבטחה – בדיקת הקוד ווידוא כי משתמשים ב-Best Practices וכי הארכיטקטורה מאובטחת; פרטיות – שמירה על פרטיות המשתמשים, כך שבשום שלב מידע השייך למשתמשים לא יועבר לאף גורם אחר ללא הסכמת המשתמש; פשטות – רצינו לשמור על המערכת פשוטה ככל האפשר, על מנת למקד אותה בדברים החשובים באמת, ללא פיצ’רים נוספים שיסבכו את האבטחה והפרטיות.

מקור: Profero

מתכננים ארכיטקטורה פשוטה למדי

בסופו של דבר, הארכיטקטורה שנבחרה היא פשוטה למדי.

  1. משרד הבריאות מנהל מבנה נתונים (JSON) המכיל מיקומים פומביים של חולי קורונה מאומתים, ודואג לעדכן אותו אחת לפרק זמן
  2. משרד הבריאות דוחף את מבנה הנתונים המעודכן ל-Azure Object Storage. השימוש בענן כאן הוא על מנת לבודד את משרד הבריאות מהאפליקציה ולנצל את היתירות והמוכנות לעומסים הקיימים בענן.
  3. האפליקציה כתובה ב-React-Native על מנת לפשט את הקוד והתמיכה באנדרואיד ו-iOS
  4. האפליקציה מושכת את מבנה הנתונים בפרקי זמן קבועים מהענן
  5. האפליקציה אוספת נתוני מיקום ממערכת ההפעלה של הטלפון יחד עם מזהה של רשתות ה-WIFI, ושומרת אותם במסד נתונים (SQLite) מקומי. נתוני ה-WIFI עוברים HASH (גיבוב), כלומר המידע שנשמר הינו Hash(WIFI)+MAC
  6. האפליקציה מצליבה בעזרת אלגוריתם מיקום מרחבי בלבד בין הסטוריית המיקומים הלוקאלית לבין המיקומים של חולי הקורונה המאומתים. אם נמצאה התאמה, המשתמש מתבקש לאמת כי זאת אכן התאמה (ולא False Positive)
  7. אם ישנה התאמה, המשתמש מתבקש לפנות (ע”י WebView Link) לאתר משרד הבריאות למלא טופס דיווח על חשיפה לחולה קורונה מאומת

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

איך מקבלים מיקומים אבל עדיין שומרים על פרטיות?

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

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

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

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

מקור: Pixabay, עיבוד תמונה

מיליון הורדות תוך ימים

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

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

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

בשורה התחתונה – הצלחה שלהם, היא ההצלחה של כולנו. רק בריאות.

הכותב הוא ה-CTO בחברת Profero














Avatar

כתב אורח

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


קרדיט – פורסם לראשונה