বার্তা প্রমাণীকরণ কোড
বার্তা স্ট্রীমগুলি অডিও সুইচ কনফিগার করতে ব্যবহৃত হয়, অডিও সুইচ বার্তাগুলি দেখুন৷ এই গুরুত্বপূর্ণ কনফিগারেশনগুলির জন্য, প্রদানকারীকে নিশ্চিত করতে হবে যে বার্তাটি GMSCore (ফাস্ট পেয়ার মডিউল) দ্বারা পাঠানো হয়েছে এবং অনুসন্ধানকারীর অন্য কোনও অ্যাপ নয়।
MAC (বার্তা প্রমাণীকরণ কোড) তৈরি করুন
FP সিকার HMAC-SHA256 ব্যবহার করে ডিভাইস কনফিগারেশন বার্তাগুলির জন্য একটি বার্তা প্রমাণীকরণ কোড যোগ করে। বার্তাটির MAC প্রথম 8 বাইট নিয়ে গঠিত:
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))
যেখানে
- K কনক্যাট (অ্যাকাউন্ট কী, 48-বাইট জিরো) দ্বারা তৈরি হয়।
- বার্তা হল মেসেজ স্ট্রিমের অতিরিক্ত ডেটা।
- nonce concat দ্বারা উত্পন্ন হয়(session_nonce, message_nonce); অধিবেশন ননস এবং মেসেজ নন্স নিম্নলিখিত বিভাগে সংজ্ঞায়িত করা হয়েছে।
- opad হল বাইরের প্যাডিং এর 64 বাইট,
0x5C
মূল্যের বার বার বাইট নিয়ে গঠিত। - ipad হল 64 বাইট অভ্যন্তরীণ প্যাডিং, যার মূল্য
0x36
বার বার বাইট রয়েছে।
সেশন ননস এবং মেসেজ নন্স
একটি রিপ্লে আক্রমণ প্রতিরোধ করার জন্য, প্রদানকারীকে নিশ্চিত করতে হবে যে একটি নন্স পুনরাবৃত্তি না হয়। যেহেতু সরবরাহকারী এবং সন্ধানকারী উভয়ের ঘড়ি বা কাউন্টার সিঙ্ক্রোনাইজেশন বজায় রাখা সহজ নয়, তাই প্রদানকারী সেশন নন্স (প্রতি সংযোগ) তৈরি করে, যা সংযোগের সময় সমস্ত বার্তার সাথে ভাগ করা হয়, যখন অনুসন্ধানকারী বার্তাটি ননস (প্রতি বার্তা) তৈরি করে, যা এলোমেলোভাবে প্রতিটি বার্তার জন্য উত্পন্ন. প্রতিটি বার্তার MAC তৈরি করার নন্স হল সেশন ননস এবং মেসেজ নন্সের সমন্বয়, যেমন কনক্যাট(session_nonce, message_nonce)।
আমরা ডিভাইস তথ্য ইভেন্ট গ্রুপে একটি সেশন ননস যোগ করি:
বার্তা গ্রুপের নাম | মান |
---|---|
ডিভাইস তথ্য ইভেন্ট | 0x03 |
বার্তা কোড নাম | মান |
---|---|
অধিবেশন না | 0x0A |
RFCOMM কানেক্ট করার সময় সেশন ননস তৈরি করা উচিত এবং সিকারের কাছে পাঠানো উচিত:
অক্টেট | ডেটা টাইপ | বর্ণনা | মান |
---|---|---|---|
0 | uint8 | ডিভাইস তথ্য ইভেন্ট | 0x03 |
1 | uint8 | অধিবেশন না | 0x0A |
2 - 3 | uint16 | অতিরিক্ত ডেটা দৈর্ঘ্য | 0x0008 |
4 - 11 | অধিবেশন না | পরিবর্তিত হয় |
একটি MAC প্রয়োজন হলে একটি বার্তা পাঠাতে, অনুসন্ধানকারী একটি বার্তা পাঠাবে এবং MAC একসাথে বার্তা পাঠাবে৷
অক্টেট | ডেটা টাইপ | বর্ণনা | মান |
---|---|---|---|
0 | uint8 | বার্তা গ্রুপ | পরিবর্তিত হয় |
1 | uint8 | বার্তা কোড | পরিবর্তিত হয় |
2 - 3 | uint16 | অতিরিক্ত ডেটা দৈর্ঘ্য (অতিরিক্ত ডেটা দৈর্ঘ্য + 16) | পরিবর্তিত হয় |
4 - এন | অতিরিক্ত ডেটা | পরিবর্তিত হয় | |
n + 1 - n + 8 | বার্তা না | পরিবর্তিত হয় | |
n + 9 - n + 16 | বার্তা প্রমাণীকরণ কোড | পরিবর্তিত হয় |
MAC যাচাই করুন (বার্তা প্রমাণীকরণ কোড)
বার্তা প্রমাণীকরণ কোড সহ একটি বার্তা পাওয়ার পরে, প্রদানকারী জেনারেটিং ফাংশনের মতো একই ফাংশন ব্যবহার করে এটি যাচাই করবে৷ অর্থাৎ, প্রাপ্ত MAC প্রথম 8 বাইটের সমান হওয়া উচিত
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))
কোথায়:
- K কে
concat(account key, 48-byte ZEROs)
দ্বারা তৈরি করা হয় এবং MAC যাচাই করার জন্য প্রদানকারী সমস্ত সঞ্চিত অ্যাকাউন্ট কীগুলিকে অতিক্রম করবে৷ - বার্তা হল মেসেজ স্ট্রীমের অতিরিক্ত ডেটা (মেসেজ ননস এবং ম্যাক বাদে)।
যদি MAC সঠিক হয়, তাহলে প্রদানকারী বার্তার নির্দেশ অনুসরণ করবে। অন্যথায়, প্রদানকারী ত্রুটির কারণ সহ একটি NAK পাঠাবে, 0x3 - ভুল বার্তা প্রমাণীকরণ কোডের কারণে অনুমোদিত নয়।