বৈশিষ্ট্য
দ্রুত জোড়া পরিষেবা
ফাস্ট পেয়ার প্রদানকারীর নিম্নলিখিত 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 |
বৈশিষ্ট্য: মডেল আইডি
এই বৈশিষ্ট্যটি অনুসন্ধানকারীকে যখন ডিভাইসটি আবিষ্কারযোগ্য মোডে বিজ্ঞাপন দেয় তখন প্রয়োজন অনুসারে মডেল আইডি পড়তে দেয়৷ এটি সর্বদা নিম্নলিখিত ডেটা ফেরত দেবে:
অক্টেট | ডেটা টাইপ | বর্ণনা | মান |
---|---|---|---|
0 - 2 | uint24 | মডেল আইডি | পরিবর্তিত হয় |
বৈশিষ্ট্য: কী-ভিত্তিক পেয়ারিং
এই বৈশিষ্ট্যটি কী-ভিত্তিক পেয়ারিং পদ্ধতি নিয়ন্ত্রণ করে। এই পদ্ধতিতে, একটি প্রি-শেয়ারড কী আছে তা যাচাই করে একটি নির্দিষ্ট স্তরের আস্থা প্রতিষ্ঠিত হয়। প্রতিটি ক্ষেত্রে কী আলাদা:
কেস 1: প্রি-শেয়ারড কীটি অ্যান্টি-স্পুফিং পাবলিক/প্রাইভেট কী জুটির উপর ভিত্তি করে এবং সিকারের নিজস্ব পাবলিক/প্রাইভেট কী জোড়ার উপর ভিত্তি করে যা প্রতিটি জোড়া করার প্রচেষ্টার জন্য পরিবর্তিত হবে।
- প্রদানকারী পেয়ারিং মোডে আছে।
- অনুসন্ধানকারী যাচাই করে যে প্রদানকারীর কাছে অ্যান্টি-স্পুফিং প্রাইভেট কী রয়েছে।
মনে রাখবেন যে পেয়ারিং মোডে থাকাকালীন, প্রদানকারী অবশ্যই স্বাভাবিক উপায়ে পেয়ার করতে পারে, উদাহরণস্বরূপ, একটি ডিভাইসের সাথে পেয়ার করতে যা ফাস্ট পেয়ারের কী-ভিত্তিক পেয়ারিং সমর্থন করে না।
কেস 2: প্রাক-ভাগ করা কী হল অ্যাকাউন্ট কীগুলির মধ্যে একটি।
- প্রদানকারী সাধারণত পেয়ারিং মোডে থাকে না। (কিন্তু এটি একটি প্রয়োজনীয়তা নয়-প্রদানকারীকে একটি অ্যাকাউন্ট কী ব্যবহার করে সমর্থন করা উচিত এমনকি জোড়া মোডে থাকা অবস্থায়ও।)
- অনুসন্ধানকারী এবং প্রদানকারী প্রত্যেকে যাচাই করে যে অন্যের অ্যাকাউন্টের কী আছে।
যেহেতু উভয় ক্ষেত্রেই অত্যন্ত অনুরূপ, যেগুলি ছাড়া পূর্ব-ভাগ করা কী ব্যবহার করা হয়, সেগুলি পদ্ধতিতে একত্রিত হয়।
ডেটা ফরম্যাট
প্রতিটি বিন্যাস কিভাবে ব্যবহার করা হয় তার পদ্ধতি দেখুন।
অক্টেট | ডেটা টাইপ | বর্ণনা | মান | বাধ্যতামূলক? |
---|---|---|---|---|
0 - 15 | uint128 | এনক্রিপ্ট করা অনুরোধ | পরিবর্তিত হয় | বাধ্যতামূলক |
16 - 79 | সর্বজনীন কী | পরিবর্তিত হয় | ঐচ্ছিক |
সারণি 1.1: এনক্রিপ্ট করা অনুরোধ, যা অনুসন্ধানকারীর বৈশিষ্ট্যের জন্য লেখা।
অক্টেট | ডেটা টাইপ | বর্ণনা | মান | বাধ্যতামূলক? |
---|---|---|---|---|
0 | uint8 | বার্তার ধরন | 0x00 = কী-ভিত্তিক পেয়ারিং অনুরোধ | বাধ্যতামূলক |
1 | uint8 | পতাকা
| পরিবর্তিত হয় | বাধ্যতামূলক |
2 - 7 | uint48 | হয়:
| পরিবর্তিত হয় | বাধ্যতামূলক |
8 - 13 | uint48 | প্রার্থীর বিআর/ইডিআর ঠিকানা | পরিবর্তিত হয় | ফ্ল্যাগ বিট 1 বা 3 সেট করা থাকলেই উপস্থাপন করুন |
n - 15 | এলোমেলো মান (লবণ) | পরিবর্তিত হয় | বাধ্যতামূলক |
সারণি 1.2.1: কাঁচা অনুরোধ (টাইপ 0x00)। সারণি 1.1 -এ এনক্রিপ্ট করা অনুরোধ থেকে ডিক্রিপ্ট করা হয়েছে।
অক্টেট | ডেটা টাইপ | বর্ণনা | মান | বাধ্যতামূলক? |
---|---|---|---|---|
0 | uint8 | বার্তার ধরন | 0x10 = অ্যাকশন অনুরোধ | বাধ্যতামূলক |
1 | uint8 | পতাকা
| পরিবর্তিত হয় | বাধ্যতামূলক |
2 - 7 | uint48 | হয়:
| পরিবর্তিত হয় | বাধ্যতামূলক |
8 | uint8 | বার্তা গ্রুপ | পরিবর্তিত হয় | ফ্ল্যাগ বিট 0 সেট করা থাকলে বাধ্যতামূলক৷ |
9 | uint8 | বার্তা কোড | পরিবর্তিত হয় | ফ্ল্যাগ বিট 0 সেট করা থাকলে বাধ্যতামূলক৷ |
10 | uint8 | পতাকার উপর নির্ভর করে:
| পরিবর্তিত হয় | বাধ্যতামূলক যদি পতাকা বিট 0 বা 1 সেট করা থাকে |
11 - এন | অতিরিক্ত ডেটা | পরিবর্তিত হয় | ঐচ্ছিক | |
n - 15 | এলোমেলো মান (লবণ) | পরিবর্তিত হয় | বাধ্যতামূলক |
সারণি 1.2.2: কাঁচা অনুরোধ (টাইপ 0x10)। সারণি 1.1 -এ এনক্রিপ্ট করা অনুরোধ থেকে ডিক্রিপ্ট করা হয়েছে।
অক্টেট | ডেটা টাইপ | বর্ণনা | মান |
---|---|---|---|
0 | uint8 | বার্তার ধরন | 0x01 = কী-ভিত্তিক পেয়ারিং প্রতিক্রিয়া |
1 - 6 | uint48 | প্রদানকারীর সর্বজনীন (BR/EDR) ঠিকানা | পরিবর্তিত হয় |
7 - 15 | এলোমেলো মান (লবণ) | পরিবর্তিত হয় |
সারণি 1.3: কাঁচা প্রতিক্রিয়া। সারণি 1.4 -এ এনক্রিপ্ট করা প্রতিক্রিয়া তৈরি করতে এনক্রিপ্ট করা হয়েছে।
অক্টেট | ডেটা টাইপ | বর্ণনা | মান |
---|---|---|---|
0 -15 | uint128 | এনক্রিপ্ট করা প্রতিক্রিয়া | পরিবর্তিত হয় |
সারণি 1.4: এনক্রিপ্ট করা প্রতিক্রিয়া, প্রদানকারীর দ্বারা একটি বিজ্ঞপ্তির মাধ্যমে অনুসন্ধানকারীকে পাঠানো হয়।
বৈশিষ্ট্য: পাসকি
এই বৈশিষ্ট্যটি কী-ভিত্তিক পেয়ারিং পদ্ধতির সময় ব্যবহৃত হয়।
অক্টেট | ডেটা টাইপ | বর্ণনা | মান |
---|---|---|---|
0 - 15 | uint128 | এনক্রিপ্ট করা পাসকি ব্লক | পরিবর্তিত হয় |
সারণি 2.1: এনক্রিপ্ট করা পাসকি ব্লক। ব্যবহারের জন্য কী-ভিত্তিক পেয়ারিং পদ্ধতি দেখুন।
অক্টেট | ডেটা টাইপ | বর্ণনা | মান |
---|---|---|---|
0 | uint8 | বার্তার ধরন | এর মধ্যে একটি:
|
1 - 3 | unit32 | 6-সংখ্যার পাসকি | পরিবর্তিত হয় |
4 - 15 | এলোমেলো মান (লবণ) | পরিবর্তিত হয় |
সারণি 2.2: কাঁচা পাসকি ব্লক। সারণি 2.1 এর ডিক্রিপ্ট করা সংস্করণ।
বৈশিষ্ট্য: অ্যাকাউন্ট কী
পেয়ার করার পর, ফাস্ট পেয়ার সিকার ফাস্ট পেয়ার প্রোভাইডারকে একটি অ্যাকাউন্ট কী লিখবে।
অক্টেট | ডেটা টাইপ | বর্ণনা | মান |
---|---|---|---|
0 - 15 | uint128 | অ্যাকাউন্ট কী (এনক্রিপ্ট করা) | পরিবর্তিত হয় |
একটি লিখিত অনুরোধ পাওয়ার পরে, দ্রুত জোড়া প্রদানকারী নিম্নলিখিতগুলি করবে:
- পদ্ধতির ধাপ 4 থেকে জেনারেট করা শেয়ার্ড সিক্রেট ব্যবহার করে অ্যাকাউন্ট কী ডিক্রিপ্ট করুন।
- প্রদানকারীদের জন্য যাদের বন্ধন প্রয়োজন (সাধারণ):
- ডিক্রিপ্ট করার আগে, যাচাই করুন যে শেয়ার্ড সিক্রেটটি ধাপ 12 থেকে পাসকি অনুরোধ ডিক্রিপ্ট করতে ব্যবহার করা হয়েছে। যদি এই ধাপটি এই গোপন ব্যবহার করে পাস না হয়, তাহলে এই লেখাটি উপেক্ষা করুন এবং প্রস্থান করুন।
- এই মুহুর্তে, ভাগ করা গোপন ( পদ্ধতিতে K ) এই জোড়ার জন্য আবার ব্যবহার করা হবে না৷ পদ্ধতিটি পুনরায় চালু না করে এই কী দিয়ে এনক্রিপ্ট করা যেকোনো অনুরোধ প্রত্যাখ্যান করা উচিত।
- প্রদানকারীদের জন্য যাদের বন্ধন প্রয়োজন (সাধারণ):
- যাচাই করুন যে ডিক্রিপ্ট করা মান
0x04
দিয়ে শুরু হয়। যদি তা না হয়, এই লেখাটি উপেক্ষা করুন এবং প্রস্থান করুন। - স্থায়ী অ্যাকাউন্ট কী তালিকায় নতুন মানের জন্য স্থান আছে কিনা তা পরীক্ষা করুন।
- যদি না হয়, তালিকা থেকে সর্বনিম্ন ব্যবহৃত মান মুছে দিন।
- তালিকায় নতুন মান যোগ করুন।
তালিকার অ্যাকাউন্ট কীগুলি কী-ভিত্তিক পেয়ারিংয়ের সময় ব্যবহার করা হয়।
বৈশিষ্ট্য: ফার্মওয়্যার সংশোধন
এই বৈশিষ্ট্যটি সন্ধানকারীকে প্রয়োজন অনুসারে প্রদানকারীর ফার্মওয়্যার সংশোধন পড়তে দেয়। এটি সর্বদা নিম্নলিখিত ডেটা ফেরত দেবে:
অক্টেট | ডেটা টাইপ | বর্ণনা | মান |
---|---|---|---|
0 - var | utf8s | ফার্মওয়্যার রিভিশন কোড | পরিবর্তিত হয় |
প্রোভাইডারে একাধিক ফার্মওয়্যার (যেমন বাম কুঁড়ি, ডান কুঁড়ি এবং কেসের জন্য 3টি ফার্মওয়্যার) থাকলেও এটি একটি একক utf8 স্ট্রিং-এ এনক্যাপসুলেট করা উচিত। প্রদানকারী বিশেষ ক্ষেত্রে নির্দিষ্ট স্ট্রিংগুলিও ফেরত দিতে পারে:
স্ট্যাটাস-আপডেটিং : যদি প্রদানকারী বর্তমানে একটি নতুন ফার্মওয়্যারে আপডেট করছে। বিকল্পভাবে, প্রদানকারী স্টেজ করা ফার্মওয়্যারের সংস্করণ ফিরিয়ে দিতে পারে।
স্থিতি-অস্বাভাবিক : যদি প্রদানকারী অস্বাভাবিক অবস্থায় থাকে। উদাহরণস্বরূপ, ফার্মওয়্যার আপডেট ব্যর্থ হওয়ায় এটি ত্রুটিপূর্ণ হয়েছে। এই মানটি ব্যবহারকারীকে এটিকে আপডেট করতে হবে তা জানানোর জন্য অনুসন্ধানকারীকে একটি বার্তা দেখাবে।
ডিভাইস ট্র্যাকিং প্রতিরোধ করার জন্য প্রদানকারীর ফার্মওয়্যার রিভিশন বৈশিষ্ট্যের অ্যাক্সেস সীমিত করা উচিত। প্রস্তাবিত সীমাবদ্ধতা:
- বন্ডেড ডিভাইসের যে কোনো সময় অ্যাক্সেস থাকা উচিত
- সরবরাহকারী আবিষ্কারযোগ্য হলে যেকোনো ডিভাইসের অ্যাক্সেস থাকা উচিত
বৈশিষ্ট্য: অতিরিক্ত ডেটা
এই পরিষেবার নিম্নলিখিত বৈশিষ্ট্য থাকতে হবে।
দ্রুত জোড়া পরিষেবা বৈশিষ্ট্য | এনক্রিপ্ট করা হয়েছে | অনুমতি | UUID |
---|---|---|---|
ডেটা | না | লিখুন এবং অবহিত করুন | FE2C1237-8366-4814-8EB0-01DE32100BEA |
ওল্ড ফাস্ট পেয়ার সার্ভিসের বৈশিষ্ট্য (2021/1/1 তারিখে অবনমনের লক্ষ্য) | এনক্রিপ্ট করা হয়েছে | অনুমতি | UUID |
---|---|---|---|
ডেটা | না | লিখুন এবং অবহিত করুন | 0x1237 |
এই বৈশিষ্ট্যটি লেখার বা অবহিত করার আগে, একটি শেয়ার করা গোপনীয়তা থাকতে চরিত্রগত FE2C1234-8366-4814-8EB0-01DE32100BEA
এর মাধ্যমে হ্যান্ডশেক করতে হবে। AES-CTR এই বৈশিষ্ট্যের মাধ্যমে প্রবাহিত ডেটা এনক্রিপ্ট করতে ব্যবহার করা হবে, যার অ্যালগরিদম নীচে সংজ্ঞায়িত করা হয়েছে। এই মোডটি ডেটা জুড়ে আরও নিরাপদ যা একটি একক 16-বাইট ব্লকের বাইরে প্রসারিত। HMAC-SHA256 ডেটা অখণ্ডতা নিশ্চিত করতে ব্যবহার করা হবে, যা নীচে সংজ্ঞায়িত করা হয়েছে।
অক্টেট | বর্ণনা | মান |
---|---|---|
0 - 7 | HMAC-SHA256 এর প্রথম 8 বাইট। | পরিবর্তিত হয় |
8 - 15 | না, AES-CTR এনক্রিপশন দ্বারা ব্যবহৃত। | পরিবর্তিত হয় |
16 - var | এনক্রিপ্ট করা ডেটা। | পরিবর্তিত হয় |
সারণি 3.1: ডেটা প্যাকেট, প্রদানকারীর দ্বারা একটি বিজ্ঞপ্তির মাধ্যমে প্রেরিত বা অনুসন্ধানকারী একটি লেখার মাধ্যমে প্রদানকারীকে প্রেরণ করে।
অক্টেট | ডেটা টাইপ | বর্ণনা | মান |
---|---|---|---|
0 - var | byte array | ডেটা | পরিবর্তিত হয় , সারণি 1.2.2 এর ডেটা আইডি অনুযায়ী এটি ডিকোড করুন:
|
সারণি 3.2: কাঁচা তথ্য। সারণি 3.1 -এ এনক্রিপ্ট করা ডেটা থেকে ডিক্রিপ্ট করা হয়েছে।
যখন একটি বিজ্ঞপ্তির জন্য অনুরোধ করা হয় (যেমন সারণি 1.2.1 এ বিট 2 এর মাধ্যমে ব্যক্তিগতকৃত নামের অনুরোধ করুন), দ্রুত জোড়া প্রদানকারী নিম্নলিখিতগুলি করবে:
- Nonce-এর জন্য ক্রিপ্টোগ্রাফিকভাবে র্যান্ডম 8 বাইট তৈরি করুন।
AES-CTR ব্যবহার করে ডেটা এনক্রিপ্ট করুন, যেখানে প্রতিটি 16-বাইট ব্লক ব্যবহার করে তৈরি করা হয়
encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
যেখানে
- AES কী পদ্ধতির ধাপ 4 থেকে ভাগ করা গোপন।
- clearBlock[i] হল একটি 16-বাইট ব্লক যা ডেটা[i * 16] থেকে শুরু হয়। শেষ ব্লকটি 16 বাইটের কম হতে পারে।
এনক্রিপ্ট করা ডেটা তৈরি করতে কনক্যাট (এনক্রিপ্টেডব্লক[0], এনক্রিপ্টেডব্লক[1],...) সম্পাদন করুন।
দ্বারা HMAC-SHA256 তৈরি করুন
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
যেখানে
- K কে concat(shared_secret, 48-byte zeros) দ্বারা তৈরি করা হয়, shared_secret হল পদ্ধতির ধাপ 4 থেকে।
- opad হল 64 বাইট বাইরের প্যাডিং,
0x5C
মূল্যের পুনরাবৃত্তি বাইট নিয়ে গঠিত। - ipad হল 64 বাইট অভ্যন্তরীণ প্যাডিং,
0x36
মূল্যের পুনরাবৃত্তি বাইট সমন্বিত।
ডেটা প্যাকেটের উপসর্গ হিসাবে HMAC-SHA256 থেকে প্রথম 8 বাইট নিন।
একটি লিখিত অনুরোধ পাওয়ার পরে, দ্রুত জোড়া প্রদানকারী নিম্নলিখিতগুলি করবে:
- HMAC-SHA256 এর প্রথম 8 বাইট চেক করে ডেটার অখণ্ডতা যাচাই করুন।
AES-CTR ব্যবহার করে এনক্রিপ্ট করা ডেটা ডিক্রিপ্ট করুন, যেখানে প্রতিটি ব্লক ব্যবহার করে তৈরি করা হয়
clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
যেখানে
- encryptedBlock[i] হল একটি 16-বাইট ব্লক এনক্রিপ্টেড_ডাটা[i*16] থেকে শুরু হয়। শেষ ব্লকটি 16 বাইটের কম হতে পারে।
- AES কী হ্যান্ডশেক থেকে তৈরি বা চিহ্নিত করা হয়, যেমন
- নামকরণ ফ্লো 1- এ, এটি ECDH থেকে এসেছে, এবং এটি এই জোড়ার জন্য আর ব্যবহার করা হবে না। পদ্ধতিটি পুনরায় চালু না করে এই কী দিয়ে এনক্রিপ্ট করা যেকোনো অনুরোধ প্রত্যাখ্যান করা উচিত।
- নামকরণ ফ্লো 2 এ, এটি অ্যাকাউন্ট কী।
কাঁচা ডেটা তৈরি করতে কনক্যাট (ক্লিয়ারব্লক[0], ক্লিয়ারব্লক[1],...) সম্পাদন করুন।