विशेषताएं

फ़ास्ट पेयर सेवा

फ़ास्ट पेयर की सुविधा देने वाली कंपनी के पास नीचे दी गई GATT सेवा होगी.

सेवा यूयूआईडी
फ़ास्ट पेयर सेवा 0xFE2C

इस सेवा की विशेषताएं नीचे दी गई होंगी.

फ़ास्ट पेयर सेवा की विशेषता एन्क्रिप्ट (सुरक्षित) किया गया है अनुमतियां यूयूआईडी
मॉडल आईडी नहीं पढ़ें FE2C1233-8366-4814-8EB0-01DE32100BEA
की-आधारित पेयरिंग नहीं मैसेज लिखें और सूचना भेजें FE2C1234-8366-4814-8EB0-01DE32100BEA
पासकी नहीं मैसेज लिखें और सूचना भेजें FE2C1235-8366-4814-8EB0-01DE32100BEA
खाता कुंजी नहीं लिखें FE2C1236-8366-4814-8EB0-01DE32100BEA

डिवाइस की जानकारी देने वाली सेवा

फ़ास्ट पेयर की सुविधा देने वाली कंपनी को डिवाइस की जानकारी देने वाली सेवा के साथ भी काम करना चाहिए.

सेवा यूयूआईडी
डिवाइस की जानकारी देने वाली सेवा 0x180A

फ़ास्ट पेयर सीकर के लिए ये सुविधाएं इस्तेमाल की जाती हैं.

नाम एन्क्रिप्ट (सुरक्षित) किया गया है अनुमतियां यूयूआईडी
फ़र्मवेयर में बदलाव नहीं पढ़ें 0x2A26

खासियत: मॉडल आईडी

यह विशेषता, सीकर को ज़रूरत के हिसाब से मॉडल आईडी को पढ़ने की अनुमति देती है. हालांकि, डिवाइस के खोजे जाने वाले मोड में विज्ञापन दिखाने पर, ऐसा नहीं किया जा सकता. इससे हमेशा नीचे दिया गया डेटा दिखेगा:

ऑक्टेट डेटा टाइप ब्यौरा वैल्यू
0 से 2 uint24 मॉडल आईडी बदलता रहता है

खासियत: की-आधारित पेयरिंग

यह विशेषता, कुंजी के आधार पर दूसरे डिवाइस से जोड़ने की प्रोसेस को कंट्रोल करती है. इस प्रोसेस में, यह पुष्टि करके कि सेवा देने वाले व्यक्ति और सेवा देने वाले व्यक्ति, दोनों के पास पहले से शेयर की गई कुंजी है, दोनों के पास भरोसा बना रहता है. हर मामले में कुंजी अलग-अलग होती है:

  • पहला केस: पहले से शेयर की गई कुंजी, झूठे नाम से मेल भेजने वाली सार्वजनिक/निजी कुंजी के जोड़े पर आधारित होती है. साथ ही, यह सीकर की सार्वजनिक/निजी कुंजी की जोड़ी पर आधारित होती है, जो पेयरिंग की हर कोशिश पर बदल जाती है.

    • कॉन्टेंट देने वाली कंपनी, 'दूसरे डिवाइस से जोड़ने वाले मोड' में है.
    • नौकरी ढूंढने वाला यह पुष्टि करता है कि सेवा देने वाले के पास झूठे नाम से मेल भेजने वाली निजी कुंजी है.

    ध्यान रखें कि पेयरिंग मोड में होने पर, प्रोवाइडर को सामान्य तरीके से भी जोड़ा जा सकता है. उदाहरण के लिए, ऐसे डिवाइस से जोड़ा जा सकता है जिस पर फ़ास्ट पेयर की सुविधा वाली कुंजी के आधार पर पेयर नहीं किया जा सकता.

  • दूसरा केस: पहले से शेयर की गई कुंजी, खाता कुंजियों में से एक है.

    • सेवा देने वाली कंपनी आम तौर पर, दूसरे डिवाइस से जोड़ने वाले मोड में नहीं होती है. हालांकि, यह ज़रूरी नहीं है. सेवा देने वाली कंपनी को पेयरिंग मोड में होने पर भी, खाता कुंजी का इस्तेमाल करने की सुविधा देनी चाहिए.
    • नौकरी ढूंढने वाला और सेवा देने वाला, दोनों यह पुष्टि करते हैं कि दूसरे के पास खाता कुंजी है.

दोनों केस काफ़ी हद तक एक जैसे हैं. हालांकि, इसमें पहले से शेयर की गई कुंजी का इस्तेमाल नहीं किया जाता. इसलिए, उन्हें प्रोसेस में एक साथ जोड़ दिया जाता है.

डेटा फ़ॉर्मैट

हर फ़ॉर्मैट का इस्तेमाल कैसे किया जाता है, इसके लिए तरीका देखें.

ऑक्टेट डेटा टाइप ब्यौरा वैल्यू ज़रूरी है?
0 - 15 uint128 एन्क्रिप्ट (सुरक्षित) किया गया अनुरोध बदलता रहता है ज़रूरी है
16 से 79 सार्वजनिक कुंजी बदलता रहता है ज़रूरी नहीं

टेबल 1.1: एन्क्रिप्ट (सुरक्षित) किया गया अनुरोध, जिसे Seeker की ओर से विशेषता के लिए लिखा गया है.

ऑक्टेट डेटा टाइप ब्यौरा वैल्यू ज़रूरी है?
0 uint8 मैसेज किस तरह का है 0x00 = कुंजी-आधारित पेयरिंग अनुरोध ज़रूरी है
1 uint8 फ़्लैग
  • बिट 0 (MSB): Seeker इसे हटा देता है और अनदेखा कर देता है.
  • बिट 1: 1, अगर नौकरी ढूंढने वाला आपसे अनुरोध करता है कि सेवा देने वाली कंपनी, बॉन्ड की प्रक्रिया शुरू करेगी और इस अनुरोध में नौकरी ढूंढने वाले का बीआर/ईडीआर पता मौजूद है. अगर ऐसा नहीं है, तो वैल्यू 0 भी होगी.
  • बिट 2: 1, अगर नौकरी ढूंढने वाला अनुरोध करता है कि सेवा देने वाली कंपनी, मौजूदा नाम को बताए. अगर ऐसा नहीं है, तो वैल्यू 0 भी होगी.
  • बिट 3: 1, अगर यह खाते की कुंजी को रेट्रोऐक्टिव रूप से लिखने के लिए है. अगर ऐसा नहीं है, तो वैल्यू 0 भी होगी.
  • बिट 4 - 7 को आने वाले समय में इस्तेमाल के लिए रिज़र्व रखा गया है. इन्हें अनदेखा कर दिया जाएगा.
अलग-अलग ज़रूरी है
2 से 7 uint48 इनमें से कोई एक:
  • सेवा देने वाली कंपनी का मौजूदा BLE पता
  • सेवा देने वाली कंपनी का सार्वजनिक पता
अलग-अलग ज़रूरी है
8 से 13 uint48 नौकरी ढूंढने वाले का बीआर/ईडीआर पता अलग-अलग सिर्फ़ तब मौजूद होता है, जब फ़्लैग बिट 1 या 3 सेट हो
n - 15 रैंडम वैल्यू (साल्ट) अलग-अलग ज़रूरी है

टेबल 1.2.1: रॉ अनुरोध (टाइप 0x00). एन्क्रिप्ट किए गए अनुरोध से डिक्रिप्ट किया गया टेबल 1.1. में अनुरोध

ऑक्टेट डेटा टाइप ब्यौरा वैल्यू ज़रूरी है?
0 uint8 मैसेज किस तरह का है 0x10 = कार्रवाई का अनुरोध ज़रूरी है
1 uint8 फ़्लैग अलग-अलग ज़रूरी है
2 से 7 uint48 इनमें से कोई एक:
  • सेवा देने वाली कंपनी का मौजूदा BLE पता
  • सेवा देने वाली कंपनी का सार्वजनिक पता
अलग-अलग ज़रूरी है
8 uint8 मैसेज ग्रुप अलग-अलग अगर फ़्लैग बिट 0 सेट है, तो यह ज़रूरी है
9 uint8 मैसेज कोड अलग-अलग अगर फ़्लैग बिट 0 सेट है, तो यह ज़रूरी है
10 uint8 फ़्लैग पर निर्भर करता है:
  • बिट 0 सेट है: अतिरिक्त डेटा लंबाई, 6 से कम
  • बिट 1 सेट है: डेटा आईडी
अलग-अलग अगर फ़्लैग बिट 0 या 1 सेट है, तो ज़रूरी है
11 से n अतिरिक्त डेटा अलग-अलग ज़रूरी नहीं
n - 15 रैंडम वैल्यू (साल्ट) अलग-अलग ज़रूरी है

टेबल 1.2.2: रॉ अनुरोध (टाइप 0x10). एन्क्रिप्ट किए गए अनुरोध से डिक्रिप्ट किया गया टेबल 1.1. में अनुरोध

ऑक्टेट डेटा टाइप ब्यौरा वैल्यू
0 uint8 मैसेज किस तरह का है 0x01 = कुंजी-आधारित पेयरिंग रिस्पॉन्स
1 से 6 uint48 सेवा देने वाली कंपनी का सार्वजनिक (बीआर/ईडीआर) पता अलग-अलग
7 से 15 रैंडम वैल्यू (साल्ट) अलग-अलग

टेबल 1.3: रॉ रिस्पॉन्स. एन्क्रिप्ट (सुरक्षित) किया गया जवाब, इस दस्तावेज़ में जनरेट करने के लिए एन्क्रिप्ट किया गया है टेबल 1.4.

ऑक्टेट डेटा टाइप ब्यौरा वैल्यू
0 से 15 uint128 एन्क्रिप्ट (सुरक्षित) किया गया जवाब अलग-अलग

टेबल 1.4: एन्क्रिप्ट (सुरक्षित) किया गया जवाब, जो सेवा देने वाली कंपनी का भेजा जाता है. यह जवाब नौकरी ढूंढने वाले को सूचना के ज़रिए भेजा जाता है.

खासियत: पासकी

इस सुविधा का इस्तेमाल, कुंजी के आधार पर जोड़ने की प्रक्रिया के दौरान किया जाता है.

ऑक्टेट डेटा टाइप ब्यौरा वैल्यू
0 - 15 uint128 एन्क्रिप्ट (सुरक्षित) किया गया पासकी ब्लॉक अलग-अलग

टेबल 2.1: एन्क्रिप्ट (सुरक्षित) किया गया पासकी ब्लॉक. इस्तेमाल के लिए, बटन के आधार पर जोड़ने की प्रक्रिया देखें.

ऑक्टेट डेटा टाइप ब्यौरा वैल्यू
0 uint8 मैसेज किस तरह का है इनमें से एक:
  • 0x02 = नौकरी खोजने वाले की पासकी
  • 0x03 = सेवा देने वाले की पासकी
1 से 3 unit32 छह अंकों की पासकी अलग-अलग
4 से 15 रैंडम वैल्यू (साल्ट) अलग-अलग

टेबल 2.2: रॉ पासकी ब्लॉक. टेबल 2.1 का डिक्रिप्ट किया गया वर्शन.

विशेषता: खाता कुंजी

जोड़ने के बाद, फ़ास्ट पेयर सीकर, फ़ास्ट पेयर सुविधा देने वाली कंपनी के लिए खाता कुंजी लिखेगा.

ऑक्टेट डेटा टाइप ब्यौरा वैल्यू
0 - 15 uint128 खाता कुंजी (एन्क्रिप्ट की गई) अलग-अलग

लिखने का अनुरोध मिलने पर, फ़ास्ट पेयर की सुविधा देने वाली कंपनी को ये काम करना होगा:

  1. प्रोसेस में, चौथे चरण से जनरेट किए गए शेयर किए गए सीक्रेट का इस्तेमाल करके, खाता कुंजी डिक्रिप्ट करें.
    • सेवा देने वाली वे कंपनियां जिनके लिए बॉन्ड की ज़रूरत होती है (सामान्य):
      • डिक्रिप्ट करने से पहले, पुष्टि करें कि शेयर किए गए सीक्रेट का इस्तेमाल चरण 12 से पासकी अनुरोध को डिक्रिप्ट करने के लिए किया गया था. अगर इस सीक्रेट का इस्तेमाल करते हुए यह चरण पूरा नहीं हुआ है, तो इसे अनदेखा करें और बंद कर दें.
    • अब इस डिवाइस से जोड़ने के लिए, शेयर किए गए सीक्रेट (प्रोसेस में K) का फिर से इस्तेमाल नहीं किया जाएगा. प्रोसेस को रीस्टार्ट किए बिना, इस कुंजी से एन्क्रिप्ट (सुरक्षित) किए गए सभी अनुरोध अस्वीकार कर दिए जाएंगे.
  2. पुष्टि करें कि डिक्रिप्ट की गई वैल्यू, 0x04 से शुरू होती है. अगर ऐसा नहीं है, तो इसे अनदेखा करें और बंद करें.
  3. देखें कि मौजूद खाता कुंजी सूची में नई वैल्यू के लिए जगह है या नहीं.
  4. अगर नहीं, तो सूची से वह वैल्यू मिटाएं जिसे हाल ही में इस्तेमाल किया गया था.
  5. सूची में नई वैल्यू जोड़ें.

सूची में मौजूद खाता कुंजियों का इस्तेमाल कुंजी के आधार पर दूसरे डिवाइस से जोड़ने के दौरान किया जाता है.

खास बात: फ़र्मवेयर रिविज़न

इस विशेषता की मदद से सीकर, ज़रूरत के हिसाब से प्रोवाइडर के फ़र्मवेयर रिव्यू को पढ़ सकता है. इसे हमेशा नीचे दिया गया डेटा दिखेगा:

ऑक्टेट डेटा टाइप ब्यौरा वैल्यू
0 - var utf8s फ़र्मवेयर रिविज़न कोड अलग-अलग

अगर प्रोवाइडर पर एक से ज़्यादा फ़र्मवेयर (उदाहरण के लिए, बाएं बड, राइट बड, और केस के लिए तीन फ़र्मवेयर) हैं, तो भी इसे एक utf8 स्ट्रिंग में एन्क्रिप्ट (सुरक्षित) किया जाना चाहिए. सेवा देने वाली कंपनी, खास मामलों के लिए खास स्ट्रिंग भी दिखा सकती है:

  1. status-Update: अगर सेवा देने वाली कंपनी फ़िलहाल नए फ़र्मवेयर पर अपडेट कर रही है. इसके अलावा, सेवा देने वाली कंपनी, कुछ लोगों के लिए बनाए गए फ़र्मवेयर का वर्शन भी दिखा सकती है.

  2. status-abnormal: अगर सेवा देने वाली कंपनी किसी असामान्य स्थिति में है. उदाहरण के लिए, फ़र्मवेयर अपडेट न होने की वजह से वह गड़बड़ी हो गई है. इस वैल्यू की वजह से, नौकरी ढूंढने वाले को एक मैसेज दिखेगा, जिससे उपयोगकर्ता को पता चल जाएगा कि इस वैल्यू को अभी अपडेट करना ज़रूरी है.

डिवाइस ट्रैकिंग को रोकने के लिए, सेवा देने वाली कंपनी को फ़र्मवेयर रिविज़न की विशेषता के ऐक्सेस को सीमित करना चाहिए. सुझाई गई पाबंदियां:

  • बॉन्ड वाले डिवाइसों को कभी भी ऐक्सेस मिल सकता है
  • सेवा देने वाले व्यक्ति या कंपनी के खोजे जाने पर, सभी डिवाइस के पास ऐक्सेस होना चाहिए

खास बात: अतिरिक्त डेटा

इस सेवा की ये विशेषताएं होंगी.

फ़ास्ट पेयर सेवा की विशेषता एन्क्रिप्ट (सुरक्षित) किया गया है अनुमतियां यूयूआईडी
डेटा नहीं मैसेज लिखें और सूचना भेजें FE2C1237-8366-4814-8EB0-01DE32100BEA
फ़ास्ट पेयर सेवा की पुरानी विशेषता (1/2021/2021 को बंद होने वाली है) एन्क्रिप्ट (सुरक्षित) किया गया है अनुमतियां यूयूआईडी
डेटा नहीं मैसेज लिखें और सूचना भेजें 0x1237

इस एट्रिब्यूट में कुछ लिखने या इसके बारे में सूचना देने से पहले, FE2C1234-8366-4814-8EB0-01DE32100BEA की मदद से एक-दूसरे से हाथ मिलाया जाना चाहिए, ताकि एक-दूसरे को सबकी जानकारी मिल सके. AES-सीटीआर का इस्तेमाल, इस विशेषता के ज़रिए फ़्लो होने वाले डेटा को सुरक्षित रखने के लिए किया जाएगा. इसका एल्गोरिदम नीचे बताया गया है. यह मोड, 16-बाइट वाले ब्लॉक से ज़्यादा बड़े डेटा के लिए ज़्यादा सुरक्षित है. HMAC-SHA256 का इस्तेमाल डेटा का रखरखाव करने के लिए किया जाएगा, जिसके बारे में नीचे बताया गया है.

ऑक्टेट ब्यौरा वैल्यू
0 से 7 HMAC-SHA256 के पहले 8 बाइट. अलग-अलग
8 से 15 नहीं, इसका इस्तेमाल AES-सीटीआर से एन्क्रिप्ट (सुरक्षित) किया जाता है. अलग-अलग
16 - var एन्क्रिप्ट (सुरक्षित) किया गया डेटा. अलग-अलग

टेबल 3.1: डेटा पैकेट, जो सेवा देने वाली कंपनी का भेजा जाता है. यह सूचना, सेवा देने वाले को सूचना देकर या उसे लिखने वाले के ज़रिए भेजा जाता है.

ऑक्टेट डेटा टाइप ब्यौरा वैल्यू
0 - var byte array डेटा अलग-अलग, इसे टेबल 1.2.2 के डेटा आईडी के हिसाब से डिकोड करें:
  • 0x01(मनमुताबिक नाम): utf8s

टेबल 3.2: रॉ डेटा. एन्क्रिप्ट (सुरक्षित) किए गए डेटा से डिक्रिप्ट किया गया: टेबल 3.1.

जब किसी सूचना का अनुरोध किया जाता है (उदाहरण के लिए, टेबल 1.2.1 में बिट 2 के ज़रिए मनमुताबिक नाम का अनुरोध करना), तो फ़ास्ट पेयर की सुविधा देने वाली कंपनी को ये काम करना होगा:

  1. Nonce के लिए क्रिप्टोग्राफ़िक रूप से रैंडम 8 बाइट जनरेट करें.
  2. AES-सीटीआर का इस्तेमाल करके डेटा एन्क्रिप्ट करें, जिसमें 16-बाइट वाले हर ब्लॉक को इसके इस्तेमाल से जनरेट किया जाता है

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

    कहां

    1. AES बटन, प्रोसेस में बताए गए चौथे चरण का ही है.
    2. clearBlock[i] एक 16-बाइट वाला ब्लॉक है, जो डेटा[i * 16] से शुरू होता है. आखिरी ब्लॉक 16 बाइट से कम का हो सकता है.
  3. एन्क्रिप्ट (सुरक्षित) किया गया डेटा बनाने के लिए, Concat(EncryptBlock[0],EncryptBlock[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 64 बाइट की आउटर पैडिंग है. इसमें 0x5C की वैल्यू के तौर पर दोहराए गए बाइट होते हैं.
    3. ipad 64 बाइट की इनर पैडिंग है. इसमें 0x36 की वैल्यू के साथ दोहराए गए बाइट होते हैं.
  5. डेटा पैकेट के प्रीफ़िक्स के रूप में, HMAC-SHA256 से पहले 8 बाइट लें.

लिखने का अनुरोध मिलने पर, फ़ास्ट पेयर की सुविधा देने वाली कंपनी को ये काम करना होगा:

  1. HMAC-SHA256 के पहले आठ बाइट की जांच करके, डेटा की विश्वसनीयता की पुष्टि करें.
  2. एईएस-सीटीआर का इस्तेमाल करके एन्क्रिप्ट (सुरक्षित) किया गया डेटा डिक्रिप्ट करें, जहां हर ब्लॉक को इसके इस्तेमाल से जनरेट किया जाता है

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

    कहां

    1. एन्क्रिप्ट किया गया कोड[i], एन्क्रिप्ट किया गया डेटा[i * 16] से 16 बाइट का ब्लॉक शुरू होता है. आखिरी ब्लॉक का साइज़ 16 बाइट से कम हो सकता है.
    2. AES कुंजी, हैंडशेक से जनरेट की जाती है या उसकी पहचान की जाती है. उदाहरण के लिए,
      1. नाम देने के फ़्लो 1 में, यह ECDH से मिला है. इसलिए, इसे इस पेयरिंग के लिए फिर से इस्तेमाल नहीं किया जाएगा. प्रोसेस को रीस्टार्ट किए बिना, इस कुंजी के साथ एन्क्रिप्ट (सुरक्षित) किए गए सभी अनुरोध अस्वीकार कर दिए जाएंगे.
      2. नाम देने के दूसरे फ़्लो में, यह खाता कुंजी है.
  3. रॉ डेटा बनाने के लिए, Concat(clearBlock[0], clearBlock[1],...) का इस्तेमाल करें.