বৈশিষ্ট্য

ফাস্ট পেয়ার সার্ভিস

ফাস্ট পেয়ার প্রোভাইডারের নিম্নলিখিত GATT পরিষেবা থাকবে।

পরিষেবা UUID
ফাস্ট পেয়ার সার্ভিস 0xFE2C

এই পরিষেবাটির নিম্নলিখিত বৈশিষ্ট্য থাকবে।

ফাস্ট পেয়ার সার্ভিসের বৈশিষ্ট্য এনক্রিপ্টেড অনুমতি UUID
মডেল আইডি না পড়ুন FE2C1233-8366-4814-8EB0-01DE32100BEA
কী-ভিত্তিক জোড়া না লিখে জানান FE2C1234-8366-4814-8EB0-01DE32100BEA
পাসকি না লিখে জানান FE2C1235-8366-4814-8EB0-01DE32100BEA
অ্যাকাউন্ট কী না লিখুন FE2C1236-8366-4814-8EB0-01DE32100BEA

ডিভাইস তথ্য পরিষেবা

ফাস্ট পেয়ার প্রোভাইডারের ডিভাইস ইনফরমেশন সার্ভিসও সমর্থন করা উচিত।

পরিষেবা UUID
ডিভাইস তথ্য পরিষেবা 0x180A

ফাস্ট পেয়ার সিকার নিম্নলিখিত বৈশিষ্ট্যগুলো ব্যবহার করে।

নাম এনক্রিপ্টেড অনুমতি UUID
ফার্মওয়্যার সংস্করণ না পড়ুন 0x2A26

বৈশিষ্ট্য: মডেল আইডি

এই বৈশিষ্ট্যটি সিকারকে, ডিভাইসটি ডিসকভারেবল মোডে বিজ্ঞাপন দেওয়ার সময় ছাড়াও, প্রয়োজন অনুযায়ী মডেল আইডি পড়ার সুযোগ দেয়। এটির সর্বদা নিম্নলিখিত ডেটা ফেরত দেওয়া উচিত:

অক্টেট ডেটা টাইপ বর্ণনা মূল্য
০ - ২ uint24 মডেল আইডি বিভিন্ন

বৈশিষ্ট্য: কী-ভিত্তিক জোড় বাঁধা

এই বৈশিষ্ট্যটি কী-ভিত্তিক পেয়ারিং পদ্ধতি নিয়ন্ত্রণ করে। এই পদ্ধতিতে, সিকার এবং প্রোভাইডার উভয়ের কাছেই একটি পূর্ব-শেয়ার করা কী আছে কিনা তা যাচাই করার মাধ্যমে একটি নির্দিষ্ট স্তরের বিশ্বাসযোগ্যতা স্থাপন করা হয়। প্রতিটি ক্ষেত্রে কী-টি ভিন্ন হয়:

  • কেস ১: প্রি-শেয়ার্ড কী-টি অ্যান্টি-স্পুফিং পাবলিক/প্রাইভেট কী পেয়ার এবং সিকারের নিজস্ব পাবলিক/প্রাইভেট কী পেয়ারের উপর ভিত্তি করে তৈরি, যা প্রতিটি পেয়ারিং প্রচেষ্টার জন্য পরিবর্তিত হবে।

    • প্রোভাইডারটি পেয়ারিং মোডে আছে।
    • অনুসন্ধানকারী যাচাই করে যে প্রদানকারীর কাছে অ্যান্টি-স্পুফিং প্রাইভেট কী-টি রয়েছে।

    উল্লেখ্য যে, পেয়ারিং মোডে থাকা অবস্থায়, প্রোভাইডারটি অবশ্যই স্বাভাবিক উপায়েও পেয়ার করতে পারে, যেমন—এমন কোনো ডিভাইসের সাথে পেয়ার করার জন্য যা ফাস্ট পেয়ারের কী-ভিত্তিক পেয়ারিং সমর্থন করে না।

  • ক্ষেত্র ২: প্রি-শেয়ার্ড কী হলো অ্যাকাউন্ট কীগুলোর মধ্যে একটি।

    • প্রোভাইডার সাধারণত পেয়ারিং মোডে থাকে না। (কিন্তু এটি কোনো আবশ্যিক শর্ত নয়—পেয়ারিং মোডে থাকা অবস্থাতেও প্রোভাইডারের অ্যাকাউন্ট কী ব্যবহার করার সুবিধা থাকা উচিত।)
    • অনুসন্ধানকারী এবং প্রদানকারী প্রত্যেকেই যাচাই করে দেখেন যে অপরজনের কাছে অ্যাকাউন্ট কী-টি রয়েছে।

যেহেতু উভয় ক্ষেত্রই ব্যবহৃত প্রি-শেয়ার্ড কী ছাড়া অত্যন্ত সাদৃশ্যপূর্ণ, তাই কার্যপ্রণালীতে সেগুলোকে একত্রিত করা হয়।

ডেটা ফরম্যাট

প্রতিটি ফরম্যাট কীভাবে ব্যবহার করা হয়, তার কার্যপ্রণালী দেখুন।

অক্টেট ডেটা টাইপ বর্ণনা মূল্য বাধ্যতামূলক?
০ - ১৫ uint128 এনক্রিপ্টেড অনুরোধ বিভিন্ন বাধ্যতামূলক
১৬ - ৭৯ পাবলিক কী বিভিন্ন ঐচ্ছিক

সারণি ১.১: এনক্রিপ্টেড অনুরোধ, যা অনুসন্ধানকারী দ্বারা বৈশিষ্ট্যটিতে লেখা হয়েছে।

অক্টেট ডেটা টাইপ বর্ণনা মূল্য বাধ্যতামূলক?
০ uint8 বার্তার ধরণ 0x00 = কী-ভিত্তিক পেয়ারিং অনুরোধ বাধ্যতামূলক
১ uint8 পতাকা
  • বিট ০ (MSB): অপ্রচলিত এবং Seeker দ্বারা উপেক্ষিত।
  • বিট ১: যদি অনুসন্ধানকারী প্রদানকারীকে বন্ডিং শুরু করার জন্য অনুরোধ করে এবং এই অনুরোধে অনুসন্ধানকারীর BR/EDR ঠিকানা থাকে, তাহলে এর মান হবে ১। অন্যথায় এর মান হবে ০।
  • বিট ২: ১, যদি অনুসন্ধানকারী অনুরোধ করেন যে প্রদানকারী বিদ্যমান নামটি অবহিত করবে। অন্যথায় ০।
  • বিট ৩: ১ যদি এটি পূর্ববর্তী তারিখ থেকে অ্যাকাউন্ট কী লেখার জন্য হয়। অন্যথায় ০।
  • বিট ৪ থেকে ৭ ভবিষ্যৎ ব্যবহারের জন্য সংরক্ষিত এবং এগুলো উপেক্ষা করা হবে।
বিভিন্ন বাধ্যতামূলক
২ - ৭ uint48 হয়:
  • প্রদানকারীর বর্তমান BLE ঠিকানা
  • প্রদানকারীর সর্বজনীন ঠিকানা
বিভিন্ন বাধ্যতামূলক
৮ - ১৩ uint48 অনুসন্ধানকারীর বিআর/ইডিআর ঠিকানা বিভিন্ন শুধুমাত্র ফ্ল্যাগ বিট ১ বা ৩ সেট করা থাকলেই উপস্থিত থাকবে।
এন - ১৫ এলোমেলো মান (লবণ) বিভিন্ন বাধ্যতামূলক

সারণি ১.২.১: মূল অনুরোধ (টাইপ 0x00)। সারণি ১.১- এ থাকা এনক্রিপ্টেড অনুরোধ থেকে ডিক্রিপ্ট করা হয়েছে।

অক্টেট ডেটা টাইপ বর্ণনা মূল্য বাধ্যতামূলক?
০ uint8 বার্তার ধরণ 0x10 = পদক্ষেপের অনুরোধ বাধ্যতামূলক
১ uint8 পতাকা বিভিন্ন বাধ্যতামূলক
২ - ৭ uint48 হয়:
  • প্রদানকারীর বর্তমান BLE ঠিকানা
  • প্রদানকারীর সর্বজনীন ঠিকানা
বিভিন্ন বাধ্যতামূলক
৮ uint8 বার্তা গ্রুপ বিভিন্ন ফ্ল্যাগস বিট ০ সেট করা থাকলে বাধ্যতামূলক।
৯ uint8 বার্তা কোড বিভিন্ন ফ্ল্যাগস বিট ০ সেট করা থাকলে বাধ্যতামূলক।
১০ uint8 পতাকার উপর নির্ভর করে:
  • বিট ০ সেট করা আছে: অতিরিক্ত ডেটার দৈর্ঘ্য, যা ৬-এর কম।
  • বিট ১ সেট করা আছে: ডেটা আইডি
বিভিন্ন ফ্ল্যাগ বিট ০ বা ১ সেট করা থাকলে বাধ্যতামূলক।
১১ - এন অতিরিক্ত তথ্য বিভিন্ন ঐচ্ছিক
এন - ১৫ এলোমেলো মান (লবণ) বিভিন্ন বাধ্যতামূলক

সারণি ১.২.২: মূল অনুরোধ (টাইপ 0x10)। সারণি ১.১- এ থাকা এনক্রিপ্টেড অনুরোধ থেকে ডিক্রিপ্ট করা হয়েছে।

অক্টেট ডেটা টাইপ বর্ণনা মূল্য
০ uint8 বার্তার ধরণ 0x01 = কী-ভিত্তিক পেয়ারিং প্রতিক্রিয়া
১ - ৬ uint48 প্রদানকারীর সর্বজনীন (BR/EDR) ঠিকানা বিভিন্ন
৭ - ১৫ এলোমেলো মান (লবণ) বিভিন্ন

সারণি ১.৩: মূল প্রতিক্রিয়া। সারণি ১.৪- এ এনক্রিপ্টেড প্রতিক্রিয়া তৈরি করার জন্য এটিকে এনক্রিপ্ট করা হয়েছে।

অক্টেট ডেটা টাইপ বর্ণনা মূল্য
০ -১৫ uint128 এনক্রিপ্টেড প্রতিক্রিয়া বিভিন্ন

সারণি ১.৪: প্রোভাইডার কর্তৃক নোটিফাই-এর মাধ্যমে সিকারের কাছে প্রেরিত এনক্রিপ্টেড রেসপন্স।

বৈশিষ্ট্য: পাসকি

এই বৈশিষ্ট্যটি কী-ভিত্তিক পেয়ারিং প্রক্রিয়ার সময় ব্যবহৃত হয়।

অক্টেট ডেটা টাইপ বর্ণনা মূল্য
০ - ১৫ uint128 এনক্রিপ্টেড পাসকি ব্লক বিভিন্ন

সারণি ২.১: এনক্রিপ্টেড পাসকি ব্লক। ব্যবহারের জন্য কী-ভিত্তিক পেয়ারিং পদ্ধতি দেখুন।

অক্টেট ডেটা টাইপ বর্ণনা মূল্য
০ uint8 বার্তার ধরণ এর মধ্যে একটি:
  • 0x02 = অনুসন্ধানকারীর পাসকি
  • 0x03 = প্রদানকারীর পাসকি
১ - ৩ unit32 ৬-সংখ্যার পাসকি বিভিন্ন
৪ - ১৫ এলোমেলো মান (লবণ) বিভিন্ন

সারণি ২.২: মূল পাসকি ব্লক। সারণি ২.১- এর ডিক্রিপ্ট করা সংস্করণ।

বৈশিষ্ট্য: অ্যাকাউন্ট কী

পেয়ারিং সম্পন্ন হওয়ার পর, ফাস্ট পেয়ার সিকার ফাস্ট পেয়ার প্রোভাইডারের কাছে একটি অ্যাকাউন্ট কী লিখে রাখবে।

অক্টেট ডেটা টাইপ বর্ণনা মূল্য
০ - ১৫ uint128 অ্যাকাউন্ট কী (এনক্রিপ্টেড) বিভিন্ন

একটি রাইট রিকোয়েস্ট পেলে, ফাস্ট পেয়ার প্রোভাইডার নিম্নলিখিত কাজগুলো করবে:

  1. কার্যপ্রণালীর ধাপ ৪ থেকে তৈরি হওয়া শেয়ার্ড সিক্রেট ব্যবহার করে অ্যাকাউন্ট কী-টি ডিক্রিপ্ট করুন।
    • যেসব প্রদানকারীর বন্ডের প্রয়োজন হয় (সাধারণ):
      • ডিক্রিপ্ট করার আগে, যাচাই করুন যে ধাপ ১২-এর পাসকি অনুরোধটি ডিক্রিপ্ট করতে শেয়ার্ড সিক্রেটটি ব্যবহার করা হয়েছিল। যদি এই সিক্রেটটি ব্যবহার করে এই ধাপটি সম্পন্ন না হয়, তবে এই রাইটটি উপেক্ষা করুন এবং প্রস্থান করুন।
    • এই পর্যায়ে, শেয়ার্ড সিক্রেট (প্রসিডিওরটিতে K ) এই পেয়ারিংয়ের জন্য আর ব্যবহার করা হবে না। প্রসিডিউরটি পুনরায় চালু না করে এই কী দিয়ে এনক্রিপ্ট করা যেকোনো অনুরোধ প্রত্যাখ্যান করা উচিত।
  2. যাচাই করুন যে ডিক্রিপ্ট করা মানটি 0x04 বা 0xFF দিয়ে শুরু হয় কিনা। যদি তা না হয়, এই রাইটটি উপেক্ষা করুন এবং প্রস্থান করুন।
    • যদি মান 0x04 হয় :
      • সংরক্ষিত অ্যাকাউন্ট কী তালিকায় নতুন মানটির জন্য জায়গা আছে কিনা তা যাচাই করুন।
      • অন্যথায়, তালিকা থেকে সবচেয়ে কম ব্যবহৃত মানটি মুছে দিন।
      • তালিকায় নতুন মানটি যোগ করুন।
    • যদি মান 0xFF হয় :
      • এটিকে একটি অস্থায়ী পেয়ারিং সেশন হিসেবে বিবেচনা করুন এবং কোনো অপারেশন সম্পাদন করবেন না।
      • রেট্রোঅ্যাক্টিভভাবে অ্যাকাউন্ট কী লেখার ফ্লো-এর ক্ষেত্রে এটি ঘটতে পারে।
      • কী-টি সংরক্ষণ করবেন না এবং এটি অ্যাকাউন্ট কী তালিকা , এনক্রিপশন বা MAC গণনার কাজে ব্যবহার করবেন না।
      • একটি ফিচার-নির্দিষ্ট ইভেন্ট বা টাইমআউটের কারণে বন্ড অপসারণ সক্রিয় হয়। LE অডিও শেয়ারিং-এর ক্ষেত্রে, অস্থায়ী সেশনটি সংযোগ বিচ্ছিন্ন হওয়ার ১০ মিনিট পর BLE বন্ড এবং লিঙ্ক কী অপসারণ করার জন্য দৃঢ়ভাবে সুপারিশ করা হয়।

তালিকায় থাকা অ্যাকাউন্ট কীগুলো কী-ভিত্তিক পেয়ারিং -এর সময় ব্যবহৃত হয়।

বৈশিষ্ট্য: ফার্মওয়্যার সংস্করণ

এই বৈশিষ্ট্যটি সিকারকে প্রয়োজন অনুযায়ী প্রোভাইডারের ফার্মওয়্যার সংস্করণ পড়ার সুযোগ দেয়। এটির সর্বদা নিম্নলিখিত ডেটা ফেরত দেওয়া উচিত:

অক্টেট ডেটা টাইপ বর্ণনা মূল্য
০ - ভ্যার utf8s ফার্মওয়্যার সংস্করণ কোড বিভিন্ন

প্রোভাইডারে একাধিক ফার্মওয়্যার থাকলেও (যেমন বাম বাড, ডান বাড এবং কেসের জন্য ৩টি ফার্মওয়্যার) এটিকে একটিমাত্র utf8 স্ট্রিং-এর মধ্যে আবদ্ধ করা উচিত। প্রোভাইডারটি বিশেষ ক্ষেত্রগুলির জন্য নির্দিষ্ট স্ট্রিংগুলিও ফেরত দিতে পারে:

  1. অবস্থা-আপডেট হচ্ছে : যদি প্রোভাইডার বর্তমানে একটি নতুন ফার্মওয়্যারে আপডেট করে থাকে। বিকল্পভাবে, প্রোভাইডার স্টেজড ফার্মওয়্যারের সংস্করণটি ফেরত দিতে পারে।

  2. status-abnormal : যদি প্রোভাইডারটি কোনো অস্বাভাবিক অবস্থায় থাকে। উদাহরণস্বরূপ, ফার্মওয়্যার আপডেট ব্যর্থ হওয়ার কারণে এটি বিকল হয়ে গেছে। এই মানটির কারণে সিকার একটি বার্তা প্রদর্শন করবে, যা ব্যবহারকারীকে জানিয়ে দেবে যে এটিকে এখনই আপডেট করতে হবে।

ডিভাইস ট্র্যাকিং প্রতিরোধ করার জন্য প্রোভাইডারের উচিত ফার্মওয়্যার রিভিশন ক্যারেক্টারিস্টিকে অ্যাক্সেস সীমিত করা। প্রস্তাবিত সীমাবদ্ধতা:

  • সংযুক্ত ডিভাইসগুলোর যেকোনো সময় অ্যাক্সেস থাকা উচিত।
  • প্রোভাইডারকে খুঁজে পাওয়া গেলে যেকোনো ডিভাইসের অ্যাক্সেস থাকা উচিত।

বৈশিষ্ট্য: অতিরিক্ত তথ্য

এই পরিষেবাটির নিম্নলিখিত বৈশিষ্ট্য থাকবে।

ফাস্ট পেয়ার সার্ভিসের বৈশিষ্ট্য এনক্রিপ্টেড অনুমতি UUID
ডেটা না লিখে জানান FE2C1237-8366-4814-8EB0-01DE32100BEA
পুরাতন ফাস্ট পেয়ার সার্ভিস বৈশিষ্ট্য (২০২১/১/১ তারিখে বাতিল করার লক্ষ্যমাত্রা) এনক্রিপ্টেড অনুমতি UUID
ডেটা না লিখে জানান 0x1237

এই ক্যারেক্টারিস্টিকে লেখার বা অবহিত করার আগে, একটি শেয়ার্ড সিক্রেট পাওয়ার জন্য ক্যারেক্টারিস্টিক FE2C1234-8366-4814-8EB0-01DE32100BEA এর মাধ্যমে একটি হ্যান্ডশেক অবশ্যই করতে হবে। এই ক্যারেক্টারিস্টিকের মধ্য দিয়ে প্রবাহিত ডেটা এনক্রিপ্ট করার জন্য AES-CTR ব্যবহার করা হবে, যার অ্যালগরিদম নিচে সংজ্ঞায়িত করা হয়েছে। একটি একক ১৬-বাইট ব্লকের চেয়ে বড় ডেটার ক্ষেত্রে এই মোডটি অধিক সুরক্ষিত। ডেটার অখণ্ডতা নিশ্চিত করার জন্য HMAC-SHA256 ব্যবহার করা হবে, যা নিচে সংজ্ঞায়িত করা হয়েছে।

অক্টেট বর্ণনা মূল্য
০ - ৭ HMAC-SHA256-এর প্রথম ৮ বাইট। বিভিন্ন
৮ - ১৫ ননস, যা AES-CTR এনক্রিপশনে ব্যবহৃত হয়। বিভিন্ন
১৬ - ভ্যার এনক্রিপ্টেড ডেটা। বিভিন্ন

সারণি ৩.১: ডেটা প্যাকেট, যা প্রোভাইডার কর্তৃক নোটিফাই-এর মাধ্যমে সিকারের কাছে অথবা সিকার কর্তৃক রাইট-এর মাধ্যমে প্রোভাইডারের কাছে পাঠানো হয়।

অক্টেট ডেটা টাইপ বর্ণনা মূল্য
০ - ভ্যার byte array ডেটা পরিবর্তিত হয় , সারণি ১.২.২- এর ডেটা আইডি অনুযায়ী এটিকে ডিকোড করুন:
  • 0x01(ব্যক্তিগত নাম): utf8s

সারণি ৩.২: মূল ডেটা। সারণি ৩.১- এর এনক্রিপ্টেড ডেটা থেকে ডিক্রিপ্ট করা হয়েছে।

যখন কোনো নোটিফাই করার অনুরোধ করা হয় (যেমন, সারণি ১.২.১- এর বিট ২-এর মাধ্যমে ব্যক্তিগতকৃত নামের অনুরোধ), তখন ফাস্ট পেয়ার প্রোভাইডার নিম্নলিখিত কাজগুলো করবে:

  1. ননস (Nonce)-এর জন্য ক্রিপ্টোগ্রাফিকভাবে র‍্যান্ডম ৮ বাইট তৈরি করুন।
  2. AES-CTR ব্যবহার করে ডেটা এনক্রিপ্ট করুন, যেখানে প্রতিটি ১৬-বাইট ব্লক তৈরি করা হয়

    encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    যেখানে

    1. AES কী হলো কার্যপ্রণালীর ৪ নং ধাপের শেয়ার্ড সিক্রেট।
    2. clearBlock[i] হলো data[i * 16] থেকে শুরু হওয়া একটি ১৬-বাইটের ব্লক। শেষ ব্লকটি ১৬ বাইটের কম হতে পারে।
  3. এনক্রিপ্টেড ডেটা তৈরি করতে concat(encryptedBlock[0], encryptedBlock[1],...) অপারেশনটি সম্পাদন করুন।

  4. HMAC-SHA256 তৈরি করুন

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

    যেখানে

    1. K তৈরি হয় `concat(shared_secret, 48-বাইট ZEROs)` এর মাধ্যমে, যেখানে `shared_secret`টি প্রসিডিউরের ধাপ ৪ থেকে নেওয়া হয়।
    2. opad হলো ৬৪ বাইটের একটি বাইরের প্যাডিং, যা 0x5C মানের পুনরাবৃত্ত বাইট দ্বারা গঠিত।
    3. আইপ্যাডের ৬৪ বাইটের অভ্যন্তরীণ প্যাডিং রয়েছে, যা 0x36 মানের পুনরাবৃত্ত বাইট দ্বারা গঠিত।
  5. ডেটা প্যাকেটের প্রিফিক্স হিসেবে HMAC-SHA256 থেকে প্রথম ৮ বাইট নিন।

একটি রাইট রিকোয়েস্ট পেলে, ফাস্ট পেয়ার প্রোভাইডার নিম্নলিখিত কাজগুলো করবে:

  1. HMAC-SHA256-এর প্রথম ৮ বাইট পরীক্ষা করে ডেটার অখণ্ডতা যাচাই করুন।
  2. AES-CTR ব্যবহার করে এনক্রিপ্ট করা ডেটা ডিক্রিপ্ট করুন, যেখানে প্রতিটি ব্লক তৈরি করা হয়

    clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
    

    যেখানে

    1. encryptedBlock[i] হলো একটি ১৬-বাইটের ব্লক যা encrypted_data[i * 16] থেকে শুরু হয়। শেষ ব্লকটি ১৬ বাইটের কম হতে পারে।
    2. হ্যান্ডশেক থেকে AES কী তৈরি বা শনাক্ত করা হয়, যেমন
      1. নেমিং ফ্লো ১-এ , এটি ECDH থেকে নেওয়া হয়েছে, এবং এই পেয়ারিংয়ের জন্য এটি আর ব্যবহার করা হবে না। প্রসিডিউরটি রিস্টার্ট না করে এই কী দিয়ে এনক্রিপ্ট করা যেকোনো রিকোয়েস্ট প্রত্যাখ্যান করা উচিত।
      2. নেমিং ফ্লো ২- তে, এটি হলো অ্যাকাউন্ট কী।
  3. কাঁচা ডেটা তৈরি করতে concat(clearBlock[0], clearBlock[1],...) অপারেশনটি সম্পাদন করুন।