সুচিপত্র:

Arduino এ RC522 সহ Mifare Ultralight C ব্যবহার করা: 3 টি ধাপ
Arduino এ RC522 সহ Mifare Ultralight C ব্যবহার করা: 3 টি ধাপ

ভিডিও: Arduino এ RC522 সহ Mifare Ultralight C ব্যবহার করা: 3 টি ধাপ

ভিডিও: Arduino এ RC522 সহ Mifare Ultralight C ব্যবহার করা: 3 টি ধাপ
ভিডিও: How to make RFID door lock। Arduino RFID door lock। RFID door lock system using Arduino 2024, জুলাই
Anonim
আরডুইনোতে RC522 সহ Mifare Ultralight C ব্যবহার করা
আরডুইনোতে RC522 সহ Mifare Ultralight C ব্যবহার করা

কার্ড হোল্ডারদের সনাক্ত করতে বা কিছু করার অনুমতি দেওয়ার জন্য RFID প্রযুক্তি ব্যবহার করা (একটি দরজা খোলা ইত্যাদি) একটি মোটামুটি সাধারণ পদ্ধতি। DIY অ্যাপ্লিকেশনের ক্ষেত্রে RC522 মডিউল ব্যাপকভাবে ব্যবহৃত হয় কারণ এটি বেশ সস্তা এবং এই মডিউলের জন্য প্রচুর কোড বিদ্যমান।

বেশিরভাগ ক্ষেত্রে, কার্ডের ইউআইডি কার্ড হোল্ডারকে "সনাক্ত" করার জন্য ব্যবহার করা হয়, এবং মিফারে ক্লাসিক কার্ডগুলি ব্যবহার করা হয় কারণ সেগুলি সস্তা এবং প্রায়ই RC522 মডিউল কেনার সময় অন্তর্ভুক্ত করা হয়।

কিন্তু আপনি হয়তো জানেন, Mifare Classic সিস্টেমটি কয়েক বছর ধরে হ্যাক করা হয়েছে এবং এটিকে আর নিরাপদ হিসেবে বিবেচনা করা হয় না। ক্লাসিক কার্ড দ্বারা ব্যবহৃত এনক্রিপশন সিস্টেম ক্রিপ্টো 1 কে পরাস্ত করা যায় এবং এটি পুনরায় লেখা যায় এমন কার্ড যেখানে ইউআইডি ডেটা পুনরায় প্রোগ্রাম করা যায় (ম্যাজিক কার্ড)।

তাই কোনো নিরাপত্তা প্রাসঙ্গিক অ্যাপ্লিকেশনের জন্য Mifare ক্লাসিক কার্ড ব্যবহারের সুপারিশ করা হয় না! একই (অধিকাংশ) NTAG এবং Mifare Ultralight সিস্টেমের জন্য প্রযোজ্য

সুতরাং পছন্দ হল একটি পেশাদারী সিস্টেম ব্যবহার করা অথবা আরো নিরাপদ RFID সিস্টেম ব্যবহার করার চেষ্টা করা। উপলব্ধ সিস্টেম হল Mifare Ultralight C, Mifare DESFire এবং Mifare Plus। যেহেতু এই আরো নিরাপদ সিস্টেম ব্যবহার করে অনেক পেশাদার সিস্টেম আছে, তাই DIY সম্প্রদায়ের জন্য কার্যত কোন সমাধান নেই (একটি Teensy ভিত্তিক DESFire সমাধান আছে, যা আরো ব্যয়বহুল PN523 ব্রেকআউট বোর্ডের উপর ভিত্তি করে)। অতিরিক্তভাবে DESFire কার্ডগুলি বেশ ব্যয়বহুল। তাই চ্যালেঞ্জ ছিল একটি ভাল এবং সস্তা সমাধান খুঁজে বের করা।

উপস্থাপিত সমাধান সস্তা চীনা RC522 DIY মডিউল ব্যবহার করে সস্তা Mifare Ultralight "C" কার্ডগুলিতে সম্পূর্ণ অ্যাক্সেস প্রদান করে। এই কোডের উপর ভিত্তি করে, নিরাপদ 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। শুধু এই inductors প্রতিস্থাপিত উপযুক্ত বেশী যেমন FERROCORE CW1008-2200 হঠাৎ RC522 দেখায় এর আসল সম্ভাবনা কি।

সুতরাং প্রদত্ত কোডটি চেষ্টা করার আগে, আপনাকে অবশ্যই ইন্ডাক্টরগুলি প্রতিস্থাপন করতে হবে। এটি কেবল প্রাক-ইনস্টল করা ইন্ডাক্টরগুলির সাথে কাজ করবে না!

এই সবের পটভূমি হল, আল্ট্রালাইট সি কার্ডগুলি বেশ শক্তির ক্ষুধার্ত। এই শক্তি RC522 RF- ক্ষেত্র দ্বারা সরবরাহ করা হয়। ইনডাক্টরগুলির কম অ্যাম্পারেজের কারণে, শক্তি ক্ষেত্রটি আল্ট্রালাইট সি -কে পাওয়ার জন্য যথেষ্ট শক্তিশালী নয়, মিফারে ক্লাসিকের মতো অন্যান্য কার্ডগুলির কম শক্তি প্রয়োজন এবং তাই বেশ স্থিতিশীল কাজ করে।

ধাপ 2: এটি কিভাবে কাজ করে?

এটা কিভাবে কাজ করে?
এটা কিভাবে কাজ করে?
এটা কিভাবে কাজ করে?
এটা কিভাবে কাজ করে?
এটা কিভাবে কাজ করে?
এটা কিভাবে কাজ করে?
এটা কিভাবে কাজ করে?
এটা কিভাবে কাজ করে?

সুতরাং RC522 মডিউল পরিবর্তন করার পরে, আপনি কিভাবে আপনার অ্যাপ্লিকেশনের জন্য Mifare Ulralight C ব্যবহার করতে পারেন?

কৌশলটি হল, Mifare Ultralight C 3DES সাইফারের উপর ভিত্তি করে একটি পাসওয়ার্ড প্রমাণীকরণ সমর্থন করে। এই পাসওয়ার্ড ব্যবহার করে, কার্ডের বিষয়বস্তু "অননুমোদিত ব্যবহারকারীর কাছে" কেবল পঠনযোগ্য "বা সম্পূর্ণ অদৃশ্য করা যেতে পারে।

এই পাসওয়ার্ড সুরক্ষা ব্যবহার করার জন্য কার্ডে পাসওয়ার্ড লিখতে হবে এবং পৃষ্ঠাগুলি সুরক্ষিত করা দরকার। একবার হয়ে গেলে, আপনি আপনার অ্যাপ্লিকেশনে কার্ডটি যাচাই করতে পারেন কেবল পাসওয়ার্ড ভিত্তিক প্রমাণীকরণের জন্য বা একটি সুরক্ষিত এলাকা থেকে অতিরিক্ত ডেটা চেয়ে। শুধুমাত্র যদি এটি সফল হয় তবে আপনি জানেন যে আপনি কার্ডে প্রদত্ত ইউআইডি বিশ্বাস করতে পারেন।

সাবধান: পাসওয়ার্ড ভিত্তিক প্রমাণীকরণ ব্যতীত আপনি এখনও একটি Mifare Ultralight C কার্ডকে বিশ্বাস করতে পারবেন না, কারণ সেখানে "ম্যাজিক কার্ড" রয়েছে যারা আল্ট্রালাইট C এর অনুকরণ করে।

প্রযুক্তি থেকে স্বাধীন প্রতিটি কার্ড (যদি সঠিক ফ্রিকোয়েন্সি থাকে) আরএফ-ফিল্ড দ্বারা চালিত হলে তাদের ইউআইডি দিয়ে সাড়া দেবে এবং নিজেদের চিহ্নিত করার অনুরোধ করবে। উপরন্তু তারা কার্ডের ধরন সম্পর্কে ন্যূনতম তথ্য প্রদান করে একটি SAK মান প্রদান করে। দুর্ভাগ্যক্রমে Mifare Ultralight C. সহ সকল Mifare Ultralight এবং NTAG সিম টাইপ (SAK = 0x00) হিসাবে চিহ্নিত করে, তাই কার্ডের জন্য ভোট দেওয়ার সময় কমপক্ষে 0x00 এর SAK মান একটি ইঙ্গিত দেবে যে পাঠকের উপর আল্ট্রালাইট C থাকতে পারে ।

এটি একটি আল্ট্রালাইট সি কিনা তা নিশ্চিত করতে এনক্রিপ্ট করা প্রমাণীকরণের জন্য একটি অনুরোধ কার্ডে পাঠানো যেতে পারে। যদি এটি একটি আল্ট্রালাইট সি কার্ড না হয়, এই অনুরোধটি বোঝা যাবে না, এবং প্রতিক্রিয়াটি একটি NAK (নোট-অ্যাকনলেজ) হবে।

যদি এটি একটি Ulralight C কার্ড হয়, আপনি একটি 8 বাইট উত্তর পাবেন। এই 8 বাইট হল একটি এলোমেলো সংখ্যা "B" (RndB) যা 3DES সাইফার ব্যবহার করে কার্ডে সংরক্ষিত কী দ্বারা এনক্রিপ্ট করা হয়।

এই এনক্রিপ্ট করা RndB প্রোগ্রামে একই কী ব্যবহার করে ডিক্রিপ্ট করা আবশ্যক। এই এলোমেলো সংখ্যাটি তখন সামান্য পরিবর্তন করা হয় (এক বাইট rot বাইট 1 দ্বারা ঘোরানো হলে বাইট 8 এ সরানো হবে এবং অন্য সব বাইট এক বাইট নীচে ধাক্কা দেওয়া হবে, তারপর বলা হয় RndB’)। প্রোগ্রাম তারপর একটি 8 বাইট এলোমেলো সংখ্যা "A" নিজেই (RndA) তৈরি করে এবং এই RndA সংশোধিত RndB 'এর সাথে সংযুক্ত করে। এটি আবার কী ব্যবহার করে এনক্রিপ্ট করা হয় এবং কার্ডে পাঠান।

কার্ড বার্তাটি ডিক্রিপ্ট করে এবং RndB 'কার্ডে পূর্বে উৎপন্ন RndB- এর সাথে মানানসই কিনা তা পরীক্ষা করে। যদি তারা মিলে যায়, কার্ডটি এখন জানে, যে প্রোগ্রামটি কী জানে।

এই মুহুর্তে, প্রোগ্রামটি এখনও জানে না যে কার্ডটি কী জানে এবং তাই বিশ্বাসযোগ্য হতে পারে বা না। এটি অর্জনের জন্য, কার্ডটি এখন ডিক্রিপ্ট করা RndA কে একটি বাইট দ্বারা ঘোরায়, তারপর কী ব্যবহার করে এই বাইটগুলি এনক্রিপ্ট করে এবং তাদের ফেরত পাঠায়।

প্রোগ্রামটি তখন কার্ডের উত্তর ডিক্রিপ্ট করবে এবং মূল RndA এবং উত্তর দেওয়া RndA মিলছে কিনা তা পরীক্ষা করবে। কেবল তখনই উভয় সত্তা (প্রোগ্রাম এবং কার্ড) জানে যে তারা একই কীটির জ্ঞান ভাগ করে।

এই প্রক্রিয়াটি শুধুমাত্র প্রমাণীকরণের জন্য ব্যবহার করা হয়। পরবর্তী সমস্ত যোগাযোগ সর্বদা "স্পষ্ট পাঠ্য" তে থাকে।

যদিও "ম্যাজিক আল্ট্রালাইট সি" কার্ড রয়েছে যেখানে ইউআইডি সংশোধন করা যায়, চাবি নিজেই কার্ড থেকে পাওয়া যায় না এবং 3DES সাইফার মোটামুটি নিরাপদ। চাবিটি একটি 16 বাইট কী, তাই চাবি পাওয়ার জন্য একটি নিষ্ঠুর শক্তি পদ্ধতিতে কিছু সময় লাগবে।

যেমনটি বলা হয়েছে, প্রমাণীকরণের আগে এবং প্রমাণীকরণের পরে যোগাযোগ সর্বদা স্পষ্ট পাঠ্যে থাকে (যেমন এনক্রিপ্ট করা হয় না)। কার্ডে নতুন চাবি লেখার সময়, চাবির বিষয়বস্তু সঠিক যন্ত্রপাতি ব্যবহার করে শুঁকানো যায়। সুতরাং দয়া করে কেবল একটি নিরাপদ পরিবেশে চাবি লিখুন এবং চাবিটি গোপন রাখুন।

আল্ট্রালাইট সি কার্ড ব্যবহার করার সময়

আল্ট্রালাইট সি কার্ডে একাধিক সুরক্ষা বৈশিষ্ট্য রয়েছে:

  1. ওয়ান টাইম প্রোগ্রামিং (ওটিপি) মেমরি। এই এলাকায় বিট লেখা যায়, বাস মোছা যায় না।
  2. একটি 16 বিট ওয়ান ওয়ে কাউন্টার। এই কাউন্টার শুধুমাত্র বৃদ্ধি করতে পারে, যখন acessed।
  3. একটি "লিখুন" বা "পড়ুন/লিখুন" স্মৃতিতে পৃষ্ঠাগুলির সুরক্ষা। কেবল কী দিয়ে প্রমাণিত হলে, এই পৃষ্ঠাগুলি পড়া বা সংশোধন করা যেতে পারে।
  4. কোন পরিবর্তন থেকে রক্ষা করার জন্য পৃথক পৃষ্ঠাগুলির একটি জমা / ব্লক করা।

প্রদত্ত কোডে OTP, 16 বিট কাউন্টার বা ব্লকিং বিট ব্যবহার করা হয় না, তবে https://www.nxp.com/docs/en/data- এ দেওয়া তথ্যের ভিত্তিতে সহজেই প্রয়োগ করা যায় শীট/MF0ICU2.pd…

যেহেতু Mifare Ultralight C ব্যবহারের জন্য কী দ্বারা সুরক্ষা অপরিহার্য, সমস্ত প্রাসঙ্গিক ফাংশন উপস্থিত।

সমস্ত কমান্ড সিরিয়াল মনিটরে "শুধুমাত্র নতুন লাইন" এবং 115200 বাউড সহ ব্যবহৃত হয়

  • "Auth 49454D4B41455242214E4143554F5946" প্রদত্ত কী দিয়ে একটি প্রমাণীকরণের অনুরোধ করবে (এই ক্ষেত্রে স্ট্যান্ডার্ড Mifare Ultralight C কী)
  • "ডাম্প" কার্ডের বিষয়বস্তু যতদূর দৃশ্যমান তা ফেলে দেবে। যদি পৃষ্ঠাগুলি কী দ্বারা সুরক্ষিত থাকে, কীগুলির সাথে পূর্ববর্তী প্রমাণীকরণ না হওয়া পর্যন্ত এই পৃষ্ঠাগুলি দৃশ্যমান নাও হতে পারে। প্রথম দুটি কলামে এটি নির্দেশিত হয় যদি পৃষ্ঠাগুলি লক করা থাকে বা অ্যাক্সেস সীমাবদ্ধ থাকে।
  • "NewKey 49454D4B41455242214E4143554F5946" কার্ডে একটি নতুন কী লিখবে। 44 থেকে 47 পৃষ্ঠায় কীটি লেখা আছে। এটি কেবল তখনই কাজ করবে, যদি এই পৃষ্ঠাগুলি পূর্ববর্তী প্রমাণীকরণ ছাড়া লক করা বা সুরক্ষিত না থাকে।
  • "wchar 10 hello world" লেখা হবে "হ্যালো ওয়ার্ল্ড" পৃষ্ঠা 10 থেকে। ত্রুটি বা ডেটা উপেক্ষা করা হয় কারণ এই পৃষ্ঠাগুলি ব্যবহারকারীর মেমরি নয়।
  • "Whex 045ACBF44688" হেক্স মানগুলি সরাসরি মেমরিতে লিখবে, পূর্ববর্তী শর্তগুলি প্রযোজ্য।
  • "30 রক্ষা করুন" 30 পৃষ্ঠার সমস্ত পৃষ্ঠাগুলিকে protectsর্ধ্বমুখী করে। অনুমতির উপর নির্ভর করে, এই পৃষ্ঠাগুলি কেবল তখনই পরিবর্তন করা যেতে পারে বা কী দিয়ে পূর্ব প্রমাণীকরণের পরে পড়তে পারে। 47 এর চেয়ে বেশি মান সহ "সুরক্ষা" ব্যবহার করলে 44-47 পৃষ্ঠায় কী অন্তর্ভুক্ত করে সমস্ত পৃষ্ঠাগুলিকে "অরক্ষিত" হিসাবে সেট করা হবে (যা কেবলমাত্র সংশোধন করা যায় কিন্তু পড়া যায় না)। কী পরিবর্তন করা রোধ করার জন্য, সুরক্ষা অন্তত পৃষ্ঠা 44 থেকে শুরু করা উচিত।
  • "Setpbit 0" সুরক্ষা বিট সেট করে এবং সিদ্ধান্ত নেয় যে সুরক্ষিত পৃষ্ঠাগুলি শুধুমাত্র ("setpbit 1") পড়লে হবে অথবা কী দিয়ে পূর্ববর্তী প্রমাণীকরণ ছাড়া লেখা যাবে না ("setpbit 0") পড়া যাবে না।

কার্ড শনাক্ত হওয়ার পরপরই সব কমান্ড ব্যবহার করা যাবে না। পূর্বে অন্য একটি কমান্ডে একটি "ডাম্প" সর্বদা সাহায্য করে।

ধাপ 3: গুরুত্বপূর্ণ

  1. পৃষ্ঠা 43 এবং 44 পড়ার মাধ্যমে প্রোগ্রামটি আল্ট্রালাইট প্রকারের মধ্যে পার্থক্য করে। পৃষ্ঠা 43 যদি পঠনযোগ্য হয় এবং পৃষ্ঠা 44 না হয়, তাহলে এটি সম্ভবত আল্ট্রালাইট সি। আল্ট্রালাইট সি (কোন কিছুর উপর কোন প্রভাব নেই) আল্ট্রালাইটের সঠিক সনাক্তকরণ কী সহ প্রমাণীকরণের মাধ্যমে করা উচিত (আমি স্থিতিশীলতার কারণে এটি বাস্তবায়ন করিনি)।
  2. কমান্ড "setpbit" এবং "সুরক্ষা" ব্যবহার করার আগে "ডাম্প" কমান্ড ব্যবহার করতে হবে, অন্যথায় পৃষ্ঠাগুলির সুরক্ষা অবস্থা জানা যাবে না।
  3. আপনি যদি আপনার কার্ডের প্রথম পৃষ্ঠাগুলিকে "পড়ুন/লিখুন" সুরক্ষিত রাখেন, তাহলে এই প্রোগ্রামটির সাথে এটি আর কাজ করবে না কারণ প্রথম পৃষ্ঠাটি এখনও কার্ড উপস্থিত আছে কিনা তা দেখার জন্য নিয়মিত পড়া হয়। যেহেতু প্রথম দুটি পৃষ্ঠা কেবল যেভাবেই পড়া হয় (ইউআইডি সেখানে সংরক্ষিত থাকে), সেগুলিকে রক্ষা করার কোন মানে নেই।

স্থিতিশীলতার সমস্যা।

এই কোডটি Arduino এর জন্য "স্ট্যান্ডার্ড" RC522 লাইব্রেরি এবং https://github.com/Octoate/ArduinoDES থেকে একটি 3DES লাইব্রেরি ব্যবহার করে। যেখানে RC522 লাইব্রেরি বেশ সাধারণভাবে ব্যবহৃত হয়, 3DES লাইব্রেরি এত বিস্তৃত বলে মনে হয় না এবং ম্যানুয়ালি ইনস্টল করা আবশ্যক।

কোডটি একটি Arduino Uno তে পরীক্ষা করা হয়েছে। কিন্তু এটি লেখার সময়, আমি স্থিতিশীলতার বিষয়ে অনেক অদ্ভুত সমস্যার সম্মুখীন হয়েছি। একরকম হয় আমার প্রোগ্রামিং দক্ষতা ততটা ভাল নয়, ব্যবহৃত লাইব্রেরিগুলির মধ্যে একটি অস্থিতিশীল বা লাইব্রেরির মিশ্রণ একটি ভাল ধারণা নয়।

কোড ব্যবহার করার সময় দয়া করে এটি মনে রাখবেন !!!

এটি পরিবর্তন করা বা এর শুধুমাত্র কিছু অংশ ব্যবহার করলে অদ্ভুত আচরণ হতে পারে যেমন ক্র্যাশ করা, অদ্ভুত জিনিস মুদ্রণ করা বা কার্ড থেকে পড়ার সময় টাইমআউট বা NAK পাওয়া। এটি কোডের যে কোনও জায়গায় ঘটতে পারে (এটি আমার ডিবাগিংয়ের অনেক ঘন্টা ব্যয় করে)। যদি আপনি এর কারণ (গুলি) খুঁজে পান, দয়া করে আমাকে একটি ইঙ্গিত দিন।

প্রস্তাবিত: