প্রদানকারী বিজ্ঞাপন সংকেত
বিজ্ঞাপন: যখন আবিষ্কার করা যায়
যখন প্রদানকারীর ডিভাইসটি BR/EDR আবিষ্কারযোগ্য হয় (অর্থাৎ পেয়ারিং মোডে), তখন এটি BLE এর উপর ফাস্ট পেয়ার মডেল আইডি ডেটার বিজ্ঞাপন দেবে, এবং BLE ঠিকানাটি ঘোরানো হবে না।
বিজ্ঞাপনের ব্যবধান: যখন আবিষ্কার করা যায়
বিজ্ঞাপনের মধ্যে ব্যবধান 100ms (10Hz) এর বেশি হওয়া উচিত নয়। লো-পাওয়ার মোডে স্ক্যান করার সময়ও, একটি দ্রুত হার অনুসন্ধানকারীকে দ্রুত সরবরাহকারীকে খুঁজে পেতে অনুমতি দেয়।
বিজ্ঞাপনের পেলোড: ফাস্ট পেয়ার মডেল আইডি ডেটা
বিজ্ঞাপনে পরিষেবা ডেটা ডেটা টাইপ, ibid., § 1.11 থাকবে। UUID হবে 0xFE2C
এর ফাস্ট পেয়ার সার্ভিস UUID। পরিষেবার ডেটাতে নিম্নলিখিতগুলি থাকতে হবে:
অক্টেট | ডেটা টাইপ | বর্ণনা | মান |
---|---|---|---|
0-2 | uint24 | 24-বিট মডেল আইডি | পরিবর্তিত হয় |
বিজ্ঞাপন: যখন আবিষ্কার করা যায় না
যখন আবিষ্কার করা যায় না (অর্থাৎ, পেয়ারিং মোডে নয়), প্রদানকারী ডিভাইস নিম্নলিখিত নির্দেশিকাগুলি ব্যবহার করে ফাস্ট পেয়ার অ্যাকাউন্ট ডেটার বিজ্ঞাপন দেবে৷
অ্যাকাউন্টের ডেটা বিজ্ঞাপনের মাধ্যমে আশেপাশের সন্ধানকারীদের সনাক্ত করার অনুমতি দেয় যখন কোনও প্রদানকারী তাদের অ্যাকাউন্টের অন্তর্গত হয় এবং প্রদানকারীকে প্রথমে জোড়া লাগার মোডে বাধ্য না করেই জোড়া লাগানো শুরু করে, যা ব্যবহারকারীর অভিযোগের একটি সাধারণ কারণ। ব্যবহারকারীরা এই সম্প্রচারকে উপেক্ষা করতে সক্ষম হওয়ার সুযোগ প্রদান করবে যেখানে তারা প্রদানকারীর সাথে জুটি বাঁধার জন্য অপেক্ষা করে না বা সম্প্রচারটি প্রাসঙ্গিক নয় (উদাহরণস্বরূপ, যদি তারা ইতিমধ্যেই যুক্ত হয়ে থাকে)। অনুসন্ধানকারীরা স্পষ্টতই খারাপ সম্প্রচার স্বয়ংক্রিয়ভাবে ফিল্টার আউট করবে, যেমন যখন অ্যাকাউন্ট ডেটা ভুল কনফিগার করা হয়।
বিজ্ঞাপনের ব্যবধান: যখন আবিষ্কার করা যায় না
বিজ্ঞাপনের মধ্যে ব্যবধান সর্বাধিক 250ms (4Hz) হওয়া উচিত।
বিজ্ঞাপনের পেলোড: ফাস্ট পেয়ার অ্যাকাউন্ট ডেটা
বিজ্ঞাপনে পরিষেবা ডেটা ডেটা টাইপ, Ibid., § 1.11 থাকবে। UUID হবে 0xFE2C
এর ফাস্ট পেয়ার সার্ভিস UUID। পরিষেবার ডেটাতে নিম্নলিখিতগুলি থাকতে হবে:
অক্টেট | ডেটা টাইপ | বর্ণনা | মান |
---|---|---|---|
0 | uint8 | সংস্করণ এবং পতাকা 0bVVVVFFFF
| 0x00 (ভবিষ্যত ব্যবহারের জন্য সংরক্ষিত) |
1 - পরিবর্তিত হয় | অ্যাকাউন্ট কী ডেটা | পরিবর্তিত হয় অথবা 0x00 যদি অ্যাকাউন্ট কী তালিকা খালি থাকে |
অ্যাকাউন্ট কী ডেটাতে রয়েছে:
অক্টেট | ডেটা টাইপ | বর্ণনা | মান |
---|---|---|---|
0 | uint8 | ক্ষেত্রের দৈর্ঘ্য এবং প্রকার 0bLLLLTTTT
| 0bLLLL0000
|
1 - সে | অ্যাকাউন্ট কী ফিল্টার | পরিবর্তিত হয় | |
s + 1 | uint8 | ক্ষেত্রের দৈর্ঘ্য এবং প্রকার 0bLLLLTTTT
| 0b00100001
|
s + 2 - s + 3 | uint16 | লবণ | পরিবর্তিত হয় |
অ্যাকাউন্ট কী ফিল্টার
বিজ্ঞাপিত অ্যাকাউন্ট কী ফিল্টার একজন প্রার্থীকে আরও ইন্টারঅ্যাকশনের আগে একটি নির্দিষ্ট অ্যাকাউন্ট কী (একটি কম মিথ্যা-ইতিবাচক সম্ভাবনা, গড়ে 0.5% এর চেয়ে কম) থাকতে পারে কিনা তা দ্রুত পরীক্ষা করতে দেয়। অনুসন্ধানকারী স্বয়ংক্রিয়ভাবে সংযুক্ত হতে পারে এবং প্রক্রিয়াটি শুরু করার চেষ্টা করতে পারে যখন এটি টাইপ 0 সহ একটি ফিল্টার সম্প্রচারিত হতে দেখে, যেমন UI ইঙ্গিত দেখাচ্ছে, যাতে সম্ভাব্য তার অ্যাকাউন্ট কীগুলির একটি রয়েছে, যাতে মিথ্যা ইতিবাচকের হার আরও কমাতে পারে। কিছু পরিস্থিতিতে, জোড় করার জন্য প্রস্তুত না থাকাকালীন প্রদানকারী অনুসন্ধানকারীর দ্বারা স্বীকৃত হতে চাইতে পারে। একটি উদাহরণ হল যখন কুঁড়িগুলি আবার কেসে রাখা হয়, তখন আমরা পরবর্তী জোড়ার বিজ্ঞপ্তি দেখানো বন্ধ করতে চাই কারণ সেই পেয়ারিং হেডসেট দ্বারা প্রত্যাখ্যান করা যেতে পারে।
অ্যাকাউন্ট কী ফিল্টার হল একটি পরিবর্তনশীল দৈর্ঘ্যের ব্লুম ফিল্টার যা নিম্নরূপ তৈরি করা হয়েছে:
- অবিরত অ্যাকাউন্ট কী তালিকায় n হল অ্যাকাউন্ট কীগুলির সংখ্যা ( n >= 1)।
- চলুন , বাইটে ফিল্টারের আকার (1.2* n + 3) ছাঁটাই করা যাক। উদাহরণস্বরূপ, যদি 1 কী অব্যাহত থাকে, s = 4 বাইট।
uint8_t s = (((uint8_t)(( float )1.2 * n)) + 3);
- ফিল্টার F কে s বাইটের অ্যারে হিসাবে শুরু করুন, প্রতিটি সেট 0।
uint8_t F[s] = {0};
স্থায়ী অ্যাকাউন্ট কী তালিকায় প্রতিটি অ্যাকাউন্ট কী K- এর জন্য:
ক চলুন V concat ( K , লবণ )।// In the sample code, the size of salt is 2 bytes. #define SALT_SIZE 2 uint8_t V[FASTPAIR_ACCOUNT_KEY_SIZE + SALT_SIZE]; for (uint8_t keyIndex = 0; keyIndex < n; keyIndex++) { // concat (K, Salt) fastpair_get_account_key_by_index(keyIndex, V); uint8_t randomSalt = (uint8_t)rand(); V[FASTPAIR_ACCOUNT_KEY_SIZE] = randomSalt; ... }
খ. SHA256 ব্যবহার করে হ্যাশ V , একটি 32-বাইট মান H = {H 0 , …, H 31 } পেয়ে৷
uint8_t H[32] = {0}; SHA256_hash_function(V, H);
গ. বিগ-এন্ডিয়ান, X = {X 0 , …, X 7 }, যেখানে X 0 = 0xH 0 H 1 H 2 H 3 , তে H কে আটটি 4-বাইটের স্বাক্ষরবিহীন পূর্ণসংখ্যাতে ভাগ করুন।
uint32_t X[8]; for (index = 0; index < 8; index++) { X[index] = (((uint32_t)(H[index * 4])) << 24) | (((uint32_t)(H[index * 4 + 1])) << 16) | (((uint32_t)(H[index * 4 + 2])) << 8) | (((uint32_t)(H[index * 4 + 3])) << 0); }
d প্রতিটি X i এর জন্য:
i M কে X হতে দিন i ফিল্টারে বিটের সংখ্যা মডিউল করুন, ( s * 8)।
ii. সূচকে F- তে বাইট পান ( M /8), বৃত্তাকার নিচে।
iii. বাইটের মধ্যে, সূচকে বিট সেট করুন ( M % 8) 1 এ।
iv অন্য কথায়:// M = Xi % (s * 8) // F[M/8] = F[M/8] | (1 << (M % 8)) for (index = 0; index < 8; index++) { uint32_t M = X[index] % (s * 8); F[M / 8] = F[M / 8] | (1 << (M % 8)); }
একাউন্ট কী ফিল্টার ফিল্ড হিসেবে বিজ্ঞাপনের ডেটাতে ফিল্টার F অন্তর্ভুক্ত করুন। মনে রাখবেন যে এই মানের কোন "এন্ডিয়াননেস" নেই, যেহেতু কম বেশি উল্লেখযোগ্য বাইট নেই—বাইটের ক্রম পরিবর্তন করবেন না।
লবণের ক্ষেত্র
লবণ একটি এলোমেলো মান যা ব্লুম ফিল্টার তৈরি করার সময় অ্যাকাউন্ট কীগুলির সাথে সংযুক্ত করা হয়। ঠিকানা ঘূর্ণন জুড়ে ট্র্যাকিং এড়াতে প্রদানকারীর জন্য RPA আপডেট করা হলে এই লবণটি প্রতিবার পুনরায় তৈরি করা উচিত।
লবণ ব্যবহার করে অ্যাকাউন্ট কী ফিল্টার তৈরি করতে:
- একটি এলোমেলো 2-বাইট এস জেনারেট করুন। মনে রাখবেন যে এই মানের কোন "এন্ডিয়াননেস" নেই, যেহেতু কম বা বেশি উল্লেখযোগ্য বাইট নেই — বাইট অর্ডার পরিবর্তন করবেন না।
- লবণ হিসাবে 2-বাইট এস ব্যবহার করুন।
- বিজ্ঞাপিত ফাস্ট পেয়ার অ্যাকাউন্ট ডেটাতে, অ্যাকাউন্ট কী ফিল্টার ক্ষেত্রে জেনারেট করা ফিল্টার এবং লবণ ক্ষেত্রে S অন্তর্ভুক্ত করুন।