विषयसूची:

Arduino पर RC522 के साथ Mifare Ultralight C का उपयोग करना: 3 चरण
Arduino पर RC522 के साथ Mifare Ultralight C का उपयोग करना: 3 चरण

वीडियो: Arduino पर RC522 के साथ Mifare Ultralight C का उपयोग करना: 3 चरण

वीडियो: Arduino पर RC522 के साथ Mifare Ultralight C का उपयोग करना: 3 चरण
वीडियो: Beginning NFC with PhoneGap and Arduino - O'Reilly Webcast 2024, नवंबर
Anonim
Arduino पर RC522 के साथ Mifare Ultralight C का उपयोग करना
Arduino पर RC522 के साथ Mifare Ultralight C का उपयोग करना

कार्ड धारकों की पहचान करने या कुछ करने के लिए अधिकृत करने के लिए आरएफआईडी तकनीक का उपयोग करना (दरवाजा खोलना आदि) एक काफी सामान्य दृष्टिकोण है। DIY एप्लिकेशन के मामले में RC522 मॉड्यूल का व्यापक रूप से उपयोग किया जाता है क्योंकि यह काफी सस्ता है और इस मॉड्यूल के लिए बहुत सारे कोड मौजूद हैं।

ज्यादातर मामलों में, कार्ड के यूआईडी का उपयोग कार्ड धारक को "पहचानने" के लिए किया जाता है, और मिफेयर क्लासिक कार्ड का उपयोग किया जाता है क्योंकि वे सस्ते होते हैं और अक्सर आरसी 522 मॉड्यूल खरीदते समय शामिल होते हैं।

लेकिन जैसा कि आप जानते होंगे कि Mifare Classic सिस्टम कुछ सालों से हैक किया गया है और इसे अब उतना सुरक्षित नहीं माना जाता है। क्लासिक कार्ड द्वारा उपयोग किए जाने वाले एन्क्रिप्शन सिस्टम क्रिप्टो 1 को दूर किया जा सकता है और फिर से लिखने योग्य कार्ड हैं जहां डेटा यूआईडी को फिर से प्रोग्राम किया जा सकता है (मैजिक कार्ड)।

तो किसी भी सुरक्षा प्रासंगिक एप्लिकेशन के लिए Mifare Classic कार्ड के उपयोग की अनुशंसा नहीं की जाती है! वही (अधिकांश) NTAG और Mifare Ultralight सिस्टम के लिए लागू होता है

तो विकल्प या तो एक पेशेवर प्रणाली का उपयोग करना है या अधिक सुरक्षित आरएफआईडी प्रणाली का उपयोग करने का प्रयास करना है। उपलब्ध सिस्टम मिफेयर अल्ट्रालाइट सी, मिफेयर डेसफायर और मिफेयर प्लस हैं। चूंकि इन अधिक सुरक्षित प्रणालियों का उपयोग करने वाले कई पेशेवर सिस्टम हैं, DIY समुदाय के लिए वस्तुतः कोई समाधान नहीं है (एक टेन्सी आधारित डेसफायर समाधान है, जो अधिक महंगे पीएन 523 ब्रेकआउट बोर्ड में आधारित है)। इसके अतिरिक्त डेसफायर कार्ड काफी महंगे हैं। इसलिए चुनौती एक बेहतर और सस्ता समाधान खोजने की थी।

प्रस्तुत समाधान सस्ते चीनी 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 पर बताया गया है। बस इन इंडिकेटर्स को उपयुक्त लोगों में बदलकर उदा। फेरोकोर CW1008-2200 अचानक RC522 दिखाता है कि इसकी वास्तविक क्षमता क्या है।

तो दिए गए कोड को आजमाने से पहले, आपको इंडक्टर्स को बदलना होगा। यह सिर्फ पहले से स्थापित इंडिकेटर्स के साथ काम नहीं करेगा!

इस सब की पृष्ठभूमि यह है कि अल्ट्रालाइट सी कार्ड काफी ऊर्जा के भूखे होते हैं। यह ऊर्जा RC522 RF-क्षेत्र द्वारा प्रदान की जाती है। इंडक्टर्स के कम एम्परेज के कारण, ऊर्जा क्षेत्र अल्ट्रालाइट सी को शक्ति देने के लिए पर्याप्त शक्तिशाली नहीं है। मिफेयर क्लासिक जैसे अन्य कार्डों को बस कम शक्ति की आवश्यकता होती है और इसलिए काफी स्थिर काम करते हैं।

चरण 2: यह कैसे काम करता है?

यह कैसे काम करता है?
यह कैसे काम करता है?
यह कैसे काम करता है?
यह कैसे काम करता है?
यह कैसे काम करता है?
यह कैसे काम करता है?
यह कैसे काम करता है?
यह कैसे काम करता है?

तो RC522 मॉड्यूल को संशोधित करने के बाद, आप अपने आवेदन के लिए Mifare Ulralight C का उपयोग कैसे कर सकते हैं?

चाल यह है कि Mifare Ultralight C 3DES सिफर पर आधारित पासवर्ड प्रमाणीकरण का समर्थन करता है। इस पासवर्ड का उपयोग करके, कार्ड की सामग्री को "केवल पढ़ने के लिए" या किसी अनधिकृत उपयोगकर्ता के लिए पूरी तरह से अदृश्य बनाया जा सकता है।

इस पासवर्ड सुरक्षा का उपयोग करने के लिए पासवर्ड को कार्ड पर लिखा जाना चाहिए और पृष्ठों को संरक्षित करने की आवश्यकता है। एक बार हो जाने के बाद, आप या तो केवल पासवर्ड आधारित प्रमाणीकरण या संरक्षित क्षेत्र से अतिरिक्त रूप से तैयार डेटा के लिए पूछकर अपने आवेदन में कार्ड को सत्यापित कर सकते हैं। यह सफल होने पर ही आप जानते हैं कि आप कार्ड पर दिए गए यूआईडी पर भरोसा कर सकते हैं।

सावधान रहें: पासवर्ड आधारित प्रमाणीकरण के बिना आप अभी भी Mifare Ultralight C कार्ड पर भरोसा नहीं कर सकते हैं, क्योंकि ऐसे "मैजिक कार्ड" भी हैं जो Ultralight C का अनुकरण करते हैं।

प्रौद्योगिकी से स्वतंत्र प्रत्येक कार्ड (यदि सही आवृत्ति में है) आरएफ-फील्ड द्वारा संचालित होने पर अपने यूआईडी के साथ प्रतिक्रिया करेगा और खुद को पहचानने का अनुरोध करेगा। इसके अतिरिक्त वे मौजूद कार्ड के प्रकार के बारे में न्यूनतम जानकारी प्रदान करते हुए एक एसएके मूल्य प्रदान करते हैं। दुर्भाग्य से सभी Mifare Ultralight और NTAG, Mifare Ultralight C सहित सिम प्रकार (SAK=0x00) के रूप में पहचाने जाते हैं। इसलिए कार्ड के लिए मतदान करते समय, 0x00 का SAK मान कम से कम एक संकेत देगा कि रीडर पर एक Ultralight C हो सकता है।.

यह सुनिश्चित करने के लिए कि यह एक अल्ट्रालाइट सी है, कार्ड पर एन्क्रिप्टेड प्रमाणीकरण के लिए एक अनुरोध भेजा जा सकता है। यदि यह अल्ट्रालाइट सी कार्ड नहीं है, तो इस अनुरोध को समझा नहीं जाएगा, और प्रतिक्रिया एक एनएके (नहीं-स्वीकृति) होगी।

यदि यह एक Ulralight C कार्ड है, तो आपको 8 बाइट का उत्तर मिलेगा। ये 8 बाइट्स एक यादृच्छिक संख्या "बी" (आरएनडीबी) हैं जो 3 डीईएस सिफर का उपयोग करके कार्ड पर संग्रहीत कुंजी द्वारा एन्क्रिप्ट किया गया है।

इस एन्क्रिप्टेड RndB को प्रोग्राम में उसी कुंजी का उपयोग करके डिक्रिप्ट किया जाना चाहिए। इस यादृच्छिक संख्या को फिर थोड़ा संशोधित किया जाता है (एक बाइट द्वारा घुमाया जाता है → बाइट 1 को बाइट 8 में ले जाया जाएगा और अन्य सभी बाइट्स को एक बाइट नीचे धकेल दिया जाता है, फिर इसे RndB कहा जाता है)। कार्यक्रम तब एक 8 बाइट यादृच्छिक संख्या "ए" स्वयं (आरएनडीए) उत्पन्न करता है और इस आरएनडीए को संशोधित आरएनडीबी से जोड़ता है। इसे फिर से कुंजी का उपयोग करके एन्क्रिप्ट किया जाता है और कार्ड को भेज दिया जाता है।

कार्ड संदेश को डिक्रिप्ट करता है और जांचता है कि क्या RndB' कार्ड पर पहले से जेनरेट किए गए RndB में फिट बैठता है। यदि वे मेल खाते हैं, तो कार्ड अब जानता है, कि प्रोग्राम कुंजी जानता है।

इस बिंदु पर, प्रोग्राम अभी भी नहीं जानता है कि क्या कार्ड कुंजी जानता है और इसलिए उस पर भरोसा किया जा सकता है या नहीं। इसे प्राप्त करने के लिए, कार्ड अब डिक्रिप्टेड RndA को एक बाइट से घुमाता है, फिर कुंजी का उपयोग करके इन बाइट्स को एन्क्रिप्ट करता है और उन्हें वापस भेजता है।

प्रोग्राम तब कार्ड के उत्तर को डिक्रिप्ट करेगा और जांच करेगा कि क्या मूल RndA और उत्तर दिया गया RndA मेल खाता है। केवल तभी दोनों संस्थाएं (कार्यक्रम और कार्ड) जानती हैं कि वे एक ही कुंजी का ज्ञान साझा करते हैं।

इस प्रक्रिया का उपयोग केवल प्रमाणित करने के लिए किया जाता है। आगे के सभी संचार हमेशा "स्पष्ट पाठ" में होते हैं।

यद्यपि "मैजिक अल्ट्रालाइट सी" कार्ड हैं जहां यूआईडी को संशोधित किया जा सकता है, कार्ड से कुंजी स्वयं प्राप्त नहीं की जा सकती है और 3 डीईएस सिफर काफी सुरक्षित है। कुंजी एक 16 बाइट कुंजी है, इसलिए कुंजी प्राप्त करने के लिए एक क्रूर बल दृष्टिकोण में कुछ समय लगेगा।

जैसा कि कहा गया है, प्रमाणीकरण से पहले और प्रमाणीकरण के बाद संचार हमेशा स्पष्ट पाठ में होता है (उर्फ एन्क्रिप्टेड नहीं)। कार्ड में नई कुंजी लिखते समय, सही उपकरण का उपयोग करके कुंजी की सामग्री को सूँघा जा सकता है। इसलिए कृपया कुंजी को सुरक्षित वातावरण में ही लिखें और कुंजी को गुप्त रखें।

अल्ट्रालाइट सी कार्ड का उपयोग करते समय

अल्ट्रालाइट सी कार्ड में कई सुरक्षा विशेषताएं हैं:

  1. वन टाइम प्रोग्रामिंग (ओटीपी) मेमोरी। इस क्षेत्र में बिट्स लिखे जा सकते हैं, बस को हटाया नहीं जा सकता।
  2. एक 16 बिट एक तरफा काउंटर। एक्सेस किए जाने पर यह काउंटर केवल बढ़ सकता है।
  3. स्मृति में पृष्ठों की "लिखना" या "पढ़ना/लिखना" सुरक्षा। केवल कुंजी से प्रमाणित होने पर ही इन पृष्ठों को पढ़ा या संशोधित किया जा सकता है।
  4. किसी भी संशोधन से बचाने के लिए अलग-अलग पेजों को फ्रीज/ब्लॉक करना।

दिए गए कोड में न तो ओटीपी, न ही 16 बिट काउंटर और न ही ब्लॉकिंग बिट के उपयोग को लागू किया गया है, बल्कि https://www.nxp.com/docs/en/data- में दी गई जानकारी के आधार पर आसानी से लागू किया जा सकता है। शीट/MF0ICU2.pd…

चूंकि मिफेयर अल्ट्रालाइट सी का उपयोग करने के लिए कुंजी द्वारा सुरक्षा आवश्यक है, सभी प्रासंगिक कार्य मौजूद हैं।

सीरियल मॉनिटर में सभी कमांड का उपयोग "केवल नई लाइन" और 115200 बॉड के साथ किया जाता है

  • "प्रमाणित 49454D4B41455242214E4143554F5946" दी गई कुंजी के साथ प्रमाणीकरण का अनुरोध करेगा (इस मामले में मानक Mifare Ultralight C कुंजी)
  • "डंप" कार्ड की सामग्री को वहां तक डंप कर देगा जहां तक वे दिखाई दे रहे हैं। यदि पृष्ठ कुंजी द्वारा सुरक्षित हैं, तो ये पृष्ठ कुंजी के साथ पिछले प्रमाणीकरण तक दिखाई नहीं दे सकते हैं। पहले दो कॉलम में यह इंगित किया जाता है कि पेज लॉक हैं या एक्सेस प्रतिबंधित है।
  • "newKey 49454D4B41455242214E4143554F5946" कार्ड के लिए एक नई कुंजी लिखेगा। कुंजी ४४ से ४७ तक पृष्ठों पर लिखी जाती है। यह केवल तभी काम करेगा, जब ये पृष्ठ पिछले प्रमाणीकरण के बिना न तो लॉक किए गए हों और न ही संरक्षित हों।
  • "wchar 10 hello world" पेज 10 से शुरू होकर "hello world" लिखेगा। फिर से, पेजों का यह केवल काम न तो लॉक किया गया है और न ही पिछले प्रमाणीकरण के बिना संरक्षित है। जब पेज 39 के ऊपर या पेज 4 के नीचे लिखने का प्रयास किया जाता है, तो यह एक संकेत देगा त्रुटि या डेटा को अनदेखा कर दिया जाता है क्योंकि ये पृष्ठ उपयोगकर्ता मेमोरी नहीं हैं।
  • "whex 045ACBF44688" हेक्स मान सीधे मेमोरी में लिखेगा, पिछली शर्तें लागू होती हैं।
  • "प्रोटेक्ट 30" पेज 30 से ऊपर के सभी पेजों की सुरक्षा करता है। अनुमति के आधार पर, इन पृष्ठों को केवल कुंजी के साथ पूर्व प्रमाणीकरण के बाद ही संशोधित या पढ़ा जा सकता है। 47 से अधिक मानों के साथ "प्रोटेक्ट" का उपयोग करने से सभी पेज "असुरक्षित" पर सेट हो जाएंगे, जिसमें पेज 44-47 पर कुंजी शामिल है (जिसे केवल संशोधित किया जा सकता है लेकिन पढ़ा नहीं जा सकता)। कुंजी को बदलने से रोकने के लिए, सुरक्षा कम से कम पेज 44 पर शुरू होनी चाहिए।
  • "सेटपबिट 0" सुरक्षा बिट सेट करता है और तय करता है कि संरक्षित पृष्ठ केवल पढ़े जाते हैं ("सेटपबिट 1") या कुंजी के साथ पिछले प्रमाणीकरण के बिना न तो पढ़ा नहीं जा सकता ("सेटपबिट 0")।

कार्ड का पता चलने के तुरंत बाद सभी आदेशों का उपयोग नहीं किया जा सकता है। पहले किसी अन्य कमांड के लिए "डंप" हमेशा मदद करता है।

चरण 3: महत्वपूर्ण

  1. कार्यक्रम पृष्ठ ४३ और ४४ को पढ़कर अल्ट्रालाइट प्रकारों के बीच अंतर करता है। यदि पृष्ठ ४३ पठनीय है और पृष्ठ ४४ नहीं है, तो यह सबसे अधिक संभावना है कि यह अल्ट्रालाइट सी है। लेकिन, यदि आप पृष्ठ ४३ को पढ़ते/लिखते हैं तो कार्ड को अब मान्यता प्राप्त नहीं है अल्ट्रालाइट सी (किसी भी चीज़ पर कोई प्रभाव नहीं पड़ता है) अल्ट्रालाइट की उचित पहचान कुंजी के साथ प्रमाणीकरण के माध्यम से की जानी चाहिए (मैंने स्थिरता कारणों से इसे लागू नहीं किया)।
  2. "सेटपबिट" और "प्रोटेक्ट" कमांड का उपयोग करने से पहले "डंप" कमांड का उपयोग किया जाना चाहिए, अन्यथा पृष्ठों की सुरक्षा स्थिति का पता नहीं चलेगा।
  3. यदि आप अपने कार्ड के पहले पृष्ठों को "पढ़ने/लिखने" की रक्षा करते हैं, तो यह इस कार्यक्रम के साथ काम नहीं करेगा क्योंकि पहले पृष्ठ को लगातार पढ़ा जाता है ताकि यह देखा जा सके कि कोई कार्ड मौजूद है या नहीं। चूंकि पहले दो पृष्ठ वैसे भी पढ़े जाते हैं (यूआईडी वहां संग्रहीत है), उनकी रक्षा करने का कोई मतलब नहीं है।

स्थिरता के मुद्दे।

यह कोड Arduino के लिए "मानक" RC522 लाइब्रेरी और https://github.com/Octoate/ArduinoDES से एक 3DES लाइब्रेरी का उपयोग करता है। जबकि RC522 पुस्तकालय काफी सामान्य रूप से उपयोग किया जाता है, 3DES पुस्तकालय इतना व्यापक नहीं लगता है और इसे मैन्युअल रूप से स्थापित किया जाना चाहिए।

कोड का परीक्षण Arduino Uno पर किया गया है। लेकिन इसे लिखते समय मुझे स्थिरता के संबंध में कई अजीब समस्याओं का सामना करना पड़ा। किसी तरह या तो मेरे प्रोग्रामिंग कौशल उतने अच्छे नहीं हैं, प्रयुक्त पुस्तकालयों में से एक अस्थिर है या पुस्तकालयों को मिलाना एक अच्छा विचार नहीं है।

कोड का उपयोग करते समय कृपया इसे ध्यान में रखें !!!

इसे बदलने या इसके केवल कुछ हिस्सों का उपयोग करने से अजीब व्यवहार हो सकता है जैसे कार्ड से पढ़ते समय दुर्घटनाग्रस्त होना, अजीब चीजें प्रिंट करना या टाइमआउट या एनएके प्राप्त करना। यह कोड में किसी भी स्थान पर हो सकता है (इसमें मुझे डिबगिंग के कई घंटे खर्च हुए)। यदि आपको इसके कारण (कारण) मिलते हैं, तो कृपया मुझे एक संकेत दें।

सिफारिश की: