איך האימות עובד

נבדק בדפדפן שלכם.
נאטם למובלעת.

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

עדיין ללא הערכה בלתי תלויה

  • המובלעת נבדקת קודם

    איך אנחנו יודעים

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

  • נאטם בכרטיסייה שלכם

    איך אנחנו יודעים

    כל בקשה מוצפנת ב־EHBP ‏(HPKE, AES-256-GCM) עבור המפתח שהאטסטציה מציינת, לפני שהיא יוצאת.

  • הממסר רואה בייטים

    איך אנחנו יודעים

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

  • קבלה לכל תשובה

    איך אנחנו יודעים

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

מי יכול להסתכל, ומה עוצר אותו.

  1. הרשת

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

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

    סיכון שיורי: בינוני
    מקבל
    זיכרון מובלעת מוצפן
    נעצר על ידי
    AMD SEV-SNP או Intel TDX, עם אטסטציה
    נשאר פתוח
    פגמי חומרה; ההצהרות של Tinfoil עצמה
  4. מובלעת מזויפת

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

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

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

בתוך שרת אחד

איפה המובלעת מתחילה, ואיפה היא נגמרת.

גללו כדי לפרק שרת GPU לחלקיו: מה נמצא בתוך גבול המובלעת, ומה נשאר מחוצה לו.

  1. מפזר חוםהמכסה המתכתי שמעל השבבים של ה־GPU.
  2. שבב ה־GPUהמקום שבו המודל רץ. לפי התיעוד של Tinfoil, מעבדי ה־GPU של NVIDIA שלה (H100, H200 ו־B200) פועלים במצב מחשוב חסוי.
  3. זיכרון ברוחב פס גבוהמחזיק את המשקלים של המודל, ואת הבקשה שלכם בזמן שעונים עליה.
  4. מכונה וירטואלית חסויהעל המעבד של השרת (AMD SEV-SNP או Intel TDX): הנתב של Tinfoil והשרת של המודל, בזיכרון שהמארח לא יכול לקרוא. השבב שלו חותם על הדוח שהדפדפן בודק.
  5. גבול המובלעתמה שהחומרה מונעת מהמארח לגשת אליו, ומה שהאטסטציה מתארת. הבקשה שלכם נפתחת רק בתוכו.
  6. המארחהלוח, ה־hypervisor והדרייברים שלו, ומי שמפעיל אותו: מחוץ לגבול. הוא מעביר פנימה והחוצה בתים אטומים.

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

קריאת הטקסט המלאהסתרת הטקסט המלאכ־12 דקות, שישה תרשימים

בקצרה

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

הדפדפן שלכם בודק

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

Tinfoil מצהירה

  • שאין לה גישה למובלעות שלה, ושדבר מתוכן לא נשמר בין הפעלות מחדש.
  • שה־GPU־ים הנתמכים שלה פועלים במצב מחשוב חסוי.

אתם סומכים עלינו לגבי

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

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

01 · אטסטציה

השבב ערב לקוד.

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

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

המובלעת של Tinfoilדוח חומרההמעבד מודד את הקוד שהמובלעת אתחלה וחותם על דוח שלו, שמציין את המפתח הציבורי של המובלעת, במפתח שיצרן השבב ערב לו.
GitHub ו־Sigstoreהגרסה שפורסמהTinfoil בונה את הקוד הפתוח שלה בפומבי ורושמת את המדידה של כל גרסה ביומן השקיפות הציבורי של Sigstore.
הדפדפן שלךכלי האימות בקוד פתוח של Tinfoilבודק את החתימה של הדוח מול המפתחות של יצרן השבב, בודק את רשומת ה־build החתומה של הגרסה, ומשווה בין שתי המדידות.

הן תואמות: הבקשות נאטמות למפתח שהדוח מציין.

משהו נכשל: שום דבר לא נשלח, וסביבת העבודה מסבירה למה.

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

הבדיקות של המאמת, לפי הסדר

  1. מציאת הגרסה ש־Tinfoil פרסמה לקוד הזה.
  2. בדיקת דוח אטסטציית החומרה של המובלעת מול מפתחות החתימה של יצרן השבב.
  3. בדיקת רשומת ה־build החתומה של הגרסה (Sigstore, מ־GitHub).
  4. השוואה: הקוד שנמדד במובלעת חייב להיות בדיוק הגרסה הזו.
  5. בדיקה שמפתח ההצפנה הוא המפתח שהאטסטציה של המובלעת מציינת.

דוח שאומת משמש שוב עד עשר דקות, בלשונית הזו או בלשונית אחרת של האתר הזה, ורק אם הוא בדיוק אותו דוח, לפי ה־SHA-256 שלו. סביבת העבודה מציגה כל בדיקה תחת “מאומת”, ועמוד הארכיטקטורה מציג את הקוד שמריץ אותה.

02 · אטימה

רק המובלעת יכולה לפתוח אותה.

אחרי שהמובלעת אומתה, כל בקשה אמיתית נאטמת בלשונית שלכם לפני שהיא יוצאת. הגוף שלה מוצפן באמצעות EHBP, הפרוטוקול של Tinfoil להצפנת גופי HTTP, למפתח שהאטסטציה ציינה. EHBP משתמש ב־HPKE, תקן להצפנה אל המפתח הציבורי של מישהו: הלשונית שלכם יוצרת זוג מפתחות חדש לבקשה, משלבת אותו עם המפתח של המובלעת לסוד משותף, ומצפינה עם AES-256-GCM.

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

הכרטיסייה שלכםזוג מפתחות חדש, לכל בקשהבשילוב עם המפתח הציבורי המאומת של המובלעת, הוא יוצר סוד שאף אחד אחר לא יכול לחשב.
טקסט מוצפן + מפתח עטוף
הממסר של Undergroveמעביר אותו הלאהאין בידיו מפתח שפותח אותו.
אותם בתים
המובלעת של Tinfoilפותחת אותועם המפתח הפרטי שלעולם לא יוצא מהמובלעת.
איור 2. EHBP אוטם את גוף כל בקשה עם HPKE: X25519, HKDF-SHA256 ו־AES-256-GCM. גם התשובה מוזרמת חזרה אטומה, ונפתחת רק בכרטיסייה שלכם. אטמו הודעה בעצמכם וצפו בכל שלב.

03 · הממסר

בתים שהוא לא יכול לקרוא.

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

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

בחוץ: מה שהממסר רואה

  • החשבון שלכם, וכתובת ה־IP שלכם (דרך Vercel, ספקית האחסון שלנו)
  • הגודל, השעה והנתיב של כל בקשה
  • איזה מודל ענה, לפי כותרת ש־Tinfoil מגדירה
  • האם נעשה שימוש בחיפוש באינטרנט או בתמונות, כפי שהדפדפן מצהיר, כדי שאפשר יהיה לחייב עליהם

אטום בפנים: מה שהוא לא יכול לקרוא

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

04 · קבלות

שתי מובלעות, וקבלה לכל תשובה.

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

לאחר מכן הדפדפן שלכם בודק גם את המובלעת שצוינה, עם אותו מאמת, מול המאגר שהנתב של Tinfoil נועץ עבור המודל הזה. מה שהוא מוצא נשמר עם התשובה כקבלה: המובלעת, הקוד שנמדד בה, הגרסה שהוא תאם לה והמפתח שאליו נאטמה הבקשה. קבלה היא התיעוד של הדפדפן שלכם עצמו, ואינה חתומה על ידינו או על ידי Tinfoil; האטסטציה שעליה היא מבוססת חתומה על ידי AMD ו־GitHub, כך שכל אחד יכול לבדוק אותה שוב.

מובלעת 1הנתב של Tinfoilמאומתת לפני השליחה. פותחת את הבקשה.
ממובלעת למובלעת
מובלעת 2המודל וה־GPUs שלומצוינת בכותרת tinfoil-enclave.
נבדקת שוב
הדפדפן שלךהקבלה של התשובהנשמרת עם התשובה: המובלעת, הקוד שנמדד, הגרסה והמפתח.
מאומת
חומרה אמיתית, שמריצה גרסה שפורסמה של המאגר שהנתב של Tinfoil מקבע עבור המודל.
לא נבדק
חומרה שכלי האימות בדפדפן עדיין לא יודע לקרוא: הוא קורא דוחות AMD SEV-SNP, ולכן מובלעת על Intel TDX נרשמת כלא נבדקה.
לא אושר
הבדיקה רצה ושלב אחד נכשל, למשל מובלעת שכבר עברה לגרסה חדשה יותר מזו שהשירות של Tinfoil משייך אליה.
איור 4. הנתב של Tinfoil מאמת בעצמו את המובלעת של המודל, לפי הקוד שפורסם שלו, ומציין אותה בכותרת של התגובה. הדפדפן בודק את המובלעת הזו שוב בשביל הקבלה של התשובה. הכותרת לא מכוסה בהצפנה, ולכן זה מראה שהמובלעת שצוינה אמיתית, לא שהבקשה הזו הגיעה אליה; את המקטע הזה מבטיח הקוד שפורסם של הנתב.

05 · ה־API למפתחים

מסלול אחר, במילים פשוטות.

קוד שפונה ל־API למפתחים שולח את הבקשה שלו ב־HTTPS לשער שלנו, שקורא אותה: כדי לבדוק אותה, להחיל מגבלות ולהריץ כלים. הוא קורא אותה בזיכרון ולעולם לא שומר אותה או רושם אותה ביומן. אחר כך השער עושה מה שהדפדפן שלכם עושה בסביבת העבודה: הוא מאמת את המובלעת עם ה־SDK של Tinfoil ואוטם אליה את הבקשה.

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

סביבת העבודה
הדפדפן שלךמאמת, ואז אוטם
ממסרלא יכול לקרוא אותה
מובלעתפותחת אותו
API למפתחים
השרת שלךשולח ב־HTTPS
השער שלנוקורא אותה בזיכרון כדי לבדוק אותה; אף פעם לא שומר אותה ולא רושם אותה ביומן
מובלעתמאומתת קודם על ידי השער
איור 5. שני נתיבים לאותן מובלעות. בסביבת העבודה, הדפדפן שלכם אוטם; דרך ה־API, השער שלנו אוטם, אחרי שקרא את הבקשה בזיכרון כדי לבדוק אותה. כל תשובת API מהמובלעות של Tinfoil מציינת את חבילת האטסטציה שהשער אימת, ש־GET /v1/attestation?sha256= מחזיר כדי שתוכלו לבדוק אותה שוב.

06 · העמוד הזה

בודקים את הקוד שבודק.

כל מה שתואר למעלה רץ בקוד שהאתר הזה שולח לדפדפן שלכם, כך שגם הקוד הזה חשוב. כל build כותב מניפסט: ה־SHA-256 של כל קובץ שהאתר מגיש, וה־commit שממנו הוא נבנה.

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

ה־buildמניפסטה־SHA-256 של כל קובץ שהאתר מגיש, וה־commit שממנו הוא הגיע.
מתפרסם עם האתר
הדפדפן שלךמחשב hash של מה שטעןכל קובץ ששונה מצוין בשמו.
או, במחשב שלכם
כל אחדבונה מחדש את ה־commitומשווה בין שני המניפסטים.
איור 6. אימות הדף הזה מחשב hash של הקבצים שהדפדפן טען ומשווה אותם למניפסט של ה־build ול־commit שלו. בנייה מחדש של ה־commit הזה בסביבה המקובעת (npm run rebuild:site) אמורה לתת את אותו מניפסט, בית אחר בית; כל אחד יכול להריץ אותה ולהשוות, בלי לבקש מאיתנו.

07 · מגבלות

מה זה לא מוכיח.

  • ההצהרות של Tinfoil נשארות ההצהרות של Tinfoil. שאין לה גישה למובלעות שלה, שדבר מתוכן לא נשמר בין הפעלות מחדש ושה־GPU־ים שלה פועלים במצב מחשוב חסוי: את כל זה אומרת Tinfoil. הדפדפן שלכם בודק שהחומרה אמיתית ושהיא מריצה את הקוד שפורסם.
  • החומרה היא חלק ממה שאתם סומכים עליו. ההגנה טובה רק כמו המעבדים, הקושחה שלהם והמפתחות של יצרני השבבים, ובעבר כבר פורסמו פגיעויות במובלעות חומרה.
  • מקטע אחד מסתמך על קוד שפורסם. שהבקשה שלכם עברה מהנתב למובלעת של המודל מסתמך על הקוד שהנתב פרסם. הדפדפן שלכם יכול לבדוק את המובלעת של המודל רק ב־AMD SEV-SNP; ב־Intel TDX היא מתועדת כלא נבדקה.
  • הממסר רואה את החוץ. החשבון שלכם, כתובת ה־IP שלכם, גדלים, זמנים ואיזה מודל ענה.
  • פורסם אינו אותו דבר כמו נבדק. המאמת מראה איזה קוד רץ, לא שאין בקוד פגמים.
  • עדיין אין הערכה בלתי תלויה. עד כה אף מבקר לא סקר את התכנון הזה או את הקוד שלו.

כדי לדעת מי יכול לראות מה, צופה אחר צופה, קראו את מודל האיומים.

08 · להמשך

ראו כל חלק בפעולה.