বার্তা প্রমাণীকরণ কোড

অডিও সুইচ কনফিগার করতে মেসেজ স্ট্রিম ব্যবহার করা হয়, অডিও সুইচ মেসেজ দেখুন। এই গুরুত্বপূর্ণ কনফিগারেশনগুলোর জন্য, প্রোভাইডারকে নিশ্চিত করতে হবে যে মেসেজটি GMSCore (ফাস্ট পেয়ার মডিউল) দ্বারা পাঠানো হয়েছে, সিকারের অন্য কোনো অ্যাপ দ্বারা নয়।

MAC (মেসেজ অথেন্টিকেশন কোড) তৈরি করুন

FP Seeker, HMAC-SHA256 ব্যবহার করে ডিভাইস কনফিগারেশন মেসেজগুলিতে একটি মেসেজ অথেন্টিকেশন কোড যোগ করে। মেসেজটির MAC নিম্নলিখিতের প্রথম ৮ বাইট নিয়ে গঠিত:

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))

যেখানে

  1. অ্যাকাউন্ট কী এবং ৪৮-বাইট শূন্যের সমন্বয়ে K তৈরি হয়।
  2. মেসেজ হলো মেসেজ স্ট্রিমের অতিরিক্ত ডেটা।
  3. concat(session_nonce, message_nonce) এর মাধ্যমে nonce তৈরি করা হয়; সেশন ননস এবং মেসেজ ননস পরবর্তী বিভাগে সংজ্ঞায়িত করা হয়েছে।
  4. opad হলো ৬৪ বাইটের একটি বাইরের প্যাডিং, যা 0x5C মানের পুনরাবৃত্ত বাইট দ্বারা গঠিত।
  5. আইপ্যাডে ৬৪ বাইটের অভ্যন্তরীণ প্যাডিং থাকে, যা 0x36 মানের পুনরাবৃত্ত বাইট দ্বারা গঠিত।

সেশন ননস এবং মেসেজ ননস

রিপ্লে অ্যাটাক প্রতিরোধ করার জন্য, প্রোভাইডারকে নিশ্চিত করতে হবে যে কোনো ননস যেন পুনরাবৃত্তি না হয়। যেহেতু প্রোভাইডার এবং সিকার উভয়ের মধ্যে ক্লক বা কাউন্টার সিনক্রোনাইজেশন বজায় রাখা সহজসাধ্য নয়, তাই প্রোভাইডার সেশন ননস (প্রতিটি সংযোগের জন্য) তৈরি করে, যা সংযোগ চলাকালীন সমস্ত মেসেজের সাথে শেয়ার করা হয়, অন্যদিকে সিকার মেসেজ ননস (প্রতিটি মেসেজের জন্য) তৈরি করে, যা প্রতিটি মেসেজের জন্য র‍্যান্ডমভাবে তৈরি করা হয়। প্রতিটি মেসেজের MAC তৈরি করার জন্য ব্যবহৃত ননস হলো সেশন ননস এবং মেসেজ ননসের সমন্বয়, অর্থাৎ concat(session_nonce, message_nonce)।

আমরা ডিভাইস তথ্য ইভেন্ট গ্রুপে একটি সেশন ননস যোগ করি:

বার্তা গ্রুপের নাম মূল্য
ডিভাইসের তথ্য ইভেন্ট ০x০৩
বার্তার কোড নাম মূল্য
সেশন ননস 0x0A

মেসেজ স্ট্রিম সংযোগ স্থাপন করার সময় সেশন ননস তৈরি করে সিকারের কাছে পাঠানো উচিত:

অক্টেট ডেটা টাইপ বর্ণনা মূল্য
uint8 ডিভাইসের তথ্য ইভেন্ট ০x০৩
uint8 সেশন ননস 0x0A
২ - ৩ uint16 অতিরিক্ত ডেটার দৈর্ঘ্য ০x০০৮
৪ - ১১ সেশন ননস বিভিন্ন

যখন MAC অ্যাড্রেসের প্রয়োজন হয়, তখন মেসেজ পাঠানোর জন্য Seeker-টি মেসেজের সাথে একটি মেসেজ ননস (message nonce) এবং MAC অ্যাড্রেসটি পাঠাবে।

অক্টেট ডেটা টাইপ বর্ণনা মূল্য
uint8 বার্তা গ্রুপ বিভিন্ন
uint8 বার্তা কোড বিভিন্ন
২ - ৩ uint16 অতিরিক্ত ডেটার দৈর্ঘ্য (অতিরিক্ত ডেটার দৈর্ঘ্য + ১৬) বিভিন্ন
৪ - এন অতিরিক্ত তথ্য বিভিন্ন
n + 1 - n + 8 বার্তার ননস বিভিন্ন
এন + ৯ - এন + ১৬ বার্তা প্রমাণীকরণ কোড বিভিন্ন

MAC (মেসেজ প্রমাণীকরণ কোড) যাচাই করুন

মেসেজ অথেন্টিকেশন কোডসহ একটি মেসেজ পাওয়ার পর, প্রোভাইডার সেটিকে জেনারেটিং ফাংশনের মতোই একই ফাংশন ব্যবহার করে যাচাই করবে। অর্থাৎ, প্রাপ্ত MAC অবশ্যই প্রথম ৮ বাইটের সমান হতে হবে।

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))

যেখানে:

  1. concat(account key, 48-byte ZEROs) K তৈরি করা হয়, এবং MAC যাচাই করার জন্য প্রোভাইডারকে অবশ্যই সমস্ত সংরক্ষিত অ্যাকাউন্ট কী পরীক্ষা করতে হবে।
  2. মেসেজ হলো মেসেজ স্ট্রিমের অতিরিক্ত ডেটা (মেসেজ ননস এবং ম্যাক বাদে)।

যদি MAC সঠিক হয়, তাহলে প্রোভাইডার বার্তার নির্দেশনা অনুসরণ করবে। অন্যথায়, প্রোভাইডার ত্রুটির কারণ হিসেবে 0x3 - ভুল বার্তা প্রমাণীকরণ কোডের কারণে অনুমোদিত নয়, এই তথ্যসহ একটি NAK পাঠাবে।