Doogree
אבטחה · מודל-אמון

ערוץ-שליטה שלא ניתן לזייף: TOFU + חתימה אסימטרית

30/06/2026 · ~7 דקות קריאה
מודל-אמוןחתימה דיגיטליתTOFUsupply-chain

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

הרעיון האינטואיטיבי: סוד משותף

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

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

הבעיה בסוד-משותף: מי שמאמת חייב להחזיק את הסוד. מי שמחזיק את הסוד יכול לזייף. פריצה אחת = שליטה.

מה בחרנו: חתימה אסימטרית

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

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

הקשחה שנייה: TOFU — נעילת-מפתח

אבל מה אם תוקף שפרץ לענן שלנו יחליף את המפתח הציבורי בשלו? אז הוא יוכל לחתום בעצמו. כדי לסגור את זה, הוספנו TOFU (Trust On First Use): הסוכן נועל את מפתח-האופרטור פעם אחת, בהרשמה הראשונה. בכל בדיקה לאחר מכן הוא מוודא שהמפתח שהענן מציג זהה לזה שנעוץ — ואם לא, הוא מסרב.

רוטציה של המפתח היא לכן פעולה מכוונת out-of-band, לא דריסה שקטה מהענן. תוקף שהשתלט על הענן שלנו לא יכול להחליף את המפתח הנעוץ — הסוכן פשוט לא יקבל את ההחלפה.

הקשחה שלישית: אין shell חופשי

גם אם איכשהו הייתה נוצרת חתימה תקפה, רצינו שהנזק האפשרי יהיה חסום. לכן הפעולות הן רשימת-היתר סופית ופרמטרית (כמו reboot או restart-service) — ואין פעולת "הרץ פקודה חופשית". מחקנו במכוון כל מסלול שמעביר מחרוזת לתוך shell. גם חתימה תקפה לא מגיעה ל-shell של root.

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

איך בדקנו

אימתנו את המודל בהתנהגות, לא רק בתיאוריה: הדמינו את התרחיש שבו הענן מציג מפתח שונה מהנעוץ, ווידאנו שהסוכן אכן מסרב (rc=2) ולא מריץ. הדפוס הזה — pin → verify → refuse — הוא הליבה של חוסן ה-supply-chain שלנו.

איך אנחנו משפרים את זה — בקרת-איכות מתמשכת

אמון הוא לא "הגדר ושכח". כל פקודה נרשמת ל-audit בלתי-משתנה (מי, מתי, מה, איזו חתימה), כך שאפשר לשחזר כל פעולה בדיעבד. הצעדים הבאים שכבר מתוכננים: anti-replay (nonce + חותמת-זמן בקנוני, כדי שפקודה ישנה לא תשוחזר), per-server token במקום token משותף, ו"kill-switch" ברמת-לקוח. אנחנו גם תוקפים את עצמנו (purple-team מורשה) כדי להוכיח שההגנות באמת מחזיקות. השכבה הזו ממשיכה להתחזק.

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

← כל הכתבות