विशेषताएं
फ़ास्ट पेयर सेवा
फ़ास्ट पेयर की सुविधा देने वाली कंपनी के पास नीचे दी गई 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 |
फ़्लैग
|
अलग-अलग | ज़रूरी है |
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 | अतिरिक्त डेटा | अलग-अलग | ज़रूरी नहीं | |
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 |
मैसेज किस तरह का है | इनमें से एक:
|
1 से 3 | unit32 |
छह अंकों की पासकी | अलग-अलग |
4 से 15 | रैंडम वैल्यू (साल्ट) | अलग-अलग |
टेबल 2.2: रॉ पासकी ब्लॉक. टेबल 2.1 का डिक्रिप्ट किया गया वर्शन.
विशेषता: खाता कुंजी
जोड़ने के बाद, फ़ास्ट पेयर सीकर, फ़ास्ट पेयर सुविधा देने वाली कंपनी के लिए खाता कुंजी लिखेगा.
ऑक्टेट | डेटा टाइप | ब्यौरा | वैल्यू |
---|---|---|---|
0 - 15 | uint128 |
खाता कुंजी (एन्क्रिप्ट की गई) | अलग-अलग |
लिखने का अनुरोध मिलने पर, फ़ास्ट पेयर की सुविधा देने वाली कंपनी को ये काम करना होगा:
- प्रोसेस में, चौथे चरण से जनरेट किए गए शेयर किए गए सीक्रेट का इस्तेमाल करके, खाता कुंजी डिक्रिप्ट करें.
- सेवा देने वाली वे कंपनियां जिनके लिए बॉन्ड की ज़रूरत होती है (सामान्य):
- डिक्रिप्ट करने से पहले, पुष्टि करें कि शेयर किए गए सीक्रेट का इस्तेमाल चरण 12 से पासकी अनुरोध को डिक्रिप्ट करने के लिए किया गया था. अगर इस सीक्रेट का इस्तेमाल करते हुए यह चरण पूरा नहीं हुआ है, तो इसे अनदेखा करें और बंद कर दें.
- अब इस डिवाइस से जोड़ने के लिए, शेयर किए गए सीक्रेट (प्रोसेस में K) का फिर से इस्तेमाल नहीं किया जाएगा. प्रोसेस को रीस्टार्ट किए बिना, इस कुंजी से एन्क्रिप्ट (सुरक्षित) किए गए सभी अनुरोध अस्वीकार कर दिए जाएंगे.
- सेवा देने वाली वे कंपनियां जिनके लिए बॉन्ड की ज़रूरत होती है (सामान्य):
- पुष्टि करें कि डिक्रिप्ट की गई वैल्यू,
0x04
से शुरू होती है. अगर ऐसा नहीं है, तो इसे अनदेखा करें और बंद करें. - देखें कि मौजूद खाता कुंजी सूची में नई वैल्यू के लिए जगह है या नहीं.
- अगर नहीं, तो सूची से वह वैल्यू मिटाएं जिसे हाल ही में इस्तेमाल किया गया था.
- सूची में नई वैल्यू जोड़ें.
सूची में मौजूद खाता कुंजियों का इस्तेमाल कुंजी के आधार पर दूसरे डिवाइस से जोड़ने के दौरान किया जाता है.
खास बात: फ़र्मवेयर रिविज़न
इस विशेषता की मदद से सीकर, ज़रूरत के हिसाब से प्रोवाइडर के फ़र्मवेयर रिव्यू को पढ़ सकता है. इसे हमेशा नीचे दिया गया डेटा दिखेगा:
ऑक्टेट | डेटा टाइप | ब्यौरा | वैल्यू |
---|---|---|---|
0 - var | utf8s |
फ़र्मवेयर रिविज़न कोड | अलग-अलग |
अगर प्रोवाइडर पर एक से ज़्यादा फ़र्मवेयर (उदाहरण के लिए, बाएं बड, राइट बड, और केस के लिए तीन फ़र्मवेयर) हैं, तो भी इसे एक utf8 स्ट्रिंग में एन्क्रिप्ट (सुरक्षित) किया जाना चाहिए. सेवा देने वाली कंपनी, खास मामलों के लिए खास स्ट्रिंग भी दिखा सकती है:
status-Update: अगर सेवा देने वाली कंपनी फ़िलहाल नए फ़र्मवेयर पर अपडेट कर रही है. इसके अलावा, सेवा देने वाली कंपनी, कुछ लोगों के लिए बनाए गए फ़र्मवेयर का वर्शन भी दिखा सकती है.
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 के डेटा आईडी के हिसाब से डिकोड करें:
|
टेबल 3.2: रॉ डेटा. एन्क्रिप्ट (सुरक्षित) किए गए डेटा से डिक्रिप्ट किया गया: टेबल 3.1.
जब किसी सूचना का अनुरोध किया जाता है (उदाहरण के लिए, टेबल 1.2.1 में बिट 2 के ज़रिए मनमुताबिक नाम का अनुरोध करना), तो फ़ास्ट पेयर की सुविधा देने वाली कंपनी को ये काम करना होगा:
- Nonce के लिए क्रिप्टोग्राफ़िक रूप से रैंडम 8 बाइट जनरेट करें.
AES-सीटीआर का इस्तेमाल करके डेटा एन्क्रिप्ट करें, जिसमें 16-बाइट वाले हर ब्लॉक को इसके इस्तेमाल से जनरेट किया जाता है
encryptedBlock[i] = clearBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
कहां
- AES बटन, प्रोसेस में बताए गए चौथे चरण का ही है.
- clearBlock[i] एक 16-बाइट वाला ब्लॉक है, जो डेटा[i * 16] से शुरू होता है. आखिरी ब्लॉक 16 बाइट से कम का हो सकता है.
एन्क्रिप्ट (सुरक्षित) किया गया डेटा बनाने के लिए, Concat(EncryptBlock[0],EncryptBlock[1],...) का इस्तेमाल करें.
इसके ज़रिए HMAC-SHA256 जनरेट करें
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, encrypted_data)))))
कहां
- K, Concat(shared_secret, 48-बाइट ZEROs) से जनरेट होता है, shared_secret, प्रक्रिया के चौथे चरण से है.
- opad 64 बाइट की आउटर पैडिंग है. इसमें
0x5C
की वैल्यू के तौर पर दोहराए गए बाइट होते हैं. - ipad 64 बाइट की इनर पैडिंग है. इसमें
0x36
की वैल्यू के साथ दोहराए गए बाइट होते हैं.
डेटा पैकेट के प्रीफ़िक्स के रूप में, HMAC-SHA256 से पहले 8 बाइट लें.
लिखने का अनुरोध मिलने पर, फ़ास्ट पेयर की सुविधा देने वाली कंपनी को ये काम करना होगा:
- HMAC-SHA256 के पहले आठ बाइट की जांच करके, डेटा की विश्वसनीयता की पुष्टि करें.
एईएस-सीटीआर का इस्तेमाल करके एन्क्रिप्ट (सुरक्षित) किया गया डेटा डिक्रिप्ट करें, जहां हर ब्लॉक को इसके इस्तेमाल से जनरेट किया जाता है
clearBlock[i] = encryptedBlock[i] ^ AES(key, concat((uint8) i, 0x00000000000000, nonce))
कहां
- एन्क्रिप्ट किया गया कोड[i], एन्क्रिप्ट किया गया डेटा[i * 16] से 16 बाइट का ब्लॉक शुरू होता है. आखिरी ब्लॉक का साइज़ 16 बाइट से कम हो सकता है.
- AES कुंजी, हैंडशेक से जनरेट की जाती है या उसकी पहचान की जाती है. उदाहरण के लिए,
- नाम देने के फ़्लो 1 में, यह ECDH से मिला है. इसलिए, इसे इस पेयरिंग के लिए फिर से इस्तेमाल नहीं किया जाएगा. प्रोसेस को रीस्टार्ट किए बिना, इस कुंजी के साथ एन्क्रिप्ट (सुरक्षित) किए गए सभी अनुरोध अस्वीकार कर दिए जाएंगे.
- नाम देने के दूसरे फ़्लो में, यह खाता कुंजी है.
रॉ डेटा बनाने के लिए, Concat(clearBlock[0], clearBlock[1],...) का इस्तेमाल करें.