تفاوت شناسایی برچسب با احراز هویت
برد PN532 آدافروت با شناسه محصول ۳۶۴ برای آزمایش ارتباط نزدیک در باند ۱۳٫۵۶ مگاهرتز ساخته شده است. آنتن تنظیمشده روی خود برد قرار دارد و تراشه میتواند با برچسبهای سازگار ارتباط برقرار کند. برای یک تیم امنیت محصول، ارزش این برد فقط نمایش یک عدد روی ترمینال نیست. میتوان مسیر واقعی یک تصمیم را بررسی کرد: دستگاه برچسب را میبیند، برنامه اطلاعاتی میخواند و سپس درباره پذیرش یا رد آن تصمیم میگیرد. خطا در هر کدام از این مراحل نتیجه ظاهری یکسانی مثل باز نشدن در یا شناسایی نشدن کارت دارد.
فرض کنید در آزمایشگاه چند کارت آموزشی برای ورود به یک اتاق نمونه ساختهاید. اگر برنامه با دیدن شناسه عمومی کارت اجازه ورود میدهد، در واقع بر اساس شناسهای قابل مشاهده تصمیم میگیرد. طولانی یا ظاهراً تصادفی بودن این عدد، آن را به اثبات داشتن یک راز تبدیل نمیکند. برای سناریوی نیازمند احراز هویت باید قابلیتهای کارت، پروتکل مناسب و روش نگهداری کلیدها جدا بررسی شوند. PN532 دسترسی به لایه ارتباط را فراهم میکند، اما انتخاب سیاست اعتماد و شیوه تأیید دارنده بر عهده طراحی سامانه است.
انتخاب رابط میزبان
این برد از رابط سریال منطقی سهولت، I2C و SPI برای ارتباط با میزبان پشتیبانی میکند. آنها سه راه متفاوت برای صحبت با کنترلر هستند؛ انتخاب یکی، نوع اطلاعات ذخیرهشده در کارت را تغییر نمیدهد. هنگام راهاندازی روی میز، ابتدا یک رابط را بر اساس امکانات میزبان و پشتیبانی کتابخانه انتخاب کنید. وضعیت جامپرها باید با انتخاب نرمافزار منطبق باشد. اگر کتابخانه منتظر SPI است ولی برد برای رابط دیگری تنظیم شده، تعویض کارت یا نزدیکتر گرفتن آن هیچ کمکی به حل مسئله نخواهد کرد.
برای ارتباط با رایانه، راهنمای محصول به استفاده از مبدل سریال مناسب و کتابخانه libnfc اشاره دارد. در اتصال سریال، سطح منطقی را با پورت قدیمی RS-232 اشتباه نگیرید. اگر از یک برد میکروکنترلر استفاده میکنید، تحمل ولتاژ پایهها و نیاز به تبدیل سطح را از نقشه همان نسخه بخوانید. وجود رگولاتور روی برد تمام ورودیهای داده را خودکار نسبت به هر ولتاژی مقاوم نمیکند. زمین مشترک، مسیر تغذیه مشخص و سیمهای کوتاه نقطه شروع بهتری از تغییر پیاپی تنظیمات رادیویی هستند.
آزمایش سلامت پیش از نزدیک کردن کارت
نخست بدون هیچ برچسبی تلاش کنید پاسخ خود کنترلر را از رابط میزبان بگیرید. بسیاری از کتابخانهها نمونهای برای خواندن اطلاعات نسخه یا تشخیص تراشه دارند. موفقیت این کار نشان میدهد بخش مهمی از تغذیه، سیمکشی و ارتباط نرمافزاری درست است. این نتیجه هنوز چیزی درباره کیفیت آنتن یا سازگاری کارت نمیگوید. اگر این مرحله شکست خورد، مسئله را همانجا نگه دارید و اتصال، انتخاب رابط، مجوز درگاه در رایانه و نسخه کتابخانه را بررسی کنید.
پس از شناسایی کنترلر، تنها یک کارت سازگار و شناختهشده را در میدان قرار دهید. کارت همراه یا یک برچسب آزمایشگاهی مستند برای شروع بهتر از کارت بانکی یا کارت سازمانی است که رفتار و مجوز دسترسی آن را نمیدانید. زمان شروع جستوجو، زمان تشخیص و نتیجه را ثبت کنید. کارت را دور و دوباره نزدیک کنید تا مطمئن شوید تشخیص جدید است و مقدار قبلی از حافظه برنامه نمایش داده نمیشود. برای این آزمایش نیازی به نوشتن روی کارت یا تغییر بخشهای حفاظتشده نیست.
چه چیزی را از کارت خواندهایم؟
خروجی نمونه ساده ممکن است فقط فناوری تشخیص و چند بایت شناسه را نشان دهد. خواندن این مقدار با خواندن محتوای کاربر، تفسیر پیام NDEF یا دسترسی به بخش محافظتشده یکسان نیست. ابتدا نوع برچسب و ساختار حافظه آن را مشخص کنید. بعضی برچسبها حافظه صفحهای دارند، بعضی ساختار متفاوتی برای بخشها و مجوزها ارائه میکنند. دستور نوشتن که برای یک خانواده درست است نباید بر اساس شباهت ظاهر روی خانواده دیگر اجرا شود. ظرفیت تبلیغشده نیز همیشه برابر فضای آزاد برای پیام کاربردی نیست.
برای تمرین، روی برچسب پاک و قابل بازنویسی یک پیام کوتاه و کاملاً ساختگی قرار دهید. شناسه آن برچسب و محتوای پیام را در گزارش در دو ستون جدا بنویسید. سپس پیام را تغییر دهید و دوباره بخوانید. اگر شناسه ثابت مانده و پیام تغییر کرده، تفاوت نقش این دو روشن میشود. در محصول واقعی نیز برنامه نباید صرفاً با وجود یک پیام دارای عنوان «مجاز» تصمیم بگیرد. داده خواندهشده ورودی خارجی است و باید طول، قالب و معنای آن پیش از استفاده اعتبارسنجی شود.
فاصله، جهت و محیط فیزیکی
دامنه خواندن یک عدد ثابت مستقل از محیط نیست. اندازه و جهت آنتن کارت، جنس زیر برد، نزدیکی فلز، نحوه قرار گرفتن سیمها و وجود برچسب دیگر روی نتیجه اثر دارند. برای مقایسه، صفحه غیر فلزی ثابتی انتخاب کنید، موقعیت برد را علامت بزنید و کارت را در فاصله و زاویه معلوم قرار دهید. به جای ادعای کلی درباره برد خواندن، نتیجه را برای همان کارت و همان چیدمان گزارش کنید. اگر قرار است ابزار در محفظه نصب شود، آزمایش پس از نصب نیز ضرورت دارد.
یک بار موفق خواندن در دورترین نقطه، معیار مناسبی برای طراحی نیست. برای چند فاصله مشخص، تعداد موفقیت را از میان تعداد تلاش معلوم ثبت کنید. سپس سرعت نزدیک و دور شدن یا جهت کارت را جداگانه تغییر دهید. اگر یک کارت خوب و کارت دیگری ضعیف عمل میکند، شناسه، اندازه و خانواده هر دو را یادداشت کنید. اگر همه کارتها فقط در حالت نصبشده بدتر میشوند، محفظه، زمین و منبع تغذیه در اولویت بررسی قرار میگیرند. این روش مشکل محیطی را از خطای برنامه جدا میکند.
خواندن پیوسته و مدیریت حضور
در یک دستگاه واقعی، کاربر معمولاً کارت را برای مدت کوتاهی روی محل خواندن نگه میدارد. یک حلقه ساده ممکن است همان کارت را چندین بار پشت سر هم ثبت کند. اگر هر ثبت منجر به افزودن اعتبار یا اجرای یک عمل شود، نتیجه بیش از یک بار اتفاق میافتد. برنامه باید بین «کارت هنوز حاضر است» و «کارت تازه وارد شده» تفاوت بگذارد. برای ساخت نمونه، حضور فعلی، زمان آخرین مشاهده و شرط پایان حضور را به شکل روشن در مدل حالت تعریف کنید.
برای آزمون، کارت را چند ثانیه ثابت نگه دارید، برای لحظهای از میدان خارج و دوباره وارد کنید. رفتار مورد انتظار را قبل از آزمایش بنویسید. اگر هدف یک بار ثبت برای هر مراجعه است، تعداد رخدادها را با حرکت واقعی مقایسه کنید. یک تأخیر تصادفی طولانی ممکن است ثبت تکراری را کمتر کند، ولی میتواند کاربر بعدی را هم از دست بدهد. تصمیم درباره زمان و شرط آزاد شدن باید با رفتار واقعی کاربران، نرخ جستوجو و احتمال قطع موقت میدان هماهنگ باشد.
نوشتن مطمئن روی برچسب آزمایشی
قبل از نوشتن، نوع کارت، محدوده مجاز حافظه و وضعیت قفل آن را بررسی کنید. بخشهای پیکربندی یا بیتهای قفل ممکن است رفتار متفاوتی از حافظه کاربر داشته باشند. برای نخستین آزمایش از بخش مستند و قابل بازنویسی استفاده کنید و محتوای قبلی همان بخش را بخوانید. داده کوتاهی بنویسید، سپس میدان را قطع کنید و در یک نشست تازه همان داده را دوباره بخوانید. موفقیت درخواست نوشتن به تنهایی اثبات نمیکند ساختار پیام از نظر برنامه خواننده معتبر است.
رفتار هنگام قطع ارتباط نیز ارزش بررسی دارد. روی برچسب آزمایشی و داده بیاهمیت، مشخص کنید برنامه وقتی پیش از تکمیل عملیات کارت دور میشود چه گزارشی میدهد. عملیات ناموفق نباید با نمایش مقدار قدیمی به عنوان نتیجه تازه پنهان شود. برای داده چندبخشی میتوانید شماره نسخه و یک بررسی صحت در قالب کاربردی خود قرار دهید تا پرونده ناقص تشخیص داده شود. چنین بررسی صحت سادهای برای تشخیص خرابی اتفاقی است؛ برای اثبات اصالت پیام، طراحی رمزنگاری و مدیریت کلید جداگانه لازم است.
آزمایش یک سامانه نمونه ورود
برای یک نمونه آموزشی، ابتدا جدولی از کارتهای مجاز و غیرمجاز آزمایشگاهی بسازید. سه نتیجه متفاوت تعریف کنید: کارت دیده نشد، کارت دیده شد ولی مجاز نبود، و کارت معتبر پذیرفته شد. ثبت این تفاوت مانع میشود خطای ارتباط با شکست سیاست دسترسی مخلوط شود. برای آزمون، از کارت مجاز، کارت ناشناخته و تکرار همان کارت در زمان کوتاه استفاده کنید. لاگ باید دلیل تصمیم را به شکلی ثبت کند که نگهداری شناسه کامل کاربر در گزارش عمومی لازم نباشد.
سپس قطع ارتباط با میزبان تصمیمگیر را بررسی کنید. اگر برد فقط خواننده است و تصمیم نهایی را به سرور میسپارد، هنگام نبود شبکه چه اتفاقی باید بیفتد؟ پاسخ مناسب به نیاز کاربرد بستگی دارد و بهتر است آگاهانه تعریف شود. برنامه نباید خطای شبکه را معادل پذیرش تلقی کند یا نتیجه موفق قبلی را برای کارت بعدی مصرف کند. آزمایش با داده ساختگی و سامانه متعلق به تیم، این خطاها را آشکار میکند بدون اینکه کارت واقعی افراد یا درگاه عملیاتی درگیر شود.
گزارش خطایی که قابل بازسازی است
برای خطای متناوب، نسخه برد، تنظیم جامپر، رابط میزبان، مدل کارت، موقعیت آنتن و متن خطای کتابخانه را ثبت کنید. توصیف «گاهی کارت را نمیخواند» برای تشخیص کافی نیست. مشخص کنید آیا کنترلر در همان لحظه پاسخ میداد، آیا جستوجو تمام شد، آیا کارت شناسایی شد ولی فرمان بعدی شکست خورد یا فقط برنامه نمایش خطا داشت. تفکیک این مراحل مسیر بررسی را کوتاه میکند. اگر نمونه ساده سازنده همیشه موفق است و برنامه اصلی شکست میخورد، زمانبندی و مدیریت وضعیت برنامه را بررسی کنید.
برای تحویل نتیجه، عکس چیدمان ثابت، نمونه لاگ پاکسازیشده و یک جدول آزمون حضور و خروج کارت نگه دارید. موفقیت این میز آزمایش زمانی معنا دارد که نفر دیگر با همان کارت و همان نسخه نرمافزار بتواند نتیجه را تکرار کند. برد PN532 در این نقش به تیم اجازه میدهد فیزیک ارتباط نزدیک، تبادل داده و منطق اعتماد را جداگانه بررسی کند و برای هر تصمیم امنیتی شاهد مشخصی داشته باشد.