รหัสการตรวจสอบสิทธิ์ข้อความ
สตรีมข้อความใช้เพื่อกำหนดค่าสลับอุปกรณ์เสียง ดู ข้อความสลับอุปกรณ์เสียง สำหรับการกำหนดค่าที่สำคัญเหล่านี้ ผู้ให้บริการต้องตรวจสอบว่า GMSCore (โมดูลจับคู่ด่วน) เป็นผู้ส่งข้อความ ไม่ใช่แอปอื่นๆ ในอุปกรณ์ที่ค้นหา
สร้าง MAC (รหัสการตรวจสอบสิทธิ์ข้อความ)
อุปกรณ์ที่ค้นหา FP จะเพิ่มรหัสการตรวจสอบสิทธิ์ข้อความสำหรับข้อความการกำหนดค่าอุปกรณ์โดยใช้ HMAC-SHA256 MAC ของข้อความประกอบด้วย 8 ไบต์แรกของ
sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))
ที่ไหน
- K สร้างขึ้นโดย concat(คีย์บัญชี, 0 จำนวน 48 ไบต์)
- message คือข้อมูลเพิ่มเติมของสตรีมข้อความ
- nonce สร้างขึ้นโดย concat(session_nonce, message_nonce) โดย session nonce และ message nonce จะกำหนดไว้ในส่วนต่อไปนี้
- opad คือการเพิ่มระยะห่างภายนอก 64 ไบต์ ซึ่งประกอบด้วยไบต์ที่มีค่าซ้ำๆ
0x5C - ipad คือการเพิ่มระยะห่างภายใน 64 ไบต์ ซึ่งประกอบด้วยไบต์ที่มีค่า
0x36ซ้ำๆ
Session nonce และ message nonce
ผู้ให้บริการต้องตรวจสอบว่า nonce ไม่ซ้ำกันเพื่อป้องกันการโจมตีแบบ Replay เนื่องจากการรักษาการซิงโครไนซ์นาฬิกาหรือตัวนับในทั้งผู้ให้บริการและอุปกรณ์ที่ค้นหาไม่ใช่เรื่องง่าย ผู้ให้บริการจึงสร้าง session nonce (ต่อการเชื่อมต่อ) ซึ่งจะแชร์กับข้อความทั้งหมดระหว่างการเชื่อมต่อ ในขณะที่อุปกรณ์ที่ค้นหาจะสร้าง message nonce (ต่อข้อความ) ซึ่งจะสร้างขึ้นแบบสุ่มสำหรับแต่ละข้อความ nonce สำหรับสร้าง MAC ของแต่ละข้อความคือการรวมกันของ session nonce และ message nonce เช่น concat(session_nonce, message_nonce)
เราเพิ่ม session nonce ลงในกลุ่มเหตุการณ์ข้อมูลอุปกรณ์ดังนี้
| ชื่อกลุ่มข้อความ | ค่า |
|---|---|
| เหตุการณ์ข้อมูลอุปกรณ์ | 0x03 |
| ชื่อรหัสข้อความ | ค่า |
|---|---|
| Session nonce | 0x0A |
ระบบควรสร้างและส่ง session nonce ไปยังอุปกรณ์ที่ค้นหาเมื่อสตรีมข้อความเชื่อมต่อดังนี้
| อ็อกเท็ต | ประเภทข้อมูล | คำอธิบาย | ค่า |
|---|---|---|---|
| 0 | uint8 | เหตุการณ์ข้อมูลอุปกรณ์ | 0x03 |
| 1 | uint8 | Session nonce | 0x0A |
| 2 - 3 | uint16 | ความยาวข้อมูลเพิ่มเติม | 0x0008 |
| 4 - 11 | session nonce | แตกต่างกันไป |
หากต้องการส่งข้อความเมื่อต้องใช้ MAC อุปกรณ์ที่ค้นหาจะส่ง message nonce และ MAC พร้อมกับข้อความ
| อ็อกเท็ต | ประเภทข้อมูล | คำอธิบาย | ค่า |
|---|---|---|---|
| 0 | uint8 | กลุ่มข้อความ | แตกต่างกันไป |
| 1 | uint8 | รหัสข้อความ | แตกต่างกันไป |
| 2 - 3 | uint16 | ความยาวข้อมูลเพิ่มเติม(ความยาวข้อมูลเพิ่มเติม + 16) | แตกต่างกันไป |
| 4 - n | ข้อมูลเพิ่มเติม | แตกต่างกันไป | |
| n + 1 - n + 8 | Message nonce | แตกต่างกันไป | |
| 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 คือข้อมูลเพิ่มเติม (ไม่รวม message nonce และ MAC) ของ สตรีมข้อความ
หาก MAC ถูกต้อง ผู้ให้บริการจะต้องทำตามคำแนะนำของข้อความ มิฉะนั้น ผู้ให้บริการจะต้องส่ง NAK พร้อมเหตุผลของข้อผิดพลาด 0x3 - ไม่ได้รับอนุญาตเนื่องจากรหัสการตรวจสอบสิทธิ์ข้อความไม่ถูกต้อง