فهرست مطالب:

استفاده از Mifare Ultralight C با RC522 در آردوینو: 3 مرحله
استفاده از Mifare Ultralight C با RC522 در آردوینو: 3 مرحله

تصویری: استفاده از Mifare Ultralight C با RC522 در آردوینو: 3 مرحله

تصویری: استفاده از Mifare Ultralight C با RC522 در آردوینو: 3 مرحله
تصویری: Santa's Guide to Breaking into Buildings 2024, نوامبر
Anonim
استفاده از Mifare Ultralight C با RC522 در آردوینو
استفاده از Mifare Ultralight C با RC522 در آردوینو

استفاده از فناوری 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 بسیار گران هستند. بنابراین چالش یافتن راه حلی بهتر و ارزان تر بود.

راه حل ارائه شده دسترسی کامل به کارت های ارزان قیمت Mifare Ultralight "C" را با استفاده از ماژول ارزان قیمت چینی 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 کاملاً تشنه انرژی هستند. این انرژی توسط میدان RF522 RC522 تأمین می شود. به دلیل آمپراژ پایین سلف ها ، میدان انرژی آنقدر قوی نیست که بتواند 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 به عنوان نوع syme (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/fa/data- به راحتی پیاده سازی کرد. ورق/MF0ICU2.pd…

از آنجا که حفاظت از کلید برای استفاده از Mifare Ultralight C ضروری است ، همه عملکردهای مربوطه وجود دارد.

همه دستورات در مانیتور سریال با "فقط خط جدید" و با 115200 Baud استفاده می شود

  • "author 49454D4B41455242214E4143554F5946" احراز هویت را با کلید داده شده درخواست می کند (در این مورد استاندارد کلید Mifare Ultralight C)
  • "dump" محتوای کارت را تا آنجا که قابل مشاهده است تخلیه می کند. در صورتی که صفحات توسط کلید محافظت شوند ، ممکن است این صفحات تا قبل از احراز هویت قبلی با کلید قابل مشاهده نباشند. در دو ستون اول نشان داده می شود که صفحات قفل شده اند یا دسترسی محدود شده است.
  • "newKey 49454D4B41455242214E4143554F5946" یک کلید جدید روی کارت می نویسد. کلید در صفحات 44 تا 47 نوشته شده است. این فقط در صورتی کار می کند که این صفحات بدون احراز هویت قبلی نه قفل شده و نه محافظت شوند.
  • "wchar 10 hello world" با نوشتن "سلام جهان" از صفحه 10 شروع می کند. باز هم ، این فقط آثار صفحات بدون احراز هویت قبلی نه قفل شده و نه محافظت می شود. هنگام تلاش برای نوشتن بالای صفحه 39 یا زیر صفحه 4 ، این امر به شما نشان می دهد خطا یا داده ها نادیده گرفته می شوند زیرا این صفحات حافظه کاربر نیستند.
  • "whex 045ACBF44688" مقدارهای Hex را مستقیماً به حافظه می نویسد ، شرایط قبلی اعمال می شود.
  • "protect 30" از همه صفحات از صفحه 30 به بالا محافظت می کند. بسته به مجوز ، این صفحات تنها پس از احراز هویت قبلی با کلید قابل تغییر یا خواندن هستند. استفاده از "protect" با مقادیر بالاتر از 47 همه صفحات را "محافظت نشده" شامل کلید در صفحات 44-47 (که فقط می توان آنها را تغییر داد اما خوانده نمی شود) قرار می دهد. برای جلوگیری از تغییر کلید ، حفاظت باید حداقل از صفحه 44 شروع شود.
  • "setpbit 0" بیت حفاظتی را تنظیم می کند و تصمیم می گیرد که آیا صفحات محافظت شده فقط خوانده می شوند ("setpbit 1") یا نمی توانند خوانده نشوند ("setpbit 0") بدون احراز هویت قبلی با کلید.

همه دستورات را نمی توان بلافاصله پس از شناسایی کارت استفاده کرد. "تخلیه" قبلاً به دستور دیگر همیشه کمک می کند.

مرحله 3: مهم است

  1. این برنامه با خواندن صفحات 43 و 44 بین انواع Ultralight تفاوت قائل می شود. اگر صفحه 43 قابل خواندن باشد و صفحه 44 نه ، به احتمال زیاد Ultralight C. Ultralight C (هیچ تاثیری روی هیچ چیزی ندارد) شناسایی مناسب Ultralight باید از طریق احراز هویت با کلید انجام شود (من به دلایل ثبات آن را اجرا نکردم).
  2. قبل از استفاده از دستورات "setpbit" و "protection" باید از دستور "dump" استفاده کرد ، در غیر این صورت وضعیت محافظت از صفحات مشخص نخواهد شد.
  3. اگر از صفحات اول کارت خود "خواندن/نوشتن" محافظت می کنید ، دیگر با این برنامه کار نمی کند زیرا صفحه اول به طور مداوم خوانده می شود تا ببینید آیا هنوز کارت وجود دارد. از آنجا که دو صفحه اول فقط خوانده می شوند (UID در آنجا ذخیره می شود) ، حفاظت از آنها منطقی نیست.

مسائل ثبات

این کد از کتابخانه "استاندارد" RC522 برای آردوینو و کتابخانه 3DES از https://github.com/Octoate/ArduinoDES استفاده می کند. در حالی که کتابخانه RC522 کاملاً مورد استفاده قرار می گیرد ، کتابخانه 3DES چندان گسترده نیست و باید به صورت دستی نصب شود.

کد روی Arduino Uno آزمایش شده است. اما هنگام نوشتن آن ، با مشکلات عجیبی در رابطه با ثبات روبرو شدم. به نوعی یا مهارتهای برنامه نویسی من خوب نیست ، یکی از کتابخانه های مورد استفاده ناپایدار است یا ترکیب کتابخانه ها ایده خوبی نیست.

لطفاً هنگام استفاده از کد به این نکته توجه کنید !!!

تغییر آن یا استفاده فقط از بخشهایی از آن می تواند منجر به رفتارهای عجیبی مانند خراب شدن ، چاپ چیزهای عجیب و غریب یا دریافت زمان وقفه یا NAK هنگام خواندن از روی کارت شود. این می تواند در هر نقطه ای از کد اتفاق بیفتد (اشکال زدایی ساعت های زیادی برای من هزینه داشت). اگر دلیل (های) این کار را پیدا کردید ، لطفاً راهنمایی بفرمایید.

توصیه شده: