איך האימות עובד
נבדק בדפדפן שלכם.
נאטם למובלעת.
מה הדפדפן שלכם בודק, מה הממסר שלנו רואה, ובמה אתם עדיין סומכים עלינו.
עדיין ללא הערכה בלתי תלויה
המובלעת נבדקת קודם
איך אנחנו יודעים
לפני ההודעה הראשונה שלכם, המאמת בקוד פתוח של Tinfoil בודק בדפדפן שלכם את הדוח שהשבב חתם עליו. דוח שלא עובר אימות עוצר הכול.
נאטם בכרטיסייה שלכם
איך אנחנו יודעים
כל בקשה מוצפנת ב־EHBP (HPKE, AES-256-GCM) עבור המפתח שהאטסטציה מציינת, לפני שהיא יוצאת.
הממסר רואה בייטים
איך אנחנו יודעים
הממסר שלנו בודק את החשבון ואת המכסה שלכם ומעביר את הטקסט המוצפן לשרתים של Tinfoil. הוא רואה גדלים, זמנים ואת החשבון שלכם, ולא שומר עותק.
קבלה לכל תשובה
איך אנחנו יודעים
הדפדפן שלכם בודק את המובלעת של המודל שענה, היכן שהחומרה שלו מאפשרת, ושומר את מה שמצא יחד עם התשובה.
מי יכול להסתכל, ומה עוצר אותו.
הרשת
סיכון שיורי: נמוך- מקבל
- בייטים אטומים, גדלים, זמנים
- נעצר על ידי
- HTTPS, ואז אטימה עבור המובלעת
- נשאר פתוח
- גודל התעבורה והתזמון שלה
הממסר שלנו
סיכון שיורי: בינוני- מקבל
- החשבון שלכם, IP, גדלים, מודל
- נעצר על ידי
- נאטם בכרטיסייה שלכם; הוא לא יכול לפתוח
- נשאר פתוח
- המטא־נתונים שהוא רואה
מארח הענן
סיכון שיורי: בינוני- מקבל
- זיכרון מובלעת מוצפן
- נעצר על ידי
- AMD SEV-SNP או Intel TDX, עם אטסטציה
- נשאר פתוח
- פגמי חומרה; ההצהרות של Tinfoil עצמה
מובלעת מזויפת
סיכון שיורי: נמוך- מקבל
- כלום: הכרטיסייה שלכם דוחה אותה
- נעצר על ידי
- אטסטציה, נבדקת בדפדפן שלכם
- נשאר פתוח
- קוד מאומת אינו קוד שנסקר
קוד אתר ששונה
סיכון שיורי: בינוני- מקבל
- מה שאתם מקלידים, לפני האטימה
- נעצר על ידי
- מניפסט הבנייה, חתימה, בנייה משלכם
- נשאר פתוח
- עמוד לא יכול לערוב לעצמו באופן מלא
ה־API למפתחים
סיכון שיורי: גבוה- מקבל
- הבקשה שלכם, בזיכרון
- נעצר על ידי
- בלי אחסון ובלי יומנים, לפי המדיניות שלנו
- נשאר פתוח
- אתם סומכים על השער שלנו
בתוך שרת אחד
איפה המובלעת מתחילה, ואיפה היא נגמרת.
גללו כדי לפרק שרת GPU לחלקיו: מה נמצא בתוך גבול המובלעת, ומה נשאר מחוצה לו.
- מפזר חוםהמכסה המתכתי שמעל השבבים של ה־GPU.
- שבב ה־GPUהמקום שבו המודל רץ. לפי התיעוד של Tinfoil, מעבדי ה־GPU של NVIDIA שלה (H100, H200 ו־B200) פועלים במצב מחשוב חסוי.
- זיכרון ברוחב פס גבוהמחזיק את המשקלים של המודל, ואת הבקשה שלכם בזמן שעונים עליה.
- מכונה וירטואלית חסויהעל המעבד של השרת (AMD SEV-SNP או Intel TDX): הנתב של Tinfoil והשרת של המודל, בזיכרון שהמארח לא יכול לקרוא. השבב שלו חותם על הדוח שהדפדפן בודק.
- גבול המובלעתמה שהחומרה מונעת מהמארח לגשת אליו, ומה שהאטסטציה מתארת. הבקשה שלכם נפתחת רק בתוכו.
- המארחהלוח, ה־hypervisor והדרייברים שלו, ומי שמפעיל אותו: מחוץ לגבול. הוא מעביר פנימה והחוצה בתים אטומים.
המחשה של סוג המכונות ש־Tinfoil מפעילה, לא תמונה של מכונה מסוימת. רשומת הגרסה החתומה של Tinfoil מפרטת את המעבדים, הזיכרון וה־GPUs של כל מובלעת; חלונית “מאומת” בסביבת העבודה מציגה אותם.
קריאת הטקסט המלאהסתרת הטקסט המלא
בקצרה
Undergrove מריץ מודלים עם משקלים פתוחים בתוך מובלעות חומרה שמפעילה Tinfoil. חלק ממה שזה אומר הדפדפן שלכם בודק בעצמו; חלק הוא ההצהרה של Tinfoil; וחלק תלוי בנו. הנה מה שייך לאיזו קטגוריה.
הדפדפן שלכם בודק
- שהמובלעת היא חומרה אמיתית שמריצה את הקוד ש־Tinfoil פרסמה.
- שכל בקשה נאטמת למפתח של המובלעת הזו לפני שהיא יוצאת מהלשונית שלכם.
- עבור הקבלה של כל תשובה: את המובלעת של המודל שענה, כשהחומרה שלו מאפשרת זאת.
Tinfoil מצהירה
- שאין לה גישה למובלעות שלה, ושדבר מתוכן לא נשמר בין הפעלות מחדש.
- שה־GPU־ים הנתמכים שלה פועלים במצב מחשוב חסוי.
אתם סומכים עלינו לגבי
- הקוד שהאתר הזה שולח לדפדפן שלכם, שאפשר להשוות ל־build.
- מה הממסר עושה עם מה שהוא יכול לראות: גדלים, זמנים והחשבון שלכם.
- השער של ה־API למפתחים, שקורא בקשות בזיכרון.
שום דבר מכל זה עדיין לא נבדק באופן בלתי תלוי.
01 · אטסטציה
השבב ערב לקוד.
מובלעת חומרה היא חלק בשרת שהמארח שלו עצמו לא יכול להציץ לתוכו: המעבד מצפין את הזיכרון של המובלעת ומרחיק ממנו את התוכנה של המארח. כשלעצמו, זו הייתה רק הבטחה. מה שהופך את זה לניתן לבדיקה הוא האטסטציה. כשהמובלעת עולה, המעבד מודד את הקוד שהיא טענה וחותם על דוח של המדידה הזו במפתח שיצרן השבב ערב לו. הדוח מציין גם את המפתח הציבורי שבאמצעותו המובלעת תפענח.
לפני ההודעה הראשונה שלכם, סביבת העבודה מורידה את הדוח הזה עבור מובלעת הנתב של Tinfoil, דרך השרת שלנו, ומריצה עליו בדפדפן שלכם את המאמת בקוד פתוח של Tinfoil. ההורדה דרכנו לא משנה דבר: איננו יכולים לזייף את החתימה של השבב, ודוח שלא עובר אימות עוצר הכול.
הן תואמות: הבקשות נאטמות למפתח שהדוח מציין.
משהו נכשל: שום דבר לא נשלח, וסביבת העבודה מסבירה למה.
הבדיקות של המאמת, לפי הסדר
- מציאת הגרסה ש־Tinfoil פרסמה לקוד הזה.
- בדיקת דוח אטסטציית החומרה של המובלעת מול מפתחות החתימה של יצרן השבב.
- בדיקת רשומת ה־build החתומה של הגרסה (Sigstore, מ־GitHub).
- השוואה: הקוד שנמדד במובלעת חייב להיות בדיוק הגרסה הזו.
- בדיקה שמפתח ההצפנה הוא המפתח שהאטסטציה של המובלעת מציינת.
דוח שאומת משמש שוב עד עשר דקות, בלשונית הזו או בלשונית אחרת של האתר הזה, ורק אם הוא בדיוק אותו דוח, לפי ה־SHA-256 שלו. סביבת העבודה מציגה כל בדיקה תחת “מאומת”, ועמוד הארכיטקטורה מציג את הקוד שמריץ אותה.
02 · אטימה
רק המובלעת יכולה לפתוח אותה.
אחרי שהמובלעת אומתה, כל בקשה אמיתית נאטמת בלשונית שלכם לפני שהיא יוצאת. הגוף שלה מוצפן באמצעות EHBP, הפרוטוקול של Tinfoil להצפנת גופי HTTP, למפתח שהאטסטציה ציינה. EHBP משתמש ב־HPKE, תקן להצפנה אל המפתח הציבורי של מישהו: הלשונית שלכם יוצרת זוג מפתחות חדש לבקשה, משלבת אותו עם המפתח של המובלעת לסוד משותף, ומצפינה עם AES-256-GCM.
החצי הציבורי החדש נשלח לצד הטקסט המוצפן, בתור המפתח המכומס. רק המפתח הפרטי של המובלעת, שלעולם לא יוצא ממנה, יכול להפוך אותו בחזרה לסוד. התשובה חוזרת באותה דרך, במסגרות אטומות שהלשונית שלכם פותחת תוך כדי ההזרמה.
03 · הממסר
בתים שהוא לא יכול לקרוא.
בקשות אטומות עוברות דרך הממסר שלנו, פונקציה ב־Vercel, ולא ישירות ל־Tinfoil. הוא בודק מי שואל ושהבקשה בתוך המכסה שלו, ומצמיד לבקשה את מפתח ה־Tinfoil של Undergrove, כך שלא צריך חשבון ב־Tinfoil. הוא דוחה כל דבר שאינו ממוען לאחד מהשרתים של Tinfoil עצמה או שאינו נושא מפתח מכומס.
הוא לא יכול לספור את המילים שלכם, ולכן הוא מעריך את העלות של כל בקשה לפי גודל הטקסט המוצפן, עם נטייה כלפי מעלה. הוא לא שומר עותק, והיומנים שלו מכילים רק שמות נתיבים, קודי סטטוס ומשכי זמן.
בחוץ: מה שהממסר רואה
- החשבון שלכם, וכתובת ה־IP שלכם (דרך Vercel, ספקית האחסון שלנו)
- הגודל, השעה והנתיב של כל בקשה
- איזה מודל ענה, לפי כותרת ש־Tinfoil מגדירה
- האם נעשה שימוש בחיפוש באינטרנט או בתמונות, כפי שהדפדפן מצהיר, כדי שאפשר יהיה לחייב עליהם
אטום בפנים: מה שהוא לא יכול לקרוא
- ההודעות והקבצים שלכם
- התשובות
- ההוראות והערות הזיכרון שלכם
04 · קבלות
שתי מובלעות, וקבלה לכל תשובה.
מובלעת הנתב שהדפדפן שלכם אימת לא מריצה את המודל. היא פותחת את הבקשה שלכם ומעבירה אותה למובלעת שבה המודל רץ עם ה־GPU־ים שלו. את המובלעת הזו הנתב מאמת בעצמו, לפי הקוד שפרסם, ומציין אותה בכותרת תגובה.
לאחר מכן הדפדפן שלכם בודק גם את המובלעת שצוינה, עם אותו מאמת, מול המאגר שהנתב של Tinfoil נועץ עבור המודל הזה. מה שהוא מוצא נשמר עם התשובה כקבלה: המובלעת, הקוד שנמדד בה, הגרסה שהוא תאם לה והמפתח שאליו נאטמה הבקשה. קבלה היא התיעוד של הדפדפן שלכם עצמו, ואינה חתומה על ידינו או על ידי Tinfoil; האטסטציה שעליה היא מבוססת חתומה על ידי AMD ו־GitHub, כך שכל אחד יכול לבדוק אותה שוב.
- מאומת
- חומרה אמיתית, שמריצה גרסה שפורסמה של המאגר שהנתב של Tinfoil מקבע עבור המודל.
- לא נבדק
- חומרה שכלי האימות בדפדפן עדיין לא יודע לקרוא: הוא קורא דוחות AMD SEV-SNP, ולכן מובלעת על Intel TDX נרשמת כלא נבדקה.
- לא אושר
- הבדיקה רצה ושלב אחד נכשל, למשל מובלעת שכבר עברה לגרסה חדשה יותר מזו שהשירות של Tinfoil משייך אליה.
05 · ה־API למפתחים
מסלול אחר, במילים פשוטות.
קוד שפונה ל־API למפתחים שולח את הבקשה שלו ב־HTTPS לשער שלנו, שקורא אותה: כדי לבדוק אותה, להחיל מגבלות ולהריץ כלים. הוא קורא אותה בזיכרון ולעולם לא שומר אותה או רושם אותה ביומן. אחר כך השער עושה מה שהדפדפן שלכם עושה בסביבת העבודה: הוא מאמת את המובלעת עם ה־SDK של Tinfoil ואוטם אליה את הבקשה.
כלומר, במסלול הזה אתם סומכים עלינו עם הבקשה כל עוד היא אצל השער. מה שעדיין אפשר לבדוק הוא המובלעת: כל תשובה מהנתיב של Tinfoil נושאת כותרות שמציינות את חבילת האטסטציה שהשער אימת, כדי שתוכלו לאמת אותה שוב. התיעוד למפתחים מסביר איך.
GET /v1/attestation?sha256= מחזיר כדי שתוכלו לבדוק אותה שוב.06 · העמוד הזה
בודקים את הקוד שבודק.
כל מה שתואר למעלה רץ בקוד שהאתר הזה שולח לדפדפן שלכם, כך שגם הקוד הזה חשוב. כל build כותב מניפסט: ה־SHA-256 של כל קובץ שהאתר מגיש, וה־commit שממנו הוא נבנה.
עמוד לא יכול לערוב לעצמו באופן מלא: בדיקה שרצה בתוך העמוד אמינה רק כמו העמוד עצמו. הבדיקה החזקה יותר לא מערבת אותנו בכלל: בנו את ה־commit מחדש בעצמכם בסביבה הנעולה והשוו את המניפסטים.
npm run rebuild:site) אמורה לתת את אותו מניפסט, בית אחר בית; כל אחד יכול להריץ אותה ולהשוות, בלי לבקש מאיתנו.07 · מגבלות
מה זה לא מוכיח.
- ההצהרות של Tinfoil נשארות ההצהרות של Tinfoil. שאין לה גישה למובלעות שלה, שדבר מתוכן לא נשמר בין הפעלות מחדש ושה־GPU־ים שלה פועלים במצב מחשוב חסוי: את כל זה אומרת Tinfoil. הדפדפן שלכם בודק שהחומרה אמיתית ושהיא מריצה את הקוד שפורסם.
- החומרה היא חלק ממה שאתם סומכים עליו. ההגנה טובה רק כמו המעבדים, הקושחה שלהם והמפתחות של יצרני השבבים, ובעבר כבר פורסמו פגיעויות במובלעות חומרה.
- מקטע אחד מסתמך על קוד שפורסם. שהבקשה שלכם עברה מהנתב למובלעת של המודל מסתמך על הקוד שהנתב פרסם. הדפדפן שלכם יכול לבדוק את המובלעת של המודל רק ב־AMD SEV-SNP; ב־Intel TDX היא מתועדת כלא נבדקה.
- הממסר רואה את החוץ. החשבון שלכם, כתובת ה־IP שלכם, גדלים, זמנים ואיזה מודל ענה.
- פורסם אינו אותו דבר כמו נבדק. המאמת מראה איזה קוד רץ, לא שאין בקוד פגמים.
- עדיין אין הערכה בלתי תלויה. עד כה אף מבקר לא סקר את התכנון הזה או את הקוד שלו.
כדי לדעת מי יכול לראות מה, צופה אחר צופה, קראו את מודל האיומים.
08 · להמשך
ראו כל חלק בפעולה.
- ארכיטקטורהארבע התחנות שהודעה עוברת, מה כל אחת יכולה לראות, והקוד שעושה את זה.
- אטמו בעצמכםהקלידו הודעה וצפו בה נאטמת למובלעת, שלב אחר שלב.
- נסו לפצחבקשה מוצפנת אחת, בית אחר בית, כפי שהממסר שלנו ראה אותה.
- מודל איומיםמי יכול לראות מה: ספק האירוח שלנו, אנחנו, Tinfoil, הרשת, צו של בית משפט.
- אימות העמוד הזהגיבוב הקוד שהעמוד הזה טען והשוואה שלו ל־build.
- שקיפותספירות של בקשות מוצפנות ושל בדיקות מובלעת, וה־commit שבסביבת הייצור.