मैसेज की पुष्टि करने वाला कोड
मैसेज स्ट्रीम का इस्तेमाल, ऑडियो स्विच को कॉन्फ़िगर करने के लिए किया जाता है. ऑडियो स्विच मैसेज देखें. इन ज़रूरी कॉन्फ़िगरेशन के लिए, सेवा देने वाली कंपनी को यह पक्का करना होगा कि मैसेज GMSCore (फ़ास्ट पेयर मॉड्यूल) से भेजा गया हो, न कि Seeker के किसी दूसरे ऐप्लिकेशन से.
MAC (मैसेज की पुष्टि करने वाला कोड) जनरेट करें
FP Seeker, डिवाइस कॉन्फ़िगरेशन मैसेज के लिए HMAC-SHA256 का इस्तेमाल करके, मैसेज की पुष्टि करने वाला कोड जोड़ता है. मैसेज के MAC में पहले 8 बाइट होती हैं:
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))
कहां
- K को Concat(खाता कुंजी, 48-बाइट ZEROs) से जनरेट किया जाता है.
- मैसेज, मैसेज स्ट्रीम का अतिरिक्त डेटा है.
- nonce Concat(session_nonce, message_nonce) जनरेट करता है; सेशन नॉन्स और मैसेज नॉन्स के बारे में इस सेक्शन में बताया गया है.
- opad, आउटर पैडिंग का 64 बाइट होता है. इसमें
0x5C
वैल्यू वाली दोहराई गई बाइट होती हैं. - ipad की इनर पैडिंग की 64 बाइट होती है. इसमें
0x36
की वैल्यू वाले दोहराए गए बाइट होते हैं.
सेशन का नॉन्स और मैसेज का नॉन्स
रीप्ले हमले को रोकने के लिए, सेवा देने वाली कंपनी को यह पक्का करना होगा कि नॉन्स को दोहराया न गया हो. सेवा देने वाली कंपनी और सीकर, दोनों के लिए घड़ी या काउंटर सिंक की सुविधा को बनाए रखना आसान नहीं है. इसलिए, सेवा देने वाली कंपनी, सेशन नॉन्स (हर कनेक्शन पर) जनरेट करती है, जिसे कनेक्शन के दौरान सभी मैसेज के साथ शेयर किया जाता है. वहीं, सीकर बिना किसी मैसेज (हर मैसेज) को जनरेट करता है, जो हर मैसेज के लिए रैंडम तरीके से जनरेट होता है. हर मैसेज का MAC जनरेट करने के लिए नॉन्स, सेशन नॉन्स और मैसेज नॉन्स का कॉम्बिनेशन होता है, जैसे कि Concat(session_nonce, message_nonce).
हम डिवाइस की जानकारी वाले इवेंट ग्रुप में एक सेशन नॉन्स जोड़ते हैं:
मैसेज ग्रुप का नाम | वैल्यू |
---|---|
डिवाइस की जानकारी से जुड़ा इवेंट | 0x03 |
मैसेज कोड का नाम | वैल्यू |
---|---|
सेशन का नॉन्स | 0x0ए |
RFCOMM के कनेक्ट होने पर, सेशन का नॉन्स जनरेट होना चाहिए और सीकर को भेजना चाहिए:
ऑक्टेट | डेटा टाइप | ब्यौरा | वैल्यू |
---|---|---|---|
0 | uint8 | डिवाइस की जानकारी से जुड़ा इवेंट | 0x03 |
1 | uint8 | सेशन का नॉन्स | 0x0ए |
2 से 3 | uint16 | अतिरिक्त डेटा लंबाई | 0x0008 |
4 से 11 | सेशन नॉन्स | अलग-अलग |
एमएसी की ज़रूरत पड़ने पर मैसेज भेजने के लिए, सीकर नॉन्स और एमएसी को मैसेज के साथ भेजेगा.
ऑक्टेट | डेटा टाइप | ब्यौरा | वैल्यू |
---|---|---|---|
0 | uint8 | मैसेज ग्रुप | अलग-अलग |
1 | uint8 | मैसेज कोड | अलग-अलग |
2 से 3 | uint16 | डेटा की अतिरिक्त लंबाई(डेटा की लंबाई + 16) | अलग-अलग |
4 - नहीं | अतिरिक्त डेटा | अलग-अलग | |
n + 1 - n + 8 | मैसेज नॉन्स | अलग-अलग | |
n + 9 - n + 16 | मैसेज की पुष्टि करने वाला कोड | अलग-अलग |
MAC (मैसेज की पुष्टि करने वाला कोड) की पुष्टि करें
मैसेज की पुष्टि करने वाले कोड के साथ मैसेज मिलने पर, सेवा देने वाली कंपनी इसकी पुष्टि करेगी. इसके लिए, वही फ़ंक्शन जनरेट करने वाले फ़ंक्शन का इस्तेमाल करेगा. इसका मतलब है कि मिलने वाला MAC, पहले 8 बाइट के बराबर होना चाहिए
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))
कहां:
- K को
concat(account key, 48-byte ZEROs)
जनरेट करता है और सेवा देने वाली कंपनी MAC की पुष्टि करने के लिए, सेव की गई सभी खाता कुंजियों को पार करेगी. - message, मैसेज स्ट्रीम का अतिरिक्त डेटा है. इसमें मैसेज नॉन्स और एमएसी शामिल नहीं है.
अगर MAC सही है, तो सेवा देने वाली कंपनी को मैसेज में दिए गए निर्देशों का पालन करना होगा. अगर ऐसा नहीं होता है, तो सेवा देने वाली कंपनी, गड़बड़ी की वजह के साथ एनकेके भेजेगी. 0x3 वाला कोड, मैसेज की पुष्टि करने वाले गलत कोड की वजह से अनुमति नहीं होगी.