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
- K, concat(hesap anahtarı, 48 baytlık SIFIRLAR) tarafından oluşturulur.
- message, Message akışının ek verileridir.
- 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.
- opad,
0x5Cdeğerine sahip tekrarlanan baytlardan oluşan 64 baytlık dış dolgudur. - ipad,
0x36değ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:
- 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. - 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.