Mesaj Doğrulama Kodu

Mesaj akışları, Ses Geçişi'ni yapılandırmak için kullanılır. Ses Geçişi mesajları başlıklı makaleyi inceleyin. Bu önemli yapılandırmalar için Sağlayıcı, mesajın GMSCore (Hızlı Eşleme modülü) tarafından gönderildiğinden ve Arayıcı'daki başka bir uygulama tarafından gönderilmediğinden emin olmalıdır.

MAC (mesaj doğrulama kodu) oluşturma

FP Seeker, HMAC-SHA256 kullanarak cihaz yapılandırma mesajları için bir mesaj kimlik doğrulama kodu ekler. İletinin MAC'si şu öğelerin ilk 8 baytından oluşur:

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

burada

  1. K, concat(hesap anahtarı, 48 baytlık SIFIRLAR) tarafından oluşturulur.
  2. message, Message akışının ek verileridir.
  3. nonce, concat(session_nonce, message_nonce) tarafından oluşturulur. Oturum nonce'u ve ileti nonce'u aşağıdaki bölümde tanımlanmıştır.
  4. opad, 0x5C değerine sahip tekrarlanan baytlardan oluşan 64 baytlık dış dolgudur.
  5. ipad, 0x36 değerine sahip tekrarlanan baytlardan oluşan 64 baytlık iç dolgudur.

Oturum nonce'ı ve mesaj nonce'ı

Yeniden oynatma saldırısını önlemek için Sağlayıcı, tek seferlik rastgele sayının tekrarlanmadığından emin olmalıdır. Hem Sağlayıcı hem de Arayıcı'da saat veya sayaç senkronizasyonunu korumak kolay olmadığından Sağlayıcı, bağlantı sırasında tüm mesajlarla paylaşılan oturum tek seferlik rastgele sayısını (bağlantı başına) oluşturur. Arayıcı ise her mesaj için rastgele oluşturulan mesaj tek seferlik rastgele sayısını (mesaj başına) oluşturur. Her mesajın MAC'ini oluşturmak için kullanılan nonce, oturum nonce'u ve mesaj nonce'unun birleşimidir. Yani concat(session_nonce, message_nonce).

Cihaz bilgileri etkinlik grubuna bir oturum nonce'u ekleriz:

Mesaj Grubu Adı Değer
Cihaz bilgileri etkinliği 0x03
Mesaj Kod Adı Değer
Oturum tek seferlik rastgele sayısı 0x0A

Oturum tek seferlik rastgele sayısı, Message Stream bağlandığında oluşturulmalı ve Seeker'a gönderilmelidir:

Octet Veri Türü Açıklama Değer
0 uint8 Cihaz bilgileri etkinliği 0x03
1 uint8 Oturum tek seferlik rastgele sayısı 0x0A
2 - 3 uint16 Ek veri uzunluğu 0x0008
4 - 11 oturum tek seferlik rastgele sayısı değişir

MAC'nin gerekli olduğu durumlarda mesaj göndermek için Arayan, mesajla birlikte bir mesaj nonce'u ve MAC gönderir.

Octet Veri Türü Açıklama Değer
0 uint8 Mesaj grubu değişir
1 uint8 Mesaj kodu değişir
2 - 3 uint16 Ek veri uzunluğu(ek veri uzunluğu + 16) değişir
4 - n Ek veriler değişir
n + 1 - n + 8 İleti nonce'ı değişir
n + 9 - n + 16 Mesaj doğrulama kodu değişir

MAC'yi (mesaj doğrulama kodu) doğrulama

Sağlayıcı, ileti kimlik doğrulama kodu içeren bir ileti aldığında, oluşturma işleviyle aynı işlevi kullanarak iletiyi doğrular. Yani, alınan MAC,

 sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))

Bu örnekte:

  1. K, concat(account key, 48-byte ZEROs) tarafından oluşturulur ve Sağlayıcı, MAC'yi doğrulamak için depolanan tüm hesap anahtarlarını kullanır.
  2. message, Mesaj akışının ek verileridir (mesaj nonce'ı ve MAC hariç).

MAC doğruysa Sağlayıcı, mesajın talimatını uygular. Aksi takdirde Sağlayıcı, hata nedeni olarak 0x3 - yanlış mesaj kimlik doğrulama kodu nedeniyle izin verilmiyor ile birlikte bir NAK gönderir.