תוכן עניינים:

שימוש ב- Mifare Ultralight C עם RC522 ב- Arduino: 3 שלבים
שימוש ב- Mifare Ultralight C עם RC522 ב- Arduino: 3 שלבים

וִידֵאוֹ: שימוש ב- Mifare Ultralight C עם RC522 ב- Arduino: 3 שלבים

וִידֵאוֹ: שימוש ב- Mifare Ultralight C עם RC522 ב- Arduino: 3 שלבים
וִידֵאוֹ: תיקון NFC ב - 2 דקות! ללא ROOT!!! 2024, נוֹבֶמבֶּר
Anonim
שימוש ב- Mifare Ultralight C עם RC522 ב- Arduino
שימוש ב- Mifare Ultralight C עם RC522 ב- Arduino

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

ברוב המקרים, ה- UID של הכרטיס משמש ל"זיהוי "מחזיק הכרטיס, וכרטיסי Mifare Classic משמשים כיוון שהם זולים ולרוב נכללים ברכישת מודול RC522.

אבל כפי שאתה אולי יודע, מערכת Mifare Classic נפרצה כבר כמה שנים והיא כבר לא נחשבת לבטוחה יותר. ניתן להתגבר על מערכת ההצפנה Crypto1 בה משתמשים בכרטיסי קלאסיק והם כרטיסי כתיבה מחדש בהם ניתן לתכנת מחדש נתוני UID (כרטיסי קסם).

כך שבכל יישום רלוונטי לאבטחה השימוש בכרטיסי Mifare Classic אינו מומלץ! אותו דבר לגבי (רוב) מערכות NTAG ו- Mifare Ultralight

אז הבחירה היא להשתמש במערכת מקצועית או לנסות להשתמש במערכת RFID מאובטחת יותר. המערכות הקיימות הן Mifare Ultralight C, Mifare DESFire ו- Mifare Plus. מכיוון שישנן מערכות מקצועיות רבות המשתמשות במערכות מאובטחות יותר אלה, עבור קהילת ה- DIY אין כמעט פתרונות (יש פתרון DESFire אחד מבוסס Teensy, המבוסס בלוח הפריצה היקר יותר PN523). בנוסף כרטיסי DESFire די יקרים. אז האתגר היה למצוא פתרון טוב יותר וזול יותר.

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

שלב 1: תנאים מוקדמים

תנאים מוקדמים
תנאים מוקדמים

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

הבעיה העיקרית היא המפרט של המשרנים L1 ו- L2. כפי שמתואר ב https://ham.marsik.org/2017/04/using-cheap-rc522-nfc-reader-to-read.html. רק על ידי החלפת משרנים אלה למתאימים למשל. FERROCORE CW1008-2200 לפתע RC522 מראה מה הפוטנציאל האמיתי שלו.

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

הרקע לכל זה הוא שכרטיסי Ultralight C הם רעבים למדי לאנרגיה. אנרגיה זו מסופקת על ידי שדה ה- RC522 RF. בשל הספק נמוך של המשרנים, שדה האנרגיה פשוט לא מספיק חזק כדי להניע את ה- Ultralight C. כרטיסים אחרים כמו Mifare Classic פשוט צריכים פחות כוח ולכן עובדים די יציבים.

שלב 2: איך זה עובד?

איך זה עובד?
איך זה עובד?
איך זה עובד?
איך זה עובד?
איך זה עובד?
איך זה עובד?
איך זה עובד?
איך זה עובד?

אז לאחר שינוי מודול RC522, כיצד תוכל להשתמש ב- Mifare Ulralight C ליישום שלך?

הטריק הוא ש- Mifare Ultralight C תומך באימות סיסמה המבוסס על צופן 3DES. באמצעות סיסמה זו, ניתן להפוך את תוכן הכרטיס לקריאה בלבד או בלתי נראה לחלוטין למשתמש בלתי מורשה.

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

היזהר: ללא אימות המבוסס על סיסמה עדיין אינך יכול לסמוך על כרטיס Mifare Ultralight C, שכן ישנם גם "כרטיסי קסם" המדמים את Ultralight C.

כל כרטיס שאינו תלוי בטכנולוגיה (אם בתדר הנכון) יגיב עם ה- UID שלו כשהוא מופעל על ידי שדה ה- RF ויבקש לזהות את עצמו. בנוסף הם מספקים ערך SAK המספק מידע מינימלי על סוג הכרטיס הקיים. למרבה הצער, כל Mifare Ultralight ו- NTAG מזוהים כסוג הסים (SAK = 0x00), כולל ה- Mifare Ultralight C. כך שבסקירת כרטיסים, לפחות ערך SAK של 0x00 ייתן רמז לכך שעלול להיות קורא Ultralight C על הקורא.

כדי לוודא שמדובר ב- Ultralight C ניתן לשלוח אל הכרטיס בקשה לאימות מוצפן. אם זהו אינו כרטיס Ultralight C, בקשה זו לא תובן והתגובה תהיה NAK (not-acknolege).

אם זהו כרטיס Ulralight C, תקבל תשובה של 8 בתים. 8 בתים אלה הם מספר אקראי "B" (RndB) המוצפן על ידי המפתח המאוחסן בכרטיס באמצעות צופן 3DES.

יש לפענח את ה- RndB המוצפן באמצעות אותו מפתח בתוכנית. מספר אקראי זה משתנה מעט (מסתובב בבת אחת → בית 1 יועבר לבייט 8 וכל שאר הבייטים נדחקים בתים אחד נמוך יותר, ואז נקרא RndB '). התוכנית מייצרת אז מספר אקראי של 8 בתים "A" עצמו (RndA) ומצמידה RndA זה ל- RndB 'שהשתנה. זה מוצפן שוב באמצעות המפתח ונשלח לכרטיס.

הכרטיס מפענח את ההודעה ובודק אם RndB 'מתאים ל- RndB שנוצר בעבר בכרטיס. אם הם תואמים, הכרטיס יודע כעת שהתוכנית יודעת את המפתח.

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

לאחר מכן התוכנית תפענח את התשובה של הכרטיס ותבדוק אם ה- RndA המקורי ו- RndA שהשיבו תואמים. רק אז שתי הגופים (תוכנית וכרטיס) יודעים שהם חולקים את הידע של אותו מפתח.

תהליך זה משמש רק לאימות. כל תקשורת נוספת היא תמיד ב"טקסט ברור ".

למרות שיש כרטיסי "קסם Ultralight C" בהם ניתן לשנות את ה- UID, לא ניתן להשיג את המפתח עצמו מהכרטיס ואת צופן 3DES מאובטח למדי. המפתח הוא מפתח של 16 בתים, ולכן גישת כוח אכזרי להשגת המפתח תיקח זמן מה.

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

בעת שימוש בכרטיס Ultralight C

לכרטיס Ultralight C מספר תכונות אבטחה מובנות:

  1. זיכרון תכנות חד פעמי (OTP). באזור זה ניתן לכתוב סיביות, לא למחוק אוטובוס.
  2. מונה 16 ביט חד כיווני. מונה זה יכול רק להגדיל, כאשר הגישה.
  3. הגנת "כתיבה" או "קריאה/כתיבה" של דפים בזיכרון. רק אם הם מאומתים עם המפתח, ניתן לקרוא או לשנות דפים אלה.
  4. הקפאה / חסימה של דפים בודדים להגנה מפני כל שינוי.

לא השימוש ב- OTP, מונה 16 הסיביות או השימוש בביט החוסם מיושם בקוד הנתון, אך ניתן ליישם אותו בקלות על סמך המידע שניתן ב- https://www.nxp.com/docs/en/data- גיליון/MF0ICU2.pd…

מכיוון שההגנה באמצעות מפתח חיונית לשימוש ב- Mifare Ultralight C, כל הפונקציות הרלוונטיות קיימות.

כל הפקודות משמשות במסך הסידורי עם "קו חדש בלבד" ועם 115200 באוד

  • "Auth 49454D4B41455242214E4143554F5946" יבקש אימות עם המפתח הנתון (במקרה זה המפתח הסטנדרטי של Mifare Ultralight C)
  • "Dump" יזרק את תוכן הכרטיס ככל שהם נראים לעין. במקרה שדפים מוגנים על ידי המפתח, ייתכן שדפים אלה לא יהיו גלויים עד לאימות קודם עם מפתח. בשתי העמודות הראשונות מצוין אם הדפים נעולים או שהגישה מוגבלת.
  • "NewKey 49454D4B41455242214E4143554F5946" יכתוב מפתח חדש לכרטיס. המפתח נכתב לדפים 44 עד 47. זה יעבוד רק אם דפים אלה אינם נעולים או מוגנים ללא אימות קודם.
  • "wchar 10 hello world" יכתוב "hello world" החל מעמוד 10. שוב, רק עבודות אלה של הדפים אינן נעולות ואינן מוגנות ללא אימות קודם. כאשר מנסים לכתוב מעל עמוד 39 או מתחת לדף 4 זה יבקש שגיאה או נתונים מתעלמים מכיוון שדפים אלה אינם זיכרון משתמש.
  • "Whex 045ACBF44688" יכתוב ערכי Hex ישירות לזיכרון, חלים תנאים קודמים.
  • "הגנה 30" מגן על כל הדפים מדף 30 ומעלה. בהתאם לאישור, ניתן לשנות או לקרוא דפים אלה רק לאחר אימות קודם עם מפתח. שימוש ב"הגנה "עם ערכים גבוהים מ- 47 יגדיר את כל הדפים ל"בלתי מוגנים" כולל המפתח בעמודים 44-47 (שניתן לשנותם אך לא לקרוא). על מנת למנוע שינוי המפתח, ההגנה צריכה להתחיל לפחות בעמוד 44.
  • "Setpbit 0" קובע את ביט ההגנה ומחליט אם הדפים המוגנים הם לקריאה בלבד ("setpbit 1") או שאי אפשר לקרוא אותם לא לכתוב ("setpbit 0") ללא אימות קודם עם מפתח.

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

שלב 3: חשוב

  1. התוכנית מבדילה בין סוגי האולטראלייט על ידי קריאת עמודים 43 ו -44. אם דף 43 ניתן לקריאה ודף 44 לא, סביר להניח שמדובר באולטרה -לייט. אבל אם אתה קורא/כותב הגן על עמוד 43 הכרטיס כבר לא מזוהה כ- Ultralight C (אין לו השפעה על כלום) הזיהוי הנכון של ה- Ultralight צריך להיעשות באמצעות האימות עם מפתח (לא יישמתי זאת מסיבות יציבות).
  2. לפני השימוש בפקודות "setpbit" ו"הגנה "יש להשתמש בפקודה" dump ", אחרת לא יוודע מצב ההגנה של הדפים.
  3. אם אתה "קורא/כותב" מגן על העמודים הראשונים של הכרטיס שלך, הוא לא יעבוד יותר עם תוכנית זו מכיוון שהעמוד הראשון נקרא כל הזמן כדי לראות אם עדיין קיים כרטיס. מכיוון שבכל מקרה שני הדפים הראשונים נקראים בלבד (ה- UID מאוחסן שם), אין טעם להגן עליהם.

בעיות יציבות

קוד זה משתמש בספריית RC522 ה"סטנדרטית "עבור Arduino ובספריית 3DES מאת https://github.com/Octoate/ArduinoDES. בעוד שספריית RC522 נפוצה למדי, נראה שספריית 3DES אינה כה נפוצה ויש להתקין אותה באופן ידני.

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

אנא זכור זאת בעת השימוש בקוד !!!

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

מוּמלָץ: