מהו ה-TPM ב-Windows? — מדריך מאויר ל"כספת שלא מוציאה מפתחות החוצה" ולאתחול מדוד

· עודכן בתאריך: · · TPM, Windows, BitLocker, אבטחה, Windows 11, מערכות מידע, C#

“אנחנו לא מצליחים לעבור ל-Windows 11”. “אחרי עדכון BIOS התבקשנו למפתח השחזור של BitLocker”. “אנחנו לא רוצים שהמפתח הפרטי של האפליקציה ייצא מהמחשב”. אלה נראים כמו שלוש שאלות נפרדות, אבל כולן מסתדרות ברגע שמבינים לשם מה ה-TPM קיים.

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

1. קודם המסקנה: להפריד בין שתי המשימות של ה-TPM

משימה מה היא עושה שימוש אופייני ב-Windows
לאפשר שימוש במפתח פרטי בלי להוציא אותו החוצה חותם או מפענח עם מפתח שאינו ניתן לייצוא ומחזיר רק את התוצאה Windows Hello, הגנה על המפתחות של אישורים ואפליקציות פנימיות
להפוך את רשומת האתחול לתנאי לשימוש במפתח רושם את מדידות האתחול ל-PCR ואוטם מפתח למצב הצפוי BitLocker

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

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

ה-PCR הם רשומה שצוברת hash-ים של הקוד ושל ההגדרות שנטענו במהלך האתחול. מכיוון ש-BitLocker קושר את המפתח שלו לרשומה הזאת, שינוי ב-firmware או בהגדרות האתחול יכול לגרום לבקשה של מפתח השחזור. ניקוי ה-TPM או החלפת לוח האם, לעומת זאת, הם בעיה לא מפני שהמדידות השתנו אלא מפני שאי אפשר יותר להשתמש במפתחות של ה-TPM המקורי.45

לפני שאתם משנים הגדרת TPM כלשהי, ודאו היכן מפתח השחזור וכיצד תבצעו שחזור. ניקוי ה-TPM אינו שלב בדיקה שגרתי; זו פעולה שיכולה להשמיד מפתחות ואת הנתונים שהם מגנים עליהם. פרק 3 מרכז את הנוהל, כולל השהיית BitLocker וחידוש ההגנה אחרי השינוי.5

המצב או המטרה שלכם היכן לקרוא
בקשת מפתח השחזור מופיעה על המסך ממש עכשיו סעיף 3.1: מיון התקלה של בקשת מפתח השחזורפרק 11: טבלת ההחלטות המעשית
מעבר ל-Windows 11 או סקירה של מחשבים ארגוניים פרק 2: בדיקת המצבפרק 4: הדרישות של Windows 11
רוצים לבדוק ניקוי של ה-TPM או lockout פרק 3: הפרדה בין שלושת סוגי התקלות
מטפלים במחשבים תעשייתיים או בציוד משובץ סעיף 4.4: היוצא מן הכלל של IoT Enterpriseפרק 9: מימושים ורכש
צריך להסביר את המנגנון למישהו פרק 5: הגנת המפתחותפרק 6: התפקידים הפנימייםפרק 7: אתחול מדוד
רוצים להשתמש ב-TPM מהאפליקציה שלכם פרק 5: הגנת המפתחותפרק 10: שימוש ב-CNG והרצה בפרודקשן
רוצים לדעת אילו תכונות של Windows מושפעות מכך פרק 8: השימושים ב-Windows

ב-diagram, solid line מציינת relation שתמיד מתקיים ו-dashed line מציינת relation מותנה (התנאים מופיעים בהסבר של כל relation ב-detail page). הרשימה המלאה של ה-relations (סה”כ 34, כולל evidence ו-certainty) וההגדרות של ה-concepts המרכזיים נמצאות ב-detail page של ה-knowledge map (ביפנית). Data: JSON-LD / Turtle

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

מה שרוצים לדעת הוא שלושה דברים: האם קיים TPM, האם Windows יכול להשתמש בו, והאם גרסת המפרט היא 2.0. יש להפריד בין התבוננות במצב לבין שינוי הגדרות או ניקוי ההתקן. הדבר הראשון שצריך להפנים הוא שWindows 10 ו-11 מאתחלים את ה-TPM ומשתלטים עליו (take ownership) באופן אוטומטי. לכן בדרך כלל אין סיבה לגעת בהגדרות בקונסולת הניהול של ה-TPM (tpm.msc), ו-Microsoft קובעת שברוב המקרים יש להימנע מהגדרה של ה-TPM שם. היוצאים מן הכלל הם מצבים של איפוס המחשב או התקנה נקייה.1 אגב, הפיתוח הפעיל של קונסולת הניהול של ה-TPM הסתיים עם Windows Server 2019 ו-Windows 10 גרסה 1809.1

2.1. הסתכלות ב-GUI

  • Win + Rtpm.msc פותח את קונסולת הניהול של ה-TPM. היא מציגה אם קיים TPM, את מצבו, את גרסת המפרט שלו ואת היצרן שלו. המסך מחולק לאזור Status (האם הוא במצב שמיש) ולאזור TPM Manufacturer Information (שם היצרן, גרסת היצרן וגרסת המפרט), והאם גרסת המפרט היא 2.0 הוא מה שקובע את דרישת ה-TPM של Windows 11. במחשב בלי TPM, או כשה-TPM מושבת, הקונסולה מדווחת שלא נמצא TPM תואם (סעיף 2.4 נותן את סדר הבדיקה במקרה כזה).
  • Windows Security מציג את אותו מידע תחת Device securitySecurity processor details. מהמסך הזה אפשר להגיע ל-Security processor troubleshootingClear TPM (פרק 3 מכסה את הנושא, אבל זה לא כפתור שלוחצים עליו בקלות).5

2.2. הסתכלות ב-PowerShell

ליותר ממחשבים בודדים, PowerShell הוא הדרך האמינה. ל-module בשם TrustedPlatformModule יש סט מלא של cmdlet-ים.6

# בדיקת מצב ה-TPM במקום אחד (להריץ כ-administrator)
Get-Tpm

הפלט נראה כך.7

TpmPresent                : True
TpmReady                  : True
TpmEnabled                : True
TpmActivated              : True
TpmOwned                  : True
ManufacturerIdTxt         : INTC
ManufacturerVersion       : 402.1.0.0
ManagedAuthLevel          : Full
OwnerClearDisabled        : False
AutoProvisioning          : Enabled
LockedOut                 : False
LockoutHealTime           : 10 minutes
LockoutCount              : 0
LockoutMax                : 31

אל תניחו שהערכים בפלט לדוגמה הם ההגדרות של המחשב שלכם; קראו במקום זאת את הפריטים הבאים.7

מה לבדוק מאפיין איך לקרוא אותו
האם קיים TPM TpmPresent אם False, בדקו את החומרה או את הגדרות ה-UEFI
האם Windows יכול להשתמש בו TpmReady אם קיים TPM אבל זה False, בדקו אתחול (initialization) והשתלטות (ownership)
האם anti-hammering חסם אותו LockedOut / LockoutCount / LockoutMax / LockoutHealTime בדקו את המונה ואת מרווח ההחלמה. LockedOut = True הוא lockout זמני
האם מערכת ההפעלה יכולה לנקות אותו עם הרשאת הבעלים OwnerClearDisabled אם True, ניקוי בדרך הזאת אינו אפשרי
האם ההקצאה האוטומטית של Windows פועלת AutoProvisioning בדקו אם auto-provisioning מופעל או מושבת

אם רוצים להחליט באופן מכני אם גרסת המפרט היא 2.0, WMI הוא הדרך הנוחה.

# קבלת גרסת המפרט, היצרן ומצב ההפעלה
Get-CimInstance -Namespace 'root/CIMv2/Security/MicrosoftTpm' -ClassName Win32_Tpm |
    Select-Object SpecVersion, ManufacturerId, ManufacturerVersion,
                  IsEnabled_InitialValue, IsActivated_InitialValue, IsOwned_InitialValue

המאפיין שצריך להיזהר ממנו כאן הוא ManufacturerId. ה-ManufacturerIdTxt ש-Get-Tpm מחזיר (מחרוזת כמו INTC) קיים רק בצד של Get-Tpm; למחלקה Win32_Tpm אין אותו.8 אם כותבים ברשלנות Select-Object ManufacturerIdTxt, העמודה הזאת חוזרת ריקה בלי שום הודעת שגיאה.

מה שיש ל-Win32_Tpm הוא ManufacturerId, מסוג uint32 שהבתים שלו יוצרים מחרוזת כשמפרשים אותם כתווי ASCII (לדוגמה 14145487360x54 0x50 0x4D 0x00TPM).8 אם רוצים את המחרוזת, אפשר לפענח אותה בעצמכם כמו בהמשך, או פשוט להשתמש ב-Get-Tpm.

# המרת ManufacturerId (uint32) למחרוזת ASCII והצגתה ברשימה
Get-CimInstance -Namespace 'root/CIMv2/Security/MicrosoftTpm' -ClassName Win32_Tpm |
    Select-Object SpecVersion, ManufacturerVersion,
        @{ Name = 'ManufacturerText'; Expression = {
            $bytes = [System.BitConverter]::GetBytes([uint32]$_.ManufacturerId)
            # קריאת ה-uint32 מהבית המשמעותי ביותר (למשל 1229870147 -> 0x49 0x4E 0x54 0x43 -> INTC)
            if ([System.BitConverter]::IsLittleEndian) { [array]::Reverse($bytes) }
            -join ($bytes | Where-Object { $_ -ne 0 } | ForEach-Object { [char]$_ })
        } }

SpecVersion חוזר בצורה “גרסת מפרט, revision, errata”, למשל 2.0, 0, 1.16.8 האם הוא מתחיל ב-2.0 הוא מה שמשתמשים בו כדי להחליט אם דרישת ה-TPM של Windows 11 מתקיימת (את שאר הדרישות, כמו CPU, זיכרון ואחסון, יש לבדוק בנפרד; ראו פרק 11). להרצה של זה על מחשבים רבים מרחוק, ראו “התחלה עם PowerShell Remoting (WinRM)”.

מעבר לזה, Get-TpmEndorsementKeyInfo מציג מידע על ה-EK ועל האישור שלו, ו-Get-TpmSupportedFeature מראה אם תכונה מסוימת נתמכת. Unblock-Tpm מבטל lockout, ו-Clear-Tpm מאפס את ה-TPM.6

2.3. הסתכלות בכלי שורת פקודה

tpmtool הוא הכלי התקני לשליפת מידע על ה-TPM ולאבחון שלו.9

:: הצגת מידע בסיסי על ה-TPM
tpmtool getdeviceinformation

:: איסוף הלוגים של ה-TPM לתיקייה הנוכחית
tpmtool gatherlogs

כדי להסתכל על זה יחד עם מצב BitLocker, השתמשו ב-manage-bde -status או ב-Get-BitLockerVolume לצידו. הנוהל לחקירה בצד ה-event log מרוכז ב-“חקירת event logs בפועל עם Get-WinEvent”.

2.4. סדר הבדיקה כש”זה אמור להיות TPM 2.0 אבל זה לא עובד”

קודם מפרידים בין המקרים באמצעות TpmPresent ו-TpmReady מתוך Get-Tpm, ואחר כך בודקים את גרסת המפרט ואת מצב ה-lockout. אל תעברו לניקוי ה-TPM רק מפני ש”הוא לא נמצא”.

תוצאת Get-Tpm מה היא אומרת מה לעשות הלאה
TpmPresent : False Windows לא רואה TPM חשדו קודם כל בהגדרות ה-UEFI (ראו בהמשך). אם הוא עדיין לא נראה אחרי ששיניתם אותן, ייתכן שלמחשב באמת אין אחד
TpmPresent : True / TpmReady : False הוא קיים, אבל Windows עדיין לא יכול להשתמש בו האתחול או ההשתלטות תקועים. בדקו את תצוגת המצב ב-tpm.msc. המדריך הרשמי לפתרון תקלות מרכז את השלבים ל-TPM שלא מזוהה או שלא מצליח להיות מוכן5
SpecVersion מתחיל ב-1.2 יש TPM, אבל הגרסה ישנה מדי יש דגמים שאפשר לעדכן, אבל באופן עקרוני זו בעיית חומרה. עברו להחלטה בפרק 4
LockedOut : True anti-hammering חסם אתכם עברו לסעיף 3.3

הנה מה שצריך לחפש בהגדרות ה-UEFI. בדגמים רבים ה-firmware TPM מושבת כברירת מחדל, והפעלה שלו היא כל מה שצריך.

  • שם הפריט משתנה מיצרן ליצרן. בפלטפורמות Intel הוא מסומן בדרך כלל כ-PTT (Platform Trust Technology) ובפלטפורמות AMD כ-fTPM (AMD fTPM, AMD CPU fTPM וכן הלאה), כך שבחלק מהדגמים המילה TPM כלל לא מופיעה על המסך. אל תסיקו מכך ש”אין פריט TPM, ולכן למחשב אין אחד”.
  • הוא נמצא בדרך כלל תחת Security או Advanced. הוא יכול לשבת גם תחת כותרות כמו Trusted Computing או PCH-FW Configuration.
  • בחלק מהדגמים יש הגדרה שמחליפה בין שבב נפרד (dTPM) ל-firmware TPM. זה בדיוק המקרה של “מעבר בין כמה TPM-ים מכניס את BitLocker למצב שחזור” מסעיף 3.2, ולכן אחרי שבחרתם, אל תשנו.5
  • בדקו אם מצב legacy/CSM מופעל. TPM 2.0 לא עובד במצב CSM. כשזו הסיבה, צריך MBR2GPT לפני המעבר ל-UEFI (פרק 4).10
  • לפני שאתם משנים הגדרות TPM ב-UEFI, ודאו היכן מפתח השחזור והשהו את BitLocker. זה משנה את הנחות היסוד של המדידות, ולכן התייחסו לכך בדיוק כמו לטבלת הסיבה והתוצאה בפתח פרק 3. עשו מזה חלק מההכנה לפני השינוי, ולא חלק מהניקוי שאחריו.

3. טיפול בתקלות: להפריד בין מפתח השחזור, ניקוי ה-TPM ו-lockout

בקשת מפתח השחזור, ניקוי ה-TPM ו-lockout של PIN הם בעיות שונות. אל תהפכו את “התבקשתי למפתח השחזור, אז אנקו את ה-TPM” לסדר הפעולות שלכם. ניקוי משמיד מפתחות, והוא שייך לקטגוריה שונה לגמרי מבדיקת מצב שגרתית או מהתאוששות מ-lockout.

אם אתם עומדים לבצע שינוי, ודאו קודם היכן מפתח השחזור נשמר והשהו את BitLocker. זה חל על עדכוני UEFI, על שינויים בהגדרות Secure Boot, על ניקוי ה-TPM ועל החלפת לוח אם. מקום האחסון הוא Active Directory Domain Services או Microsoft Entra ID בארגון, או חשבון Microsoft אצל אדם פרטי. ארגון יכול להגדיר שמפתחות השחזור יישמרו ב-AD DS.3

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

הפעולה מה משתנה האם נכנס למצב שחזור? התוצאה והתגובה
עדכון ה-firmware של UEFI/BIOS PCR 0 (קוד ההרצה של firmware הליבה של המערכת) ועוד כן בתצורות שנאטמו ל-PCR 0/2/4. הסבירות נמוכה יותר אם המפתח נאטם ל-PCR 7/11 הדרך הנכונה היא להשהות את BitLocker לפני העדכון. גם אם הגעתם למצב שחזור, פתיחה עם מפתח השחזור אוטמת את המפתח מחדש מול המדידות החדשות ומכאן והלאה
השבתת Secure Boot או שינוי המפתחות המהימנים PCR 7 (מצב Secure Boot) כן החזירו את ההגדרה לקדמותה, או פתחו עם מפתח השחזור
הפעלת מצב CSM (legacy) PCR 7. בנוסף, TPM 2.0 לא עובד במצב CSM (פרק 4) כן החזירו לקדמותו. אם המטרה היא לעבור ל-UEFI, הריצו קודם MBR2GPT (פרק 4)
אתחול של מערכת הפעלה אחרת מ-USB וכדומה, או שינוי סדר האתחול הגדרות האתחול, כולל מדידת ה-boot manager (PCR 4) כן החזירו את הגדרות האתחול ואתחלו מחדש
תוקף מאתחל מערכת הפעלה משלו ומנסה לשחרר את המפתח PCR 11 (הוא משתנה מ-0 ל-1 ברגע שבו ה-boot manager מעביר את השליטה) אי אפשר לשחרר (ההגנה פועלת כמתוכנן) כפי שמוסבר בפרק 7, זו עדות לכך שההגנה מחזיקה
ניקוי ה-TPM, החלפת לוח אם, או העברה של דיסק מערכת ההפעלה בלבד למחשב אחר לא ה-PCR: המפתח האטום עצמו אינו בהישג יד כן (אם לא השהיתם את BitLocker, מפתח השחזור הוא הדרך היחידה) אם משרים את BitLocker מראש, אפשר לאתחל בלי מפתח השחזור ולאטום מחדש (סעיף 3.1)

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

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

3.1. התבקשתם למפתח השחזור של BitLocker

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

עדכנתם UEFI/BIOSשיניתם הגדרות Secure Bootהפעלתם CSMניקיתם את ה-TPMהחלפתם לוח אםאתחלתם מערכת הפעלה אחרת מ-USBשיניתם את סדר האתחוללא עולה שום דבר בדעתכםבקשת מפתח השחזור הופיעה באתחולשיניתם משהו ממש לפני כן?מדידות כמו PCR 0 השתנומהאתחול הבא הן נאטמות מחדש, ולכןפתחו עם מפתח השחזור והמשיכומדידת PCR 7 השתנתההחזירו את ההגדרה לקדמותה או פתחו עם מפתח השחזורהמפתח האטום עצמו נעלםאם BitLocker לא הושה לפני כןמפתח השחזור הוא הדרך היחידהמדידת הגדרות האתחול השתנתההחזירו אותן ואתחלו מחדשחקרו, כולל האפשרות של התקפהאספו לוגים ואז פתחו עם מפתח השחזורודאו היכן מפתח השחזור נשמרAD DS / Entra ID / חשבון Microsoft

איור 1: מיון התקלה של בקשת מפתח השחזור ב-BitLocker

עדכון firmware הוא הטריגר הקלאסי למצב שחזור. Microsoft עצמה ממליצה להשהות את BitLocker לפני עדכון firmware כשהפרופיל המוגדר כולל את PCR 0.4 בניסוח הפוך: במחשבים שבהם Secure Boot מוגדר כראוי והמפתח נקשר ל-PCR 7, עדכוני firmware מכניסים למצב שחזור בתדירות נמוכה יותר.4 במחשבים שתומכים ב-Modern Standby מדידת PCR 7 היא דרישת logo, וכשה-TPM ו-Secure Boot מוגדרים כראוי המפתח נקשר כברירת מחדל ל-PCR 7 ול-PCR 11.4

השאלה אם משרים את BitLocker לפני העבודה משנה לחלוטין את המאמץ שאחריה. השהיה משאירה על הכרך clear key protector, ולכן גם אם מנקים את ה-TPM או עוברים ל-TPM חדש, המחשב מאתחל בלי שתזינו את מפתח השחזור (חידוש ההגנה אחרי האתחול אוטם את המפתח מחדש מול ה-TPM החדש). איור 1 אומר “מפתח השחזור הוא הדרך היחידה” במקרה שבו ניקיתם או החלפתם בלי להשהות. בניסוח הפוך: צעד הכנה אחד מסיר את הענף הזה לגמרי.

3.2. רוצים לנקות את ה-TPM, או שכבר ניקיתם

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

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

  • אל תנקו את ה-TPM של מחשב שאינו שלכם (מחשב של העבודה או של בית הספר) בלי הנחיה מהמנהל שלו.
  • נקו תמיד מתוך תכונה של מערכת ההפעלה (tpm.msc או Windows Security), ולעולם לא ישירות מה-UEFI.
  • אם רוצים רק לעצור את ה-TPM באופן זמני, השתמשו ב-“כיבוי ה-TPM” ולא בניקוי.

אחרי ניקוי, Windows מאתחל את ה-TPM מחדש ומשתלט עליו שוב באופן אוטומטי.5

ניקוי ה-TPM ומחיקת הדיסק בעת הפסילה הם שתי עבודות שונות

מה שראוי להדגיש כאן הוא שניקוי ה-TPM אינו מחיקת נתונים (sanitization). מה שהניקוי משמיד הוא המפתחות שבתוך ה-TPM; לא נמחק אף בית אחד מהנתונים שעל הדיסק. מפתחות השחזור של BitLocker נשמרים בדרך כלל בנאמנות (escrow) ב-AD DS, ב-Microsoft Entra ID או בחשבון Microsoft, ולכן כל מי שמחזיק בהם עדיין יכול לפענח את הכרך אחרי שניקיתם את ה-TPM.

כשמעבירים מחשב לצד שלישי, האירוע המרכזי הוא נוהל מחיקת אחסון: “איפוס המחשב הזה (הסרת הכול)” של Windows, כלי מחיקה ייעודי, מחיקה הצפנתית (cryptographic erasure) או השמדה פיזית. ניקוי ה-TPM אינו יותר מהנגיעה האחרונה. הנוהל המלא לפסילה ולהעברה מרוכז ב-“רשימת בדיקה לפסילה או להעברה של מחשב Windows”.

אל תעברו בין כמה TPM-ים בלי מחשבה

יש מערכות שנושאות יותר מ-TPM אחד ומאפשרות לעבור ביניהם ב-UEFI, אבל Windows לא תומך בתצורה הזאת. אחרי מעבר כזה Windows עלול לא לזהות את ה-TPM החדש כראוי, ו-BitLocker נכנס למצב שחזור. אם בכל זאת עברתם, תצטרכו לנקות את ה-TPM אחר כך ולהתקין את Windows מחדש. Microsoft ממליצה בחום שבמערכת עם שני TPM-ים תבחרו אחד ולעולם לא תשנו אותו.5

3.3. ה-TPM נחסם (lockout)

הקלדה חוזרת ונשנית של PIN שגוי מביאה ל-lockout של ה-TPM. בתצורת ברירת המחדל של Windows, TPM 2.0 ננעל אחרי 32 ניסיונות הרשאה כושלים ושוכח כשל אחד כל 10 דקות. גם כשהמכשיר נעול, אפשר לצאת מה-lockout אם משאירים את המחשב דלוק למשך מרווח ההחלמה.2 עשר דקות הוא רק ברירת המחדל של Windows, ולכן בדקו את המרווח האמיתי ב-LockoutHealTime ש-Get-Tpm מחזיר באותו מחשב (פרק 2). לפעמים להשאיר אותו בשקט מהיר יותר מאשר לאתחל שוב ושוב בפאניקה.

אם צריך לשחרר מיד, שלחו את פקודת איפוס ה-lockout. שימו לב, עם זאת, שסיסמת הבעלים (owner password) והרשאת ה-lockout (lockout authorization) אינן אותו דבר. מאז Windows 10 גרסה 1607, Windows לא שומר את סיסמת הבעלים כשהוא מקצה את ה-TPM (הוא קובע ערך אקראי באנטרופיה גבוהה ואז משליך אותו).12 נוהל שנבנה על ההנחה ש”למנהל יש את סיסמת הבעלים” ייתקע בשטח.

מה שמשתמשים בו במקום זה הוא הרשאת ה-lockout. הערך 5, שהוא ברירת המחדל של OSManagedAuthLevel, פירושו לגבי TPM 2.0 “לשמור רק את הרשאת ה-lockout”.12 במילים אחרות, מצב ברירת המחדל הוא “סיסמת הבעלים המלאה נעלמה, אבל ההרשאה שדרושה כדי לנקות lockout נשארה”, ואיפוס זמן ה-lockout ב-tpm.msc וב-Unblock-Tpm עובד בדרך כלל עם ההרשאה הזאת. יש הגדרה ששומרת את סיסמת הבעלים עצמה (הגדרת OSManagedAuthLevel ל-4 ב-registry), אבל Microsoft מזהירה מפניה בתוקף.12

שימו לב גם שגם בלי סיסמת הבעלים נשארת דרך לפעולות ניהול כמו הפעלה, השבתה וניקוי של ה-TPM באמצעות אישור נוכחות פיזית (physical presence) ב-UEFI.12 זו, עם זאת, אינה דרך חלופית לנקות lockout מיד וללא הרס. כשאין הרשאת lockout זמינה, התשובה הבסיסית היא להמתין להתאוששות עם הזמן (כשל אחד כל 10 דקות), וניקוי הוא המוצא האחרון שמשמיד כל מפתח (סעיף 3.2).

שימו לב גם שבתצורות שבהן מזינים במפורש את ערך ההרשאה לאיפוס, אם תנסו איפוס עם הערך השגוי, ה-TPM לא יאפשר ניסיון איפוס נוסף במשך 24 שעות.2 אל תנסו ערכים באקראי.

לבסוף, שימו לב ש-TPM 2.0 מאפשר גם מפתחות שנוצרו בלי ערך הרשאה, ואלה נשארים שמישים כשהמחשב ב-lockout. תצורת ברירת המחדל של BitLocker עם TPM בלבד יכולה לאתחל את Windows גם כשה-TPM נעול.2

4. הדרישות של Windows 11: להפריד בין TPM 2.0 לבין תנאי UEFI ו-IoT

4.1. מה שונה בין TPM 1.2 ל-2.0

אם עובדים עם מחשבים ישנים, עדיין נתקלים ב-TPM 1.2. הפער בין השניים גדול יותר מ”הגרסה עלתה”.10

היבט TPM 1.2 TPM 2.0
אלגוריתמים קריפטוגרפיים רק RSA ו-SHA-1 תמיכה במספר אלגוריתמים (crypto agility)
מדיניות lockout נקבעת לפי המימוש ואינה עקבית בין יצרנים נקבעת על ידי Windows, שמבטיח anti-hammering עקבי
צורת המימוש בעיקרו שבב נפרד נפרד / משולב / firmware
תקינה תקן בינלאומי ISO/IEC 11889:2015
דרישת firmware BIOS מתאים נדרש UEFI מקורי (CSM מושבת)

SHA-1 הוא מה שכואב ביותר. NIST חייבה את רוב הסוכנויות הפדרליות לעבור ל-SHA-256 החל מ-2014, ו-Microsoft ו-Google הפסיקו לתמוך בחתימות ובאישורים מבוססי SHA-1 ב-2017. מכיוון שמפרט TPM 1.2 יכול להשתמש רק ב-SHA-1, הוא אינו יכול לעמוד בקצב של המעבר הזה.10

4.2. “תמיכה ב-Secure Boot” ו”הפעלה של Secure Boot” הם שני דברים שונים

הדרישות המינימליות ל-Windows 11 במחשבים כלליים הן CPU 64-bit שנמצא ברשימת התאימות, 4 GB זיכרון, 64 GB אחסון, גרפיקה תואמת DirectX 12 ואילך עם driver של WDDM 2.0, צג גדול מ-9 אינץ’ ברזולוציית 720p ומעלה עם 8 ביט לערוץ צבע, firmware מערכת שהוא “UEFI, תואם Secure Boot”, ו-TPM 2.0.13

קראו את זה בדיוק. מה שהדרישה המינימלית מבקשת הוא שהמערכת תתמוך ב-Secure Boot, ולא שתהיה מופעלת.13 הדרישה עצמה מתקיימת גם כשהוא מושבת, ולכן אין צורך לגעת בהגדרות UEFI רק כדי לעבור ל-Windows 11. עם זאת, אם מפעילים את Secure Boot והפלטפורמה גם עומדת בתנאים לקשירה ל-PCR 7, BitLocker נקשר ל-PCR 7 ונכנס למצב שחזור בתדירות נמוכה יותר (פרק 7). הפעלה שלו לא מייצרת את התוצאה הזאת אוטומטית, ולכן בדקו לאיזה PCR הכרך באמת נקשר עם פרופיל האימות של PCR בפקודה manage-bde -protectors -get C:. הפעלה בגלל התועלת המעשית הזאת, ולא מפני שזו דרישה, היא הדרך הנכונה להציג את זה.

4.3. מעבר מ-legacy/CSM ל-UEFI אינו רק שינוי הגדרה

נקודה נוספת שקל לפספס היא שTPM 2.0 אינו נתמך ב-BIOS במצב legacy או במצב CSM (Compatibility Support Module). התקן עם TPM 2.0 חייב שה-BIOS שלו יהיה מוגדר כ”native UEFI only”, ואפשרויות ה-legacy/CSM חייבות להיות מושבתות.10

זה יוצר מצב לא נוח בפועל, כי מערכת הפעלה שהותקנה במצב legacy מפסיקה לאתחל ברגע שמשנים את מצב ה-BIOS ל-UEFI. לפני שינוי מצב ה-BIOS חייבים להשתמש בכלי MBR2GPT כדי להביא את מערכת ההפעלה ואת הדיסק למצב שתומך ב-UEFI.10 מחשב “שיש לו TPM ובכל זאת לא ניתן לשדרג ל-Windows 11” נמצא לעתים קרובות בדיוק במצב הזה. התמונה הכוללת להחלטה כיצד לצאת מ-Windows 10 מרוכזת ב-“האפשרויות המעשיות אחרי סיום התמיכה ב-Windows 10 — טבלת החלטות ל-ESU, ל-LTSC ולהחלפה”.

שימו לב גם שבשביל Device Health Attestation, מה ש-Windows תומך בו הוא TPM 2.0, והתקן עם BIOS במצב legacy לא יתנהג כמצופה גם אם יש בו TPM 2.0.1

4.4. היוצא מן הכלל של IoT Enterprise: להחליט לפי מהדורה ולפי גרסה

כל מה שנאמר למעלה על “Windows 11 דורש TPM 2.0” נוגע למהדורות של מחשבים כלליים. ל-Windows 11 IoT Enterprise יש סט דרישות מינימום מוקלות ומוגדרות בנפרד עבור התקנים ייעודיים, וב-IoT Enterprise LTSC (וב-24H2 ואילך שאינם LTSC) גם ה-TPM וגם Secure Boot הם Optional.14 במחשבים תעשייתיים ובציוד משובץ, הידיעה הזאת היא מה שהופך את המסקנה “הלוח הזה לא יכול להריץ Windows 11”.

לטבלת הדרישות הרשמית יש שתי עמודות: PREFERRED ו-OPTIONAL (המינימום להתקנים ייעודיים).14

פריט Windows 11 למחשבים כלליים Windows 11 IoT Enterprise LTSC
PREFERRED
Windows 11 IoT Enterprise LTSC
OPTIONAL
TPM נדרש TPM 2.0 TPM 2.0 אופציונלי
Secure Boot נדרשת תמיכה מופעל אופציונלי
Firmware מערכת UEFI UEFI BIOS מתאים
זיכרון 4 GB 4 GB 2 GB
אחסון 64 GB 64 GB 16 GB

יש שלושה דברים שכדאי לשים לב אליהם.

  • זה לא “LTSC אומר שאין צורך ב-TPM”. הדרישות המוקלות מוגדרות ל-IoT Enterprise, ו-Windows 11 Enterprise LTSC (בלי IoT) מטופל כמו המהדורות למחשבים כלליים. השמות דומים מספיק כדי להתבלבל ביניהם, אבל הרישיון שרוכשים הוא מה שמשנה את המסקנה.
  • IoT Enterprise שאינו LTSC משתנה לפי גרסה. בדרישות ה-OPTIONAL של 21H2 עד 23H2, TPM 2.0 עדיין נדרש (רק Secure Boot אופציונלי), וה-TPM נעשה אופציונלי רק מ-24H2 ואילך.14
  • דרישות המעבד מוגדרות בנפרד. גם במקומות שבהם ה-TPM ו-Secure Boot אופציונליים, רשימת המעבדים הנתמכים מוגדרת במקום אחר, ולכן חשוב לבדוק אותה.14

גם Microsoft עצמה מזהירה ממה ששווה הבחירה בדרישות המוקלות. התמצית היא שהורדת הדרישות בהתקן שמשתמשי הקצה יכולים להוסיף לו תוכנה בהמשך ראויה לשיקול מעמיק, ושהעדר TPM יכול להשפיע על התוכנה שמשתמשי הקצה צריכים.14 בלי TPM, BitLocker לא יכול לאטום את המפתח שלו למצב האתחול, והמפתחות של Windows Hello נופלים להגנת תוכנה בלבד. החליפו את ההנחה מ“מתאימים את ההתקן כדי לעמוד בדרישה” ל”מתאימים את ההתקן כדי לקבל את ההגנה שההתקן הזה צריך”.

התמונה הכוללת כיצד לבחור בין IoT Enterprise ל-LTSC וכיצד לרכוש רישיונות מרוכזת ב-“איזה Windows מתאים למחשב תעשייתי? — מדריך מעשי ל-Windows IoT Enterprise ול-LTSC”.

5. הגנת המפתחות: לא למסור את המפתח הפרטי, אלא להחזיר רק את התוצאה

5.1. במה זה שונה מהגנה על מפתח בתוכנה?

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

כשיוצרים ב-TPM מפתח פרטי שאינו ניתן לייצוא, אין צורך לטעון את המפתח לתוך ה-process ולחשב שם. האפליקציה או מערכת ההפעלה מבקשות מה-TPM “לחתום על זה” או “לפענח את זה” ומקבלות רק את התוצאה. זהו מנגנון שמפריד בין קבלת המפתח הפרטי לבין השימוש בו.3

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

איור 2: ההבדל בין הגנה על מפתח בתוכנה בלבד לבין הפקדתו ב-TPM

5.2. ה-TPM עצמו לא מנטר וירוסים

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

5.3. הגבלת ניסיונות ניחוש ה-PIN בצד ה-TPM

העמוד השני הוא anti-hammering. למפתח שה-TPM מגן עליו יכול להיות מצורף ערך הרשאה כמו PIN. כשניחושים של ערך ההרשאה נכשלים מספר מסוים של פעמים, ה-TPM מסרב לניסיונות נוספים וננעל. לגבי TPM 2.0, Windows הוא זה שמגדיר את ההתנהגות הזאת. באופן מפורש, הוא ננעל אחרי 32 ניסיונות הרשאה כושלים ושוכח כשל אחד כל 10 דקות. אחרי 320 דקות בלי שום כשל, מונה הכשלים הזכור חוזר לאפס.2

העובדה ש”מגבלת הניסיונות יושבת בחומרה” היא מה שעושה את זה יעיל. אם סופרים כשלים בתוכנה, אפשר לעקוף את המונה על ידי אתחול המחשב, החזרת שעון המערכת לאחור או שחזור של הקובץ שמתעד את המונה. עם TPM, שום דבר מזה לא אפשרי.3 זו בדיוק הבסיס לקביעה ש-PIN בן ארבע ספרות של Windows Hello בטוח יותר מסיסמה.

6. התפקידים הפנימיים: הוכחת זהות, הגנת מפתחות, רישום האתחול

אין צורך לשנן את כל ראשי התיבות בבת אחת. קראו אותם לפי תפקיד: EK ו-AIK מוכיחים זהות, SRK מגן על מפתחות, ה-PCR רושמים את האתחול, ו-NVRAM הוא אחסון בלתי נדיף. הסתכלו קודם בתמונה הכוללת שבדיאגרמה, ואחר כך קראו על כל יחס.

כופה שישתחרררק בערכים האלהTPM 2.0EK / endorsement keyנגזר מ-seed שנקבע בייצורמגיע עם אישור של היצרןSRK / storage root keyמפתח האב שעוטף מפתחות אחריםPCR 0-23צוברים את מדידות האתחולNVRAMאזור קטן ששורד הפסקת חשמלAIK / attestation identity keyהזהות שמוצגת החוצה במקום ה-EKהמפתח של BitLockerהמפתח של Windows Helloהמפתח הפרטי של אישור

איור 3: הרכיבים המרכזיים של ה-TPM ויחסי האב-בן בין המפתחות

6.1. EK ו-AIK: להוכיח שזה TPM אמיתי ובמקביל להימנע ממעקב אחרי ההתקן

ה-EK (Endorsement Key) הוא זוג מפתחות אסימטרי ייחודי לאותו TPM. החצי הפרטי נשמר בתוך ה-TPM ולעולם אינו נחשף כלפי חוץ ואינו נגיש מבחוץ.2 הוא מגיע עם אישור EK חתום על ידי היצרן, שמראה ש”המפתח הזה באמת נמצא בתוך TPM שאנחנו ייצרנו”. כך אפשר להבדיל בין TPM אמיתי לבין נוזקה שמתחזה לאחד.3

הערת אגב: EK ב-TPM 2.0 אינו “מפתח צרוב” אלא “מפתח שנגזר מ-seed”

התיעוד של Microsoft מתאר את ה-EK כזוג מפתחות RSA,2 אבל הניסוח הזה נשאר מתקופת TPM 1.2. הסוד הבלתי משתנה שנכתב לשבב TPM 2.0 בזמן הייצור הוא, באופן מדויק, seed בשם endorsement primary seed, וה-EK נגזר מאותו seed בהליך קבוע (template). גזירה מאותו seed מניבה תמיד את אותו מפתח, ולכן גם אם אפשר לשחזר את ה-EK, הוא נשאר בפועל מפתח ייחודי לאותו TPM. אפשר לגזור גם EK מסוג RSA וגם EK מסוג ECC, ואין זה נדיר שלמחשב אמיתי יש את שניהם. אין צורך בזה כדי לעקוב אחרי קו המחשבה המרכזי, ואפשר לדלג.

הצגה של ה-EK ישירות כלפי חוץ, לעומת זאת, תזהה את המחשב באופן ייחודי ותיצור בעיית פרטיות. בתרחישים אמיתיים משתמשים לכן ב-AIK (Attestation Identity Key). רשות אישורים משתמשת ב-EK ובאישור שלו כדי להוכיח ש”ה-AIK הזה נמצא בתוך TPM אמיתי” ומנפיקה אישור AIK. מכיוון שאפשר להשתמש ב-AIK אחר לכל גורם מסתמך, כמה מאמתים לא יכולים לשתף פעולה כדי לעקוב אחרי אותו מחשב.3

6.2. SRK: גם מפתחות מוצפנים יכולים לשבת באחסון חיצוני

ה-SRK (Storage Root Key) הוא מפתח האב שמשמש לעיטוף מפתחות אחרים. ה-TPM יכול להצפין מפתח שהוא יצר ולהוציא אותו החוצה, ומפתח כזה יכול להיות מפוענח רק על ידי אותו TPM. הפעולה הזאת נקראת wrapping, או binding.2 במילים אחרות, אין צורך לשמור כל מפתח בכמות הזיכרון הקטנה שבתוך ה-TPM. על ידי הצבה של מפתחות מוצפנים באחסון חיצוני ושימוש בהם רק ב-TPM המקורי, אפשר להתמודד עם מספר גדול של מפתחות. “אי אפשר להוציא את המפתח הפרטי” ו”אפשר לשמור נתוני מפתח מוצפנים בחוץ” אינם סותרים זה את זה.

6.3. PCR ו-NVRAM: רשומת האתחול והאחסון הבלתי נדיף

ה-PCR (Platform Configuration Registers) הם אוגרים מיוחדים שצוברים את מדידות האתחול. יש 24 כאלה, ממוספרים 0 עד 23, ומה שכל אחד מהם מודד מוגדר.4 התכונה החשובה היא שאי אפשר לכתוב ערך שרירותי ישירות; את הערך אפשר לקדם רק בפעולה שנקראת Extend. Extend היא פעולה חד-כיוונית שמשרשרת את הערך הנוכחי למדידה החדשה, מחשבת hash לתוצאה והופכת אותה לערך החדש, ולכן “למחוק בדרך רק את החלק המפריע של הרשומה” הוא בלתי אפשרי באופן עקרוני. הערכים מתאפסים באתחול מחדש.3

ל-TPM 2.0 יש גם PCR עם מאפיין שניתן לאפס (עבור DRTM ולשימוש אפליקציות). ה-PCR ש-BitLocker אוטם אליהם, לעומת זאת (0, 2, 4, 7 ו-11), הם PCR סטטיים של אתחול מדוד ואי אפשר לאפס אותם לפני אתחול מחדש. ההסבר במאמר הזה מניח אותם.

NVRAM הוא אזור קטן ובלתי נדיף שמשמש להחזקת דברים כמו אישורים. TPM 2.0 משפר על TPM 1.2 באלגוריתמים, בקריפטוגרפיה, בהיררכיות, במפתחות שורש, בהרשאות וב-NVRAM.10

7. אתחול מדוד: לרשום את ה-hash-ים, ולשחרר את המפתח במצב האתחול הצפוי

גם אם אפשר לשמור מפתח בבטחה, עדיין נדרש תנאי שימוש כדי “למנוע ממערכת הפעלה אחרת להשתמש במפתח הזה”. BitLocker יוצר את התנאי הזה על ידי אטימה (sealing) של המפתח לרשומת האתחול המדוד. בהמשך ההסבר עוקב אחרי הסדר: חישוב hash → רישום ל-PCR → שחרור המפתח.3

7.1. מה בעצם פירוש “למדוד” כאן?

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

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

לדוגמה, בחישוב עם hash מסוג SHA-256, המחרוזת abc נותנת

ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad

והמחרוזת abd, שנבדלת רק בתו האחרון, נותנת

a52d159f262b2c6ddb724a61840befc36eb30c88877a4030b65cbe86298449c9

הבדל של תו אחד משנה את הערך לחלוטין, והשוואה בין שני הערכים לא משאירה אפילו רמז לכך שהתכנים היו דומים. אפשר לחשב SHA-256 של כל קובץ עם Get-FileHash של PowerShell, וכך להתרשם מ”טביעת האצבע” הזאת במחשב שלכם.

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

7.2. שרשרת המדידות ── למדוד את מה שטוענים לפני שמריצים אותו

המנגנון פשוט. בתוך ה-firmware של המערכת יש נקודת התחלה מהימנה ללא תנאי שנקראת CRTM (Core Root of Trust for Measurement). ה-CRTM מחשב באופן בלתי מותנה hash של רכיב התוכנה הבא שיורץ ורושם את המדידה הזאת ב-TPM. כל רכיב שאחריו חוזר על אותו דבר — מודדים את מה שטוענים לפני שמריצים אותו. מכיוון שהמדידה נשלחת לפני ההרצה, רכיב לא יכול למחוק את המדידה של עצמו מה-TPM.3

TPMWindows kernelWindows boot managerUEFI firmware CRTMTPMWindows kernelWindows boot managerUEFI firmware CRTMPCR 0 / 2 / 4 / 7 מתעדכניםמודדים לפני שמריצים, ואז מעבירים שליטהalt[ה-PCR מחזיקים את אותם ערכים כמו בזמן האטימה][ה-PCR מחזיקים ערכים שונים]מחשב Extend ל-hash של הקוד הבא שיורץ1מעביר את השליטה2מבקש לשחרר את מפתח BitLocker האטום3מחזיר את המפתח4מפענח את כרך מערכת ההפעלה5מחשב Extend ל-kernel, ל-ELAM ולמנהלי האתחול6מעביר את השליטה ומתחיל את Windows7לא מחזיר את המפתח8עובר למסך הזנת מפתח השחזור9

איור 4: הזרימה של האתחול המדוד ושל שחרור המפתח של BitLocker

הדיאגרמה מציגה את ה-kernel נמדד אחרי הפענוח מפני שלפי עקרון האתחול המדוד, מה שטוענים נמדד לפני שהוא רץ. ה-boot loader של Windows מאמת את החתימה הדיגיטלית של ה-kernel לפני שהוא טוען אותו, וה-kernel בתורו מאמת את מנהלי האתחול, את קובצי האתחול ואת ELAM, וכך נוצרת שרשרת.15 אם ה-kernel היה מודד את עצמו אחרי שעלה, תמיד אפשר היה לדלג על המדידה, וזה היה מרוקן את הרעיון מתוכן.

BitLocker יוצר בתוך ה-TPM מפתח שאפשר להשתמש בו רק כשמדידות אלו מחזיקות בערכים הצפויים. הערכים הצפויים מחושבים לנקודה שבה ה-boot manager של Windows רץ מכרך מערכת ההפעלה שבדיסק המערכת. אם המחשב מאותחל ממערכת הפעלה אחרת, או שההגדרות שונו, המדידות בתוך ה-TPM משתנות, ה-TPM אינו מתיר את השימוש במפתח, וכרך מערכת ההפעלה המוצפן אינו ניתן לפענוח.3

7.3. ה-PCR ש-BitLocker משתמש בהם: 0, 2, 4 ו-11 מול 7 ו-11

אז אילו PCR באמת מנוטרים? פרופיל האימות (validation profile) של ברירת המחדל בתצורות UEFI מקוריות הוא כזה.4

PCR מה נמדד
PCR 0 קוד ההרצה של firmware הליבה של המערכת
PCR 1 נתוני firmware הליבה של המערכת
PCR 2 קוד הרצה מורחב או נתיק
PCR 3 נתוני firmware מורחבים או נתיקים
PCR 4 Boot manager
PCR 5 GPT / טבלת מחיצות
PCR 6 אירועי חזרה ממצבי צריכת חשמל S4 ו-S5
PCR 7 מצב Secure Boot
PCR 11 בקרת הגישה של BitLocker
PCR 12-14 אירועי נתונים, פרטי מודולי אתחול, הרשאות אתחול

כברירת מחדל, PCR 0, 2, 4 ו-11 הם יעדי האטימה. כשמצב Secure Boot (PCR 7) נתמך, לעומת זאת, האטימה משתמשת ב-PCR 7 וב-PCR 11 במקומם.4 זהו הבדל חשוב. PCR 0/2/4 הם ה-hash-ים של ה-firmware ושל תמונות ה-boot manager עצמם, ולכן הערכים שלהם משתנים בכל עדכון firmware, מה שמכניס את המחשב למצב שחזור. PCR 7, לעומת זאת, מודד “האם Secure Boot מופעל ואילו מפתחות מהימנים”, ולכן כל עוד החותם זהה, הערך לא משתנה כשמעדכנים תמונה. גם Microsoft מסבירה שקישור ל-PCR 7 מקטין את הסיכוי להיכנס למצב שחזור בגלל עדכון firmware או תמונה.4

7.4. PCR 11: לא לאפשר בקשת מפתח בשלב מאוחר יותר מה-boot manager

PCR 11 גם מגביל איזה שלב אתחול רשאי לבקש מפתח, גם כשמשתמשים ב-TPM של אותו מחשב. התרחיש שהוא מטפל בו הוא תוקף שמשאיר את המחשב של הקורבן כמו שהוא (שומר על החומרה ועל ה-firmware) ומחליף רק את דיסק מערכת ההפעלה באחד משלו. מכיוון שהמפתח אטום ל-TPM המקורי, החלפה של כל המחשב לא הייתה מועילה; הנקודה היא להמשיך להשתמש ב-TPM של הקורבן. התוקף מחלץ את בלוב המפתח האטום של BitLocker מתוך המטא-נתונים של מחיצת מערכת ההפעלה של הקורבן, מאתחל מערכת הפעלה בשליטתו, קורא ל-API של ה-TPM ומנסה לבטל את האטימה של אותו בלוב מפתח.

זה לא עובד מפני שWindows אוטם את המפתח כשערכו של PCR 11 הוא 0, וה-boot manager תמיד משנה את PCR 11 ל-1 כשהוא מעביר את השליטה ל-boot loader הבא, בין אם הוא לגיטימי ובין אם לא. עד שמערכת ההפעלה של התוקף רצה, ה-boot manager כבר ויתר על השליטה ו-PCR 11 בוודאות אינו 0 יותר. לכן, גם באותו מחשב ועם אותו TPM, אי אפשר לבקש מפתח משלב מאוחר יותר מה-boot manager.11

גם Secure Boot עצמו הוא חלק מההגנה של BitLocker. כברירת מחדל BitLocker משתמש בהגנת השלמות של Secure Boot דרך מדידת PCR 7, ומונע מ-firmware EFI, מאפליקציות אתחול EFI וממינהלי אתחול בלתי מורשים לעלות ולקבל את המפתח של BitLocker.11

8. השימושים ב-Windows: השוואה בין BitLocker, Hello ואימות הבריאות

כל תכונה של Windows משתמשת בתכונה אחרת של ה-TPM. BitLocker עוסק בשחרור מפתח לפי מצב האתחול, Hello עוסק באימות עם מפתח ייחודי להתקן, ואימות הבריאות עוסק בדיווח המדידות. הסתכלו קודם במכלול השימושים, ואחר כך קראו על התכונה שאתם צריכים.

TPM 2.0BitLocker / device encryptionאוטם את המפתח למצב האתחולWindows Helloמגן על המפתח שנקשר ל-PIN או לביומטריהanti-hammering שומר על PIN קצרCredential Guardמגן על המפתח של הסביבה המבודדת באמצעות מדידותאתחול מדוד / remote attestationמפיק quote חתום על מצב האתחולDevice Health Attestationקלט להחלטות conditional access ב-MDMPlatform Crypto Providerהופך את המפתח הפרטי של אישור לכזה שאינו ניתן לייצוא

איור 5: תכונות האבטחה המרכזיות של Windows שנבנו על ה-TPM

8.1. BitLocker ו-device encryption

BitLocker ו-device encryption. כפי שנאמר בפרק 7. יש ארבע שיטות פתיחה — TPM בלבד, TPM + PIN, TPM + startup key ו-TPM + PIN + startup key — ו-TPM בלבד מתוארת כנוחה ביותר, ובהתאם לכך פחות בטוחה מהשיטות שדורשות גורם אימות נוסף.11

שימו לב שהתנאים המוקדמים ל-device encryption (המנגנון שמפעיל את BitLocker אוטומטית) השתנו בשנים האחרונות. בעבר נדרש לעמוד בדרישות Modern Standby או HSTI ולא היו אמורים להיות חיבורים חיצוניים בעלי יכולת DMA, אבל מ-Windows 11 גרסה 24H2 התנאים המוקדמים האלה הוסרו ויותר מחשבים נכנסו לתחולה.16 הטענה במאמרים ישנים ש”זה עובד רק במחשבים שתומכים ב-Modern Standby” אינה תקפה מ-24H2 ואילך. אפשר לבדוק אם מחשב מסוים נמצא בתחולה תחת “Device Encryption Support” ב-msinfo32.exe (System Information).16

8.2. Windows Hello ו-Credential Guard

Windows Hello ו-Windows Hello for Business. אלה מאמתים על ידי שילוב של מפתח שמוקצה לכל התקן עם PIN או ביומטריה. אם קיים TPM, ה-TPM מגן על המפתח; אם לא, הוא מוגן בתוכנה. נתונים ביומטריים משמשים באותו מחשב רק כדי לקבל גישה למפתח שהוקצה, ואינם משותפים בין מחשבים.3 במחשב עם TPM אי אפשר להעתיק את המפתח למקום אחר, וזה נותן את התכונה שגם אם פרטי ההזדהות דלפו, אי אפשר להשתמש בהם במחשב אחר.

Credential Guard. התכונה הזאת מבצעת hash של פרטי ההזדהות באזור זיכרון מבודד שה-kernel אינו יכול לגשת אליו. האזור המבודד הזה מאותחל ומוגן במהלך תהליך האתחול, ו-Credential Guard משתמש ב-TPM כדי להגן על המפתח שלו באמצעות המדידות. המפתח נגיש רק בשלב של תהליך האתחול שבו מאותחל האזור המבודד, ואי אפשר להשתמש בו מה-kernel הרגיל.3

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

אתחול מדוד ו-remote attestation. באמצעות AIK, ה-TPM יכול להפיק הצהרה (quote) חתומה קריפטוגרפית על המצב הנוכחי של המדידות. שליחה שלה לגורם מרוחק מוכיחה “עם איזו תוכנה ואיזו הגדרה המחשב אותחל ואיתחל את מערכת ההפעלה”.3 מכיוון שהמדידה נעצרת במצב ההתחלתי של Windows, היא אינה מכילה מידע רגיש לפרטיות כמו אילו אפליקציות אתם משתמשים.3

Device Health Attestation. שירות אימות הבריאות של Microsoft מנפיק אישורי AIK ל-TPM-ים מיצרנים שונים, מנתח את המידע של האתחול המדוד וממיר אותו להצהרות פשוטות כמו “האם BitLocker מופעל”, “האם Secure Boot מופעל” ו”האם DEP מופעל”. MDM כמו Intune יכול אז להשתמש בהצהרות האלה, במקום לפענח בעצמו quote מורכב, כדי לבודד מחשב או לנתק את הגישה שלו לשירותי ענן.13

Platform Crypto Provider. הוא מגן על המפתח הפרטי של אישור באמצעות ה-TPM. תבנית של אישור (certificate template) יכולה לציין “להשתמש ב-Platform Crypto Provider של ה-TPM”, והמפתח הפרטי של אישור שמוגדר כלא ניתן לייצוא אינו יכול לצאת מה-TPM. באישור שדורש PIN, ה-anti-hammering של ה-TPM חל אוטומטית.3 זו נקודת הכניסה לנקודת המבט של המפתחים שנדונה בפרק 10.

כרטיסים חכמים וירטואליים (virtual smart cards). התכונה הזאת גורמת ל-TPM להתנהג כמו “כרטיס חכם שנמצא תמיד בחריץ”, ומייתרת את העלות של קנייה והפצה של כרטיסים וקוראים פיזיים.3 Microsoft ממליצה כיום, לעומת זאת, שמשתמשים בכרטיסים חכמים וירטואליים יעברו ל-Windows Hello for Business או למפתחות אבטחה FIDO2.2 הם ממשיכים להתקיים כנכס קיים, אבל זו אינה הכיוון לבחור בו בתכנון חדש.

9. מימושים ורכש: השוואה בין dTPM, TPM משולב, fTPM ו-Pluton

9.1. אל תהפכו הבדלים במימוש לדירוג פשוט של רמת ההגנה

מכיוון שהביטוי “שבב TPM” הפך לנפוץ, נוטים להניח ש-TPM חייב להיות רכיב נפרד, אבל יש שלוש צורות מימוש.10

אפיק LPC / SPICPUשבב TPM ייעודי= discrete, dTPMה-CPU / ערכת השבביםבאותו מארזחומרה ייעודית באותו מארזמופרדת לוגית= integratedCPU למטרות כלליותרץ ב-trusted execution environment, TEEמימוש firmware= firmware, fTPMSoCמעבד אבטחהבתכנון Microsoft= Pluton

איור 6: שלוש צורות המימוש של TPM, ו-Pluton כהרחבה שלהן

  • TPM נפרד (dTPM) הוא שבב ייעודי במארז מוליכים משלו. הוא מותקן על לוח האם, והיתרון שלו הוא שה-OEM יכול להעריך ולהסמיך אותו בנפרד מהמערכת עצמה.10
  • TPM משולב (integrated) יושב באותו מארז עם רכיבים אחרים, אבל ממומש כחומרה ייעודית ומופרדת לוגית.10
  • TPM מבוסס firmware (fTPM) מריץ את ה-TPM כ-firmware ב-trusted execution environment (TEE) של יחידת הרצה למטרות כלליות.10 הוא מתאים להתקנים קטנים ובצריכת חשמל נמוכה שבהם שבב ייעודי אינו מעשי.

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

9.2. Pluton: שילוב ב-CPU ומסלול עדכון ה-firmware

Microsoft Pluton לוקח את הצורה המשולבת צעד אחד קדימה. זהו מעבד קריפטוגרפי מאובטח בתכנון Microsoft, המיוצר על ידי שותפים לייצור סיליקון ומובנה בתוך ה-CPU, שתוכנן לספק פונקציונליות TPM ובמקביל לספק תכונות אבטחה שמעבר לתחום של מפרט TPM 2.0.17 נכון ל-2026, Pluton זמין במחשבי Windows 11 עם ערכות השבבים הבאות.17

  • AMD: סדרות Ryzen 6000 / 7000 / 8000 / 9000, סדרת Ryzen AI
  • Intel: סדרת Core Ultra 200V, מעבדי Core Ultra Series 3 ו-Series 3
  • Qualcomm: Snapdragon 8cx Gen 3, סדרת Snapdragon X

מבחינה תפעולית, המאפיין המייחד של Pluton הוא שיש לו שני מסלולי עדכון firmware. מלבד עדכון ה-UEFI capsule המסורתי של ה-firmware שנמצא ב-SPI flash של לוח האם, אפשר לטעון firmware חדש של Pluton באופן דינמי דרך עדכוני מערכת ההפעלה. באתחול המערכת הוא מאותחל עם ה-firmware שב-SPI flash, ובמהלך עליית Windows נטענת הגרסה העדכנית ביותר שהתקבלה דרך Windows Update (אם יש כזאת).17 כשמתגלה פרצה ב-firmware של TPM, האפשרות שתקון יגיע בלי להמתין לעדכון ה-BIOS של יצרן המחשב היא תכונה מבורכת בפועל.

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

10. למפתחים: להגן על מפתחות עם CNG, ולתכנן שימוש חוזר, הרשאות ושחזור

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

10.1. להשתמש ב-CNG, לא ב-TBS

Windows מציע את TBS (TPM Base Services) כ-API ברמה נמוכה. זהו שירות מערכת שמנהל באופן מרכזי את הגישה ל-TPM בין אפליקציות, מסופק כ-API מעל RPC, והוא מתזמן את הגישה ל-TPM באופן שיתופי לפי העדיפות שהקורא מציין.18

אם המטרה שלכם היא לשמור מפתחות, לחתום איתם, להצפין איתם ולשמר אותם, Microsoft ממליצה להשתמש ב-API-ים גבוהים יותר של key storage ולא ב-TBS. הפרידו בין “אני רוצה להפעיל את ה-TPM ישירות” לבין “אני רוצה להגן על המפתחות של האפליקציה שלי”; בשביל האחרון, עברו דרך CNG.18

מה שכדאי להשתמש בו הוא ה-key storage provider של CNG (Cryptography API: Next Generation) בשם “Microsoft Platform Crypto Provider”. CNG מפריד בין ספקים קריפטוגרפיים לבין ספקי אחסון מפתחות, ו-Platform Crypto Provider הוא KSP שמשתמש ב-TPM כדי לשמור מפתחות פרטיים בבטחה ולמנוע את חילוצם.19

Platform Crypto Provider מציע שתי תכונות שספק CNG מבוסס תוכנה בלבד לא יכול לספק (או לא יכול לספק באותה מידה).3

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

10.2. דוגמה מינימלית ודוגמה מעשית שפותחת מפתח קיים מחדש

מ-.NET עובדים עם זה דרך מחלקות ה-CNG ב-System.Security.Cryptography. ראשית, הצורה המינימלית שיוצרת מפתח בתוך ה-TPM והופכת אותו לכזה שאינו ניתן לייצוא היא הקטע הקצר הזה (.NET 8 / Windows).

using System.Security.Cryptography;

var parameters = new CngKeyCreationParameters
{
    // ספק אחסון המפתחות שמשתמש ב-TPM
    Provider = new CngProvider("Microsoft Platform Crypto Provider"),
    // אין לאפשר ייצוא של המפתח הפרטי בכלל
    ExportPolicy = CngExportPolicies.None,
};

using var key = CngKey.Create(CngAlgorithm.Rsa, "KomuraSoft.DeviceKey", parameters);
using var rsa = new RSACng(key);

בכך המפתח הפרטי נוצר בתוך ה-TPM ולעולם לא מופיע בזיכרון של ה-process. בפרודקשן, לעומת זאת, צריך גם לטפל ב”לפתוח את המפתח הקיים מהרצה שנייה ואילך”, ב”per-user או per-machine” וב”מרוצים (races) בין הפעלות במקביל”. הקוד הבא משלב את כל אלה.

using System;
using System.Security.Cryptography;

const string KeyName = "KomuraSoft.DeviceKey";

// NTE_EXISTS: "האובייקט כבר קיים" (מפתח עם אותו שם כבר נמצא)
const int NTE_EXISTS = unchecked((int)0x8009000F);

// ספק אחסון המפתחות שמשתמש ב-TPM
var provider = new CngProvider("Microsoft Platform Crypto Provider");

// בוחרים בין מפתח per-user למפתח per-machine (כזה שמשמש משירות או ממשימה).
// צד היצירה וצד הצריכה חייבים תמיד להסכים - אי-התאמה כאן
// מתגלגלת ל"המפתח שיצרתי לא נמצא".
const bool UseMachineKey = false;
var openOptions = UseMachineKey ? CngKeyOpenOptions.MachineKey : CngKeyOpenOptions.None;
var creationOptions = UseMachineKey
    ? CngKeyCreationOptions.MachineKey   // היצירה דורשת הרשאות administrator
    : CngKeyCreationOptions.None;

CngKey OpenOrCreateKey()
{
    if (CngKey.Exists(KeyName, provider, openOptions))
    {
        // מהרצה שנייה ואילך פותחים את המפתח הקיים (הוא נשמר ב-TPM)
        return CngKey.Open(KeyName, provider, openOptions);
    }

    var creationParameters = new CngKeyCreationParameters
    {
        Provider = provider,
        KeyCreationOptions = creationOptions,
        // אין לאפשר ייצוא של המפתח הפרטי בכלל - זו כל הנקודה של השימוש ב-TPM
        ExportPolicy = CngExportPolicies.None,
    };
    creationParameters.Parameters.Add(
        new CngProperty("Length", BitConverter.GetBytes(2048), CngPropertyOptions.None));

    try
    {
        return CngKey.Create(CngAlgorithm.Rsa, KeyName, creationParameters);
    }
    catch (CryptographicException ex) when (ex.HResult == NTE_EXISTS)
    {
        // אם תהליך אחר יוצר מפתח באותו שם בין Exists ל-Create,
        // Create נכשל עם NTE_EXISTS. רק במקרה הזה פותחים מחדש את המפתח שהמנצח יצר.
        // כל כשל אחר (TPM לא זמין, הרשאות חסרות וכן הלאה) נזרק חזרה לקורא.
        return CngKey.Open(KeyName, provider, openOptions);
    }
}

using (var key = OpenOrCreateKey())
using (var rsa = new RSACng(key))
{
    byte[] payload = System.Text.Encoding.UTF8.GetBytes("device-attestation-challenge");
    // החתימה מתרחשת בתוך ה-TPM. המפתח הפרטי לא מופיע בזיכרון ה-process
    byte[] signature = rsa.SignData(payload, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
}

10.3. שלוש נקודות מרכזיות בקוד: איסור ייצוא, scope וטיפול במרוצים

ExportPolicy = CngExportPolicies.None הוא העיקר. השאירו אותו בברירת המחדל ותוכלו להגיע לתצורה שבה אפשר להוציא את המפתח למרות שהשתמשתם ב-TPM. “המפתח לא יוצא” הוא הסיבה להשתמש ב-TPM, ולכן ציינו במפורש שאינו ניתן לייצוא.

המלכודת האחרת היא ערבוב בין מפתחות per-user למפתחות per-machine. האוברלואדים של שתי ארגומנטים ב-CngKey.Exists וב-CngKey.Open מחפשים רק מפתחות per-user. אם משנים רק את צד היצירה ל-CngKeyCreationOptions.MachineKey ומשאירים את צד הצריכה כמו שהוא, המפתח ה-machine הקיים לא נמצא, ומקבלים את מצב הכשל שבו הקוד “מנסה ליצור מחדש את המפתח באותו שם בכל פעם ונכשל”. כמו בקוד למעלה, יש ליישר אותו scope בשלושת המקומות — יצירה, בדיקת קיום ופתיחה (CngKeyCreationOptions.MachineKey ו-CngKeyOpenOptions.MachineKey).

יש גם סיבה להוציא את OpenOrCreateKey לפונקציה נפרדת ולשים בה try/catch: “לבדוק שהוא קיים ואז ליצור אותו” חלש מול מרוצים. אם שני תהליכים — למשל מהפעלה כפולה של האפליקציה — רואים שניהם Exists == false ואז ממשיכים ל-Create, זה שיוצר ראשון מנצח והמפסיד נכשל עם “מפתח באותו שם כבר קיים”. זה קורה רק בהפעלה הראשונה וגם אז לעתים נדירות, ולכן בדיקות כמעט לעולם לא יפגשו בזה. שלבו את הניקוי מלכתחילה: המפסיד פותח מחדש את המפתח שהמנצח יצר.

פתיחה מחדש מתאימה, עם זאת, רק כשהסיבה לכשל היא “מפתח באותו שם כבר קיים” (NTE_EXISTS). אם מפנים לאותו מסלול גם כשלים אחרים, כמו TPM שאינו זמין או הרשאות חסרות, הסיבה האמיתית מוחלפת בחריגה אחרת מ-Open שאומרת “המפתח לא נמצא”, והחקירה תועה. זו הסיבה שהקוד למעלה מצמצם על HResult ב-exception filter.

10.4. תכנון תפעולי: מהירות, אובדן מפתחות, ACL-ים ומחשבים בלי TPM

קוד שעובד אינו כל מה שדרוש כדי להריץ אותו בפרודקשן. במיוחד, היכן המפתח נשמר ואיזה חשבון רשאי להשתמש בו הם שני דברים שונים. החליטו על המהירות ועל ה-thread שמריץ את העבודה, על רישום מחדש (re-enrollment) אחרי תיקון, על הרשאות גישה ועל הדרך לטפל במחשבים בלי TPM.

  • ה-TPM אינו מהיר. זהו מיקרו-בקר ייעודי, או מעבד קטן שרץ במצב מוגן של ה-CPU.2 יצירת מפתח שלוקחת כמה שניות אינה נדירה. אל תשתמשו במפתח TPM ישירות כדי להצפין כמויות גדולות של נתונים. הצפינו את הנתונים במפתח סימטרי כמו AES והגנו על המפתח הסימטרי הזה במפתח ה-TPM, בשני שלבים.
  • אל תריצו יצירת מפתח או חתימה ב-UI thread. האיטיות שתוארה למעלה מופיעה ישירות כהקפאה.
  • ניקוי ה-TPM משמיד את המפתחות. הניחו שהם יאבדו בתיקון, בהחלפת לוח אם או בהתקנה מחדש של מערכת ההפעלה, ותכננו מסלול re-enrollment (למשל נוהל לרישום מחדש של ההתקן בצד השרת). תכנון שבו “אם המפתח נעלם נתקעתם” ייכשל בשטח בלי יוצא מן הכלל.
  • החליטו בין per-user ל-per-machine. מפתח per-user קשור לפרופיל. אם שירות או משימה מתוזמנת ישתמשו בו, אתם צריכים מפתח per-machine (CngKeyCreationOptions.MachineKey), ויצירה שלו דורשת הרשאות administrator. אל תשכחו להעביר CngKeyOpenOptions.MachineKey גם בצד הצריכה. לאופן החשיבה על היכן נתונים צריכים לשבת, כדאי לקרוא גם את “בחירת המקום שבו אפליקציית Windows שומרת את הנתונים שלה”.
  • הפיכת מפתח ל-per-machine לא מאפשרת מעצמה לחשבון של שירות להשתמש בו. MachineKey קובע רק היכן נמצא מאגר המפתחות; מי רשאי להשתמש במפתח נקבע על ידי ה-ACL (ה-security descriptor) שמצורף למפתח. תקלה קלאסית היא שמנהל יוצר את המפתח וחשבון שירות שאינו מנהל נכשל בפתיחתו עם “access is denied”. התיקון הוא או ליצור את המפתח תחת הזהות שתשתמש בו (החשבון של השירות), או להעניק ל-SID של השירות ב-security descriptor (המאפיין Security Descr של CNG) בזמן היצירה. בכל מקרה, אמתו זאת תמיד תחת החשבון שמריץ בפועל.
  • החליטו כיצד לטפל בסביבות בלי TPM. לדחות אותן כדרישה, או לחזור ל-Microsoft Software Key Storage Provider ולהשלים עם רמת הגנה נמוכה יותר? בסביבות מעורבות, גישה מעשית היא שתבנית האישור תעדיף את Platform Crypto Provider ובמקביל תאפשר גם את הספק התוכנתי.3
  • חשבו היטב אם לצרף PIN למפתח. anti-hammering הוא יתרון, אבל ה-lockout של ה-TPM הוא גלובלי. ניהול מונה כשלים לכל מפתח בנפרד אינו מעשי מבחינה טכנית, ולכן יותר מדי כשלי הרשאה נועלים את כל ה-TPM.2 המשמעות היא ששגיאת הקלדה באפליקציה שלכם יכולה להפיל את Windows Hello באותו מחשב.
  • הטיפול בפרטי ההזדהות עצמם נשאר בעיה נפרדת. כיצד לתכנן כך שדבר לא יישמר בטקסט גלוי בסקריפטים או בקבצי הגדרות מרוכז ב-“טיפול בטוח בפרטי הזדהות ב-PowerShell”.

11. הנוהג המקובל (טבלת החלטות)

המצב מה לעשות הסיבה וההערות
רוצים לברר אם מחשב יכול לעבור ל-Windows 11 החליטו עם PC Health Check או עם כלי ניהול. אם בודקים ביד, עברו על הכול: רשימת תמיכת המעבדים, 4 GB זיכרון, 64 GB אחסון, GPU עם DirectX 12 ואילך ו-driver של WDDM 2.0, צג גדול מ-9 אינץ’ ב-720p עם 8 ביט לערוץ, firmware UEFI מקורי שתומך ב-Secure Boot, ו-TPM 2.0 אל תקבעו “אפשר לשדרג” לפי ה-TPM בלבד. גם ה-GPU והצג הם חלק מהדרישות המינימליות. הפספוס הוא הסיכון האמיתי, ולכן ככלל השאירו את ההחלטה לכלי13
רוצים לסקור רק את דרישת ה-TPM בכל הצי אמתו 2.0 עם Get-Tpm ועם SpecVersion של Win32_Tpm זה בודק את דרישת ה-TPM; זו אינה ההחלטה על הכשירות ל-Windows 11 עצמה138
יש TPM, אבל המחשב לא עומד בדרישות Windows 11 בדקו אם מצב ה-BIOS הוא legacy/CSM. המירו ל-UEFI עם MBR2GPT לפני המעבר TPM 2.0 לא עובד במצב CSM10
למחשב תעשייתי או להתקן משובץ אין TPM, או שאי אפשר להוסיף אחד בדקו את דרישות המינימום OPTIONAL של Windows 11 IoT Enterprise. חשוב להבדיל בין המהדורה (IoT Enterprise מול Enterprise LTSC בלי IoT) ובין הגרסה (LTSC, או 24H2 ואילך אם אינו LTSC) ה-TPM אופציונלי ב-IoT Enterprise LTSC וב-24H2 ואילך שאינם LTSC. ב-21H2 עד 23H2 שאינם LTSC נדרש TPM 2.0. Enterprise LTSC בלי IoT לא מקבל את הדרישות המוקלות14
מעדכנים את UEFI/BIOS השרו את BitLocker מראש ואמתו היכן מפתח השחזור נשמר עדכון firmware משנה את מדידות ה-PCR4
רוצים לנקות את ה-TPM הבטיחו קודם גיבוי ומסלול שחזור. בצעו זאת מתכונה של מערכת ההפעלה (ולעולם לא מה-UEFI) ניקוי משמיד כל מפתח שנגזר מה-TPM ואת הנתונים שלו5
הופיעה בקשת מפתח השחזור עברו על השינויים האחרונים (firmware, Secure Boot, סדר האתחול, TPM) הסיבה היא ששינוי הזיז את המדידות411
ה-TPM נחסם ב-lockout השאירו את המחשב דלוק למשך מרווח ההחלמה (10 דקות כברירת מחדל; בדקו LockoutHealTime ב-Get-Tpm). אם אתם ממהרים, השתמשו באיפוס זמן ה-lockout ב-tpm.msc או ב-Unblock-Tpm סיסמת הבעלים לא נשמרת מאז 1607. כברירת מחדל TPM 2.0 שומר רק את הרשאת ה-lockout. איפוס עם ערך הרשאה שגוי מפעיל איסור של 24 שעות על ניסיון נוסף122
מחשב שמודל האיומים שלו כולל התקפה פיזית הגדירו TPM + PIN (enhanced PIN), השביתו שינה (sleep) ועבדו עם hibernate או כיבוי TPM בלבד הוא התצורה שמעדיפה נוחות11
רוצים להגן על מפתחות באפליקציה שלכם ה-Microsoft Platform Crypto Provider של CNG יחד עם ExportPolicies.None ה-API-ים של key storage שמעל TBS הם הרמה המומלצת1819
רוצים להצפין כמות גדולה של נתונים הצפינו במפתח סימטרי והגנו רק על המפתח הזה עם ה-TPM ה-TPM איטי ואינו מתאים להצפנה ישירה של כמויות גדולות2
פוסלים או מעבירים מחשב הפכו את מחיקת הדיסק (איפוס Windows, כלי מחיקה ייעודי או השמדה פיזית) לנוהל המרכזי, ונקו את ה-TPM אחרון, כחלק ממנו ניקוי ה-TPM לא מוחק את הנתונים שעל הדיסק. מפתח שחזור שנשמר בנפרד עדיין יכול לפענח אותם. שימו לב גם שסדר שגוי יכול להשאיר אתכם בלי גישה לנתונים שלכם5

12. סיכום

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

בבדיקת המצב, הפרידו בין נוכחות ה-TPM, המוכנות שלו וגרסת המפרט שלו. אל תסיקו ש-TPM 2.0 לבדו הופך מחשב לכשיר ל-Windows 11; בדקו גם את ה-UEFI, את ה-CPU ואת השאר. הדרישה המינימלית ל-Secure Boot היא תמיכה, וזה לא אותו דבר כמו הפעלה. לתצורה שעומדת בתנאים לקשירה ל-PCR 7 יש את היתרון של פחות מקרי שחזור של BitLocker בגלל עדכוני firmware.134

הפרידו בראשכם בין Windows 11 למחשבים כלליים לבין הדרישות המוקלות של IoT Enterprise. ה-TPM אופציונלי ב-IoT Enterprise LTSC וב-24H2 ואילך שאינם LTSC; ב-21H2 עד 23H2 שאינם LTSC, וב-Enterprise LTSC בלי IoT, אין יחס זהה. אל תדרגו צורות מימוש לפי השם בלבד; בחרו לפי ההגנה שאתם צריכים ולפי האופן שבו מסופקים עדכונים ותמיכה.1410

מבחינה תפעולית, הפכו את אימות מפתח השחזור והשהיית BitLocker לפני השינוי, ואת חידוש ההגנה אחריו, לנוהל אחד רציף. ניקוי ה-TPM אינו מחיקת דיסק. בפיתוח, השתמשו ב-Platform Crypto Provider של CNG ותכננו לא רק את אי-יכולת הייצוא אלא גם את ה-scope של המפתח, את ה-ACL-ים, את מרוצי היצירה ואת ה-re-enrollment אחרי אובדן.51819

מאמרים קשורים

תחומי ייעוץ קשורים

KomuraSoft LLC עוסקת בסקירה של דרישות החומרה שמגיעות יחד עם מעבר ל-Windows 11, בייעוץ לתפעול BitLocker, ובפיתוח תוכנה בהתאמה אישית ל-Windows עבור אפליקציות עסקיות, כולל ניהול מפתחות ייחודי למחשב עם ה-TPM.

מקורות

  1. Microsoft Learn, Trusted Platform Module Technology Overview. על כך שה-TPM הוא מעבד קריפטוגרפי מאובטח שנעשה עמיד לשינוי על ידי כמה מנגנוני אבטחה פיזיים, על כך שנוזקה אינה יכולה לשנות את פונקציות האבטחה של ה-TPM, על שלושת היתרונות של יצירה, אחסון והגבלת שימוש במפתחות ובנוסף אימות התקן ושלמות הפלטפורמה, על כך שקוד האתחול נמדד ונרשם באתחול, על כך ש-Windows 10/11 מאתחלים את ה-TPM ומשתלטים עליו אוטומטית ולכן בדרך כלל יש להימנע מהגדרה דרך tpm.msc, על כך שהפיתוח הפעיל של קונסולת הניהול של ה-TPM הסתיים עם Windows Server 2019 ו-Windows 10 1809, ועל כך ש-Device Health Attestation דורש TPM 2.0 ו-firmware UEFI ואינו מתנהג כמצופה בהתקן עם BIOS legacy גם כשיש בו TPM 2.0.  2 3 4 5

  2. Microsoft Learn, Trusted Platform Module (TPM) fundamentals. על כך שהחלקים הפרטיים של storage root key ושל endorsement key לעולם אינם נחשפים לשום רכיב, תוכנה, תהליך או משתמש אחר, על wrapping ו-binding של מפתחות, על אטימה למדידות הפלטפורמה וביטול האטימה, על כך שה-EK הוא זוג מפתחות RSA שהחצי הפרטי שלו לא יוצא מה-TPM, על key attestation, על כך ש-anti-hammering הוא lockout גלובלי, על כך ש-Windows מגדיר את TPM 2.0 להינעל אחרי 32 ניסיונות הרשאה כושלים ולשכוח כשל אחד כל 10 דקות, על כך שהזיכרון חוזר לאפס אחרי 320 דקות בלי כשל, על כך שאפשר להשאיר מחשב נעול דלוק 10 דקות כדי לצאת מה-lockout, על איפוס מיידי עם סיסמת הבעלים ועל איסור של 24 שעות על ניסיון חוזר אחרי הזנה שגויה, על כך שמפתחות בלי ערך הרשאה נשארים שמישים כשהמכשיר נעול ולכן תצורת TPM בלבד של BitLocker יכולה עדיין לאתחל, על כך שה-TPM רץ כמיקרו-בקר ייעודי או במצב מוגן של ה-CPU, ועל כך שמשתמשים בכרטיסים חכמים וירטואליים נקראים לעבור ל-Windows Hello for Business או ל-FIDO2.  2 3 4 5 6 7 8 9 10 11 12 13

  3. Microsoft Learn, How Windows uses the TPM. על כך שהגנה על מפתח בתוכנה חשופה להתקפות הנדסה לאחור, על הגנת המפתחות ועל ה-anti-hammering של Platform Crypto Provider, על כך שאישור ה-EK מבסס את האותנטיות של ה-TPM וה-AIK מגן על הפרטיות, על כך שה-CRTM מחשב באופן בלתי מותנה hash של הרכיב הבא ורושם אותו ב-TPM, על מדידה לפני הרצה כך שאי אפשר למחוק מדידות (המדידות מתאפסות באתחול מחדש), על כך ש-BitLocker יוצר מפתח בתוך ה-TPM שאפשר להשתמש בו רק כשמדידות האתחול תואמות את הערכים הצפויים, על כך שאפשר לשמור מפתחות שחזור ב-AD DS, על כך שהאתחול המדוד רושם את ה-kernel של Windows, את ה-driver של ELAM ואת מנהלי האתחול, על quotes שמופקים עם AIK ועל remote attestation, על כך ששירות אימות הבריאות עובד יחד עם MDM, על כך ש-Credential Guard מגן על המפתח של הסביבה המבודדת באמצעות מדידות TPM, על הגנת המפתחות של Windows Hello for Business ועל כך שנתונים ביומטריים אינם משותפים מחוץ למחשב, על כרטיסים חכמים וירטואליים, ועל נוהג תבניות האישור בסביבות מעורבות.  2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

  4. Microsoft Learn, Configure BitLocker. על רשימת PCR 0 עד 23 ועל מה שכל PCR מודד במדיניות “Configure TPM platform validation profile for native UEFI firmware configurations”, על כך שפרופיל ברירת המחדל ל-UEFI מקורי הוא PCR 0, 2, 4 ו-11, על כך שהאטימה עוברת כברירת מחדל ל-PCR 7 ול-PCR 11 כשמצב Secure Boot (PCR 7) נתמך, על כך ש-PCR 7 מציין אם Secure Boot מופעל ואילו מפתחות מהימנים, ולכן שימוש בו במקום ב-PCR 0, 2 ו-4 — שהם hash-ים של ה-firmware ושל תמונות ה-Bootmgr עצמם — מקטין את הסיכוי להיכנס למצב שחזור אחרי עדכון firmware או תמונה, על כך שיש להשהות את BitLocker לפני עדכון firmware בתצורות שכוללות את PCR 0, ועל כך שמדידת PCR 7 היא דרישת logo במערכות שתומכות ב-Modern Standby, שבהן המפתח נקשר כברירת מחדל ל-PCR 7 ול-PCR 11 כשה-TPM ו-Secure Boot מוגדרים כראוי.  2 3 4 5 6 7 8 9 10 11 12

  5. Microsoft Learn, Troubleshoot the TPM. על כך ש-Windows מאתחל את ה-TPM ומשתלט עליו אוטומטית ולכן אין צורך ליצור סיסמת בעלים, על כך שניקוי ה-TPM גורם לאובדן נתונים ומשמיד כל מפתח שנגזר מה-TPM ואת הנתונים שלו, כולל כרטיסים חכמים וירטואליים ומזהי PIN לכניסה, על כך שאין לנקות מחשב שאינו שלכם בלי הנחיה מהמנהל שלו, על כך שיש לנקות תמיד מתכונה של מערכת ההפעלה (tpm.msc) ולא ישירות מה-UEFI, על האפשרות לכבות את ה-TPM אם רוצים רק לעצור אותו באופן זמני, על הנוהל לניקוי דרך Device security → Security processor details → troubleshooting ב-Windows Security, על כך ש-Windows מאתחל את ה-TPM מחדש ומשתלט עליו שוב אוטומטית אחרי ניקוי, על כך ש-Windows לא תומך במעבר בין TPM-ים במערכת שיש בה יותר מאחד ולכן מעבר כזה מכניס את BitLocker למצב שחזור, ועל בדיקת הגדרות ה-UEFI כש-TPM 2.0 לא מזוהה.  2 3 4 5 6 7 8 9 10 11 12 13

  6. Microsoft Learn, TrustedPlatformModule Module. על התפקידים של ה-cmdlet-ים Clear-Tpm, ConvertTo-TpmOwnerAuth, Disable-TpmAutoProvisioning, Enable-TpmAutoProvisioning, Get-Tpm, Get-TpmEndorsementKeyInfo, Get-TpmSupportedFeature, Import-TpmOwnerAuth, Initialize-Tpm, Set-TpmOwnerAuth ו-Unblock-Tpm.  2

  7. Microsoft Learn, Get-Tpm (TrustedPlatformModule). על כך ש-Get-Tpm מחזיר TpmObject, ועל המשמעות של כל מאפיין, כולל TpmPresent, TpmReady, TpmEnabled, TpmActivated, TpmOwned, ManagedAuthLevel, OwnerAuth, OwnerClearDisabled, AutoProvisioning, LockedOut, LockoutHealTime, LockoutCount, LockoutMax ו-SelfTest, יחד עם פלט לדוגמה.  2

  8. Microsoft Learn, Win32_Tpm class. על המאפיינים של המחלקה Win32_Tpm (IsActivated_InitialValue, IsEnabled_InitialValue, IsOwned_InitialValue, SpecVersion, ManufacturerVersion, ManufacturerVersionInfo, ManufacturerId, PhysicalPresenceVersionInfo). כולל העובדה ש-ManufacturerId הוא uint32 שהבתים שלו יוצרים מחרוזת כשמפרשים אותם כתווי ASCII (לדוגמה 1414548736 → 0x54/0x50/0x4D/0x00 → “TPM”), ושהמאפיין SpecVersion הוא מחרוזת שמכילה את גרסת ה-major וה-minor של מפרט TCG יחד עם ה-revision וה-errata. ManufacturerIdTxt אינו נמנה עם המאפיינים של המחלקה הזאת.  2 3 4

  9. Microsoft Learn, tpmtool. על כך ש-tpmtool הוא כלי לשליפת מידע על ה-TPM, על כך ש-getdeviceinformation מציג מידע בסיסי על ה-TPM, ועל כך ש-gatherlogs אוסף את הלוגים של ה-TPM לתיקייה הנוכחית. 

  10. Microsoft Learn, TPM recommendations. על כך שה-TPM פסיבי, רכיב שמקבל פקודות ומחזיר תשובות, על כך ש-TPM 1.2 תומך רק ב-RSA וב-SHA-1, על כך ש-NIST חייבה מעבר ל-SHA-256 החל מ-2014 ו-Microsoft ו-Google הפסיקו לתמוך בחתימות ובאישורים מבוססי SHA-1 ב-2017, על ה-crypto agility של TPM 2.0 ועל תקינתו הבינלאומית כ-ISO/IEC 11889:2015, על כך שמדיניות ה-lockout של TPM 1.2 משתנה לפי המימוש ואילו Windows מגדיר את TPM 2.0 ומבטיח anti-hammering עקבי, על שלושת המימושים (נפרד/dTPM, משולב, firmware/fTPM) כש-Windows משתמש בכולם באותה דרך ו-Microsoft אינה נוקטת עמדה בצורת המימוש, ועל כך ש-TPM 2.0 אינו נתמך ב-BIOS במצב legacy או CSM, דורש הגדרת UEFI מקורית, ומערכת הפעלה שהותקנה במצב legacy צריכה MBR2GPT לפני שינוי מצב ה-BIOS. שימו לב שאותו עמוד מונה את Modern Standby כתנאי מוקדם ל-device encryption, אבל התנאי הזה הוסר ב-Windows 11 גרסה 24H2 (ראו סעיף 8.1 ו-[^bitlockerindex]).  2 3 4 5 6 7 8 9 10 11 12 13 14 15

  11. Microsoft Learn, BitLocker countermeasures. על כך ש-BitLocker משתמש כברירת מחדל בהגנת השלמות של Secure Boot דרך מדידת PCR 7, כך ש-firmware EFI, אפליקציות אתחול ומינהלי אתחול בלתי מורשים אינם יכולים להשיג את המפתח של BitLocker, על ארבע שיטות הפתיחה (TPM בלבד, TPM + startup key, TPM + PIN, TPM + startup key + PIN) כש-TPM בלבד מעדיף נוחות ופחות בטוח באופן יחסי, על כך ששינויים ב-TPM, בהגדרות ה-BIOS/UEFI, בקובצי האתחול או בהגדרות האתחול מכניסים את המחשב למצב שחזור, על כך ש-bootkits ו-rootkits מזוהים על ידי מדידות ה-PCR ולכן המפתח לא משוחרר, על כך ש-Windows אוטם את המפתח כש-PCR 11 הוא 0 וה-boot manager תמיד משנה את PCR 11 ל-1 כשהוא מעביר שליטה, ולכן פתיחה על ידי החלפת דיסק לא עובדת, ועל ההמלצה להשתמש ב-TPM + enhanced PIN ולהשבית שינה כשהתקפה פיזית נכללת במודל האיומים.  2 3 4 5 6

  12. Microsoft Learn, Change the TPM owner password. על כך ש-Windows לא שומר את סיסמת הבעלים של ה-TPM כשהוא מקצה את ה-TPM מאז Windows 10 גרסה 1607, קובע ערך אקראי באנטרופיה גבוהה ואז משליך אותו. על כך שאפשר לשמור אותה על ידי הגדרת OSManagedAuthLevel תחת מפתח ה-registry HKLM\Software\Policies\Microsoft\TPM ל-4, ש-Microsoft מזהירה מפניה בתוקף, על כך שערך ברירת המחדל הוא 5 בגרסאות חדשות מ-Windows 10 1703, שפירושו לגבי TPM 2.0 “לשמור את הרשאת ה-lockout”, ועל כך שפעולות ניהול כמו הפעלה, השבתה וניקוי נשארות אפשריות דרך אישור נוכחות פיזית ב-UEFI גם בלי סיסמת הבעלים.  2 3 4 5

  13. Microsoft Learn, Windows 11 requirements. על דרישות המינימום של Windows 11 (CPU או SoC 64-bit תואם במהירות 1 GHz ומעלה עם 2 ליבות ומעלה, 4 GB זיכרון ומעלה, 64 GB אחסון ומעלה, כרטיס גרפי תואם DirectX 12 ואילך עם driver של WDDM 2.0, firmware מערכת שהוא “UEFI, תואם Secure Boot”, TPM 2.0, צג גדול מ-9 אינץ’ ברזולוציית 720p ומעלה עם 8 ביט לערוץ צבע, וחיבור לאינטרנט). כולל את הנקודה שהדרישה היא תמיכה ב-Secure Boot ולא הפעלה שלו.  2 3 4 5

  14. Microsoft Learn, Minimum System Requirements - Windows IoT Enterprise. על דרישות המינימום מסוג PREFERRED של Windows IoT Enterprise שתואמות את הדרישות של התקנים צרכניים, ועל הגמישות לסטות מרמה זו עבור התקנים ייעודיים (דרישות המינימום מסוג OPTIONAL). על דרישות המינימום מסוג OPTIONAL של Windows 11 IoT Enterprise LTSC: 2 GB זיכרון, 16 GB אחסון, BIOS כמתאים ל-firmware המערכת, TPM “Optional” ו-Secure Boot “Optional”. על Windows 11 IoT Enterprise שאינו LTSC, שבו דרישות ה-OPTIONAL של 21H2/22H2/23H2 עדיין דורשות TPM 2.0 ורק Secure Boot אופציונלי, וה-TPM נעשה אופציונלי מ-24H2 ואילך. על כך שדרישות המעבד מוגדרות בעמוד נפרד. ועל ההצהרה שהורדת הדרישות בהתקן ייעודי שמשתמשי הקצה יכולים להוסיף לו תוכנה ראויה לשיקול מעמיק, כי העדר TPM יכול להשפיע על התוכנה שמשתמשי הקצה צריכים (שלא כמו שינוי סוג האחסון, שמשפיע רק על ביצועי הקריאה והכתיבה). הדרישות המוקלות האלה חלות על משפחת המהדורות של Windows IoT Enterprise.  2 3 4 5 6 7

  15. Microsoft Learn, Secure the Windows boot process. על התפקידים של Secure Boot, Trusted Boot, ELAM ו-Measured Boot, על כך שב-Trusted Boot ה-boot loader מאמת את החתימה הדיגיטלית של ה-kernel לפני שהוא טוען אותו וה-kernel בתורו מאמת את מנהלי האתחול, את קובצי האתחול ואת ELAM, על כך ש-ELAM נטען לפני מנהלי אתחול של צד שלישי, ועל כך שב-Measured Boot ה-firmware של UEFI שומר ב-TPM את ה-hash-ים של ה-firmware, של ה-boot loader, של מנהלי האתחול ושל כל מה שנטען לפני אפליקציית ה-anti-malware. 

  16. Microsoft Learn, BitLocker overview. על כך ש-device encryption דרש בעבר לעמוד בדרישות האבטחה של Modern Standby או HSTI ולא היו אמורים להיות חיבורים חיצוניים בעלי יכולת DMA, ועל כך שהתנאים המוקדמים של DMA ושל HSTI/Modern Standby הוסרו מ-Windows 11 גרסה 24H2 ואילך, כך שיותר התקנים נכנסו לתחולה של device encryption אוטומטי וידני, על כך ש-device encryption מצפין רק את כונן מערכת ההפעלה ואת הכוננים הקבועים, על כך שמפתח השחזור נגבה ל-Microsoft Entra ID, ל-AD DS או לחשבון Microsoft לפני הסרת ה-clear key, ועל כך שאפשר לאמת אם התנאים המוקדמים מתקיימים תחת “Device Encryption Support” ב-msinfo32.exe.  2

  17. Microsoft Learn, Microsoft Pluton security processor. על כך ש-Pluton הוא מעבד קריפטוגרפי מאובטח המובנה ב-CPU, על כך שתוכנן לספק פונקציונליות TPM ובמקביל לספק תכונות אבטחה שמעבר למפרט TPM 2.0, על ערכות השבבים הנתמכות (AMD Ryzen 6000/7000/8000/9000 וסדרת Ryzen AI, סדרת Intel Core Ultra 200V ו-Core Ultra Series 3, Qualcomm Snapdragon 8cx Gen 3 וסדרת Snapdragon X), על כך שה-firmware נטען באתחול מ-SPI flash של לוח האם ושהגרסה העדכנית ביותר שהתקבלה דרך Windows Update משמשת במהלך עליית Windows, ועל שני מסלולי העדכון: עדכון UEFI capsule ועדכון מערכת ההפעלה.  2 3

  18. Microsoft Learn, TPM Base Services. על כך ש-TBS הוא שירות מערכת שמנהל באופן מרכזי את הגישה ל-TPM בין אפליקציות ומספק API מעל RPC, על כך שהוא מתזמן את הגישה ל-TPM באופן שיתופי לפי העדיפות שהקורא מציין, ועל כך ש-Microsoft ממליצה למפתחים להשתמש ב-API-ים גבוהים וקלים יותר לשימוש של key storage ולא ב-TBS לצורכי אחסון מפתחות.  2 3 4

  19. Microsoft Learn, CNG Key Storage Providers. על כך ש-CNG מפריד בין ספקים קריפטוגרפיים לבין ספקי אחסון מפתחות (KSP-ים), על כך ש-Microsoft Platform Crypto Provider הוא KSP שמשתמש ב-TPM כדי לשמור מפתחות פרטיים בבטחה ולמנוע גם מתוכנה זדונית לחלץ אותם, ועל השימוש בו על ידי העברת MS_PLATFORM_CRYPTO_PROVIDER ל-NCryptOpenStorageProvider.  2 3

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

העמודים האלה ממקמים את הנושא בהקשר רחב יותר של שירותים והחלטות.

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

שאלות נפוצות

שאלות נפוצות בפניות בנושא המאמר.

מה ה-TPM בעצם עושה?
במשפט אחד: זו כספת קטנה שמאפשרת להשתמש במפתח פרטי בלי להוציא אותו החוצה. מפתח פרטי שנוצר בתוך ה-TPM יכול, בהתאם להגדרה, לא לצאת מהשבב בכלל. האפליקציה ומערכת ההפעלה לא מקבלות את המפתח עצמו; הן מבקשות מה-TPM "לחתום על הנתונים האלה" או "לפענח עם המפתח הזה" ומקבלות רק את התוצאה. בנוסף לכך, ה-hash-ים של ה-firmware ושל ה-boot loader שנטענו באתחול נצברים ונרשמים לאזור שנקרא PCR, ואפשר לאטום (seal) מפתח כך שייפתח רק כשהערכים האלה הם כפי שציפיתם. בדיוק מהמנגנון הזה נובע ש-BitLocker לא ניתן לפתיחה כשמחליפים את תוכן המחשב.
למה Windows 11 הפך את TPM 2.0 לחובה?
כי BitLocker, Windows Hello, Credential Guard ואימות בריאות ההתקן (device health attestation) מתוכננים כולם סביב עוגן אמון שמעוגן בחומרה. TPM 1.2 ידע להשתמש רק ב-RSA וב-SHA-1, והתנהגות ה-lockout שלו השתנתה מיצרן ליצרן, ואילו TPM 2.0 תומך באלגוריתמים חדשים יותר ו-Windows מגדיר בו anti-hammering באופן עקבי. שימו לב ש-TPM 2.0 לא עובד במצב תאימות של legacy BIOS (CSM), ולכן הגדרת UEFI מקורית היא תנאי מוקדם. היוצא מן הכלל הוא Windows 11 IoT Enterprise: ב-IoT Enterprise LTSC וב-24H2 ואילך שאינם LTSC גם ה-TPM וגם Secure Boot הם אופציונליים (ב-21H2 עד 23H2 שאינם LTSC, TPM 2.0 עדיין נדרש, ו-Windows 11 Enterprise LTSC בעל השם הדומה, בלי IoT, לא מקבל את הדרישות המוקלות).
מה ההבדל בין dTPM, fTPM ו-Pluton? מה כדאי לבחור?
ההבדל הוא באופן המימוש. dTPM (discrete TPM) הוא שבב ייעודי על לוח האם, fTPM (firmware TPM) הוא מימוש תוכנה שרץ ב-trusted execution environment של ה-CPU, ו-Pluton הוא מעבד אבטחה בתכנון Microsoft המשולב ב-CPU. מנקודת המבט של Windows כולם משמשים באותה דרך, ו-Microsoft מצהירה במפורש שאינה נוקטת עמדה בשאלה איזה מימוש לבחור. ההבדלים המעשיים הם שלשבב נפרד יש bus בינו ובין ה-CPU שיכול לשמש מטרה להתקפה פיזית, שהתנהגות fTPM תלויה בעדכוני firmware של ה-CPU, ושניתן לעדכן את ה-firmware של Pluton דרך Windows Update. אם אפשר לבחור בזמן הרכש, הקריטריונים המעשיים למחשבים ארגוניים הם מדיניות התמיכה של היצרן והאמינות שבה הוא מספק עדכוני firmware.
עדכנתי את ה-BIOS והתבקשתי למפתח השחזור של BitLocker. למה?
מפתח BitLocker אטום (sealed) למדידות האתחול (PCR), ולכן כשמה שנמדד משתנה, המפתח לא משוחרר והמחשב נכנס למצב שחזור. עדכון firmware הוא בדיוק פעולה שמשנה מדידות כמו PCR 0. גם Microsoft עצמה ממליצה להשהות את BitLocker לפני עדכון firmware כשהפרופיל כולל את PCR 0. אחרי שפותחים עם מפתח השחזור, המפתח נאטם מחדש מול המדידות החדשות, ולכן אותו דבר לא יקרה שוב. מבחינה תפעולית, יש להשהות את BitLocker תמיד לפני עדכון UEFI, שינוי בהגדרות Secure Boot, ניקוי ה-TPM או החלפת לוח אם, ולבדוק מראש היכן מפתח השחזור נשמר (Active Directory, Microsoft Entra ID או חשבון Microsoft).
איך אני מגן על מפתחות ב-TPM מהאפליקציה שלי?
במקום לשלוח פקודות TPM ישירות, משתמשים ב-key storage provider של CNG (Cryptography API: Next Generation) בשם "Microsoft Platform Crypto Provider". ב-.NET מספיק להעביר ל-CngKey.Create את ה-provider הזה ואת ExportPolicies.None כדי ליצור את המפתח הפרטי בתוך ה-TPM במצב שאי אפשר להוציא אותו. גם TPM Base Services (TBS) ברמה הנמוכה חשופים לשימוש, אבל Microsoft עצמה ממליצה להשתמש ב-API-ים גבוהים יותר של key storage לשמירת מפתחות, לחתימה ולפענוח. מבחינת המימוש, כדאי לשלב בתכנון את העובדות האלה: פעולות TPM איטיות, ניקוי ה-TPM משמיד את המפתחות, ונדרשת החלטה כיצד לנהוג במחשב בלי TPM.

פרופיל הכותב

עמוד היכרות עם כותב המאמר.

Go Komura

מנהל KomuraSoft LLC

מתמחה בפיתוח תוכנה עבור Windows, ייעוץ טכני וחקירת תקלות, בעיקר בפרויקטים עם מערכות קיימות ובאגים שקשה לשחזר.

קישורים ציבוריים

חזרה לבלוג