X.509

באבטחת מידע וקריפטוגרפיה, תעודת X.509 (באנגלית: X.509 Certificate), היא תעודה דיגיטלית נפוצה בשימוש תשתיות מפתח ציבורי ותשתיות (Privilege Management Infrastructure (PMI, כדי לוודא שייכות מפתח ציבורי לישות מסוימת; מחשב, שירות או משתמש המוצהרים בה. X.509 נמצא בשימוש נרחב באבטחת רשת האינטרנט כמו בפרוטוקול TLS, IPSec, SSH ועוד. תעודת X.509 מכילה פרטים אודות זהות נושא התעודה המחזיק במפתח הציבורי שהוא מצהיר כבעליו, זהות הרשות המאשרת שהנפיקה את התעודה וחתימתה. את תעודת המפתח הציבורי המשתמש שולח באופן גלוי לצד השני כחלק מפרוטוקול התקשורת. X.509 מפרט בין היתר שיטות לתיעוד, שיוך, אישור, פסילה ואימות מפתחות הצפנה אסימטריים. בכללות המידע המופיע בתעודה כולל: דוגמה לתעודת X.509 בפורמט XML: <Certificate> <tbsCertificate> <serialNumber>3581</serialNumber> <signature> <algorithm>1.2.840.113549.1.1.5</algorithm> <parameters>0500</parameters> </signature> <issuer> <rdnSequence> . . . <RelativeDistinguishedName> <AttributeTypeAndValue> <type>2.5.4.3</type> <value>130F4672616E6B34444420576562204341</value> </AttributeTypeAndValue> </RelativeDistinguishedName> </rdnSequence> </issuer> <validity> <notBefore> <utcTime>120822052800Z</utcTime> </notBefore> <notAfter> <utcTime>170821052800Z</utcTime> </notAfter> </validity> <subject> <rdnSequence> . . . <RelativeDistinguishedName> <AttributeTypeAndValue> <type>2.5.4.3</type> <value>0C0F7777772E6578616D706C652E636F6D</value> </AttributeTypeAndValue> </RelativeDistinguishedName> </rdnSequence> </subject> <subjectPublicKeyInfo> <algorithm> <algorithm>1.2.840.113549.1.1.1</algorithm> <parameters>0500</parameters> </algorithm> <subjectPublicKey> 3082020A0282020100B0BD621338B7B24DB4B543F51A72A7882C82B5E941CBBD<!--...--> </subjectPublicKey> </subjectPublicKeyInfo> </tbsCertificate> <signatureAlgorithm> <algorithm>1.2.840.113549.1.1.5</algorithm> <parameters>0500</parameters> </signatureAlgorithm> <signature> 8022814DCCCBC918627883B8A11748999B541F8AD6EA47C560C0F11E8A319197<!--...--> </signature> </Certificate> המערכת אמורה לדחות כל תעודה אשר מסיבה כלשהי שדה קריטי או שדה הרחבה קריטי בה לוקה בחסר, אינו בפורמט הנכון או שאינו מוכר על ידי המקבל. שני המזהים הייחודיים האופציונליים נוספו לתמיכה בהחלפת מנפיקה במקרה שהמנפיקה נסגרת ואחרת נכנסת במקומה. דפדפני האינטרנט כמו כרום, אינטרנט אקספלורר, פיירפוקס, ספארי, אופרה ועוד מגיעים עם תעודות שורש מובנות, כך שתעודת TLS תתקבל ללא שיהוי. למעשה, מפתחי הדפדפנים קובעים מראש אילו רשויות מאשרות יוכרו. מספר דפדפנים תומכים גם ב-Online Certificate Status Protocol, שירות המאפשר לבדוק און-ליין אם תעודה מסוימת נכללת ברשימת התעודות הפסולות (Certificate Revocation List). תעודת X.509 הועלתה לראשונה ביולי 1988 כחלק מתקן תקשורת בינלאומי שפותח על ידי ITU-T של איגוד הטלקומוניקציה הבינלאומי לשעבר CCITT בשיתוף עם ISO הנקרא תקן X.500 שנועד במקור ליישומי גישה למסדי נתונים. בניגוד ל"רשת אמון", כמו ב-PGP, שבה כל אחד יכול לחתום על תעודה, הרעיון של התקן היה לבנות היררכיה ברורה של רשויות מאשרות שרק הן מוסמכות לאשר תעודה כך שכל אחד יכול לאמתה על ידי בדיקת הרשות המאשרת או המנפיקה מול "תעודת השורש" (root certificate) שבידו. במידה שהבודק אינו מכיר את הרשות הרשומה בתעודה הוא בודק את רשימת הרשויות המאשרות האחרות עד שמגיע לרשות מוכרת. התעודה מקודדת לפי תחביר ASN.1 עם אוסף רשומות, חלקן מנדטוריות ואחרות אופציונליות. ב-1993 וב-1996 נעשו עדכונים, שינויים והרחבות בגרסאות 2 ו-3 בהתאמה. בין היתר נוספה תמיכה בגשרים, אריגים ועמית לעמית. ההצעה העדכנית נכון למאי 2008 היא הצעה מס' RFC 5280 שמסומנת גם בקיצור PKIX. Let's Encrypt מספקת את התעודות ללא עלות. מפתח פרטי מקודד לפי תחביר ASN.1 קיצור של Abstract Syntax Notation One. תקן נפוץ לפירמוט מידע, המפרט כללים ומבנים לייצוג, קידוד, העברה ופענוח דטה בתקשורת נתונים. מטרתו ליצור שפה פורמלית משותפת שבה ניתן יהיה לייצג אובייקטים באופן בלתי תלוי מכונה או מימוש. התקן כולל מגוון רחב של שיטות קידוד כמו Basic Encoding Rules או XML Encoding Rules. קידוד ASN.1 בדרך כלל מסובך ומומלץ להשתמש במהדר ייעודי כדי לבנות תעודה תיקנית. בתרשים משמאל מופיע קטע מתעודת X.509 המתאר את מפתחות ההצפנה של RSA בתחביר ASN.1 לפי קידוד DER. כותר ASN.1 (המזהה 0x3082025E) מפריד. הבית הבא 0x02 מסמל מספר שלם, והבית שאחריו 0x01 מייצג את אורכו של המספר בבתים. גרסת אלגוריתם (0x00) מפריד. 0x02 = מספר שלם, 0x81 = 129 בתים (1024 סיביות) מודולוס. מתחיל בבית 0x00 בסך הכול 129 בתים כולל בית NULL שצריך להסיר. מפריד. 0x02 = מספר שלם באורך 0x03 בתים. מפתח ציבורי (0x010001 = 65,537) מפריד. 0x02 = מספר שלם, 0x81 = 129 בתים (1024 סיביות). מפתח פרטי מפריד. 0x02 = מספר שלם, 0x41 = 65 בתים (520 סיביות) מספר ראשוני ראשון מפריד. 0x02 = מספר שלם, 0x41 = 65 בתים (520 סיביות) מספר ראשוני שני מפריד. 0x02 = מספר שלם, 0x40 = 64 בתים (512 סיביות) מעריך ראשון (e) מפריד. 0x02 = מספר שלם, 0x41 = 65 בתים (520 סיביות) מעריך שני (d) מפריד. 0x02 = מספר שלם, 0x41 = 65 בתים (520 סיביות) מקדם CRT "רשת תעודות" (certificate chain) או היררכיית תעודות (certification path), היא רשימה של תעודות המתחילה בתעודת היעד המכילה את פרטי נושא התעודה ועד לתעודת שורש כלשהי. עם המאפיינים הבאים: שם המנפיקה של כל תעודה למעט האחרונה תואם את שם הנושא בתעודה הקודמת (כל תעודה מאמתת את בעלי התעודה הקודמת בשרשרת). כל תעודה (למעט האחרונה) חתומה עם המפתח הסודי של הישות ששמה מופיע בתעודה הבאה אחריה בשרשרת. כלומר את החתימה המופיעה על תעודה אחת אפשר לאמת על ידי המפתח הציבורי שמופיע בתעודה הבאה אחריה. התעודה האחרונה נקראת "עוגן" או "תעודת שורש", כלומר התעודה אינה חתומה אלא המקבל סומך על אמינותה משום שהיא הגיעה אליו בפרוצדורה אחרת. רשת התעודות נועדה לוודא את נכונות ואמינות "תעודת היעד" (הראשונה בשרשרת). כלומר התעודה מאומתת על ידי בדיקת החתימה באמצעות המפתח הציבורי של הרשות המאשרת המופיעה בה. החתימה מבטיחה כי הפרטים המופיעים בתעודה נכונים ותואמים את הפרטים כפי שהופקו במקור עבור נושא התעודה. אם הבודק לא מכיר את המפתח הציבורי של הרשות המאשרת המופיעה בתעודה עליו לבדוק את התעודה המאשרת אותה, כלומר מאמת את התעודה הבאה אחריה וכן הלאה עד שמגיע לתעודת השורש. נקודת התורפה בתהליך זה היא העובדה שהמקבל לא יכול לדעת בזמן אמת אם תעודה שקיבל שניראית על פניה כתעודה תקפה, נכנסה לאחר שקיבל אותה לרשימת התעודות הפסולות. כגון אם בעלי המפתח הציבורי פסל אותו בשל חשש לחשיפה. למרות שתעודת X.509 מכילה מנפיקה אחת בלבד (כלומר מכילה רק חתימה אחת של רשות מאשרת - CA), ייתכן מצב שבו יש שתי רשתות של תעודות. היות שיכול להיות מצב שאותם בעלים מחזיקים בשתי תעודות. לדוגמה אם התעודה של המשתמש "User 1" נקראת "CA 1" אך קיימות שתי תעודות שנקראות כך, שכל אחת מהן נחתמה באופן אחר. למרות שהמשתמש "User 1" אינו מכיל את המספר הייחודי המופיע באחת התעודות, עדיין התעודה תתקבל כל עוד המפתח הציבורי זהה. מניעת הכחשה (non repudiation) היא מאפיין של חתימה דיגיטלית שמאפשר ליצור חיבור מחייב בין החתימה לחותם באופן כזה שהחותם לא יוכל להתכחש לה (בטענה שחתימתו נגנבה). מאפיין מניעת הכחשה אינו נתמך ב-X.509 בגלל שלא נוסף חותם זמן שהוא קריטי למניעת הכחשה. אם הארכיטקטורה של X.509 תכלול גם חותם זמן, זה יהיה אפשרי. המנגנון פועל באופן בסיסי כך, צד שלישי המשמש כעד, מוסיף תאריך וחותם על תמצית (Hash) של התעודה יחד עם תאריך ההנפקה. במקרה שהמפתח הציבורי נפסל על ידי בעליו לאחר החתימה, המוודא יכול להוכיח על ידי הצד-השלישי כי נכון לתאריך החתימה המפתח הציבורי היה בתוקף ולכן החותם לא יכול להתכחש למה שהתחייב. בהרחבה KeyUsage מופיע דגל שבעבר נקרא non-repudiation ושונה בגרסאות החדשות ל-contentCommitment. משמעות הדגל אינה אומרת שהופעלה אופציית אי-הכחשה אלא רק שהרשות המאשרת שהנפיקה את התעודה איפשרה שירות זה לבקשת הלקוח ובמקרה של בוררות יהיה אפשר לפנות לצד שלישי כלשהו כדי לשלול את הכחשת הלקוח. TLS/SSL S/MIME IPSec SSH כרטיס חכם HTTPS EAP LDAP WS-Security של SOAP XMPP