אבטחה של פעם: ממשק Wiegand

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

קורא תגי RFID קטן ולידו מטבע לקנה מידה
קורא תגי RFID קטן, מעביר מידע בפרוטוקול בן 40

הרקע

ג'ון ר' ויגנד נולד ב-1912 בגרמניה (מה שאומר שנכון לבטא את שמו ב-V ולא ב-W כפי שהאמריקנים אומרים), ועבר לארצות הברית בשנות השלושים כדי ללמוד מוזיקה בג'וליארד. מפה לשם הוא התחיל לעסוק ברצינות בהנדסה ואלקטרוניקה, ובשנת 1974 רשם פטנט על המצאה בשם Bistable ferromagnetic wire. יש לזה כל מיני שימושים ולא ניכנס לפרטים, תקראו בוויקיפדיה. לצורך הפוסט הזה מספיק לדעת שאם מטמיעים לרוחב כרטיס פלסטיק קטעים קצרים של החוט הזה, אפשר לזהות באמצעות ראש מגנטי מתאים את נוכחותו (או היעדרו) של כל חוט, וכך בעצם לקודד ולפענח רצף קצר של ביטים.

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

הפרוטוקול

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

מבחינת חומרה, הפרוטוקול משתמש בשלושה חוטים: אדמה, DATA0 (שמעביר ביטים שהם "0") ו-DATA1 (לביטים שהם "1"). הנה שידור Wiegand כפי שנקלט בלוג'יק אנלייזר:

שידור לדוגמה בפורמט Wiegand
שידור לדוגמה בפורמט Wiegand (לחצו להגדלה)

הערוץ העליון (Channel 0 בתמונה) הוא DATA0, וקל לראות שמצב ברירת המחדל (ה"מנוחה") של שני הערוצים הוא HIGH. כדי לשדר ביט יחיד, הקו הרלוונטי יורד ל-LOW לפרק זמן קצר וחוזר בחזרה. לפי המפרטים שמצאתי, משך כל ביט הוא 50 מיקרו-שניות והרווח בין ביטים הוא 2 אלפיות השנייה, אבל בפועל נדמה שלא כל המערכות מקפידות על כך.

בגרסה ה"קלאסית", כל שידור כולל 26 ביטים בסך הכול (יש גרסאות אחרות עם עד 37 ביטים). הביט הראשון, משמאל, הוא Even Parity לחצי הראשון של השידור: מספר הביטים שהם "1" בו ובתריסר הביטים שאחריו גם יחד אמור להיות זוגי. הביט האחרון, מימין, הוא Odd Parity – בו ובתריסר הביטים שלפניו גם יחד אמור להיות מספר אי-זוגי של "1". בין שני הביטים האלה, שמטרתם לעזור לנו לזהות שיבושים בנתונים, יש 24 ביטים של מידע נטו בייצוג MSB-First. מתוך אלה, השמונה הראשונים נקראים "Facility" (בתמונה למעלה, 10101101) ושישה-עשר האחרים "ID", אם כי החלוקה הזו אינה מחייבת מבחינת החומרה.

איפה הוא עכשיו

כאמור, אם תקנו קורא תגי RFID מודרני (מסחרי, לא מודול לארדואינו), יש סיכוי טוב שהוא יהיה מסוגל לשדר את הנתונים במבחר פורמטים לבחירתכם, ואחד מהפורמטים האלה יהיה Wiegand. אבל יש בעיה: מספר הזיהוי של תג RFID הוא ארוך (5 בייטים אפילו לתג 125KHz פשוט), וב-Wiegand נשלחים רק 3 בייטים של מידע. אז לאן הולכים שני הבייטים – או יותר – הנוספים? והתשובה הבוטה היא "לעזאזל". לפחות בקוראים שאני בדקתי עד כה, אם הקוד של התג בייצוג הקסדצימלי הוא 0xAABBCCDDEE, בשידור הוויגנד תראו רק 0xCCDDEE.

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

להרשמה
הודע לי על
2 תגובות
מהכי חדשה
מהכי ישנה לפי הצבעות
Inline Feedbacks
הראה את כל התגובות

אוףףף זה היה לא ברור – איך "ב-Wiegand נשלחים רק 3 בייטים של מידע" כשפסקה לפני כן אתה אומר שיש 24 ביטים של מידע.
עד שהבנתי שאתה משתמש ב "ביט" עבור bit
ו"בייט" עבור byte – עד כמה שאני יודע אתה היחיד שעושה זאת.
מקובל לכתוב "בית" כדי להבדיל מ"ביט" והמהדרים משתמשים ב"סיבית".