รหัสการตรวจสอบสิทธิ์ข้อความ
สตรีมข้อความใช้เพื่อกำหนดค่าการสลับอุปกรณ์เสียง โปรดดู ข้อความสลับเสียง สำหรับการกำหนดค่าที่สำคัญเหล่านี้ ผู้ให้บริการต้อง เพื่อให้แน่ใจว่าข้อความถูกส่งโดย GMSCore (โมดูลการจับคู่ด่วน) และไม่ใช่ แอปอื่นๆ ใน Seeker
สร้าง MAC (รหัสการตรวจสอบสิทธิ์ข้อความ)
FP Seeker จะเพิ่มรหัสการตรวจสอบสิทธิ์ข้อความสำหรับข้อความการกำหนดค่าอุปกรณ์ โดยใช้ 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); เซสชัน Nonce และ Message Nonce จะมีคำนิยามไว้ในส่วนต่อไปนี้
- opad คือระยะห่างจากขอบด้านนอก 64 ไบต์ซึ่งประกอบด้วยไบต์ซ้ำที่มีค่า
0x5C
- ipad คือระยะห่างจากขอบภายใน 64 ไบต์ซึ่งประกอบด้วยไบต์ซ้ำที่มีค่า
0x36
Nonce ของเซสชันและ Nonce ข้อความ
เพื่อป้องกันการโจมตีซ้ำ ผู้ให้บริการต้องตรวจสอบว่าไม่มี Nonce ซ้ำกัน นับตั้งแต่มีการบำรุงรักษานาฬิกาหรือการซิงค์ตัวนับในทั้ง 2 ผู้ให้บริการ และ Seeker ไม่ได้ดำเนินการอย่างตรงไปตรงมา ผู้ให้บริการจะสร้าง Nonce ของเซสชัน (ต่อการเชื่อมต่อ) ซึ่งจะแชร์กับข้อความทั้งหมดในระหว่างการเชื่อมต่อ ขณะที่ Seeker สร้าง Nonce ของข้อความ (ต่อข้อความ) ซึ่งจะสุ่ม สำหรับแต่ละข้อความ Nonce สำหรับการสร้าง MAC ของแต่ละข้อความคือ การผสมผสานระหว่าง Nonce ของเซสชันและ Nonce ของข้อความ นั่นคือ concat(session_nonce, message_nonce)
เราเพิ่ม Nonce ของเซสชันไปยังกลุ่มเหตุการณ์ข้อมูลอุปกรณ์:
ชื่อกลุ่มข้อความ | ค่า |
---|---|
เหตุการณ์ข้อมูลอุปกรณ์ | 0x |
ชื่อรหัสข้อความ | ค่า |
---|---|
Nonce ของเซสชัน | 0x0 |
ควรสร้าง Nonce ของเซสชันและส่งไปยัง Seeker เมื่อ RFCOMM เชื่อมต่อ:
อ็อกเท็ต | ประเภทข้อมูล | คำอธิบาย | ค่า |
---|---|---|---|
0 | uint8 | เหตุการณ์ข้อมูลอุปกรณ์ | 0x |
1 | uint8 | Nonce ของเซสชัน | 0x0 |
2-3 ปี | uint16 | ความยาวของข้อมูลเพิ่มเติม | 0x0008 |
4 - 11 ปี | Nonce ของเซสชัน | แตกต่างกัน |
หากต้องการส่งข้อความเมื่อต้องใช้ MAC ผู้ค้นหาจะส่งข้อความ Nonce และ MAC พร้อมกับข้อความ
อ็อกเท็ต | ประเภทข้อมูล | คำอธิบาย | ค่า |
---|---|---|---|
0 | uint8 | กลุ่มข้อความ | แตกต่างกัน |
1 | uint8 | รหัสข้อความ | แตกต่างกัน |
2-3 ปี | uint16 | ความยาวของข้อมูลเพิ่มเติม(ความยาวของข้อมูลเพิ่มเติม + 16) | แตกต่างกัน |
4 - n | ข้อมูลเพิ่มเติม | แตกต่างกัน | |
n + 1 - n + 8 | 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 - ไม่อนุญาตเนื่องจากรหัสการตรวจสอบสิทธิ์ข้อความไม่ถูกต้อง