বিরক্তিকর এবং সম্পূর্ণ ঘৃণ্য কারণে নয়, আমি লিনাক্স ব্যবহার করে আমার পাসপোর্টের এনএফসি চিপে থাকা সমস্ত ডেটা পড়তে চাই। দীর্ঘ এবং বিরক্তিকর অনুসন্ধানের পরে, আমি স্থির হয়েছি রোফটেনের পাইপাসপোর্ট।
আমি এখন বায়োমেট্রিক্স সহ সমস্ত পাসপোর্টের তথ্য পড়তে পারি।
একটি পাসপোর্টে এনএফসি চিপ একটি পাসওয়ার্ড দ্বারা সুরক্ষিত। পাসওয়ার্ডটি শারীরিক পাসপোর্টের অভ্যন্তরে মুদ্রিত হয়। পাশাপাশি এনএফসির কাজ করার জন্য পাসপোর্টের শারীরিকভাবে কাছাকাছি থাকা দরকারআপনার পাসওয়ার্ডটি দেখতে সক্ষম হওয়া দরকার। পাসওয়ার্ডটি “মেশিন রিডেবল জোন” (এমআরজেড) এ মুদ্রিত হয়েছে – এজন্য কিছু সীমান্ত প্রহরী চিপ স্ক্যান করার আগে পাঠকের মাধ্যমে আপনার পাসপোর্টটি সোয়াইপ করবে; তাদের পাসওয়ার্ড প্রয়োজন এবং এটি টাইপ করতে চান না।
যদিও আমার একটি ছোট সমস্যা ছিল। আমি আমার পুরানো পাসপোর্ট ব্যবহার করছি যা বাতিল করা হয়েছে। বাতিল করা কেবল দস্তাবেজটি প্রত্যাহার করার বিষয়ে নয়। এটি শারীরিকভাবেও পরিবর্তিত হয়:
আপনি ছবির বিপরীতে কোণায় এমআরজেড কেটে ফেলেছেন তা নিশ্চিত করে ব্যক্তিগত বিশদ পৃষ্ঠার নীচের বাম হাতের কোণটি কেটে ফেলেছেন।
সুতরাং এমআরজেডের একটি অংশ অনুপস্থিত! ওহ না! আমরা যা করতে পারি!?
এমআরজেড পুনরুদ্ধার
পাসওয়ার্ডটি তিনটি টুকরো ডেটা দিয়ে তৈরি:
- পাসপোর্ট নম্বর (চিঠি এবং সংখ্যা)
- জন্মের তারিখ (ইয়াম্মডিডি)
- মেয়াদোত্তীর্ণ তারিখ (YYMMDD)
প্রতিটি টুকরা এছাড়াও একটি চেকসাম আছে। এই গণনাটি পরিশিষ্ট এ থেকে সংজ্ঞায়িত করা হয় 9303 ডকুমেন্টের অংশ 3।
ওহ, এবং পুরো স্ট্রিংয়ের জন্য একটি চেকসাম রয়েছে। এটি এই চূড়ান্ত চেকসাম যা পাসপোর্টের কভারটি স্নিপ করা হলে কেটে যায়।
চূড়ান্ত পাসওয়ার্ডটি হ’ল: Number Number-checksum DOB DOB-checksum Expiry Expiry-checkum checksum-of-previous-digits
একটি এমআরজেড উত্পন্ন করার জন্য পাইথন কোড
আপনি যদি পাসপোর্ট নম্বর, জন্মের তারিখ এবং মেয়াদোত্তীর্ণ তারিখ জানেন তবে আপনি নিজের মেশিন রিডেবল জোন তৈরি করতে পারেন – এটি এনএফসি চিপের পাসওয়ার্ড হিসাবে কাজ করে।
Python 3
def calculateChecksum( value ): weighting = (7,3,1) characterWeight = { '0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '<': 0, 'A':10, 'B':11, 'C':12, 'D':13, 'E':14, 'F':15, 'G':16, 'H':17, 'I':18, 'J':19, 'K':20, 'L':21, 'M':22, 'N':23, 'O':24, 'P':25, 'Q':26, 'R':27, 'S':28, 'T':29, 'U':30, 'V':31, 'W':32, 'X':33, 'Y':34, 'Z':35 } counter = 0 result = 0 for x in value: result += characterWeight(str(x)) * weighting(counter%3) counter += 1 return str(result%10) def calculateMRZ( passportNumber, DOB, expiry ): """ DOB and expiry are formatted as YYMMDD """ passportCheck = calculateChecksum( passportNumber ) DOBCheck = calculateChecksum( DOB ) expiryCheck = calculateChecksum( expiry ) mrzNumber = passportNumber + passportCheck + DOB + DOBCheck + expiry + expiryCheck mrzCheck = calculateChecksum( mrzNumber ).zfill(2) mrz = passportNumber + passportCheck + "XXX" + DOB + DOBCheck + "X" + expiry + expiryCheck + "<<<<<<<<<<<<<<" + mrzCheck return mrz print( calculateMRZ("123456789", "841213", "220229") )
আমি ভেবেছিলাম যে পাসপোর্টের প্রচ্ছদটি কেটে ফেলা তার ভিতরে অ্যান্টেনাকে ধ্বংস করবে। কিন্তু, ফিরে যাচ্ছি যুক্তরাজ্যের গাইডেন্স::
আপনি অবশ্যই এপাসপোর্টের পিছনের কভারটি কাটবেন না
আহ! সেখানেই এনএফসি চিপ রয়েছে। আমি অনুমান করি এটি যাতে বাতিল করা পাসপোর্টগুলি এখনও সত্যতার জন্য যাচাই করা যায়।
সুরক্ষা, ধন্যবাদ, সমস্ত মোটামুটি স্ট্যান্ডার্ড পাবলিক কী ক্রিপ্টোগ্রাফি – 9303 পার্ট 11 এটি ব্যাখ্যা উদ্দীপনা বিশদ স্তর।
একটি জিনিস আমি কৌতূহলী পেয়েছি – কারণ চিপটির কোনও টাইমার নেই, এটি কতবার পড়া হচ্ছে তা এটি জানতে পারে না। আপনি এটি হাজার হাজার পাসওয়ার্ড প্রচেষ্টা দিয়ে বোমা ফেলতে পারেন এবং লক আউট নাও করতে পারেন। প্রকৃতপক্ষে, স্পেসিফিকেশন বলে:
আক্রমণকারীটির সাফল্যের সম্ভাবনাটি আইসি -তে অ্যাক্সেস করার সময়, পাসওয়ার্ড অনুমান করার একক প্রচেষ্টা এবং পাসপোর্টের এনট্রপি সময়কালের দ্বারা দেওয়া হয়।
উইলেল … মায়বিই …?
পাসপোর্টগুলি সাধারণত 10 বছরের জন্য বৈধ। সুতরাং এটি 36,525 সম্ভাব্য মেয়াদোত্তীর্ণ তারিখ।
পাসপোর্টধারীরা সাধারণত 100 বছরের কম বয়সী। সুতরাং এটি জন্মের 3,652,500 সম্ভাব্য তারিখ।
এটি ইতিমধ্যে 133,407,562,500 প্রচেষ্টা – এবং আমরা 1E24 সম্ভাব্য পাসপোর্ট নম্বরগুলিতেও পাইনি!
আমার পরীক্ষাগুলিতে, একটি ভুল তবে বৈধ এমআরজেড প্রেরণের ফলে চিপ “সুরক্ষা স্থিতি সন্তুষ্ট নয় (0x6982)” খুব অল্প সময়ের মধ্যে ফিরে আসে। সাধারণত এক সেকেন্ডেরও কম।
তবে এই ভুল প্রচেষ্টাটি প্রেরণ করা মনে হয়েছিল পরবর্তী প্রতিক্রিয়াতে একটি বিলম্ব প্রবর্তন করেছে – কয়েক সেকেন্ডের মধ্যে। সঠিক এমআরজেড পাঠানো এটিকে পুনরায় সেট করে বলে মনে হয়েছিল এবং চিপটি তাত্ক্ষণিকভাবে পড়তে দিন।
সুতরাং, যদি আপনি লক্ষ্যটির পাসপোর্ট নম্বর এবং জন্মদিনটি জানতেন তবে মেয়াদোত্তীর্ণের তারিখ জোর করে কয়েক দিন সময় লাগবে। তাত্ক্ষণিক নয়, তবে অসম্ভব নয়।
সর্বাধিক বাণিজ্যিক এনএফসি চিপস সমর্থন 100,000 লিখেছেন পঠনের সংখ্যার কোনও সীমা ছাড়াই। কারও কারও কাছে একটি 24 বিট রিড কাউন্টারও রয়েছে যা প্রতিটি পঠিত প্রচেষ্টার পরে ইনক্রিমেন্ট করে। 16 মিলিয়ন পড়ার পরে, কাউন্টারটি বৃদ্ধি পায় না। এটা পারে নির্দিষ্ট সংখ্যক পাঠের পরে কোনও চিপের পক্ষে স্ব -ধ্বংস করা সম্ভব – তবে পাসপোর্ট চিপগুলি এটি করে এমন কোনও প্রমাণ আমার কোনও প্রমাণ নেই।
এটা
মূল্য
ব্রুট-ফোরসিং একটি পাসওয়ার্ড?
আপনি যদি এমআরজেডকে ব্রুট-ফোর্স করতে চান তবে আপনি পাসপোর্ট-হোল্ডারের জন্ম তারিখটি আবিষ্কার করবেন। আপনিও পাবেন:
- তাদের ছবির একটি ডিজিটাল অনুলিপি,
- তাদের পুরো নাম,
- তাদের লিঙ্গ
,
- যে দেশটি তাদের পাসপোর্ট জারি করেছে, এবং
- তাদের জাতীয়তা।
এগুলি সবই এমন কিছু যা আপনি পাসপোর্টের দিকে তাকিয়ে দেখতে পাচ্ছেন। সুতরাং এটি বৈদ্যুতিনভাবে পড়ার চেষ্টা করার খুব কম মূল্য নেই।
উল্লিখিত হিসাবে, আমি ব্যবহার করছি
আমার একমাত্র লাইব্রেরি ইনস্টল করার দরকার ছিল PYASN1 ব্যবহার pip3 install pyasn1
– আপনার সেটআপ পৃথক হতে পারে।
পাইপাসপোর্ট ডাউনলোড করুন। একই ডিরেক্টরিতে, পাসপোর্টটি পড়তে পারে কিনা তা দেখতে আপনি একটি পরীক্ষা পাইথন ফাইল তৈরি করতে পারেন। এটিতে যা দরকার তা এখানে:
Python 3
from pypassport import epassport, reader # Replace this MRZ with the one from your passport MRZ = "1234567897XXX8412139X2202299<<<<<<<<<<<<<<04" def trace(name, msg): if name == "EPassport": print(name + ": " + msg) r = reader.ReaderManager().waitForCard() ep = epassport.EPassport(r, MRZ) ep.register(trace) ep.readPassport()
আপনার এনএফসি রিডার প্লাগ ইন করুন, এটিতে আপনার পাসপোর্ট রাখুন, উপরের কোডটি চালান। যদি এটি কাজ করে তবে এটি পাসপোর্টে যে সমস্ত ডেটা খুঁজে পেতে পারে তা সহ প্রচুর ডিবাগ তথ্য ছড়িয়ে দেবে।
পাসপোর্টের ডেটার কাঠামো কিছুটা সংশ্লেষিত। স্পেসিফিকেশন ডেটা বিভিন্ন “ডেটা গ্রুপ” এ রাখে – প্রতিটি নিজস্ব আইডি সহ।
দৌড় দ্বারা:
Python 3
ep.keys()
কোন ডেটা গ্রুপ উপলব্ধ তা আপনি দেখতে পারেন। আমার ক্ষেত্রে, ('60', '61', '75', '77')
-
60
সাধারণ অঞ্চল যা কিছু মেটাডেটা ধারণ করে। সেখানে আকর্ষণীয় কিছু নেই।
-
61
ডিজি 1 – পুরো এমআরজেড। এটিতে ধারকের নাম, লিঙ্গ, জাতীয়তা ইত্যাদি রয়েছে
-
77
ডকুমেন্ট সিকিউরিটি অবজেক্ট – এটি আমার জন্য খালি ছিল।
-
75
ডিজি 2 থেকে ডিজি 4 বায়োমেট্রিক টেম্পলেটগুলি – এটিতে চিত্র এবং অন্যান্য মেটাডেটা রয়েছে।
বায়োমেট্রিক্স ডাম্পিং – print( ep("75") )
– মেটাডেটার এই আকর্ষণীয় টুকরো দেয়:
'83': '20190311201345',
'meta': { 'Expression': 'Unspecified',
'EyeColour' : 'Unspecified',
'FaceImageBlockLength': 19286,
'FaceImageType': 'Basic',
'FeatureMask': '000000',
'FeaturePoint': {0: {'FeaturePointCode': 'C1',
'FeatureType': '01',
'HorizontalPosition': 249,
'Reserved': '0000',
'VerticalPosition': 216},
1: {'FeaturePointCode': 'C2',
'FeatureType': '01',
'HorizontalPosition': 141,
'Reserved': '0000',
'VerticalPosition': 214}},
'Features': {},
'Gender': 'Unspecified',
'HairColour': 'Unspecified',
'ImageColourSpace': 'RGB24',
'ImageDataType': 'JPEG',
'ImageDeviceType': 0,
'ImageHeight': 481,
'ImageQuality': 'Unspecified',
'ImageSourceType': 'Static Scan',
'ImageWidth': 385,
'LengthOfRecord': 19300,
'NumberOfFacialImages': 1,
'NumberOfFeaturePoint': 2,
'PoseAngle': '0600B5',
'PoseAngleUncertainty': '000000',
'VersionNumber': b'010'
}
আমি যদি বুঝতে পারি পরীক্ষার দলিল – “বৈশিষ্ট্য পয়েন্টগুলি” চোখের মাঝখানে। লিঙ্গ (সেক্স নয়!) এবং চুলের রঙও রেকর্ড করতে সক্ষম তা দেখতে আকর্ষণীয়। “পোজগল” প্রতিনিধিত্ব করে পিচ, ইয়াও এবং রোল মুখের।
চিত্র সংরক্ষণ করা
পাসপোর্টের চিত্রগুলি জেপিইজি বা সহ সংরক্ষণ করা হয় JPEG2000 এনকোডিং। অত্যন্ত সীমিত মেমরি উপলব্ধ ফটোগুলি ছোট এবং অত্যন্ত সংকুচিত। আমার ছিল মাত্র 19 কেবি।
চিত্রটি সংরক্ষণ করতে, বাইটগুলি ধরুন এবং সেগুলি ডিস্কে ফেলে দিন:
Python 3
photo = ep("75")("A1")("5F2E") with open( "photo.jpg", "wb" ) as f: f.write( photo )
যেমনটি প্রত্যাশা করা হয়েছিল, “ফিচারপয়েন্টস” সমন্বয়গুলি আমার চোখের কেন্দ্রের সাথে মোটামুটিভাবে মিলে যায়। নিফটি!
আমি কয়েকটি ভিন্ন সরঞ্জাম চেষ্টা করেছি। এখানে তালিকাভুক্ত যাতে আপনি আমার মতো একই ভুল করেন না!
এমআরডিড্রেডার
শ্রদ্ধেয় এমআরডিড্রেডার। আমার এনএফসি ডিভাইসটি বীপড হয়েছে, তারপরে এমআরডিড্রেডার বলেছিলেন “কোনও এনএফসি ডিভাইস পাওয়া যায় নি।”
আমি মনে করি এটি কারণ এনএফসি সরঞ্জামগুলি যুগে যুগে আপডেট করা হয়নি।
জিন-ফ্র্যাঙ্কোইস হাউজার্ড এবং অলিভিয়ার রজারের পাইপাসপোর্ট
আমি তাকাল পাইপাসপোর্ট তবে এটি কেবল পাইথন 2 এর জন্য উপলব্ধ।
বিউজিয়ান এর পাইপাসপোর্ট
এই পাইপাসপোর্ট কোনও পাসপোর্ট নির্দিষ্ট সুরক্ষা দুর্বলতার বিরুদ্ধে প্রতিরোধী কিনা তা কেবল পরীক্ষা করে।
ডি-লজিক
ডিজিটাল লজিকের এপাসপোর্ট সফ্টওয়্যার কেবল তাদের হার্ডওয়্যার পাঠকদের সাথে কাজ করে।
অ্যান্ড্রয়েড রিডার
তনানাভের পাসপোর্ট-পাঠক – অ্যান্ড্রয়েডে পুরোপুরি কাজ করে। সুতরাং আমি জানতাম আমার পাসপোর্ট চিপটি পঠনযোগ্য – তবে অ্যাপটি লিনাক্সে চলবে না।
হ্যাঁ, আমি তাই গণনা! বাস্তবিকভাবে, আপনি কারও পাসপোর্ট পড়তে এমআরজেডকে ক্র্যাক করতে সক্ষম হবেন না। তবে আপনার যদি ব্যক্তিগত তথ্য সংগ্রহ করার প্রয়োজন হয়পাসপোর্ট থেকে এত তাড়াতাড়ি করা পুরোপুরি সম্ভব।
এমআরজেড ক মেশিন পঠনযোগ্য জোন – সুতরাং পাঠ্যটি ওসিআর করা মোটামুটি সহজ এবং তারপরে এটি আপনার এনএফসি পাঠকের কাছে পাস করুন।
এমনকি এমআরজেড চলে গেলেও আপনি পাসপোর্টে মুদ্রিত ডেটা থেকে এটি পুনর্গঠন করতে পারেন।
অবশ্যই, এটি জালিয়াতি পাসপোর্টগুলি সনাক্ত করতে সক্ষম হবে না। এটি বাতিল করা হয়েছে কিনা তা দেখার জন্য এটি কোনও ডাটাবেসের বিরুদ্ধে যাচাই করে না। আমি মনে করি না এটি কোনও ক্রিপ্টোগ্রাফিক অসঙ্গতি সনাক্ত করবে।
তবে আপনি যদি কেবল আপনার ভ্রমণের নথিগুলিতে কী দেখতে চান তবে এটি পুরোপুরি কাজ করে।