Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
İleti Kimlik Doğrulama Kodu
Mesaj akışları, Ses Geçişi'ni yapılandırmak için kullanılır. Bkz.
Ses geçişi mesajları. Sağlayıcının, bu önemli yapılandırmalar için
iletinin GMSCore (Hızlı Eşleme modülü) tarafından gönderildiğinden
diğer uygulamaya göz atın.
MAC oluştur (mesaj kimlik doğrulama kodu)
FP Seeker, cihaz yapılandırma mesajları için bir mesaj kimlik doğrulama kodu ekler
(HMAC-SHA256 kullanarak). Mesajın MAC'si, aşağıdakilerin 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 ZEROs) tarafından oluşturulur.
- message, Mesaj akışının ek verileridir.
- nonce, concat(session_nonce, Message_nonce); tarafından oluşturulur. oturum
tek seferlik rastgele sayı ve ileti tek seferlik rastgele sayısı aşağıdaki bölümde tanımlanmıştır.
- opad, 64 baytlık dış dolgudur ve değerli tekrarlanan baytlardan oluşur.
0x5C
.
- ipad, değerli tekrarlanan baytlardan oluşan 64 baytlık iç dolgudur
0x36
.
Oturum tek seferlik rastgele sayısı ve mesaj tek seferlik rastgele sayısı
Sağlayıcı, tekrar oynatma saldırısını önlemek için tek seferlik rastgele bir sayının tekrarlamanın
tekrarlanır. Her iki Sağlayıcıda saat veya sayaç senkronizasyonu sürdürüldüğünden,
ve Arayan kişi basit değil. Sağlayıcı oturumun tek seferlik rastgele sayısını oluşturuyor.
(bağlantı başına) ve bağlantı sırasında tüm iletilerle paylaşılır.
Arayan ise mesajı rastgele (mesaj başına) üretir.
oluşturulur. Her mesajın MAC'sini oluşturan tek seferlik rastgele sayı
Oturum tek seferlik rastgele sayısı ve mesaj tek seferlik rastgele sayısının kombinasyonu, ör.
concat(session_nonce, Message_nonce).
Cihaz bilgileri etkinlik grubuna bir oturum tek seferlik rastgele eklenir:
Mesaj Grubu Adı |
Değer |
Cihaz bilgileri etkinliği |
0x03 |
Mesaj Kodu Adı |
Değer |
Oturum tek seferlik rastgele sayısı |
0x0A |
RFCOMM olduğunda oturum tek seferlik rastgele sayısı oluşturulmalı ve Arayan'a gönderilmelidir.
şunları yapar:
Sekiz |
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şiklik gösterir |
MAC gerekli olduğunda mesaj göndermek için arayan, tek seferlik bir mesaj gönderecektir.
ve MAC de görüntülerle bir araya getirir.
Sekiz |
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 - n |
|
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 |
|
Mesaj kimlik doğrulama kodu |
değişiklik gösterir |
MAC'i doğrula (mesaj kimlik doğrulama kodu)
Sağlayıcı, mesaj kimlik doğrulama kodunu içeren bir mesaj aldığında
oluşturan işlevle aynı işlevi kullanarak bunu doğrulaması gerekir. Yani,
alınan MAC, alanın ilk 8 baytına eşit olmalıdır
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ı
sağlanan tüm hesap anahtarlarını aktarmalıdır.
- message şu ek verileri içerir (ileti tek seferlik rastgele sayısı ve MAC'si hariç)
Mesaj akışını takip edin.
MAC doğruysa, Sağlayıcı, Sözleşme’nin
mesajını alırsınız. Aksi takdirde, Sağlayıcı 0x3 hata nedeni ile bir NAK gönderecektir -
nedeniyle izin verilmiyor.
Aksi belirtilmediği sürece bu sayfanın içeriği Creative Commons Atıf 4.0 Lisansı altında ve kod örnekleri Apache 2.0 Lisansı altında lisanslanmıştır. Ayrıntılı bilgi için Google Developers Site Politikaları'na göz atın. Java, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.
Son güncelleme tarihi: 2025-08-13 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-08-13 UTC."],[[["\u003cp\u003eMessage Authentication Codes (MACs) are used to verify that Fast Pair configuration messages originate from Google Mobile Services (GMSCore) and not other apps.\u003c/p\u003e\n"],["\u003cp\u003eMACs are generated using HMAC-SHA256, incorporating session and message nonces to prevent replay attacks.\u003c/p\u003e\n"],["\u003cp\u003eProviders initiate a session nonce upon RFCOMM connection and seekers generate a unique message nonce for each message.\u003c/p\u003e\n"],["\u003cp\u003eTo verify a message, providers compute the MAC using the received data and compare it with the received MAC, using stored account keys for verification.\u003c/p\u003e\n"],["\u003cp\u003eIf MAC verification fails, the provider sends a NAK message indicating an incorrect authentication code.\u003c/p\u003e\n"]]],["Message Authentication Code (MAC) ensures messages originate from GMSCore. The Seeker generates a MAC using HMAC-SHA256, derived from a key (K), nonce, and message data. The nonce combines a per-connection session nonce (Provider-generated) and a per-message nonce (Seeker-generated). The Seeker transmits the message nonce and MAC with each message. The Provider verifies the MAC using the same function and stored keys, acting on the message only if the MAC is correct. If not, a NAK is sent.\n"],null,["Message Authentication Code\n---------------------------\n\n[Message streams](/nearby/fast-pair/specifications/extensions/messagestream#MessageStream \"message stream\") are used to configure Audio switch, see\n[Audio switch messages](/nearby/fast-pair/specifications/extensions/sass#MacOfSassMessages \"MAC of Audio switch Messages\"). For these important configurations, the Provider needs\nto ensure that the message is sent by GMSCore (Fast Pair module) and not any\nother app on the Seeker.\n| **Note:** Google recommends implementing the [Cryptographic Test Cases](/nearby/fast-pair/specifications/appendix/cryptotestcases \"Link to the Cryptographic Test Cases.\") to ease verification of these requirements.\n\n### Generate MAC (message authentication code)\n\nFP Seeker adds a message authentication code for device configuration messages\nusing HMAC-SHA256. The MAC of the message consists of the first 8 bytes of: \n\n sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(nonce, message)))))\n\nwhere\n\n1. *K* is generated by concat(account key, 48-byte ZEROs).\n2. *message* is the additional data of Message stream.\n3. *nonce* is generated by concat(session_nonce, message_nonce); session nonce and message nonce are defined in the following section.\n4. *opad* is 64 bytes of outer padding, consisting of repeated bytes valued `0x5C`.\n5. *ipad* is 64 bytes of inner padding, consisting of repeated bytes valued `0x36`.\n\n### Session nonce and message nonce\n\nTo prevent a replay attack, the Provider needs to ensure that a nonce is not\nrepeated. Since maintaining clock or counter synchronization on both Provider\nand Seeker is not straightforward, the Provider generates the session nonce\n(per connection), which is shared with all messages during the connection,\nwhile the Seeker generates the message nonce (per message), which is randomly\ngenerated for each message. The nonce for generating the MAC of each message is\nthe combination of session nonce and message nonce, i.e.\nconcat(session_nonce, message_nonce).\n\nWe add a session nonce to the Device information event group:\n\n| Message Group Name | Value |\n|--------------------------|-------|\n| Device information event | 0x03 |\n\n| Message Code Name | Value |\n|-------------------|-------|\n| Session nonce | 0x0A |\n\nThe session nonce should be generated and sent to the Seeker when RFCOMM\nconnects:\n\n| Octet | Data Type | Description | Value |\n|--------|-----------|--------------------------|----------|\n| 0 | uint8 | Device information event | 0x03 |\n| 1 | uint8 | Session nonce | 0x0A |\n| 2 - 3 | uint16 | Additional data length | 0x0008 |\n| 4 - 11 | | session nonce | *varies* |\n\nTo send a message when a MAC is required, the Seeker will send a message nonce\nand the MAC together with the message.\n\n| Octet | Data Type | Description | Value |\n|----------------|-----------|---------------------------------------------------------|----------|\n| 0 | uint8 | Message group | *varies* |\n| 1 | uint8 | Message code | *varies* |\n| 2 - 3 | uint16 | Additional data length(the additional data length + 16) | *varies* |\n| 4 - n | | Additional data | *varies* |\n| n + 1 - n + 8 | | Message nonce | *varies* |\n| n + 9 - n + 16 | | Message authentication code | *varies* |\n\n### Verify MAC (message authentication code)\n\nUpon receiving a message with the message authentication code, the Provider\nshall verify it by using the same function as the generating function. That is,\nthe received MAC should be equal to the first 8 bytes of \n\n sha256(concat((K ^ opad), sha256(concat((K ^ ipad), concat(section_nonce, message_nonce, message)))))\n\nwhere:\n\n1. *K* is generated by `concat(account key, 48-byte ZEROs)`, and the Provider shall traverse all stored account keys to verify the MAC.\n2. *message* is the additional data (excluding message nonce and MAC) of the Message stream.\n\nIf the MAC is correct, then the Provider shall follow the instruction of the\nmessage. Otherwise, the Provider shall send a NAK with the error reason, 0x3 -\nnot allowed due to incorrect message authentication code."]]