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