รหัสการตรวจสอบสิทธิ์ข้อความ

สตรีมข้อความใช้เพื่อกำหนดค่าสลับอุปกรณ์เสียง ดู ข้อความสลับอุปกรณ์เสียง สำหรับการกำหนดค่าที่สำคัญเหล่านี้ ผู้ให้บริการต้องตรวจสอบว่า GMSCore (โมดูลจับคู่ด่วน) เป็นผู้ส่งข้อความ ไม่ใช่แอปอื่นๆ ในอุปกรณ์ที่ค้นหา

สร้าง MAC (รหัสการตรวจสอบสิทธิ์ข้อความ)

อุปกรณ์ที่ค้นหา FP จะเพิ่มรหัสการตรวจสอบสิทธิ์ข้อความสำหรับข้อความการกำหนดค่าอุปกรณ์โดยใช้ HMAC-SHA256 MAC ของข้อความประกอบด้วย 8 ไบต์แรกของ

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))

ที่ไหน

  1. K สร้างขึ้นโดย concat(คีย์บัญชี, 0 จำนวน 48 ไบต์)
  2. message คือข้อมูลเพิ่มเติมของสตรีมข้อความ
  3. nonce สร้างขึ้นโดย concat(session_nonce, message_nonce) โดย session nonce และ message nonce จะกำหนดไว้ในส่วนต่อไปนี้
  4. opad คือการเพิ่มระยะห่างภายนอก 64 ไบต์ ซึ่งประกอบด้วยไบต์ที่มีค่าซ้ำๆ 0x5C
  5. 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)))))

โดยที่

  1. K สร้างขึ้นโดย concat(account key, 48-byte ZEROs) และผู้ให้บริการ จะต้องข้ามคีย์บัญชีที่จัดเก็บไว้ทั้งหมดเพื่อยืนยัน MAC
  2. message คือข้อมูลเพิ่มเติม (ไม่รวม message nonce และ MAC) ของ สตรีมข้อความ

หาก MAC ถูกต้อง ผู้ให้บริการจะต้องทำตามคำแนะนำของข้อความ มิฉะนั้น ผู้ให้บริการจะต้องส่ง NAK พร้อมเหตุผลของข้อผิดพลาด 0x3 - ไม่ได้รับอนุญาตเนื่องจากรหัสการตรวจสอบสิทธิ์ข้อความไม่ถูกต้อง