İleti Kimlik Doğrulama Kodu

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

MAC oluştur (ileti kimlik doğrulama kodu)

FP Seeker, HMAC-SHA256 kullanarak cihaz yapılandırma mesajları için bir mesaj kimlik doğrulama kodu ekler. İletinin MAC adresi ilk 8 bayttan oluşur:

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

burada:

  1. K, concat(hesap anahtarı, 48 bayt SIFIR) tarafından oluşturulur.
  2. message, İleti akışının ek verileridir.
  3. nonce, concat(session_nonce, Message_nonce) tarafından oluşturulur; oturum tek seferlik rastgele sayısı ve mesaj tek seferlik rastgele sayısı aşağıdaki bölümde tanımlanır.
  4. opad, 0x5C değerli tekrarlanan baytlardan oluşan 64 baytlık dış dolgudur.
  5. ipad, 0x36 değerli tekrarlanan baytlardan oluşan 64 baytlık iç dolgudur.

Oturum tek seferlik rastgele sayısı ve mesaj tek seferlik rastgele sayısı

Tekrar saldırısını önlemek için Sağlayıcı'nın tek seferlik bir sayının tekrarlanmadığından emin olması gerekir. Hem Sağlayıcı hem de Seeker'da saat veya sayaç senkronizasyonunun korunması basit olmadığından, Sağlayıcı oturum tek seferlik sıklığını (bağlantı başına) oluşturur. Bu oturum, bağlantı sırasında tüm mesajlarla paylaşılır ve Arayan kişi, her mesaj için rastgele oluşturulan tek seferlik mesaj sayısı (mesaj başına) oluşturur. Her bir mesajın MAC tek seferlik rastgele sayısı, oturum tek seferlik rastgele sayısı ve mesaj tek seferlik rastgele sayısının birleşimidir. Örneğin, concat(session_nonce, Message_nonce).

Cihaz bilgileri etkinlik grubuna bir oturum tek seferlik rastgele sayısı eklenir:

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

RFCOMM bağlandığında oturum tek seferlik rastgele sayısı oluşturulmalı ve Seeker'a gönderilmelidir:

Sekizli 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 0 x 0.008
4 - 11 oturum tek seferlik rastgele sayısı değişiklik gösterir

MAC gerektiğinde mesaj göndermek için Arayan kişi, mesaj ile birlikte MAC tek seferlik bir mesaj gönderir.

Sekizli Veri Türü Açıklama Değer
0 uint8 Mesaj grubu değişiklik gösterir
1 uint8 Mesaj kodu değişiklik gösterir
2 - 3 uint16 Ek veri uzunluğu(ek veri uzunluğu + 16) değişiklik gösterir
4-H Ek veriler değişiklik gösterir
n + 1 - n + 8 Mesaj tek seferlik rastgele sayısı değişiklik gösterir
n + 9 - n + 16 İleti kimlik doğrulama kodu değişiklik gösterir

MAC doğrulama (ileti doğrulama kodu)

Mesaj kimlik doğrulama kodunu içeren bir mesaj aldıktan sonra Sağlayıcı, bunu oluşturma işleviyle aynı işlevi kullanarak doğrular. Yani, alınan MAC, bu dosyanın ilk 8 baytına

 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ı çeker.
  2. message, Mesaj akışının ek verileridir (mesaj tek seferlik rastgele sayısı ve MAC hariç).

MAC doğruysa Sağlayıcı, mesajın talimatlarını uygulamalıdır. Aksi takdirde Sağlayıcı, yanlış mesaj kimlik doğrulama kodu nedeniyle izin verilmiyor olan 0x3 hata nedenini içeren bir NAK gönderir.