এর ব্যবহারিক আইওটি ক্রিপ্টোগ্রাফি এস্প্রেসিফ ESP8266 চিপসেট তিনটি ডলারের ‘ইন্টারনেটের’ উন্নয়ন বোর্ডের একটি অর্থনৈতিক বাস্তবতা তৈরি করে। জনপ্রিয় স্বয়ংক্রিয় ফার্মওয়্যার-বিল্ডিং সাইট nodemcu-builds অনুসারে, গত 60 দিনের মধ্যে 13,341 কাস্টম ফার্মওয়্যারটি সেই প্ল্যাটফর্মের জন্য তৈরি হয়েছে। এর মধ্যে মাত্র 19% এসএসএল সমর্থন রয়েছে, এবং 10% ক্রিপ্টোগ্রাফি মডিউল অন্তর্ভুক্ত।
আমরা প্রায়শই আইওটি খাতে নিরাপত্তার অভাবের সমালোচনা করছি, এবং প্রায়শই বোটনেটস এবং অন্যান্য হামলাগুলি ঢেকে রাখি, কিন্তু আমরা কি আমাদের প্রকল্পগুলি একই মানদণ্ডে দাবী করব? আমরা কি সমস্যাটি চিহ্নিত করতে পারব না, নাকি আমরা সমাধানটির অংশ হতে পারি?
এই নিবন্ধটি AES এনক্রিপশন এবং হ্যাশ অনুমোদন প্রয়োগের উপর ফোকাস করবে এমকিউটিটি প্রোটোকলকে জনপ্রিয় ESP8266 চিপ চলমান nodemcu ফার্মওয়্যার ব্যবহার করে। আমাদের উদ্দেশ্য একটি কপি / পেস্ট প্যানেসি প্রদান করা হয় না, তবে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে ধাপে। ফলাফল এমন একটি সিস্টেম যা শেষ-শেষ এনক্রিপ্ট এবং প্রমাণিত হয়, যা পথের সাথে eavesdropping প্রতিরোধ এবং SSL উপর নির্ভর করে বৈধ ডেটা spoofing প্রতিরোধ।
আমরা সচেতন যে আরো শক্তিশালী প্ল্যাটফর্ম রয়েছে যা সহজেই এসএসএলকে সমর্থন করতে পারে (যেমন রাস্পবেরি পাই, কমলা পাই, বন্ধুত্বপূর্ণ), তবে আমাদের মধ্যে বেশিরভাগই সবচেয়ে সস্তা হার্ডওয়্যার দিয়ে শুরু করা যাক এবং আমাদের অনেক প্রকল্পের জন্য উপযুক্ত একটি প্রোটোকল । AES আপনি যদি প্রয়োজন হয় তবে আপনি কোনও AVR প্রয়োগ করতে পারেন।
তত্ত্ব
এমকিউটিটি একটি লাইটওয়েট মেসেজিং প্রোটোকল যা টিসিপি / আইপি শীর্ষে চলছে এবং প্রায়শই আইওটি প্রকল্পগুলির জন্য ব্যবহৃত হয়। ক্লায়েন্ট ডিভাইসগুলি সাবস্ক্রাইব করুন বা বিষয়গুলিতে প্রকাশ করুন (E.G. সেন্সর / তাপমাত্রা / রান্নাঘর), এবং এই বার্তাগুলি একটি এমকিউটিটি ব্রোকার দ্বারা রিলিজ করা হয়। এমকিউটিটি সম্পর্কে আরও তথ্য তাদের ওয়েবপৃষ্ঠায় বা আমাদের নিজস্ব শুরু-শুরু সিরিজে পাওয়া যায়।
MQTT প্রোটোকলের ব্যবহারকারীর নাম / পাসওয়ার্ড প্রমাণীকরণের বাইরে কোন অন্তর্নির্মিত নিরাপত্তা বৈশিষ্ট্য নেই, তাই এটি SSL এর সাথে একটি নেটওয়ার্ক জুড়ে এনক্রিপ্ট এবং প্রমাণীকরণ করা সাধারণ। যাইহোক, SSL এর পরিবর্তে SSP8266 এর জন্য দাবি করা যেতে পারে এবং যখন সক্ষম হয়, তখন আপনি আপনার অ্যাপ্লিকেশনের জন্য অনেক কম মেমরি দিয়ে চলেছেন। লাইটওয়েট বিকল্প হিসাবে, আপনি কেবলমাত্র ডেটা পেলোড প্রেরণ করা ডেটা পেলোড এনক্রিপ্ট করতে পারেন এবং প্রমাণীকরণের জন্য একটি সেশন আইডি এবং হ্যাশ ফাংশন ব্যবহার করতে পারেন।
এটি করার জন্য একটি সহজবোধ্য উপায়টি লুয়া এবং নোডেমকু ক্রিপ্টো মডিউল ব্যবহার করছে, যার মধ্যে CBC মোডে এএইএস অ্যালগরিদমের পাশাপাশি এইচএমএসি হ্যাশ ফাংশন রয়েছে। AES এনক্রিপশন ব্যবহার করে সঠিকভাবে CipherText তৈরি করার জন্য তিনটি জিনিস প্রয়োজন: একটি বার্তা, একটি কী এবং একটি সূচনা ভেক্টর (iv)। বার্তা এবং কী সহজবোধ্য ধারণা, কিন্তু প্রাথমিকীকরণ ভেক্টর কিছু আলোচনা মূল্য।
যখন আপনি একটি স্ট্যাটিক কী দিয়ে AES এ একটি বার্তা এনকোড করেন, তখন এটি সর্বদা একই আউটপুট তৈরি করবে। উদাহরণস্বরূপ, “USERNAMASPASSWORD” বার্তাটি “123456789020ABCDEF” এর সাথে এনক্রিপ্ট করা বার্তাটি “E40D86C04D723AFF” এর ফলাফল তৈরি করতে পারে। আপনি যদি একই কী এবং বার্তা দিয়ে আবার এনক্রিপশনটি চালান তবে আপনি একই ফলাফল পাবেন। এটি আপনাকে অনেকগুলি সাধারণ ধরনের আক্রমণ, বিশেষত প্যাটার্ন বিশ্লেষণ এবং রিপ্লে হামলাগুলিতে খোলে।
একটি প্যাটার্ন বিশ্লেষণ আক্রমণে, আপনি জ্ঞানটি ব্যবহার করেন যা একটি প্রদত্ত ডেটা সর্বদা একই ciphertext উপস্থাপন করবে যা বিভিন্ন বার্তাগুলির উদ্দেশ্য বা সামগ্রীটি আসলে গোপন কীটি জানে না। উদাহরণস্বরূপ, যদি অন্য সকল যোগাযোগের পূর্বে বার্তাটি “E40D86C04D723AFF” পাঠানো হয় তবে এটি একটি লগইনটি দ্রুত অনুমান করতে পারে। সংক্ষেপে, যদি লগইন সিস্টেমটি সরল থাকে, তবে সেই প্যাকেটটি প্রেরণ করা (একটি রিপ্লে আক্রমণ) প্রেরণ করা একটি অনুমোদিত ব্যবহারকারী হিসাবে নিজেকে সনাক্ত করতে যথেষ্ট হতে পারে এবং বিশৃঙ্খলা ensues।
IVS প্যাটার্ন বিশ্লেষণ আরো কঠিন করে তোলে। একটি চতুর্থাংশটি কীটির সাথে প্রেরিত ডেটা একটি টুকরা যা শেষ সিফেরটেক্সট ফলাফল সংশোধন করে। নামটি প্রস্তাব করে, এটি ডেটা প্রবেশ করার আগে এনক্রিপশন অ্যালগরিদমের রাষ্ট্রটি আরম্ভ করে। আইএভিটি প্রতিটি বার্তা পাঠানোর জন্য আলাদা হতে হবে যাতে ডেটাটি বিভিন্ন সিফেরটেক্সটের মধ্যে এনক্রিপ্ট করে এবং কিছু সাইফার (AES-CBC এর মতো) এটিকে অনির্দেশ্য হতে হবে – এটি সম্পন্ন করার জন্য একটি বাস্তব উপায়টি কেবলমাত্র এটি র্যান্ডমাইজ করার জন্য এটি কেবলমাত্র র্যান্ডমাইজ করা। আইভিএস গোপন রাখা হবে না, কিন্তু এটি একটি উপায় তাদের obfuscate সাধারণত।
এটি প্যাটার্ন বিশ্লেষণের বিরুদ্ধে সুরক্ষিত হলেও এটি পুনরাবৃত্তি আক্রমণের সাথে সাহায্য করে না। উদাহরণস্বরূপ, এনক্রিপ্ট করা তথ্যের একটি প্রদত্ত সেটটি পুনঃপ্রবর্তন করা এখনও ফলাফলটি সদৃশ করবে। যে প্রতিরোধ করতে, আমরা প্রেরক অনুমোদন করতে হবে। আমরা প্রতিটি বার্তা জন্য একটি পাবলিক, pseudorandomly উত্পন্ন সেশন আইডি ব্যবহার করব। এই সেশন আইডি একটি এমকিউটিটি বিষয় পোস্ট করে প্রাপ্তির ডিভাইস দ্বারা তৈরি করা যেতে পারে।
কয়েকটি সাধারণ ব্যবহারের ক্ষেত্রে এই ধরনের আক্রমণগুলি প্রতিরোধ করা গুরুত্বপূর্ণ। ইন্টারনেট নিয়ন্ত্রিত চুলা বিদ্যমান, এবং সন্দেহজনক ইউটিলিটি একপাশে, যদি তারা অনিরাপদ কমান্ডগুলি ব্যবহার না করে তবে এটি চমৎকার হবে। দ্বিতীয়ত, আমি যদি একশত সেন্সর থেকে ডেটালগিং করছি, তবে আমি যে কেউ আমার ডেটাবেসটি আবর্জনা দিয়ে ভর্তি করতে চাই না।
ব্যবহারিক এনক্রিপশন
Nodemcu উপর উপরে বাস্তবায়ন কিছু প্রচেষ্টা প্রয়োজন। আপনি আপনার প্রয়োজনীয় অন্য কোনও ছাড়াও ‘ক্রিপ্টো’ মডিউল অন্তর্ভুক্ত করার জন্য ফার্মওয়্যারটি সংকলন করতে হবেআপনার আবেদন জন্য ire। SSL সমর্থন প্রয়োজন হয় না।
প্রথমত, অনুমান করা যাক আপনি নিম্নলিখিত মত কিছু দিয়ে এমকিউটিটি ব্রোকারের সাথে সংযুক্ত হন। আপনি জিনিসগুলি পরিষ্কার রাখার জন্য ক্রিপ্টোগ্রাফি থেকে এটি একটি পৃথক ফাংশন হিসাবে এটি বাস্তবায়ন করতে পারেন। ক্লায়েন্ট একটি sessionid চ্যানেলে সাবস্ক্রাইব করে, যা যথাযথভাবে দীর্ঘ, ছদ্মবেশী সেশন আইডি প্রকাশ করে। আপনি তাদের এনক্রিপ্ট করতে পারেন, কিন্তু এটি প্রয়োজনীয় নয়।
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
m = mqtt.client (& quot; ক্লায়েন্ট & quot;, 120)
এম: সংযোগ (& quot; myserver.com & quot ;, 1883, 0,
ফাংশন (ক্লায়েন্ট)
মুদ্রণ (& quot; সংযুক্ত & quot;)
ক্লায়েন্ট: সাবস্ক্রাইব করুন (& quot; mytopic / sessionid & quot;, 0,
ফাংশন (ক্লায়েন্ট) মুদ্রণ (& quot; সাফল্য সাবস্ক্রাইব করুন & quot;) শেষ
)
শেষ,
ফাংশন (ক্লায়েন্ট, কারণ)
মুদ্রণ (& quot; ব্যর্থ কারণ: & quot; .. কারণ)
শেষ
)
এম: অন (& quot; বার্তা & quot;, ফাংশন (ক্লায়েন্ট, বিষয়, সেশনআইডি) শেষ)
চলন্ত, নোড আইডি তথ্য উত্স সনাক্ত করতে সহায়তা করার জন্য একটি সুবিধাজনক উপায়। আপনি যে কোনও স্ট্রিংটি ব্যবহার করতে পারেন তবে: NODEID = NODE.CHIPID ()।
তারপর, আমরা একটি স্ট্যাটিক প্রারম্ভিক ভেক্টর এবং একটি কী সেট আপ। এটি শুধুমাত্র প্রতিটি বার্তা সহ পাঠানো র্যান্ডমাইজড ইনিশিয়ালাইজেশন ভেক্টর obfuscate ব্যবহার করা হয়, কোন তথ্যের জন্য ব্যবহৃত হয় না। আমরা ডেটা জন্য একটি পৃথক কী নির্বাচন করুন। এই কীগুলি 16-বিট হেক্স, শুধু আপনার সাথে তাদের প্রতিস্থাপন করুন।
অবশেষে আমরা একটি হ্যাশ ফাংশন জন্য একটি পাসফ্রেজ প্রয়োজন হবে আমরা পরে ব্যবহার করা হবে। যুক্তিসঙ্গত দৈর্ঘ্যের একটি স্ট্রিং জরিমানা।
1.
2.
3.
4.
staticiv = & quot; abcdef2345678901 & quot;
আইভি = & quot; 2345678901Abcdef & quot;
DatAkey = & quot; 0123456789ABCDEF & quot;
পাসফ্রেজ = & quot; mypassphrase & quot;
আমরা আপনাকে ডেটা কিছু উত্স আছে অনুমান করা হবে। এই উদাহরণের জন্য এটি ADC থেকে একটি মান পড়তে হবে। তথ্য = adc.read (0)
এখন, আমরা একটি ছদ্মবেশী সূচনা ভেক্টর তৈরি করি। একটি 16-ডিজিট হেক্স নম্বরটি PseudorAndom নম্বর ফাংশনের জন্য খুব বড়, তাই আমরা এটি দুটি অর্ধগুলিতে তৈরি করি (16 ^ 8 বিয়োগ 1) (16 ^ 8 বিয়োগ 1) এবং তাদের concatenate।
1.
2.
3.
4.
5.
HACH1 = NODE.RANDOM (4294967295)
HACH2 = NODE.RANDOM (4294967295)
I = string.format (& quot;% 8x & quot;, অর্ধেক)
V = string.format (& quot;% 8x & quot;, অর্ধেক)
iv = আমি .. ভি
আমরা এখন প্রকৃত এনক্রিপশন চালাতে পারি। এখানে আমরা বর্তমান প্রারম্ভিক ভেক্টর, নোড আইডি এবং সেন্সর ডেটা এক টুকরা এনক্রিপ্ট করছি।
1.
2.
3.
encrypted_iv = crypto.encrypt (& quot; aes-cbc & quot;, আইভকি, চতুর্থ, স্ট্যাটিকিভ)
encrypted_nodeid = crypto.encrypt (& quot; aes-cbc & quot; datakey, নোডিড, IV)
encrypted_data = crypto.encrypt (& quot; aes-cbc & quot;, datakey, তথ্য, IV)
এখন আমরা প্রমাণীকরণের জন্য হ্যাশ ফাংশন প্রয়োগ করি। প্রথমে আমরা একটি একক মেসেজে নোডিড, চতুর্থ, তথ্য এবং সেশন আইডিটি একত্রিত করি, তারপরে আমরা পূর্বে সংজ্ঞায়িত পাসফ্রেজ ব্যবহার করে একটি HMAC SHA1 হ্যাশ গণনা করি। আমরা এটি কোনও ডিবাগিংয়ের জন্য এটি আরও বেশি মানবিক-পাঠযোগ্য করতে হেক্সে রূপান্তর করি।
1.
2.
FullMessage = নোডিড .. IV .. ডেটা .. সেশনআইডি
HMAC = CRYPTO.TOHEX (CRYPTO.HMAC (& quot; Sha1 & quot;, FullMessage, পাসফ্রেজ))
এখন যে উভয় এনক্রিপশন এবং প্রমাণীকরণ চেকগুলি রয়েছে, আমরা এই সমস্ত তথ্যটি কিছু কাঠামোর মধ্যে রাখতে পারি এবং এটি পাঠাতে পারি। এখানে, আমরা কমাটি পৃথক মানের ব্যবহার করব কারণ এটি সুবিধাজনক:
1.
2.
payload = table.concat ({এনক্রিপ্টড_আইভি, ঈদ, ডাটা 1, এইচএমএইচ}, & quot;, & quot;)
এম: প্রকাশ করুন (& quot; yourmqtttopic & quot;, পেলোড, 2, 1, ফাংশন (ক্লায়েন্ট) পি = & quot; প্রেরিত & quot; মুদ্রণ (পি) শেষ)
যখন আমরা একটি প্রকৃত nodemcu উপর উপরের কোডটি চালাচ্ছি, তখন আমরা এটির মতো কিছু আউটপুট পেতে পারি:
1D54DD1AF0F75A91A00D4DCD8F4AD28D,
D1A0B14D187C5ADFC948DFD77C2B2EE5,
564633A4A053153BCBD6ED25370346D5,
C66697DF7E7D467112757C841BFB6BCE051D6289.
একসাথে, এনক্রিপশন প্রোগ্রামটি নিম্নরূপ (স্বচ্ছতার জন্য বাদ দেওয়া MQTT বিভাগগুলি):
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
nodeid = node.chipid ()
staticiv = & quot; abcdef2345678901 & quot;
আইভি = & quot; 2345678901Abcdef & quot;
DatAkey = & quot; 0123456789ABCDEF & quot;
পাসফ্রেজ = & quot; mypassphrase & quot;
তথ্য = adc.read (0)
HACH1 = NODE.RANDOM (4294967295)
HACH2 = NODE.RANDOM (4294967295)
I = string.format (& quot;% 8x & quot;, অর্ধেক)
V = string.format (& quot;% 8x & quot;, অর্ধেক)
iv = আমি .. ভি
encrypted_iv = crypto.encrypt (& quot; aes-cbc & quot;, আইভকি, চতুর্থ, স্ট্যাটিকিভ)
encrypted_nodeid = crypto.encrypt (& quot; aes-cbc & quot; datakey, নোডিড, IV)
encrypted_data = crypto.encrypt (& quot; aes-cbc & quot;, datakey, তথ্য, IV)
FullMessage = নোডিড .. IV .. ডেটা .. সেশনআইডি
HMAC = CRYPTO.TOHEX (CRYPTO.HMAC (& quot; Sha1 & quot;, FullMessage, পাসফ্রেজ))
payload = table.concat ({এনক্রিপ্টড_আইভি, এনক্রিপ্টড_নিডিড, এনক্রিপ্টড_ডটা, এইচএমএক্স}, & quot;, & quot;)
ডিক্রিপশন
এখন, আপনার এমকিউটিটি ব্রোকার জানেন না যে তথ্য এনক্রিপ্ট করা হয় না, এটি কেবল এটি পাস করে। সুতরাং, আপনার অন্যান্য এমকিউটিটি ক্লায়েন্টগুলি বিষয়টির সাবস্ক্রাইব করা তথ্যটি কীভাবে ডিক্রিপ্ট করতে হবে তা জানতে হবে। Nodemcu উপর এই বরং সহজ। শুধু কমা মাধ্যমে স্ট্রিং মধ্যে প্রাপ্ত তথ্য বিভক্ত, এবং নীচের মত কিছু করতে। উল্লেখ্য এই শেষটি সেশন আইডি তৈরি করবে তাই ইতিমধ্যে এটি জানে।
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
staticiv = & quot; abcdef2345678901 & quot;
আইভি = & quot; 2345678901Abcdef & quot;
DatAkey = & quot; 0123456789ABCDEF & quot;
পাসফ্রেজ = & quot; mypassphrase & quot;
iv = crypto.decrypt (& quot; aes-cbc & quot;, আইভকি, এনক্রিপ্টড_আইভি, স্ট্যাটিকিভ)
nodeid = crypto.decrypt (& quot; aes-cbc & quওটি;, ডেটাকে, এনক্রিপ্টড_নোডিড, চতুর্থ)
তথ্য = crypto.decrypt (& quot; aes-cbc & quot;, ডেটাকে, এনক্রিপ্টেড_ডটা, চতুর্থ)
FullMessage = নোডিড .. IV .. ডেটা .. সেশনআইডি
HMAC = CRYPTO.TOHEX (CRYPTO.HMAC (& quot; Sha1 & quot;, FullMessage, পাসফ্রেজ))
তারপরে প্রাপ্ত এবং গণনা করা HMAC তুলনা করুন, এবং ফলাফলটি নির্বিশেষে, একটি নতুন তৈরি করে সেই সেশন আইডিটি অবৈধ করে।
একবার, পাইথন মধ্যে
সামান্য বিভিন্নতার জন্য, আমরা কীভাবে পাইথন-তে ডিক্রিপশন পরিচালনা করব, যদি আমরা একই ভার্চুয়াল মেশিনে একটি এমকিউটিটি ক্লায়েন্ট ছিলাম, যা ডেটা বিশ্লেষণ করে বা ডেটাবেসে এটি সংরক্ষণ করে। PAHHON এর জন্য চমৎকার PAHO MQTT ক্লায়েন্টের মতো কিছু থেকে আপনি একটি স্ট্রিং “পেলোড” হিসাবে ডেটা পেয়েছেন অনুমান করুন।
এই ক্ষেত্রে এটি হেক্স এনকোডে এনক্রিপ্ট করা ডেটা এনক্রিপ্টেড ডেটা প্রেরণ করার আগে এনক্রিপ্ট করার আগে সুবিধাজনক। তাই NODEMCU এ আমরা সমস্ত এনক্রিপ্টেড ডেটা হেক্সে রূপান্তর করি, উদাহরণস্বরূপ: encrypted_iv = crypto.tohx (crypto.encrypt (“AES-CBC”, আইভকি, চতুর্থ, স্ট্যাটিকিভ))
একটি র্যান্ডমাইজড সেশনআইডি প্রকাশ করা নীচের আলোচনা করা হয় না, তবে OS.URANDOM () এবং PAHO MQTT ক্লায়েন্ট ব্যবহার করে যথেষ্ট সহজ। নিম্নরূপ ডিক্রিপশন পরিচালিত হয়:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
২9.
30.
31.
32.
33.
34.
35.
Crypto.Cipher থেকে AES আমদানি
আমদানি বিন্যাসি
Crypto.hash থেকে আমদানি শা, HMAC
# সব কী সংজ্ঞায়িত
আইভি = ‘2345678901Abcdef’
DatAkey = ‘0123456789ABCDEF’
staticiv = ‘abcdef2345678901’
পাসফ্রেজ = ‘মাইপাসফ্রেজ’
# একটি তালিকা থেকে প্রাপ্ত স্ট্রিং রূপান্তর
তথ্য = payload.split (& quot;, & quot;)
# তালিকা আইটেম নিষ্কাশন
encrypted_iv = binascii.unhexlify (ডেটা [0])
encrypted_nodeid = binascii.unhexlify (ডেটা [1])
encrypted_data = binascii.unhexlify (তথ্য [2])
adding_hash = binascii.unhexlify (তথ্য [3])
# প্রারম্ভিক ভেক্টর ডিক্রিপ্ট করুন
iv_decryption_suite = aes.new (ivkey, aes.mode_cbc, staticiv)
iv = iv_decryption_suite.decrypt (এনক্রিপ্টেড_আইভি)
# সূচনা ভেক্টর ব্যবহার করে ডেটা ডিক্রিপ্ট করুন
id_decryption_suite = aes.new (datakey, aes.mode_cbc, iv)
nodeid = id_decryption_suite.decrypt (encrypted_nodeid)
data_decryption_suite = aes.new (datakey, aes.mode_cbc, iv)
sensordata = data_decryption_suite.decrypt (encrypted_data)
# প্রাপ্ত_হ্যাশের সাথে তুলনা করার জন্য # গণনা হ্যাশ ফাংশন
fullmessage = sjoinin ([নোডিড, চতুর্থ, sensordata, sessionid])
HMAC = HMAC.NEW (পাসফ্রেজ, FURMESSAGE, SHA)
computed_hash = hmac.hexdigest ()
# দেখুন docs.python.org/2/library/hmac.html নিরাপদভাবে হ্যাশস তুলনা করার জন্য কিভাবে
শেষ, শুরু
এখন আমাদের একটি সিস্টেম আছে যা একটি এমকিউটিটি সার্ভারের মাধ্যমে অন্য ESP8266 ক্লায়েন্ট বা একটি বৃহত্তর সিস্টেম চলমান পাইথন এর মাধ্যমে এনক্রিপ্ট করা, প্রমাণিত বার্তা পাঠায়। আপনি যদি নিজেকে এই বাস্তবায়ন করেন তবে আপনার সাথে যুক্ত হওয়ার জন্য আপনার জন্য এখনও গুরুত্বপূর্ণ আলগা শেষ রয়েছে। কীগুলি সব ESP8266S এর ফ্ল্যাশ মেমরিতে সংরক্ষিত হয়, তাই আপনি বিপরীত প্রকৌশল প্রতিরোধে এই ডিভাইসগুলিতে অ্যাক্সেস নিয়ন্ত্রণ করতে চান। কীগুলি কম্পিউটারে পাথরের কোডে কোডে সংরক্ষণ করা হয়, এখানে পাইথন চলছে। উপরন্তু, আপনি সম্ভবত প্রতিটি ক্লায়েন্টকে একটি ভিন্ন কী এবং পাসফ্রেজ থাকতে চান। যে প্রয়োজন হলে নিরাপদ এবং সম্ভাব্য আপডেট রাখা গোপন উপাদান অনেক। মূল বিতরণ সমস্যা সমাধানের উদ্দেশ্য প্রেরিত পাঠকটির জন্য একটি ব্যায়াম হিসাবে বাকি আছে।
এবং একটি ক্লোজিং নোটে, ক্রিপ্টোগ্রাফি সম্পর্কিত একটি নিবন্ধ লেখার বিষয়ে ভয়ংকর জিনিসগুলির মধ্যে একটি হল ইন্টারনেটে ভুল হওয়ার সম্ভাবনা। এটি এইচএমএকে সহ পরীক্ষিত-এবং-সত্য AES-CBC মোডের একটি মোটামুটি সহজবোধ্য অ্যাপ্লিকেশন, তাই এটি বেশ কঠিন হওয়া উচিত। তবুও, যদি আপনি উপরের কোন আকর্ষণীয় ত্রুটি খুঁজে পান তবে দয়া করে মন্তব্যগুলিতে আমাদের জানান।